@retray-dev/ui-kit 12.2.0 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMPONENTS.md +85 -143
- package/CONSUMER.md +2 -2
- package/DESIGN.md +2 -2
- package/README.md +11 -6
- package/dist/Accordion.js +48 -210
- package/dist/Accordion.mjs +6 -5
- package/dist/AlertBanner.js +29 -153
- package/dist/AlertBanner.mjs +3 -3
- package/dist/AppHeader.js +37 -235
- package/dist/AppHeader.mjs +6 -7
- package/dist/Avatar.d.mts +17 -1
- package/dist/Avatar.d.ts +17 -1
- package/dist/Avatar.js +80 -115
- package/dist/Avatar.mjs +2 -2
- package/dist/Badge.js +24 -149
- package/dist/Badge.mjs +3 -3
- package/dist/Button.js +79 -267
- package/dist/Button.mjs +6 -6
- package/dist/Card.js +15 -200
- package/dist/Card.mjs +4 -5
- package/dist/CategoryStrip.d.mts +0 -5
- package/dist/CategoryStrip.d.ts +0 -5
- package/dist/CategoryStrip.js +47 -265
- package/dist/CategoryStrip.mjs +6 -6
- package/dist/Checkbox.js +15 -200
- package/dist/Checkbox.mjs +5 -5
- package/dist/Chip.js +44 -236
- package/dist/Chip.mjs +7 -6
- package/dist/ConfirmDialog.js +84 -286
- package/dist/ConfirmDialog.mjs +7 -7
- package/dist/CurrencyDisplay.js +1 -114
- package/dist/CurrencyDisplay.mjs +2 -2
- package/dist/CurrencyInput.js +35 -162
- package/dist/CurrencyInput.mjs +5 -5
- package/dist/DetailRow.js +25 -150
- package/dist/DetailRow.mjs +3 -3
- package/dist/EmptyState.js +80 -268
- package/dist/EmptyState.mjs +7 -7
- package/dist/ErrorBoundary.js +32 -199
- package/dist/ErrorBoundary.mjs +4 -4
- package/dist/Form.js +1 -114
- package/dist/Form.mjs +2 -2
- package/dist/HolographicCard.d.mts +0 -28
- package/dist/HolographicCard.d.ts +0 -28
- package/dist/HolographicCard.js +20 -130
- package/dist/HolographicCard.mjs +9 -32
- package/dist/IconButton.js +36 -234
- package/dist/IconButton.mjs +5 -6
- package/dist/IconPicker.js +222 -929
- package/dist/IconPicker.mjs +5 -5
- package/dist/ImageUpload.d.mts +3 -1
- package/dist/ImageUpload.d.ts +3 -1
- package/dist/ImageUpload.js +25 -215
- package/dist/ImageUpload.mjs +5 -6
- package/dist/ImageViewer.js +75 -266
- package/dist/ImageViewer.mjs +8 -8
- package/dist/Input.d.mts +1 -1
- package/dist/Input.d.ts +1 -1
- package/dist/Input.js +35 -162
- package/dist/Input.mjs +4 -4
- package/dist/LabelValue.js +24 -149
- package/dist/LabelValue.mjs +3 -3
- package/dist/ListGroup.js +1 -114
- package/dist/ListGroup.mjs +2 -2
- package/dist/ListItem.js +38 -235
- package/dist/ListItem.mjs +5 -6
- package/dist/MediaCard.d.mts +0 -14
- package/dist/MediaCard.d.ts +0 -14
- package/dist/MediaCard.js +69 -315
- package/dist/MediaCard.mjs +5 -6
- package/dist/MenuGroup.js +1 -114
- package/dist/MenuGroup.mjs +2 -2
- package/dist/MenuItem.js +36 -234
- package/dist/MenuItem.mjs +5 -6
- package/dist/MonthPicker.js +8 -163
- package/dist/MonthPicker.mjs +3 -3
- package/dist/NumberStepper.js +40 -238
- package/dist/NumberStepper.mjs +5 -6
- package/dist/PagerDots.d.mts +1 -1
- package/dist/PagerDots.d.ts +1 -1
- package/dist/PagerDots.js +69 -224
- package/dist/PagerDots.mjs +6 -5
- package/dist/Pressable.js +14 -85
- package/dist/Pressable.mjs +4 -4
- package/dist/PricingCard.js +87 -272
- package/dist/PricingCard.mjs +8 -8
- package/dist/Progress.js +3 -123
- package/dist/Progress.mjs +3 -3
- package/dist/RadioGroup.js +52 -265
- package/dist/RadioGroup.mjs +5 -5
- package/dist/RetrayProvider.js +3 -6
- package/dist/RetrayProvider.mjs +3 -3
- package/dist/Select.d.mts +2 -1
- package/dist/Select.d.ts +2 -1
- package/dist/Select.js +24 -232
- package/dist/Select.mjs +4 -5
- package/dist/SelectableCard.js +33 -209
- package/dist/SelectableCard.mjs +5 -5
- package/dist/SelectableGrid.d.mts +0 -21
- package/dist/SelectableGrid.d.ts +0 -21
- package/dist/SelectableGrid.js +49 -271
- package/dist/SelectableGrid.mjs +5 -6
- package/dist/Separator.js +1 -114
- package/dist/Separator.mjs +2 -2
- package/dist/Sheet.js +7 -162
- package/dist/Sheet.mjs +3 -3
- package/dist/SheetSelect.js +39 -236
- package/dist/SheetSelect.mjs +6 -6
- package/dist/Skeleton.js +4 -124
- package/dist/Skeleton.mjs +3 -3
- package/dist/Slider.js +6 -161
- package/dist/Slider.mjs +3 -3
- package/dist/Spinner.js +3 -116
- package/dist/Spinner.mjs +2 -2
- package/dist/Stats.js +36 -234
- package/dist/Stats.mjs +5 -6
- package/dist/Switch.js +24 -175
- package/dist/Switch.mjs +5 -4
- package/dist/TabBar.js +43 -200
- package/dist/TabBar.mjs +5 -4
- package/dist/Tabs.js +15 -199
- package/dist/Tabs.mjs +5 -5
- package/dist/Text.js +9 -130
- package/dist/Text.mjs +2 -2
- package/dist/Textarea.d.mts +2 -1
- package/dist/Textarea.d.ts +2 -1
- package/dist/Textarea.js +71 -219
- package/dist/Textarea.mjs +4 -4
- package/dist/Toast.js +1 -114
- package/dist/Toast.mjs +2 -2
- package/dist/Toggle.js +39 -236
- package/dist/Toggle.mjs +6 -6
- package/dist/{chunk-M3C7XM2M.mjs → chunk-2QOHHBJC.mjs} +3 -3
- package/dist/{chunk-LIS6I5UP.mjs → chunk-2VIDP72N.mjs} +3 -3
- package/dist/{chunk-DF7JA72E.mjs → chunk-4NQFTHN3.mjs} +13 -7
- package/dist/{chunk-UBUXUMER.mjs → chunk-4ZO5PTKF.mjs} +4 -4
- package/dist/{chunk-3XCFYSX4.mjs → chunk-5MYNAAFE.mjs} +13 -17
- package/dist/{chunk-E7NEHHXV.mjs → chunk-62BBSSUF.mjs} +3 -3
- package/dist/{chunk-MVMGPZN6.mjs → chunk-6CR4S6W2.mjs} +3 -3
- package/dist/{chunk-EDLCGYIO.mjs → chunk-6QLBHUEG.mjs} +8 -7
- package/dist/chunk-ARONDO7M.mjs +40 -0
- package/dist/{chunk-GH67YXG6.mjs → chunk-AZV7KNJI.mjs} +3 -3
- package/dist/{chunk-RMRS44MQ.mjs → chunk-BTUW5LSG.mjs} +11 -8
- package/dist/{chunk-2P2CB235.mjs → chunk-BULKGOIZ.mjs} +7 -8
- package/dist/{chunk-NHDI3VQB.mjs → chunk-CBIZLRYH.mjs} +15 -12
- package/dist/chunk-CM2DG4MR.mjs +142 -0
- package/dist/{chunk-TS7DGUIR.mjs → chunk-DBHSUUKU.mjs} +2 -2
- package/dist/{chunk-57V2LXCK.mjs → chunk-DE25XTVQ.mjs} +3 -3
- package/dist/{chunk-UQ4742ET.mjs → chunk-E4EQSCKR.mjs} +5 -5
- package/dist/{chunk-GUTDFUNF.mjs → chunk-EHGBHFMH.mjs} +9 -17
- package/dist/{chunk-CF27NBXO.mjs → chunk-EROPDCB5.mjs} +16 -24
- package/dist/{chunk-ZIMY2QUM.mjs → chunk-ERWJPVX7.mjs} +2 -2
- package/dist/{chunk-NLZY4TXU.mjs → chunk-ESQDPO5E.mjs} +7 -7
- package/dist/{chunk-VJBUCITV.mjs → chunk-EW2FIDSM.mjs} +1 -1
- package/dist/{chunk-HC4VVCWY.mjs → chunk-FTTI6T5Q.mjs} +4 -4
- package/dist/{chunk-2HFD4IHU.mjs → chunk-HUSSF6TF.mjs} +1 -1
- package/dist/chunk-IFYMBOEN.mjs +14 -0
- package/dist/{chunk-QOLWA2PW.mjs → chunk-IGU223UM.mjs} +80 -4
- package/dist/chunk-IJCMPVW5.mjs +121 -0
- package/dist/{chunk-AENAVIKT.mjs → chunk-ITG4JQM3.mjs} +4 -4
- package/dist/{chunk-E5UKLSJZ.mjs → chunk-K3QX2M26.mjs} +11 -8
- package/dist/{chunk-4OORJ2DY.mjs → chunk-K7TKID3V.mjs} +8 -7
- package/dist/{chunk-2LG326TT.mjs → chunk-KAGADD2O.mjs} +4 -4
- package/dist/{chunk-IVSRW4HS.mjs → chunk-KC5QDYGZ.mjs} +4 -4
- package/dist/{chunk-7AFZWSCI.mjs → chunk-KPTY7UYQ.mjs} +1 -1
- package/dist/{chunk-YTXRIXNZ.mjs → chunk-KSSVIFYR.mjs} +9 -12
- package/dist/chunk-L3YKPTJQ.mjs +119 -0
- package/dist/chunk-M53LC4Q7.mjs +35 -0
- package/dist/{chunk-ZR6HSEAB.mjs → chunk-MP7GLMIR.mjs} +17 -25
- package/dist/chunk-MZ6WRTD2.mjs +40 -0
- package/dist/chunk-NGEN2EES.mjs +581 -0
- package/dist/{chunk-C43HRKXH.mjs → chunk-OBV72JD4.mjs} +1 -1
- package/dist/{chunk-LPV4NJJK.mjs → chunk-PGQ6FMXS.mjs} +6 -5
- package/dist/{chunk-MEPSKGBO.mjs → chunk-PI6RULJX.mjs} +1 -1
- package/dist/{chunk-F3YTWO3T.mjs → chunk-RA6SAAFE.mjs} +9 -8
- package/dist/{chunk-UNNRUJTM.mjs → chunk-RRKM4MKB.mjs} +7 -7
- package/dist/{chunk-ULGNQPNE.mjs → chunk-S2VGME7X.mjs} +1 -1
- package/dist/{chunk-OLVJFKXS.mjs → chunk-S44XWTTC.mjs} +35 -25
- package/dist/{chunk-YMYIEVZP.mjs → chunk-SZEKQAOY.mjs} +1 -1
- package/dist/{chunk-ELGEOM7I.mjs → chunk-TETMEKZE.mjs} +9 -9
- package/dist/{chunk-BXF4AMHY.mjs → chunk-TMH263OK.mjs} +5 -4
- package/dist/{chunk-NJG7DHVF.mjs → chunk-U6DEBYU5.mjs} +10 -9
- package/dist/{chunk-RJNLAH76.mjs → chunk-UOKFSFNJ.mjs} +2 -2
- package/dist/{chunk-HEDQPK4I.mjs → chunk-URIH43IJ.mjs} +13 -21
- package/dist/{chunk-QXDGGOLC.mjs → chunk-V2ZB2XNS.mjs} +6 -6
- package/dist/{chunk-KSUWPU2F.mjs → chunk-WIPEDNSD.mjs} +7 -7
- package/dist/{chunk-QDAZGZUF.mjs → chunk-XCIG6HT2.mjs} +3 -3
- package/dist/{chunk-4J2PXL36.mjs → chunk-Y6YS33GM.mjs} +40 -38
- package/dist/{chunk-4XOB5TTD.mjs → chunk-ZKDKKQCE.mjs} +5 -5
- package/dist/{chunk-LOBLCFMN.mjs → chunk-ZTPYUU5C.mjs} +5 -5
- package/dist/index.d.mts +12 -72
- package/dist/index.d.ts +12 -72
- package/dist/index.js +1051 -1838
- package/dist/index.mjs +81 -85
- package/package.json +8 -10
- package/src/components/Accordion/Accordion.tsx +12 -9
- package/src/components/AlertBanner/AlertBanner.tsx +7 -6
- package/src/components/AppHeader/AppHeader.tsx +1 -1
- package/src/components/Avatar/Avatar.tsx +92 -1
- package/src/components/Avatar/index.ts +2 -2
- package/src/components/Badge/Badge.tsx +2 -2
- package/src/components/Button/Button.tsx +50 -46
- package/src/components/Card/Card.tsx +1 -0
- package/src/components/CategoryStrip/CategoryStrip.tsx +36 -49
- package/src/components/Chip/Chip.tsx +5 -4
- package/src/components/ConfirmDialog/ConfirmDialog.tsx +3 -3
- package/src/components/DetailRow/DetailRow.tsx +3 -3
- package/src/components/EmptyState/EmptyState.tsx +2 -2
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +6 -6
- package/src/components/HolographicCard/HolographicCard.tsx +14 -95
- package/src/components/IconButton/IconButton.tsx +2 -2
- package/src/components/IconPicker/IconPicker.tsx +13 -12
- package/src/components/ImageUpload/ImageUpload.tsx +14 -25
- package/src/components/ImageViewer/ImageViewer.tsx +3 -3
- package/src/components/Input/Input.tsx +11 -5
- package/src/components/LabelValue/LabelValue.tsx +2 -2
- package/src/components/ListItem/ListItem.tsx +4 -4
- package/src/components/MediaCard/MediaCard.tsx +21 -59
- package/src/components/MenuItem/MenuItem.tsx +2 -2
- package/src/components/MonthPicker/MonthPicker.tsx +2 -2
- package/src/components/NumberStepper/NumberStepper.tsx +6 -6
- package/src/components/PagerDots/PagerDots.tsx +38 -28
- package/src/components/PricingCard/PricingCard.tsx +6 -6
- package/src/components/RadioGroup/RadioGroup.tsx +18 -31
- package/src/components/Select/Select.tsx +32 -39
- package/src/components/SelectableCard/SelectableCard.tsx +4 -6
- package/src/components/SelectableGrid/SelectableGrid.tsx +38 -72
- package/src/components/Sheet/Sheet.tsx +1 -1
- package/src/components/SheetSelect/SheetSelect.tsx +3 -3
- package/src/components/Skeleton/Skeleton.tsx +1 -1
- package/src/components/Spinner/Spinner.tsx +2 -2
- package/src/components/Stats/Stats.tsx +2 -2
- package/src/components/Switch/Switch.tsx +9 -6
- package/src/components/TabBar/TabBar.tsx +9 -8
- package/src/components/Text/Text.tsx +12 -1
- package/src/components/Textarea/Textarea.tsx +18 -32
- package/src/components/Toggle/Toggle.tsx +3 -3
- package/src/hooks/useConfirmDialog.ts +31 -42
- package/src/index.ts +3 -4
- package/src/theme/ThemeProvider.tsx +1 -4
- package/src/theme/colorUtils.ts +1 -72
- package/src/theme/colors.ts +40 -1
- package/src/theme/types.ts +2 -2
- package/src/utils/animations.ts +0 -47
- package/src/utils/curatedIcons.ts +93 -801
- package/src/utils/haptics.ts +13 -208
- package/src/utils/icons.ts +27 -91
- package/src/utils/pressable.ts +10 -61
- package/dist/VirtualList.d.mts +0 -19
- package/dist/VirtualList.d.ts +0 -19
- package/dist/VirtualList.js +0 -38
- package/dist/VirtualList.mjs +0 -2
- package/dist/chunk-2BA3JMKK.mjs +0 -136
- package/dist/chunk-3DKJ2GIC.mjs +0 -30
- package/dist/chunk-7ELGZ66G.mjs +0 -164
- package/dist/chunk-DVK4G2GT.mjs +0 -59
- package/dist/chunk-EJ7ZPXOH.mjs +0 -163
- package/dist/chunk-KA7LTET3.mjs +0 -71
- package/dist/chunk-LNPKGWBG.mjs +0 -134
- package/dist/chunk-NC5ZTR2Y.mjs +0 -32
- package/dist/chunk-SAWUXP3A.mjs +0 -1114
- package/dist/chunk-YNROWHQJ.mjs +0 -46
- package/src/components/VirtualList/VirtualList.tsx +0 -60
- package/src/components/VirtualList/index.ts +0 -1
- package/src/utils/fontGuard.ts +0 -35
- package/src/utils/hover.ts +0 -25
- package/src/utils/useColorTransition.ts +0 -40
- package/src/utils/usePressScale.ts +0 -75
package/dist/index.mjs
CHANGED
|
@@ -1,68 +1,66 @@
|
|
|
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
|
-
export {
|
|
30
|
-
export {
|
|
31
|
-
export {
|
|
32
|
-
export {
|
|
33
|
-
export {
|
|
34
|
-
export {
|
|
35
|
-
export {
|
|
36
|
-
export {
|
|
37
|
-
export {
|
|
38
|
-
export {
|
|
39
|
-
export { Spinner } from './chunk-LIS6I5UP.mjs';
|
|
1
|
+
export { Toggle } from './chunk-RRKM4MKB.mjs';
|
|
2
|
+
export { Stats } from './chunk-ZKDKKQCE.mjs';
|
|
3
|
+
export { Switch } from './chunk-BTUW5LSG.mjs';
|
|
4
|
+
export { TabBar } from './chunk-U6DEBYU5.mjs';
|
|
5
|
+
export { Tabs, TabsContent } from './chunk-KC5QDYGZ.mjs';
|
|
6
|
+
export { Text } from './chunk-EHGBHFMH.mjs';
|
|
7
|
+
export { Textarea } from './chunk-L3YKPTJQ.mjs';
|
|
8
|
+
export { Select } from './chunk-URIH43IJ.mjs';
|
|
9
|
+
export { SelectableCard, SelectableCardGroup } from './chunk-BULKGOIZ.mjs';
|
|
10
|
+
export { SelectableGrid } from './chunk-MP7GLMIR.mjs';
|
|
11
|
+
export { Separator } from './chunk-EW2FIDSM.mjs';
|
|
12
|
+
export { BottomSheetModalProvider, Sheet, BottomSheetTextInput as SheetTextInput } from './chunk-2QOHHBJC.mjs';
|
|
13
|
+
export { SheetSelect } from './chunk-WIPEDNSD.mjs';
|
|
14
|
+
export { Skeleton } from './chunk-XCIG6HT2.mjs';
|
|
15
|
+
export { Slider } from './chunk-UOKFSFNJ.mjs';
|
|
16
|
+
export { MonthPicker, dateToMonthPickerValue, monthPickerValueToDate } from './chunk-ITG4JQM3.mjs';
|
|
17
|
+
export { NumberStepper } from './chunk-TETMEKZE.mjs';
|
|
18
|
+
export { Pressable } from './chunk-62BBSSUF.mjs';
|
|
19
|
+
export { PricingCard } from './chunk-K3QX2M26.mjs';
|
|
20
|
+
export { Progress } from './chunk-DBHSUUKU.mjs';
|
|
21
|
+
export { RadioGroup } from './chunk-IJCMPVW5.mjs';
|
|
22
|
+
export { RetrayProvider } from './chunk-ERWJPVX7.mjs';
|
|
23
|
+
export { ToastProvider, sonnerToast as toast, useToast } from './chunk-SZEKQAOY.mjs';
|
|
24
|
+
export { ImageViewer } from './chunk-PGQ6FMXS.mjs';
|
|
25
|
+
export { PagerDots } from './chunk-S44XWTTC.mjs';
|
|
26
|
+
export { LabelValue } from './chunk-DE25XTVQ.mjs';
|
|
27
|
+
export { ListGroup, ListGroupFooter, ListGroupHeader } from './chunk-OBV72JD4.mjs';
|
|
28
|
+
export { ListItem } from './chunk-6QLBHUEG.mjs';
|
|
29
|
+
export { MediaCard } from './chunk-CM2DG4MR.mjs';
|
|
30
|
+
export { MenuGroup, MenuGroupFooter, MenuGroupHeader } from './chunk-S2VGME7X.mjs';
|
|
31
|
+
export { MenuItem } from './chunk-E4EQSCKR.mjs';
|
|
32
|
+
export { DetailRow } from './chunk-KAGADD2O.mjs';
|
|
33
|
+
export { EmptyState } from './chunk-FTTI6T5Q.mjs';
|
|
34
|
+
export { ErrorBoundary } from './chunk-ESQDPO5E.mjs';
|
|
35
|
+
export { Form, FormField, FormFooter, FormSection } from './chunk-KPTY7UYQ.mjs';
|
|
36
|
+
export { IconPicker } from './chunk-NGEN2EES.mjs';
|
|
37
|
+
export { ImageUpload } from './chunk-EROPDCB5.mjs';
|
|
38
|
+
export { Spinner } from './chunk-2VIDP72N.mjs';
|
|
40
39
|
export { ButtonGroup } from './chunk-3BBOZ3OQ.mjs';
|
|
41
|
-
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-
|
|
42
|
-
export { CategoryStrip } from './chunk-
|
|
43
|
-
|
|
44
|
-
export {
|
|
45
|
-
export {
|
|
46
|
-
export {
|
|
47
|
-
export {
|
|
48
|
-
export {
|
|
49
|
-
export {
|
|
50
|
-
export {
|
|
51
|
-
export {
|
|
52
|
-
export {
|
|
53
|
-
export {
|
|
54
|
-
export {
|
|
55
|
-
export {
|
|
56
|
-
|
|
57
|
-
import './chunk-
|
|
58
|
-
export { impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning,
|
|
59
|
-
import './chunk-DVK4G2GT.mjs';
|
|
40
|
+
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-TMH263OK.mjs';
|
|
41
|
+
export { CategoryStrip } from './chunk-5MYNAAFE.mjs';
|
|
42
|
+
export { Checkbox } from './chunk-4ZO5PTKF.mjs';
|
|
43
|
+
export { Chip, ChipGroup } from './chunk-RA6SAAFE.mjs';
|
|
44
|
+
export { ConfirmDialog } from './chunk-V2ZB2XNS.mjs';
|
|
45
|
+
export { CurrencyDisplay } from './chunk-PI6RULJX.mjs';
|
|
46
|
+
export { CurrencyInput } from './chunk-HUSSF6TF.mjs';
|
|
47
|
+
export { Input } from './chunk-4NQFTHN3.mjs';
|
|
48
|
+
export { Accordion } from './chunk-CBIZLRYH.mjs';
|
|
49
|
+
export { AlertBanner } from './chunk-K7TKID3V.mjs';
|
|
50
|
+
export { AppHeader } from './chunk-6CR4S6W2.mjs';
|
|
51
|
+
export { IconButton } from './chunk-ZTPYUU5C.mjs';
|
|
52
|
+
export { Avatar, AvatarGroup } from './chunk-IGU223UM.mjs';
|
|
53
|
+
export { Badge } from './chunk-AZV7KNJI.mjs';
|
|
54
|
+
export { Button } from './chunk-Y6YS33GM.mjs';
|
|
55
|
+
import './chunk-M53LC4Q7.mjs';
|
|
56
|
+
import './chunk-IFYMBOEN.mjs';
|
|
57
|
+
export { impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning, selectionAsync } from './chunk-ARONDO7M.mjs';
|
|
60
58
|
export { BREAKPOINTS, ICON_SIZES, RADIUS, SHADOWS, SPACING, TYPOGRAPHY } from './chunk-QY3X2UYR.mjs';
|
|
61
|
-
export { Icon
|
|
62
|
-
export { ThemeProvider, defaultDark, defaultLight, deriveColors, useTheme, withAlpha } from './chunk-
|
|
59
|
+
export { Icon } from './chunk-MZ6WRTD2.mjs';
|
|
60
|
+
export { ThemeProvider, defaultDark, defaultLight, deriveColors, hexToRgb, useTheme, withAlpha } from './chunk-KSSVIFYR.mjs';
|
|
63
61
|
import './chunk-2CE3TQVY.mjs';
|
|
64
62
|
import './chunk-Y6FXYEAI.mjs';
|
|
65
|
-
import { useState, useCallback } from 'react';
|
|
63
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
66
64
|
|
|
67
65
|
// src/utils/typography.ts
|
|
68
66
|
function getResponsiveFontSize(text, maxSize, steps = [
|
|
@@ -79,39 +77,37 @@ function getResponsiveFontSize(text, maxSize, steps = [
|
|
|
79
77
|
}
|
|
80
78
|
function useConfirmDialog(options) {
|
|
81
79
|
const [visible, setVisible] = useState(false);
|
|
82
|
-
const [target, setTarget] = useState(null);
|
|
83
80
|
const [loading, setLoading] = useState(false);
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
const mountedRef = useRef(true);
|
|
82
|
+
const onConfirmRef = useRef(options.onConfirm);
|
|
83
|
+
const onCancelRef = useRef(options.onCancel);
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
onConfirmRef.current = options.onConfirm;
|
|
86
|
+
onCancelRef.current = options.onCancel;
|
|
87
|
+
});
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
return () => {
|
|
90
|
+
mountedRef.current = false;
|
|
91
|
+
};
|
|
87
92
|
}, []);
|
|
93
|
+
const open = useCallback(() => setVisible(true), []);
|
|
88
94
|
const handleConfirm = useCallback(async () => {
|
|
89
95
|
setLoading(true);
|
|
90
96
|
try {
|
|
91
|
-
await
|
|
97
|
+
await onConfirmRef.current();
|
|
98
|
+
} catch {
|
|
92
99
|
} finally {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
if (mountedRef.current) {
|
|
101
|
+
setLoading(false);
|
|
102
|
+
setVisible(false);
|
|
103
|
+
}
|
|
96
104
|
}
|
|
97
|
-
}, [
|
|
105
|
+
}, []);
|
|
98
106
|
const handleCancel = useCallback(() => {
|
|
99
107
|
setVisible(false);
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return {
|
|
104
|
-
visible,
|
|
105
|
-
target,
|
|
106
|
-
loading,
|
|
107
|
-
open,
|
|
108
|
-
dialogProps: {
|
|
109
|
-
visible,
|
|
110
|
-
loading,
|
|
111
|
-
onConfirm: handleConfirm,
|
|
112
|
-
onCancel: handleCancel
|
|
113
|
-
}
|
|
114
|
-
};
|
|
108
|
+
onCancelRef.current?.();
|
|
109
|
+
}, []);
|
|
110
|
+
return { visible, loading, open, onConfirm: handleConfirm, onCancel: handleCancel };
|
|
115
111
|
}
|
|
116
112
|
|
|
117
113
|
export { getResponsiveFontSize, useConfirmDialog };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retray-dev/ui-kit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "13.0.0",
|
|
4
4
|
"description": "Personal UI Kit for React Native / Expo",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"@shopify/react-native-skia": ">=1.0.0",
|
|
66
66
|
"expo-font": ">=14.0.0",
|
|
67
67
|
"expo-haptics": ">=14.0.0",
|
|
68
|
+
"expo-image": ">=3.0.0",
|
|
68
69
|
"expo-image-picker": ">=15.0.0",
|
|
69
70
|
"expo-linear-gradient": ">=13.0.0",
|
|
70
71
|
"expo-sensors": ">=13.0.0",
|
|
@@ -73,7 +74,6 @@
|
|
|
73
74
|
"react-native": ">=0.76",
|
|
74
75
|
"react-native-ease": ">=0.7.0",
|
|
75
76
|
"react-native-gesture-handler": ">=2.0.0",
|
|
76
|
-
"react-native-pulsar": ">=1.6.0",
|
|
77
77
|
"react-native-reanimated": ">=4.0.0 <5.0.0",
|
|
78
78
|
"react-native-safe-area-context": ">=4.0.0",
|
|
79
79
|
"react-native-screens": ">=3.0.0",
|
|
@@ -89,10 +89,7 @@
|
|
|
89
89
|
"expo-sensors": {
|
|
90
90
|
"optional": true
|
|
91
91
|
},
|
|
92
|
-
|
|
93
|
-
"optional": true
|
|
94
|
-
},
|
|
95
|
-
"expo-image-picker": {
|
|
92
|
+
"expo-image-picker": {
|
|
96
93
|
"optional": true
|
|
97
94
|
},
|
|
98
95
|
"react-native-ease": {
|
|
@@ -110,7 +107,8 @@
|
|
|
110
107
|
"react-native-worklets": "0.5.1",
|
|
111
108
|
"@types/react": "19.1.17",
|
|
112
109
|
"react-native-safe-area-context": "5.6.2",
|
|
113
|
-
"@gorhom/bottom-sheet": "5.2.14"
|
|
110
|
+
"@gorhom/bottom-sheet": "5.2.14",
|
|
111
|
+
"expo": "54.0.35"
|
|
114
112
|
},
|
|
115
113
|
"onlyBuiltDependencies": [
|
|
116
114
|
"esbuild"
|
|
@@ -124,15 +122,16 @@
|
|
|
124
122
|
"@react-native-picker/picker": "2.11.1",
|
|
125
123
|
"@shopify/react-native-skia": "2.2.12",
|
|
126
124
|
"@testing-library/react-native": "^14.0.0",
|
|
127
|
-
"@types/jest": "^
|
|
125
|
+
"@types/jest": "^29.5.14",
|
|
128
126
|
"@types/react": "19.1.17",
|
|
129
127
|
"babel-preset-expo": "~54.0.11",
|
|
130
128
|
"eslint": "^9.0.0",
|
|
131
129
|
"eslint-config-prettier": "^10.0.0",
|
|
132
130
|
"eslint-plugin-react": "^7.37.0",
|
|
133
131
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
134
|
-
"expo-font": "~14.0.
|
|
132
|
+
"expo-font": "~14.0.12",
|
|
135
133
|
"expo-haptics": "~15.0.8",
|
|
134
|
+
"expo-image": "~3.0.11",
|
|
136
135
|
"expo-linear-gradient": "~15.0.8",
|
|
137
136
|
"expo-sensors": "~15.0.7",
|
|
138
137
|
"jest-expo": "~54.0.17",
|
|
@@ -142,7 +141,6 @@
|
|
|
142
141
|
"react-native": "0.81.5",
|
|
143
142
|
"react-native-ease": "^0.7.2",
|
|
144
143
|
"react-native-gesture-handler": "~2.28.0",
|
|
145
|
-
"react-native-pulsar": "^1.6.1",
|
|
146
144
|
"react-native-reanimated": "~4.1.1",
|
|
147
145
|
"react-native-safe-area-context": "5.6.2",
|
|
148
146
|
"react-native-screens": "4.16.0",
|
|
@@ -2,11 +2,11 @@ import React, { useState } from 'react'
|
|
|
2
2
|
import {
|
|
3
3
|
View,
|
|
4
4
|
Text,
|
|
5
|
-
Pressable,
|
|
6
5
|
StyleSheet,
|
|
7
6
|
ViewStyle,
|
|
8
7
|
} from 'react-native'
|
|
9
8
|
import Animated, {
|
|
9
|
+
Easing,
|
|
10
10
|
useSharedValue,
|
|
11
11
|
useDerivedValue,
|
|
12
12
|
useAnimatedStyle,
|
|
@@ -16,8 +16,9 @@ import { Entypo } from '@expo/vector-icons'
|
|
|
16
16
|
import { selectionAsync as hapticSelection } from '../../utils/haptics'
|
|
17
17
|
import { useTheme } from '../../theme'
|
|
18
18
|
import { s, vs, ms } from '../../utils/scaling'
|
|
19
|
-
import {
|
|
20
|
-
import { TIMINGS
|
|
19
|
+
import { Icon } from '../../utils/icons'
|
|
20
|
+
import { TIMINGS } from '../../utils/animations'
|
|
21
|
+
import { PressableRow } from '../../utils/pressable'
|
|
21
22
|
|
|
22
23
|
export interface AccordionItem {
|
|
23
24
|
value: string
|
|
@@ -61,7 +62,7 @@ function AccordionItemComponent({
|
|
|
61
62
|
const { colors } = useTheme()
|
|
62
63
|
|
|
63
64
|
const resolvedIcon = item.iconName
|
|
64
|
-
?
|
|
65
|
+
? <Icon name={item.iconName} size={ms(16)} color={item.iconColor ?? colors.foregroundMuted} />
|
|
65
66
|
: item.icon
|
|
66
67
|
|
|
67
68
|
// Shared values — all animation lives on the UI thread
|
|
@@ -78,14 +79,14 @@ function AccordionItemComponent({
|
|
|
78
79
|
const derivedHeight = useDerivedValue(() =>
|
|
79
80
|
withTiming(height.value * Number(isExpanded.value), {
|
|
80
81
|
duration: isExpanded.value ? TIMINGS.expand.duration : TIMINGS.collapse.duration,
|
|
81
|
-
easing: isExpanded.value ?
|
|
82
|
+
easing: isExpanded.value ? Easing.bezier(0.23, 1, 0.32, 1) : Easing.in(Easing.ease),
|
|
82
83
|
})
|
|
83
84
|
)
|
|
84
85
|
|
|
85
86
|
const derivedRotation = useDerivedValue(() =>
|
|
86
87
|
withTiming(isExpanded.value ? 1 : 0, {
|
|
87
88
|
duration: isExpanded.value ? TIMINGS.expand.duration : TIMINGS.collapse.duration,
|
|
88
|
-
easing: isExpanded.value ?
|
|
89
|
+
easing: isExpanded.value ? Easing.bezier(0.23, 1, 0.32, 1) : Easing.in(Easing.ease),
|
|
89
90
|
})
|
|
90
91
|
)
|
|
91
92
|
|
|
@@ -100,15 +101,17 @@ function AccordionItemComponent({
|
|
|
100
101
|
|
|
101
102
|
return (
|
|
102
103
|
<View style={[styles.item, { backgroundColor: colors.card, borderColor: colors.border }]}>
|
|
103
|
-
<
|
|
104
|
-
style={({ pressed }) => [styles.trigger, { opacity: pressed ? 0.6 : 1 }]}
|
|
104
|
+
<PressableRow
|
|
105
105
|
onPress={() => {
|
|
106
106
|
hapticSelection()
|
|
107
107
|
onToggle()
|
|
108
108
|
}}
|
|
109
|
+
rippleColor="transparent"
|
|
110
|
+
touchSoundDisabled
|
|
109
111
|
accessibilityRole="button"
|
|
110
112
|
accessibilityState={{ expanded: isOpen }}
|
|
111
113
|
accessibilityLabel={typeof item.trigger === 'string' ? item.trigger : undefined}
|
|
114
|
+
style={styles.trigger}
|
|
112
115
|
>
|
|
113
116
|
<View style={styles.triggerContent}>
|
|
114
117
|
{resolvedIcon ? <View style={styles.icon}>{resolvedIcon}</View> : null}
|
|
@@ -129,7 +132,7 @@ function AccordionItemComponent({
|
|
|
129
132
|
<Animated.View style={[styles.chevron, rotationStyle]}>
|
|
130
133
|
<Entypo name="chevron-down" size={18} color={colors.foregroundMuted} />
|
|
131
134
|
</Animated.View>
|
|
132
|
-
</
|
|
135
|
+
</PressableRow>
|
|
133
136
|
|
|
134
137
|
{/*
|
|
135
138
|
The Animated.View height is driven by derivedHeight (0 when closed, full height when open).
|
|
@@ -3,7 +3,7 @@ import { View, Text, StyleSheet, ViewStyle, TouchableOpacity } from 'react-nativ
|
|
|
3
3
|
import { FontAwesome5, MaterialIcons, Entypo, Feather } from '@expo/vector-icons'
|
|
4
4
|
import { useTheme } from '../../theme'
|
|
5
5
|
import { s, vs, ms } from '../../utils/scaling'
|
|
6
|
-
import {
|
|
6
|
+
import { Icon } from '../../utils/icons'
|
|
7
7
|
import { RADIUS } from '../../tokens'
|
|
8
8
|
|
|
9
9
|
export type AlertBannerVariant = 'default' | 'destructive' | 'success' | 'warning'
|
|
@@ -60,7 +60,7 @@ export function AlertBanner({ title, description, variant = 'default', icon, ico
|
|
|
60
60
|
)
|
|
61
61
|
|
|
62
62
|
const effectiveIcon: React.ReactNode = iconName
|
|
63
|
-
?
|
|
63
|
+
? <Icon name={iconName} size={ms(16)} color={iconColor ?? accentColor} />
|
|
64
64
|
: icon ?? defaultIcon
|
|
65
65
|
|
|
66
66
|
// Accessibility: AlertBanner is a notification — "alert" role announces it.
|
|
@@ -87,9 +87,10 @@ export function AlertBanner({ title, description, variant = 'default', icon, ico
|
|
|
87
87
|
<TouchableOpacity
|
|
88
88
|
onPress={onDismiss}
|
|
89
89
|
style={styles.dismissButton}
|
|
90
|
+
hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}
|
|
90
91
|
activeOpacity={0.6}
|
|
91
92
|
accessibilityRole="button"
|
|
92
|
-
accessibilityLabel="
|
|
93
|
+
accessibilityLabel="Descartar"
|
|
93
94
|
>
|
|
94
95
|
<Feather name="x" size={ms(16)} color={colors.foregroundMuted} />
|
|
95
96
|
</TouchableOpacity>
|
|
@@ -123,8 +124,8 @@ const styles = StyleSheet.create({
|
|
|
123
124
|
fontSize: ms(12),
|
|
124
125
|
},
|
|
125
126
|
dismissButton: {
|
|
126
|
-
padding: s(
|
|
127
|
-
marginTop: vs(-
|
|
128
|
-
marginRight: -s(
|
|
127
|
+
padding: s(10),
|
|
128
|
+
marginTop: vs(-8),
|
|
129
|
+
marginRight: -s(10),
|
|
129
130
|
},
|
|
130
131
|
})
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import React, { useState } from 'react'
|
|
2
|
-
import {
|
|
2
|
+
import { Image } from 'expo-image'
|
|
3
|
+
import { View, Text, StyleSheet, ViewStyle, TouchableOpacity } from 'react-native'
|
|
3
4
|
import { useTheme } from '../../theme'
|
|
4
5
|
import { s, ms } from '../../utils/scaling'
|
|
6
|
+
import { vs } from '../../utils/scaling'
|
|
5
7
|
|
|
6
8
|
export type AvatarSize = 'sm' | 'md' | 'lg' | 'xl'
|
|
7
9
|
// online: green dot offline: border-only (no fill) busy: destructive away: warning
|
|
@@ -121,6 +123,80 @@ function AvatarBase({ src, fallback, fallbackText, size = 'md', status, style }:
|
|
|
121
123
|
|
|
122
124
|
export const Avatar = React.memo(AvatarBase)
|
|
123
125
|
|
|
126
|
+
export interface AvatarGroupProps {
|
|
127
|
+
users: { name: string; src?: string }[]
|
|
128
|
+
/** Max avatars visible before +N overflow badge. Default 3. */
|
|
129
|
+
max?: number
|
|
130
|
+
/** Avatar size preset. Default 'sm'. */
|
|
131
|
+
size?: AvatarSize
|
|
132
|
+
/** Overlap between avatars in points. Default 8 (spacing.sm). */
|
|
133
|
+
overlap?: number
|
|
134
|
+
/** Called when +N overflow badge is tapped. */
|
|
135
|
+
onOverflowPress?: () => void
|
|
136
|
+
style?: ViewStyle
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export function AvatarGroup({
|
|
140
|
+
users,
|
|
141
|
+
max = 3,
|
|
142
|
+
size = 'sm',
|
|
143
|
+
overlap = vs(8),
|
|
144
|
+
onOverflowPress,
|
|
145
|
+
style,
|
|
146
|
+
}: AvatarGroupProps) {
|
|
147
|
+
const { colors } = useTheme()
|
|
148
|
+
const visible = users.slice(0, max)
|
|
149
|
+
const overflowCount = users.length - max
|
|
150
|
+
const dimension = sizeMap[size as AvatarSize]
|
|
151
|
+
|
|
152
|
+
return (
|
|
153
|
+
<View style={[styles.group, style]} accessibilityLabel={`${users.length} avatares`}>
|
|
154
|
+
{visible.map((user, i) => (
|
|
155
|
+
<View
|
|
156
|
+
key={`${user.name}-${i}`}
|
|
157
|
+
style={[
|
|
158
|
+
styles.groupItem,
|
|
159
|
+
i > 0 && { marginLeft: -overlap },
|
|
160
|
+
{ zIndex: visible.length - i },
|
|
161
|
+
]}
|
|
162
|
+
>
|
|
163
|
+
<Avatar
|
|
164
|
+
src={user.src}
|
|
165
|
+
fallbackText={user.name}
|
|
166
|
+
size={size}
|
|
167
|
+
/>
|
|
168
|
+
</View>
|
|
169
|
+
))}
|
|
170
|
+
{overflowCount > 0 ? (
|
|
171
|
+
<TouchableOpacity
|
|
172
|
+
style={[
|
|
173
|
+
styles.overflowBadge,
|
|
174
|
+
{
|
|
175
|
+
width: dimension,
|
|
176
|
+
height: dimension,
|
|
177
|
+
borderRadius: dimension / 2,
|
|
178
|
+
backgroundColor: colors.surfaceStrong,
|
|
179
|
+
marginLeft: -overlap,
|
|
180
|
+
},
|
|
181
|
+
]}
|
|
182
|
+
onPress={onOverflowPress}
|
|
183
|
+
disabled={!onOverflowPress}
|
|
184
|
+
activeOpacity={0.7}
|
|
185
|
+
accessibilityRole="button"
|
|
186
|
+
accessibilityLabel={`${overflowCount} avatares más`}
|
|
187
|
+
>
|
|
188
|
+
<Text
|
|
189
|
+
style={[styles.overflowText, { color: colors.foregroundMuted }]}
|
|
190
|
+
allowFontScaling={true}
|
|
191
|
+
>
|
|
192
|
+
+{overflowCount}
|
|
193
|
+
</Text>
|
|
194
|
+
</TouchableOpacity>
|
|
195
|
+
) : null}
|
|
196
|
+
</View>
|
|
197
|
+
)
|
|
198
|
+
}
|
|
199
|
+
|
|
124
200
|
const styles = StyleSheet.create({
|
|
125
201
|
wrapper: {
|
|
126
202
|
alignSelf: 'flex-start',
|
|
@@ -138,4 +214,19 @@ const styles = StyleSheet.create({
|
|
|
138
214
|
bottom: 0,
|
|
139
215
|
right: 0,
|
|
140
216
|
},
|
|
217
|
+
group: {
|
|
218
|
+
flexDirection: 'row',
|
|
219
|
+
alignItems: 'center',
|
|
220
|
+
},
|
|
221
|
+
groupItem: {
|
|
222
|
+
borderRadius: 999,
|
|
223
|
+
},
|
|
224
|
+
overflowBadge: {
|
|
225
|
+
alignItems: 'center',
|
|
226
|
+
justifyContent: 'center',
|
|
227
|
+
},
|
|
228
|
+
overflowText: {
|
|
229
|
+
fontFamily: 'Sohne-SemiBold',
|
|
230
|
+
fontSize: ms(11),
|
|
231
|
+
},
|
|
141
232
|
})
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Avatar } from './Avatar'
|
|
2
|
-
export type { AvatarProps, AvatarSize } from './Avatar'
|
|
1
|
+
export { Avatar, AvatarGroup } from './Avatar'
|
|
2
|
+
export type { AvatarProps, AvatarSize, AvatarGroupProps } from './Avatar'
|
|
@@ -2,7 +2,7 @@ import React from 'react'
|
|
|
2
2
|
import { View, Text, StyleSheet, ViewStyle, TextStyle } from 'react-native'
|
|
3
3
|
import { useTheme } from '../../theme'
|
|
4
4
|
import { s, vs, ms } from '../../utils/scaling'
|
|
5
|
-
import {
|
|
5
|
+
import { Icon } from '../../utils/icons'
|
|
6
6
|
|
|
7
7
|
export type BadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'successOutline' | 'destructiveOutline' | 'warningOutline'
|
|
8
8
|
export type BadgeSize = 'sm' | 'md' | 'lg'
|
|
@@ -73,7 +73,7 @@ function BadgeBase({ label, children, variant = 'default', size = 'md', icon, ic
|
|
|
73
73
|
}[variant]
|
|
74
74
|
|
|
75
75
|
const effectiveIcon: React.ReactNode = iconName
|
|
76
|
-
?
|
|
76
|
+
? <Icon name={iconName} size={sizeIconSize[size]} color={iconColor ?? textColor} />
|
|
77
77
|
: icon
|
|
78
78
|
|
|
79
79
|
const content = children ?? label
|