@retray-dev/ui-kit 10.1.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/COMPONENTS.md +419 -38
  2. package/README.md +14 -5
  3. package/dist/Accordion.js +1 -1
  4. package/dist/Accordion.mjs +3 -3
  5. package/dist/AlertBanner.js +1 -1
  6. package/dist/AlertBanner.mjs +3 -3
  7. package/dist/AppHeader.js +1 -1
  8. package/dist/AppHeader.mjs +4 -4
  9. package/dist/Avatar.mjs +2 -2
  10. package/dist/Badge.js +1 -1
  11. package/dist/Badge.mjs +3 -3
  12. package/dist/Button.js +1 -1
  13. package/dist/Button.mjs +3 -3
  14. package/dist/Card.mjs +2 -2
  15. package/dist/CategoryStrip.js +1 -1
  16. package/dist/CategoryStrip.mjs +3 -3
  17. package/dist/Checkbox.mjs +2 -2
  18. package/dist/Chip.js +1 -1
  19. package/dist/Chip.mjs +3 -3
  20. package/dist/ConfirmDialog.d.mts +1 -6
  21. package/dist/ConfirmDialog.d.ts +1 -6
  22. package/dist/ConfirmDialog.js +30 -24
  23. package/dist/ConfirmDialog.mjs +4 -4
  24. package/dist/CurrencyDisplay.mjs +2 -2
  25. package/dist/CurrencyInput.d.mts +3 -8
  26. package/dist/CurrencyInput.d.ts +3 -8
  27. package/dist/CurrencyInput.js +4 -2
  28. package/dist/CurrencyInput.mjs +4 -4
  29. package/dist/DetailRow.d.mts +1 -1
  30. package/dist/DetailRow.d.ts +1 -1
  31. package/dist/DetailRow.js +1 -1
  32. package/dist/DetailRow.mjs +3 -3
  33. package/dist/EmptyState.js +1 -1
  34. package/dist/EmptyState.mjs +4 -4
  35. package/dist/ErrorBoundary.js +1 -1
  36. package/dist/ErrorBoundary.mjs +3 -3
  37. package/dist/Form.mjs +2 -2
  38. package/dist/IconButton.js +1 -1
  39. package/dist/IconButton.mjs +3 -3
  40. package/dist/IconPicker.d.mts +17 -0
  41. package/dist/IconPicker.d.ts +17 -0
  42. package/dist/IconPicker.js +1424 -0
  43. package/dist/IconPicker.mjs +8 -0
  44. package/dist/ImageUpload.d.mts +3 -1
  45. package/dist/ImageUpload.d.ts +3 -1
  46. package/dist/ImageUpload.js +28 -10
  47. package/dist/ImageUpload.mjs +3 -3
  48. package/dist/ImageViewer.js +1 -1
  49. package/dist/ImageViewer.mjs +5 -5
  50. package/dist/Input.js +1 -1
  51. package/dist/Input.mjs +3 -3
  52. package/dist/LabelValue.js +1 -1
  53. package/dist/LabelValue.mjs +3 -3
  54. package/dist/ListGroup.mjs +2 -2
  55. package/dist/ListItem.d.mts +7 -7
  56. package/dist/ListItem.d.ts +7 -7
  57. package/dist/ListItem.js +13 -8
  58. package/dist/ListItem.mjs +3 -3
  59. package/dist/MediaCard.js +1 -1
  60. package/dist/MediaCard.mjs +3 -3
  61. package/dist/MenuGroup.mjs +2 -2
  62. package/dist/MenuItem.js +1 -1
  63. package/dist/MenuItem.mjs +3 -3
  64. package/dist/MonthPicker.mjs +2 -2
  65. package/dist/NumberStepper.d.mts +19 -0
  66. package/dist/NumberStepper.d.ts +19 -0
  67. package/dist/NumberStepper.js +410 -0
  68. package/dist/NumberStepper.mjs +9 -0
  69. package/dist/PagerDots.js +1 -1
  70. package/dist/PagerDots.mjs +3 -3
  71. package/dist/Pressable.d.mts +15 -7
  72. package/dist/Pressable.d.ts +15 -7
  73. package/dist/Pressable.js +7 -3
  74. package/dist/Pressable.mjs +1 -1
  75. package/dist/PricingCard.js +1 -1
  76. package/dist/PricingCard.mjs +5 -5
  77. package/dist/Progress.mjs +2 -2
  78. package/dist/RadioGroup.mjs +2 -2
  79. package/dist/RetrayProvider.mjs +3 -3
  80. package/dist/Select.mjs +2 -2
  81. package/dist/SelectableGrid.js +1 -1
  82. package/dist/SelectableGrid.mjs +3 -3
  83. package/dist/Separator.mjs +2 -2
  84. package/dist/Sheet.d.mts +4 -46
  85. package/dist/Sheet.d.ts +4 -46
  86. package/dist/Sheet.js +46 -114
  87. package/dist/Sheet.mjs +2 -3
  88. package/dist/SheetSelect.js +1 -1
  89. package/dist/SheetSelect.mjs +3 -3
  90. package/dist/Skeleton.mjs +2 -2
  91. package/dist/Slider.mjs +2 -2
  92. package/dist/Spinner.mjs +2 -2
  93. package/dist/Stats.d.mts +30 -0
  94. package/dist/Stats.d.ts +30 -0
  95. package/dist/Stats.js +429 -0
  96. package/dist/Stats.mjs +9 -0
  97. package/dist/Switch.mjs +2 -2
  98. package/dist/TabBar.js +1 -1
  99. package/dist/TabBar.mjs +3 -3
  100. package/dist/Tabs.mjs +2 -2
  101. package/dist/Text.d.mts +3 -1
  102. package/dist/Text.d.ts +3 -1
  103. package/dist/Text.js +3 -3
  104. package/dist/Text.mjs +2 -2
  105. package/dist/Textarea.js +1 -1
  106. package/dist/Textarea.mjs +3 -3
  107. package/dist/Toast.mjs +2 -2
  108. package/dist/Toggle.js +1 -1
  109. package/dist/Toggle.mjs +3 -3
  110. package/dist/{chunk-DJ7RN37L.mjs → chunk-265G6A46.mjs} +2 -2
  111. package/dist/{chunk-WOEYDUJZ.mjs → chunk-2A2LEFZG.mjs} +2 -2
  112. package/dist/{chunk-ID72TK46.mjs → chunk-2CBQKU7H.mjs} +1 -1
  113. package/dist/{chunk-OB4JUQ3O.mjs → chunk-2I2AYECM.mjs} +1 -1
  114. package/dist/{chunk-WJLKJMKR.mjs → chunk-357YO24D.mjs} +4 -4
  115. package/dist/{chunk-GQYFLP3D.mjs → chunk-3GEYJ7I5.mjs} +1 -1
  116. package/dist/{chunk-AV4EMIRH.mjs → chunk-3N2M3WZL.mjs} +1 -1
  117. package/dist/{chunk-TERDKCLE.mjs → chunk-3UYAZ7I4.mjs} +2 -2
  118. package/dist/{chunk-JMOZEC77.mjs → chunk-4WFMPFZB.mjs} +1 -1
  119. package/dist/chunk-5OLNXP3S.mjs +144 -0
  120. package/dist/{chunk-6OAZJ577.mjs → chunk-7HSILTC4.mjs} +3 -3
  121. package/dist/{chunk-IRRY3CRZ.mjs → chunk-AKM4EPOT.mjs} +1 -1
  122. package/dist/{chunk-VGTDN7SW.mjs → chunk-AQEVCEXV.mjs} +2 -2
  123. package/dist/{chunk-WBOOUHSS.mjs → chunk-BCWEHE34.mjs} +1 -1
  124. package/dist/{chunk-AJ7ZDNBT.mjs → chunk-BOVUP27T.mjs} +1 -1
  125. package/dist/{chunk-BRKYVJVV.mjs → chunk-BQZE3HAW.mjs} +1 -1
  126. package/dist/{chunk-MLF3EZFW.mjs → chunk-D3Y2T42P.mjs} +2 -2
  127. package/dist/{chunk-3U4SSNWP.mjs → chunk-DF6DU42P.mjs} +2 -2
  128. package/dist/{chunk-ZJKGQMYH.mjs → chunk-DI7CBDL6.mjs} +2 -2
  129. package/dist/{chunk-2TFTAWVJ.mjs → chunk-DOGIPOF5.mjs} +2 -2
  130. package/dist/{chunk-MBMXYJJV.mjs → chunk-E7NEHHXV.mjs} +7 -3
  131. package/dist/{chunk-MX6HRKMI.mjs → chunk-EFLFRAHD.mjs} +1 -1
  132. package/dist/{chunk-SOYNZDVY.mjs → chunk-EMUWGDWC.mjs} +6 -1
  133. package/dist/{chunk-4I7D47FH.mjs → chunk-F4V6XLP4.mjs} +4 -4
  134. package/dist/{chunk-UREA2GYY.mjs → chunk-FA2KMTH5.mjs} +2 -2
  135. package/dist/{chunk-Y2NS74WS.mjs → chunk-FFTYLPSB.mjs} +46 -98
  136. package/dist/{chunk-OHBNABL5.mjs → chunk-FUVYSVGR.mjs} +14 -9
  137. package/dist/{chunk-KIHCWCWL.mjs → chunk-FVTVCJAH.mjs} +2 -2
  138. package/dist/{chunk-Y4GL2MHX.mjs → chunk-GK4VRMNE.mjs} +30 -12
  139. package/dist/{chunk-6Q64UFIA.mjs → chunk-HJ46DTJE.mjs} +1 -1
  140. package/dist/{chunk-WF2XDFRK.mjs → chunk-HLMPMUK2.mjs} +1 -1
  141. package/dist/{chunk-GD6KXMG5.mjs → chunk-I4V5XZPS.mjs} +1 -1
  142. package/dist/{chunk-AZJF2BLK.mjs → chunk-ISY26JQJ.mjs} +2 -2
  143. package/dist/{chunk-X4G6APW6.mjs → chunk-J6Q2YJEV.mjs} +1 -1
  144. package/dist/{chunk-KZL5VTYK.mjs → chunk-JCZQOY4O.mjs} +31 -24
  145. package/dist/{chunk-CZCQZHG6.mjs → chunk-JNVAIDLK.mjs} +2 -2
  146. package/dist/{chunk-SOA2Z4RB.mjs → chunk-JULSIZDM.mjs} +1 -1
  147. package/dist/{chunk-T7XZ7H7Y.mjs → chunk-KA7LTET3.mjs} +17 -3
  148. package/dist/chunk-KHYX4IOM.mjs +1114 -0
  149. package/dist/{chunk-LXJIIOYQ.mjs → chunk-LRM4AVYY.mjs} +2 -2
  150. package/dist/{chunk-VQ57HWPL.mjs → chunk-MYZ2EDYU.mjs} +2 -2
  151. package/dist/chunk-N4ZPVCJH.mjs +126 -0
  152. package/dist/{chunk-NA7PARID.mjs → chunk-NXI4YDZ2.mjs} +2 -2
  153. package/dist/{chunk-4K625MVM.mjs → chunk-OULVKTWL.mjs} +2 -2
  154. package/dist/{chunk-A4MDAP7G.mjs → chunk-P64WHW4A.mjs} +2 -2
  155. package/dist/{chunk-URI2WBIV.mjs → chunk-P73V2EKS.mjs} +2 -2
  156. package/dist/{chunk-ZUR7AU5R.mjs → chunk-PGERH3P7.mjs} +2 -2
  157. package/dist/{chunk-2UYENBLV.mjs → chunk-QSFV2P7O.mjs} +1 -1
  158. package/dist/{chunk-JT7HKXRB.mjs → chunk-S3KJCPEJ.mjs} +1 -1
  159. package/dist/{chunk-6MKGPAR2.mjs → chunk-V6NFJXKO.mjs} +2 -2
  160. package/dist/{chunk-A3A6KNQN.mjs → chunk-WOEWGSTU.mjs} +1 -1
  161. package/dist/{chunk-JUXSWN54.mjs → chunk-X26S5EVZ.mjs} +4 -2
  162. package/dist/{chunk-YFZ3ELX5.mjs → chunk-XBAGGKLW.mjs} +2 -2
  163. package/dist/{chunk-JB67UOB5.mjs → chunk-ZHMSAYLT.mjs} +2 -2
  164. package/dist/fonts.d.mts +1 -7
  165. package/dist/fonts.d.ts +1 -7
  166. package/dist/fonts.js +0 -2
  167. package/dist/fonts.mjs +1 -2
  168. package/dist/index.d.mts +7 -1
  169. package/dist/index.d.ts +7 -1
  170. package/dist/index.js +1831 -475
  171. package/dist/index.mjs +54 -51
  172. package/package.json +3 -3
  173. package/src/components/ConfirmDialog/ConfirmDialog.tsx +39 -30
  174. package/src/components/CurrencyInput/CurrencyInput.tsx +4 -7
  175. package/src/components/DetailRow/DetailRow.tsx +1 -1
  176. package/src/components/IconPicker/IconPicker.tsx +395 -0
  177. package/src/components/IconPicker/index.ts +1 -0
  178. package/src/components/ImageUpload/ImageUpload.tsx +34 -12
  179. package/src/components/ListItem/ListItem.tsx +43 -28
  180. package/src/components/NumberStepper/NumberStepper.tsx +147 -0
  181. package/src/components/NumberStepper/index.ts +1 -0
  182. package/src/components/Pressable/Pressable.tsx +20 -8
  183. package/src/components/Sheet/Sheet.tsx +64 -172
  184. package/src/components/Stats/Stats.tsx +226 -0
  185. package/src/components/Stats/index.ts +2 -0
  186. package/src/components/Text/Text.tsx +4 -2
  187. package/src/fonts.ts +0 -7
  188. package/src/index.ts +7 -1
  189. package/src/theme/colorUtils.ts +9 -0
  190. package/src/utils/curatedIcons.ts +849 -0
  191. package/src/utils/fontGuard.ts +2 -1
  192. package/src/utils/icons.ts +20 -2
@@ -0,0 +1,8 @@
1
+ export { IconPicker } from './chunk-KHYX4IOM.mjs';
2
+ import './chunk-BCWEHE34.mjs';
3
+ import './chunk-EJ7ZPXOH.mjs';
4
+ import './chunk-QY3X2UYR.mjs';
5
+ import './chunk-KA7LTET3.mjs';
6
+ import './chunk-EMUWGDWC.mjs';
7
+ import './chunk-2CE3TQVY.mjs';
8
+ import './chunk-Y6FXYEAI.mjs';
@@ -10,6 +10,8 @@ interface ImageUploadProps {
10
10
  loading?: boolean;
11
11
  /** Text shown when no image is selected. */
12
12
  placeholder?: string;
13
+ /** Whether to show the placeholder text. Use false for compact/avatar variants. */
14
+ showPlaceholderText?: boolean;
13
15
  /** Width of the upload area. Defaults to full width (undefined). */
14
16
  width?: number;
15
17
  /** Height of the upload area. Defaults to 200. */
@@ -22,6 +24,6 @@ interface ImageUploadProps {
22
24
  style?: ViewStyle;
23
25
  accessibilityLabel?: string;
24
26
  }
25
- declare function ImageUpload({ value, onChange, loading, placeholder, width, height, borderRadius, resizeMode, disabled, style, accessibilityLabel, }: ImageUploadProps): React.JSX.Element;
27
+ declare function ImageUpload({ value, onChange, loading, placeholder, showPlaceholderText, width, height, borderRadius, resizeMode, disabled, style, accessibilityLabel, }: ImageUploadProps): React.JSX.Element;
26
28
 
27
29
  export { ImageUpload, type ImageUploadProps };
@@ -10,6 +10,8 @@ interface ImageUploadProps {
10
10
  loading?: boolean;
11
11
  /** Text shown when no image is selected. */
12
12
  placeholder?: string;
13
+ /** Whether to show the placeholder text. Use false for compact/avatar variants. */
14
+ showPlaceholderText?: boolean;
13
15
  /** Width of the upload area. Defaults to full width (undefined). */
14
16
  width?: number;
15
17
  /** Height of the upload area. Defaults to 200. */
@@ -22,6 +24,6 @@ interface ImageUploadProps {
22
24
  style?: ViewStyle;
23
25
  accessibilityLabel?: string;
24
26
  }
25
- declare function ImageUpload({ value, onChange, loading, placeholder, width, height, borderRadius, resizeMode, disabled, style, accessibilityLabel, }: ImageUploadProps): React.JSX.Element;
27
+ declare function ImageUpload({ value, onChange, loading, placeholder, showPlaceholderText, width, height, borderRadius, resizeMode, disabled, style, accessibilityLabel, }: ImageUploadProps): React.JSX.Element;
26
28
 
27
29
  export { ImageUpload, type ImageUploadProps };
@@ -300,6 +300,7 @@ function ImageUpload({
300
300
  onChange,
301
301
  loading = false,
302
302
  placeholder = "Tap to add image",
303
+ showPlaceholderText = true,
303
304
  width,
304
305
  height = 200,
305
306
  borderRadius = RADIUS.lg,
@@ -312,23 +313,31 @@ function ImageUpload({
312
313
  const handlePress = async () => {
313
314
  if (disabled || loading) return;
314
315
  impactLight();
315
- let ImagePicker;
316
+ let picker;
316
317
  try {
317
- ImagePicker = await import('expo-image-picker');
318
+ const mod = await import('expo-image-picker/build/ExponentImagePicker');
319
+ picker = mod.default;
318
320
  } catch {
319
- if (__DEV__) console.warn("[ImageUpload] expo-image-picker not installed. Add it as a dependency.");
320
- return;
321
+ try {
322
+ picker = await import('expo-image-picker');
323
+ } catch {
324
+ if (__DEV__) console.warn("[ImageUpload] expo-image-picker not installed.");
325
+ return;
326
+ }
321
327
  }
322
328
  if (reactNative.Platform.OS !== "web") {
323
- const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();
324
- if (status !== "granted") return;
329
+ try {
330
+ const { status } = await picker.requestMediaLibraryPermissionsAsync();
331
+ if (status !== "granted") return;
332
+ } catch {
333
+ }
325
334
  }
326
- const result = await ImagePicker.launchImageLibraryAsync({
335
+ const result = await picker.launchImageLibraryAsync({
327
336
  mediaTypes: ["images"],
328
337
  allowsEditing: true,
329
338
  quality: 0.8
330
339
  });
331
- if (!result.canceled && result.assets[0]) {
340
+ if (!result.canceled && result.assets?.[0]) {
332
341
  onChange?.(result.assets[0].uri);
333
342
  }
334
343
  };
@@ -361,7 +370,15 @@ function ImageUpload({
361
370
  style: [reactNative.StyleSheet.absoluteFillObject, { borderRadius }],
362
371
  resizeMode
363
372
  }
364
- ) : /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles2.placeholder }, /* @__PURE__ */ React3__default.default.createElement(vectorIcons.Feather, { name: "image", size: ms(28), color: colors.foregroundMuted }), /* @__PURE__ */ React3__default.default.createElement(reactNative.Text, { style: [styles2.placeholderText, { color: colors.foregroundMuted }], allowFontScaling: true }, placeholder)),
373
+ ) : /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles2.placeholder }, /* @__PURE__ */ React3__default.default.createElement(vectorIcons.Feather, { name: "image", size: ms(28), color: colors.foregroundMuted }), showPlaceholderText ? /* @__PURE__ */ React3__default.default.createElement(
374
+ reactNative.Text,
375
+ {
376
+ style: [styles2.placeholderText, { color: colors.foregroundMuted }],
377
+ numberOfLines: 1,
378
+ allowFontScaling: true
379
+ },
380
+ placeholder
381
+ ) : null),
365
382
  loading ? /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: [styles2.loadingOverlay, { backgroundColor: colors.overlay }] }, /* @__PURE__ */ React3__default.default.createElement(Spinner, { size: "md" })) : null,
366
383
  value && !loading ? /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles2.editBadge, pointerEvents: "none" }, /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: [styles2.editBadgeInner, { backgroundColor: colors.overlay }] }, /* @__PURE__ */ React3__default.default.createElement(vectorIcons.Feather, { name: "edit-2", size: ms(12), color: "#fff" }))) : null
367
384
  );
@@ -375,7 +392,8 @@ var styles2 = reactNative.StyleSheet.create({
375
392
  },
376
393
  placeholderText: {
377
394
  fontFamily: "Sohne-Regular",
378
- fontSize: ms(13)
395
+ fontSize: ms(13),
396
+ textAlign: "center"
379
397
  },
380
398
  loadingOverlay: {
381
399
  ...reactNative.StyleSheet.absoluteFillObject,
@@ -1,9 +1,9 @@
1
- export { ImageUpload } from './chunk-Y4GL2MHX.mjs';
2
- import './chunk-WBOOUHSS.mjs';
1
+ export { ImageUpload } from './chunk-GK4VRMNE.mjs';
2
+ import './chunk-BCWEHE34.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-SOYNZDVY.mjs';
7
+ import './chunk-EMUWGDWC.mjs';
8
8
  import './chunk-2CE3TQVY.mjs';
9
9
  import './chunk-Y6FXYEAI.mjs';
@@ -229,7 +229,7 @@ var ALL_FAMILIES = [
229
229
  ];
230
230
  var activeFamilies = ALL_FAMILIES;
231
231
  var resolvedCache = null;
232
- function buildCache() {
232
+ function buildCache(families) {
233
233
  const cache = /* @__PURE__ */ new Map();
234
234
  for (const family of activeFamilies) {
235
235
  const glyphMap = family.getGlyphMap();
@@ -1,10 +1,10 @@
1
- export { ImageViewer } from './chunk-WOEYDUJZ.mjs';
2
- import './chunk-4K625MVM.mjs';
3
- import './chunk-3U4SSNWP.mjs';
1
+ export { ImageViewer } from './chunk-2A2LEFZG.mjs';
2
+ import './chunk-OULVKTWL.mjs';
3
+ import './chunk-DF6DU42P.mjs';
4
4
  import './chunk-3DKJ2GIC.mjs';
5
5
  import './chunk-EJ7ZPXOH.mjs';
6
6
  import './chunk-DVK4G2GT.mjs';
7
- import './chunk-T7XZ7H7Y.mjs';
8
- import './chunk-SOYNZDVY.mjs';
7
+ import './chunk-KA7LTET3.mjs';
8
+ import './chunk-EMUWGDWC.mjs';
9
9
  import './chunk-2CE3TQVY.mjs';
10
10
  import './chunk-Y6FXYEAI.mjs';
package/dist/Input.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/Input.mjs CHANGED
@@ -1,6 +1,6 @@
1
- export { Input } from './chunk-ZUR7AU5R.mjs';
1
+ export { Input } from './chunk-PGERH3P7.mjs';
2
2
  import './chunk-DVK4G2GT.mjs';
3
- import './chunk-T7XZ7H7Y.mjs';
4
- import './chunk-SOYNZDVY.mjs';
3
+ import './chunk-KA7LTET3.mjs';
4
+ import './chunk-EMUWGDWC.mjs';
5
5
  import './chunk-2CE3TQVY.mjs';
6
6
  import './chunk-Y6FXYEAI.mjs';
@@ -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();
@@ -1,5 +1,5 @@
1
- export { LabelValue } from './chunk-A4MDAP7G.mjs';
2
- import './chunk-T7XZ7H7Y.mjs';
3
- import './chunk-SOYNZDVY.mjs';
1
+ export { LabelValue } from './chunk-P64WHW4A.mjs';
2
+ import './chunk-KA7LTET3.mjs';
3
+ import './chunk-EMUWGDWC.mjs';
4
4
  import './chunk-2CE3TQVY.mjs';
5
5
  import './chunk-Y6FXYEAI.mjs';
@@ -1,5 +1,5 @@
1
- export { ListGroup, ListGroupFooter, ListGroupHeader } from './chunk-SOA2Z4RB.mjs';
1
+ export { ListGroup, ListGroupFooter, ListGroupHeader } from './chunk-JULSIZDM.mjs';
2
2
  import './chunk-QY3X2UYR.mjs';
3
- import './chunk-SOYNZDVY.mjs';
3
+ import './chunk-EMUWGDWC.mjs';
4
4
  import './chunk-2CE3TQVY.mjs';
5
5
  import './chunk-Y6FXYEAI.mjs';
@@ -15,13 +15,13 @@ interface ListItemProps {
15
15
  leftRender?: React.ReactNode;
16
16
  /**
17
17
  * Arbitrary content rendered on the right (badge, price, chevron, switch, etc.).
18
- * Replaces the old `trailing` prop (still accepted as an alias).
19
18
  */
20
19
  rightRender?: React.ReactNode | string;
21
- /** @deprecated Use `rightRender` instead. */
22
- trailing?: React.ReactNode | string;
23
- /** @deprecated Use `leftRender` instead. */
24
- icon?: React.ReactNode;
20
+ /**
21
+ * Multiple action buttons rendered on the right with automatic gap.
22
+ * Takes precedence over `rightRender` and `showChevron`.
23
+ */
24
+ rightActions?: React.ReactNode[];
25
25
  /**
26
26
  * Icon name from `@expo/vector-icons` rendered in the left slot.
27
27
  * See https://icons.expo.fyi. Takes precedence over `leftRender`.
@@ -46,7 +46,7 @@ interface ListItemProps {
46
46
  * - `card`: standalone surface with background, border and shadow.
47
47
  */
48
48
  variant?: ListItemVariant;
49
- /** Show a right-pointing chevron on the far right. Ignored when `rightRender` / `trailing` is set. */
49
+ /** Show a right-pointing chevron on the far right. Ignored when `rightRender` / `rightActions` / `rightIcon` is set. */
50
50
  showChevron?: boolean;
51
51
  /** Visual separator line at the bottom of the item. Useful when rendering multiple plain items in a list. */
52
52
  showSeparator?: boolean;
@@ -65,7 +65,7 @@ interface ListItemProps {
65
65
  /** Accessibility label override. Defaults to the title. */
66
66
  accessibilityLabel?: string;
67
67
  }
68
- declare function ListItemBase({ imageSource, leftRender, rightRender, trailing, icon, leftIcon, rightIcon, leftIconColor, rightIconColor, title, subtitle, caption, variant, showChevron, showSeparator, onPress, disabled, style, titleStyle, subtitleStyle, subtitleNumberOfLines, captionStyle, accessibilityLabel, }: ListItemProps): React.JSX.Element;
68
+ declare function ListItemBase({ imageSource, leftRender, rightRender, rightActions, leftIcon, rightIcon, leftIconColor, rightIconColor, title, subtitle, caption, variant, showChevron, showSeparator, onPress, disabled, style, titleStyle, subtitleStyle, subtitleNumberOfLines, captionStyle, accessibilityLabel, }: ListItemProps): React.JSX.Element;
69
69
  declare const ListItem: React.MemoExoticComponent<typeof ListItemBase>;
70
70
 
71
71
  export { ListItem, type ListItemProps };
@@ -15,13 +15,13 @@ interface ListItemProps {
15
15
  leftRender?: React.ReactNode;
16
16
  /**
17
17
  * Arbitrary content rendered on the right (badge, price, chevron, switch, etc.).
18
- * Replaces the old `trailing` prop (still accepted as an alias).
19
18
  */
20
19
  rightRender?: React.ReactNode | string;
21
- /** @deprecated Use `rightRender` instead. */
22
- trailing?: React.ReactNode | string;
23
- /** @deprecated Use `leftRender` instead. */
24
- icon?: React.ReactNode;
20
+ /**
21
+ * Multiple action buttons rendered on the right with automatic gap.
22
+ * Takes precedence over `rightRender` and `showChevron`.
23
+ */
24
+ rightActions?: React.ReactNode[];
25
25
  /**
26
26
  * Icon name from `@expo/vector-icons` rendered in the left slot.
27
27
  * See https://icons.expo.fyi. Takes precedence over `leftRender`.
@@ -46,7 +46,7 @@ interface ListItemProps {
46
46
  * - `card`: standalone surface with background, border and shadow.
47
47
  */
48
48
  variant?: ListItemVariant;
49
- /** Show a right-pointing chevron on the far right. Ignored when `rightRender` / `trailing` is set. */
49
+ /** Show a right-pointing chevron on the far right. Ignored when `rightRender` / `rightActions` / `rightIcon` is set. */
50
50
  showChevron?: boolean;
51
51
  /** Visual separator line at the bottom of the item. Useful when rendering multiple plain items in a list. */
52
52
  showSeparator?: boolean;
@@ -65,7 +65,7 @@ interface ListItemProps {
65
65
  /** Accessibility label override. Defaults to the title. */
66
66
  accessibilityLabel?: string;
67
67
  }
68
- declare function ListItemBase({ imageSource, leftRender, rightRender, trailing, icon, leftIcon, rightIcon, leftIconColor, rightIconColor, title, subtitle, caption, variant, showChevron, showSeparator, onPress, disabled, style, titleStyle, subtitleStyle, subtitleNumberOfLines, captionStyle, accessibilityLabel, }: ListItemProps): React.JSX.Element;
68
+ declare function ListItemBase({ imageSource, leftRender, rightRender, rightActions, leftIcon, rightIcon, leftIconColor, rightIconColor, title, subtitle, caption, variant, showChevron, showSeparator, onPress, disabled, style, titleStyle, subtitleStyle, subtitleNumberOfLines, captionStyle, accessibilityLabel, }: ListItemProps): React.JSX.Element;
69
69
  declare const ListItem: React.MemoExoticComponent<typeof ListItemBase>;
70
70
 
71
71
  export { ListItem, type ListItemProps };
package/dist/ListItem.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();
@@ -297,8 +297,7 @@ function ListItemBase({
297
297
  imageSource,
298
298
  leftRender,
299
299
  rightRender,
300
- trailing,
301
- icon,
300
+ rightActions,
302
301
  leftIcon,
303
302
  rightIcon,
304
303
  leftIconColor,
@@ -323,8 +322,8 @@ function ListItemBase({
323
322
  selectionAsync();
324
323
  onPress?.();
325
324
  };
326
- const effectiveLeft = imageSource ? /* @__PURE__ */ React3__default.default.createElement(reactNative.Image, { source: imageSource, style: styles.image }) : leftIcon ? renderIcon(leftIcon, 24, leftIconColor ?? colors.foreground) : leftRender ?? icon;
327
- const effectiveRight = rightIcon ? renderIcon(rightIcon, 24, rightIconColor ?? colors.foregroundMuted) : rightRender ?? trailing;
325
+ const effectiveLeft = imageSource ? /* @__PURE__ */ React3__default.default.createElement(reactNative.Image, { source: imageSource, style: styles.image }) : leftIcon ? renderIcon(leftIcon, 24, leftIconColor ?? colors.foreground) : leftRender;
326
+ const hasRightContent = !!(rightIcon || rightActions && rightActions.length > 0 || rightRender !== void 0 || showChevron);
328
327
  const cardStyle = variant === "card" ? {
329
328
  backgroundColor: colors.card,
330
329
  borderRadius: RADIUS.md,
@@ -361,14 +360,14 @@ function ListItemBase({
361
360
  allowFontScaling: true
362
361
  },
363
362
  caption
364
- ) : null), effectiveRight !== void 0 ? /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.rightContainer }, typeof effectiveRight === "string" ? /* @__PURE__ */ React3__default.default.createElement(
363
+ ) : null), hasRightContent ? rightIcon ? /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.rightContainer }, renderIcon(rightIcon, 24, rightIconColor ?? colors.foregroundMuted)) : rightActions && rightActions.length > 0 ? /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.rightActionsContainer }, rightActions.map((action, i) => /* @__PURE__ */ React3__default.default.createElement(React3__default.default.Fragment, { key: i }, action))) : rightRender !== void 0 ? /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.rightContainer }, typeof rightRender === "string" ? /* @__PURE__ */ React3__default.default.createElement(
365
364
  reactNative.Text,
366
365
  {
367
366
  style: [styles.rightText, { color: colors.foregroundMuted }],
368
367
  allowFontScaling: true
369
368
  },
370
- effectiveRight
371
- ) : effectiveRight) : showChevron ? /* @__PURE__ */ React3__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-right", size: 20, color: colors.foregroundMuted }) : null);
369
+ rightRender
370
+ ) : rightRender) : showChevron ? /* @__PURE__ */ React3__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-right", size: 20, color: colors.foregroundMuted }) : null : null);
372
371
  if (onPress) {
373
372
  return /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: disabled && styles.disabled }, /* @__PURE__ */ React3__default.default.createElement(
374
373
  PressableRow,
@@ -435,6 +434,12 @@ var styles = reactNative.StyleSheet.create({
435
434
  flexShrink: 0,
436
435
  maxWidth: s(160)
437
436
  },
437
+ rightActionsContainer: {
438
+ flexDirection: "row",
439
+ alignItems: "center",
440
+ gap: s(8),
441
+ flexShrink: 0
442
+ },
438
443
  rightText: {
439
444
  fontFamily: "Sohne-Regular",
440
445
  fontSize: ms(14)
package/dist/ListItem.mjs CHANGED
@@ -1,9 +1,9 @@
1
- export { ListItem } from './chunk-OHBNABL5.mjs';
1
+ export { ListItem } from './chunk-FUVYSVGR.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-T7XZ7H7Y.mjs';
7
- import './chunk-SOYNZDVY.mjs';
6
+ import './chunk-KA7LTET3.mjs';
7
+ import './chunk-EMUWGDWC.mjs';
8
8
  import './chunk-2CE3TQVY.mjs';
9
9
  import './chunk-Y6FXYEAI.mjs';
package/dist/MediaCard.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();
@@ -1,9 +1,9 @@
1
- export { MediaCard } from './chunk-VGTDN7SW.mjs';
1
+ export { MediaCard } from './chunk-AQEVCEXV.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-T7XZ7H7Y.mjs';
7
- import './chunk-SOYNZDVY.mjs';
6
+ import './chunk-KA7LTET3.mjs';
7
+ import './chunk-EMUWGDWC.mjs';
8
8
  import './chunk-2CE3TQVY.mjs';
9
9
  import './chunk-Y6FXYEAI.mjs';
@@ -1,5 +1,5 @@
1
- export { MenuGroup, MenuGroupFooter, MenuGroupHeader } from './chunk-IRRY3CRZ.mjs';
1
+ export { MenuGroup, MenuGroupFooter, MenuGroupHeader } from './chunk-AKM4EPOT.mjs';
2
2
  import './chunk-QY3X2UYR.mjs';
3
- import './chunk-SOYNZDVY.mjs';
3
+ import './chunk-EMUWGDWC.mjs';
4
4
  import './chunk-2CE3TQVY.mjs';
5
5
  import './chunk-Y6FXYEAI.mjs';
package/dist/MenuItem.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/MenuItem.mjs CHANGED
@@ -1,9 +1,9 @@
1
- export { MenuItem } from './chunk-ZJKGQMYH.mjs';
1
+ export { MenuItem } from './chunk-DI7CBDL6.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-T7XZ7H7Y.mjs';
7
- import './chunk-SOYNZDVY.mjs';
6
+ import './chunk-KA7LTET3.mjs';
7
+ import './chunk-EMUWGDWC.mjs';
8
8
  import './chunk-2CE3TQVY.mjs';
9
9
  import './chunk-Y6FXYEAI.mjs';
@@ -1,5 +1,5 @@
1
- export { MonthPicker, dateToMonthPickerValue, monthPickerValueToDate } from './chunk-GD6KXMG5.mjs';
1
+ export { MonthPicker, dateToMonthPickerValue, monthPickerValueToDate } from './chunk-I4V5XZPS.mjs';
2
2
  import './chunk-EJ7ZPXOH.mjs';
3
- import './chunk-SOYNZDVY.mjs';
3
+ import './chunk-EMUWGDWC.mjs';
4
4
  import './chunk-2CE3TQVY.mjs';
5
5
  import './chunk-Y6FXYEAI.mjs';
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+
4
+ type NumberStepperSize = 'sm' | 'md' | 'lg';
5
+ interface NumberStepperProps {
6
+ value: number;
7
+ onValueChange: (value: number) => void;
8
+ min?: number;
9
+ max?: number;
10
+ step?: number;
11
+ size?: NumberStepperSize;
12
+ disabled?: boolean;
13
+ style?: ViewStyle;
14
+ accessibilityLabel?: string;
15
+ }
16
+ declare function NumberStepperBase({ value, onValueChange, min, max, step, size, disabled, style, accessibilityLabel, }: NumberStepperProps): React.JSX.Element;
17
+ declare const NumberStepper: React.MemoExoticComponent<typeof NumberStepperBase>;
18
+
19
+ export { NumberStepper, type NumberStepperProps, type NumberStepperSize };
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+
4
+ type NumberStepperSize = 'sm' | 'md' | 'lg';
5
+ interface NumberStepperProps {
6
+ value: number;
7
+ onValueChange: (value: number) => void;
8
+ min?: number;
9
+ max?: number;
10
+ step?: number;
11
+ size?: NumberStepperSize;
12
+ disabled?: boolean;
13
+ style?: ViewStyle;
14
+ accessibilityLabel?: string;
15
+ }
16
+ declare function NumberStepperBase({ value, onValueChange, min, max, step, size, disabled, style, accessibilityLabel, }: NumberStepperProps): React.JSX.Element;
17
+ declare const NumberStepper: React.MemoExoticComponent<typeof NumberStepperBase>;
18
+
19
+ export { NumberStepper, type NumberStepperProps, type NumberStepperSize };