@cyberkaidev/ui 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,8 +14,7 @@ export function Chips({
14
14
  testID
15
15
  }) {
16
16
  const {
17
- colors,
18
- borderRadius
17
+ colors
19
18
  } = useTheme();
20
19
  const styles = useThemedStyles(makeStyles);
21
20
  const isInteractive = typeof onPress === 'function';
@@ -57,7 +56,6 @@ export function Chips({
57
56
  }) => /*#__PURE__*/_jsx(Button, {
58
57
  testID: `chip-${String(key)}`,
59
58
  disabled: !isInteractive || disabled,
60
- rippleContainerBorderRadius: Number(borderRadius.radius_20),
61
59
  style: [styles.button, schemeButton[scheme], disabled ? styles.dimmed : null],
62
60
  onPress: () => onPress?.(key),
63
61
  children: prefix == null ? /*#__PURE__*/_jsx(Text, {
@@ -1 +1 @@
1
- {"version":3,"names":["ScrollView","StyleSheet","View","useTheme","useThemedStyles","Text","Button","jsx","_jsx","jsxs","_jsxs","Chips","data","marginB","marginT","onPress","testID","colors","borderRadius","styles","makeStyles","isInteractive","schemeButton","surface","borderColor","border","backgroundColor","on_surface","primary","schemeTextColor","text","style","container","marginTop","marginBottom","children","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","content","map","key","label","disabled","prefix","scheme","String","rippleContainerBorderRadius","Number","radius_20","button","dimmed","color","row","t","create","width","gap","spaces","l","paddingHorizontal","pageSpacing","m","paddingVertical","vertical","xs","borderWidth","borderStyle","flexDirection","alignItems","overflow","marginRight","s","opacity"],"sourceRoot":"../../../src","sources":["components/Chips.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ScrollView","StyleSheet","View","useTheme","useThemedStyles","Text","Button","jsx","_jsx","jsxs","_jsxs","Chips","data","marginB","marginT","onPress","testID","colors","styles","makeStyles","isInteractive","schemeButton","surface","borderColor","border","backgroundColor","on_surface","primary","schemeTextColor","text","style","container","marginTop","marginBottom","children","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","content","map","key","label","disabled","prefix","scheme","String","button","dimmed","color","row","t","create","width","gap","spaces","l","paddingHorizontal","pageSpacing","m","paddingVertical","vertical","xs","borderRadius","radius_20","borderWidth","borderStyle","flexDirection","alignItems","overflow","marginRight","s","opacity"],"sourceRoot":"../../../src","sources":["components/Chips.tsx"],"mappings":"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","ignoreList":[]}
@@ -9,6 +9,13 @@ const RELEASE_GROW_DURATION = 150;
9
9
  const RELEASE_FADE_DURATION = 250;
10
10
  const PRESS_FADE_IN_DURATION = 75;
11
11
 
12
+ // The ripple animations run on the JS driver on purpose. On the New
13
+ // Architecture a native-driven animation started in the same tick the
14
+ // `Animated.View` is created has no native view to bind to yet, so it never
15
+ // plays — which is why the ripple showed on RN 0.83 but not on 0.86+.
16
+ const USE_NATIVE_DRIVER = false;
17
+ const toFinite = (value, fallback) => Number.isFinite(value) ? value : fallback;
18
+
12
19
  /** Wraps a child and paints a touch ripple at the press location. */
13
20
  export function RippleEffect({
14
21
  children,
@@ -21,6 +28,7 @@ export function RippleEffect({
21
28
  rippleSequential = false,
22
29
  rippleFades = true,
23
30
  disabled = false,
31
+ style,
24
32
  onLayout,
25
33
  onPressIn,
26
34
  onPressOut,
@@ -53,17 +61,19 @@ export function RippleEffect({
53
61
  const w2 = 0.5 * layout.width;
54
62
  const h2 = 0.5 * layout.height;
55
63
 
56
- // Fall back to the center when the gesture carries no coordinates.
57
- const {
58
- locationX,
59
- locationY
60
- } = rippleCentered || !event?.nativeEvent ? {
61
- locationX: w2,
62
- locationY: h2
63
- } : event.nativeEvent;
64
+ // Fall back to the center when the gesture carries no coordinates, and
65
+ // clamp to the pressable's box — some setups report press coordinates
66
+ // relative to the wrong ancestor, which would push the circle off-screen
67
+ // where `overflow: 'hidden'` clips it away entirely.
68
+ const centered = rippleCentered || !event?.nativeEvent;
69
+ const clampX = value => layout.width > 0 ? Math.min(Math.max(value, 0), layout.width) : value;
70
+ const clampY = value => layout.height > 0 ? Math.min(Math.max(value, 0), layout.height) : value;
71
+ const locationX = centered ? w2 : clampX(toFinite(event.nativeEvent.locationX, w2));
72
+ const locationY = centered ? h2 : clampY(toFinite(event.nativeEvent.locationY, h2));
64
73
  const offsetX = Math.abs(w2 - locationX);
65
74
  const offsetY = Math.abs(h2 - locationY);
66
- const radius = rippleSize > 0 ? 0.5 * rippleSize : Math.sqrt((w2 + offsetX) ** 2 + (h2 + offsetY) ** 2);
75
+ const computedRadius = rippleSize > 0 ? 0.5 * rippleSize : Math.sqrt((w2 + offsetX) ** 2 + (h2 + offsetY) ** 2);
76
+ const radius = Number.isFinite(computedRadius) && computedRadius > 0 ? computedRadius : Math.max(w2, h2, CIRCLE_RADIUS);
67
77
  const ripple = {
68
78
  unique: uniqueRef.current++,
69
79
  locationX,
@@ -74,13 +84,19 @@ export function RippleEffect({
74
84
  };
75
85
  ripplesRef.current.set(ripple.unique, ripple);
76
86
  activeRippleRef.current = ripple.unique;
77
-
78
- // The entrance animation is kicked off from `RippleCircle`'s mount effect,
79
- // not here: on the New Architecture, starting a native-driven animation on
80
- // an `Animated.Value` before its `Animated.View` is mounted leaves the
81
- // native driver with no view to attach to, so the ripple never shows.
87
+ Animated.timing(ripple.scale, {
88
+ toValue: 1,
89
+ duration: rippleDuration,
90
+ easing: Easing.out(Easing.ease),
91
+ useNativeDriver: USE_NATIVE_DRIVER
92
+ }).start();
93
+ Animated.timing(ripple.opacity, {
94
+ toValue: rippleOpacity,
95
+ duration: Math.min(rippleDuration, PRESS_FADE_IN_DURATION),
96
+ useNativeDriver: USE_NATIVE_DRIVER
97
+ }).start();
82
98
  setRippleIds(current => current.concat(ripple.unique));
83
- }, [layout.width, layout.height, onPressIn, rippleCentered, rippleSequential, rippleSize]);
99
+ }, [layout.width, layout.height, onPressIn, rippleCentered, rippleDuration, rippleOpacity, rippleSequential, rippleSize]);
84
100
  const handlePressOut = React.useCallback(event => {
85
101
  onPressOut?.(event);
86
102
  const releasedUnique = activeRippleRef.current;
@@ -99,11 +115,11 @@ export function RippleEffect({
99
115
  Animated.parallel([Animated.timing(ripple.scale, {
100
116
  toValue: 1,
101
117
  duration: RELEASE_GROW_DURATION,
102
- useNativeDriver: true
118
+ useNativeDriver: USE_NATIVE_DRIVER
103
119
  }), Animated.timing(ripple.opacity, {
104
120
  toValue: 0,
105
121
  duration: RELEASE_FADE_DURATION,
106
- useNativeDriver: true
122
+ useNativeDriver: USE_NATIVE_DRIVER
107
123
  })]).start(removeRipple);
108
124
  }, [onPressOut, rippleFades]);
109
125
  return /*#__PURE__*/_jsxs(Pressable, {
@@ -112,7 +128,11 @@ export function RippleEffect({
112
128
  onLayout: handleLayout,
113
129
  onPressIn: handlePressIn,
114
130
  onPressOut: handlePressOut,
115
- children: [children, /*#__PURE__*/_jsx(View, {
131
+ children: [/*#__PURE__*/_jsx(View, {
132
+ style: style,
133
+ children: children
134
+ }), /*#__PURE__*/_jsx(View, {
135
+ collapsable: false,
116
136
  pointerEvents: "none",
117
137
  style: [styles.container, {
118
138
  borderRadius: rippleContainerBorderRadius
@@ -122,9 +142,7 @@ export function RippleEffect({
122
142
  if (!ripple) return null;
123
143
  return /*#__PURE__*/_jsx(RippleCircle, {
124
144
  ripple: ripple,
125
- color: color,
126
- duration: rippleDuration,
127
- toOpacity: rippleOpacity
145
+ color: color
128
146
  }, id);
129
147
  })
130
148
  })]
@@ -132,9 +150,7 @@ export function RippleEffect({
132
150
  }
133
151
  function RippleCircleComponent({
134
152
  ripple,
135
- color,
136
- duration,
137
- toOpacity
153
+ color
138
154
  }) {
139
155
  const {
140
156
  locationX,
@@ -143,21 +159,6 @@ function RippleCircleComponent({
143
159
  scale,
144
160
  opacity
145
161
  } = ripple;
146
- React.useEffect(() => {
147
- Animated.timing(scale, {
148
- toValue: 1,
149
- duration,
150
- easing: Easing.out(Easing.ease),
151
- useNativeDriver: true
152
- }).start();
153
- Animated.timing(opacity, {
154
- toValue: toOpacity,
155
- duration: Math.min(duration, PRESS_FADE_IN_DURATION),
156
- useNativeDriver: true
157
- }).start();
158
- // Entrance runs exactly once, when the ripple view mounts.
159
- // eslint-disable-next-line react-hooks/exhaustive-deps
160
- }, []);
161
162
  const rippleStyle = {
162
163
  top: locationY - CIRCLE_RADIUS,
163
164
  [I18nManager.isRTL ? 'right' : 'left']: locationX - CIRCLE_RADIUS,
@@ -1 +1 @@
1
- {"version":3,"names":["React","Animated","Easing","I18nManager","Pressable","StyleSheet","View","useColors","jsx","_jsx","jsxs","_jsxs","CIRCLE_RADIUS","RELEASE_GROW_DURATION","RELEASE_FADE_DURATION","PRESS_FADE_IN_DURATION","RippleEffect","children","rippleColor","rippleOpacity","rippleDuration","rippleSize","rippleContainerBorderRadius","rippleCentered","rippleSequential","rippleFades","disabled","onLayout","onPressIn","onPressOut","pressableProps","colors","color","text","layout","setLayout","useState","width","height","rippleIds","setRippleIds","ripplesRef","useRef","Map","activeRippleRef","uniqueRef","handleLayout","event","nativeEvent","handlePressIn","useCallback","current","size","w2","h2","locationX","locationY","offsetX","Math","abs","offsetY","radius","sqrt","ripple","unique","scale","Value","opacity","set","concat","handlePressOut","releasedUnique","get","removeRipple","delete","filter","id","parallel","timing","toValue","duration","useNativeDriver","start","pointerEvents","style","styles","container","borderRadius","map","RippleCircle","toOpacity","RippleCircleComponent","useEffect","easing","out","ease","min","rippleStyle","top","isRTL","backgroundColor","transform","interpolate","inputRange","outputRange","circle","memo","create","absoluteFillObject","overflow","position"],"sourceRoot":"../../../src","sources":["components/RippleEffect.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Animated","Easing","I18nManager","Pressable","StyleSheet","View","useColors","jsx","_jsx","jsxs","_jsxs","CIRCLE_RADIUS","RELEASE_GROW_DURATION","RELEASE_FADE_DURATION","PRESS_FADE_IN_DURATION","USE_NATIVE_DRIVER","toFinite","value","fallback","Number","isFinite","RippleEffect","children","rippleColor","rippleOpacity","rippleDuration","rippleSize","rippleContainerBorderRadius","rippleCentered","rippleSequential","rippleFades","disabled","style","onLayout","onPressIn","onPressOut","pressableProps","colors","color","text","layout","setLayout","useState","width","height","rippleIds","setRippleIds","ripplesRef","useRef","Map","activeRippleRef","uniqueRef","handleLayout","event","nativeEvent","handlePressIn","useCallback","current","size","w2","h2","centered","clampX","Math","min","max","clampY","locationX","locationY","offsetX","abs","offsetY","computedRadius","sqrt","radius","ripple","unique","scale","Value","opacity","set","timing","toValue","duration","easing","out","ease","useNativeDriver","start","concat","handlePressOut","releasedUnique","get","removeRipple","delete","filter","id","parallel","collapsable","pointerEvents","styles","container","borderRadius","map","RippleCircle","RippleCircleComponent","rippleStyle","top","isRTL","backgroundColor","transform","interpolate","inputRange","outputRange","circle","memo","create","absoluteFillObject","overflow","position"],"sourceRoot":"../../../src","sources":["components/RippleEffect.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Chips.d.ts","sourceRoot":"","sources":["../../../../src/components/Chips.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,KAAK,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;AAEvD,KAAK,QAAQ,CAAC,IAAI,IAAI;IACpB,GAAG,EAAE,IAAI,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,KAAK,KAAK,CAAC,IAAI,IAAI;IACjB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACvB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,sDAAsD;AACtD,wBAAgB,KAAK,CAAC,IAAI,EAAE,EAC1B,IAAI,EACJ,OAAW,EACX,OAAW,EACX,OAAO,EACP,MAAM,GACP,EAAE,KAAK,CAAC,IAAI,CAAC,+BA8Db"}
1
+ {"version":3,"file":"Chips.d.ts","sourceRoot":"","sources":["../../../../src/components/Chips.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,KAAK,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;AAEvD,KAAK,QAAQ,CAAC,IAAI,IAAI;IACpB,GAAG,EAAE,IAAI,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,KAAK,KAAK,CAAC,IAAI,IAAI;IACjB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACvB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,sDAAsD;AACtD,wBAAgB,KAAK,CAAC,IAAI,EAAE,EAC1B,IAAI,EACJ,OAAW,EACX,OAAW,EACX,OAAO,EACP,MAAM,GACP,EAAE,KAAK,CAAC,IAAI,CAAC,+BA6Db"}
@@ -1,7 +1,10 @@
1
1
  import React from 'react';
2
- import type { PressableProps } from 'react-native';
3
- type Props = PressableProps & {
2
+ import type { PressableProps, StyleProp, ViewStyle } from 'react-native';
3
+ type Props = Omit<PressableProps, 'style'> & {
4
4
  children: React.ReactNode;
5
+ /** Applied to an inner wrapper around `children`, not to the pressable, so
6
+ * the ripple layer can never take part in the caller's flex layout. */
7
+ style?: StyleProp<ViewStyle>;
5
8
  /** Ripple color. Default: theme `text`. */
6
9
  rippleColor?: string;
7
10
  rippleOpacity?: number;
@@ -13,6 +16,6 @@ type Props = PressableProps & {
13
16
  rippleFades?: boolean;
14
17
  };
15
18
  /** Wraps a child and paints a touch ripple at the press location. */
16
- export declare function RippleEffect({ children, rippleColor, rippleOpacity, rippleDuration, rippleSize, rippleContainerBorderRadius, rippleCentered, rippleSequential, rippleFades, disabled, onLayout, onPressIn, onPressOut, ...pressableProps }: Props): React.JSX.Element;
19
+ export declare function RippleEffect({ children, rippleColor, rippleOpacity, rippleDuration, rippleSize, rippleContainerBorderRadius, rippleCentered, rippleSequential, rippleFades, disabled, style, onLayout, onPressIn, onPressOut, ...pressableProps }: Props): React.JSX.Element;
17
20
  export {};
18
21
  //# sourceMappingURL=RippleEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RippleEffect.d.ts","sourceRoot":"","sources":["../../../../src/components/RippleEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,KAAK,EAGV,cAAc,EACf,MAAM,cAAc,CAAC;AAatB,KAAK,KAAK,GAAG,cAAc,GAAG;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAOF,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EACX,aAAmB,EACnB,cAAoB,EACpB,UAAc,EACd,2BAA+B,EAC/B,cAAsB,EACtB,gBAAwB,EACxB,WAAkB,EAClB,QAAgB,EAChB,QAAQ,EACR,SAAS,EACT,UAAU,EACV,GAAG,cAAc,EAClB,EAAE,KAAK,qBA0IP"}
1
+ {"version":3,"file":"RippleEffect.d.ts","sourceRoot":"","sources":["../../../../src/components/RippleEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,KAAK,EAGV,cAAc,EACd,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAatB,KAAK,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG;IAC3C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;4EACwE;IACxE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAgBF,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EACX,aAAmB,EACnB,cAAoB,EACpB,UAAc,EACd,2BAA+B,EAC/B,cAAsB,EACtB,gBAAwB,EACxB,WAAkB,EAClB,QAAgB,EAChB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,GAAG,cAAc,EAClB,EAAE,KAAK,qBA4JP"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyberkaidev/ui",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Components for React Native",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -35,7 +35,7 @@ export function Chips<Item>({
35
35
  onPress,
36
36
  testID,
37
37
  }: Props<Item>) {
38
- const { colors, borderRadius } = useTheme();
38
+ const { colors } = useTheme();
39
39
  const styles = useThemedStyles(makeStyles);
40
40
  const isInteractive = typeof onPress === 'function';
41
41
 
@@ -72,7 +72,6 @@ export function Chips<Item>({
72
72
  testID={`chip-${String(key)}`}
73
73
  key={String(key)}
74
74
  disabled={!isInteractive || disabled}
75
- rippleContainerBorderRadius={Number(borderRadius.radius_20)}
76
75
  style={[
77
76
  styles.button,
78
77
  schemeButton[scheme],
@@ -11,6 +11,8 @@ import type {
11
11
  GestureResponderEvent,
12
12
  LayoutChangeEvent,
13
13
  PressableProps,
14
+ StyleProp,
15
+ ViewStyle,
14
16
  } from 'react-native';
15
17
 
16
18
  import { useColors } from '../ThemeProvider';
@@ -24,8 +26,11 @@ type RippleItemType = {
24
26
  opacity: Animated.Value;
25
27
  };
26
28
 
27
- type Props = PressableProps & {
29
+ type Props = Omit<PressableProps, 'style'> & {
28
30
  children: React.ReactNode;
31
+ /** Applied to an inner wrapper around `children`, not to the pressable, so
32
+ * the ripple layer can never take part in the caller's flex layout. */
33
+ style?: StyleProp<ViewStyle>;
29
34
  /** Ripple color. Default: theme `text`. */
30
35
  rippleColor?: string;
31
36
  rippleOpacity?: number;
@@ -42,6 +47,15 @@ const RELEASE_GROW_DURATION = 150;
42
47
  const RELEASE_FADE_DURATION = 250;
43
48
  const PRESS_FADE_IN_DURATION = 75;
44
49
 
50
+ // The ripple animations run on the JS driver on purpose. On the New
51
+ // Architecture a native-driven animation started in the same tick the
52
+ // `Animated.View` is created has no native view to bind to yet, so it never
53
+ // plays — which is why the ripple showed on RN 0.83 but not on 0.86+.
54
+ const USE_NATIVE_DRIVER = false;
55
+
56
+ const toFinite = (value: number, fallback: number) =>
57
+ Number.isFinite(value) ? value : fallback;
58
+
45
59
  /** Wraps a child and paints a touch ripple at the press location. */
46
60
  export function RippleEffect({
47
61
  children,
@@ -54,6 +68,7 @@ export function RippleEffect({
54
68
  rippleSequential = false,
55
69
  rippleFades = true,
56
70
  disabled = false,
71
+ style,
57
72
  onLayout,
58
73
  onPressIn,
59
74
  onPressOut,
@@ -83,19 +98,33 @@ export function RippleEffect({
83
98
  const w2 = 0.5 * layout.width;
84
99
  const h2 = 0.5 * layout.height;
85
100
 
86
- // Fall back to the center when the gesture carries no coordinates.
87
- const { locationX, locationY } =
88
- rippleCentered || !event?.nativeEvent
89
- ? { locationX: w2, locationY: h2 }
90
- : event.nativeEvent;
101
+ // Fall back to the center when the gesture carries no coordinates, and
102
+ // clamp to the pressable's box — some setups report press coordinates
103
+ // relative to the wrong ancestor, which would push the circle off-screen
104
+ // where `overflow: 'hidden'` clips it away entirely.
105
+ const centered = rippleCentered || !event?.nativeEvent;
106
+ const clampX = (value: number) =>
107
+ layout.width > 0 ? Math.min(Math.max(value, 0), layout.width) : value;
108
+ const clampY = (value: number) =>
109
+ layout.height > 0 ? Math.min(Math.max(value, 0), layout.height) : value;
110
+ const locationX = centered
111
+ ? w2
112
+ : clampX(toFinite(event.nativeEvent.locationX, w2));
113
+ const locationY = centered
114
+ ? h2
115
+ : clampY(toFinite(event.nativeEvent.locationY, h2));
91
116
 
92
117
  const offsetX = Math.abs(w2 - locationX);
93
118
  const offsetY = Math.abs(h2 - locationY);
94
119
 
95
- const radius =
120
+ const computedRadius =
96
121
  rippleSize > 0
97
122
  ? 0.5 * rippleSize
98
123
  : Math.sqrt((w2 + offsetX) ** 2 + (h2 + offsetY) ** 2);
124
+ const radius =
125
+ Number.isFinite(computedRadius) && computedRadius > 0
126
+ ? computedRadius
127
+ : Math.max(w2, h2, CIRCLE_RADIUS);
99
128
 
100
129
  const ripple: RippleItemType = {
101
130
  unique: uniqueRef.current++,
@@ -109,10 +138,19 @@ export function RippleEffect({
109
138
  ripplesRef.current.set(ripple.unique, ripple);
110
139
  activeRippleRef.current = ripple.unique;
111
140
 
112
- // The entrance animation is kicked off from `RippleCircle`'s mount effect,
113
- // not here: on the New Architecture, starting a native-driven animation on
114
- // an `Animated.Value` before its `Animated.View` is mounted leaves the
115
- // native driver with no view to attach to, so the ripple never shows.
141
+ Animated.timing(ripple.scale, {
142
+ toValue: 1,
143
+ duration: rippleDuration,
144
+ easing: Easing.out(Easing.ease),
145
+ useNativeDriver: USE_NATIVE_DRIVER,
146
+ }).start();
147
+
148
+ Animated.timing(ripple.opacity, {
149
+ toValue: rippleOpacity,
150
+ duration: Math.min(rippleDuration, PRESS_FADE_IN_DURATION),
151
+ useNativeDriver: USE_NATIVE_DRIVER,
152
+ }).start();
153
+
116
154
  setRippleIds((current) => current.concat(ripple.unique));
117
155
  },
118
156
  [
@@ -120,6 +158,8 @@ export function RippleEffect({
120
158
  layout.height,
121
159
  onPressIn,
122
160
  rippleCentered,
161
+ rippleDuration,
162
+ rippleOpacity,
123
163
  rippleSequential,
124
164
  rippleSize,
125
165
  ]
@@ -152,12 +192,12 @@ export function RippleEffect({
152
192
  Animated.timing(ripple.scale, {
153
193
  toValue: 1,
154
194
  duration: RELEASE_GROW_DURATION,
155
- useNativeDriver: true,
195
+ useNativeDriver: USE_NATIVE_DRIVER,
156
196
  }),
157
197
  Animated.timing(ripple.opacity, {
158
198
  toValue: 0,
159
199
  duration: RELEASE_FADE_DURATION,
160
- useNativeDriver: true,
200
+ useNativeDriver: USE_NATIVE_DRIVER,
161
201
  }),
162
202
  ]).start(removeRipple);
163
203
  },
@@ -172,8 +212,9 @@ export function RippleEffect({
172
212
  onPressIn={handlePressIn}
173
213
  onPressOut={handlePressOut}
174
214
  >
175
- {children}
215
+ <View style={style}>{children}</View>
176
216
  <View
217
+ collapsable={false}
177
218
  pointerEvents="none"
178
219
  style={[
179
220
  styles.container,
@@ -183,15 +224,7 @@ export function RippleEffect({
183
224
  {rippleIds.map((id) => {
184
225
  const ripple = ripplesRef.current.get(id);
185
226
  if (!ripple) return null;
186
- return (
187
- <RippleCircle
188
- key={id}
189
- ripple={ripple}
190
- color={color}
191
- duration={rippleDuration}
192
- toOpacity={rippleOpacity}
193
- />
194
- );
227
+ return <RippleCircle key={id} ripple={ripple} color={color} />;
195
228
  })}
196
229
  </View>
197
230
  </Pressable>
@@ -201,35 +234,11 @@ export function RippleEffect({
201
234
  type RippleCircleProps = {
202
235
  ripple: RippleItemType;
203
236
  color: string;
204
- duration: number;
205
- toOpacity: number;
206
237
  };
207
238
 
208
- function RippleCircleComponent({
209
- ripple,
210
- color,
211
- duration,
212
- toOpacity,
213
- }: RippleCircleProps) {
239
+ function RippleCircleComponent({ ripple, color }: RippleCircleProps) {
214
240
  const { locationX, locationY, radius, scale, opacity } = ripple;
215
241
 
216
- React.useEffect(() => {
217
- Animated.timing(scale, {
218
- toValue: 1,
219
- duration,
220
- easing: Easing.out(Easing.ease),
221
- useNativeDriver: true,
222
- }).start();
223
-
224
- Animated.timing(opacity, {
225
- toValue: toOpacity,
226
- duration: Math.min(duration, PRESS_FADE_IN_DURATION),
227
- useNativeDriver: true,
228
- }).start();
229
- // Entrance runs exactly once, when the ripple view mounts.
230
- // eslint-disable-next-line react-hooks/exhaustive-deps
231
- }, []);
232
-
233
242
  const rippleStyle = {
234
243
  top: locationY - CIRCLE_RADIUS,
235
244
  [I18nManager.isRTL ? 'right' : 'left']: locationX - CIRCLE_RADIUS,