@retray-dev/ui-kit 13.0.0 → 13.4.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.
- package/CHANGELOG.md +680 -0
- package/CONSUMER.md +26 -9
- package/README.md +11 -12
- package/{COMPONENTS.md → SKILL.md} +515 -815
- package/dist/Accordion.d.mts +8 -6
- package/dist/Accordion.d.ts +8 -6
- package/dist/Accordion.js +40 -40
- package/dist/Accordion.mjs +4 -5
- package/dist/AlertBanner.d.mts +3 -3
- package/dist/AlertBanner.d.ts +3 -3
- package/dist/AlertBanner.js +7 -13
- package/dist/AlertBanner.mjs +4 -5
- package/dist/AppHeader.d.mts +8 -5
- package/dist/AppHeader.d.ts +8 -5
- package/dist/AppHeader.js +44 -31
- package/dist/AppHeader.mjs +6 -7
- package/dist/Avatar.d.mts +4 -4
- package/dist/Avatar.d.ts +4 -4
- package/dist/Avatar.mjs +2 -3
- package/dist/Badge.d.mts +5 -5
- package/dist/Badge.d.ts +5 -5
- package/dist/Badge.js +7 -13
- package/dist/Badge.mjs +3 -4
- package/dist/Button.d.mts +5 -5
- package/dist/Button.d.ts +5 -5
- package/dist/Button.js +31 -29
- package/dist/Button.mjs +5 -6
- package/dist/ButtonGroup.d.mts +3 -3
- package/dist/ButtonGroup.d.ts +3 -3
- package/dist/ButtonGroup.mjs +0 -1
- package/dist/Card.d.mts +13 -13
- package/dist/Card.d.ts +13 -13
- package/dist/Card.js +23 -14
- package/dist/Card.mjs +4 -5
- package/dist/CategoryStrip.d.mts +3 -3
- package/dist/CategoryStrip.d.ts +3 -3
- package/dist/CategoryStrip.js +30 -27
- package/dist/CategoryStrip.mjs +5 -6
- package/dist/Checkbox.d.mts +3 -2
- package/dist/Checkbox.d.ts +3 -2
- package/dist/Checkbox.js +26 -15
- package/dist/Checkbox.mjs +3 -4
- package/dist/Chip.d.mts +5 -5
- package/dist/Chip.d.ts +5 -5
- package/dist/Chip.js +30 -27
- package/dist/Chip.mjs +5 -6
- package/dist/ConfirmDialog.d.mts +3 -2
- package/dist/ConfirmDialog.d.ts +3 -2
- package/dist/ConfirmDialog.js +67 -49
- package/dist/ConfirmDialog.mjs +7 -7
- package/dist/CurrencyDisplay.d.mts +3 -3
- package/dist/CurrencyDisplay.d.ts +3 -3
- package/dist/CurrencyDisplay.mjs +2 -3
- package/dist/CurrencyInput.d.mts +2 -2
- package/dist/CurrencyInput.d.ts +2 -2
- package/dist/CurrencyInput.js +7 -13
- package/dist/CurrencyInput.mjs +4 -5
- package/dist/DetailRow.d.mts +6 -6
- package/dist/DetailRow.d.ts +6 -6
- package/dist/DetailRow.js +7 -13
- package/dist/DetailRow.mjs +3 -4
- package/dist/EmptyState.d.mts +4 -4
- package/dist/EmptyState.d.ts +4 -4
- package/dist/EmptyState.js +31 -29
- package/dist/EmptyState.mjs +6 -7
- package/dist/ErrorBoundary.d.mts +9 -7
- package/dist/ErrorBoundary.d.ts +9 -7
- package/dist/ErrorBoundary.js +33 -29
- package/dist/ErrorBoundary.mjs +5 -6
- package/dist/Form.d.mts +9 -9
- package/dist/Form.d.ts +9 -9
- package/dist/Form.mjs +2 -3
- package/dist/HolographicCard.d.mts +2 -2
- package/dist/HolographicCard.d.ts +2 -2
- package/dist/HolographicCard.js +23 -14
- package/dist/HolographicCard.mjs +2 -3
- package/dist/IconButton.d.mts +4 -4
- package/dist/IconButton.d.ts +4 -4
- package/dist/IconButton.js +30 -27
- package/dist/IconButton.mjs +4 -5
- package/dist/IconPicker.d.mts +2 -2
- package/dist/IconPicker.d.ts +2 -2
- package/dist/IconPicker.js +40 -45
- package/dist/IconPicker.mjs +6 -7
- package/dist/Image.d.mts +18 -0
- package/dist/Image.d.ts +18 -0
- package/dist/Image.js +53 -0
- package/dist/Image.mjs +2 -0
- package/dist/ImageUpload.d.mts +2 -4
- package/dist/ImageUpload.d.ts +2 -4
- package/dist/ImageUpload.js +50 -40
- package/dist/ImageUpload.mjs +5 -6
- package/dist/ImageViewer.d.mts +2 -2
- package/dist/ImageViewer.d.ts +2 -2
- package/dist/ImageViewer.js +31 -28
- package/dist/ImageViewer.mjs +6 -7
- package/dist/Input.d.mts +4 -4
- package/dist/Input.d.ts +4 -4
- package/dist/Input.js +7 -13
- package/dist/Input.mjs +3 -4
- package/dist/ItemGroup.d.mts +23 -0
- package/dist/ItemGroup.d.ts +23 -0
- package/dist/{ListGroup.js → ItemGroup.js} +11 -13
- package/dist/ItemGroup.mjs +4 -0
- package/dist/LabelValue.d.mts +4 -4
- package/dist/LabelValue.d.ts +4 -4
- package/dist/LabelValue.js +7 -13
- package/dist/LabelValue.mjs +3 -4
- package/dist/ListItem.d.mts +7 -6
- package/dist/ListItem.d.ts +7 -6
- package/dist/ListItem.js +33 -28
- package/dist/ListItem.mjs +5 -6
- package/dist/MediaCard.d.mts +6 -6
- package/dist/MediaCard.d.ts +6 -6
- package/dist/MediaCard.js +30 -27
- package/dist/MediaCard.mjs +5 -6
- package/dist/MenuItem.d.mts +6 -5
- package/dist/MenuItem.d.ts +6 -5
- package/dist/MenuItem.js +33 -28
- package/dist/MenuItem.mjs +5 -6
- package/dist/MonthPicker.d.mts +2 -2
- package/dist/MonthPicker.d.ts +2 -2
- package/dist/MonthPicker.js +23 -14
- package/dist/MonthPicker.mjs +3 -4
- package/dist/NumberStepper.d.mts +4 -3
- package/dist/NumberStepper.d.ts +4 -3
- package/dist/NumberStepper.js +34 -28
- package/dist/NumberStepper.mjs +5 -6
- package/dist/PagerDots.d.mts +2 -2
- package/dist/PagerDots.d.ts +2 -2
- package/dist/PagerDots.js +30 -27
- package/dist/PagerDots.mjs +4 -5
- package/dist/Pressable.d.mts +3 -27
- package/dist/Pressable.d.ts +3 -27
- package/dist/Pressable.js +23 -14
- package/dist/Pressable.mjs +2 -3
- package/dist/PricingCard.d.mts +2 -2
- package/dist/PricingCard.d.ts +2 -2
- package/dist/PricingCard.js +31 -29
- package/dist/PricingCard.mjs +7 -8
- package/dist/Progress.d.mts +2 -2
- package/dist/Progress.d.ts +2 -2
- package/dist/Progress.mjs +2 -3
- package/dist/RadioGroup.d.mts +2 -2
- package/dist/RadioGroup.d.ts +2 -2
- package/dist/RadioGroup.js +23 -14
- package/dist/RadioGroup.mjs +3 -4
- package/dist/RetrayProvider.d.mts +1 -1
- package/dist/RetrayProvider.d.ts +1 -1
- package/dist/RetrayProvider.js +14 -34
- package/dist/RetrayProvider.mjs +3 -4
- package/dist/ScreenContainer.d.mts +24 -0
- package/dist/ScreenContainer.d.ts +24 -0
- package/dist/ScreenContainer.js +85 -0
- package/dist/ScreenContainer.mjs +3 -0
- package/dist/Select.d.mts +3 -2
- package/dist/Select.d.ts +3 -2
- package/dist/Select.js +41 -46
- package/dist/Select.mjs +3 -4
- package/dist/SelectableCard.d.mts +5 -5
- package/dist/SelectableCard.d.ts +5 -5
- package/dist/SelectableCard.js +30 -27
- package/dist/SelectableCard.mjs +5 -6
- package/dist/SelectableGrid.d.mts +5 -4
- package/dist/SelectableGrid.d.ts +5 -4
- package/dist/SelectableGrid.js +80 -45
- package/dist/SelectableGrid.mjs +5 -6
- package/dist/Separator.d.mts +4 -2
- package/dist/Separator.d.ts +4 -2
- package/dist/Separator.js +29 -1
- package/dist/Separator.mjs +3 -3
- package/dist/Sheet.d.mts +11 -11
- package/dist/Sheet.d.ts +11 -11
- package/dist/Sheet.js +62 -34
- package/dist/Sheet.mjs +4 -4
- package/dist/SheetSelect.d.mts +2 -2
- package/dist/SheetSelect.d.ts +2 -2
- package/dist/SheetSelect.js +30 -27
- package/dist/SheetSelect.mjs +5 -6
- package/dist/Skeleton.d.mts +5 -5
- package/dist/Skeleton.d.ts +5 -5
- package/dist/Skeleton.mjs +3 -4
- package/dist/Slider.d.mts +3 -2
- package/dist/Slider.d.ts +3 -2
- package/dist/Slider.js +25 -14
- package/dist/Slider.mjs +3 -4
- package/dist/Spinner.d.mts +2 -2
- package/dist/Spinner.d.ts +2 -2
- package/dist/Spinner.mjs +2 -3
- package/dist/Stats.d.mts +6 -6
- package/dist/Stats.d.ts +6 -6
- package/dist/Stats.js +30 -27
- package/dist/Stats.mjs +5 -6
- package/dist/Switch.d.mts +3 -2
- package/dist/Switch.d.ts +3 -2
- package/dist/Switch.js +25 -15
- package/dist/Switch.mjs +3 -4
- package/dist/TabBar.d.mts +3 -3
- package/dist/TabBar.d.ts +3 -3
- package/dist/TabBar.js +30 -27
- package/dist/TabBar.mjs +4 -5
- package/dist/Tabs.d.mts +13 -13
- package/dist/Tabs.d.ts +13 -13
- package/dist/Tabs.js +23 -14
- package/dist/Tabs.mjs +3 -4
- package/dist/Text.d.mts +4 -4
- package/dist/Text.d.ts +4 -4
- package/dist/Text.js +20 -2
- package/dist/Text.mjs +3 -4
- package/dist/Textarea.d.mts +3 -3
- package/dist/Textarea.d.ts +3 -3
- package/dist/Textarea.js +7 -13
- package/dist/Textarea.mjs +3 -4
- package/dist/Toast.d.mts +15 -13
- package/dist/Toast.d.ts +15 -13
- package/dist/Toast.mjs +2 -3
- package/dist/Toggle.d.mts +4 -4
- package/dist/Toggle.d.ts +4 -4
- package/dist/Toggle.js +30 -27
- package/dist/Toggle.mjs +4 -5
- package/dist/VirtualizedList.d.mts +28 -0
- package/dist/VirtualizedList.d.ts +28 -0
- package/dist/VirtualizedList.js +130 -0
- package/dist/VirtualizedList.mjs +3 -0
- package/dist/{chunk-MZ6WRTD2.mjs → chunk-24JTXQ2M.mjs} +7 -13
- package/dist/{chunk-OBV72JD4.mjs → chunk-2DDJ53DK.mjs} +9 -11
- package/dist/{chunk-6CR4S6W2.mjs → chunk-2J5OZOMX.mjs} +19 -8
- package/dist/{chunk-4NQFTHN3.mjs → chunk-3GE4UFV5.mjs} +2 -2
- package/dist/{chunk-KAGADD2O.mjs → chunk-3RIZCKRM.mjs} +2 -2
- package/dist/{chunk-DE25XTVQ.mjs → chunk-3VHFOSZR.mjs} +2 -2
- package/dist/{chunk-UOKFSFNJ.mjs → chunk-4PF4LKNT.mjs} +4 -2
- package/dist/{chunk-5MYNAAFE.mjs → chunk-5J7VKFSZ.mjs} +4 -4
- package/dist/{chunk-BTUW5LSG.mjs → chunk-5TNQ573V.mjs} +4 -3
- package/dist/{chunk-6QLBHUEG.mjs → chunk-6T2DVIQT.mjs} +7 -5
- package/dist/{chunk-L3YKPTJQ.mjs → chunk-7CE6PDCQ.mjs} +2 -2
- package/dist/{chunk-Y6YS33GM.mjs → chunk-AHFEAY6M.mjs} +4 -4
- package/dist/{chunk-4ZO5PTKF.mjs → chunk-AZRATPNP.mjs} +5 -3
- package/dist/{chunk-V2ZB2XNS.mjs → chunk-BGXOEFDM.mjs} +9 -22
- package/dist/{chunk-KC5QDYGZ.mjs → chunk-BMAAAJWN.mjs} +2 -2
- package/dist/{chunk-IJCMPVW5.mjs → chunk-BQMJQMWY.mjs} +2 -2
- package/dist/{chunk-E4EQSCKR.mjs → chunk-BTPCY4C7.mjs} +7 -5
- package/dist/chunk-BVJAYPAD.mjs +55 -0
- package/dist/{chunk-RA6SAAFE.mjs → chunk-BWLVX2SQ.mjs} +4 -4
- package/dist/{chunk-EROPDCB5.mjs → chunk-CCEM3HIJ.mjs} +30 -25
- package/dist/chunk-CTUFFKGS.mjs +30 -0
- package/dist/{chunk-EHGBHFMH.mjs → chunk-CYGYC7XT.mjs} +8 -4
- package/dist/{chunk-ESQDPO5E.mjs → chunk-DLAOTHHS.mjs} +7 -6
- package/dist/{chunk-QY3X2UYR.mjs → chunk-DYYPDQA2.mjs} +21 -7
- package/dist/{chunk-S44XWTTC.mjs → chunk-E4BJ5WXG.mjs} +3 -3
- package/dist/{chunk-HUSSF6TF.mjs → chunk-EQNCMDZC.mjs} +1 -1
- package/dist/{chunk-PI6RULJX.mjs → chunk-EQYTDFDD.mjs} +1 -1
- package/dist/{chunk-BULKGOIZ.mjs → chunk-FE26TPCI.mjs} +4 -4
- package/dist/{chunk-DBHSUUKU.mjs → chunk-FOUSI6JD.mjs} +1 -1
- package/dist/{chunk-KPTY7UYQ.mjs → chunk-GR7PKEKD.mjs} +1 -1
- package/dist/{chunk-RRKM4MKB.mjs → chunk-HLWGFBIF.mjs} +3 -3
- package/dist/chunk-HMKJGVXA.mjs +35 -0
- package/dist/{chunk-U6DEBYU5.mjs → chunk-IFGZUJFH.mjs} +3 -3
- package/dist/{chunk-2VIDP72N.mjs → chunk-K3V6OTVB.mjs} +1 -1
- package/dist/{chunk-K7TKID3V.mjs → chunk-K4YFTUMC.mjs} +3 -3
- package/dist/{chunk-NGEN2EES.mjs → chunk-MQAK2W6L.mjs} +14 -22
- package/dist/{chunk-CM2DG4MR.mjs → chunk-MSS3CD6F.mjs} +4 -4
- package/dist/{chunk-TETMEKZE.mjs → chunk-NQYS6RPX.mjs} +8 -5
- package/dist/{chunk-62BBSSUF.mjs → chunk-P5KC3RTG.mjs} +1 -1
- package/dist/{chunk-K3QX2M26.mjs → chunk-PPKCGCZ3.mjs} +5 -5
- package/dist/{chunk-ITG4JQM3.mjs → chunk-QEE3EQ3N.mjs} +2 -2
- package/dist/{chunk-URIH43IJ.mjs → chunk-RLPPRIJ7.mjs} +20 -34
- package/dist/{chunk-XCIG6HT2.mjs → chunk-S433IOQE.mjs} +2 -2
- package/dist/{chunk-IGU223UM.mjs → chunk-SWUZKVYO.mjs} +1 -1
- package/dist/{chunk-MP7GLMIR.mjs → chunk-T4KMKHTI.mjs} +55 -23
- package/dist/{chunk-2QOHHBJC.mjs → chunk-UBTP4NPP.mjs} +5 -21
- package/dist/{chunk-TMH263OK.mjs → chunk-UEA2VYGW.mjs} +3 -3
- package/dist/chunk-VISIOH33.mjs +37 -0
- package/dist/{chunk-SZEKQAOY.mjs → chunk-VSKBODEY.mjs} +1 -1
- package/dist/{chunk-FTTI6T5Q.mjs → chunk-W422TEH2.mjs} +3 -3
- package/dist/{chunk-WIPEDNSD.mjs → chunk-WD5LBXPR.mjs} +4 -4
- package/dist/chunk-WFNGSYS4.mjs +111 -0
- package/dist/chunk-WR6DCNAE.mjs +65 -0
- package/dist/{chunk-ERWJPVX7.mjs → chunk-XKBB2UZU.mjs} +2 -2
- package/dist/{chunk-CBIZLRYH.mjs → chunk-Y5TPAKOS.mjs} +14 -17
- package/dist/{chunk-AZV7KNJI.mjs → chunk-YKWIMVGU.mjs} +2 -2
- package/dist/{chunk-ZKDKKQCE.mjs → chunk-YOXSXHDE.mjs} +4 -4
- package/dist/{chunk-PGQ6FMXS.mjs → chunk-ZO5BRTCW.mjs} +2 -2
- package/dist/{chunk-KSSVIFYR.mjs → chunk-ZQGCQ7SA.mjs} +14 -34
- package/dist/{chunk-ZTPYUU5C.mjs → chunk-ZRUUUVOO.mjs} +3 -3
- package/dist/fonts.mjs +0 -2
- package/dist/{index-CY34hxPN.d.ts → index-CinAt5Uo.d.mts} +3 -3
- package/dist/{index-CY34hxPN.d.mts → index-CinAt5Uo.d.ts} +3 -3
- package/dist/index.d.mts +69 -19
- package/dist/index.d.ts +69 -19
- package/dist/index.js +1023 -839
- package/dist/index.mjs +76 -70
- package/package.json +15 -12
- package/src/components/Accordion/Accordion.tsx +12 -18
- package/src/components/AppHeader/AppHeader.tsx +33 -10
- package/src/components/Checkbox/Checkbox.tsx +3 -0
- package/src/components/ConfirmDialog/ConfirmDialog.tsx +7 -21
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +5 -2
- package/src/components/Image/Image.tsx +50 -0
- package/src/components/Image/index.ts +2 -0
- package/src/components/ImageUpload/ImageUpload.tsx +34 -26
- package/src/components/{ListGroup/ListGroup.tsx → ItemGroup/ItemGroup.tsx} +15 -29
- package/src/components/ItemGroup/index.ts +2 -0
- package/src/components/ListGroup/index.tsx +20 -0
- package/src/components/ListItem/ListItem.tsx +3 -0
- package/src/components/MenuGroup/index.tsx +20 -0
- package/src/components/MenuItem/MenuItem.tsx +3 -0
- package/src/components/NumberStepper/NumberStepper.tsx +4 -0
- package/src/components/Pressable/Pressable.tsx +0 -24
- package/src/components/ScreenContainer/ScreenContainer.tsx +94 -0
- package/src/components/ScreenContainer/index.ts +2 -0
- package/src/components/Select/Select.tsx +25 -30
- package/src/components/SelectableGrid/SelectableGrid.tsx +51 -20
- package/src/components/Separator/Separator.tsx +35 -2
- package/src/components/Sheet/Sheet.tsx +3 -21
- package/src/components/Sheet/index.ts +2 -2
- package/src/components/Slider/Slider.tsx +3 -0
- package/src/components/Switch/Switch.tsx +3 -1
- package/src/components/Tabs/Tabs.tsx +9 -9
- package/src/components/Tabs/index.ts +1 -1
- package/src/components/Text/Text.tsx +7 -0
- package/src/components/VirtualizedList/VirtualizedList.tsx +154 -0
- package/src/components/VirtualizedList/index.ts +2 -0
- package/src/hooks/useConfirmDialog.ts +2 -11
- package/src/hooks/useSheetModal.ts +40 -0
- package/src/index.ts +5 -1
- package/src/theme/colors.ts +19 -57
- package/src/tokens.ts +21 -7
- package/src/utils/curatedIcons.ts +9 -18
- package/src/utils/haptics.ts +10 -21
- package/src/utils/icons.ts +7 -14
- package/dist/ListGroup.d.mts +0 -34
- package/dist/ListGroup.d.ts +0 -34
- package/dist/ListGroup.mjs +0 -5
- package/dist/MenuGroup.d.mts +0 -34
- package/dist/MenuGroup.d.ts +0 -34
- package/dist/MenuGroup.js +0 -106
- package/dist/MenuGroup.mjs +0 -5
- package/dist/chunk-ARONDO7M.mjs +0 -40
- package/dist/chunk-EW2FIDSM.mjs +0 -29
- package/dist/chunk-S2VGME7X.mjs +0 -82
- package/dist/chunk-Y6FXYEAI.mjs +0 -8
- package/src/components/ListGroup/index.ts +0 -1
- package/src/components/MenuGroup/MenuGroup.tsx +0 -145
- package/src/components/MenuGroup/index.ts +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1,66 +1,80 @@
|
|
|
1
|
-
export { Toggle } from './chunk-
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
23
|
-
export {
|
|
24
|
-
export {
|
|
25
|
-
export {
|
|
26
|
-
export {
|
|
27
|
-
export {
|
|
28
|
-
export {
|
|
29
|
-
|
|
30
|
-
export {
|
|
31
|
-
export {
|
|
32
|
-
export {
|
|
33
|
-
export {
|
|
34
|
-
export {
|
|
35
|
-
export {
|
|
36
|
-
export {
|
|
37
|
-
export {
|
|
38
|
-
export {
|
|
1
|
+
export { Toggle } from './chunk-HLWGFBIF.mjs';
|
|
2
|
+
export { VirtualizedList } from './chunk-WFNGSYS4.mjs';
|
|
3
|
+
export { Slider } from './chunk-4PF4LKNT.mjs';
|
|
4
|
+
export { Stats } from './chunk-YOXSXHDE.mjs';
|
|
5
|
+
export { Switch } from './chunk-5TNQ573V.mjs';
|
|
6
|
+
export { TabBar } from './chunk-IFGZUJFH.mjs';
|
|
7
|
+
export { Tabs, TabsContent } from './chunk-BMAAAJWN.mjs';
|
|
8
|
+
export { Text } from './chunk-CYGYC7XT.mjs';
|
|
9
|
+
export { Textarea } from './chunk-7CE6PDCQ.mjs';
|
|
10
|
+
export { ScreenContainer } from './chunk-WR6DCNAE.mjs';
|
|
11
|
+
export { Select } from './chunk-RLPPRIJ7.mjs';
|
|
12
|
+
export { SelectableCard, SelectableCardGroup } from './chunk-FE26TPCI.mjs';
|
|
13
|
+
export { SelectableGrid } from './chunk-T4KMKHTI.mjs';
|
|
14
|
+
export { Separator } from './chunk-BVJAYPAD.mjs';
|
|
15
|
+
export { BottomSheetModalProvider, Sheet, SheetContent, SheetFooter, SheetHeader, BottomSheetTextInput as SheetTextInput } from './chunk-UBTP4NPP.mjs';
|
|
16
|
+
export { SheetSelect } from './chunk-WD5LBXPR.mjs';
|
|
17
|
+
export { Skeleton } from './chunk-S433IOQE.mjs';
|
|
18
|
+
export { MonthPicker, dateToMonthPickerValue, monthPickerValueToDate } from './chunk-QEE3EQ3N.mjs';
|
|
19
|
+
export { NumberStepper } from './chunk-NQYS6RPX.mjs';
|
|
20
|
+
export { Pressable } from './chunk-P5KC3RTG.mjs';
|
|
21
|
+
export { PricingCard } from './chunk-PPKCGCZ3.mjs';
|
|
22
|
+
export { Progress } from './chunk-FOUSI6JD.mjs';
|
|
23
|
+
export { RadioGroup } from './chunk-BQMJQMWY.mjs';
|
|
24
|
+
export { RetrayProvider } from './chunk-XKBB2UZU.mjs';
|
|
25
|
+
export { ToastProvider, sonnerToast as toast, useToast } from './chunk-VSKBODEY.mjs';
|
|
26
|
+
export { ImageUpload } from './chunk-CCEM3HIJ.mjs';
|
|
27
|
+
export { ImageViewer } from './chunk-ZO5BRTCW.mjs';
|
|
28
|
+
export { PagerDots } from './chunk-E4BJ5WXG.mjs';
|
|
29
|
+
import { ItemGroup, ItemGroupHeader, ItemGroupFooter } from './chunk-2DDJ53DK.mjs';
|
|
30
|
+
export { ItemGroupFooter as ListGroupFooter, ItemGroupHeader as ListGroupHeader, ItemGroupFooter as MenuGroupFooter, ItemGroupHeader as MenuGroupHeader } from './chunk-2DDJ53DK.mjs';
|
|
31
|
+
export { LabelValue } from './chunk-3VHFOSZR.mjs';
|
|
32
|
+
export { ListItem } from './chunk-6T2DVIQT.mjs';
|
|
33
|
+
export { MediaCard } from './chunk-MSS3CD6F.mjs';
|
|
34
|
+
export { MenuItem } from './chunk-BTPCY4C7.mjs';
|
|
35
|
+
export { DetailRow } from './chunk-3RIZCKRM.mjs';
|
|
36
|
+
export { EmptyState } from './chunk-W422TEH2.mjs';
|
|
37
|
+
export { ErrorBoundary } from './chunk-DLAOTHHS.mjs';
|
|
38
|
+
export { Form, FormField, FormFooter, FormSection } from './chunk-GR7PKEKD.mjs';
|
|
39
|
+
export { IconPicker } from './chunk-MQAK2W6L.mjs';
|
|
40
|
+
export { Spinner } from './chunk-K3V6OTVB.mjs';
|
|
41
|
+
export { Image } from './chunk-VISIOH33.mjs';
|
|
39
42
|
export { ButtonGroup } from './chunk-3BBOZ3OQ.mjs';
|
|
40
|
-
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-
|
|
41
|
-
export { CategoryStrip } from './chunk-
|
|
42
|
-
export { Checkbox } from './chunk-
|
|
43
|
-
export { Chip, ChipGroup } from './chunk-
|
|
44
|
-
export { ConfirmDialog } from './chunk-
|
|
45
|
-
export {
|
|
46
|
-
export {
|
|
47
|
-
export {
|
|
48
|
-
export {
|
|
49
|
-
export {
|
|
50
|
-
export {
|
|
51
|
-
export {
|
|
52
|
-
export {
|
|
53
|
-
export {
|
|
54
|
-
export {
|
|
43
|
+
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-UEA2VYGW.mjs';
|
|
44
|
+
export { CategoryStrip } from './chunk-5J7VKFSZ.mjs';
|
|
45
|
+
export { Checkbox } from './chunk-AZRATPNP.mjs';
|
|
46
|
+
export { Chip, ChipGroup } from './chunk-BWLVX2SQ.mjs';
|
|
47
|
+
export { ConfirmDialog } from './chunk-BGXOEFDM.mjs';
|
|
48
|
+
export { useSheetModal } from './chunk-HMKJGVXA.mjs';
|
|
49
|
+
export { CurrencyDisplay } from './chunk-EQYTDFDD.mjs';
|
|
50
|
+
export { CurrencyInput } from './chunk-EQNCMDZC.mjs';
|
|
51
|
+
export { Input } from './chunk-3GE4UFV5.mjs';
|
|
52
|
+
export { Accordion } from './chunk-Y5TPAKOS.mjs';
|
|
53
|
+
export { AlertBanner } from './chunk-K4YFTUMC.mjs';
|
|
54
|
+
export { AppHeader } from './chunk-2J5OZOMX.mjs';
|
|
55
|
+
export { IconButton } from './chunk-ZRUUUVOO.mjs';
|
|
56
|
+
export { Avatar, AvatarGroup } from './chunk-SWUZKVYO.mjs';
|
|
57
|
+
export { Badge } from './chunk-YKWIMVGU.mjs';
|
|
58
|
+
export { Button } from './chunk-AHFEAY6M.mjs';
|
|
55
59
|
import './chunk-M53LC4Q7.mjs';
|
|
56
60
|
import './chunk-IFYMBOEN.mjs';
|
|
57
|
-
export { impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning, selectionAsync } from './chunk-
|
|
58
|
-
export { BREAKPOINTS, ICON_SIZES, RADIUS, SHADOWS, SPACING, TYPOGRAPHY } from './chunk-
|
|
59
|
-
export { Icon } from './chunk-
|
|
60
|
-
export { ThemeProvider, defaultDark, defaultLight, deriveColors, hexToRgb, useTheme, withAlpha } from './chunk-
|
|
61
|
+
export { impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning, selectionAsync } from './chunk-CTUFFKGS.mjs';
|
|
62
|
+
export { BREAKPOINTS, ICON_SIZES, RADIUS, SHADOWS, SPACING, TYPOGRAPHY } from './chunk-DYYPDQA2.mjs';
|
|
63
|
+
export { Icon } from './chunk-24JTXQ2M.mjs';
|
|
64
|
+
export { ThemeProvider, defaultDark, defaultLight, deriveColors, hexToRgb, useTheme, withAlpha } from './chunk-ZQGCQ7SA.mjs';
|
|
61
65
|
import './chunk-2CE3TQVY.mjs';
|
|
62
|
-
import '
|
|
63
|
-
|
|
66
|
+
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
67
|
+
|
|
68
|
+
function ListGroup(props) {
|
|
69
|
+
return /* @__PURE__ */ React.createElement(ItemGroup, { childPropKey: "title", ...props });
|
|
70
|
+
}
|
|
71
|
+
ListGroup.Header = ItemGroupHeader;
|
|
72
|
+
ListGroup.Footer = ItemGroupFooter;
|
|
73
|
+
function MenuGroup(props) {
|
|
74
|
+
return /* @__PURE__ */ React.createElement(ItemGroup, { childPropKey: "onPress", ...props });
|
|
75
|
+
}
|
|
76
|
+
MenuGroup.Header = ItemGroupHeader;
|
|
77
|
+
MenuGroup.Footer = ItemGroupFooter;
|
|
64
78
|
|
|
65
79
|
// src/utils/typography.ts
|
|
66
80
|
function getResponsiveFontSize(text, maxSize, steps = [
|
|
@@ -78,18 +92,12 @@ function getResponsiveFontSize(text, maxSize, steps = [
|
|
|
78
92
|
function useConfirmDialog(options) {
|
|
79
93
|
const [visible, setVisible] = useState(false);
|
|
80
94
|
const [loading, setLoading] = useState(false);
|
|
81
|
-
const mountedRef = useRef(true);
|
|
82
95
|
const onConfirmRef = useRef(options.onConfirm);
|
|
83
96
|
const onCancelRef = useRef(options.onCancel);
|
|
84
97
|
useEffect(() => {
|
|
85
98
|
onConfirmRef.current = options.onConfirm;
|
|
86
99
|
onCancelRef.current = options.onCancel;
|
|
87
100
|
});
|
|
88
|
-
useEffect(() => {
|
|
89
|
-
return () => {
|
|
90
|
-
mountedRef.current = false;
|
|
91
|
-
};
|
|
92
|
-
}, []);
|
|
93
101
|
const open = useCallback(() => setVisible(true), []);
|
|
94
102
|
const handleConfirm = useCallback(async () => {
|
|
95
103
|
setLoading(true);
|
|
@@ -97,10 +105,8 @@ function useConfirmDialog(options) {
|
|
|
97
105
|
await onConfirmRef.current();
|
|
98
106
|
} catch {
|
|
99
107
|
} finally {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
setVisible(false);
|
|
103
|
-
}
|
|
108
|
+
setLoading(false);
|
|
109
|
+
setVisible(false);
|
|
104
110
|
}
|
|
105
111
|
}, []);
|
|
106
112
|
const handleCancel = useCallback(() => {
|
|
@@ -110,4 +116,4 @@ function useConfirmDialog(options) {
|
|
|
110
116
|
return { visible, loading, open, onConfirm: handleConfirm, onCancel: handleCancel };
|
|
111
117
|
}
|
|
112
118
|
|
|
113
|
-
export { getResponsiveFontSize, useConfirmDialog };
|
|
119
|
+
export { ListGroup, MenuGroup, getResponsiveFontSize, useConfirmDialog };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retray-dev/ui-kit",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.4.0",
|
|
4
4
|
"description": "Personal UI Kit for React Native / Expo",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -26,11 +26,12 @@
|
|
|
26
26
|
"dist",
|
|
27
27
|
"src",
|
|
28
28
|
"scripts",
|
|
29
|
-
"COMPONENTS.md",
|
|
30
29
|
"CONSUMER.md",
|
|
31
30
|
"EXAMPLES.md",
|
|
32
31
|
"FONTS.md",
|
|
33
|
-
"DESIGN.md"
|
|
32
|
+
"DESIGN.md",
|
|
33
|
+
"SKILL.md",
|
|
34
|
+
"CHANGELOG.md"
|
|
34
35
|
],
|
|
35
36
|
"scripts": {
|
|
36
37
|
"postinstall": "node scripts/copy-fonts.js",
|
|
@@ -66,8 +67,9 @@
|
|
|
66
67
|
"expo-font": ">=14.0.0",
|
|
67
68
|
"expo-haptics": ">=14.0.0",
|
|
68
69
|
"expo-image": ">=3.0.0",
|
|
69
|
-
"
|
|
70
|
+
"react-native-image-picker": ">=7.0.0",
|
|
70
71
|
"expo-linear-gradient": ">=13.0.0",
|
|
72
|
+
"expo-modules-core": ">=3.0.0",
|
|
71
73
|
"expo-sensors": ">=13.0.0",
|
|
72
74
|
"pressto": ">=0.6.0",
|
|
73
75
|
"react": ">=17",
|
|
@@ -89,14 +91,15 @@
|
|
|
89
91
|
"expo-sensors": {
|
|
90
92
|
"optional": true
|
|
91
93
|
},
|
|
92
|
-
|
|
93
|
-
"optional": true
|
|
94
|
-
},
|
|
94
|
+
|
|
95
95
|
"react-native-ease": {
|
|
96
96
|
"optional": false
|
|
97
97
|
},
|
|
98
98
|
"pressto": {
|
|
99
99
|
"optional": false
|
|
100
|
+
},
|
|
101
|
+
"react-native-image-picker": {
|
|
102
|
+
"optional": true
|
|
100
103
|
}
|
|
101
104
|
},
|
|
102
105
|
"pnpm": {
|
|
@@ -133,21 +136,21 @@
|
|
|
133
136
|
"expo-haptics": "~15.0.8",
|
|
134
137
|
"expo-image": "~3.0.11",
|
|
135
138
|
"expo-linear-gradient": "~15.0.8",
|
|
136
|
-
"expo-sensors": "~15.0.
|
|
139
|
+
"expo-sensors": "~15.0.8",
|
|
137
140
|
"jest-expo": "~54.0.17",
|
|
138
|
-
"pressto": "^0.
|
|
141
|
+
"pressto": "^0.7.0",
|
|
139
142
|
"prettier": "^3.8.3",
|
|
140
143
|
"react": "19.1.0",
|
|
141
144
|
"react-native": "0.81.5",
|
|
142
|
-
"react-native-ease": "^0.7.
|
|
145
|
+
"react-native-ease": "^0.7.3",
|
|
143
146
|
"react-native-gesture-handler": "~2.28.0",
|
|
144
147
|
"react-native-reanimated": "~4.1.1",
|
|
145
148
|
"react-native-safe-area-context": "5.6.2",
|
|
146
149
|
"react-native-screens": "4.16.0",
|
|
147
150
|
"react-native-size-matters": "^0.4.2",
|
|
148
|
-
"react-native-svg": "15.
|
|
151
|
+
"react-native-svg": "15.15.5",
|
|
149
152
|
"react-native-worklets": "~0.5.1",
|
|
150
|
-
"sonner-native": "0.
|
|
153
|
+
"sonner-native": "0.26.3",
|
|
151
154
|
"test-renderer": "^1.2.0",
|
|
152
155
|
"tsup": "^8.0.0",
|
|
153
156
|
"typescript": "^5.4.0",
|
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
import Animated, {
|
|
9
9
|
Easing,
|
|
10
10
|
useSharedValue,
|
|
11
|
-
useDerivedValue,
|
|
12
11
|
useAnimatedStyle,
|
|
13
12
|
withTiming,
|
|
14
13
|
} from 'react-native-reanimated'
|
|
@@ -30,12 +29,14 @@ export interface AccordionItem {
|
|
|
30
29
|
icon?: React.ReactNode
|
|
31
30
|
/** Override icon color. Defaults to foregroundMuted. */
|
|
32
31
|
iconColor?: string
|
|
32
|
+
/**
|
|
33
33
|
/**
|
|
34
34
|
* Action buttons rendered after the trigger content but before the chevron.
|
|
35
35
|
* Automatically touch-isolated — taps on actions won't toggle the accordion.
|
|
36
36
|
* Use this instead of embedding interactive elements inside `trigger`.
|
|
37
37
|
*/
|
|
38
38
|
triggerActions?: React.ReactNode
|
|
39
|
+
accessibilityHint?: string
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
export interface AccordionProps {
|
|
@@ -74,29 +75,21 @@ function AccordionItemComponent({
|
|
|
74
75
|
isExpanded.value = isOpen
|
|
75
76
|
}, [isOpen, isExpanded])
|
|
76
77
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const derivedHeight = useDerivedValue(() =>
|
|
80
|
-
withTiming(height.value * Number(isExpanded.value), {
|
|
81
|
-
duration: isExpanded.value ? TIMINGS.expand.duration : TIMINGS.collapse.duration,
|
|
82
|
-
easing: isExpanded.value ? Easing.bezier(0.23, 1, 0.32, 1) : Easing.in(Easing.ease),
|
|
83
|
-
})
|
|
84
|
-
)
|
|
85
|
-
|
|
86
|
-
const derivedRotation = useDerivedValue(() =>
|
|
87
|
-
withTiming(isExpanded.value ? 1 : 0, {
|
|
78
|
+
const bodyStyle = useAnimatedStyle(() => ({
|
|
79
|
+
height: withTiming(height.value * Number(isExpanded.value), {
|
|
88
80
|
duration: isExpanded.value ? TIMINGS.expand.duration : TIMINGS.collapse.duration,
|
|
89
81
|
easing: isExpanded.value ? Easing.bezier(0.23, 1, 0.32, 1) : Easing.in(Easing.ease),
|
|
90
|
-
})
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
const bodyStyle = useAnimatedStyle(() => ({
|
|
94
|
-
height: derivedHeight.value,
|
|
82
|
+
}),
|
|
95
83
|
overflow: 'hidden',
|
|
96
84
|
}))
|
|
97
85
|
|
|
98
86
|
const rotationStyle = useAnimatedStyle(() => ({
|
|
99
|
-
transform: [{
|
|
87
|
+
transform: [{
|
|
88
|
+
rotate: `${withTiming(isExpanded.value ? 1 : 0, {
|
|
89
|
+
duration: isExpanded.value ? TIMINGS.expand.duration : TIMINGS.collapse.duration,
|
|
90
|
+
easing: isExpanded.value ? Easing.bezier(0.23, 1, 0.32, 1) : Easing.in(Easing.ease),
|
|
91
|
+
}) * 180}deg`,
|
|
92
|
+
}],
|
|
100
93
|
}))
|
|
101
94
|
|
|
102
95
|
return (
|
|
@@ -111,6 +104,7 @@ function AccordionItemComponent({
|
|
|
111
104
|
accessibilityRole="button"
|
|
112
105
|
accessibilityState={{ expanded: isOpen }}
|
|
113
106
|
accessibilityLabel={typeof item.trigger === 'string' ? item.trigger : undefined}
|
|
107
|
+
accessibilityHint={item.accessibilityHint}
|
|
114
108
|
style={styles.trigger}
|
|
115
109
|
>
|
|
116
110
|
<View style={styles.triggerContent}>
|
|
@@ -3,6 +3,7 @@ import { View, Text, StyleSheet, ViewStyle, useWindowDimensions } from 'react-na
|
|
|
3
3
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
4
4
|
import { useTheme } from '../../theme'
|
|
5
5
|
import { IconButton } from '../IconButton'
|
|
6
|
+
import { Icon } from '../../utils/icons'
|
|
6
7
|
import { s, vs, ms, mvs } from '../../utils/scaling'
|
|
7
8
|
import { BREAKPOINTS } from '../../tokens'
|
|
8
9
|
|
|
@@ -15,7 +16,9 @@ export interface AppHeaderProps {
|
|
|
15
16
|
onBack?: () => void
|
|
16
17
|
/** Icon name for the back button. Defaults to `'chevron-left'`. */
|
|
17
18
|
backIconName?: string
|
|
18
|
-
/**
|
|
19
|
+
/** Icon name for a decorative icon shown left of the title, after the back button. Ignored when `left` is provided. */
|
|
20
|
+
iconName?: string
|
|
21
|
+
/** Custom left content — overrides the back button and `iconName`. */
|
|
19
22
|
left?: React.ReactNode
|
|
20
23
|
/** Custom right content (actions). */
|
|
21
24
|
right?: React.ReactNode
|
|
@@ -40,12 +43,14 @@ export interface AppHeaderProps {
|
|
|
40
43
|
*
|
|
41
44
|
* @example
|
|
42
45
|
* <AppHeader title="Settings" onBack={navigation.goBack} right={<IconButton iconName="more-horizontal" variant="text" />} />
|
|
46
|
+
* <AppHeader title="Perfil" iconName="user" onBack={navigation.goBack} />
|
|
43
47
|
*/
|
|
44
48
|
export function AppHeader({
|
|
45
49
|
title,
|
|
46
50
|
subtitle,
|
|
47
51
|
onBack,
|
|
48
52
|
backIconName = 'chevron-left',
|
|
53
|
+
iconName,
|
|
49
54
|
left,
|
|
50
55
|
right,
|
|
51
56
|
titleAlign = 'auto',
|
|
@@ -61,15 +66,24 @@ export function AppHeader({
|
|
|
61
66
|
const isWide = width >= BREAKPOINTS.wide
|
|
62
67
|
const centered = titleAlign === 'center' || (titleAlign === 'auto' && isWide)
|
|
63
68
|
|
|
64
|
-
const leftNode = left ?? (
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
const leftNode = left ?? (
|
|
70
|
+
<>
|
|
71
|
+
{onBack ? (
|
|
72
|
+
<IconButton
|
|
73
|
+
iconName={backIconName}
|
|
74
|
+
variant="text"
|
|
75
|
+
size="md"
|
|
76
|
+
onPress={onBack}
|
|
77
|
+
accessibilityLabel="Atrás"
|
|
78
|
+
/>
|
|
79
|
+
) : null}
|
|
80
|
+
{iconName && !left ? (
|
|
81
|
+
<View style={styles.iconSlot}>
|
|
82
|
+
<Icon name={iconName} size={20} color={colors.foreground} />
|
|
83
|
+
</View>
|
|
84
|
+
) : null}
|
|
85
|
+
</>
|
|
86
|
+
)
|
|
73
87
|
|
|
74
88
|
const titleBlock = (
|
|
75
89
|
<View style={[styles.titleBlock, centered && styles.titleBlockCentered]} pointerEvents="none">
|
|
@@ -143,9 +157,12 @@ const styles = StyleSheet.create({
|
|
|
143
157
|
flexDirection: 'row',
|
|
144
158
|
alignItems: 'center',
|
|
145
159
|
justifyContent: 'flex-start',
|
|
160
|
+
paddingLeft: s(8),
|
|
161
|
+
gap: s(4),
|
|
146
162
|
},
|
|
147
163
|
sideRight: {
|
|
148
164
|
justifyContent: 'flex-end',
|
|
165
|
+
paddingRight: s(8),
|
|
149
166
|
},
|
|
150
167
|
titleBlock: {
|
|
151
168
|
flex: 1,
|
|
@@ -166,6 +183,12 @@ const styles = StyleSheet.create({
|
|
|
166
183
|
fontSize: ms(13),
|
|
167
184
|
lineHeight: mvs(16),
|
|
168
185
|
},
|
|
186
|
+
iconSlot: {
|
|
187
|
+
width: s(44),
|
|
188
|
+
height: s(44),
|
|
189
|
+
alignItems: 'center',
|
|
190
|
+
justifyContent: 'center',
|
|
191
|
+
},
|
|
169
192
|
textCentered: {
|
|
170
193
|
textAlign: 'center',
|
|
171
194
|
},
|
|
@@ -14,6 +14,7 @@ export interface CheckboxProps {
|
|
|
14
14
|
disabled?: boolean
|
|
15
15
|
style?: ViewStyle
|
|
16
16
|
accessibilityLabel?: string
|
|
17
|
+
accessibilityHint?: string
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
export function Checkbox({
|
|
@@ -23,6 +24,7 @@ export function Checkbox({
|
|
|
23
24
|
disabled,
|
|
24
25
|
style,
|
|
25
26
|
accessibilityLabel,
|
|
27
|
+
accessibilityHint,
|
|
26
28
|
}: CheckboxProps) {
|
|
27
29
|
const { colors } = useTheme()
|
|
28
30
|
|
|
@@ -43,6 +45,7 @@ export function Checkbox({
|
|
|
43
45
|
touchSoundDisabled
|
|
44
46
|
accessibilityRole="checkbox"
|
|
45
47
|
accessibilityLabel={accessibilityLabel ?? label}
|
|
48
|
+
accessibilityHint={accessibilityHint}
|
|
46
49
|
accessibilityState={{ checked, disabled: !!disabled }}
|
|
47
50
|
>
|
|
48
51
|
<EaseView
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useCallback,
|
|
1
|
+
import React, { useCallback, useId } from 'react'
|
|
2
2
|
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'
|
|
3
3
|
import {
|
|
4
4
|
BottomSheetModal,
|
|
@@ -8,8 +8,9 @@ import {
|
|
|
8
8
|
} from '@gorhom/bottom-sheet'
|
|
9
9
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
10
10
|
import { Feather } from '@expo/vector-icons'
|
|
11
|
-
import {
|
|
11
|
+
import { notificationSuccess, selectionAsync as hapticSelection } from '../../utils/haptics'
|
|
12
12
|
import { useTheme } from '../../theme'
|
|
13
|
+
import { useSheetModal } from '../../hooks/useSheetModal'
|
|
13
14
|
import { Button } from '../Button'
|
|
14
15
|
import { s, vs, ms, mvs } from '../../utils/scaling'
|
|
15
16
|
|
|
@@ -24,6 +25,7 @@ export interface ConfirmDialogProps {
|
|
|
24
25
|
showCloseButton?: boolean
|
|
25
26
|
onConfirm: () => void
|
|
26
27
|
onCancel: () => void
|
|
28
|
+
accessibilityHint?: string
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
export function ConfirmDialog({
|
|
@@ -37,30 +39,13 @@ export function ConfirmDialog({
|
|
|
37
39
|
showCloseButton = false,
|
|
38
40
|
onConfirm,
|
|
39
41
|
onCancel,
|
|
42
|
+
accessibilityHint,
|
|
40
43
|
}: ConfirmDialogProps) {
|
|
41
44
|
const { colors } = useTheme()
|
|
42
45
|
const insets = useSafeAreaInsets()
|
|
43
|
-
const ref =
|
|
44
|
-
const wasOpened = useRef(false)
|
|
45
|
-
const isPresentedRef = useRef(false)
|
|
46
|
+
const { ref, handleDismiss } = useSheetModal(visible, onCancel)
|
|
46
47
|
const name = useId()
|
|
47
48
|
|
|
48
|
-
const handleDismiss = useCallback(() => {
|
|
49
|
-
isPresentedRef.current = false
|
|
50
|
-
onCancel()
|
|
51
|
-
}, [onCancel])
|
|
52
|
-
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
if (visible && !isPresentedRef.current) {
|
|
55
|
-
impactMedium()
|
|
56
|
-
ref.current?.present()
|
|
57
|
-
wasOpened.current = true
|
|
58
|
-
isPresentedRef.current = true
|
|
59
|
-
} else if (!visible && wasOpened.current && isPresentedRef.current) {
|
|
60
|
-
ref.current?.dismiss()
|
|
61
|
-
}
|
|
62
|
-
}, [visible])
|
|
63
|
-
|
|
64
49
|
const renderBackdrop = useCallback(
|
|
65
50
|
(props: BottomSheetBackdropProps) => (
|
|
66
51
|
<BottomSheetBackdrop
|
|
@@ -122,6 +107,7 @@ export function ConfirmDialog({
|
|
|
122
107
|
notificationSuccess()
|
|
123
108
|
onConfirm()
|
|
124
109
|
}}
|
|
110
|
+
accessibilityHint={accessibilityHint}
|
|
125
111
|
icon={
|
|
126
112
|
<Feather
|
|
127
113
|
name={confirmVariant === 'destructive' ? 'trash-2' : 'check'}
|
|
@@ -8,6 +8,8 @@ import { impactLight } from '../../utils/haptics'
|
|
|
8
8
|
|
|
9
9
|
export interface ErrorFallbackProps {
|
|
10
10
|
error: Error
|
|
11
|
+
/** Stack trace from the error boundary. */
|
|
12
|
+
componentStack: string
|
|
11
13
|
/** Reset the boundary and attempt to re-render children. */
|
|
12
14
|
reset: () => void
|
|
13
15
|
}
|
|
@@ -97,13 +99,14 @@ export class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoun
|
|
|
97
99
|
const { error } = this.state
|
|
98
100
|
if (error) {
|
|
99
101
|
const { fallback, title, message } = this.props
|
|
102
|
+
const componentStack = error.stack ?? ''
|
|
100
103
|
if (typeof fallback === 'function') {
|
|
101
|
-
return fallback({ error, reset: this.reset })
|
|
104
|
+
return fallback({ error, componentStack, reset: this.reset })
|
|
102
105
|
}
|
|
103
106
|
if (fallback !== undefined) {
|
|
104
107
|
return fallback
|
|
105
108
|
}
|
|
106
|
-
return <DefaultErrorFallback error={error} reset={this.reset} title={title} message={message} />
|
|
109
|
+
return <DefaultErrorFallback error={error} componentStack={componentStack} reset={this.reset} title={title} message={message} />
|
|
107
110
|
}
|
|
108
111
|
return this.props.children
|
|
109
112
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React, { useState } from 'react'
|
|
2
|
+
import { View, type ImageStyle } from 'react-native'
|
|
3
|
+
import { Image as ExpoImage, type ImageProps as ExpoImageProps } from 'expo-image'
|
|
4
|
+
import { useTheme } from '../../theme'
|
|
5
|
+
|
|
6
|
+
export interface ImageProps extends Omit<ExpoImageProps, 'source' | 'style'> {
|
|
7
|
+
/** Image source URI. */
|
|
8
|
+
src?: string | null
|
|
9
|
+
/** Custom fallback shown when image fails to load or src is null. */
|
|
10
|
+
fallback?: React.ReactNode
|
|
11
|
+
/** Aspect ratio width/height — e.g. 16/9, 4/3. Sets container height proportionally. */
|
|
12
|
+
aspectRatio?: number
|
|
13
|
+
/** Border radius override. Defaults to 0. */
|
|
14
|
+
borderRadius?: number
|
|
15
|
+
style?: ImageStyle
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function Image({ src, fallback, aspectRatio, borderRadius = 0, style, ...props }: ImageProps) {
|
|
19
|
+
const { colors } = useTheme()
|
|
20
|
+
const [failed, setFailed] = useState(false)
|
|
21
|
+
|
|
22
|
+
if (!src || failed) {
|
|
23
|
+
return fallback ? (
|
|
24
|
+
<View style={[style, { overflow: 'hidden' }]}>{fallback}</View>
|
|
25
|
+
) : (
|
|
26
|
+
<View
|
|
27
|
+
style={[
|
|
28
|
+
{ backgroundColor: colors.skeleton, overflow: 'hidden' },
|
|
29
|
+
borderRadius ? { borderRadius } : undefined,
|
|
30
|
+
aspectRatio ? { aspectRatio } : undefined,
|
|
31
|
+
style,
|
|
32
|
+
]}
|
|
33
|
+
/>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const imageStyle: ImageStyle = {
|
|
38
|
+
...(aspectRatio ? { aspectRatio, width: '100%' as const } : {}),
|
|
39
|
+
...(borderRadius ? { borderRadius } : {}),
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<ExpoImage
|
|
44
|
+
source={{ uri: src }}
|
|
45
|
+
style={[imageStyle, style]}
|
|
46
|
+
onError={() => setFailed(true)}
|
|
47
|
+
{...props}
|
|
48
|
+
/>
|
|
49
|
+
)
|
|
50
|
+
}
|