@retray-dev/ui-kit 13.2.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 +2 -0
- package/README.md +4 -4
- package/SKILL.md +276 -12
- package/dist/Accordion.d.mts +6 -6
- package/dist/Accordion.d.ts +6 -6
- package/dist/Accordion.js +39 -40
- package/dist/Accordion.mjs +4 -4
- 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 -4
- package/dist/AppHeader.d.mts +4 -4
- package/dist/AppHeader.d.ts +4 -4
- package/dist/AppHeader.js +37 -28
- package/dist/AppHeader.mjs +6 -6
- package/dist/Avatar.d.mts +4 -4
- package/dist/Avatar.d.ts +4 -4
- package/dist/Avatar.mjs +2 -2
- 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 -3
- 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 -5
- package/dist/ButtonGroup.d.mts +3 -3
- package/dist/ButtonGroup.d.ts +3 -3
- 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 -4
- 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 -5
- package/dist/Checkbox.d.mts +2 -2
- package/dist/Checkbox.d.ts +2 -2
- package/dist/Checkbox.js +23 -14
- package/dist/Checkbox.mjs +3 -3
- 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 -5
- package/dist/ConfirmDialog.d.mts +2 -2
- package/dist/ConfirmDialog.d.ts +2 -2
- package/dist/ConfirmDialog.js +64 -58
- package/dist/ConfirmDialog.mjs +7 -6
- package/dist/CurrencyDisplay.d.mts +3 -3
- package/dist/CurrencyDisplay.d.ts +3 -3
- package/dist/CurrencyDisplay.mjs +2 -2
- 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 -4
- 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 -3
- 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 -6
- 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 -5
- package/dist/Form.d.mts +9 -9
- package/dist/Form.d.ts +9 -9
- package/dist/Form.mjs +2 -2
- 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 -2
- 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 -4
- 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 -6
- 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 -2
- package/dist/ImageUpload.d.ts +2 -2
- package/dist/ImageUpload.js +24 -15
- package/dist/ImageUpload.mjs +5 -5
- 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 -6
- 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 -3
- 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 -3
- package/dist/ListItem.d.mts +6 -6
- package/dist/ListItem.d.ts +6 -6
- package/dist/ListItem.js +30 -27
- package/dist/ListItem.mjs +5 -5
- 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 -5
- package/dist/MenuItem.d.mts +5 -5
- package/dist/MenuItem.d.ts +5 -5
- package/dist/MenuItem.js +30 -27
- package/dist/MenuItem.mjs +5 -5
- 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 -3
- package/dist/NumberStepper.d.mts +3 -3
- package/dist/NumberStepper.d.ts +3 -3
- package/dist/NumberStepper.js +30 -27
- package/dist/NumberStepper.mjs +5 -5
- 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 -4
- 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 -2
- 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 -7
- package/dist/Progress.d.mts +2 -2
- package/dist/Progress.d.ts +2 -2
- package/dist/Progress.mjs +2 -2
- 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 -3
- 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 -3
- 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 +2 -2
- package/dist/Select.d.ts +2 -2
- package/dist/Select.js +38 -45
- package/dist/Select.mjs +3 -3
- 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 -5
- package/dist/SelectableGrid.d.mts +5 -4
- package/dist/SelectableGrid.d.ts +5 -4
- package/dist/SelectableGrid.js +80 -44
- package/dist/SelectableGrid.mjs +5 -5
- 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 -2
- package/dist/Sheet.d.mts +10 -10
- package/dist/Sheet.d.ts +10 -10
- package/dist/Sheet.js +59 -44
- package/dist/Sheet.mjs +4 -3
- 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 -5
- package/dist/Skeleton.d.mts +5 -5
- package/dist/Skeleton.d.ts +5 -5
- package/dist/Skeleton.mjs +3 -3
- package/dist/Slider.d.mts +2 -2
- package/dist/Slider.d.ts +2 -2
- package/dist/Slider.js +23 -14
- package/dist/Slider.mjs +3 -3
- package/dist/Spinner.d.mts +2 -2
- package/dist/Spinner.d.ts +2 -2
- package/dist/Spinner.mjs +2 -2
- 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 -5
- package/dist/Switch.d.mts +2 -2
- package/dist/Switch.d.ts +2 -2
- package/dist/Switch.js +23 -14
- package/dist/Switch.mjs +3 -3
- 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 -4
- 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 -3
- 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 -3
- 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 -3
- package/dist/Toast.d.mts +4 -4
- package/dist/Toast.d.ts +4 -4
- package/dist/Toast.mjs +2 -2
- 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 -4
- 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-H6MQL7PS.mjs → chunk-2J5OZOMX.mjs} +12 -6
- 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-C5ZRMR2E.mjs → chunk-4PF4LKNT.mjs} +2 -2
- package/dist/{chunk-5MYNAAFE.mjs → chunk-5J7VKFSZ.mjs} +4 -4
- package/dist/{chunk-E2PONRJG.mjs → chunk-5TNQ573V.mjs} +2 -2
- package/dist/{chunk-CZN6L2QU.mjs → chunk-6T2DVIQT.mjs} +4 -4
- package/dist/{chunk-L3YKPTJQ.mjs → chunk-7CE6PDCQ.mjs} +2 -2
- package/dist/{chunk-Y6YS33GM.mjs → chunk-AHFEAY6M.mjs} +4 -4
- package/dist/{chunk-77UOVFIS.mjs → chunk-AZRATPNP.mjs} +2 -2
- package/dist/{chunk-UMZTPUB3.mjs → chunk-BGXOEFDM.mjs} +6 -31
- package/dist/{chunk-KC5QDYGZ.mjs → chunk-BMAAAJWN.mjs} +2 -2
- package/dist/{chunk-IJCMPVW5.mjs → chunk-BQMJQMWY.mjs} +2 -2
- package/dist/{chunk-COA2YZOX.mjs → chunk-BTPCY4C7.mjs} +4 -4
- package/dist/chunk-BVJAYPAD.mjs +55 -0
- package/dist/{chunk-RA6SAAFE.mjs → chunk-BWLVX2SQ.mjs} +4 -4
- package/dist/{chunk-HHOOFDBA.mjs → chunk-CCEM3HIJ.mjs} +5 -5
- 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-2QXJDRVU.mjs → chunk-NQYS6RPX.mjs} +4 -4
- 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-IDVUZIVY.mjs → chunk-RLPPRIJ7.mjs} +17 -33
- package/dist/{chunk-XCIG6HT2.mjs → chunk-S433IOQE.mjs} +2 -2
- package/dist/{chunk-IGU223UM.mjs → chunk-SWUZKVYO.mjs} +1 -1
- package/dist/{chunk-NPCBNGNE.mjs → chunk-T4KMKHTI.mjs} +55 -22
- package/dist/{chunk-7BZJRB77.mjs → chunk-UBTP4NPP.mjs} +4 -30
- 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-422IVD3H.mjs → chunk-Y5TPAKOS.mjs} +13 -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/{index-CY34hxPN.d.mts → index-CinAt5Uo.d.mts} +3 -3
- package/dist/{index-CY34hxPN.d.ts → index-CinAt5Uo.d.ts} +3 -3
- package/dist/index.d.mts +68 -18
- package/dist/index.d.ts +68 -18
- package/dist/index.js +965 -825
- package/dist/index.mjs +76 -69
- package/package.json +3 -2
- package/src/components/Accordion/Accordion.tsx +9 -18
- package/src/components/AppHeader/AppHeader.tsx +9 -1
- package/src/components/ConfirmDialog/ConfirmDialog.tsx +4 -34
- 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 +1 -1
- 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/MenuGroup/index.tsx +20 -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 +22 -30
- package/src/components/SelectableGrid/SelectableGrid.tsx +51 -19
- package/src/components/Separator/Separator.tsx +35 -2
- package/src/components/Sheet/Sheet.tsx +3 -34
- package/src/components/Tabs/Tabs.tsx +9 -9
- package/src/components/Tabs/index.ts +1 -1
- package/src/components/Text/Text.tsx +6 -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 -4
- 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 -4
- package/dist/chunk-ARONDO7M.mjs +0 -40
- package/dist/chunk-EW2FIDSM.mjs +0 -29
- package/dist/chunk-S2VGME7X.mjs +0 -82
- 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,65 +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 { useState, useRef, useEffect, useCallback } from 'react';
|
|
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;
|
|
63
78
|
|
|
64
79
|
// src/utils/typography.ts
|
|
65
80
|
function getResponsiveFontSize(text, maxSize, steps = [
|
|
@@ -77,18 +92,12 @@ function getResponsiveFontSize(text, maxSize, steps = [
|
|
|
77
92
|
function useConfirmDialog(options) {
|
|
78
93
|
const [visible, setVisible] = useState(false);
|
|
79
94
|
const [loading, setLoading] = useState(false);
|
|
80
|
-
const mountedRef = useRef(true);
|
|
81
95
|
const onConfirmRef = useRef(options.onConfirm);
|
|
82
96
|
const onCancelRef = useRef(options.onCancel);
|
|
83
97
|
useEffect(() => {
|
|
84
98
|
onConfirmRef.current = options.onConfirm;
|
|
85
99
|
onCancelRef.current = options.onCancel;
|
|
86
100
|
});
|
|
87
|
-
useEffect(() => {
|
|
88
|
-
return () => {
|
|
89
|
-
mountedRef.current = false;
|
|
90
|
-
};
|
|
91
|
-
}, []);
|
|
92
101
|
const open = useCallback(() => setVisible(true), []);
|
|
93
102
|
const handleConfirm = useCallback(async () => {
|
|
94
103
|
setLoading(true);
|
|
@@ -96,10 +105,8 @@ function useConfirmDialog(options) {
|
|
|
96
105
|
await onConfirmRef.current();
|
|
97
106
|
} catch {
|
|
98
107
|
} finally {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
setVisible(false);
|
|
102
|
-
}
|
|
108
|
+
setLoading(false);
|
|
109
|
+
setVisible(false);
|
|
103
110
|
}
|
|
104
111
|
}, []);
|
|
105
112
|
const handleCancel = useCallback(() => {
|
|
@@ -109,4 +116,4 @@ function useConfirmDialog(options) {
|
|
|
109
116
|
return { visible, loading, open, onConfirm: handleConfirm, onCancel: handleCancel };
|
|
110
117
|
}
|
|
111
118
|
|
|
112
|
-
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",
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
"EXAMPLES.md",
|
|
31
31
|
"FONTS.md",
|
|
32
32
|
"DESIGN.md",
|
|
33
|
-
"SKILL.md"
|
|
33
|
+
"SKILL.md",
|
|
34
|
+
"CHANGELOG.md"
|
|
34
35
|
],
|
|
35
36
|
"scripts": {
|
|
36
37
|
"postinstall": "node scripts/copy-fonts.js",
|
|
@@ -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'
|
|
@@ -76,29 +75,21 @@ function AccordionItemComponent({
|
|
|
76
75
|
isExpanded.value = isOpen
|
|
77
76
|
}, [isOpen, isExpanded])
|
|
78
77
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const derivedHeight = useDerivedValue(() =>
|
|
82
|
-
withTiming(height.value * Number(isExpanded.value), {
|
|
83
|
-
duration: isExpanded.value ? TIMINGS.expand.duration : TIMINGS.collapse.duration,
|
|
84
|
-
easing: isExpanded.value ? Easing.bezier(0.23, 1, 0.32, 1) : Easing.in(Easing.ease),
|
|
85
|
-
})
|
|
86
|
-
)
|
|
87
|
-
|
|
88
|
-
const derivedRotation = useDerivedValue(() =>
|
|
89
|
-
withTiming(isExpanded.value ? 1 : 0, {
|
|
78
|
+
const bodyStyle = useAnimatedStyle(() => ({
|
|
79
|
+
height: withTiming(height.value * Number(isExpanded.value), {
|
|
90
80
|
duration: isExpanded.value ? TIMINGS.expand.duration : TIMINGS.collapse.duration,
|
|
91
81
|
easing: isExpanded.value ? Easing.bezier(0.23, 1, 0.32, 1) : Easing.in(Easing.ease),
|
|
92
|
-
})
|
|
93
|
-
)
|
|
94
|
-
|
|
95
|
-
const bodyStyle = useAnimatedStyle(() => ({
|
|
96
|
-
height: derivedHeight.value,
|
|
82
|
+
}),
|
|
97
83
|
overflow: 'hidden',
|
|
98
84
|
}))
|
|
99
85
|
|
|
100
86
|
const rotationStyle = useAnimatedStyle(() => ({
|
|
101
|
-
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
|
+
}],
|
|
102
93
|
}))
|
|
103
94
|
|
|
104
95
|
return (
|
|
@@ -78,7 +78,9 @@ export function AppHeader({
|
|
|
78
78
|
/>
|
|
79
79
|
) : null}
|
|
80
80
|
{iconName && !left ? (
|
|
81
|
-
<
|
|
81
|
+
<View style={styles.iconSlot}>
|
|
82
|
+
<Icon name={iconName} size={20} color={colors.foreground} />
|
|
83
|
+
</View>
|
|
82
84
|
) : null}
|
|
83
85
|
</>
|
|
84
86
|
)
|
|
@@ -181,6 +183,12 @@ const styles = StyleSheet.create({
|
|
|
181
183
|
fontSize: ms(13),
|
|
182
184
|
lineHeight: mvs(16),
|
|
183
185
|
},
|
|
186
|
+
iconSlot: {
|
|
187
|
+
width: s(44),
|
|
188
|
+
height: s(44),
|
|
189
|
+
alignItems: 'center',
|
|
190
|
+
justifyContent: 'center',
|
|
191
|
+
},
|
|
184
192
|
textCentered: {
|
|
185
193
|
textAlign: 'center',
|
|
186
194
|
},
|
|
@@ -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
|
|
|
@@ -40,41 +41,10 @@ export function ConfirmDialog({
|
|
|
40
41
|
onCancel,
|
|
41
42
|
accessibilityHint,
|
|
42
43
|
}: ConfirmDialogProps) {
|
|
43
|
-
type DialogState = 'idle' | 'presenting' | 'presented' | 'dismissing'
|
|
44
|
-
|
|
45
44
|
const { colors } = useTheme()
|
|
46
45
|
const insets = useSafeAreaInsets()
|
|
47
|
-
const ref =
|
|
48
|
-
const dialogState = useRef<DialogState>('idle')
|
|
49
|
-
const onCancelRef = useRef(onCancel)
|
|
46
|
+
const { ref, handleDismiss } = useSheetModal(visible, onCancel)
|
|
50
47
|
const name = useId()
|
|
51
|
-
const [tick, setTick] = useState(0)
|
|
52
|
-
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
onCancelRef.current = onCancel
|
|
55
|
-
}, [onCancel])
|
|
56
|
-
|
|
57
|
-
const handleDismiss = useCallback(() => {
|
|
58
|
-
dialogState.current = 'idle'
|
|
59
|
-
onCancelRef.current?.()
|
|
60
|
-
setTick((t) => t + 1)
|
|
61
|
-
}, [])
|
|
62
|
-
|
|
63
|
-
useEffect(() => {
|
|
64
|
-
if (visible) {
|
|
65
|
-
if (dialogState.current === 'idle') {
|
|
66
|
-
dialogState.current = 'presenting'
|
|
67
|
-
impactMedium()
|
|
68
|
-
ref.current?.present()
|
|
69
|
-
dialogState.current = 'presented'
|
|
70
|
-
}
|
|
71
|
-
} else {
|
|
72
|
-
if (dialogState.current === 'presented' || dialogState.current === 'presenting') {
|
|
73
|
-
dialogState.current = 'dismissing'
|
|
74
|
-
ref.current?.dismiss()
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}, [visible, tick])
|
|
78
48
|
|
|
79
49
|
const renderBackdrop = useCallback(
|
|
80
50
|
(props: BottomSheetBackdropProps) => (
|
|
@@ -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
|
+
}
|
|
@@ -137,7 +137,7 @@ export function ImageUpload({
|
|
|
137
137
|
</View>
|
|
138
138
|
)}
|
|
139
139
|
{loading || isPicking ? (
|
|
140
|
-
<View style={[styles.loadingOverlay, { backgroundColor: colors.overlay }]}>
|
|
140
|
+
<View style={[styles.loadingOverlay, { backgroundColor: colors.overlay, borderRadius }]}>
|
|
141
141
|
<Spinner size="md" />
|
|
142
142
|
</View>
|
|
143
143
|
) : null}
|
|
@@ -4,52 +4,41 @@ import { useTheme } from '../../theme'
|
|
|
4
4
|
import { s, vs } from '../../utils/scaling'
|
|
5
5
|
import { RADIUS } from '../../tokens'
|
|
6
6
|
|
|
7
|
-
export type
|
|
7
|
+
export type ItemGroupVariant = 'plain' | 'card'
|
|
8
8
|
|
|
9
|
-
export interface
|
|
9
|
+
export interface ItemGroupProps {
|
|
10
10
|
children: React.ReactNode
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* - `card`: card surface with background + border wrapping plain ListItems.
|
|
14
|
-
*/
|
|
15
|
-
variant?: ListGroupVariant
|
|
11
|
+
variant?: ItemGroupVariant
|
|
12
|
+
childPropKey: 'title' | 'onPress'
|
|
16
13
|
style?: ViewStyle
|
|
17
14
|
}
|
|
18
15
|
|
|
19
|
-
export interface
|
|
16
|
+
export interface ItemGroupHeaderProps {
|
|
20
17
|
children: React.ReactNode
|
|
21
18
|
style?: ViewStyle
|
|
22
19
|
}
|
|
23
20
|
|
|
24
|
-
export interface
|
|
21
|
+
export interface ItemGroupFooterProps {
|
|
25
22
|
children: React.ReactNode
|
|
26
23
|
style?: ViewStyle
|
|
27
24
|
}
|
|
28
25
|
|
|
29
|
-
|
|
30
|
-
* ListGroup wraps multiple ListItems and auto-adds separators between them.
|
|
31
|
-
* Use variant="card" for a standalone surface or "plain" for items inside another container.
|
|
32
|
-
*/
|
|
33
|
-
export function ListGroup({ children, variant = 'plain', style }: ListGroupProps) {
|
|
26
|
+
export function ItemGroup({ children, variant = 'plain', childPropKey, style }: ItemGroupProps) {
|
|
34
27
|
const { colors } = useTheme()
|
|
35
28
|
|
|
36
|
-
// Auto-inject showSeparator={true} to all ListItem children except the last
|
|
37
29
|
const processedChildren = React.Children.map(children, (child, index) => {
|
|
38
30
|
if (!React.isValidElement(child)) return child
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (child.type === ListGroupHeader || child.type === ListGroupFooter) {
|
|
31
|
+
|
|
32
|
+
if (child.type === ItemGroupHeader || child.type === ItemGroupFooter) {
|
|
42
33
|
return child
|
|
43
34
|
}
|
|
44
35
|
|
|
45
|
-
// Check if it's a ListItem (has title prop as a heuristic)
|
|
46
36
|
const childProps = child.props as Record<string, unknown>
|
|
47
|
-
const
|
|
48
|
-
if (!
|
|
37
|
+
const isTargetChild = childPropKey in childProps
|
|
38
|
+
if (!isTargetChild) return child
|
|
49
39
|
|
|
50
40
|
const isLast = index === React.Children.count(children) - 1
|
|
51
41
|
|
|
52
|
-
// Only add separator if not already explicitly set and not last item
|
|
53
42
|
if (childProps['showSeparator'] === undefined && !isLast) {
|
|
54
43
|
return React.cloneElement(child as React.ReactElement<Record<string, unknown>>, {
|
|
55
44
|
showSeparator: true,
|
|
@@ -82,9 +71,9 @@ export function ListGroup({ children, variant = 'plain', style }: ListGroupProps
|
|
|
82
71
|
)
|
|
83
72
|
}
|
|
84
73
|
|
|
85
|
-
export function
|
|
74
|
+
export function ItemGroupHeader({ children, style }: ItemGroupHeaderProps) {
|
|
86
75
|
const { colors } = useTheme()
|
|
87
|
-
|
|
76
|
+
|
|
88
77
|
if (typeof children === 'string') {
|
|
89
78
|
return (
|
|
90
79
|
<View style={[styles.header, { borderBottomColor: colors.separator }, style]}>
|
|
@@ -98,9 +87,9 @@ export function ListGroupHeader({ children, style }: ListGroupHeaderProps) {
|
|
|
98
87
|
return <View style={[styles.header, { borderBottomColor: colors.separator }, style]}>{children}</View>
|
|
99
88
|
}
|
|
100
89
|
|
|
101
|
-
export function
|
|
90
|
+
export function ItemGroupFooter({ children, style }: ItemGroupFooterProps) {
|
|
102
91
|
const { colors } = useTheme()
|
|
103
|
-
|
|
92
|
+
|
|
104
93
|
if (typeof children === 'string') {
|
|
105
94
|
return (
|
|
106
95
|
<View style={[styles.footer, style]}>
|
|
@@ -114,9 +103,6 @@ export function ListGroupFooter({ children, style }: ListGroupFooterProps) {
|
|
|
114
103
|
return <View style={[styles.footer, style]}>{children}</View>
|
|
115
104
|
}
|
|
116
105
|
|
|
117
|
-
ListGroup.Header = ListGroupHeader
|
|
118
|
-
ListGroup.Footer = ListGroupFooter
|
|
119
|
-
|
|
120
106
|
const styles = StyleSheet.create({
|
|
121
107
|
container: {
|
|
122
108
|
overflow: 'hidden',
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { ItemGroup as BaseItemGroup, ItemGroupHeader, ItemGroupFooter } from '../ItemGroup'
|
|
3
|
+
import type { ItemGroupProps, ItemGroupVariant, ItemGroupHeaderProps, ItemGroupFooterProps } from '../ItemGroup'
|
|
4
|
+
|
|
5
|
+
export type ListGroupVariant = ItemGroupVariant
|
|
6
|
+
|
|
7
|
+
export interface ListGroupProps extends Omit<ItemGroupProps, 'childPropKey'> {}
|
|
8
|
+
|
|
9
|
+
export interface ListGroupHeaderProps extends ItemGroupHeaderProps {}
|
|
10
|
+
|
|
11
|
+
export interface ListGroupFooterProps extends ItemGroupFooterProps {}
|
|
12
|
+
|
|
13
|
+
export function ListGroup(props: ListGroupProps) {
|
|
14
|
+
return <BaseItemGroup childPropKey="title" {...props} />
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
ListGroup.Header = ItemGroupHeader
|
|
18
|
+
ListGroup.Footer = ItemGroupFooter
|
|
19
|
+
|
|
20
|
+
export { ItemGroupHeader as ListGroupHeader, ItemGroupFooter as ListGroupFooter }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { ItemGroup as BaseItemGroup, ItemGroupHeader, ItemGroupFooter } from '../ItemGroup'
|
|
3
|
+
import type { ItemGroupProps, ItemGroupVariant, ItemGroupHeaderProps, ItemGroupFooterProps } from '../ItemGroup'
|
|
4
|
+
|
|
5
|
+
export type MenuGroupVariant = ItemGroupVariant
|
|
6
|
+
|
|
7
|
+
export interface MenuGroupProps extends Omit<ItemGroupProps, 'childPropKey'> {}
|
|
8
|
+
|
|
9
|
+
export interface MenuGroupHeaderProps extends ItemGroupHeaderProps {}
|
|
10
|
+
|
|
11
|
+
export interface MenuGroupFooterProps extends ItemGroupFooterProps {}
|
|
12
|
+
|
|
13
|
+
export function MenuGroup(props: MenuGroupProps) {
|
|
14
|
+
return <BaseItemGroup childPropKey="onPress" {...props} />
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
MenuGroup.Header = ItemGroupHeader
|
|
18
|
+
MenuGroup.Footer = ItemGroupFooter
|
|
19
|
+
|
|
20
|
+
export { ItemGroupHeader as MenuGroupHeader, ItemGroupFooter as MenuGroupFooter }
|
|
@@ -5,42 +5,18 @@ import { PressableCard } from '../../utils/pressable'
|
|
|
5
5
|
import { PRESS_SCALE } from '../../utils/animations'
|
|
6
6
|
|
|
7
7
|
export interface PressableProps {
|
|
8
|
-
/** Children content to render inside the pressable. */
|
|
9
8
|
children: React.ReactNode
|
|
10
|
-
/** Called when pressed. */
|
|
11
9
|
onPress?: () => void
|
|
12
|
-
/** Scale value on press. Defaults to `0.98` (MediaCard-style). */
|
|
13
10
|
pressScale?: number
|
|
14
|
-
/** Enable haptic feedback on press. Defaults to `true`. */
|
|
15
11
|
haptics?: boolean
|
|
16
|
-
/** Additional style for the wrapper. */
|
|
17
12
|
style?: ViewStyle
|
|
18
|
-
/** Disable interaction. */
|
|
19
13
|
disabled?: boolean
|
|
20
|
-
/** Hover scale (web only). Defaults to `1.02`. Set to `1` to disable. */
|
|
21
14
|
hoverScale?: number
|
|
22
|
-
/**
|
|
23
|
-
* Accessibility role for the pressable element.
|
|
24
|
-
* Defaults to `"button"`.
|
|
25
|
-
*/
|
|
26
15
|
accessibilityRole?: AccessibilityRole
|
|
27
|
-
/**
|
|
28
|
-
* Accessibility state for screen readers.
|
|
29
|
-
* Used to communicate states like `selected`, `expanded`, `checked`, etc.
|
|
30
|
-
* Defaults to `{ disabled: !!disabled }`.
|
|
31
|
-
*/
|
|
32
16
|
accessibilityState?: Record<string, unknown>
|
|
33
|
-
/** Accessibility label for screen readers. */
|
|
34
17
|
accessibilityLabel?: string
|
|
35
18
|
}
|
|
36
19
|
|
|
37
|
-
/**
|
|
38
|
-
* Generic pressable with a calibrated spring bounce — Apple HIG / Airbnb feel.
|
|
39
|
-
* All animation runs on the UI thread via pressto (Reanimated v4 worklets).
|
|
40
|
-
*
|
|
41
|
-
* Use this for any custom pressable surface that needs consistent press feel
|
|
42
|
-
* (cards, list rows, image tiles, etc).
|
|
43
|
-
*/
|
|
44
20
|
export function Pressable({
|
|
45
21
|
children,
|
|
46
22
|
onPress,
|