@retray-dev/ui-kit 12.1.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.
Files changed (282) hide show
  1. package/COMPONENTS.md +183 -147
  2. package/CONSUMER.md +2 -2
  3. package/DESIGN.md +2 -2
  4. package/README.md +13 -8
  5. package/dist/Accordion.d.mts +6 -0
  6. package/dist/Accordion.d.ts +6 -0
  7. package/dist/Accordion.js +62 -208
  8. package/dist/Accordion.mjs +6 -5
  9. package/dist/AlertBanner.js +29 -151
  10. package/dist/AlertBanner.mjs +3 -3
  11. package/dist/AppHeader.js +37 -233
  12. package/dist/AppHeader.mjs +6 -7
  13. package/dist/Avatar.d.mts +17 -1
  14. package/dist/Avatar.d.ts +17 -1
  15. package/dist/Avatar.js +80 -113
  16. package/dist/Avatar.mjs +2 -2
  17. package/dist/Badge.js +24 -147
  18. package/dist/Badge.mjs +3 -3
  19. package/dist/Button.js +86 -274
  20. package/dist/Button.mjs +6 -6
  21. package/dist/Card.js +15 -198
  22. package/dist/Card.mjs +4 -5
  23. package/dist/CategoryStrip.d.mts +0 -5
  24. package/dist/CategoryStrip.d.ts +0 -5
  25. package/dist/CategoryStrip.js +47 -263
  26. package/dist/CategoryStrip.mjs +6 -6
  27. package/dist/Checkbox.js +15 -198
  28. package/dist/Checkbox.mjs +5 -5
  29. package/dist/Chip.js +44 -234
  30. package/dist/Chip.mjs +7 -6
  31. package/dist/ConfirmDialog.js +100 -296
  32. package/dist/ConfirmDialog.mjs +7 -7
  33. package/dist/CurrencyDisplay.js +1 -112
  34. package/dist/CurrencyDisplay.mjs +2 -2
  35. package/dist/CurrencyInput.js +35 -160
  36. package/dist/CurrencyInput.mjs +5 -5
  37. package/dist/DetailRow.js +25 -148
  38. package/dist/DetailRow.mjs +3 -3
  39. package/dist/EmptyState.js +87 -275
  40. package/dist/EmptyState.mjs +7 -7
  41. package/dist/ErrorBoundary.js +32 -197
  42. package/dist/ErrorBoundary.mjs +4 -4
  43. package/dist/Form.js +1 -112
  44. package/dist/Form.mjs +2 -2
  45. package/dist/HolographicCard.d.mts +0 -28
  46. package/dist/HolographicCard.d.ts +0 -28
  47. package/dist/HolographicCard.js +20 -130
  48. package/dist/HolographicCard.mjs +9 -32
  49. package/dist/IconButton.js +36 -232
  50. package/dist/IconButton.mjs +5 -6
  51. package/dist/IconPicker.js +222 -927
  52. package/dist/IconPicker.mjs +5 -5
  53. package/dist/ImageUpload.d.mts +5 -1
  54. package/dist/ImageUpload.d.ts +5 -1
  55. package/dist/ImageUpload.js +32 -215
  56. package/dist/ImageUpload.mjs +5 -6
  57. package/dist/ImageViewer.js +75 -264
  58. package/dist/ImageViewer.mjs +8 -8
  59. package/dist/Input.d.mts +1 -1
  60. package/dist/Input.d.ts +1 -1
  61. package/dist/Input.js +35 -160
  62. package/dist/Input.mjs +4 -4
  63. package/dist/LabelValue.js +24 -147
  64. package/dist/LabelValue.mjs +3 -3
  65. package/dist/ListGroup.js +1 -112
  66. package/dist/ListGroup.mjs +2 -2
  67. package/dist/ListItem.js +38 -233
  68. package/dist/ListItem.mjs +5 -6
  69. package/dist/MediaCard.d.mts +0 -14
  70. package/dist/MediaCard.d.ts +0 -14
  71. package/dist/MediaCard.js +69 -313
  72. package/dist/MediaCard.mjs +5 -6
  73. package/dist/MenuGroup.js +1 -112
  74. package/dist/MenuGroup.mjs +2 -2
  75. package/dist/MenuItem.js +36 -232
  76. package/dist/MenuItem.mjs +5 -6
  77. package/dist/MonthPicker.js +8 -161
  78. package/dist/MonthPicker.mjs +3 -3
  79. package/dist/NumberStepper.js +40 -236
  80. package/dist/NumberStepper.mjs +5 -6
  81. package/dist/PagerDots.d.mts +1 -1
  82. package/dist/PagerDots.d.ts +1 -1
  83. package/dist/PagerDots.js +69 -222
  84. package/dist/PagerDots.mjs +6 -5
  85. package/dist/Pressable.js +14 -85
  86. package/dist/Pressable.mjs +4 -4
  87. package/dist/PricingCard.js +94 -279
  88. package/dist/PricingCard.mjs +8 -8
  89. package/dist/Progress.js +3 -121
  90. package/dist/Progress.mjs +3 -3
  91. package/dist/RadioGroup.js +52 -263
  92. package/dist/RadioGroup.mjs +5 -5
  93. package/dist/RetrayProvider.d.mts +1 -1
  94. package/dist/RetrayProvider.d.ts +1 -1
  95. package/dist/RetrayProvider.js +5 -6
  96. package/dist/RetrayProvider.mjs +3 -3
  97. package/dist/Select.d.mts +2 -1
  98. package/dist/Select.d.ts +2 -1
  99. package/dist/Select.js +24 -230
  100. package/dist/Select.mjs +4 -5
  101. package/dist/SelectableCard.d.mts +27 -0
  102. package/dist/SelectableCard.d.ts +27 -0
  103. package/dist/SelectableCard.js +335 -0
  104. package/dist/SelectableCard.mjs +8 -0
  105. package/dist/SelectableGrid.d.mts +0 -21
  106. package/dist/SelectableGrid.d.ts +0 -21
  107. package/dist/SelectableGrid.js +49 -269
  108. package/dist/SelectableGrid.mjs +5 -6
  109. package/dist/Separator.js +1 -112
  110. package/dist/Separator.mjs +2 -2
  111. package/dist/Sheet.js +16 -163
  112. package/dist/Sheet.mjs +3 -3
  113. package/dist/SheetSelect.js +39 -234
  114. package/dist/SheetSelect.mjs +6 -6
  115. package/dist/Skeleton.d.mts +3 -1
  116. package/dist/Skeleton.d.ts +3 -1
  117. package/dist/Skeleton.js +7 -124
  118. package/dist/Skeleton.mjs +3 -3
  119. package/dist/Slider.js +6 -159
  120. package/dist/Slider.mjs +3 -3
  121. package/dist/Spinner.js +3 -114
  122. package/dist/Spinner.mjs +2 -2
  123. package/dist/Stats.d.mts +4 -1
  124. package/dist/Stats.d.ts +4 -1
  125. package/dist/Stats.js +60 -234
  126. package/dist/Stats.mjs +5 -6
  127. package/dist/Switch.js +24 -173
  128. package/dist/Switch.mjs +5 -4
  129. package/dist/TabBar.js +43 -198
  130. package/dist/TabBar.mjs +5 -4
  131. package/dist/Tabs.js +15 -197
  132. package/dist/Tabs.mjs +5 -5
  133. package/dist/Text.js +9 -128
  134. package/dist/Text.mjs +2 -2
  135. package/dist/Textarea.d.mts +2 -1
  136. package/dist/Textarea.d.ts +2 -1
  137. package/dist/Textarea.js +71 -217
  138. package/dist/Textarea.mjs +4 -4
  139. package/dist/Toast.js +1 -112
  140. package/dist/Toast.mjs +2 -2
  141. package/dist/Toggle.js +39 -234
  142. package/dist/Toggle.mjs +6 -6
  143. package/dist/{chunk-FFTYLPSB.mjs → chunk-2QOHHBJC.mjs} +13 -7
  144. package/dist/{chunk-BCWEHE34.mjs → chunk-2VIDP72N.mjs} +3 -3
  145. package/dist/{chunk-PGERH3P7.mjs → chunk-4NQFTHN3.mjs} +13 -7
  146. package/dist/{chunk-3N2M3WZL.mjs → chunk-4ZO5PTKF.mjs} +4 -4
  147. package/dist/{chunk-MYZ2EDYU.mjs → chunk-5MYNAAFE.mjs} +13 -17
  148. package/dist/{chunk-E7NEHHXV.mjs → chunk-62BBSSUF.mjs} +3 -3
  149. package/dist/{chunk-ISY26JQJ.mjs → chunk-6CR4S6W2.mjs} +3 -3
  150. package/dist/{chunk-FUVYSVGR.mjs → chunk-6QLBHUEG.mjs} +8 -7
  151. package/dist/chunk-ARONDO7M.mjs +40 -0
  152. package/dist/{chunk-3UYAZ7I4.mjs → chunk-AZV7KNJI.mjs} +3 -3
  153. package/dist/{chunk-HLMPMUK2.mjs → chunk-BTUW5LSG.mjs} +11 -8
  154. package/dist/chunk-BULKGOIZ.mjs +235 -0
  155. package/dist/{chunk-265G6A46.mjs → chunk-CBIZLRYH.mjs} +29 -12
  156. package/dist/chunk-CM2DG4MR.mjs +142 -0
  157. package/dist/{chunk-2I2AYECM.mjs → chunk-DBHSUUKU.mjs} +2 -2
  158. package/dist/{chunk-P64WHW4A.mjs → chunk-DE25XTVQ.mjs} +3 -3
  159. package/dist/{chunk-DI7CBDL6.mjs → chunk-E4EQSCKR.mjs} +5 -5
  160. package/dist/{chunk-357YO24D.mjs → chunk-EHGBHFMH.mjs} +9 -17
  161. package/dist/{chunk-GK4VRMNE.mjs → chunk-EROPDCB5.mjs} +24 -27
  162. package/dist/{chunk-XBAGGKLW.mjs → chunk-ERWJPVX7.mjs} +2 -2
  163. package/dist/{chunk-LRM4AVYY.mjs → chunk-ESQDPO5E.mjs} +7 -7
  164. package/dist/{chunk-EFLFRAHD.mjs → chunk-EW2FIDSM.mjs} +1 -1
  165. package/dist/{chunk-7HSILTC4.mjs → chunk-FTTI6T5Q.mjs} +4 -4
  166. package/dist/{chunk-X26S5EVZ.mjs → chunk-HUSSF6TF.mjs} +1 -1
  167. package/dist/chunk-IFYMBOEN.mjs +14 -0
  168. package/dist/{chunk-S3KJCPEJ.mjs → chunk-IGU223UM.mjs} +80 -4
  169. package/dist/chunk-IJCMPVW5.mjs +121 -0
  170. package/dist/{chunk-I4V5XZPS.mjs → chunk-ITG4JQM3.mjs} +4 -4
  171. package/dist/{chunk-F4V6XLP4.mjs → chunk-K3QX2M26.mjs} +11 -8
  172. package/dist/{chunk-V6NFJXKO.mjs → chunk-K7TKID3V.mjs} +8 -7
  173. package/dist/{chunk-ZHMSAYLT.mjs → chunk-KAGADD2O.mjs} +4 -4
  174. package/dist/{chunk-3GEYJ7I5.mjs → chunk-KC5QDYGZ.mjs} +4 -4
  175. package/dist/{chunk-HJ46DTJE.mjs → chunk-KPTY7UYQ.mjs} +1 -1
  176. package/dist/{chunk-EMUWGDWC.mjs → chunk-KSSVIFYR.mjs} +11 -12
  177. package/dist/chunk-L3YKPTJQ.mjs +119 -0
  178. package/dist/chunk-M53LC4Q7.mjs +35 -0
  179. package/dist/{chunk-NXI4YDZ2.mjs → chunk-MP7GLMIR.mjs} +17 -25
  180. package/dist/chunk-MZ6WRTD2.mjs +40 -0
  181. package/dist/chunk-NGEN2EES.mjs +581 -0
  182. package/dist/{chunk-JULSIZDM.mjs → chunk-OBV72JD4.mjs} +1 -1
  183. package/dist/{chunk-2A2LEFZG.mjs → chunk-PGQ6FMXS.mjs} +6 -5
  184. package/dist/{chunk-BQZE3HAW.mjs → chunk-PI6RULJX.mjs} +1 -1
  185. package/dist/{chunk-FA2KMTH5.mjs → chunk-RA6SAAFE.mjs} +9 -8
  186. package/dist/{chunk-FVTVCJAH.mjs → chunk-RRKM4MKB.mjs} +7 -7
  187. package/dist/{chunk-AKM4EPOT.mjs → chunk-S2VGME7X.mjs} +1 -1
  188. package/dist/{chunk-OULVKTWL.mjs → chunk-S44XWTTC.mjs} +35 -25
  189. package/dist/{chunk-QSFV2P7O.mjs → chunk-SZEKQAOY.mjs} +1 -1
  190. package/dist/{chunk-N4ZPVCJH.mjs → chunk-TETMEKZE.mjs} +9 -9
  191. package/dist/{chunk-2CBQKU7H.mjs → chunk-TMH263OK.mjs} +5 -4
  192. package/dist/{chunk-D3Y2T42P.mjs → chunk-U6DEBYU5.mjs} +10 -9
  193. package/dist/{chunk-4WFMPFZB.mjs → chunk-UOKFSFNJ.mjs} +2 -2
  194. package/dist/{chunk-WOEWGSTU.mjs → chunk-URIH43IJ.mjs} +13 -21
  195. package/dist/{chunk-JCZQOY4O.mjs → chunk-V2ZB2XNS.mjs} +16 -10
  196. package/dist/{chunk-P73V2EKS.mjs → chunk-WIPEDNSD.mjs} +7 -7
  197. package/dist/{chunk-BOVUP27T.mjs → chunk-XCIG6HT2.mjs} +6 -5
  198. package/dist/chunk-Y6YS33GM.mjs +131 -0
  199. package/dist/{chunk-5OLNXP3S.mjs → chunk-ZKDKKQCE.mjs} +29 -7
  200. package/dist/{chunk-DF6DU42P.mjs → chunk-ZTPYUU5C.mjs} +5 -5
  201. package/dist/{index-wt-orHUi.d.ts → index-CY34hxPN.d.mts} +1 -0
  202. package/dist/{index-wt-orHUi.d.mts → index-CY34hxPN.d.ts} +1 -0
  203. package/dist/index.d.mts +15 -74
  204. package/dist/index.d.ts +15 -74
  205. package/dist/index.js +1055 -1562
  206. package/dist/index.mjs +81 -84
  207. package/package.json +8 -10
  208. package/src/components/Accordion/Accordion.tsx +32 -9
  209. package/src/components/AlertBanner/AlertBanner.tsx +7 -6
  210. package/src/components/AppHeader/AppHeader.tsx +1 -1
  211. package/src/components/Avatar/Avatar.tsx +92 -1
  212. package/src/components/Avatar/index.ts +2 -2
  213. package/src/components/Badge/Badge.tsx +2 -2
  214. package/src/components/Button/Button.tsx +64 -57
  215. package/src/components/Card/Card.tsx +1 -0
  216. package/src/components/CategoryStrip/CategoryStrip.tsx +36 -49
  217. package/src/components/Chip/Chip.tsx +5 -4
  218. package/src/components/ConfirmDialog/ConfirmDialog.tsx +13 -6
  219. package/src/components/DetailRow/DetailRow.tsx +3 -3
  220. package/src/components/EmptyState/EmptyState.tsx +2 -2
  221. package/src/components/ErrorBoundary/ErrorBoundary.tsx +6 -6
  222. package/src/components/HolographicCard/HolographicCard.tsx +14 -95
  223. package/src/components/IconButton/IconButton.tsx +2 -2
  224. package/src/components/IconPicker/IconPicker.tsx +13 -12
  225. package/src/components/ImageUpload/ImageUpload.tsx +24 -28
  226. package/src/components/ImageViewer/ImageViewer.tsx +3 -3
  227. package/src/components/Input/Input.tsx +11 -5
  228. package/src/components/LabelValue/LabelValue.tsx +2 -2
  229. package/src/components/ListItem/ListItem.tsx +4 -4
  230. package/src/components/MediaCard/MediaCard.tsx +21 -59
  231. package/src/components/MenuItem/MenuItem.tsx +2 -2
  232. package/src/components/MonthPicker/MonthPicker.tsx +2 -2
  233. package/src/components/NumberStepper/NumberStepper.tsx +6 -6
  234. package/src/components/PagerDots/PagerDots.tsx +38 -28
  235. package/src/components/PricingCard/PricingCard.tsx +6 -6
  236. package/src/components/RadioGroup/RadioGroup.tsx +18 -31
  237. package/src/components/Select/Select.tsx +32 -39
  238. package/src/components/SelectableCard/SelectableCard.tsx +302 -0
  239. package/src/components/SelectableCard/index.ts +1 -0
  240. package/src/components/SelectableGrid/SelectableGrid.tsx +38 -72
  241. package/src/components/Sheet/Sheet.tsx +11 -4
  242. package/src/components/SheetSelect/SheetSelect.tsx +3 -3
  243. package/src/components/Skeleton/Skeleton.tsx +6 -3
  244. package/src/components/Spinner/Spinner.tsx +2 -2
  245. package/src/components/Stats/Stats.tsx +36 -8
  246. package/src/components/Switch/Switch.tsx +9 -6
  247. package/src/components/TabBar/TabBar.tsx +9 -8
  248. package/src/components/Text/Text.tsx +12 -1
  249. package/src/components/Textarea/Textarea.tsx +18 -32
  250. package/src/components/Toggle/Toggle.tsx +3 -3
  251. package/src/hooks/useConfirmDialog.ts +31 -42
  252. package/src/index.ts +4 -4
  253. package/src/theme/ThemeProvider.tsx +1 -4
  254. package/src/theme/colorUtils.ts +1 -72
  255. package/src/theme/colors.ts +47 -1
  256. package/src/theme/types.ts +6 -3
  257. package/src/utils/animations.ts +0 -47
  258. package/src/utils/curatedIcons.ts +93 -801
  259. package/src/utils/haptics.ts +13 -208
  260. package/src/utils/icons.ts +27 -91
  261. package/src/utils/pressable.ts +10 -61
  262. package/dist/VirtualList.d.mts +0 -19
  263. package/dist/VirtualList.d.ts +0 -19
  264. package/dist/VirtualList.js +0 -38
  265. package/dist/VirtualList.mjs +0 -2
  266. package/dist/chunk-3DKJ2GIC.mjs +0 -30
  267. package/dist/chunk-AQEVCEXV.mjs +0 -164
  268. package/dist/chunk-DOGIPOF5.mjs +0 -131
  269. package/dist/chunk-DVK4G2GT.mjs +0 -59
  270. package/dist/chunk-EJ7ZPXOH.mjs +0 -163
  271. package/dist/chunk-J6Q2YJEV.mjs +0 -134
  272. package/dist/chunk-JNVAIDLK.mjs +0 -136
  273. package/dist/chunk-KA7LTET3.mjs +0 -71
  274. package/dist/chunk-KHYX4IOM.mjs +0 -1114
  275. package/dist/chunk-NC5ZTR2Y.mjs +0 -32
  276. package/dist/chunk-YNROWHQJ.mjs +0 -46
  277. package/src/components/VirtualList/VirtualList.tsx +0 -60
  278. package/src/components/VirtualList/index.ts +0 -1
  279. package/src/utils/fontGuard.ts +0 -35
  280. package/src/utils/hover.ts +0 -25
  281. package/src/utils/useColorTransition.ts +0 -40
  282. package/src/utils/usePressScale.ts +0 -75
@@ -1,8 +1,8 @@
1
- import { PressableCard } from './chunk-3DKJ2GIC.mjs';
2
- import { impactLight } from './chunk-EJ7ZPXOH.mjs';
1
+ import { PressableCard } from './chunk-IFYMBOEN.mjs';
2
+ import { impactLight } from './chunk-ARONDO7M.mjs';
3
3
  import { RADIUS } from './chunk-QY3X2UYR.mjs';
4
- import { renderIcon } from './chunk-KA7LTET3.mjs';
5
- import { useTheme } from './chunk-EMUWGDWC.mjs';
4
+ import { Icon } from './chunk-MZ6WRTD2.mjs';
5
+ import { useTheme } from './chunk-KSSVIFYR.mjs';
6
6
  import { s, vs, mvs, ms } from './chunk-2CE3TQVY.mjs';
7
7
  import React, { useState, useCallback } from 'react';
8
8
  import { StyleSheet, View, Text } from 'react-native';
@@ -16,6 +16,7 @@ function StatsComponent({
16
16
  iconName,
17
17
  iconColor,
18
18
  variant = "elevated",
19
+ size = "default",
19
20
  onPress,
20
21
  style,
21
22
  accessibilityLabel
@@ -34,6 +35,27 @@ function StatsComponent({
34
35
  onPress();
35
36
  };
36
37
  const isCompact = containerWidth > 0 && containerWidth < COMPACT_THRESHOLD && !!(icon ?? iconName);
38
+ const sizeStyles = size === "compact" ? {
39
+ valueFontFamily: "Sohne-SemiBold",
40
+ valueFontSize: ms(16),
41
+ valueLineHeight: mvs(20),
42
+ labelFontSize: ms(11),
43
+ labelLineHeight: mvs(14),
44
+ descriptionFontSize: ms(10),
45
+ descriptionLineHeight: mvs(14),
46
+ iconSize: ms(18),
47
+ padding: s(12)
48
+ } : {
49
+ valueFontFamily: "Sohne-Bold",
50
+ valueFontSize: ms(21),
51
+ valueLineHeight: mvs(25),
52
+ labelFontSize: ms(13),
53
+ labelLineHeight: mvs(18),
54
+ descriptionFontSize: ms(12),
55
+ descriptionLineHeight: mvs(16),
56
+ iconSize: ms(20),
57
+ padding: s(16)
58
+ };
37
59
  const variantStyle = {
38
60
  elevated: {
39
61
  backgroundColor: colors.card,
@@ -58,10 +80,10 @@ function StatsComponent({
58
80
  }
59
81
  }[variant];
60
82
  const iconColorResolved = iconColor ?? colors.primary;
61
- const resolvedIcon = iconName ? renderIcon(iconName, ms(22), iconColorResolved) : icon;
83
+ const resolvedIcon = iconName ? /* @__PURE__ */ React.createElement(Icon, { name: iconName, size: sizeStyles.iconSize, color: iconColorResolved }) : icon;
62
84
  const iconElement = resolvedIcon ? /* @__PURE__ */ React.createElement(View, { style: styles.iconWrapper }, resolvedIcon) : null;
63
- const valueElement = /* @__PURE__ */ React.createElement(Text, { style: [styles.value, { color: colors.foreground }], allowFontScaling: true }, value);
64
- const cardContent = /* @__PURE__ */ React.createElement(View, { style: [styles.card, variantStyle, style], onLayout: handleLayout }, isCompact ? /* @__PURE__ */ React.createElement(React.Fragment, null, iconElement, /* @__PURE__ */ React.createElement(View, { style: styles.compactValue }, valueElement), /* @__PURE__ */ React.createElement(Text, { style: [styles.label, { color: colors.foregroundSubtle }], allowFontScaling: true }, label), description ? /* @__PURE__ */ React.createElement(Text, { style: [styles.description, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(View, { style: styles.valueRow }, iconElement, valueElement), /* @__PURE__ */ React.createElement(Text, { style: [styles.label, { color: colors.foregroundSubtle }], allowFontScaling: true }, label), description ? /* @__PURE__ */ React.createElement(Text, { style: [styles.description, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null));
85
+ const valueElement = /* @__PURE__ */ React.createElement(Text, { style: [styles.value, { color: colors.foreground, fontFamily: sizeStyles.valueFontFamily, fontSize: sizeStyles.valueFontSize, lineHeight: sizeStyles.valueLineHeight }], allowFontScaling: true }, value);
86
+ const cardContent = /* @__PURE__ */ React.createElement(View, { style: [styles.card, variantStyle, { padding: sizeStyles.padding }, style], onLayout: handleLayout }, isCompact ? /* @__PURE__ */ React.createElement(React.Fragment, null, iconElement, /* @__PURE__ */ React.createElement(View, { style: styles.compactValue }, valueElement), /* @__PURE__ */ React.createElement(Text, { style: [styles.label, { color: colors.foregroundSubtle, fontSize: sizeStyles.labelFontSize, lineHeight: sizeStyles.labelLineHeight }], allowFontScaling: true }, label), description ? /* @__PURE__ */ React.createElement(Text, { style: [styles.description, { color: colors.foregroundMuted, fontSize: sizeStyles.descriptionFontSize, lineHeight: sizeStyles.descriptionLineHeight }], allowFontScaling: true }, description) : null) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(View, { style: styles.valueRow }, iconElement, valueElement), /* @__PURE__ */ React.createElement(Text, { style: [styles.label, { color: colors.foregroundSubtle, fontSize: sizeStyles.labelFontSize, lineHeight: sizeStyles.labelLineHeight }], allowFontScaling: true }, label), description ? /* @__PURE__ */ React.createElement(Text, { style: [styles.description, { color: colors.foregroundMuted, fontSize: sizeStyles.descriptionFontSize, lineHeight: sizeStyles.descriptionLineHeight }], allowFontScaling: true }, description) : null));
65
87
  if (onPress) {
66
88
  return /* @__PURE__ */ React.createElement(
67
89
  PressableCard,
@@ -1,7 +1,7 @@
1
- import { PressableButton } from './chunk-3DKJ2GIC.mjs';
2
- import { impactLight } from './chunk-EJ7ZPXOH.mjs';
3
- import { renderIcon } from './chunk-KA7LTET3.mjs';
4
- import { useTheme } from './chunk-EMUWGDWC.mjs';
1
+ import { PressableButton } from './chunk-IFYMBOEN.mjs';
2
+ import { impactLight } from './chunk-ARONDO7M.mjs';
3
+ import { Icon } from './chunk-MZ6WRTD2.mjs';
4
+ import { useTheme } from './chunk-KSSVIFYR.mjs';
5
5
  import { s, ms } from './chunk-2CE3TQVY.mjs';
6
6
  import React from 'react';
7
7
  import { StyleSheet, View, ActivityIndicator, Text } from 'react-native';
@@ -48,7 +48,7 @@ function IconButtonBase({
48
48
  }[variant];
49
49
  const spinnerColor = variant === "destructive" ? colors.destructiveForeground : variant === "primary" ? colors.primaryForeground : colors.foreground;
50
50
  const { container: containerSize, icon: iconSize } = sizeMap[size];
51
- const resolvedIcon = iconName ? renderIcon(iconName, iconSize, iconColor ?? defaultIconColor) : icon;
51
+ const resolvedIcon = iconName ? /* @__PURE__ */ React.createElement(Icon, { name: iconName, size: iconSize, color: iconColor ?? defaultIconColor }) : icon;
52
52
  const showBadge = badge !== void 0 && badge !== false && badge !== 0;
53
53
  const badgeCount = typeof badge === "number" ? Math.min(badge, 99) : null;
54
54
  const showCount = typeof badge === "number" && badge > 0;
@@ -25,6 +25,7 @@ type ResolvedColors = ThemeColors & {
25
25
  foregroundMuted: string;
26
26
  surface: string;
27
27
  surfaceStrong: string;
28
+ skeleton: string;
28
29
  destructiveTint: string;
29
30
  destructiveBorder: string;
30
31
  successTint: string;
@@ -25,6 +25,7 @@ type ResolvedColors = ThemeColors & {
25
25
  foregroundMuted: string;
26
26
  surface: string;
27
27
  surfaceStrong: string;
28
+ skeleton: string;
28
29
  destructiveTint: string;
29
30
  destructiveBorder: string;
30
31
  successTint: string;
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import { T as Theme, C as ColorScheme, a as ThemeContextValue, b as ThemeColors, R as ResolvedColors } from './index-wt-orHUi.mjs';
3
- export { c as RetrayProvider, d as RetrayProviderProps } from './index-wt-orHUi.mjs';
2
+ import { T as Theme, C as ColorScheme, a as ThemeContextValue, b as ThemeColors, R as ResolvedColors } from './index-CY34hxPN.mjs';
3
+ export { c as RetrayProvider, d as RetrayProviderProps } from './index-CY34hxPN.mjs';
4
4
  export { Button, ButtonProps, ButtonSize, ButtonVariant } from './Button.mjs';
5
5
  export { ButtonGroup, ButtonGroupProps } from './ButtonGroup.mjs';
6
6
  export { IconButton, IconButtonProps, IconButtonSize, IconButtonVariant } from './IconButton.mjs';
@@ -11,7 +11,7 @@ export { Card, CardContent, CardContentProps, CardDescription, CardDescriptionPr
11
11
  export { Separator, SeparatorProps } from './Separator.mjs';
12
12
  export { Spinner, SpinnerProps, SpinnerSize } from './Spinner.mjs';
13
13
  export { Skeleton, SkeletonProps } from './Skeleton.mjs';
14
- export { Avatar, AvatarProps, AvatarSize } from './Avatar.mjs';
14
+ export { Avatar, AvatarGroup, AvatarGroupProps, AvatarProps, AvatarSize } from './Avatar.mjs';
15
15
  export { AlertBanner, AlertBannerProps, AlertBannerVariant } from './AlertBanner.mjs';
16
16
  export { Progress, ProgressProps } from './Progress.mjs';
17
17
  export { EmptyState, EmptyStateProps } from './EmptyState.mjs';
@@ -41,11 +41,11 @@ export { CategoryItem, CategoryStrip, CategoryStripProps } from './CategoryStrip
41
41
  export { Pressable, PressableProps } from './Pressable.mjs';
42
42
  export { DetailRow, DetailRowLabelWeight, DetailRowProps, DetailRowSeparator } from './DetailRow.mjs';
43
43
  export { Form, FormField, FormFieldProps, FormFooter, FormFooterProps, FormProps, FormSection, FormSectionProps } from './Form.mjs';
44
- export { VirtualList, VirtualListItem, VirtualListProps } from './VirtualList.mjs';
45
44
  export { ErrorBoundary, ErrorBoundaryProps, ErrorFallbackProps } from './ErrorBoundary.mjs';
46
45
  export { PagerDots, PagerDotsProps } from './PagerDots.mjs';
47
46
  export { AppHeader, AppHeaderProps } from './AppHeader.mjs';
48
47
  export { SelectableGrid, SelectableGridItem, SelectableGridProps } from './SelectableGrid.mjs';
48
+ export { SelectableCard, SelectableCardGroup, SelectableCardGroupProps, SelectableCardProps } from './SelectableCard.mjs';
49
49
  export { PricingCard, PricingCardProps, PricingFeature } from './PricingCard.mjs';
50
50
  export { TabBar, TabBarItem, TabBarProps } from './TabBar.mjs';
51
51
  export { ImageViewer, ImageViewerProps } from './ImageViewer.mjs';
@@ -82,28 +82,18 @@ declare function deriveColors(t: ThemeColors, scheme: 'light' | 'dark'): Resolve
82
82
 
83
83
  type IconFamily = 'Feather' | 'AntDesign' | 'Entypo' | 'FontAwesome5' | 'MaterialIcons' | 'Ionicons';
84
84
  interface IconProps {
85
- /** Icon name from any supported @expo/vector-icons family. See https://icons.expo.fyi */
86
85
  name: string;
87
86
  size: number;
88
87
  color: string;
89
- /** Override the resolved family when the same name exists in multiple families. */
90
88
  family?: IconFamily;
91
89
  }
92
- /**
93
- * Restrict which icon families participate in automatic name resolution.
94
- * Narrowing to the families you actually use shrinks the resolution cache and
95
- * speeds up the first `renderIcon` call (no scanning thousands of unused glyphs).
96
- *
97
- * Note: all six families are still statically imported by this module — Metro
98
- * bundles them regardless. This controls *resolution scope*, not bundle size.
99
- *
100
- * @example configureIconFamilies(['Feather', 'MaterialIcons'])
101
- */
102
- declare function configureIconFamilies(families: IconFamily[]): void;
103
- declare function getValidIconNames(families?: IconFamily[]): string[];
104
90
  declare function Icon({ name, size, color, family }: IconProps): React.ReactElement | null;
105
- declare function renderIcon(name: string, size: number, color: string): React.ReactElement | null;
106
91
 
92
+ declare function hexToRgb(hex: string): {
93
+ r: number;
94
+ g: number;
95
+ b: number;
96
+ } | null;
107
97
  declare function withAlpha(hex: string, alpha: number): string;
108
98
 
109
99
  /**
@@ -119,75 +109,26 @@ declare function getResponsiveFontSize(text: string, maxSize: number, steps?: {
119
109
  subtract: number;
120
110
  }[]): number;
121
111
 
122
- /**
123
- * Light selection feedback — checkboxes, switches, toggles, pickers.
124
- */
125
112
  declare function selectionAsync(): void;
126
- /**
127
- * Light impact — cards, surfaces, light interactions.
128
- */
129
113
  declare function impactLight(): void;
130
- /**
131
- * Medium impact — buttons, primary actions.
132
- */
133
114
  declare function impactMedium(): void;
134
- /**
135
- * Heavy impact — confirmations, important actions.
136
- */
137
115
  declare function impactHeavy(): void;
138
- /**
139
- * Success notification — confirmations, completed actions.
140
- */
141
116
  declare function notificationSuccess(): void;
142
- /**
143
- * Error notification — failed actions, errors.
144
- */
145
117
  declare function notificationError(): void;
146
- /**
147
- * Warning notification — caution states.
148
- */
149
118
  declare function notificationWarning(): void;
150
- /**
151
- * Rich haptic presets from Pulsar — enhanced feedback for special interactions.
152
- * Falls back to basic expo-haptics on Expo Go or unsupported devices.
153
- */
154
- declare const richHaptics: {
155
- /** Hammer strike — strong confirmation feedback. */
156
- hammer: () => void;
157
- /** Pulse — rhythmic feedback for toggles or state changes. */
158
- pulse: () => void;
159
- /** Buzz — continuous vibration for attention. */
160
- buzz: () => void;
161
- /** Flick — crisp click feedback. */
162
- flick: () => void;
163
- /** Soft — gentle, subtle feedback. */
164
- soft: () => void;
165
- /** Rigid — firm, solid feedback. */
166
- rigid: () => void;
167
- };
168
119
 
169
120
  interface UseConfirmDialogOptions {
170
121
  onConfirm: () => void | Promise<void>;
171
122
  onCancel?: () => void;
172
123
  }
173
- interface UseConfirmDialogResult<T> {
174
- /** Pass to ConfirmDialog `visible` prop. */
124
+ interface UseConfirmDialogResult {
175
125
  visible: boolean;
176
- /** The value passed to `open()` — available during the confirmation flow. */
177
- target: T | null;
178
- /** Whether `onConfirm` is currently executing. Pass to ConfirmDialog `loading` prop. */
179
126
  loading: boolean;
180
- /** Open the dialog, optionally with an associated value (e.g. the item to delete). */
181
- open: (target?: T) => void;
182
- /** Handlers to pass directly to ConfirmDialog. */
183
- dialogProps: {
184
- visible: boolean;
185
- loading: boolean;
186
- onConfirm: () => void;
187
- onCancel: () => void;
188
- };
127
+ open: () => void;
128
+ onConfirm: () => void;
129
+ onCancel: () => void;
189
130
  }
190
- declare function useConfirmDialog<T = undefined>(options: UseConfirmDialogOptions): UseConfirmDialogResult<T>;
131
+ declare function useConfirmDialog(options: UseConfirmDialogOptions): UseConfirmDialogResult;
191
132
 
192
133
  declare const SPACING: {
193
134
  readonly xxs: 2;
@@ -392,4 +333,4 @@ type RadiusKey = keyof Radius;
392
333
  type Typography = typeof TYPOGRAPHY;
393
334
  type TypographyKey = keyof Typography;
394
335
 
395
- export { BREAKPOINTS, ColorScheme, ICON_SIZES, Icon, type IconFamily, type IconProps, type IconSize, type IconSizeKey, RADIUS, type Radius, type RadiusKey, ResolvedColors, SHADOWS, SPACING, type Spacing, type SpacingKey, TYPOGRAPHY, Theme, ThemeColors, ThemeProvider, type ThemeProviderProps, type Typography, type TypographyKey, type UseConfirmDialogOptions, type UseConfirmDialogResult, configureIconFamilies, defaultDark, defaultLight, deriveColors, getResponsiveFontSize, getValidIconNames, impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning, renderIcon, richHaptics, selectionAsync, useConfirmDialog, useTheme, withAlpha };
336
+ export { BREAKPOINTS, ColorScheme, ICON_SIZES, Icon, type IconFamily, type IconProps, type IconSize, type IconSizeKey, RADIUS, type Radius, type RadiusKey, ResolvedColors, SHADOWS, SPACING, type Spacing, type SpacingKey, TYPOGRAPHY, Theme, ThemeColors, ThemeProvider, type ThemeProviderProps, type Typography, type TypographyKey, type UseConfirmDialogOptions, type UseConfirmDialogResult, defaultDark, defaultLight, deriveColors, getResponsiveFontSize, hexToRgb, impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning, selectionAsync, useConfirmDialog, useTheme, withAlpha };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import { T as Theme, C as ColorScheme, a as ThemeContextValue, b as ThemeColors, R as ResolvedColors } from './index-wt-orHUi.js';
3
- export { c as RetrayProvider, d as RetrayProviderProps } from './index-wt-orHUi.js';
2
+ import { T as Theme, C as ColorScheme, a as ThemeContextValue, b as ThemeColors, R as ResolvedColors } from './index-CY34hxPN.js';
3
+ export { c as RetrayProvider, d as RetrayProviderProps } from './index-CY34hxPN.js';
4
4
  export { Button, ButtonProps, ButtonSize, ButtonVariant } from './Button.js';
5
5
  export { ButtonGroup, ButtonGroupProps } from './ButtonGroup.js';
6
6
  export { IconButton, IconButtonProps, IconButtonSize, IconButtonVariant } from './IconButton.js';
@@ -11,7 +11,7 @@ export { Card, CardContent, CardContentProps, CardDescription, CardDescriptionPr
11
11
  export { Separator, SeparatorProps } from './Separator.js';
12
12
  export { Spinner, SpinnerProps, SpinnerSize } from './Spinner.js';
13
13
  export { Skeleton, SkeletonProps } from './Skeleton.js';
14
- export { Avatar, AvatarProps, AvatarSize } from './Avatar.js';
14
+ export { Avatar, AvatarGroup, AvatarGroupProps, AvatarProps, AvatarSize } from './Avatar.js';
15
15
  export { AlertBanner, AlertBannerProps, AlertBannerVariant } from './AlertBanner.js';
16
16
  export { Progress, ProgressProps } from './Progress.js';
17
17
  export { EmptyState, EmptyStateProps } from './EmptyState.js';
@@ -41,11 +41,11 @@ export { CategoryItem, CategoryStrip, CategoryStripProps } from './CategoryStrip
41
41
  export { Pressable, PressableProps } from './Pressable.js';
42
42
  export { DetailRow, DetailRowLabelWeight, DetailRowProps, DetailRowSeparator } from './DetailRow.js';
43
43
  export { Form, FormField, FormFieldProps, FormFooter, FormFooterProps, FormProps, FormSection, FormSectionProps } from './Form.js';
44
- export { VirtualList, VirtualListItem, VirtualListProps } from './VirtualList.js';
45
44
  export { ErrorBoundary, ErrorBoundaryProps, ErrorFallbackProps } from './ErrorBoundary.js';
46
45
  export { PagerDots, PagerDotsProps } from './PagerDots.js';
47
46
  export { AppHeader, AppHeaderProps } from './AppHeader.js';
48
47
  export { SelectableGrid, SelectableGridItem, SelectableGridProps } from './SelectableGrid.js';
48
+ export { SelectableCard, SelectableCardGroup, SelectableCardGroupProps, SelectableCardProps } from './SelectableCard.js';
49
49
  export { PricingCard, PricingCardProps, PricingFeature } from './PricingCard.js';
50
50
  export { TabBar, TabBarItem, TabBarProps } from './TabBar.js';
51
51
  export { ImageViewer, ImageViewerProps } from './ImageViewer.js';
@@ -82,28 +82,18 @@ declare function deriveColors(t: ThemeColors, scheme: 'light' | 'dark'): Resolve
82
82
 
83
83
  type IconFamily = 'Feather' | 'AntDesign' | 'Entypo' | 'FontAwesome5' | 'MaterialIcons' | 'Ionicons';
84
84
  interface IconProps {
85
- /** Icon name from any supported @expo/vector-icons family. See https://icons.expo.fyi */
86
85
  name: string;
87
86
  size: number;
88
87
  color: string;
89
- /** Override the resolved family when the same name exists in multiple families. */
90
88
  family?: IconFamily;
91
89
  }
92
- /**
93
- * Restrict which icon families participate in automatic name resolution.
94
- * Narrowing to the families you actually use shrinks the resolution cache and
95
- * speeds up the first `renderIcon` call (no scanning thousands of unused glyphs).
96
- *
97
- * Note: all six families are still statically imported by this module — Metro
98
- * bundles them regardless. This controls *resolution scope*, not bundle size.
99
- *
100
- * @example configureIconFamilies(['Feather', 'MaterialIcons'])
101
- */
102
- declare function configureIconFamilies(families: IconFamily[]): void;
103
- declare function getValidIconNames(families?: IconFamily[]): string[];
104
90
  declare function Icon({ name, size, color, family }: IconProps): React.ReactElement | null;
105
- declare function renderIcon(name: string, size: number, color: string): React.ReactElement | null;
106
91
 
92
+ declare function hexToRgb(hex: string): {
93
+ r: number;
94
+ g: number;
95
+ b: number;
96
+ } | null;
107
97
  declare function withAlpha(hex: string, alpha: number): string;
108
98
 
109
99
  /**
@@ -119,75 +109,26 @@ declare function getResponsiveFontSize(text: string, maxSize: number, steps?: {
119
109
  subtract: number;
120
110
  }[]): number;
121
111
 
122
- /**
123
- * Light selection feedback — checkboxes, switches, toggles, pickers.
124
- */
125
112
  declare function selectionAsync(): void;
126
- /**
127
- * Light impact — cards, surfaces, light interactions.
128
- */
129
113
  declare function impactLight(): void;
130
- /**
131
- * Medium impact — buttons, primary actions.
132
- */
133
114
  declare function impactMedium(): void;
134
- /**
135
- * Heavy impact — confirmations, important actions.
136
- */
137
115
  declare function impactHeavy(): void;
138
- /**
139
- * Success notification — confirmations, completed actions.
140
- */
141
116
  declare function notificationSuccess(): void;
142
- /**
143
- * Error notification — failed actions, errors.
144
- */
145
117
  declare function notificationError(): void;
146
- /**
147
- * Warning notification — caution states.
148
- */
149
118
  declare function notificationWarning(): void;
150
- /**
151
- * Rich haptic presets from Pulsar — enhanced feedback for special interactions.
152
- * Falls back to basic expo-haptics on Expo Go or unsupported devices.
153
- */
154
- declare const richHaptics: {
155
- /** Hammer strike — strong confirmation feedback. */
156
- hammer: () => void;
157
- /** Pulse — rhythmic feedback for toggles or state changes. */
158
- pulse: () => void;
159
- /** Buzz — continuous vibration for attention. */
160
- buzz: () => void;
161
- /** Flick — crisp click feedback. */
162
- flick: () => void;
163
- /** Soft — gentle, subtle feedback. */
164
- soft: () => void;
165
- /** Rigid — firm, solid feedback. */
166
- rigid: () => void;
167
- };
168
119
 
169
120
  interface UseConfirmDialogOptions {
170
121
  onConfirm: () => void | Promise<void>;
171
122
  onCancel?: () => void;
172
123
  }
173
- interface UseConfirmDialogResult<T> {
174
- /** Pass to ConfirmDialog `visible` prop. */
124
+ interface UseConfirmDialogResult {
175
125
  visible: boolean;
176
- /** The value passed to `open()` — available during the confirmation flow. */
177
- target: T | null;
178
- /** Whether `onConfirm` is currently executing. Pass to ConfirmDialog `loading` prop. */
179
126
  loading: boolean;
180
- /** Open the dialog, optionally with an associated value (e.g. the item to delete). */
181
- open: (target?: T) => void;
182
- /** Handlers to pass directly to ConfirmDialog. */
183
- dialogProps: {
184
- visible: boolean;
185
- loading: boolean;
186
- onConfirm: () => void;
187
- onCancel: () => void;
188
- };
127
+ open: () => void;
128
+ onConfirm: () => void;
129
+ onCancel: () => void;
189
130
  }
190
- declare function useConfirmDialog<T = undefined>(options: UseConfirmDialogOptions): UseConfirmDialogResult<T>;
131
+ declare function useConfirmDialog(options: UseConfirmDialogOptions): UseConfirmDialogResult;
191
132
 
192
133
  declare const SPACING: {
193
134
  readonly xxs: 2;
@@ -392,4 +333,4 @@ type RadiusKey = keyof Radius;
392
333
  type Typography = typeof TYPOGRAPHY;
393
334
  type TypographyKey = keyof Typography;
394
335
 
395
- export { BREAKPOINTS, ColorScheme, ICON_SIZES, Icon, type IconFamily, type IconProps, type IconSize, type IconSizeKey, RADIUS, type Radius, type RadiusKey, ResolvedColors, SHADOWS, SPACING, type Spacing, type SpacingKey, TYPOGRAPHY, Theme, ThemeColors, ThemeProvider, type ThemeProviderProps, type Typography, type TypographyKey, type UseConfirmDialogOptions, type UseConfirmDialogResult, configureIconFamilies, defaultDark, defaultLight, deriveColors, getResponsiveFontSize, getValidIconNames, impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning, renderIcon, richHaptics, selectionAsync, useConfirmDialog, useTheme, withAlpha };
336
+ export { BREAKPOINTS, ColorScheme, ICON_SIZES, Icon, type IconFamily, type IconProps, type IconSize, type IconSizeKey, RADIUS, type Radius, type RadiusKey, ResolvedColors, SHADOWS, SPACING, type Spacing, type SpacingKey, TYPOGRAPHY, Theme, ThemeColors, ThemeProvider, type ThemeProviderProps, type Typography, type TypographyKey, type UseConfirmDialogOptions, type UseConfirmDialogResult, defaultDark, defaultLight, deriveColors, getResponsiveFontSize, hexToRgb, impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning, selectionAsync, useConfirmDialog, useTheme, withAlpha };