@retray-dev/ui-kit 7.0.1 → 9.0.0

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.
Files changed (234) hide show
  1. package/COMPONENTS.md +554 -11
  2. package/EXAMPLES.md +2 -2
  3. package/README.md +14 -8
  4. package/dist/Accordion.js +57 -5
  5. package/dist/Accordion.mjs +4 -3
  6. package/dist/AlertBanner.js +4 -1
  7. package/dist/AlertBanner.mjs +3 -2
  8. package/dist/AppHeader.d.mts +40 -0
  9. package/dist/AppHeader.d.ts +40 -0
  10. package/dist/AppHeader.js +515 -0
  11. package/dist/AppHeader.mjs +10 -0
  12. package/dist/Avatar.js +39 -29
  13. package/dist/Avatar.mjs +2 -1
  14. package/dist/Badge.js +11 -1
  15. package/dist/Badge.mjs +2 -1
  16. package/dist/Button.d.mts +8 -3
  17. package/dist/Button.d.ts +8 -3
  18. package/dist/Button.js +126 -108
  19. package/dist/Button.mjs +6 -5
  20. package/dist/ButtonGroup.mjs +1 -0
  21. package/dist/Card.js +90 -70
  22. package/dist/Card.mjs +5 -4
  23. package/dist/CategoryStrip.js +79 -22
  24. package/dist/CategoryStrip.mjs +6 -6
  25. package/dist/Checkbox.js +118 -86
  26. package/dist/Checkbox.mjs +5 -5
  27. package/dist/Chip.js +113 -80
  28. package/dist/Chip.mjs +5 -5
  29. package/dist/ConfirmDialog.js +140 -110
  30. package/dist/ConfirmDialog.mjs +7 -6
  31. package/dist/CurrencyDisplay.mjs +1 -0
  32. package/dist/CurrencyInput.d.mts +1 -1
  33. package/dist/CurrencyInput.d.ts +1 -1
  34. package/dist/CurrencyInput.js +9 -5
  35. package/dist/CurrencyInput.mjs +5 -4
  36. package/dist/DetailRow.mjs +1 -0
  37. package/dist/EmptyState.js +131 -111
  38. package/dist/EmptyState.mjs +7 -6
  39. package/dist/ErrorBoundary.d.mts +42 -0
  40. package/dist/ErrorBoundary.d.ts +42 -0
  41. package/dist/ErrorBoundary.js +351 -0
  42. package/dist/ErrorBoundary.mjs +7 -0
  43. package/dist/Form.mjs +1 -0
  44. package/dist/HolographicCard.d.mts +55 -0
  45. package/dist/HolographicCard.d.ts +55 -0
  46. package/dist/HolographicCard.js +316 -0
  47. package/dist/HolographicCard.mjs +191 -0
  48. package/dist/IconButton.d.mts +8 -3
  49. package/dist/IconButton.d.ts +8 -3
  50. package/dist/IconButton.js +115 -98
  51. package/dist/IconButton.mjs +5 -4
  52. package/dist/ImageViewer.d.mts +23 -0
  53. package/dist/ImageViewer.d.ts +23 -0
  54. package/dist/ImageViewer.js +582 -0
  55. package/dist/ImageViewer.mjs +8 -0
  56. package/dist/Input.mjs +4 -3
  57. package/dist/LabelValue.mjs +1 -0
  58. package/dist/ListGroup.mjs +1 -0
  59. package/dist/ListItem.js +131 -117
  60. package/dist/ListItem.mjs +6 -5
  61. package/dist/MediaCard.js +54 -6
  62. package/dist/MediaCard.mjs +6 -5
  63. package/dist/MenuGroup.mjs +1 -0
  64. package/dist/MenuItem.js +91 -79
  65. package/dist/MenuItem.mjs +6 -5
  66. package/dist/MonthPicker.d.mts +10 -2
  67. package/dist/MonthPicker.d.ts +10 -2
  68. package/dist/MonthPicker.js +80 -17
  69. package/dist/MonthPicker.mjs +3 -2
  70. package/dist/PagerDots.d.mts +35 -0
  71. package/dist/PagerDots.d.ts +35 -0
  72. package/dist/PagerDots.js +392 -0
  73. package/dist/PagerDots.mjs +7 -0
  74. package/dist/Pressable.d.mts +5 -5
  75. package/dist/Pressable.d.ts +5 -5
  76. package/dist/Pressable.js +97 -86
  77. package/dist/Pressable.mjs +5 -4
  78. package/dist/PricingCard.d.mts +50 -0
  79. package/dist/PricingCard.d.ts +50 -0
  80. package/dist/PricingCard.js +636 -0
  81. package/dist/PricingCard.mjs +11 -0
  82. package/dist/Progress.mjs +3 -2
  83. package/dist/RadioGroup.js +81 -30
  84. package/dist/RadioGroup.mjs +5 -5
  85. package/dist/RetrayProvider.d.mts +2 -0
  86. package/dist/RetrayProvider.d.ts +2 -0
  87. package/dist/RetrayProvider.js +214 -0
  88. package/dist/RetrayProvider.mjs +5 -0
  89. package/dist/Select.js +51 -4
  90. package/dist/Select.mjs +5 -4
  91. package/dist/SelectableGrid.d.mts +44 -0
  92. package/dist/SelectableGrid.d.ts +44 -0
  93. package/dist/SelectableGrid.js +448 -0
  94. package/dist/SelectableGrid.mjs +9 -0
  95. package/dist/Separator.mjs +1 -0
  96. package/dist/Sheet.d.mts +13 -1
  97. package/dist/Sheet.d.ts +13 -1
  98. package/dist/Sheet.js +115 -5
  99. package/dist/Sheet.mjs +4 -2
  100. package/dist/Skeleton.d.mts +50 -0
  101. package/dist/Skeleton.d.ts +50 -0
  102. package/dist/Skeleton.js +61 -0
  103. package/dist/Skeleton.mjs +4 -2
  104. package/dist/Slider.js +51 -4
  105. package/dist/Slider.mjs +3 -2
  106. package/dist/Spinner.js +28 -7
  107. package/dist/Spinner.mjs +2 -1
  108. package/dist/Switch.js +98 -48
  109. package/dist/Switch.mjs +4 -3
  110. package/dist/TabBar.d.mts +42 -0
  111. package/dist/TabBar.d.ts +42 -0
  112. package/dist/TabBar.js +361 -0
  113. package/dist/TabBar.mjs +6 -0
  114. package/dist/Tabs.js +92 -62
  115. package/dist/Tabs.mjs +5 -4
  116. package/dist/Text.js +16 -0
  117. package/dist/Text.mjs +2 -1
  118. package/dist/Textarea.mjs +4 -3
  119. package/dist/Toast.d.mts +7 -7
  120. package/dist/Toast.d.ts +7 -7
  121. package/dist/Toast.mjs +1 -0
  122. package/dist/Toggle.d.mts +6 -3
  123. package/dist/Toggle.d.ts +6 -3
  124. package/dist/Toggle.js +135 -120
  125. package/dist/Toggle.mjs +5 -5
  126. package/dist/VirtualList.mjs +1 -0
  127. package/dist/{chunk-7H2OR44A.mjs → chunk-26BCI223.mjs} +1 -1
  128. package/dist/{chunk-CRYBX2CM.mjs → chunk-2TFTAWVJ.mjs} +44 -59
  129. package/dist/chunk-3DKJ2GIC.mjs +30 -0
  130. package/dist/{chunk-KWCPOM6W.mjs → chunk-3U4SSNWP.mjs} +32 -48
  131. package/dist/chunk-4I7D47FH.mjs +139 -0
  132. package/dist/chunk-4K625MVM.mjs +142 -0
  133. package/dist/{chunk-MN7OG7IY.mjs → chunk-6OAZJ577.mjs} +6 -4
  134. package/dist/{chunk-L7E7TVEZ.mjs → chunk-756RAKE4.mjs} +2 -2
  135. package/dist/{chunk-HSPSMN6U.mjs → chunk-7QHVVCB3.mjs} +2 -2
  136. package/dist/{chunk-URLL5JBR.mjs → chunk-A3A6KNQN.mjs} +3 -3
  137. package/dist/chunk-AJ7ZDNBT.mjs +120 -0
  138. package/dist/{chunk-FTLJOUOQ.mjs → chunk-AV4EMIRH.mjs} +25 -28
  139. package/dist/chunk-AZJF2BLK.mjs +115 -0
  140. package/dist/chunk-BNP626TY.mjs +159 -0
  141. package/dist/{chunk-5IKW3VNC.mjs → chunk-DVK4G2GT.mjs} +17 -1
  142. package/dist/{chunk-6LQYY7HC.mjs → chunk-EH745HE5.mjs} +2 -2
  143. package/dist/chunk-EJ7ZPXOH.mjs +163 -0
  144. package/dist/{chunk-RKLHUDZS.mjs → chunk-GD6KXMG5.mjs} +29 -15
  145. package/dist/{chunk-RR2VQLKE.mjs → chunk-GQYFLP3D.mjs} +14 -17
  146. package/dist/{chunk-Y6MXOREN.mjs → chunk-ID72TK46.mjs} +8 -17
  147. package/dist/{chunk-NQGVLMWG.mjs → chunk-JMOZEC77.mjs} +1 -1
  148. package/dist/{chunk-GCWOGZYL.mjs → chunk-JT7HKXRB.mjs} +39 -29
  149. package/dist/{chunk-LWG526VX.mjs → chunk-KIHCWCWL.mjs} +47 -62
  150. package/dist/chunk-LXJIIOYQ.mjs +104 -0
  151. package/dist/{chunk-SBZYEV4S.mjs → chunk-M6ZXVBTK.mjs} +5 -2
  152. package/dist/{chunk-XDMN67KV.mjs → chunk-MAC465BB.mjs} +10 -8
  153. package/dist/chunk-MBMXYJJV.mjs +36 -0
  154. package/dist/chunk-MLF3EZFW.mjs +119 -0
  155. package/dist/chunk-NA7PARID.mjs +147 -0
  156. package/dist/{chunk-QXGYKWI7.mjs → chunk-O3HA6TYM.mjs} +9 -4
  157. package/dist/{chunk-63357L2X.mjs → chunk-OB4JUQ3O.mjs} +1 -1
  158. package/dist/{chunk-AU2VDY4P.mjs → chunk-PFZTM6D5.mjs} +52 -4
  159. package/dist/chunk-QKH5ZOD5.mjs +97 -0
  160. package/dist/{chunk-KZJRQOIU.mjs → chunk-TERDKCLE.mjs} +11 -1
  161. package/dist/{chunk-U4N7WF4Z.mjs → chunk-UREA2GYY.mjs} +28 -23
  162. package/dist/{chunk-TAJ2PQ2O.mjs → chunk-VGTDN7SW.mjs} +7 -6
  163. package/dist/{chunk-URDE3EUU.mjs → chunk-VQ57HWPL.mjs} +27 -15
  164. package/dist/chunk-WBOOUHSS.mjs +62 -0
  165. package/dist/{chunk-GNGLDL6Z.mjs → chunk-WJLKJMKR.mjs} +18 -0
  166. package/dist/{chunk-YZJAFS4P.mjs → chunk-X4G6APW6.mjs} +22 -19
  167. package/dist/chunk-Y6FXYEAI.mjs +8 -0
  168. package/dist/chunk-YFZ3ELX5.mjs +16 -0
  169. package/dist/{chunk-QCNARS3X.mjs → chunk-YNROWHQJ.mjs} +1 -1
  170. package/dist/chunk-Z4BVUWW6.mjs +196 -0
  171. package/dist/{chunk-GPOUINK5.mjs → chunk-ZJKGQMYH.mjs} +10 -27
  172. package/dist/index-wt-orHUi.d.mts +85 -0
  173. package/dist/index-wt-orHUi.d.ts +85 -0
  174. package/dist/index.d.mts +59 -51
  175. package/dist/index.d.ts +59 -51
  176. package/dist/index.js +1940 -744
  177. package/dist/index.mjs +49 -39
  178. package/package.json +35 -5
  179. package/src/components/Accordion/Accordion.tsx +12 -1
  180. package/src/components/AlertBanner/AlertBanner.tsx +5 -0
  181. package/src/components/AppHeader/AppHeader.tsx +172 -0
  182. package/src/components/AppHeader/index.ts +1 -0
  183. package/src/components/Avatar/Avatar.tsx +10 -2
  184. package/src/components/Badge/Badge.tsx +8 -1
  185. package/src/components/Button/Button.tsx +20 -27
  186. package/src/components/Card/Card.tsx +12 -23
  187. package/src/components/CategoryStrip/CategoryStrip.tsx +17 -21
  188. package/src/components/Checkbox/Checkbox.tsx +26 -40
  189. package/src/components/Chip/Chip.tsx +24 -33
  190. package/src/components/CurrencyInput/CurrencyInput.tsx +10 -8
  191. package/src/components/EmptyState/EmptyState.tsx +2 -1
  192. package/src/components/ErrorBoundary/ErrorBoundary.tsx +153 -0
  193. package/src/components/ErrorBoundary/index.ts +1 -0
  194. package/src/components/HolographicCard/HolographicCard.tsx +315 -0
  195. package/src/components/HolographicCard/index.ts +1 -0
  196. package/src/components/IconButton/IconButton.tsx +19 -27
  197. package/src/components/ImageViewer/ImageViewer.tsx +290 -0
  198. package/src/components/ImageViewer/index.ts +1 -0
  199. package/src/components/ListItem/ListItem.tsx +70 -67
  200. package/src/components/MediaCard/MediaCard.tsx +8 -2
  201. package/src/components/MenuItem/MenuItem.tsx +10 -25
  202. package/src/components/MonthPicker/MonthPicker.tsx +39 -13
  203. package/src/components/MonthPicker/index.ts +1 -1
  204. package/src/components/PagerDots/PagerDots.tsx +200 -0
  205. package/src/components/PagerDots/index.ts +1 -0
  206. package/src/components/Pressable/Pressable.tsx +19 -35
  207. package/src/components/PricingCard/PricingCard.tsx +220 -0
  208. package/src/components/PricingCard/index.ts +1 -0
  209. package/src/components/RadioGroup/RadioGroup.tsx +14 -27
  210. package/src/components/RetrayProvider/RetrayProvider.tsx +59 -0
  211. package/src/components/RetrayProvider/index.ts +1 -0
  212. package/src/components/SelectableGrid/SelectableGrid.tsx +205 -0
  213. package/src/components/SelectableGrid/index.ts +1 -0
  214. package/src/components/Sheet/Sheet.tsx +65 -1
  215. package/src/components/Skeleton/Skeleton.tsx +142 -1
  216. package/src/components/Spinner/Spinner.tsx +17 -2
  217. package/src/components/Switch/Switch.tsx +30 -58
  218. package/src/components/TabBar/TabBar.tsx +169 -0
  219. package/src/components/TabBar/index.ts +1 -0
  220. package/src/components/Tabs/Tabs.tsx +23 -26
  221. package/src/components/Text/Text.tsx +2 -0
  222. package/src/components/Toggle/Toggle.tsx +35 -51
  223. package/src/fonts.ts +4 -1
  224. package/src/index.ts +23 -2
  225. package/src/utils/animations.ts +29 -1
  226. package/src/utils/fontGuard.ts +34 -0
  227. package/src/utils/haptics.ts +211 -9
  228. package/src/utils/pressable.ts +66 -0
  229. package/dist/chunk-76PFOSM2.mjs +0 -41
  230. package/dist/chunk-DITNP6PL.mjs +0 -106
  231. package/dist/chunk-JBLL7U3U.mjs +0 -64
  232. package/dist/chunk-LG4DO3DK.mjs +0 -174
  233. package/dist/chunk-RMMK64W5.mjs +0 -54
  234. package/dist/chunk-RTC3CFXF.mjs +0 -29
package/dist/Toast.d.mts CHANGED
@@ -3,22 +3,22 @@ export { toast } from 'sonner-native';
3
3
  import React from 'react';
4
4
 
5
5
  declare function useToast(): {
6
- toast: ((message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
6
+ toast: ((message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
7
7
  id?: string | number;
8
8
  }) => string | number) & {
9
- success: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
9
+ success: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
10
10
  id?: string | number;
11
11
  }) => string | number;
12
- info: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
12
+ info: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
13
13
  id?: string | number;
14
14
  }) => string | number;
15
- error: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
15
+ error: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
16
16
  id?: string | number;
17
17
  }) => string | number;
18
- warning: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
18
+ warning: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
19
19
  id?: string | number;
20
20
  }) => string | number;
21
- custom: (jsx: React.ReactElement, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
21
+ custom: (jsx: React.ReactElement, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
22
22
  id?: string | number;
23
23
  }) => string | number;
24
24
  promise: <T>(promise: Promise<T>, options: Omit<{
@@ -32,7 +32,7 @@ declare function useToast(): {
32
32
  error?: sonner_native.ToastStyles;
33
33
  };
34
34
  }, "promise">) => string | number;
35
- loading: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
35
+ loading: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
36
36
  id?: string | number;
37
37
  }) => string | number;
38
38
  dismiss: (id?: string | number) => string | number | undefined;
package/dist/Toast.d.ts CHANGED
@@ -3,22 +3,22 @@ export { toast } from 'sonner-native';
3
3
  import React from 'react';
4
4
 
5
5
  declare function useToast(): {
6
- toast: ((message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
6
+ toast: ((message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
7
7
  id?: string | number;
8
8
  }) => string | number) & {
9
- success: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
9
+ success: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
10
10
  id?: string | number;
11
11
  }) => string | number;
12
- info: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
12
+ info: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
13
13
  id?: string | number;
14
14
  }) => string | number;
15
- error: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
15
+ error: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
16
16
  id?: string | number;
17
17
  }) => string | number;
18
- warning: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
18
+ warning: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
19
19
  id?: string | number;
20
20
  }) => string | number;
21
- custom: (jsx: React.ReactElement, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
21
+ custom: (jsx: React.ReactElement, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
22
22
  id?: string | number;
23
23
  }) => string | number;
24
24
  promise: <T>(promise: Promise<T>, options: Omit<{
@@ -32,7 +32,7 @@ declare function useToast(): {
32
32
  error?: sonner_native.ToastStyles;
33
33
  };
34
34
  }, "promise">) => string | number;
35
- loading: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "variant" | "id" | "jsx" | "promise"> & {
35
+ loading: (message: string, data?: Omit<sonner_native.ToastProps, "title" | "type" | "id" | "variant" | "jsx" | "promise"> & {
36
36
  id?: string | number;
37
37
  }) => string | number;
38
38
  dismiss: (id?: string | number) => string | number | undefined;
package/dist/Toast.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export { ToastProvider, sonnerToast as toast, useToast } from './chunk-2UYENBLV.mjs';
2
2
  import './chunk-SOYNZDVY.mjs';
3
3
  import './chunk-2CE3TQVY.mjs';
4
+ import './chunk-Y6FXYEAI.mjs';
package/dist/Toggle.d.mts CHANGED
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import { TouchableOpacityProps } from 'react-native';
2
+ import { ViewStyle } from 'react-native';
3
3
 
4
4
  type ToggleVariant = 'default' | 'outline';
5
5
  type ToggleSize = 'sm' | 'md' | 'lg';
6
- interface ToggleProps extends TouchableOpacityProps {
6
+ interface ToggleProps {
7
7
  pressed?: boolean;
8
8
  onPressedChange?: (pressed: boolean) => void;
9
9
  variant?: ToggleVariant;
@@ -27,7 +27,10 @@ interface ToggleProps extends TouchableOpacityProps {
27
27
  iconColor?: string;
28
28
  /** Override the resolved active icon color. Defaults to `primary`. */
29
29
  activeIconColor?: string;
30
+ disabled?: boolean;
31
+ style?: ViewStyle;
32
+ accessibilityLabel?: string;
30
33
  }
31
- declare function Toggle({ pressed, onPressedChange, variant, size, label, icon, activeIcon, iconName, activeIconName, iconColor, activeIconColor, disabled, style, accessibilityLabel, ...props }: ToggleProps): React.JSX.Element;
34
+ declare function Toggle({ pressed, onPressedChange, variant, size, label, icon, activeIcon, iconName, activeIconName, iconColor, activeIconColor, disabled, style, accessibilityLabel, }: ToggleProps): React.JSX.Element;
32
35
 
33
36
  export { Toggle, type ToggleProps, type ToggleSize, type ToggleVariant };
package/dist/Toggle.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import { TouchableOpacityProps } from 'react-native';
2
+ import { ViewStyle } from 'react-native';
3
3
 
4
4
  type ToggleVariant = 'default' | 'outline';
5
5
  type ToggleSize = 'sm' | 'md' | 'lg';
6
- interface ToggleProps extends TouchableOpacityProps {
6
+ interface ToggleProps {
7
7
  pressed?: boolean;
8
8
  onPressedChange?: (pressed: boolean) => void;
9
9
  variant?: ToggleVariant;
@@ -27,7 +27,10 @@ interface ToggleProps extends TouchableOpacityProps {
27
27
  iconColor?: string;
28
28
  /** Override the resolved active icon color. Defaults to `primary`. */
29
29
  activeIconColor?: string;
30
+ disabled?: boolean;
31
+ style?: ViewStyle;
32
+ accessibilityLabel?: string;
30
33
  }
31
- declare function Toggle({ pressed, onPressedChange, variant, size, label, icon, activeIcon, iconName, activeIconName, iconColor, activeIconColor, disabled, style, accessibilityLabel, ...props }: ToggleProps): React.JSX.Element;
34
+ declare function Toggle({ pressed, onPressedChange, variant, size, label, icon, activeIcon, iconName, activeIconName, iconColor, activeIconColor, disabled, style, accessibilityLabel, }: ToggleProps): React.JSX.Element;
32
35
 
33
36
  export { Toggle, type ToggleProps, type ToggleSize, type ToggleVariant };
package/dist/Toggle.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  var React3 = require('react');
4
4
  var reactNative = require('react-native');
5
- var Animated = require('react-native-reanimated');
5
+ var reactNativeEase = require('react-native-ease');
6
6
  var vectorIcons = require('@expo/vector-icons');
7
7
  var reactNativeSizeMatters = require('react-native-size-matters');
8
8
  var AntDesign = require('@expo/vector-icons/AntDesign');
@@ -11,11 +11,12 @@ var Feather = require('@expo/vector-icons/Feather');
11
11
  var FontAwesome5 = require('@expo/vector-icons/FontAwesome5');
12
12
  var MaterialIcons = require('@expo/vector-icons/MaterialIcons');
13
13
  var Ionicons = require('@expo/vector-icons/Ionicons');
14
+ var reactNativeReanimated = require('react-native-reanimated');
15
+ var pressto = require('pressto');
14
16
 
15
17
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
16
18
 
17
19
  var React3__default = /*#__PURE__*/_interopDefault(React3);
18
- var Animated__default = /*#__PURE__*/_interopDefault(Animated);
19
20
  var AntDesign__default = /*#__PURE__*/_interopDefault(AntDesign);
20
21
  var Entypo__default = /*#__PURE__*/_interopDefault(Entypo);
21
22
  var Feather__default = /*#__PURE__*/_interopDefault(Feather);
@@ -23,18 +24,65 @@ var FontAwesome5__default = /*#__PURE__*/_interopDefault(FontAwesome5);
23
24
  var MaterialIcons__default = /*#__PURE__*/_interopDefault(MaterialIcons);
24
25
  var Ionicons__default = /*#__PURE__*/_interopDefault(Ionicons);
25
26
 
26
- // src/components/Toggle/Toggle.tsx
27
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
28
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
29
+ }) : x)(function(x) {
30
+ if (typeof require !== "undefined") return require.apply(this, arguments);
31
+ throw Error('Dynamic require of "' + x + '" is not supported');
32
+ });
27
33
  var _haptics = null;
34
+ var _hapticsLoaded = false;
28
35
  async function getHaptics() {
29
36
  if (reactNative.Platform.OS === "web") return null;
30
- if (!_haptics) {
31
- _haptics = await import('expo-haptics');
37
+ if (!_hapticsLoaded) {
38
+ _hapticsLoaded = true;
39
+ try {
40
+ _haptics = await import('expo-haptics');
41
+ } catch {
42
+ _haptics = null;
43
+ }
32
44
  }
33
45
  return _haptics;
34
46
  }
47
+ var _pulsar = null;
48
+ var _pulsarChecked = false;
49
+ var _pulsarAvailable = false;
50
+ function isPulsarNativeRegistered() {
51
+ try {
52
+ const g = globalThis;
53
+ if (typeof g.__turboModuleProxy === "function") {
54
+ return g.__turboModuleProxy("RNPulsar") != null;
55
+ }
56
+ return reactNative.NativeModules?.RNPulsar != null;
57
+ } catch {
58
+ return false;
59
+ }
60
+ }
61
+ function getPulsar() {
62
+ if (reactNative.Platform.OS === "web") return null;
63
+ if (!_pulsarChecked) {
64
+ _pulsarChecked = true;
65
+ try {
66
+ if (isPulsarNativeRegistered()) {
67
+ _pulsar = __require("react-native-pulsar");
68
+ _pulsarAvailable = true;
69
+ }
70
+ } catch {
71
+ _pulsar = null;
72
+ _pulsarAvailable = false;
73
+ }
74
+ }
75
+ return _pulsarAvailable ? _pulsar : null;
76
+ }
35
77
  function selectionAsync() {
36
78
  if (reactNative.Platform.OS === "web") return;
37
- getHaptics().then((h) => h?.selectionAsync());
79
+ getHaptics().then((h) => {
80
+ if (h) {
81
+ h.selectionAsync();
82
+ } else {
83
+ getPulsar()?.Presets.System.selection();
84
+ }
85
+ });
38
86
  }
39
87
 
40
88
  // src/theme/colorUtils.ts
@@ -200,72 +248,53 @@ function Icon({ name, size, color, family }) {
200
248
  function renderIcon(name, size, color) {
201
249
  return React3__default.default.createElement(Icon, { name, size, color });
202
250
  }
203
- var SPRINGS = {
204
- /** Tight, premium press feel — Buttons, Toggle, Tabs triggers. */
205
- pressIn: { stiffness: 600, damping: 35, mass: 0.8 },
206
- pressOut: { stiffness: 280, damping: 22, mass: 0.8 }};
207
251
  var TIMINGS = {
208
252
  /** Color/opacity transitions on toggles, checkboxes, switches. */
209
253
  state: { duration: 160 }};
210
- var EASINGS = {
254
+ ({
211
255
  /** Material-style ease-out — natural deceleration for state changes. */
212
- standard: Animated.Easing.bezier(0.2, 0, 0, 1),
256
+ standard: reactNativeReanimated.Easing.bezier(0.2, 0, 0, 1),
213
257
  /** Strong ease-out for expanding surfaces (Accordion open). */
214
- expand: Animated.Easing.bezier(0.23, 1, 0.32, 1),
258
+ expand: reactNativeReanimated.Easing.bezier(0.23, 1, 0.32, 1),
215
259
  /** Quick ease-in for collapsing. */
216
- collapse: Animated.Easing.in(Animated.Easing.ease)
260
+ collapse: reactNativeReanimated.Easing.in(reactNativeReanimated.Easing.ease)
261
+ });
262
+ var COLOR_TRANSITION = {
263
+ type: "timing",
264
+ duration: TIMINGS.state.duration,
265
+ easing: [0.2, 0, 0, 1]
217
266
  };
218
267
  var PRESS_SCALE = {
219
- button: 0.95};
220
- function useHover() {
221
- const [hovered, setHovered] = React3.useState(false);
222
- const onMouseEnter = React3.useCallback(() => setHovered(true), []);
223
- const onMouseLeave = React3.useCallback(() => setHovered(false), []);
224
- if (reactNative.Platform.OS !== "web") {
225
- return { hovered: false, hoverHandlers: {} };
226
- }
227
- return { hovered, hoverHandlers: { onMouseEnter, onMouseLeave } };
228
- }
229
-
230
- // src/utils/usePressScale.ts
231
- function usePressScale({
232
- pressScale = PRESS_SCALE.button,
233
- hoverScale = 1.02,
234
- pressInSpring = SPRINGS.pressIn,
235
- pressOutSpring = SPRINGS.pressOut,
236
- disabled = false
237
- } = {}) {
238
- const scale2 = Animated.useSharedValue(1);
239
- const { hovered, hoverHandlers } = useHover();
240
- const onPressIn = React3.useCallback(() => {
241
- if (disabled) return;
242
- scale2.value = Animated.withSpring(pressScale, pressInSpring);
243
- }, [disabled, pressScale, pressInSpring, scale2]);
244
- const onPressOut = React3.useCallback(() => {
245
- if (disabled) return;
246
- scale2.value = Animated.withSpring(1, pressOutSpring);
247
- }, [disabled, pressOutSpring, scale2]);
248
- const hoverActive = reactNative.Platform.OS === "web" && hovered && hoverScale !== 1 && !disabled;
249
- const animatedStyle = Animated.useAnimatedStyle(() => ({
250
- transform: [
251
- { scale: scale2.value * (hoverActive ? hoverScale : 1) }
252
- ]
253
- }));
254
- return {
255
- animatedStyle,
256
- onPressIn,
257
- onPressOut,
258
- hoverHandlers
259
- };
260
- }
261
- function useColorTransition(active, options = {}) {
262
- const { duration = TIMINGS.state.duration } = options;
263
- const progress = Animated.useSharedValue(active ? 1 : 0);
264
- React3.useEffect(() => {
265
- progress.value = Animated.withTiming(active ? 1 : 0, { duration, easing: EASINGS.standard });
266
- }, [active, duration, progress]);
267
- return progress;
268
- }
268
+ button: 0.95,
269
+ card: 0.98,
270
+ row: 0.97,
271
+ chip: 0.94
272
+ };
273
+ var PressableButton = pressto.createAnimatedPressable((progress) => {
274
+ "worklet";
275
+ const scale2 = 1 - (1 - PRESS_SCALE.button) * progress;
276
+ return { transform: [{ scale: scale2 }] };
277
+ });
278
+ pressto.createAnimatedPressable((progress) => {
279
+ "worklet";
280
+ const scale2 = 1 - (1 - PRESS_SCALE.card) * progress;
281
+ return { transform: [{ scale: scale2 }] };
282
+ });
283
+ pressto.createAnimatedPressable((progress) => {
284
+ "worklet";
285
+ const scale2 = 1 - (1 - PRESS_SCALE.row) * progress;
286
+ return { transform: [{ scale: scale2 }] };
287
+ });
288
+ pressto.createAnimatedPressable((progress) => {
289
+ "worklet";
290
+ const scale2 = 1 - (1 - PRESS_SCALE.chip) * progress;
291
+ return { transform: [{ scale: scale2 }] };
292
+ });
293
+ pressto.createAnimatedPressable((progress) => {
294
+ "worklet";
295
+ const scale2 = 1 - (1 - PRESS_SCALE.button) * progress;
296
+ return { transform: [{ scale: scale2 }] };
297
+ });
269
298
 
270
299
  // src/components/Toggle/Toggle.tsx
271
300
  function ToggleIcon({ pressed, iconName, activeIconName, icon, activeIcon, iconColor, activeIconColor, iconSize, primaryColor, mutedColor }) {
@@ -305,75 +334,61 @@ function Toggle({
305
334
  activeIconColor,
306
335
  disabled,
307
336
  style,
308
- accessibilityLabel,
309
- ...props
337
+ accessibilityLabel
310
338
  }) {
311
339
  const { colors } = useTheme();
312
- const { animatedStyle: scaleStyle, onPressIn, onPressOut, hoverHandlers } = usePressScale({
313
- pressScale: PRESS_SCALE.button,
314
- disabled
315
- });
316
- const progress = useColorTransition(pressed);
317
340
  const inactiveBorder = variant === "outline" ? colors.border : "transparent";
318
- const surfaceStyle = Animated.useAnimatedStyle(() => ({
319
- borderColor: Animated.interpolateColor(progress.value, [0, 1], [inactiveBorder, colors.primary]),
320
- backgroundColor: Animated.interpolateColor(progress.value, [0, 1], ["transparent", colors.surfaceStrong])
321
- }));
322
- const textStyle = Animated.useAnimatedStyle(() => ({
323
- color: Animated.interpolateColor(progress.value, [0, 1], [colors.foreground, colors.primary])
324
- }));
325
341
  const iconSize = iconSizeMap[size];
326
- return /* @__PURE__ */ React3__default.default.createElement(
327
- Animated__default.default.View,
342
+ const handlePress = () => {
343
+ selectionAsync();
344
+ onPressedChange?.(!pressed);
345
+ };
346
+ return /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: [disabled && styles.disabled, style] }, /* @__PURE__ */ React3__default.default.createElement(
347
+ PressableButton,
328
348
  {
329
- style: [scaleStyle, disabled && styles.disabled, style],
330
- ...hoverHandlers
349
+ onPress: handlePress,
350
+ enabled: !disabled,
351
+ rippleColor: "transparent",
352
+ touchSoundDisabled: true,
353
+ activateOnHover: true,
354
+ accessibilityRole: "button",
355
+ accessibilityLabel: accessibilityLabel ?? label,
356
+ accessibilityState: { selected: pressed, disabled: !!disabled }
331
357
  },
332
358
  /* @__PURE__ */ React3__default.default.createElement(
333
- reactNative.TouchableOpacity,
359
+ reactNativeEase.EaseView,
334
360
  {
335
- onPress: () => {
336
- selectionAsync();
337
- onPressedChange?.(!pressed);
361
+ style: [styles.base, sizeStyles[size], { borderWidth: 2 }],
362
+ animate: {
363
+ borderColor: pressed ? colors.primary : inactiveBorder,
364
+ backgroundColor: pressed ? colors.surfaceStrong : "transparent"
338
365
  },
339
- onPressIn,
340
- onPressOut,
341
- disabled,
342
- activeOpacity: 1,
343
- touchSoundDisabled: true,
344
- accessibilityRole: "button",
345
- accessibilityLabel: accessibilityLabel ?? label,
346
- accessibilityState: { selected: pressed, disabled: !!disabled },
347
- ...props
366
+ transition: COLOR_TRANSITION
348
367
  },
349
- /* @__PURE__ */ React3__default.default.createElement(
350
- Animated__default.default.View,
368
+ /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.inner }, /* @__PURE__ */ React3__default.default.createElement(
369
+ ToggleIcon,
370
+ {
371
+ pressed,
372
+ iconName,
373
+ activeIconName,
374
+ icon,
375
+ activeIcon,
376
+ iconColor,
377
+ activeIconColor,
378
+ iconSize,
379
+ primaryColor: colors.primary,
380
+ mutedColor: colors.foregroundMuted
381
+ }
382
+ ), label ? /* @__PURE__ */ React3__default.default.createElement(
383
+ reactNative.Text,
351
384
  {
352
- style: [
353
- styles.base,
354
- sizeStyles[size],
355
- { borderWidth: 2 },
356
- surfaceStyle
357
- ]
385
+ style: [styles.label, { color: pressed ? colors.primary : colors.foreground }],
386
+ allowFontScaling: true
358
387
  },
359
- /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.inner }, /* @__PURE__ */ React3__default.default.createElement(
360
- ToggleIcon,
361
- {
362
- pressed,
363
- iconName,
364
- activeIconName,
365
- icon,
366
- activeIcon,
367
- iconColor,
368
- activeIconColor,
369
- iconSize,
370
- primaryColor: colors.primary,
371
- mutedColor: colors.foregroundMuted
372
- }
373
- ), label ? /* @__PURE__ */ React3__default.default.createElement(Animated__default.default.Text, { style: [styles.label, textStyle], allowFontScaling: true }, label) : null)
374
- )
388
+ label
389
+ ) : null)
375
390
  )
376
- );
391
+ ));
377
392
  }
378
393
  var styles = reactNative.StyleSheet.create({
379
394
  base: {
package/dist/Toggle.mjs CHANGED
@@ -1,8 +1,8 @@
1
- export { Toggle } from './chunk-LWG526VX.mjs';
2
- import './chunk-7H2OR44A.mjs';
1
+ export { Toggle } from './chunk-KIHCWCWL.mjs';
2
+ import './chunk-3DKJ2GIC.mjs';
3
+ import './chunk-EJ7ZPXOH.mjs';
4
+ import './chunk-DVK4G2GT.mjs';
3
5
  import './chunk-T7XZ7H7Y.mjs';
4
- import './chunk-QCNARS3X.mjs';
5
- import './chunk-RTC3CFXF.mjs';
6
- import './chunk-5IKW3VNC.mjs';
7
6
  import './chunk-SOYNZDVY.mjs';
8
7
  import './chunk-2CE3TQVY.mjs';
8
+ import './chunk-Y6FXYEAI.mjs';
@@ -1 +1,2 @@
1
1
  export { VirtualList } from './chunk-NC5ZTR2Y.mjs';
2
+ import './chunk-Y6FXYEAI.mjs';
@@ -1,4 +1,4 @@
1
- import { TIMINGS, EASINGS } from './chunk-5IKW3VNC.mjs';
1
+ import { TIMINGS, EASINGS } from './chunk-DVK4G2GT.mjs';
2
2
  import { useEffect } from 'react';
3
3
  import { useSharedValue, withTiming } from 'react-native-reanimated';
4
4
 
@@ -1,16 +1,15 @@
1
- import { renderIcon } from './chunk-T7XZ7H7Y.mjs';
2
- import { usePressScale } from './chunk-QCNARS3X.mjs';
3
- import { impactMedium } from './chunk-RTC3CFXF.mjs';
4
- import { PRESS_SCALE } from './chunk-5IKW3VNC.mjs';
1
+ import { PressableButton } from './chunk-3DKJ2GIC.mjs';
2
+ import { impactMedium } from './chunk-EJ7ZPXOH.mjs';
5
3
  import { TYPOGRAPHY, RADIUS } from './chunk-QY3X2UYR.mjs';
4
+ import { renderIcon } from './chunk-T7XZ7H7Y.mjs';
6
5
  import { useTheme } from './chunk-SOYNZDVY.mjs';
7
6
  import { vs, s, mvs, ms } from './chunk-2CE3TQVY.mjs';
8
7
  import React from 'react';
9
- import { StyleSheet, TouchableOpacity, ActivityIndicator, Text } from 'react-native';
10
- import Animated from 'react-native-reanimated';
8
+ import { StyleSheet, View, ActivityIndicator, Text } from 'react-native';
11
9
 
12
10
  var containerSizeStyles = {
13
- sm: { paddingHorizontal: s(16), paddingVertical: vs(10), minHeight: 40 },
11
+ // AUDIT FIX: sm was 40pt below Apple HIG 44pt minimum touch target.
12
+ sm: { paddingHorizontal: s(16), paddingVertical: vs(12), minHeight: 44 },
14
13
  md: { paddingHorizontal: s(24), paddingVertical: vs(14), minHeight: 48 },
15
14
  lg: { paddingHorizontal: s(28), paddingVertical: vs(16), minHeight: 56 }
16
15
  };
@@ -34,18 +33,13 @@ function ButtonBase({
34
33
  style,
35
34
  onPress,
36
35
  accessibilityLabel,
37
- accessibilityHint,
38
- ...props
36
+ accessibilityHint
39
37
  }) {
40
38
  const { colors } = useTheme();
41
39
  const isDisabled = disabled || loading;
42
- const { animatedStyle, onPressIn, onPressOut, hoverHandlers } = usePressScale({
43
- pressScale: PRESS_SCALE.button,
44
- disabled: isDisabled
45
- });
46
- const handlePress = (e) => {
40
+ const handlePress = () => {
47
41
  impactMedium();
48
- onPress?.(e);
42
+ onPress?.();
49
43
  };
50
44
  const containerVariantStyle = {
51
45
  primary: { backgroundColor: colors.primary },
@@ -68,54 +62,45 @@ function ButtonBase({
68
62
  const styleArray = Array.isArray(style) ? style : style ? [style] : [];
69
63
  const flatStyle = StyleSheet.flatten(styleArray);
70
64
  const { flex, ...restStyle } = flatStyle || {};
71
- return /* @__PURE__ */ React.createElement(
72
- Animated.View,
65
+ return /* @__PURE__ */ React.createElement(View, { style: [fullWidth && styles.fullWidth, flex !== void 0 && { flex }] }, /* @__PURE__ */ React.createElement(
66
+ PressableButton,
73
67
  {
74
- style: [fullWidth && styles.fullWidth, flex !== void 0 && { flex }, animatedStyle],
75
- ...hoverHandlers
68
+ style: [
69
+ styles.base,
70
+ containerVariantStyle,
71
+ containerSizeStyles[size],
72
+ fullWidth && styles.fullWidth,
73
+ isDisabled && styles.disabled,
74
+ restStyle
75
+ ],
76
+ enabled: !isDisabled,
77
+ onPress: handlePress,
78
+ rippleColor: "transparent",
79
+ touchSoundDisabled: true,
80
+ activateOnHover: true,
81
+ accessibilityRole: "button",
82
+ accessibilityLabel: accessibilityLabel ?? label,
83
+ accessibilityHint,
84
+ accessibilityState: { disabled: isDisabled, busy: loading }
76
85
  },
77
- /* @__PURE__ */ React.createElement(
78
- TouchableOpacity,
86
+ loading ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ActivityIndicator, { size: "small", color: spinnerColor, style: { marginRight: s(6) } }), /* @__PURE__ */ React.createElement(
87
+ Text,
88
+ {
89
+ style: [styles.label, labelVariantStyle, labelSizeStyles[size], styles.labelLoading],
90
+ allowFontScaling: true,
91
+ numberOfLines: 1
92
+ },
93
+ label
94
+ )) : /* @__PURE__ */ React.createElement(React.Fragment, null, effectiveIcon && iconPosition === "left" && /* @__PURE__ */ React.createElement(React.Fragment, null, effectiveIcon), /* @__PURE__ */ React.createElement(
95
+ Text,
79
96
  {
80
- style: [
81
- styles.base,
82
- containerVariantStyle,
83
- containerSizeStyles[size],
84
- fullWidth && styles.fullWidth,
85
- isDisabled && styles.disabled,
86
- restStyle
87
- ],
88
- disabled: isDisabled,
89
- activeOpacity: 1,
90
- touchSoundDisabled: true,
91
- onPress: handlePress,
92
- onPressIn,
93
- onPressOut,
94
- accessibilityRole: "button",
95
- accessibilityLabel: accessibilityLabel ?? label,
96
- accessibilityHint,
97
- accessibilityState: { disabled: isDisabled, busy: loading },
98
- ...props
97
+ style: [styles.label, labelVariantStyle, labelSizeStyles[size], effectiveIcon ? styles.labelWithIcon : void 0],
98
+ allowFontScaling: true,
99
+ numberOfLines: 1
99
100
  },
100
- loading ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ActivityIndicator, { size: "small", color: spinnerColor, style: { marginRight: s(6) } }), /* @__PURE__ */ React.createElement(
101
- Text,
102
- {
103
- style: [styles.label, labelVariantStyle, labelSizeStyles[size], styles.labelLoading],
104
- allowFontScaling: true,
105
- numberOfLines: 1
106
- },
107
- label
108
- )) : /* @__PURE__ */ React.createElement(React.Fragment, null, effectiveIcon && iconPosition === "left" && /* @__PURE__ */ React.createElement(React.Fragment, null, effectiveIcon), /* @__PURE__ */ React.createElement(
109
- Text,
110
- {
111
- style: [styles.label, labelVariantStyle, labelSizeStyles[size], effectiveIcon ? styles.labelWithIcon : void 0],
112
- allowFontScaling: true,
113
- numberOfLines: 1
114
- },
115
- label
116
- ), effectiveIcon && iconPosition === "right" && /* @__PURE__ */ React.createElement(React.Fragment, null, effectiveIcon))
117
- )
118
- );
101
+ label
102
+ ), effectiveIcon && iconPosition === "right" && /* @__PURE__ */ React.createElement(React.Fragment, null, effectiveIcon))
103
+ ));
119
104
  }
120
105
  var Button = React.memo(ButtonBase);
121
106
  var styles = StyleSheet.create({
@@ -0,0 +1,30 @@
1
+ import { PRESS_SCALE } from './chunk-DVK4G2GT.mjs';
2
+ import { createAnimatedPressable } from 'pressto';
3
+
4
+ var PressableButton = createAnimatedPressable((progress) => {
5
+ "worklet";
6
+ const scale = 1 - (1 - PRESS_SCALE.button) * progress;
7
+ return { transform: [{ scale }] };
8
+ });
9
+ var PressableCard = createAnimatedPressable((progress) => {
10
+ "worklet";
11
+ const scale = 1 - (1 - PRESS_SCALE.card) * progress;
12
+ return { transform: [{ scale }] };
13
+ });
14
+ var PressableRow = createAnimatedPressable((progress) => {
15
+ "worklet";
16
+ const scale = 1 - (1 - PRESS_SCALE.row) * progress;
17
+ return { transform: [{ scale }] };
18
+ });
19
+ var PressableChip = createAnimatedPressable((progress) => {
20
+ "worklet";
21
+ const scale = 1 - (1 - PRESS_SCALE.chip) * progress;
22
+ return { transform: [{ scale }] };
23
+ });
24
+ var PressableTab = createAnimatedPressable((progress) => {
25
+ "worklet";
26
+ const scale = 1 - (1 - PRESS_SCALE.button) * progress;
27
+ return { transform: [{ scale }] };
28
+ });
29
+
30
+ export { PressableButton, PressableCard, PressableChip, PressableRow, PressableTab };