diff --git a/native/tooltip/nux-tips-overlay.react.js b/native/tooltip/nux-tips-overlay.react.js
--- a/native/tooltip/nux-tips-overlay.react.js
+++ b/native/tooltip/nux-tips-overlay.react.js
@@ -8,7 +8,6 @@
 import type { AppNavigationProp } from '../navigation/app-navigator.react.js';
 import { OverlayContext } from '../navigation/overlay-context.js';
 import type { NavigationRoute } from '../navigation/route-names.js';
-import { type DimensionsInfo } from '../redux/dimensions-updater.react.js';
 import { useSelector } from '../redux/redux-utils.js';
 import { useStyles } from '../themes/colors.js';
 import type {
@@ -18,8 +17,6 @@
 import type { LayoutEvent } from '../types/react-native.js';
 import {
   AnimatedView,
-  type ViewStyle,
-  type AnimatedViewStyle,
   type WritableAnimatedStyleObj,
   type ReanimatedTransform,
 } from '../types/styles.js';
@@ -76,24 +73,6 @@
   ...Base,
   +progress: Node,
 };
-type NUXTipsOverlayProps<Base> = {
-  ...Base,
-  // Redux state
-  +dimensions: DimensionsInfo,
-  +position: Animated.Node,
-  +styles: $ReadOnly<typeof unboundStyles>,
-  +closeTip: () => mixed,
-  +contentContainerStyle: ViewStyle,
-  +opacityStyle: AnimatedViewStyle,
-  +buttonStyle: ViewStyle,
-  +tipHorizontalOffset: Value,
-  +onTipContainerLayout: (event: LayoutEvent) => void,
-  +tipContainerOpacity: Node,
-  +tipVerticalBelow: Node,
-  +tipHorizontal: Node,
-  +tipScale: Node,
-  +tipContainerStyle: AnimatedViewStyle,
-};
 
 const tipHeight: number = 30;
 const margin: number = 20;
@@ -102,86 +81,20 @@
   ButtonComponent: React.ComponentType<ButtonProps<BaseNUXTipsOverlayProps>>,
   MenuComponent: React.ComponentType<BaseNUXTipsOverlayProps>,
 ): React.ComponentType<BaseNUXTipsOverlayProps> {
-  class NUXTipsOverlay extends React.PureComponent<
-    NUXTipsOverlayProps<BaseNUXTipsOverlayProps>,
-  > {
-    constructor(props: NUXTipsOverlayProps<BaseNUXTipsOverlayProps>) {
-      super(props);
-    }
-
-    render(): React.Node {
-      const {
-        dimensions,
-        position,
-        styles,
-        opacityStyle,
-        buttonStyle,
-        tipContainerStyle,
-        navigation,
-        route,
-      } = this.props;
-
-      let triangleStyle;
-      const { initialCoordinates } = route.params;
-      const { x, width } = initialCoordinates;
-      const extraLeftSpace = x;
-      const extraRightSpace = dimensions.width - width - x;
-      if (extraLeftSpace < extraRightSpace) {
-        triangleStyle = {
-          alignSelf: 'flex-start',
-          left: extraLeftSpace + (width - 20) / 2,
-        };
-      } else {
-        triangleStyle = {
-          alignSelf: 'flex-end',
-          right: extraRightSpace + (width - 20) / 2,
-        };
-      }
-
-      return (
-        <TouchableWithoutFeedback onPress={this.props.closeTip}>
-          <View style={styles.container}>
-            <AnimatedView style={opacityStyle} />
-            <View style={this.props.contentContainerStyle}>
-              <View style={buttonStyle}>
-                <ButtonComponent
-                  navigation={navigation}
-                  route={route}
-                  progress={position}
-                />
-              </View>
-            </View>
-            <AnimatedView
-              style={tipContainerStyle}
-              onLayout={this.props.onTipContainerLayout}
-            >
-              <View style={[styles.triangleUp, triangleStyle]} />
-              <View style={styles.items}>
-                <MenuComponent
-                  navigation={navigation}
-                  route={route}
-                  key="menu"
-                />
-              </View>
-            </AnimatedView>
-          </View>
-        </TouchableWithoutFeedback>
-      );
-    }
-  }
-
   function ConnectedNUXTipsOverlay(props: BaseNUXTipsOverlayProps) {
     const dimensions = useSelector(state => state.dimensions);
     const overlayContext = React.useContext(OverlayContext);
     invariant(overlayContext, 'NUXTipsOverlay should have OverlayContext');
     const { position } = overlayContext;
 
-    const { goBackOnce } = props.navigation;
+    const { navigation, route } = props;
+
+    const { goBackOnce } = navigation;
 
     const styles = useStyles(unboundStyles);
 
     const contentContainerStyle = React.useMemo(() => {
-      const { verticalBounds } = props.route.params;
+      const { verticalBounds } = route.params;
       const fullScreenHeight = dimensions.height;
       const top = verticalBounds.y;
       const bottom =
@@ -191,7 +104,7 @@
         marginTop: top,
         marginBottom: bottom,
       };
-    }, [dimensions.height, props.route.params, styles.contentContainer]);
+    }, [dimensions.height, route.params, styles.contentContainer]);
 
     const opacityStyle = React.useMemo(() => {
       const backdropOpacity = interpolateNode(position, {
@@ -314,24 +227,47 @@
       verticalBounds.y,
     ]);
 
+    const triangleStyle = React.useMemo(() => {
+      const { x, width } = initialCoordinates;
+      const extraLeftSpace = x;
+      const extraRightSpace = dimensions.width - width - x;
+      if (extraLeftSpace < extraRightSpace) {
+        return {
+          alignSelf: 'flex-start',
+          left: extraLeftSpace + (width - 20) / 2,
+        };
+      } else {
+        return {
+          alignSelf: 'flex-end',
+          right: extraRightSpace + (width - 20) / 2,
+        };
+      }
+    }, [dimensions.width, initialCoordinates]);
+
     return (
-      <NUXTipsOverlay
-        {...props}
-        dimensions={dimensions}
-        position={position}
-        styles={styles}
-        closeTip={goBackOnce}
-        contentContainerStyle={contentContainerStyle}
-        opacityStyle={opacityStyle}
-        buttonStyle={buttonStyle}
-        tipHorizontalOffset={tipHorizontalOffset}
-        onTipContainerLayout={onTipContainerLayout}
-        tipContainerOpacity={tipContainerOpacity}
-        tipVerticalBelow={tipVerticalBelow}
-        tipHorizontal={tipHorizontal}
-        tipScale={tipScale}
-        tipContainerStyle={tipContainerStyle}
-      />
+      <TouchableWithoutFeedback onPress={goBackOnce}>
+        <View style={styles.container}>
+          <AnimatedView style={opacityStyle} />
+          <View style={contentContainerStyle}>
+            <View style={buttonStyle}>
+              <ButtonComponent
+                navigation={props.navigation}
+                route={route}
+                progress={position}
+              />
+            </View>
+          </View>
+          <AnimatedView
+            style={tipContainerStyle}
+            onLayout={onTipContainerLayout}
+          >
+            <View style={[styles.triangleUp, triangleStyle]} />
+            <View style={styles.items}>
+              <MenuComponent navigation={navigation} route={route} key="menu" />
+            </View>
+          </AnimatedView>
+        </View>
+      </TouchableWithoutFeedback>
     );
   }
   return React.memo<BaseNUXTipsOverlayProps>(ConnectedNUXTipsOverlay);