@retray-dev/ui-kit 10.1.0 → 12.1.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 (192) hide show
  1. package/COMPONENTS.md +419 -38
  2. package/README.md +14 -5
  3. package/dist/Accordion.js +1 -1
  4. package/dist/Accordion.mjs +3 -3
  5. package/dist/AlertBanner.js +1 -1
  6. package/dist/AlertBanner.mjs +3 -3
  7. package/dist/AppHeader.js +1 -1
  8. package/dist/AppHeader.mjs +4 -4
  9. package/dist/Avatar.mjs +2 -2
  10. package/dist/Badge.js +1 -1
  11. package/dist/Badge.mjs +3 -3
  12. package/dist/Button.js +1 -1
  13. package/dist/Button.mjs +3 -3
  14. package/dist/Card.mjs +2 -2
  15. package/dist/CategoryStrip.js +1 -1
  16. package/dist/CategoryStrip.mjs +3 -3
  17. package/dist/Checkbox.mjs +2 -2
  18. package/dist/Chip.js +1 -1
  19. package/dist/Chip.mjs +3 -3
  20. package/dist/ConfirmDialog.d.mts +1 -6
  21. package/dist/ConfirmDialog.d.ts +1 -6
  22. package/dist/ConfirmDialog.js +30 -24
  23. package/dist/ConfirmDialog.mjs +4 -4
  24. package/dist/CurrencyDisplay.mjs +2 -2
  25. package/dist/CurrencyInput.d.mts +3 -8
  26. package/dist/CurrencyInput.d.ts +3 -8
  27. package/dist/CurrencyInput.js +4 -2
  28. package/dist/CurrencyInput.mjs +4 -4
  29. package/dist/DetailRow.d.mts +1 -1
  30. package/dist/DetailRow.d.ts +1 -1
  31. package/dist/DetailRow.js +1 -1
  32. package/dist/DetailRow.mjs +3 -3
  33. package/dist/EmptyState.js +1 -1
  34. package/dist/EmptyState.mjs +4 -4
  35. package/dist/ErrorBoundary.js +1 -1
  36. package/dist/ErrorBoundary.mjs +3 -3
  37. package/dist/Form.mjs +2 -2
  38. package/dist/IconButton.js +1 -1
  39. package/dist/IconButton.mjs +3 -3
  40. package/dist/IconPicker.d.mts +17 -0
  41. package/dist/IconPicker.d.ts +17 -0
  42. package/dist/IconPicker.js +1424 -0
  43. package/dist/IconPicker.mjs +8 -0
  44. package/dist/ImageUpload.d.mts +3 -1
  45. package/dist/ImageUpload.d.ts +3 -1
  46. package/dist/ImageUpload.js +28 -10
  47. package/dist/ImageUpload.mjs +3 -3
  48. package/dist/ImageViewer.js +1 -1
  49. package/dist/ImageViewer.mjs +5 -5
  50. package/dist/Input.js +1 -1
  51. package/dist/Input.mjs +3 -3
  52. package/dist/LabelValue.js +1 -1
  53. package/dist/LabelValue.mjs +3 -3
  54. package/dist/ListGroup.mjs +2 -2
  55. package/dist/ListItem.d.mts +7 -7
  56. package/dist/ListItem.d.ts +7 -7
  57. package/dist/ListItem.js +13 -8
  58. package/dist/ListItem.mjs +3 -3
  59. package/dist/MediaCard.js +1 -1
  60. package/dist/MediaCard.mjs +3 -3
  61. package/dist/MenuGroup.mjs +2 -2
  62. package/dist/MenuItem.js +1 -1
  63. package/dist/MenuItem.mjs +3 -3
  64. package/dist/MonthPicker.mjs +2 -2
  65. package/dist/NumberStepper.d.mts +19 -0
  66. package/dist/NumberStepper.d.ts +19 -0
  67. package/dist/NumberStepper.js +410 -0
  68. package/dist/NumberStepper.mjs +9 -0
  69. package/dist/PagerDots.js +1 -1
  70. package/dist/PagerDots.mjs +3 -3
  71. package/dist/Pressable.d.mts +15 -7
  72. package/dist/Pressable.d.ts +15 -7
  73. package/dist/Pressable.js +7 -3
  74. package/dist/Pressable.mjs +1 -1
  75. package/dist/PricingCard.js +1 -1
  76. package/dist/PricingCard.mjs +5 -5
  77. package/dist/Progress.mjs +2 -2
  78. package/dist/RadioGroup.mjs +2 -2
  79. package/dist/RetrayProvider.mjs +3 -3
  80. package/dist/Select.mjs +2 -2
  81. package/dist/SelectableGrid.js +1 -1
  82. package/dist/SelectableGrid.mjs +3 -3
  83. package/dist/Separator.mjs +2 -2
  84. package/dist/Sheet.d.mts +4 -46
  85. package/dist/Sheet.d.ts +4 -46
  86. package/dist/Sheet.js +46 -114
  87. package/dist/Sheet.mjs +2 -3
  88. package/dist/SheetSelect.js +1 -1
  89. package/dist/SheetSelect.mjs +3 -3
  90. package/dist/Skeleton.mjs +2 -2
  91. package/dist/Slider.mjs +2 -2
  92. package/dist/Spinner.mjs +2 -2
  93. package/dist/Stats.d.mts +30 -0
  94. package/dist/Stats.d.ts +30 -0
  95. package/dist/Stats.js +429 -0
  96. package/dist/Stats.mjs +9 -0
  97. package/dist/Switch.mjs +2 -2
  98. package/dist/TabBar.js +1 -1
  99. package/dist/TabBar.mjs +3 -3
  100. package/dist/Tabs.mjs +2 -2
  101. package/dist/Text.d.mts +3 -1
  102. package/dist/Text.d.ts +3 -1
  103. package/dist/Text.js +3 -3
  104. package/dist/Text.mjs +2 -2
  105. package/dist/Textarea.js +1 -1
  106. package/dist/Textarea.mjs +3 -3
  107. package/dist/Toast.mjs +2 -2
  108. package/dist/Toggle.js +1 -1
  109. package/dist/Toggle.mjs +3 -3
  110. package/dist/{chunk-DJ7RN37L.mjs → chunk-265G6A46.mjs} +2 -2
  111. package/dist/{chunk-WOEYDUJZ.mjs → chunk-2A2LEFZG.mjs} +2 -2
  112. package/dist/{chunk-ID72TK46.mjs → chunk-2CBQKU7H.mjs} +1 -1
  113. package/dist/{chunk-OB4JUQ3O.mjs → chunk-2I2AYECM.mjs} +1 -1
  114. package/dist/{chunk-WJLKJMKR.mjs → chunk-357YO24D.mjs} +4 -4
  115. package/dist/{chunk-GQYFLP3D.mjs → chunk-3GEYJ7I5.mjs} +1 -1
  116. package/dist/{chunk-AV4EMIRH.mjs → chunk-3N2M3WZL.mjs} +1 -1
  117. package/dist/{chunk-TERDKCLE.mjs → chunk-3UYAZ7I4.mjs} +2 -2
  118. package/dist/{chunk-JMOZEC77.mjs → chunk-4WFMPFZB.mjs} +1 -1
  119. package/dist/chunk-5OLNXP3S.mjs +144 -0
  120. package/dist/{chunk-6OAZJ577.mjs → chunk-7HSILTC4.mjs} +3 -3
  121. package/dist/{chunk-IRRY3CRZ.mjs → chunk-AKM4EPOT.mjs} +1 -1
  122. package/dist/{chunk-VGTDN7SW.mjs → chunk-AQEVCEXV.mjs} +2 -2
  123. package/dist/{chunk-WBOOUHSS.mjs → chunk-BCWEHE34.mjs} +1 -1
  124. package/dist/{chunk-AJ7ZDNBT.mjs → chunk-BOVUP27T.mjs} +1 -1
  125. package/dist/{chunk-BRKYVJVV.mjs → chunk-BQZE3HAW.mjs} +1 -1
  126. package/dist/{chunk-MLF3EZFW.mjs → chunk-D3Y2T42P.mjs} +2 -2
  127. package/dist/{chunk-3U4SSNWP.mjs → chunk-DF6DU42P.mjs} +2 -2
  128. package/dist/{chunk-ZJKGQMYH.mjs → chunk-DI7CBDL6.mjs} +2 -2
  129. package/dist/{chunk-2TFTAWVJ.mjs → chunk-DOGIPOF5.mjs} +2 -2
  130. package/dist/{chunk-MBMXYJJV.mjs → chunk-E7NEHHXV.mjs} +7 -3
  131. package/dist/{chunk-MX6HRKMI.mjs → chunk-EFLFRAHD.mjs} +1 -1
  132. package/dist/{chunk-SOYNZDVY.mjs → chunk-EMUWGDWC.mjs} +6 -1
  133. package/dist/{chunk-4I7D47FH.mjs → chunk-F4V6XLP4.mjs} +4 -4
  134. package/dist/{chunk-UREA2GYY.mjs → chunk-FA2KMTH5.mjs} +2 -2
  135. package/dist/{chunk-Y2NS74WS.mjs → chunk-FFTYLPSB.mjs} +46 -98
  136. package/dist/{chunk-OHBNABL5.mjs → chunk-FUVYSVGR.mjs} +14 -9
  137. package/dist/{chunk-KIHCWCWL.mjs → chunk-FVTVCJAH.mjs} +2 -2
  138. package/dist/{chunk-Y4GL2MHX.mjs → chunk-GK4VRMNE.mjs} +30 -12
  139. package/dist/{chunk-6Q64UFIA.mjs → chunk-HJ46DTJE.mjs} +1 -1
  140. package/dist/{chunk-WF2XDFRK.mjs → chunk-HLMPMUK2.mjs} +1 -1
  141. package/dist/{chunk-GD6KXMG5.mjs → chunk-I4V5XZPS.mjs} +1 -1
  142. package/dist/{chunk-AZJF2BLK.mjs → chunk-ISY26JQJ.mjs} +2 -2
  143. package/dist/{chunk-X4G6APW6.mjs → chunk-J6Q2YJEV.mjs} +1 -1
  144. package/dist/{chunk-KZL5VTYK.mjs → chunk-JCZQOY4O.mjs} +31 -24
  145. package/dist/{chunk-CZCQZHG6.mjs → chunk-JNVAIDLK.mjs} +2 -2
  146. package/dist/{chunk-SOA2Z4RB.mjs → chunk-JULSIZDM.mjs} +1 -1
  147. package/dist/{chunk-T7XZ7H7Y.mjs → chunk-KA7LTET3.mjs} +17 -3
  148. package/dist/chunk-KHYX4IOM.mjs +1114 -0
  149. package/dist/{chunk-LXJIIOYQ.mjs → chunk-LRM4AVYY.mjs} +2 -2
  150. package/dist/{chunk-VQ57HWPL.mjs → chunk-MYZ2EDYU.mjs} +2 -2
  151. package/dist/chunk-N4ZPVCJH.mjs +126 -0
  152. package/dist/{chunk-NA7PARID.mjs → chunk-NXI4YDZ2.mjs} +2 -2
  153. package/dist/{chunk-4K625MVM.mjs → chunk-OULVKTWL.mjs} +2 -2
  154. package/dist/{chunk-A4MDAP7G.mjs → chunk-P64WHW4A.mjs} +2 -2
  155. package/dist/{chunk-URI2WBIV.mjs → chunk-P73V2EKS.mjs} +2 -2
  156. package/dist/{chunk-ZUR7AU5R.mjs → chunk-PGERH3P7.mjs} +2 -2
  157. package/dist/{chunk-2UYENBLV.mjs → chunk-QSFV2P7O.mjs} +1 -1
  158. package/dist/{chunk-JT7HKXRB.mjs → chunk-S3KJCPEJ.mjs} +1 -1
  159. package/dist/{chunk-6MKGPAR2.mjs → chunk-V6NFJXKO.mjs} +2 -2
  160. package/dist/{chunk-A3A6KNQN.mjs → chunk-WOEWGSTU.mjs} +1 -1
  161. package/dist/{chunk-JUXSWN54.mjs → chunk-X26S5EVZ.mjs} +4 -2
  162. package/dist/{chunk-YFZ3ELX5.mjs → chunk-XBAGGKLW.mjs} +2 -2
  163. package/dist/{chunk-JB67UOB5.mjs → chunk-ZHMSAYLT.mjs} +2 -2
  164. package/dist/fonts.d.mts +1 -7
  165. package/dist/fonts.d.ts +1 -7
  166. package/dist/fonts.js +0 -2
  167. package/dist/fonts.mjs +1 -2
  168. package/dist/index.d.mts +7 -1
  169. package/dist/index.d.ts +7 -1
  170. package/dist/index.js +1831 -475
  171. package/dist/index.mjs +54 -51
  172. package/package.json +3 -3
  173. package/src/components/ConfirmDialog/ConfirmDialog.tsx +39 -30
  174. package/src/components/CurrencyInput/CurrencyInput.tsx +4 -7
  175. package/src/components/DetailRow/DetailRow.tsx +1 -1
  176. package/src/components/IconPicker/IconPicker.tsx +395 -0
  177. package/src/components/IconPicker/index.ts +1 -0
  178. package/src/components/ImageUpload/ImageUpload.tsx +34 -12
  179. package/src/components/ListItem/ListItem.tsx +43 -28
  180. package/src/components/NumberStepper/NumberStepper.tsx +147 -0
  181. package/src/components/NumberStepper/index.ts +1 -0
  182. package/src/components/Pressable/Pressable.tsx +20 -8
  183. package/src/components/Sheet/Sheet.tsx +64 -172
  184. package/src/components/Stats/Stats.tsx +226 -0
  185. package/src/components/Stats/index.ts +2 -0
  186. package/src/components/Text/Text.tsx +4 -2
  187. package/src/fonts.ts +0 -7
  188. package/src/index.ts +7 -1
  189. package/src/theme/colorUtils.ts +9 -0
  190. package/src/utils/curatedIcons.ts +849 -0
  191. package/src/utils/fontGuard.ts +2 -1
  192. package/src/utils/icons.ts +20 -2
package/dist/index.mjs CHANGED
@@ -1,61 +1,64 @@
1
- export { Tabs, TabsContent } from './chunk-GQYFLP3D.mjs';
2
- export { Text } from './chunk-WJLKJMKR.mjs';
3
- export { Textarea } from './chunk-CZCQZHG6.mjs';
4
- export { Toggle } from './chunk-KIHCWCWL.mjs';
5
1
  export { VirtualList } from './chunk-NC5ZTR2Y.mjs';
6
- export { Separator } from './chunk-MX6HRKMI.mjs';
7
- export { BottomSheetModalProvider, Sheet, BottomSheetTextInput as SheetTextInput } from './chunk-Y2NS74WS.mjs';
8
- export { SheetSelect } from './chunk-URI2WBIV.mjs';
9
- export { Skeleton } from './chunk-AJ7ZDNBT.mjs';
10
- export { Slider } from './chunk-JMOZEC77.mjs';
11
- export { Switch } from './chunk-WF2XDFRK.mjs';
12
- export { TabBar } from './chunk-MLF3EZFW.mjs';
13
- export { Pressable } from './chunk-MBMXYJJV.mjs';
14
- export { PricingCard } from './chunk-4I7D47FH.mjs';
15
- export { Progress } from './chunk-OB4JUQ3O.mjs';
16
- export { RadioGroup } from './chunk-X4G6APW6.mjs';
17
- export { RetrayProvider } from './chunk-YFZ3ELX5.mjs';
18
- export { ToastProvider, sonnerToast as toast, useToast } from './chunk-2UYENBLV.mjs';
19
- export { Select } from './chunk-A3A6KNQN.mjs';
20
- export { SelectableGrid } from './chunk-NA7PARID.mjs';
21
- export { LabelValue } from './chunk-A4MDAP7G.mjs';
22
- export { ListGroup, ListGroupFooter, ListGroupHeader } from './chunk-SOA2Z4RB.mjs';
23
- export { ListItem } from './chunk-OHBNABL5.mjs';
24
- export { MediaCard } from './chunk-VGTDN7SW.mjs';
25
- export { MenuGroup, MenuGroupFooter, MenuGroupHeader } from './chunk-IRRY3CRZ.mjs';
26
- export { MenuItem } from './chunk-ZJKGQMYH.mjs';
27
- export { MonthPicker, dateToMonthPickerValue, monthPickerValueToDate } from './chunk-GD6KXMG5.mjs';
28
- export { DetailRow } from './chunk-JB67UOB5.mjs';
29
- export { EmptyState } from './chunk-6OAZJ577.mjs';
30
- export { ErrorBoundary } from './chunk-LXJIIOYQ.mjs';
31
- export { Form, FormField, FormFooter, FormSection } from './chunk-6Q64UFIA.mjs';
32
- export { ImageUpload } from './chunk-Y4GL2MHX.mjs';
33
- export { Spinner } from './chunk-WBOOUHSS.mjs';
34
- export { ImageViewer } from './chunk-WOEYDUJZ.mjs';
35
- export { PagerDots } from './chunk-4K625MVM.mjs';
2
+ export { Stats } from './chunk-5OLNXP3S.mjs';
3
+ export { Switch } from './chunk-HLMPMUK2.mjs';
4
+ export { TabBar } from './chunk-D3Y2T42P.mjs';
5
+ export { Tabs, TabsContent } from './chunk-3GEYJ7I5.mjs';
6
+ export { Text } from './chunk-357YO24D.mjs';
7
+ export { Textarea } from './chunk-JNVAIDLK.mjs';
8
+ export { Toggle } from './chunk-FVTVCJAH.mjs';
9
+ export { Select } from './chunk-WOEWGSTU.mjs';
10
+ export { SelectableGrid } from './chunk-NXI4YDZ2.mjs';
11
+ export { Separator } from './chunk-EFLFRAHD.mjs';
12
+ export { BottomSheetModalProvider, Sheet, BottomSheetTextInput as SheetTextInput } from './chunk-FFTYLPSB.mjs';
13
+ export { SheetSelect } from './chunk-P73V2EKS.mjs';
14
+ export { Skeleton } from './chunk-BOVUP27T.mjs';
15
+ export { Slider } from './chunk-4WFMPFZB.mjs';
16
+ export { MonthPicker, dateToMonthPickerValue, monthPickerValueToDate } from './chunk-I4V5XZPS.mjs';
17
+ export { NumberStepper } from './chunk-N4ZPVCJH.mjs';
18
+ export { Pressable } from './chunk-E7NEHHXV.mjs';
19
+ export { PricingCard } from './chunk-F4V6XLP4.mjs';
20
+ export { Progress } from './chunk-2I2AYECM.mjs';
21
+ export { RadioGroup } from './chunk-J6Q2YJEV.mjs';
22
+ export { RetrayProvider } from './chunk-XBAGGKLW.mjs';
23
+ export { ToastProvider, sonnerToast as toast, useToast } from './chunk-QSFV2P7O.mjs';
24
+ export { ImageViewer } from './chunk-2A2LEFZG.mjs';
25
+ export { PagerDots } from './chunk-OULVKTWL.mjs';
26
+ export { LabelValue } from './chunk-P64WHW4A.mjs';
27
+ export { ListGroup, ListGroupFooter, ListGroupHeader } from './chunk-JULSIZDM.mjs';
28
+ export { ListItem } from './chunk-FUVYSVGR.mjs';
29
+ export { MediaCard } from './chunk-AQEVCEXV.mjs';
30
+ export { MenuGroup, MenuGroupFooter, MenuGroupHeader } from './chunk-AKM4EPOT.mjs';
31
+ export { MenuItem } from './chunk-DI7CBDL6.mjs';
32
+ export { DetailRow } from './chunk-ZHMSAYLT.mjs';
33
+ export { EmptyState } from './chunk-7HSILTC4.mjs';
34
+ export { ErrorBoundary } from './chunk-LRM4AVYY.mjs';
35
+ export { Form, FormField, FormFooter, FormSection } from './chunk-HJ46DTJE.mjs';
36
+ export { IconPicker } from './chunk-KHYX4IOM.mjs';
37
+ export { ImageUpload } from './chunk-GK4VRMNE.mjs';
38
+ export { Spinner } from './chunk-BCWEHE34.mjs';
36
39
  export { ButtonGroup } from './chunk-3BBOZ3OQ.mjs';
37
- export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-ID72TK46.mjs';
38
- export { CategoryStrip } from './chunk-VQ57HWPL.mjs';
40
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-2CBQKU7H.mjs';
41
+ export { CategoryStrip } from './chunk-MYZ2EDYU.mjs';
39
42
  import './chunk-YNROWHQJ.mjs';
40
- export { Checkbox } from './chunk-AV4EMIRH.mjs';
41
- export { Chip, ChipGroup } from './chunk-UREA2GYY.mjs';
42
- export { ConfirmDialog } from './chunk-KZL5VTYK.mjs';
43
- export { CurrencyDisplay } from './chunk-BRKYVJVV.mjs';
44
- export { CurrencyInput } from './chunk-JUXSWN54.mjs';
45
- export { Input } from './chunk-ZUR7AU5R.mjs';
46
- export { Accordion } from './chunk-DJ7RN37L.mjs';
47
- export { AlertBanner } from './chunk-6MKGPAR2.mjs';
48
- export { AppHeader } from './chunk-AZJF2BLK.mjs';
49
- export { IconButton } from './chunk-3U4SSNWP.mjs';
50
- export { Avatar } from './chunk-JT7HKXRB.mjs';
51
- export { Badge } from './chunk-TERDKCLE.mjs';
52
- export { Button } from './chunk-2TFTAWVJ.mjs';
43
+ export { Checkbox } from './chunk-3N2M3WZL.mjs';
44
+ export { Chip, ChipGroup } from './chunk-FA2KMTH5.mjs';
45
+ export { ConfirmDialog } from './chunk-JCZQOY4O.mjs';
46
+ export { CurrencyDisplay } from './chunk-BQZE3HAW.mjs';
47
+ export { CurrencyInput } from './chunk-X26S5EVZ.mjs';
48
+ export { Input } from './chunk-PGERH3P7.mjs';
49
+ export { Accordion } from './chunk-265G6A46.mjs';
50
+ export { AlertBanner } from './chunk-V6NFJXKO.mjs';
51
+ export { AppHeader } from './chunk-ISY26JQJ.mjs';
52
+ export { IconButton } from './chunk-DF6DU42P.mjs';
53
+ export { Avatar } from './chunk-S3KJCPEJ.mjs';
54
+ export { Badge } from './chunk-3UYAZ7I4.mjs';
55
+ export { Button } from './chunk-DOGIPOF5.mjs';
53
56
  import './chunk-3DKJ2GIC.mjs';
54
57
  export { impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning, richHaptics, selectionAsync } from './chunk-EJ7ZPXOH.mjs';
55
58
  import './chunk-DVK4G2GT.mjs';
56
59
  export { BREAKPOINTS, ICON_SIZES, RADIUS, SHADOWS, SPACING, TYPOGRAPHY } from './chunk-QY3X2UYR.mjs';
57
- export { Icon, configureIconFamilies, renderIcon } from './chunk-T7XZ7H7Y.mjs';
58
- export { ThemeProvider, defaultDark, defaultLight, deriveColors, useTheme } from './chunk-SOYNZDVY.mjs';
60
+ export { Icon, configureIconFamilies, getValidIconNames, renderIcon } from './chunk-KA7LTET3.mjs';
61
+ export { ThemeProvider, defaultDark, defaultLight, deriveColors, useTheme, withAlpha } from './chunk-EMUWGDWC.mjs';
59
62
  import './chunk-2CE3TQVY.mjs';
60
63
  import './chunk-Y6FXYEAI.mjs';
61
64
  import { useState, useCallback } from 'react';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retray-dev/ui-kit",
3
- "version": "10.1.0",
3
+ "version": "12.1.0",
4
4
  "description": "Personal UI Kit for React Native / Expo",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -110,7 +110,7 @@
110
110
  "react-native-worklets": "0.5.1",
111
111
  "@types/react": "19.1.17",
112
112
  "react-native-safe-area-context": "5.6.2",
113
- "@gorhom/bottom-sheet": "5.2.8"
113
+ "@gorhom/bottom-sheet": "5.2.14"
114
114
  },
115
115
  "onlyBuiltDependencies": [
116
116
  "esbuild"
@@ -119,7 +119,7 @@
119
119
  "devDependencies": {
120
120
  "@eslint/js": "^9.0.0",
121
121
  "@expo/vector-icons": "^15.1.1",
122
- "@gorhom/bottom-sheet": "5.2.8",
122
+ "@gorhom/bottom-sheet": "5.2.14",
123
123
  "@react-native-community/slider": "5.0.1",
124
124
  "@react-native-picker/picker": "2.11.1",
125
125
  "@shopify/react-native-skia": "2.2.12",
@@ -1,10 +1,12 @@
1
- import React, { useEffect, useRef } from 'react'
1
+ import React, { useCallback, useEffect, useRef, useId } from 'react'
2
2
  import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'
3
- import BottomSheet, {
3
+ import {
4
+ BottomSheetModal,
4
5
  BottomSheetView,
5
6
  BottomSheetBackdrop,
6
7
  type BottomSheetBackdropProps,
7
8
  } from '@gorhom/bottom-sheet'
9
+ import { useSafeAreaInsets } from 'react-native-safe-area-context'
8
10
  import { Feather } from '@expo/vector-icons'
9
11
  import { impactMedium, notificationSuccess, selectionAsync as hapticSelection } from '../../utils/haptics'
10
12
  import { useTheme } from '../../theme'
@@ -14,16 +16,11 @@ import { s, vs, ms, mvs } from '../../utils/scaling'
14
16
  export interface ConfirmDialogProps {
15
17
  visible: boolean
16
18
  title: string
17
- /** Secondary text below title. */
18
19
  subtitle?: string
19
- /** @deprecated Use `subtitle` instead. */
20
- description?: string
21
20
  confirmLabel?: string
22
21
  cancelLabel?: string
23
22
  confirmVariant?: 'primary' | 'destructive'
24
- /** Show a loading spinner in the confirm button (e.g. while async action completes). */
25
23
  loading?: boolean
26
- /** Show an X close button in the top-right corner. */
27
24
  showCloseButton?: boolean
28
25
  onConfirm: () => void
29
26
  onCancel: () => void
@@ -33,7 +30,6 @@ export function ConfirmDialog({
33
30
  visible,
34
31
  title,
35
32
  subtitle,
36
- description,
37
33
  confirmLabel = 'Confirm',
38
34
  cancelLabel = 'Cancel',
39
35
  confirmVariant = 'primary',
@@ -43,37 +39,44 @@ export function ConfirmDialog({
43
39
  onCancel,
44
40
  }: ConfirmDialogProps) {
45
41
  const { colors } = useTheme()
46
- const ref = useRef<BottomSheet>(null)
47
- const effectiveSubtitle = subtitle ?? description
42
+ const insets = useSafeAreaInsets()
43
+ const ref = useRef<BottomSheetModal>(null)
44
+ const wasOpened = useRef(false)
45
+ const name = useId()
48
46
 
49
47
  useEffect(() => {
50
48
  if (visible) {
51
49
  impactMedium()
52
- ref.current?.snapToIndex(0)
53
- } else {
54
- ref.current?.close()
50
+ ref.current?.present()
51
+ wasOpened.current = true
52
+ } else if (wasOpened.current) {
53
+ ref.current?.dismiss()
55
54
  }
56
55
  }, [visible])
57
56
 
58
- const renderBackdrop = (props: BottomSheetBackdropProps) => (
59
- <BottomSheetBackdrop
60
- {...props}
61
- disappearsOnIndex={-1}
62
- appearsOnIndex={0}
63
- pressBehavior="close"
64
- />
57
+ const renderBackdrop = useCallback(
58
+ (props: BottomSheetBackdropProps) => (
59
+ <BottomSheetBackdrop
60
+ {...props}
61
+ disappearsOnIndex={-1}
62
+ appearsOnIndex={0}
63
+ pressBehavior="close"
64
+ />
65
+ ),
66
+ []
65
67
  )
66
68
 
67
69
  return (
68
- <BottomSheet
70
+ <BottomSheetModal
69
71
  ref={ref}
70
- index={-1}
71
- onClose={onCancel}
72
+ name={name}
73
+ onDismiss={onCancel}
72
74
  enableDynamicSizing
73
75
  backdropComponent={renderBackdrop}
74
- backgroundStyle={[styles.background, { backgroundColor: colors.card }]}
75
- handleIndicatorStyle={[styles.handle, { backgroundColor: colors.border }]}
76
+ backgroundStyle={{ ...styles.background, backgroundColor: colors.card }}
77
+ handleIndicatorStyle={{ ...styles.handle, backgroundColor: colors.border }}
76
78
  enablePanDownToClose
79
+ topInset={insets.top}
77
80
  >
78
81
  <BottomSheetView style={styles.content}>
79
82
  <View style={styles.header} accessibilityRole="header">
@@ -95,9 +98,9 @@ export function ConfirmDialog({
95
98
  </TouchableOpacity>
96
99
  ) : null}
97
100
  </View>
98
- {effectiveSubtitle ? (
101
+ {subtitle ? (
99
102
  <Text style={[styles.subtitle, { color: colors.foregroundMuted }]} allowFontScaling={true}>
100
- {effectiveSubtitle}
103
+ {subtitle}
101
104
  </Text>
102
105
  ) : null}
103
106
  </View>
@@ -108,7 +111,10 @@ export function ConfirmDialog({
108
111
  fullWidth
109
112
  loading={loading}
110
113
  disabled={loading}
111
- onPress={() => { notificationSuccess(); onConfirm() }}
114
+ onPress={() => {
115
+ notificationSuccess()
116
+ onConfirm()
117
+ }}
112
118
  icon={
113
119
  <Feather
114
120
  name={confirmVariant === 'destructive' ? 'trash-2' : 'check'}
@@ -125,12 +131,15 @@ export function ConfirmDialog({
125
131
  label={cancelLabel}
126
132
  variant="secondary"
127
133
  fullWidth
128
- onPress={() => { hapticSelection(); onCancel() }}
134
+ onPress={() => {
135
+ hapticSelection()
136
+ onCancel()
137
+ }}
129
138
  icon={<Feather name="x" size={15} color={colors.foreground} />}
130
139
  />
131
140
  </View>
132
141
  </BottomSheetView>
133
- </BottomSheet>
142
+ </BottomSheetModal>
134
143
  )
135
144
  }
136
145
 
@@ -1,11 +1,9 @@
1
1
  import React from 'react'
2
- import { ViewStyle, TextStyle } from 'react-native'
2
+ import { ViewStyle, TextStyle, TextInputProps } from 'react-native'
3
3
  import { Input } from '../Input'
4
4
  import { ms, vs } from '../../utils/scaling'
5
5
 
6
- export interface CurrencyInputProps {
7
- value?: string
8
- onChangeText?: (formatted: string) => void
6
+ export interface CurrencyInputProps extends TextInputProps {
9
7
  /** Called with the parsed numeric value (no separators, no prefix). */
10
8
  onChangeValue?: (raw: number) => void
11
9
  /** Currency symbol shown left of the value. Any string (`'$'`, `'€'`, `'£'`, `'COP '`). Defaults to `'$'`. */
@@ -18,10 +16,7 @@ export interface CurrencyInputProps {
18
16
  /** Red helper text; also changes input border to destructive color. */
19
17
  error?: string
20
18
  hint?: string
21
- placeholder?: string
22
- editable?: boolean
23
19
  containerStyle?: ViewStyle
24
- style?: TextStyle
25
20
  /** Use inside a Sheet/BottomSheet — passes sheetMode to the underlying Input. */
26
21
  sheetMode?: boolean
27
22
  }
@@ -47,6 +42,7 @@ export function CurrencyInput({
47
42
  containerStyle,
48
43
  style,
49
44
  sheetMode,
45
+ ...props
50
46
  }: CurrencyInputProps) {
51
47
  const handleChange = (text: string) => {
52
48
  const withoutPrefix = prefix && text.startsWith(prefix) ? text.slice(prefix.length) : text
@@ -73,6 +69,7 @@ export function CurrencyInput({
73
69
 
74
70
  return (
75
71
  <Input
72
+ {...props}
76
73
  value={displayValue}
77
74
  onChangeText={handleChange}
78
75
  keyboardType="numeric"
@@ -16,7 +16,7 @@ const weightMap: Record<DetailRowLabelWeight, string> = {
16
16
 
17
17
  export interface DetailRowProps {
18
18
  label: React.ReactNode
19
- value: string | React.ReactNode
19
+ value: string | number | React.ReactNode
20
20
  /** Dotted/dashed/solid line between label and value. Defaults to 'dotted'. */
21
21
  separator?: DetailRowSeparator
22
22
  labelWeight?: DetailRowLabelWeight