@retray-dev/ui-kit 10.1.0 → 10.2.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 +136 -5
- package/README.md +4 -4
- package/dist/Accordion.js +1 -1
- package/dist/Accordion.mjs +2 -2
- package/dist/AlertBanner.js +1 -1
- package/dist/AlertBanner.mjs +2 -2
- package/dist/AppHeader.js +1 -1
- package/dist/AppHeader.mjs +3 -3
- package/dist/Badge.js +1 -1
- package/dist/Badge.mjs +2 -2
- package/dist/Button.js +1 -1
- package/dist/Button.mjs +2 -2
- package/dist/CategoryStrip.js +1 -1
- package/dist/CategoryStrip.mjs +2 -2
- package/dist/Chip.js +1 -1
- package/dist/Chip.mjs +2 -2
- package/dist/ConfirmDialog.js +1 -1
- package/dist/ConfirmDialog.mjs +3 -3
- package/dist/CurrencyInput.js +1 -1
- package/dist/CurrencyInput.mjs +3 -3
- package/dist/DetailRow.d.mts +1 -1
- package/dist/DetailRow.d.ts +1 -1
- package/dist/DetailRow.js +1 -1
- package/dist/DetailRow.mjs +2 -2
- package/dist/EmptyState.js +1 -1
- package/dist/EmptyState.mjs +3 -3
- package/dist/ErrorBoundary.js +1 -1
- package/dist/ErrorBoundary.mjs +2 -2
- package/dist/IconButton.js +1 -1
- package/dist/IconButton.mjs +2 -2
- package/dist/IconPicker.d.mts +17 -0
- package/dist/IconPicker.d.ts +17 -0
- package/dist/IconPicker.js +997 -0
- package/dist/IconPicker.mjs +7 -0
- package/dist/ImageUpload.d.mts +3 -1
- package/dist/ImageUpload.d.ts +3 -1
- package/dist/ImageUpload.js +28 -10
- package/dist/ImageUpload.mjs +1 -1
- package/dist/ImageViewer.js +1 -1
- package/dist/ImageViewer.mjs +4 -4
- package/dist/Input.js +1 -1
- package/dist/Input.mjs +2 -2
- package/dist/LabelValue.js +1 -1
- package/dist/LabelValue.mjs +2 -2
- package/dist/ListItem.js +1 -1
- package/dist/ListItem.mjs +2 -2
- package/dist/MediaCard.js +1 -1
- package/dist/MediaCard.mjs +2 -2
- package/dist/MenuItem.js +1 -1
- package/dist/MenuItem.mjs +2 -2
- package/dist/NumberStepper.d.mts +19 -0
- package/dist/NumberStepper.d.ts +19 -0
- package/dist/NumberStepper.js +410 -0
- package/dist/NumberStepper.mjs +9 -0
- package/dist/PagerDots.js +1 -1
- package/dist/PagerDots.mjs +2 -2
- package/dist/PricingCard.js +1 -1
- package/dist/PricingCard.mjs +4 -4
- package/dist/SelectableGrid.js +1 -1
- package/dist/SelectableGrid.mjs +2 -2
- package/dist/SheetSelect.js +1 -1
- package/dist/SheetSelect.mjs +2 -2
- package/dist/TabBar.js +1 -1
- package/dist/TabBar.mjs +2 -2
- package/dist/Textarea.js +1 -1
- package/dist/Textarea.mjs +2 -2
- package/dist/Toggle.js +1 -1
- package/dist/Toggle.mjs +2 -2
- package/dist/chunk-53Z3NYGE.mjs +742 -0
- package/dist/{chunk-VQ57HWPL.mjs → chunk-6L4G6PBT.mjs} +1 -1
- package/dist/{chunk-6OAZJ577.mjs → chunk-6SECQ2ZF.mjs} +2 -2
- package/dist/{chunk-KIHCWCWL.mjs → chunk-7LWRKMF5.mjs} +1 -1
- package/dist/{chunk-4I7D47FH.mjs → chunk-AJRVDP2H.mjs} +3 -3
- package/dist/{chunk-6MKGPAR2.mjs → chunk-BEMIQXXU.mjs} +1 -1
- package/dist/chunk-BUMAMSTZ.mjs +126 -0
- package/dist/{chunk-UREA2GYY.mjs → chunk-DYT7BG5I.mjs} +1 -1
- package/dist/{chunk-WOEYDUJZ.mjs → chunk-ELXBDILQ.mjs} +2 -2
- package/dist/{chunk-A4MDAP7G.mjs → chunk-FCSSQK3L.mjs} +1 -1
- package/dist/{chunk-2TFTAWVJ.mjs → chunk-HTHGSXFG.mjs} +1 -1
- package/dist/{chunk-VGTDN7SW.mjs → chunk-IX3NYLYQ.mjs} +1 -1
- package/dist/{chunk-T7XZ7H7Y.mjs → chunk-KA7LTET3.mjs} +17 -3
- package/dist/{chunk-URI2WBIV.mjs → chunk-KOO4WITD.mjs} +1 -1
- package/dist/{chunk-JUXSWN54.mjs → chunk-NMU5FMQJ.mjs} +1 -1
- package/dist/{chunk-LXJIIOYQ.mjs → chunk-RYZC432S.mjs} +1 -1
- package/dist/{chunk-JB67UOB5.mjs → chunk-S2R7UVOE.mjs} +1 -1
- package/dist/{chunk-ZUR7AU5R.mjs → chunk-SXLKNTA4.mjs} +1 -1
- package/dist/{chunk-3U4SSNWP.mjs → chunk-T2KCAHOS.mjs} +1 -1
- package/dist/{chunk-ZJKGQMYH.mjs → chunk-TB6SD2FT.mjs} +1 -1
- package/dist/{chunk-AZJF2BLK.mjs → chunk-TBNZHU6C.mjs} +1 -1
- package/dist/{chunk-Y4GL2MHX.mjs → chunk-TZDGAP5N.mjs} +28 -10
- package/dist/{chunk-CZCQZHG6.mjs → chunk-U2XJFYED.mjs} +1 -1
- package/dist/{chunk-TERDKCLE.mjs → chunk-VF2ATYN3.mjs} +1 -1
- package/dist/{chunk-OHBNABL5.mjs → chunk-VKID2D2I.mjs} +1 -1
- package/dist/{chunk-KZL5VTYK.mjs → chunk-WYEUNUTP.mjs} +1 -1
- package/dist/{chunk-DJ7RN37L.mjs → chunk-YJ7I257J.mjs} +1 -1
- package/dist/{chunk-NA7PARID.mjs → chunk-Z4VHZ7B5.mjs} +1 -1
- package/dist/{chunk-MLF3EZFW.mjs → chunk-Z6SFHN6T.mjs} +1 -1
- package/dist/{chunk-4K625MVM.mjs → chunk-ZZ2R6KZ3.mjs} +1 -1
- package/dist/index.d.mts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +892 -12
- package/dist/index.mjs +33 -31
- package/package.json +1 -1
- package/src/components/DetailRow/DetailRow.tsx +1 -1
- package/src/components/IconPicker/IconPicker.tsx +383 -0
- package/src/components/IconPicker/index.ts +1 -0
- package/src/components/ImageUpload/ImageUpload.tsx +34 -12
- package/src/components/NumberStepper/NumberStepper.tsx +147 -0
- package/src/components/NumberStepper/index.ts +1 -0
- package/src/index.ts +3 -1
- package/src/utils/curatedIcons.ts +286 -0
- package/src/utils/icons.ts +20 -2
package/COMPONENTS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @retray-dev/ui-kit — Component Reference (v10.
|
|
1
|
+
# @retray-dev/ui-kit — Component Reference (v10.2.0)
|
|
2
2
|
|
|
3
3
|
This file is the AI reference for this package. Add all three lines below to your project's `CLAUDE.md` to give Claude full context — components, setup guide, and usage examples:
|
|
4
4
|
|
|
@@ -1175,6 +1175,69 @@ const [amount, setAmount] = useState(0)
|
|
|
1175
1175
|
|
|
1176
1176
|
---
|
|
1177
1177
|
|
|
1178
|
+
### NumberStepper
|
|
1179
|
+
|
|
1180
|
+
**Import:** `import { NumberStepper } from '@retray-dev/ui-kit'`
|
|
1181
|
+
|
|
1182
|
+
**When to use:** Quantity +/- controls — cart item counts, guest selectors, inventory adjustments, portion sizes. Use when the user needs to increment/decrement a discrete numeric value within a constrained range (min–max).
|
|
1183
|
+
|
|
1184
|
+
| Prop | Type | Default | Notes |
|
|
1185
|
+
|------|------|---------|-------|
|
|
1186
|
+
| value | `number` | required | Current numeric value |
|
|
1187
|
+
| onValueChange | `(value: number) => void` | required | Called with clamped value on each step |
|
|
1188
|
+
| min | `number` | `1` | Minimum allowed value |
|
|
1189
|
+
| max | `number` | `99` | Maximum allowed value |
|
|
1190
|
+
| step | `number` | `1` | Increment/decrement amount. Supports decimals (e.g. `0.5`) |
|
|
1191
|
+
| size | `'sm' \| 'md' \| 'lg'` | `'md'` | Controls button and value text size |
|
|
1192
|
+
| disabled | `boolean` | `false` | Disables both buttons |
|
|
1193
|
+
| accessibilityLabel | `string` | — | Custom a11y label for value text. Default: `"Quantity: {value}"` |
|
|
1194
|
+
| style | `ViewStyle` | — | Outer container style |
|
|
1195
|
+
|
|
1196
|
+
**Styling:** Row layout with two square buttons flanking a centered value label. Buttons use `RADIUS.md` (14pt), `borderWidth: 1.5`, `surface` background with `border` outline. Value text: `Sohne-Medium`, centered, `foreground` color.
|
|
1197
|
+
|
|
1198
|
+
**Button states:** The decrement button disables (opacity 0.35, non-pressable) when `value ≤ min`. The increment button disables when `value ≥ max`. Both disable when the `disabled` prop is `true`.
|
|
1199
|
+
|
|
1200
|
+
**Haptics:** `impactLight` on each press.
|
|
1201
|
+
|
|
1202
|
+
**Accessibility:** Each button has a descriptive label (`"Decrease, current value X"` / `"Increase, current value X"`). The value text has `accessibilityRole="text"`. Disabled state passed to `accessibilityState`.
|
|
1203
|
+
|
|
1204
|
+
**Animation:** `PressableButton` (scale 0.95) on each button — matches the Button/IconButton press feel.
|
|
1205
|
+
|
|
1206
|
+
**Examples:**
|
|
1207
|
+
```tsx
|
|
1208
|
+
// Basic quantity stepper
|
|
1209
|
+
const [qty, setQty] = useState(1)
|
|
1210
|
+
<NumberStepper value={qty} onValueChange={setQty} />
|
|
1211
|
+
|
|
1212
|
+
// Custom range and step
|
|
1213
|
+
const [rating, setRating] = useState(3)
|
|
1214
|
+
<NumberStepper value={rating} onValueChange={setRating} min={0} max={5} step={0.5} />
|
|
1215
|
+
|
|
1216
|
+
// Large size for prominent use
|
|
1217
|
+
const [guests, setGuests] = useState(2)
|
|
1218
|
+
<NumberStepper value={guests} onValueChange={setGuests} min={1} max={16} size="lg" />
|
|
1219
|
+
|
|
1220
|
+
// Disabled during async operation
|
|
1221
|
+
<NumberStepper
|
|
1222
|
+
value={qty}
|
|
1223
|
+
onValueChange={setQty}
|
|
1224
|
+
disabled={isUpdating}
|
|
1225
|
+
/>
|
|
1226
|
+
```
|
|
1227
|
+
|
|
1228
|
+
**Composition — cart item row:**
|
|
1229
|
+
```tsx
|
|
1230
|
+
<View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }}>
|
|
1231
|
+
<View>
|
|
1232
|
+
<Text variant="body-md">Margherita Pizza</Text>
|
|
1233
|
+
<Text variant="caption-sm" color={colors.foregroundMuted}>$12.000</Text>
|
|
1234
|
+
</View>
|
|
1235
|
+
<NumberStepper value={quantity} onValueChange={setQuantity} />
|
|
1236
|
+
</View>
|
|
1237
|
+
```
|
|
1238
|
+
|
|
1239
|
+
---
|
|
1240
|
+
|
|
1178
1241
|
### CurrencyDisplay
|
|
1179
1242
|
|
|
1180
1243
|
**Import:** `import { CurrencyDisplay } from '@retray-dev/ui-kit'`
|
|
@@ -3077,7 +3140,7 @@ dismiss(id)
|
|
|
3077
3140
|
|
|
3078
3141
|
**Import:** `import { Chip, ChipGroup } from '@retray-dev/ui-kit'`
|
|
3079
3142
|
|
|
3080
|
-
**When to use:** Inline filter options, quick selections, multi-select toggles. Use `Chip` for standalone custom logic; use `ChipGroup` for managed selection (single or multi).
|
|
3143
|
+
**When to use:** Inline filter options, quick selections, multi-select toggles. Use `Chip` for standalone custom logic; use `ChipGroup` for managed selection (single or multi). **ChipGroup vs CategoryStrip:** ChipGroup wraps to multiple rows and supports disabled items — best for filter tags, feature toggles, and tray-style selections. CategoryStrip scrolls horizontally and supports badge counts — best for top-of-screen category browsers.
|
|
3081
3144
|
|
|
3082
3145
|
**`Chip` Props:**
|
|
3083
3146
|
|
|
@@ -3149,7 +3212,7 @@ const [categories, setCategories] = useState<number[]>([1, 3])
|
|
|
3149
3212
|
|
|
3150
3213
|
**Import:** `import { CategoryStrip } from '@retray-dev/ui-kit'`
|
|
3151
3214
|
|
|
3152
|
-
**When to use:** Horizontal scrollable filter/category bar at the top of browse screens — marketplace categories, content type filters, location tabs. Airbnb-style pill chips that scroll horizontally.
|
|
3215
|
+
**When to use:** Horizontal scrollable filter/category bar at the top of browse screens — marketplace categories, content type filters, location tabs. Airbnb-style pill chips that scroll horizontally. **CategoryStrip vs ChipGroup:** CategoryStrip scrolls horizontally and supports badge counts — best for top-of-screen category browsers. ChipGroup wraps to multiple rows and supports disabled items — best for filter tags and tray-style selections.
|
|
3153
3216
|
|
|
3154
3217
|
| Prop | Type | Default | Notes |
|
|
3155
3218
|
|------|------|---------|-------|
|
|
@@ -3274,7 +3337,7 @@ const [categories, setCategories] = useState<number[]>([1, 3])
|
|
|
3274
3337
|
| Prop | Type | Default | Notes |
|
|
3275
3338
|
|------|------|---------|-------|
|
|
3276
3339
|
| label | `string \| ReactNode` | required | Left side. Strings auto-styled in `foregroundMuted` caption |
|
|
3277
|
-
| value | `string` | required | Right side value
|
|
3340
|
+
| value | `string \| number \| ReactNode` | required | Right side value. Strings and numbers auto-styled in `Sohne-SemiBold`; pass `ReactNode` for custom content |
|
|
3278
3341
|
| separator | `'dotted' \| 'solid' \| 'dashed' \| 'none'` | `'dotted'` | Fill line between label and value |
|
|
3279
3342
|
| labelWeight | `'normal' \| 'medium' \| 'semibold' \| 'bold'` | `'normal'` | Font weight of label text |
|
|
3280
3343
|
| valueColor | `string` | — | Override value text color (hex or theme token value) |
|
|
@@ -3920,6 +3983,7 @@ import { HolographicCard, FOIL_PRESETS } from '@retray-dev/ui-kit/HolographicCar
|
|
|
3920
3983
|
| onChange | `(uri: string \| null) => void` | — | Called with selected URI after picker completes |
|
|
3921
3984
|
| loading | `boolean` | `false` | Show spinner overlay (e.g. while uploading to server) |
|
|
3922
3985
|
| placeholder | `string` | `'Tap to add image'` | Text shown when no image selected |
|
|
3986
|
+
| showPlaceholderText | `boolean` | `true` | Whether to show the placeholder text. Use `false` for compact/avatar variants |
|
|
3923
3987
|
| width | `number` | — | Width of the upload area. Defaults to full width |
|
|
3924
3988
|
| height | `number` | `200` | Height of the upload area |
|
|
3925
3989
|
| borderRadius | `number` | `RADIUS.lg` | — |
|
|
@@ -3949,16 +4013,68 @@ const handleChange = async (uri: string | null) => {
|
|
|
3949
4013
|
height={200}
|
|
3950
4014
|
/>
|
|
3951
4015
|
|
|
3952
|
-
// Avatar upload (square)
|
|
4016
|
+
// Avatar upload (square, no text)
|
|
3953
4017
|
<ImageUpload
|
|
3954
4018
|
value={avatarUri}
|
|
3955
4019
|
onChange={setAvatarUri}
|
|
3956
4020
|
width={100}
|
|
3957
4021
|
height={100}
|
|
3958
4022
|
borderRadius={50}
|
|
4023
|
+
showPlaceholderText={false}
|
|
4024
|
+
/>
|
|
4025
|
+
```
|
|
4026
|
+
|
|
4027
|
+
---
|
|
4028
|
+
|
|
4029
|
+
### IconPicker
|
|
4030
|
+
|
|
4031
|
+
**Import:** `import { IconPicker } from '@retray-dev/ui-kit'`
|
|
4032
|
+
|
|
4033
|
+
**When to use:** Selecting an icon from a curated catalog of ~320 icons (across all 6 `@expo/vector-icons` families) organized by 12 categories. The trigger is a simple tappable square showing the selected icon (or a + placeholder). Tapping opens a bottom sheet with category chips (icon + label) and a scrollable grid. No search, no text clutter — purely visual selection.
|
|
4034
|
+
|
|
4035
|
+
**Requires:** `@gorhom/bottom-sheet` (already a peer dependency of the UI kit).
|
|
4036
|
+
|
|
4037
|
+
| Prop | Type | Default | Notes |
|
|
4038
|
+
|------|------|---------|-------|
|
|
4039
|
+
| value | `string \| null` | — | Currently selected icon name |
|
|
4040
|
+
| onChange | `(iconName: string) => void` | — | Called when an icon is selected |
|
|
4041
|
+
| label | `string` | — | Optional label above the trigger |
|
|
4042
|
+
| error | `string` | — | Error message (red border + helper text) |
|
|
4043
|
+
| hint | `string` | — | Hint text below trigger |
|
|
4044
|
+
| disabled | `boolean` | `false` | Prevents opening |
|
|
4045
|
+
| numColumns | `number` | `6` | Icons per row in the sheet grid |
|
|
4046
|
+
| gap | `number` | `6` | Gap between cells (dp) |
|
|
4047
|
+
| style | `ViewStyle` | — | — |
|
|
4048
|
+
|
|
4049
|
+
**Examples:**
|
|
4050
|
+
```tsx
|
|
4051
|
+
const [icon, setIcon] = useState<string | null>(null)
|
|
4052
|
+
|
|
4053
|
+
// Basic usage
|
|
4054
|
+
<IconPicker
|
|
4055
|
+
label="Icon"
|
|
4056
|
+
value={icon}
|
|
4057
|
+
onChange={setIcon}
|
|
4058
|
+
/>
|
|
4059
|
+
|
|
4060
|
+
// With validation error
|
|
4061
|
+
<IconPicker
|
|
4062
|
+
label="Icon"
|
|
4063
|
+
value={icon}
|
|
4064
|
+
onChange={setIcon}
|
|
4065
|
+
error={!icon ? 'Please select an icon' : undefined}
|
|
3959
4066
|
/>
|
|
3960
4067
|
```
|
|
3961
4068
|
|
|
4069
|
+
**Notes:**
|
|
4070
|
+
- Uses a static curated list of ~320 icons in 12 categories (food, sports, business, objects, status, actions, communication, navigation, media, layout, nature, brands) — instant load, no runtime glyphMap scanning.
|
|
4071
|
+
- Category chips use representative icons (coffee, activity, briefcase, folder, alert-circle, edit-3, message-circle, compass, image, grid, sun, globe) with Spanish labels and a "Todos" (All) chip.
|
|
4072
|
+
- Grid cells show only icons — clean, fast visual scanning. Cell size adapts to container width.
|
|
4073
|
+
- Sheet uses `enableDynamicSizing` with `maxDynamicContentSize` (70% screen height) — height auto-fits content up to that cap.
|
|
4074
|
+
- Category strip is a horizontal `ScrollView` of pill-shaped chips. The grid is rendered in rows inside a `BottomSheetScrollView`.
|
|
4075
|
+
- Selection closes the sheet immediately and resets category to "Todos".
|
|
4076
|
+
- Haptics: medium impact on open, selection on icon tap.
|
|
4077
|
+
|
|
3962
4078
|
---
|
|
3963
4079
|
|
|
3964
4080
|
### useConfirmDialog
|
|
@@ -4063,6 +4179,21 @@ import { renderIcon } from '@retray-dev/ui-kit'
|
|
|
4063
4179
|
const icon = renderIcon('check', 18, colors.primary)
|
|
4064
4180
|
```
|
|
4065
4181
|
|
|
4182
|
+
### `getValidIconNames` utility
|
|
4183
|
+
|
|
4184
|
+
```tsx
|
|
4185
|
+
import { getValidIconNames } from '@retray-dev/ui-kit'
|
|
4186
|
+
|
|
4187
|
+
// All icon names across all configured families
|
|
4188
|
+
const allIcons: string[] = getValidIconNames()
|
|
4189
|
+
// => ["home", "user", "heart", "star", ...]
|
|
4190
|
+
|
|
4191
|
+
// Scoped to specific families (does not mutate global config)
|
|
4192
|
+
const featherOnly: string[] = getValidIconNames(['Feather'])
|
|
4193
|
+
```
|
|
4194
|
+
|
|
4195
|
+
Returns `string[]` — all resolvable icon names from the configured families. Respects `configureIconFamilies()` global config. The optional `families` parameter builds a temporary cache scoped to those families without mutating global state. Use to build icon pickers, search, and galleries.
|
|
4196
|
+
|
|
4066
4197
|
### `iconName` props on components
|
|
4067
4198
|
|
|
4068
4199
|
All components with icon slots accept `iconName` — auto-resolved size and color:
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A personal React Native / Expo UI component library with a built-in design system, dark mode support, haptic feedback, and smooth animations.
|
|
4
4
|
|
|
5
|
-
-
|
|
5
|
+
- 53 components across 9 categories (plus the deep-import `HolographicCard`)
|
|
6
6
|
- Light/dark theme with 12 public tokens (25 resolved) and full customization
|
|
7
7
|
- Apple HIG–compliant touch targets and haptic feedback
|
|
8
8
|
- Animated interactions: spring press, sliding tabs, accordion easing, animated progress
|
|
@@ -23,14 +23,14 @@ pnpm add @retray-dev/ui-kit
|
|
|
23
23
|
Install these in your app if not already present:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
pnpm add expo-font expo-haptics expo-linear-gradient react-native-safe-area-context @gorhom/bottom-sheet react-native-reanimated react-native-gesture-handler react-native-worklets @react-native-picker/picker @react-native-community/slider @expo/vector-icons react-native-size-matters react-native-svg react-native-screens sonner-native pressto react-native-ease
|
|
26
|
+
pnpm add expo-font expo-haptics expo-linear-gradient react-native-safe-area-context @gorhom/bottom-sheet react-native-reanimated react-native-gesture-handler react-native-worklets @react-native-picker/picker @react-native-community/slider @expo/vector-icons react-native-size-matters react-native-svg react-native-screens sonner-native pressto react-native-ease expo-image-picker
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
For Expo projects, run `npx expo install` instead to get SDK-compatible versions.
|
|
30
30
|
|
|
31
31
|
`pressto` is **required** — it powers the press animations on every interactive component. Omitting it crashes the import. `sonner-native` is **required** for `Toast`.
|
|
32
32
|
|
|
33
|
-
**Optional:** for richer haptics in a custom dev build (not Expo Go), also `pnpm add react-native-pulsar`. The kit falls back to `expo-haptics` automatically when it is absent. For the deep-import `HolographicCard`, add `@shopify/react-native-skia expo-sensors`.
|
|
33
|
+
**Optional:** for richer haptics in a custom dev build (not Expo Go), also `pnpm add react-native-pulsar`. The kit falls back to `expo-haptics` automatically when it is absent. For `ImageUpload`, add `expo-image-picker`. For the deep-import `HolographicCard`, add `@shopify/react-native-skia expo-sensors`.
|
|
34
34
|
|
|
35
35
|
Add the Worklets Babel plugin to `babel.config.js` (required by `@gorhom/bottom-sheet`):
|
|
36
36
|
|
|
@@ -183,7 +183,7 @@ import { SPACING, ICON_SIZES, RADIUS, SHADOWS, BREAKPOINTS, TYPOGRAPHY } from '@
|
|
|
183
183
|
| ----------- | ----------------------------------------------------------------------------------------------- |
|
|
184
184
|
| Display | `Text`, `Badge`, `Avatar`, `Separator`, `Spinner`, `Skeleton`, `Progress`, `CurrencyDisplay` |
|
|
185
185
|
| Surfaces | `Card`, `AlertBanner`, `EmptyState`, `MediaCard`, `PricingCard` |
|
|
186
|
-
| Form | `Form` (+ `Form.Field` / `Form.Section` / `Form.Footer`), `Button`, `ButtonGroup`, `IconButton`, `Input`, `CurrencyInput`, `Textarea`, `Checkbox`, `Switch`, `Toggle`, `RadioGroup`, `Select`, `Slider`, `SelectableGrid`, `SheetSelect`, `ImageUpload` |
|
|
186
|
+
| Form | `Form` (+ `Form.Field` / `Form.Section` / `Form.Footer`), `Button`, `ButtonGroup`, `IconButton`, `Input`, `CurrencyInput`, `Textarea`, `Checkbox`, `Switch`, `Toggle`, `RadioGroup`, `Select`, `Slider`, `SelectableGrid`, `SheetSelect`, `ImageUpload`, `IconPicker`, `NumberStepper` |
|
|
187
187
|
| Composition | `Tabs`, `Accordion` |
|
|
188
188
|
| Navigation | `AppHeader`, `TabBar`, `PagerDots` |
|
|
189
189
|
| Overlays | `Sheet`, `ConfirmDialog`, `ImageViewer` |
|
package/dist/Accordion.js
CHANGED
|
@@ -217,7 +217,7 @@ var ALL_FAMILIES = [
|
|
|
217
217
|
];
|
|
218
218
|
var activeFamilies = ALL_FAMILIES;
|
|
219
219
|
var resolvedCache = null;
|
|
220
|
-
function buildCache() {
|
|
220
|
+
function buildCache(families) {
|
|
221
221
|
const cache = /* @__PURE__ */ new Map();
|
|
222
222
|
for (const family of activeFamilies) {
|
|
223
223
|
const glyphMap = family.getGlyphMap();
|
package/dist/Accordion.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { Accordion } from './chunk-
|
|
1
|
+
export { Accordion } from './chunk-YJ7I257J.mjs';
|
|
2
2
|
import './chunk-EJ7ZPXOH.mjs';
|
|
3
3
|
import './chunk-DVK4G2GT.mjs';
|
|
4
|
-
import './chunk-
|
|
4
|
+
import './chunk-KA7LTET3.mjs';
|
|
5
5
|
import './chunk-SOYNZDVY.mjs';
|
|
6
6
|
import './chunk-2CE3TQVY.mjs';
|
|
7
7
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/AlertBanner.js
CHANGED
|
@@ -156,7 +156,7 @@ var ALL_FAMILIES = [
|
|
|
156
156
|
];
|
|
157
157
|
var activeFamilies = ALL_FAMILIES;
|
|
158
158
|
var resolvedCache = null;
|
|
159
|
-
function buildCache() {
|
|
159
|
+
function buildCache(families) {
|
|
160
160
|
const cache = /* @__PURE__ */ new Map();
|
|
161
161
|
for (const family of activeFamilies) {
|
|
162
162
|
const glyphMap = family.getGlyphMap();
|
package/dist/AlertBanner.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { AlertBanner } from './chunk-
|
|
1
|
+
export { AlertBanner } from './chunk-BEMIQXXU.mjs';
|
|
2
2
|
import './chunk-QY3X2UYR.mjs';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-KA7LTET3.mjs';
|
|
4
4
|
import './chunk-SOYNZDVY.mjs';
|
|
5
5
|
import './chunk-2CE3TQVY.mjs';
|
|
6
6
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/AppHeader.js
CHANGED
|
@@ -218,7 +218,7 @@ var ALL_FAMILIES = [
|
|
|
218
218
|
];
|
|
219
219
|
var activeFamilies = ALL_FAMILIES;
|
|
220
220
|
var resolvedCache = null;
|
|
221
|
-
function buildCache() {
|
|
221
|
+
function buildCache(families) {
|
|
222
222
|
const cache = /* @__PURE__ */ new Map();
|
|
223
223
|
for (const family of activeFamilies) {
|
|
224
224
|
const glyphMap = family.getGlyphMap();
|
package/dist/AppHeader.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { AppHeader } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { AppHeader } from './chunk-TBNZHU6C.mjs';
|
|
2
|
+
import './chunk-T2KCAHOS.mjs';
|
|
3
3
|
import './chunk-3DKJ2GIC.mjs';
|
|
4
4
|
import './chunk-EJ7ZPXOH.mjs';
|
|
5
5
|
import './chunk-DVK4G2GT.mjs';
|
|
6
6
|
import './chunk-QY3X2UYR.mjs';
|
|
7
|
-
import './chunk-
|
|
7
|
+
import './chunk-KA7LTET3.mjs';
|
|
8
8
|
import './chunk-SOYNZDVY.mjs';
|
|
9
9
|
import './chunk-2CE3TQVY.mjs';
|
|
10
10
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/Badge.js
CHANGED
|
@@ -155,7 +155,7 @@ var ALL_FAMILIES = [
|
|
|
155
155
|
];
|
|
156
156
|
var activeFamilies = ALL_FAMILIES;
|
|
157
157
|
var resolvedCache = null;
|
|
158
|
-
function buildCache() {
|
|
158
|
+
function buildCache(families) {
|
|
159
159
|
const cache = /* @__PURE__ */ new Map();
|
|
160
160
|
for (const family of activeFamilies) {
|
|
161
161
|
const glyphMap = family.getGlyphMap();
|
package/dist/Badge.mjs
CHANGED
package/dist/Button.js
CHANGED
|
@@ -217,7 +217,7 @@ var ALL_FAMILIES = [
|
|
|
217
217
|
];
|
|
218
218
|
var activeFamilies = ALL_FAMILIES;
|
|
219
219
|
var resolvedCache = null;
|
|
220
|
-
function buildCache() {
|
|
220
|
+
function buildCache(families) {
|
|
221
221
|
const cache = /* @__PURE__ */ new Map();
|
|
222
222
|
for (const family of activeFamilies) {
|
|
223
223
|
const glyphMap = family.getGlyphMap();
|
package/dist/Button.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { Button } from './chunk-
|
|
1
|
+
export { Button } from './chunk-HTHGSXFG.mjs';
|
|
2
2
|
import './chunk-3DKJ2GIC.mjs';
|
|
3
3
|
import './chunk-EJ7ZPXOH.mjs';
|
|
4
4
|
import './chunk-DVK4G2GT.mjs';
|
|
5
5
|
import './chunk-QY3X2UYR.mjs';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-KA7LTET3.mjs';
|
|
7
7
|
import './chunk-SOYNZDVY.mjs';
|
|
8
8
|
import './chunk-2CE3TQVY.mjs';
|
|
9
9
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/CategoryStrip.js
CHANGED
|
@@ -217,7 +217,7 @@ var ALL_FAMILIES = [
|
|
|
217
217
|
];
|
|
218
218
|
var activeFamilies = ALL_FAMILIES;
|
|
219
219
|
var resolvedCache = null;
|
|
220
|
-
function buildCache() {
|
|
220
|
+
function buildCache(families) {
|
|
221
221
|
const cache = /* @__PURE__ */ new Map();
|
|
222
222
|
for (const family of activeFamilies) {
|
|
223
223
|
const glyphMap = family.getGlyphMap();
|
package/dist/CategoryStrip.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { CategoryStrip } from './chunk-
|
|
1
|
+
export { CategoryStrip } from './chunk-6L4G6PBT.mjs';
|
|
2
2
|
import './chunk-YNROWHQJ.mjs';
|
|
3
3
|
import './chunk-EJ7ZPXOH.mjs';
|
|
4
4
|
import './chunk-DVK4G2GT.mjs';
|
|
5
5
|
import './chunk-QY3X2UYR.mjs';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-KA7LTET3.mjs';
|
|
7
7
|
import './chunk-SOYNZDVY.mjs';
|
|
8
8
|
import './chunk-2CE3TQVY.mjs';
|
|
9
9
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/Chip.js
CHANGED
|
@@ -218,7 +218,7 @@ var ALL_FAMILIES = [
|
|
|
218
218
|
];
|
|
219
219
|
var activeFamilies = ALL_FAMILIES;
|
|
220
220
|
var resolvedCache = null;
|
|
221
|
-
function buildCache() {
|
|
221
|
+
function buildCache(families) {
|
|
222
222
|
const cache = /* @__PURE__ */ new Map();
|
|
223
223
|
for (const family of activeFamilies) {
|
|
224
224
|
const glyphMap = family.getGlyphMap();
|
package/dist/Chip.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { Chip, ChipGroup } from './chunk-
|
|
1
|
+
export { Chip, ChipGroup } from './chunk-DYT7BG5I.mjs';
|
|
2
2
|
import './chunk-3DKJ2GIC.mjs';
|
|
3
3
|
import './chunk-EJ7ZPXOH.mjs';
|
|
4
4
|
import './chunk-DVK4G2GT.mjs';
|
|
5
|
-
import './chunk-
|
|
5
|
+
import './chunk-KA7LTET3.mjs';
|
|
6
6
|
import './chunk-SOYNZDVY.mjs';
|
|
7
7
|
import './chunk-2CE3TQVY.mjs';
|
|
8
8
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/ConfirmDialog.js
CHANGED
|
@@ -240,7 +240,7 @@ var ALL_FAMILIES = [
|
|
|
240
240
|
];
|
|
241
241
|
var activeFamilies = ALL_FAMILIES;
|
|
242
242
|
var resolvedCache = null;
|
|
243
|
-
function buildCache() {
|
|
243
|
+
function buildCache(families) {
|
|
244
244
|
const cache = /* @__PURE__ */ new Map();
|
|
245
245
|
for (const family of activeFamilies) {
|
|
246
246
|
const glyphMap = family.getGlyphMap();
|
package/dist/ConfirmDialog.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { ConfirmDialog } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { ConfirmDialog } from './chunk-WYEUNUTP.mjs';
|
|
2
|
+
import './chunk-HTHGSXFG.mjs';
|
|
3
3
|
import './chunk-3DKJ2GIC.mjs';
|
|
4
4
|
import './chunk-EJ7ZPXOH.mjs';
|
|
5
5
|
import './chunk-DVK4G2GT.mjs';
|
|
6
6
|
import './chunk-QY3X2UYR.mjs';
|
|
7
|
-
import './chunk-
|
|
7
|
+
import './chunk-KA7LTET3.mjs';
|
|
8
8
|
import './chunk-SOYNZDVY.mjs';
|
|
9
9
|
import './chunk-2CE3TQVY.mjs';
|
|
10
10
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/CurrencyInput.js
CHANGED
|
@@ -159,7 +159,7 @@ var ALL_FAMILIES = [
|
|
|
159
159
|
];
|
|
160
160
|
var activeFamilies = ALL_FAMILIES;
|
|
161
161
|
var resolvedCache = null;
|
|
162
|
-
function buildCache() {
|
|
162
|
+
function buildCache(families) {
|
|
163
163
|
const cache = /* @__PURE__ */ new Map();
|
|
164
164
|
for (const family of activeFamilies) {
|
|
165
165
|
const glyphMap = family.getGlyphMap();
|
package/dist/CurrencyInput.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { CurrencyInput } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { CurrencyInput } from './chunk-NMU5FMQJ.mjs';
|
|
2
|
+
import './chunk-SXLKNTA4.mjs';
|
|
3
3
|
import './chunk-DVK4G2GT.mjs';
|
|
4
|
-
import './chunk-
|
|
4
|
+
import './chunk-KA7LTET3.mjs';
|
|
5
5
|
import './chunk-SOYNZDVY.mjs';
|
|
6
6
|
import './chunk-2CE3TQVY.mjs';
|
|
7
7
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/DetailRow.d.mts
CHANGED
|
@@ -5,7 +5,7 @@ type DetailRowSeparator = 'dotted' | 'solid' | 'dashed' | 'none';
|
|
|
5
5
|
type DetailRowLabelWeight = 'normal' | 'medium' | 'semibold' | 'bold';
|
|
6
6
|
interface DetailRowProps {
|
|
7
7
|
label: React.ReactNode;
|
|
8
|
-
value: string | React.ReactNode;
|
|
8
|
+
value: string | number | React.ReactNode;
|
|
9
9
|
/** Dotted/dashed/solid line between label and value. Defaults to 'dotted'. */
|
|
10
10
|
separator?: DetailRowSeparator;
|
|
11
11
|
labelWeight?: DetailRowLabelWeight;
|
package/dist/DetailRow.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ type DetailRowSeparator = 'dotted' | 'solid' | 'dashed' | 'none';
|
|
|
5
5
|
type DetailRowLabelWeight = 'normal' | 'medium' | 'semibold' | 'bold';
|
|
6
6
|
interface DetailRowProps {
|
|
7
7
|
label: React.ReactNode;
|
|
8
|
-
value: string | React.ReactNode;
|
|
8
|
+
value: string | number | React.ReactNode;
|
|
9
9
|
/** Dotted/dashed/solid line between label and value. Defaults to 'dotted'. */
|
|
10
10
|
separator?: DetailRowSeparator;
|
|
11
11
|
labelWeight?: DetailRowLabelWeight;
|
package/dist/DetailRow.js
CHANGED
|
@@ -155,7 +155,7 @@ var ALL_FAMILIES = [
|
|
|
155
155
|
];
|
|
156
156
|
var activeFamilies = ALL_FAMILIES;
|
|
157
157
|
var resolvedCache = null;
|
|
158
|
-
function buildCache() {
|
|
158
|
+
function buildCache(families) {
|
|
159
159
|
const cache = /* @__PURE__ */ new Map();
|
|
160
160
|
for (const family of activeFamilies) {
|
|
161
161
|
const glyphMap = family.getGlyphMap();
|
package/dist/DetailRow.mjs
CHANGED
package/dist/EmptyState.js
CHANGED
|
@@ -163,7 +163,7 @@ var ALL_FAMILIES = [
|
|
|
163
163
|
];
|
|
164
164
|
var activeFamilies = ALL_FAMILIES;
|
|
165
165
|
var resolvedCache = null;
|
|
166
|
-
function buildCache() {
|
|
166
|
+
function buildCache(families) {
|
|
167
167
|
const cache = /* @__PURE__ */ new Map();
|
|
168
168
|
for (const family of activeFamilies) {
|
|
169
169
|
const glyphMap = family.getGlyphMap();
|
package/dist/EmptyState.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { EmptyState } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { EmptyState } from './chunk-6SECQ2ZF.mjs';
|
|
2
|
+
import './chunk-HTHGSXFG.mjs';
|
|
3
3
|
import './chunk-3DKJ2GIC.mjs';
|
|
4
4
|
import './chunk-EJ7ZPXOH.mjs';
|
|
5
5
|
import './chunk-DVK4G2GT.mjs';
|
|
6
6
|
import './chunk-QY3X2UYR.mjs';
|
|
7
|
-
import './chunk-
|
|
7
|
+
import './chunk-KA7LTET3.mjs';
|
|
8
8
|
import './chunk-SOYNZDVY.mjs';
|
|
9
9
|
import './chunk-2CE3TQVY.mjs';
|
|
10
10
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/ErrorBoundary.js
CHANGED
|
@@ -156,7 +156,7 @@ var ALL_FAMILIES = [
|
|
|
156
156
|
];
|
|
157
157
|
var activeFamilies = ALL_FAMILIES;
|
|
158
158
|
var resolvedCache = null;
|
|
159
|
-
function buildCache() {
|
|
159
|
+
function buildCache(families) {
|
|
160
160
|
const cache = /* @__PURE__ */ new Map();
|
|
161
161
|
for (const family of activeFamilies) {
|
|
162
162
|
const glyphMap = family.getGlyphMap();
|
package/dist/ErrorBoundary.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { ErrorBoundary } from './chunk-
|
|
1
|
+
export { ErrorBoundary } from './chunk-RYZC432S.mjs';
|
|
2
2
|
import './chunk-EJ7ZPXOH.mjs';
|
|
3
3
|
import './chunk-QY3X2UYR.mjs';
|
|
4
|
-
import './chunk-
|
|
4
|
+
import './chunk-KA7LTET3.mjs';
|
|
5
5
|
import './chunk-SOYNZDVY.mjs';
|
|
6
6
|
import './chunk-2CE3TQVY.mjs';
|
|
7
7
|
import './chunk-Y6FXYEAI.mjs';
|
package/dist/IconButton.js
CHANGED
|
@@ -215,7 +215,7 @@ var ALL_FAMILIES = [
|
|
|
215
215
|
];
|
|
216
216
|
var activeFamilies = ALL_FAMILIES;
|
|
217
217
|
var resolvedCache = null;
|
|
218
|
-
function buildCache() {
|
|
218
|
+
function buildCache(families) {
|
|
219
219
|
const cache = /* @__PURE__ */ new Map();
|
|
220
220
|
for (const family of activeFamilies) {
|
|
221
221
|
const glyphMap = family.getGlyphMap();
|
package/dist/IconButton.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { IconButton } from './chunk-
|
|
1
|
+
export { IconButton } from './chunk-T2KCAHOS.mjs';
|
|
2
2
|
import './chunk-3DKJ2GIC.mjs';
|
|
3
3
|
import './chunk-EJ7ZPXOH.mjs';
|
|
4
4
|
import './chunk-DVK4G2GT.mjs';
|
|
5
|
-
import './chunk-
|
|
5
|
+
import './chunk-KA7LTET3.mjs';
|
|
6
6
|
import './chunk-SOYNZDVY.mjs';
|
|
7
7
|
import './chunk-2CE3TQVY.mjs';
|
|
8
8
|
import './chunk-Y6FXYEAI.mjs';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ViewStyle } from 'react-native';
|
|
3
|
+
|
|
4
|
+
interface IconPickerProps {
|
|
5
|
+
value: string | null;
|
|
6
|
+
onChange: (iconName: string) => void;
|
|
7
|
+
label?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
hint?: string;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
numColumns?: number;
|
|
12
|
+
gap?: number;
|
|
13
|
+
style?: ViewStyle;
|
|
14
|
+
}
|
|
15
|
+
declare function IconPicker({ value, onChange, label, error, hint, disabled, numColumns, gap, style, }: IconPickerProps): React.JSX.Element;
|
|
16
|
+
|
|
17
|
+
export { IconPicker, type IconPickerProps };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ViewStyle } from 'react-native';
|
|
3
|
+
|
|
4
|
+
interface IconPickerProps {
|
|
5
|
+
value: string | null;
|
|
6
|
+
onChange: (iconName: string) => void;
|
|
7
|
+
label?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
hint?: string;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
numColumns?: number;
|
|
12
|
+
gap?: number;
|
|
13
|
+
style?: ViewStyle;
|
|
14
|
+
}
|
|
15
|
+
declare function IconPicker({ value, onChange, label, error, hint, disabled, numColumns, gap, style, }: IconPickerProps): React.JSX.Element;
|
|
16
|
+
|
|
17
|
+
export { IconPicker, type IconPickerProps };
|