@cyberkaidev/ui 0.1.0 → 0.1.2

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.
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
 
3
- import { Platform, TouchableOpacity } from 'react-native';
4
- import { RippleEffect } from "./RippleEffect.js";
3
+ import { Platform, Pressable, TouchableOpacity } from 'react-native';
4
+ import { useColors } from "../ThemeProvider.js";
5
5
  import { jsx as _jsx } from "react/jsx-runtime";
6
6
  /**
7
- * Base pressable. Android gets a touch ripple; every other platform gets
8
- * opacity feedback. Kept in one file (not `.ios`/`.android`) so consumers'
9
- * type resolution works without `moduleSuffixes`.
7
+ * Base pressable. Android gets the platform touch ripple (drawn in the
8
+ * foreground and clipped to the view's own shape); every other platform gets
9
+ * opacity feedback. Kept in one file (not `.ios`/`.android`) so consumers' type
10
+ * resolution works without `moduleSuffixes`.
10
11
  */
11
12
  export function Button({
12
13
  children,
@@ -17,11 +18,11 @@ export function Button({
17
18
  style,
18
19
  testID,
19
20
  hitSlop,
20
- rippleColor,
21
- rippleContainerBorderRadius
21
+ rippleColor
22
22
  }) {
23
+ const colors = useColors();
23
24
  if (Platform.OS === 'android') {
24
- return /*#__PURE__*/_jsx(RippleEffect, {
25
+ return /*#__PURE__*/_jsx(Pressable, {
25
26
  testID: testID,
26
27
  style: style,
27
28
  disabled: disabled,
@@ -29,8 +30,10 @@ export function Button({
29
30
  onPressIn: onPressIn,
30
31
  onPressOut: onPressOut,
31
32
  hitSlop: hitSlop,
32
- rippleColor: rippleColor,
33
- rippleContainerBorderRadius: rippleContainerBorderRadius,
33
+ android_ripple: {
34
+ color: rippleColor ?? colors.text,
35
+ foreground: true
36
+ },
34
37
  children: children
35
38
  });
36
39
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","TouchableOpacity","RippleEffect","jsx","_jsx","Button","children","onPress","onPressIn","onPressOut","disabled","style","testID","hitSlop","rippleColor","rippleContainerBorderRadius","OS"],"sourceRoot":"../../../src","sources":["components/Button.tsx"],"mappings":";;AACA,SAASA,QAAQ,EAAEC,gBAAgB,QAAQ,cAAc;AAGzD,SAASC,YAAY,QAAQ,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAiB9C;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAAC;EACrBC,QAAQ;EACRC,OAAO;EACPC,SAAS;EACTC,UAAU;EACVC,QAAQ;EACRC,KAAK;EACLC,MAAM;EACNC,OAAO;EACPC,WAAW;EACXC;AACK,CAAC,EAAE;EACR,IAAIf,QAAQ,CAACgB,EAAE,KAAK,SAAS,EAAE;IAC7B,oBACEZ,IAAA,CAACF,YAAY;MACXU,MAAM,EAAEA,MAAO;MACfD,KAAK,EAAEA,KAAM;MACbD,QAAQ,EAAEA,QAAS;MACnBH,OAAO,EAAEA,OAAQ;MACjBC,SAAS,EAAEA,SAAU;MACrBC,UAAU,EAAEA,UAAW;MACvBI,OAAO,EAAEA,OAAQ;MACjBC,WAAW,EAAEA,WAAY;MACzBC,2BAA2B,EAAEA,2BAA4B;MAAAT,QAAA,EAExDA;IAAQ,CACG,CAAC;EAEnB;EAEA,oBACEF,IAAA,CAACH,gBAAgB;IACfW,MAAM,EAAEA,MAAO;IACfD,KAAK,EAAEA,KAAM;IACbD,QAAQ,EAAEA,QAAS;IACnBH,OAAO,EAAEA,OAAQ;IACjBC,SAAS,EAAEA,SAAU;IACrBC,UAAU,EAAEA,UAAW;IACvBI,OAAO,EAAEA,OAAQ;IAAAP,QAAA,EAEhBA;EAAQ,CACO,CAAC;AAEvB","ignoreList":[]}
1
+ {"version":3,"names":["Platform","Pressable","TouchableOpacity","useColors","jsx","_jsx","Button","children","onPress","onPressIn","onPressOut","disabled","style","testID","hitSlop","rippleColor","colors","OS","android_ripple","color","text","foreground"],"sourceRoot":"../../../src","sources":["components/Button.tsx"],"mappings":";;AACA,SAASA,QAAQ,EAAEC,SAAS,EAAEC,gBAAgB,QAAQ,cAAc;AAGpE,SAASC,SAAS,QAAQ,qBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAe7C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAAC;EACrBC,QAAQ;EACRC,OAAO;EACPC,SAAS;EACTC,UAAU;EACVC,QAAQ;EACRC,KAAK;EACLC,MAAM;EACNC,OAAO;EACPC;AACK,CAAC,EAAE;EACR,MAAMC,MAAM,GAAGb,SAAS,CAAC,CAAC;EAE1B,IAAIH,QAAQ,CAACiB,EAAE,KAAK,SAAS,EAAE;IAC7B,oBACEZ,IAAA,CAACJ,SAAS;MACRY,MAAM,EAAEA,MAAO;MACfD,KAAK,EAAEA,KAAM;MACbD,QAAQ,EAAEA,QAAS;MACnBH,OAAO,EAAEA,OAAQ;MACjBC,SAAS,EAAEA,SAAU;MACrBC,UAAU,EAAEA,UAAW;MACvBI,OAAO,EAAEA,OAAQ;MACjBI,cAAc,EAAE;QACdC,KAAK,EAAEJ,WAAW,IAAIC,MAAM,CAACI,IAAI;QACjCC,UAAU,EAAE;MACd,CAAE;MAAAd,QAAA,EAEDA;IAAQ,CACA,CAAC;EAEhB;EAEA,oBACEF,IAAA,CAACH,gBAAgB;IACfW,MAAM,EAAEA,MAAO;IACfD,KAAK,EAAEA,KAAM;IACbD,QAAQ,EAAEA,QAAS;IACnBH,OAAO,EAAEA,OAAQ;IACjBC,SAAS,EAAEA,SAAU;IACrBC,UAAU,EAAEA,UAAW;IACvBI,OAAO,EAAEA,OAAQ;IAAAP,QAAA,EAEhBA;EAAQ,CACO,CAAC;AAEvB","ignoreList":[]}
@@ -53,15 +53,24 @@ export function Chips({
53
53
  disabled,
54
54
  prefix,
55
55
  scheme = 'surface'
56
- }) => /*#__PURE__*/_jsxs(Button, {
56
+ }) => /*#__PURE__*/_jsx(Button, {
57
57
  testID: `chip-${String(key)}`,
58
58
  disabled: !isInteractive || disabled,
59
59
  style: [styles.button, schemeButton[scheme], disabled ? styles.dimmed : null],
60
60
  onPress: () => onPress?.(key),
61
- children: [prefix, /*#__PURE__*/_jsx(Text, {
61
+ children: prefix == null ? /*#__PURE__*/_jsx(Text, {
62
62
  color: schemeTextColor[scheme],
63
63
  children: label
64
- })]
64
+ }) : /*#__PURE__*/_jsxs(View, {
65
+ style: styles.row,
66
+ children: [/*#__PURE__*/_jsx(View, {
67
+ style: styles.prefix,
68
+ children: prefix
69
+ }), /*#__PURE__*/_jsx(Text, {
70
+ color: schemeTextColor[scheme],
71
+ children: label
72
+ })]
73
+ })
65
74
  }, String(key)))
66
75
  })
67
76
  });
@@ -83,9 +92,15 @@ function makeStyles(t) {
83
92
  borderStyle: 'solid',
84
93
  flexDirection: 'row',
85
94
  alignItems: 'center',
86
- gap: t.spaces.horizontal.s,
87
95
  overflow: 'hidden'
88
96
  },
97
+ row: {
98
+ flexDirection: 'row',
99
+ alignItems: 'center'
100
+ },
101
+ prefix: {
102
+ marginRight: t.spaces.horizontal.s
103
+ },
89
104
  dimmed: {
90
105
  opacity: 0.5
91
106
  }
@@ -1 +1 @@
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","t","create","width","gap","spaces","l","paddingHorizontal","pageSpacing","m","paddingVertical","vertical","xs","borderRadius","radius_20","borderWidth","borderStyle","flexDirection","alignItems","s","overflow","opacity"],"sourceRoot":"../../../src","sources":["components/Chips.tsx"],"mappings":";;AACA,SAASA,UAAU,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAE3D,SAASC,QAAQ,EAAEC,eAAe,QAAQ,qBAAkB;AAE5D,SAASC,IAAI,QAAQ,WAAQ;AAC7B,SAASC,MAAM,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAuBlC;AACA,OAAO,SAASC,KAAKA,CAAO;EAC1BC,IAAI;EACJC,OAAO,GAAG,CAAC;EACXC,OAAO,GAAG,CAAC;EACXC,OAAO;EACPC;AACW,CAAC,EAAE;EACd,MAAM;IAAEC;EAAO,CAAC,GAAGd,QAAQ,CAAC,CAAC;EAC7B,MAAMe,MAAM,GAAGd,eAAe,CAACe,UAAU,CAAC;EAC1C,MAAMC,aAAa,GAAG,OAAOL,OAAO,KAAK,UAAU;EAEnD,MAAMM,YAGL,GAAG;IACFC,OAAO,EAAE;MAAEC,WAAW,EAAEN,MAAM,CAACO,MAAM;MAAEC,eAAe,EAAER,MAAM,CAACK;IAAQ,CAAC;IACxEI,UAAU,EAAE;MACVH,WAAW,EAAEN,MAAM,CAACO,MAAM;MAC1BC,eAAe,EAAER,MAAM,CAACS;IAC1B,CAAC;IACDC,OAAO,EAAE;MAAEJ,WAAW,EAAEN,MAAM,CAACU,OAAO;MAAEF,eAAe,EAAER,MAAM,CAACK;IAAQ;EAC1E,CAAC;EAED,MAAMM,eAA2C,GAAG;IAClDN,OAAO,EAAEL,MAAM,CAACY,IAAI;IACpBH,UAAU,EAAET,MAAM,CAACY,IAAI;IACvBF,OAAO,EAAEV,MAAM,CAACU;EAClB,CAAC;EAED,oBACEnB,IAAA,CAACN,IAAI;IACHc,MAAM,EAAEA,MAAO;IACfc,KAAK,EAAE,CAACZ,MAAM,CAACa,SAAS,EAAE;MAAEC,SAAS,EAAElB,OAAO;MAAEmB,YAAY,EAAEpB;IAAQ,CAAC,CAAE;IAAAqB,QAAA,eAEzE1B,IAAA,CAACR,UAAU;MACTmC,UAAU;MACVC,8BAA8B,EAAE,KAAM;MACtCC,qBAAqB,EAAEnB,MAAM,CAACoB,OAAQ;MAAAJ,QAAA,EAErCtB,IAAI,CAAC2B,GAAG,CAAC,CAAC;QAAEC,GAAG;QAAEC,KAAK;QAAEC,QAAQ;QAAEC,MAAM;QAAEC,MAAM,GAAG;MAAU,CAAC,kBAC7DlC,KAAA,CAACJ,MAAM;QACLU,MAAM,EAAE,QAAQ6B,MAAM,CAACL,GAAG,CAAC,EAAG;QAE9BE,QAAQ,EAAE,CAACtB,aAAa,IAAIsB,QAAS;QACrCZ,KAAK,EAAE,CACLZ,MAAM,CAAC4B,MAAM,EACbzB,YAAY,CAACuB,MAAM,CAAC,EACpBF,QAAQ,GAAGxB,MAAM,CAAC6B,MAAM,GAAG,IAAI,CAC/B;QACFhC,OAAO,EAAEA,CAAA,KAAMA,OAAO,GAAGyB,GAAG,CAAE;QAAAN,QAAA,GAE7BS,MAAM,eACPnC,IAAA,CAACH,IAAI;UAAC2C,KAAK,EAAEpB,eAAe,CAACgB,MAAM,CAAE;UAAAV,QAAA,EAAEO;QAAK,CAAO,CAAC;MAAA,GAV/CI,MAAM,CAACL,GAAG,CAWT,CACT;IAAC,CACQ;EAAC,CACT,CAAC;AAEX;AAEA,SAASrB,UAAUA,CAAC8B,CAAY,EAAE;EAChC,OAAOhD,UAAU,CAACiD,MAAM,CAAC;IACvBnB,SAAS,EAAE;MACToB,KAAK,EAAE;IACT,CAAC;IACDb,OAAO,EAAE;MACPc,GAAG,EAAEH,CAAC,CAACI,MAAM,CAAClB,UAAU,CAACmB,CAAC;MAC1BC,iBAAiB,EAAEN,CAAC,CAACO,WAAW,CAACrB;IACnC,CAAC;IACDW,MAAM,EAAE;MACNS,iBAAiB,EAAEN,CAAC,CAACI,MAAM,CAAClB,UAAU,CAACsB,CAAC;MACxCC,eAAe,EAAET,CAAC,CAACI,MAAM,CAACM,QAAQ,CAACC,EAAE;MACrCC,YAAY,EAAEZ,CAAC,CAACY,YAAY,CAACC,SAAS;MACtCC,WAAW,EAAE,CAAC;MACdC,WAAW,EAAE,OAAO;MACpBC,aAAa,EAAE,KAAK;MACpBC,UAAU,EAAE,QAAQ;MACpBd,GAAG,EAAEH,CAAC,CAACI,MAAM,CAAClB,UAAU,CAACgC,CAAC;MAC1BC,QAAQ,EAAE;IACZ,CAAC;IACDrB,MAAM,EAAE;MACNsB,OAAO,EAAE;IACX;EACF,CAAC,CAAC;AACJ","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":[]}
@@ -21,6 +21,7 @@ export function RippleEffect({
21
21
  rippleSequential = false,
22
22
  rippleFades = true,
23
23
  disabled = false,
24
+ style,
24
25
  onLayout,
25
26
  onPressIn,
26
27
  onPressOut,
@@ -74,19 +75,13 @@ export function RippleEffect({
74
75
  };
75
76
  ripplesRef.current.set(ripple.unique, ripple);
76
77
  activeRippleRef.current = ripple.unique;
77
- Animated.timing(ripple.scale, {
78
- toValue: 1,
79
- duration: rippleDuration,
80
- easing: Easing.out(Easing.ease),
81
- useNativeDriver: true
82
- }).start();
83
- Animated.timing(ripple.opacity, {
84
- toValue: rippleOpacity,
85
- duration: Math.min(rippleDuration, PRESS_FADE_IN_DURATION),
86
- useNativeDriver: true
87
- }).start();
78
+
79
+ // The entrance animation is kicked off from `RippleCircle`'s mount effect,
80
+ // not here: on the New Architecture, starting a native-driven animation on
81
+ // an `Animated.Value` before its `Animated.View` is mounted leaves the
82
+ // native driver with no view to attach to, so the ripple never shows.
88
83
  setRippleIds(current => current.concat(ripple.unique));
89
- }, [layout.width, layout.height, onPressIn, rippleCentered, rippleDuration, rippleOpacity, rippleSequential, rippleSize]);
84
+ }, [layout.width, layout.height, onPressIn, rippleCentered, rippleSequential, rippleSize]);
90
85
  const handlePressOut = React.useCallback(event => {
91
86
  onPressOut?.(event);
92
87
  const releasedUnique = activeRippleRef.current;
@@ -118,7 +113,10 @@ export function RippleEffect({
118
113
  onLayout: handleLayout,
119
114
  onPressIn: handlePressIn,
120
115
  onPressOut: handlePressOut,
121
- children: [children, /*#__PURE__*/_jsx(View, {
116
+ children: [/*#__PURE__*/_jsx(View, {
117
+ style: style,
118
+ children: children
119
+ }), /*#__PURE__*/_jsx(View, {
122
120
  pointerEvents: "none",
123
121
  style: [styles.container, {
124
122
  borderRadius: rippleContainerBorderRadius
@@ -128,7 +126,9 @@ export function RippleEffect({
128
126
  if (!ripple) return null;
129
127
  return /*#__PURE__*/_jsx(RippleCircle, {
130
128
  ripple: ripple,
131
- color: color
129
+ color: color,
130
+ duration: rippleDuration,
131
+ toOpacity: rippleOpacity
132
132
  }, id);
133
133
  })
134
134
  })]
@@ -136,7 +136,9 @@ export function RippleEffect({
136
136
  }
137
137
  function RippleCircleComponent({
138
138
  ripple,
139
- color
139
+ color,
140
+ duration,
141
+ toOpacity
140
142
  }) {
141
143
  const {
142
144
  locationX,
@@ -145,6 +147,21 @@ function RippleCircleComponent({
145
147
  scale,
146
148
  opacity
147
149
  } = ripple;
150
+ React.useEffect(() => {
151
+ Animated.timing(scale, {
152
+ toValue: 1,
153
+ duration,
154
+ easing: Easing.out(Easing.ease),
155
+ useNativeDriver: true
156
+ }).start();
157
+ Animated.timing(opacity, {
158
+ toValue: toOpacity,
159
+ duration: Math.min(duration, PRESS_FADE_IN_DURATION),
160
+ useNativeDriver: true
161
+ }).start();
162
+ // Entrance runs exactly once, when the ripple view mounts.
163
+ // eslint-disable-next-line react-hooks/exhaustive-deps
164
+ }, []);
148
165
  const rippleStyle = {
149
166
  top: locationY - CIRCLE_RADIUS,
150
167
  [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","timing","toValue","duration","easing","out","ease","useNativeDriver","start","min","concat","handlePressOut","releasedUnique","get","removeRipple","delete","filter","id","parallel","pointerEvents","style","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
+ {"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","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","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","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":[]}
@@ -9,16 +9,15 @@ type Props = {
9
9
  style?: StyleProp<ViewStyle>;
10
10
  testID?: string;
11
11
  hitSlop?: Insets;
12
- /** Android only. */
12
+ /** Android only. Ripple color. Defaults to the theme `text` color. */
13
13
  rippleColor?: string;
14
- /** Android only. */
15
- rippleContainerBorderRadius?: number;
16
14
  };
17
15
  /**
18
- * Base pressable. Android gets a touch ripple; every other platform gets
19
- * opacity feedback. Kept in one file (not `.ios`/`.android`) so consumers'
20
- * type resolution works without `moduleSuffixes`.
16
+ * Base pressable. Android gets the platform touch ripple (drawn in the
17
+ * foreground and clipped to the view's own shape); every other platform gets
18
+ * opacity feedback. Kept in one file (not `.ios`/`.android`) so consumers' type
19
+ * resolution works without `moduleSuffixes`.
21
20
  */
22
- export declare function Button({ children, onPress, onPressIn, onPressOut, disabled, style, testID, hitSlop, rippleColor, rippleContainerBorderRadius, }: Props): import("react").JSX.Element;
21
+ export declare function Button({ children, onPress, onPressIn, onPressOut, disabled, style, testID, hitSlop, rippleColor, }: Props): import("react").JSX.Element;
23
22
  export {};
24
23
  //# sourceMappingURL=Button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIjE,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,UAAU,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,EACP,WAAW,EACX,2BAA2B,GAC5B,EAAE,KAAK,+BAgCP"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIjE,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,UAAU,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,EACP,WAAW,GACZ,EAAE,KAAK,+BAoCP"}
@@ -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,+BAoDb"}
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,9 @@
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. */
6
+ style?: StyleProp<ViewStyle>;
5
7
  /** Ripple color. Default: theme `text`. */
6
8
  rippleColor?: string;
7
9
  rippleOpacity?: number;
@@ -13,6 +15,6 @@ type Props = PressableProps & {
13
15
  rippleFades?: boolean;
14
16
  };
15
17
  /** 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;
18
+ export declare function RippleEffect({ children, rippleColor, rippleOpacity, rippleDuration, rippleSize, rippleContainerBorderRadius, rippleCentered, rippleSequential, rippleFades, disabled, style, onLayout, onPressIn, onPressOut, ...pressableProps }: Props): React.JSX.Element;
17
19
  export {};
18
20
  //# 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,qBA6IP"}
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,2EAA2E;IAC3E,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;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,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,GAAG,cAAc,EAClB,EAAE,KAAK,qBA6IP"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyberkaidev/ui",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Components for React Native",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,8 +1,8 @@
1
1
  import type { ReactNode } from 'react';
2
- import { Platform, TouchableOpacity } from 'react-native';
2
+ import { Platform, Pressable, TouchableOpacity } from 'react-native';
3
3
  import type { Insets, StyleProp, ViewStyle } from 'react-native';
4
4
 
5
- import { RippleEffect } from './RippleEffect';
5
+ import { useColors } from '../ThemeProvider';
6
6
 
7
7
  type Props = {
8
8
  children: ReactNode;
@@ -13,16 +13,15 @@ type Props = {
13
13
  style?: StyleProp<ViewStyle>;
14
14
  testID?: string;
15
15
  hitSlop?: Insets;
16
- /** Android only. */
16
+ /** Android only. Ripple color. Defaults to the theme `text` color. */
17
17
  rippleColor?: string;
18
- /** Android only. */
19
- rippleContainerBorderRadius?: number;
20
18
  };
21
19
 
22
20
  /**
23
- * Base pressable. Android gets a touch ripple; every other platform gets
24
- * opacity feedback. Kept in one file (not `.ios`/`.android`) so consumers'
25
- * type resolution works without `moduleSuffixes`.
21
+ * Base pressable. Android gets the platform touch ripple (drawn in the
22
+ * foreground and clipped to the view's own shape); every other platform gets
23
+ * opacity feedback. Kept in one file (not `.ios`/`.android`) so consumers' type
24
+ * resolution works without `moduleSuffixes`.
26
25
  */
27
26
  export function Button({
28
27
  children,
@@ -34,11 +33,12 @@ export function Button({
34
33
  testID,
35
34
  hitSlop,
36
35
  rippleColor,
37
- rippleContainerBorderRadius,
38
36
  }: Props) {
37
+ const colors = useColors();
38
+
39
39
  if (Platform.OS === 'android') {
40
40
  return (
41
- <RippleEffect
41
+ <Pressable
42
42
  testID={testID}
43
43
  style={style}
44
44
  disabled={disabled}
@@ -46,11 +46,13 @@ export function Button({
46
46
  onPressIn={onPressIn}
47
47
  onPressOut={onPressOut}
48
48
  hitSlop={hitSlop}
49
- rippleColor={rippleColor}
50
- rippleContainerBorderRadius={rippleContainerBorderRadius}
49
+ android_ripple={{
50
+ color: rippleColor ?? colors.text,
51
+ foreground: true,
52
+ }}
51
53
  >
52
54
  {children}
53
- </RippleEffect>
55
+ </Pressable>
54
56
  );
55
57
  }
56
58
 
@@ -79,8 +79,17 @@ export function Chips<Item>({
79
79
  ]}
80
80
  onPress={() => onPress?.(key)}
81
81
  >
82
- {prefix}
83
- <Text color={schemeTextColor[scheme]}>{label}</Text>
82
+ {/* Keep this a single child when there is no prefix — a falsy
83
+ leading child still reserves a flex `gap` slot on the New
84
+ Architecture, which reads as extra padding on the label side. */}
85
+ {prefix == null ? (
86
+ <Text color={schemeTextColor[scheme]}>{label}</Text>
87
+ ) : (
88
+ <View style={styles.row}>
89
+ <View style={styles.prefix}>{prefix}</View>
90
+ <Text color={schemeTextColor[scheme]}>{label}</Text>
91
+ </View>
92
+ )}
84
93
  </Button>
85
94
  ))}
86
95
  </ScrollView>
@@ -105,9 +114,15 @@ function makeStyles(t: ThemeType) {
105
114
  borderStyle: 'solid',
106
115
  flexDirection: 'row',
107
116
  alignItems: 'center',
108
- gap: t.spaces.horizontal.s,
109
117
  overflow: 'hidden',
110
118
  },
119
+ row: {
120
+ flexDirection: 'row',
121
+ alignItems: 'center',
122
+ },
123
+ prefix: {
124
+ marginRight: t.spaces.horizontal.s,
125
+ },
111
126
  dimmed: {
112
127
  opacity: 0.5,
113
128
  },
@@ -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,10 @@ 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. */
32
+ style?: StyleProp<ViewStyle>;
29
33
  /** Ripple color. Default: theme `text`. */
30
34
  rippleColor?: string;
31
35
  rippleOpacity?: number;
@@ -54,6 +58,7 @@ export function RippleEffect({
54
58
  rippleSequential = false,
55
59
  rippleFades = true,
56
60
  disabled = false,
61
+ style,
57
62
  onLayout,
58
63
  onPressIn,
59
64
  onPressOut,
@@ -109,19 +114,10 @@ export function RippleEffect({
109
114
  ripplesRef.current.set(ripple.unique, ripple);
110
115
  activeRippleRef.current = ripple.unique;
111
116
 
112
- Animated.timing(ripple.scale, {
113
- toValue: 1,
114
- duration: rippleDuration,
115
- easing: Easing.out(Easing.ease),
116
- useNativeDriver: true,
117
- }).start();
118
-
119
- Animated.timing(ripple.opacity, {
120
- toValue: rippleOpacity,
121
- duration: Math.min(rippleDuration, PRESS_FADE_IN_DURATION),
122
- useNativeDriver: true,
123
- }).start();
124
-
117
+ // The entrance animation is kicked off from `RippleCircle`'s mount effect,
118
+ // not here: on the New Architecture, starting a native-driven animation on
119
+ // an `Animated.Value` before its `Animated.View` is mounted leaves the
120
+ // native driver with no view to attach to, so the ripple never shows.
125
121
  setRippleIds((current) => current.concat(ripple.unique));
126
122
  },
127
123
  [
@@ -129,8 +125,6 @@ export function RippleEffect({
129
125
  layout.height,
130
126
  onPressIn,
131
127
  rippleCentered,
132
- rippleDuration,
133
- rippleOpacity,
134
128
  rippleSequential,
135
129
  rippleSize,
136
130
  ]
@@ -183,7 +177,10 @@ export function RippleEffect({
183
177
  onPressIn={handlePressIn}
184
178
  onPressOut={handlePressOut}
185
179
  >
186
- {children}
180
+ {/* The caller's `style` (often a flex row with `justifyContent`) is
181
+ applied here, wrapping only the real children — so the absolutely
182
+ positioned ripple layer below can never take part in that layout. */}
183
+ <View style={style}>{children}</View>
187
184
  <View
188
185
  pointerEvents="none"
189
186
  style={[
@@ -194,7 +191,15 @@ export function RippleEffect({
194
191
  {rippleIds.map((id) => {
195
192
  const ripple = ripplesRef.current.get(id);
196
193
  if (!ripple) return null;
197
- return <RippleCircle key={id} ripple={ripple} color={color} />;
194
+ return (
195
+ <RippleCircle
196
+ key={id}
197
+ ripple={ripple}
198
+ color={color}
199
+ duration={rippleDuration}
200
+ toOpacity={rippleOpacity}
201
+ />
202
+ );
198
203
  })}
199
204
  </View>
200
205
  </Pressable>
@@ -204,11 +209,35 @@ export function RippleEffect({
204
209
  type RippleCircleProps = {
205
210
  ripple: RippleItemType;
206
211
  color: string;
212
+ duration: number;
213
+ toOpacity: number;
207
214
  };
208
215
 
209
- function RippleCircleComponent({ ripple, color }: RippleCircleProps) {
216
+ function RippleCircleComponent({
217
+ ripple,
218
+ color,
219
+ duration,
220
+ toOpacity,
221
+ }: RippleCircleProps) {
210
222
  const { locationX, locationY, radius, scale, opacity } = ripple;
211
223
 
224
+ React.useEffect(() => {
225
+ Animated.timing(scale, {
226
+ toValue: 1,
227
+ duration,
228
+ easing: Easing.out(Easing.ease),
229
+ useNativeDriver: true,
230
+ }).start();
231
+
232
+ Animated.timing(opacity, {
233
+ toValue: toOpacity,
234
+ duration: Math.min(duration, PRESS_FADE_IN_DURATION),
235
+ useNativeDriver: true,
236
+ }).start();
237
+ // Entrance runs exactly once, when the ripple view mounts.
238
+ // eslint-disable-next-line react-hooks/exhaustive-deps
239
+ }, []);
240
+
212
241
  const rippleStyle = {
213
242
  top: locationY - CIRCLE_RADIUS,
214
243
  [I18nManager.isRTL ? 'right' : 'left']: locationX - CIRCLE_RADIUS,