@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
package/dist/Skeleton.js CHANGED
@@ -12,118 +12,7 @@ var React2__default = /*#__PURE__*/_interopDefault(React2);
12
12
  var Animated__default = /*#__PURE__*/_interopDefault(Animated);
13
13
 
14
14
  // src/components/Skeleton/Skeleton.tsx
15
-
16
- // src/theme/colorUtils.ts
17
- function hexToRgb(hex) {
18
- const clean = hex.replace("#", "");
19
- const full = clean.length === 3 ? clean.split("").map((c) => c + c).join("") : clean;
20
- if (full.length !== 6) return null;
21
- return {
22
- r: parseInt(full.slice(0, 2), 16),
23
- g: parseInt(full.slice(2, 4), 16),
24
- b: parseInt(full.slice(4, 6), 16)
25
- };
26
- }
27
- function componentToHex(c) {
28
- return Math.round(Math.max(0, Math.min(255, c))).toString(16).padStart(2, "0");
29
- }
30
- function rgbToHex(r, g, b) {
31
- return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}`;
32
- }
33
- function withAlphaOnWhite(hex, alpha) {
34
- const rgb = hexToRgb(hex);
35
- if (!rgb) return hex;
36
- const r = rgb.r * alpha + 255 * (1 - alpha);
37
- const g = rgb.g * alpha + 255 * (1 - alpha);
38
- const b = rgb.b * alpha + 255 * (1 - alpha);
39
- return rgbToHex(r, g, b);
40
- }
41
- function withAlphaOnDark(hex, alpha, bgHex = "#0f0f0f") {
42
- const rgb = hexToRgb(hex);
43
- const bg = hexToRgb(bgHex);
44
- if (!rgb || !bg) return hex;
45
- const r = rgb.r * alpha + bg.r * (1 - alpha);
46
- const g = rgb.g * alpha + bg.g * (1 - alpha);
47
- const b = rgb.b * alpha + bg.b * (1 - alpha);
48
- return rgbToHex(r, g, b);
49
- }
50
- function mixWithBackground(fgHex, bgHex, opacity) {
51
- const fg = hexToRgb(fgHex);
52
- const bg = hexToRgb(bgHex);
53
- if (!fg || !bg) return fgHex;
54
- const r = fg.r * opacity + bg.r * (1 - opacity);
55
- const g = fg.g * opacity + bg.g * (1 - opacity);
56
- const b = fg.b * opacity + bg.b * (1 - opacity);
57
- return rgbToHex(r, g, b);
58
- }
59
- function lighten(hex, amount) {
60
- return withAlphaOnWhite(hex, 1 - amount);
61
- }
62
- function darken(hex, amount) {
63
- const rgb = hexToRgb(hex);
64
- if (!rgb) return hex;
65
- return rgbToHex(rgb.r * (1 - amount), rgb.g * (1 - amount), rgb.b * (1 - amount));
66
- }
67
-
68
- // src/theme/colors.ts
69
- var defaultLight = {
70
- background: "#ffffff",
71
- foreground: "#1a1a1a",
72
- card: "#ffffff",
73
- primary: "#1a1a1a",
74
- primaryForeground: "#ffffff",
75
- // AUDIT FIX: brand accent — was undefined; falls back to primary when omitted
76
- accent: "#d4561d",
77
- accentForeground: "#ffffff",
78
- border: "#dddddd",
79
- // AUDIT FIX: was #e53935 (4.22:1 on white — fails AA); #c72828 = 5.59:1 ✓
80
- destructive: "#c72828",
81
- destructiveForeground: "#ffffff",
82
- success: "#1a7a45",
83
- successForeground: "#ffffff",
84
- // AUDIT FIX: was #e67e00 (2.86:1 — severe fail); #9a5200 = 5.86:1 ✓ AAA-near
85
- warning: "#9a5200",
86
- warningForeground: "#ffffff"
87
- };
88
- function deriveColors(t, scheme) {
89
- const dark = scheme === "dark";
90
- const bg = t.background;
91
- const foregroundSubtle = mixWithBackground(t.foreground, bg, 0.7);
92
- const foregroundMuted = mixWithBackground(t.foreground, bg, 0.62);
93
- const surface = dark ? lighten(bg, -0.06) : darken(bg, 0.04);
94
- const surfaceStrong = dark ? lighten(bg, -0.12) : darken(bg, 0.08);
95
- const destructiveTint = dark ? withAlphaOnDark(t.destructive, 0.15, bg) : withAlphaOnWhite(t.destructive, 0.08);
96
- const destructiveBorder = dark ? withAlphaOnDark(t.destructive, 0.45, bg) : withAlphaOnWhite(t.destructive, 0.3);
97
- const successTint = dark ? withAlphaOnDark(t.success, 0.15, bg) : withAlphaOnWhite(t.success, 0.08);
98
- const successBorder = dark ? withAlphaOnDark(t.success, 0.45, bg) : withAlphaOnWhite(t.success, 0.3);
99
- const warningTint = dark ? withAlphaOnDark(t.warning, 0.15, bg) : withAlphaOnWhite(t.warning, 0.08);
100
- const warningBorder = dark ? withAlphaOnDark(t.warning, 0.45, bg) : withAlphaOnWhite(t.warning, 0.3);
101
- return {
102
- ...t,
103
- foregroundSubtle,
104
- foregroundMuted,
105
- surface,
106
- surfaceStrong,
107
- destructiveTint,
108
- destructiveBorder,
109
- successTint,
110
- successBorder,
111
- warningTint,
112
- warningBorder,
113
- overlay: t.overlay ?? "rgba(0,0,0,0.45)",
114
- accentResolved: t.accent ?? t.primary,
115
- accentForegroundResolved: t.accentForeground ?? t.primaryForeground,
116
- ring: t.accent ?? t.primary,
117
- input: t.border,
118
- separator: dark ? lighten(t.border, 0.22) : darken(t.border, 0.16)
119
- };
120
- }
121
-
122
- // src/theme/ThemeProvider.tsx
123
- var ThemeContext = React2.createContext({
124
- colors: deriveColors(defaultLight, "light"),
125
- colorScheme: "light"
126
- });
15
+ var ThemeContext = React2.createContext(void 0);
127
16
  function useTheme() {
128
17
  const context = React2.useContext(ThemeContext);
129
18
  if (!context) {
@@ -134,18 +23,11 @@ function useTheme() {
134
23
  var isWeb = reactNative.Platform.OS === "web";
135
24
  var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
136
25
  var vs = isWeb ? (n) => n : reactNativeSizeMatters.verticalScale;
26
+
27
+ // src/utils/animations.ts
137
28
  var TIMINGS = {
138
- /** Skeleton shimmer cycle (full pass). */
139
29
  shimmer: { duration: 1400 }
140
30
  };
141
- ({
142
- /** Material-style ease-out — natural deceleration for state changes. */
143
- standard: Animated.Easing.bezier(0.2, 0, 0, 1),
144
- /** Strong ease-out for expanding surfaces (Accordion open). */
145
- expand: Animated.Easing.bezier(0.23, 1, 0.32, 1),
146
- /** Quick ease-in for collapsing. */
147
- collapse: Animated.Easing.in(Animated.Easing.ease)
148
- });
149
31
 
150
32
  // src/tokens.ts
151
33
  var RADIUS = {
@@ -159,12 +41,13 @@ function Skeleton({
159
41
  borderRadius = 6,
160
42
  preset = "base",
161
43
  diameter = 40,
44
+ backgroundColor,
162
45
  style
163
46
  }) {
164
47
  const { colors, colorScheme } = useTheme();
165
48
  const shimmer = Animated.useSharedValue(0);
166
49
  const [containerWidth, setContainerWidth] = React2.useState(300);
167
- const shimmerHighlight = colorScheme === "dark" ? "rgba(255,255,255,0.08)" : "rgba(255,255,255,0.7)";
50
+ const shimmerHighlight = colorScheme === "dark" ? "rgba(255,255,255,0.08)" : "rgba(0,0,0,0.07)";
168
51
  React2.useEffect(() => {
169
52
  shimmer.value = Animated.withRepeat(
170
53
  Animated.withTiming(1, { duration: TIMINGS.shimmer.duration, easing: Animated.Easing.linear }),
@@ -183,12 +66,12 @@ function Skeleton({
183
66
  {
184
67
  style: [
185
68
  styles.base,
186
- { width: resolvedWidth, height: resolvedHeight, borderRadius: resolvedRadius, backgroundColor: colors.surface },
69
+ { width: resolvedWidth, height: resolvedHeight, borderRadius: resolvedRadius, backgroundColor: backgroundColor ?? colors.skeleton },
187
70
  style
188
71
  ],
189
72
  onLayout: (e) => setContainerWidth(e.nativeEvent.layout.width),
190
73
  accessibilityRole: "progressbar",
191
- accessibilityLabel: "Loading",
74
+ accessibilityLabel: "Cargando",
192
75
  accessibilityState: { busy: true }
193
76
  },
194
77
  /* @__PURE__ */ React2__default.default.createElement(Animated__default.default.View, { style: [reactNative.StyleSheet.absoluteFill, shimmerStyle] }, /* @__PURE__ */ React2__default.default.createElement(
package/dist/Skeleton.mjs CHANGED
@@ -1,6 +1,6 @@
1
- export { Skeleton } from './chunk-BOVUP27T.mjs';
2
- import './chunk-DVK4G2GT.mjs';
1
+ export { Skeleton } from './chunk-XCIG6HT2.mjs';
2
+ import './chunk-M53LC4Q7.mjs';
3
3
  import './chunk-QY3X2UYR.mjs';
4
- import './chunk-EMUWGDWC.mjs';
4
+ import './chunk-KSSVIFYR.mjs';
5
5
  import './chunk-2CE3TQVY.mjs';
6
6
  import './chunk-Y6FXYEAI.mjs';
package/dist/Slider.js CHANGED
@@ -10,18 +10,13 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
10
  var React2__default = /*#__PURE__*/_interopDefault(React2);
11
11
  var RNSlider__default = /*#__PURE__*/_interopDefault(RNSlider);
12
12
 
13
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
14
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
15
- }) : x)(function(x) {
16
- if (typeof require !== "undefined") return require.apply(this, arguments);
17
- throw Error('Dynamic require of "' + x + '" is not supported');
18
- });
13
+ // src/components/Slider/Slider.tsx
19
14
  var _haptics = null;
20
- var _hapticsLoaded = false;
15
+ var _loaded = false;
21
16
  async function getHaptics() {
22
17
  if (reactNative.Platform.OS === "web") return null;
23
- if (!_hapticsLoaded) {
24
- _hapticsLoaded = true;
18
+ if (!_loaded) {
19
+ _loaded = true;
25
20
  try {
26
21
  _haptics = await import('expo-haptics');
27
22
  } catch {
@@ -30,158 +25,10 @@ async function getHaptics() {
30
25
  }
31
26
  return _haptics;
32
27
  }
33
- var _pulsar = null;
34
- var _pulsarChecked = false;
35
- var _pulsarAvailable = false;
36
- function isPulsarNativeRegistered() {
37
- try {
38
- const g = globalThis;
39
- if (typeof g.__turboModuleProxy === "function") {
40
- return g.__turboModuleProxy("RNPulsar") != null;
41
- }
42
- return reactNative.NativeModules?.RNPulsar != null;
43
- } catch {
44
- return false;
45
- }
46
- }
47
- function getPulsar() {
48
- if (reactNative.Platform.OS === "web") return null;
49
- if (!_pulsarChecked) {
50
- _pulsarChecked = true;
51
- try {
52
- if (isPulsarNativeRegistered()) {
53
- _pulsar = __require("react-native-pulsar");
54
- _pulsarAvailable = true;
55
- }
56
- } catch {
57
- _pulsar = null;
58
- _pulsarAvailable = false;
59
- }
60
- }
61
- return _pulsarAvailable ? _pulsar : null;
62
- }
63
28
  function selectionAsync() {
64
- if (reactNative.Platform.OS === "web") return;
65
- getHaptics().then((h) => {
66
- if (h) {
67
- h.selectionAsync();
68
- } else {
69
- getPulsar()?.Presets.System.selection();
70
- }
71
- });
72
- }
73
-
74
- // src/theme/colorUtils.ts
75
- function hexToRgb(hex) {
76
- const clean = hex.replace("#", "");
77
- const full = clean.length === 3 ? clean.split("").map((c) => c + c).join("") : clean;
78
- if (full.length !== 6) return null;
79
- return {
80
- r: parseInt(full.slice(0, 2), 16),
81
- g: parseInt(full.slice(2, 4), 16),
82
- b: parseInt(full.slice(4, 6), 16)
83
- };
84
- }
85
- function componentToHex(c) {
86
- return Math.round(Math.max(0, Math.min(255, c))).toString(16).padStart(2, "0");
87
- }
88
- function rgbToHex(r, g, b) {
89
- return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}`;
90
- }
91
- function withAlphaOnWhite(hex, alpha) {
92
- const rgb = hexToRgb(hex);
93
- if (!rgb) return hex;
94
- const r = rgb.r * alpha + 255 * (1 - alpha);
95
- const g = rgb.g * alpha + 255 * (1 - alpha);
96
- const b = rgb.b * alpha + 255 * (1 - alpha);
97
- return rgbToHex(r, g, b);
98
- }
99
- function withAlphaOnDark(hex, alpha, bgHex = "#0f0f0f") {
100
- const rgb = hexToRgb(hex);
101
- const bg = hexToRgb(bgHex);
102
- if (!rgb || !bg) return hex;
103
- const r = rgb.r * alpha + bg.r * (1 - alpha);
104
- const g = rgb.g * alpha + bg.g * (1 - alpha);
105
- const b = rgb.b * alpha + bg.b * (1 - alpha);
106
- return rgbToHex(r, g, b);
107
- }
108
- function mixWithBackground(fgHex, bgHex, opacity) {
109
- const fg = hexToRgb(fgHex);
110
- const bg = hexToRgb(bgHex);
111
- if (!fg || !bg) return fgHex;
112
- const r = fg.r * opacity + bg.r * (1 - opacity);
113
- const g = fg.g * opacity + bg.g * (1 - opacity);
114
- const b = fg.b * opacity + bg.b * (1 - opacity);
115
- return rgbToHex(r, g, b);
29
+ getHaptics().then((h) => h?.selectionAsync());
116
30
  }
117
- function lighten(hex, amount) {
118
- return withAlphaOnWhite(hex, 1 - amount);
119
- }
120
- function darken(hex, amount) {
121
- const rgb = hexToRgb(hex);
122
- if (!rgb) return hex;
123
- return rgbToHex(rgb.r * (1 - amount), rgb.g * (1 - amount), rgb.b * (1 - amount));
124
- }
125
-
126
- // src/theme/colors.ts
127
- var defaultLight = {
128
- background: "#ffffff",
129
- foreground: "#1a1a1a",
130
- card: "#ffffff",
131
- primary: "#1a1a1a",
132
- primaryForeground: "#ffffff",
133
- // AUDIT FIX: brand accent — was undefined; falls back to primary when omitted
134
- accent: "#d4561d",
135
- accentForeground: "#ffffff",
136
- border: "#dddddd",
137
- // AUDIT FIX: was #e53935 (4.22:1 on white — fails AA); #c72828 = 5.59:1 ✓
138
- destructive: "#c72828",
139
- destructiveForeground: "#ffffff",
140
- success: "#1a7a45",
141
- successForeground: "#ffffff",
142
- // AUDIT FIX: was #e67e00 (2.86:1 — severe fail); #9a5200 = 5.86:1 ✓ AAA-near
143
- warning: "#9a5200",
144
- warningForeground: "#ffffff"
145
- };
146
- function deriveColors(t, scheme) {
147
- const dark = scheme === "dark";
148
- const bg = t.background;
149
- const foregroundSubtle = mixWithBackground(t.foreground, bg, 0.7);
150
- const foregroundMuted = mixWithBackground(t.foreground, bg, 0.62);
151
- const surface = dark ? lighten(bg, -0.06) : darken(bg, 0.04);
152
- const surfaceStrong = dark ? lighten(bg, -0.12) : darken(bg, 0.08);
153
- const destructiveTint = dark ? withAlphaOnDark(t.destructive, 0.15, bg) : withAlphaOnWhite(t.destructive, 0.08);
154
- const destructiveBorder = dark ? withAlphaOnDark(t.destructive, 0.45, bg) : withAlphaOnWhite(t.destructive, 0.3);
155
- const successTint = dark ? withAlphaOnDark(t.success, 0.15, bg) : withAlphaOnWhite(t.success, 0.08);
156
- const successBorder = dark ? withAlphaOnDark(t.success, 0.45, bg) : withAlphaOnWhite(t.success, 0.3);
157
- const warningTint = dark ? withAlphaOnDark(t.warning, 0.15, bg) : withAlphaOnWhite(t.warning, 0.08);
158
- const warningBorder = dark ? withAlphaOnDark(t.warning, 0.45, bg) : withAlphaOnWhite(t.warning, 0.3);
159
- return {
160
- ...t,
161
- foregroundSubtle,
162
- foregroundMuted,
163
- surface,
164
- surfaceStrong,
165
- destructiveTint,
166
- destructiveBorder,
167
- successTint,
168
- successBorder,
169
- warningTint,
170
- warningBorder,
171
- overlay: t.overlay ?? "rgba(0,0,0,0.45)",
172
- accentResolved: t.accent ?? t.primary,
173
- accentForegroundResolved: t.accentForeground ?? t.primaryForeground,
174
- ring: t.accent ?? t.primary,
175
- input: t.border,
176
- separator: dark ? lighten(t.border, 0.22) : darken(t.border, 0.16)
177
- };
178
- }
179
-
180
- // src/theme/ThemeProvider.tsx
181
- var ThemeContext = React2.createContext({
182
- colors: deriveColors(defaultLight, "light"),
183
- colorScheme: "light"
184
- });
31
+ var ThemeContext = React2.createContext(void 0);
185
32
  function useTheme() {
186
33
  const context = React2.useContext(ThemeContext);
187
34
  if (!context) {
package/dist/Slider.mjs CHANGED
@@ -1,5 +1,5 @@
1
- export { Slider } from './chunk-4WFMPFZB.mjs';
2
- import './chunk-EJ7ZPXOH.mjs';
3
- import './chunk-EMUWGDWC.mjs';
1
+ export { Slider } from './chunk-UOKFSFNJ.mjs';
2
+ import './chunk-ARONDO7M.mjs';
3
+ import './chunk-KSSVIFYR.mjs';
4
4
  import './chunk-2CE3TQVY.mjs';
5
5
  import './chunk-Y6FXYEAI.mjs';
package/dist/Spinner.js CHANGED
@@ -9,118 +9,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
9
  var React2__default = /*#__PURE__*/_interopDefault(React2);
10
10
 
11
11
  // src/components/Spinner/Spinner.tsx
12
-
13
- // src/theme/colorUtils.ts
14
- function hexToRgb(hex) {
15
- const clean = hex.replace("#", "");
16
- const full = clean.length === 3 ? clean.split("").map((c) => c + c).join("") : clean;
17
- if (full.length !== 6) return null;
18
- return {
19
- r: parseInt(full.slice(0, 2), 16),
20
- g: parseInt(full.slice(2, 4), 16),
21
- b: parseInt(full.slice(4, 6), 16)
22
- };
23
- }
24
- function componentToHex(c) {
25
- return Math.round(Math.max(0, Math.min(255, c))).toString(16).padStart(2, "0");
26
- }
27
- function rgbToHex(r, g, b) {
28
- return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}`;
29
- }
30
- function withAlphaOnWhite(hex, alpha) {
31
- const rgb = hexToRgb(hex);
32
- if (!rgb) return hex;
33
- const r = rgb.r * alpha + 255 * (1 - alpha);
34
- const g = rgb.g * alpha + 255 * (1 - alpha);
35
- const b = rgb.b * alpha + 255 * (1 - alpha);
36
- return rgbToHex(r, g, b);
37
- }
38
- function withAlphaOnDark(hex, alpha, bgHex = "#0f0f0f") {
39
- const rgb = hexToRgb(hex);
40
- const bg = hexToRgb(bgHex);
41
- if (!rgb || !bg) return hex;
42
- const r = rgb.r * alpha + bg.r * (1 - alpha);
43
- const g = rgb.g * alpha + bg.g * (1 - alpha);
44
- const b = rgb.b * alpha + bg.b * (1 - alpha);
45
- return rgbToHex(r, g, b);
46
- }
47
- function mixWithBackground(fgHex, bgHex, opacity) {
48
- const fg = hexToRgb(fgHex);
49
- const bg = hexToRgb(bgHex);
50
- if (!fg || !bg) return fgHex;
51
- const r = fg.r * opacity + bg.r * (1 - opacity);
52
- const g = fg.g * opacity + bg.g * (1 - opacity);
53
- const b = fg.b * opacity + bg.b * (1 - opacity);
54
- return rgbToHex(r, g, b);
55
- }
56
- function lighten(hex, amount) {
57
- return withAlphaOnWhite(hex, 1 - amount);
58
- }
59
- function darken(hex, amount) {
60
- const rgb = hexToRgb(hex);
61
- if (!rgb) return hex;
62
- return rgbToHex(rgb.r * (1 - amount), rgb.g * (1 - amount), rgb.b * (1 - amount));
63
- }
64
-
65
- // src/theme/colors.ts
66
- var defaultLight = {
67
- background: "#ffffff",
68
- foreground: "#1a1a1a",
69
- card: "#ffffff",
70
- primary: "#1a1a1a",
71
- primaryForeground: "#ffffff",
72
- // AUDIT FIX: brand accent — was undefined; falls back to primary when omitted
73
- accent: "#d4561d",
74
- accentForeground: "#ffffff",
75
- border: "#dddddd",
76
- // AUDIT FIX: was #e53935 (4.22:1 on white — fails AA); #c72828 = 5.59:1 ✓
77
- destructive: "#c72828",
78
- destructiveForeground: "#ffffff",
79
- success: "#1a7a45",
80
- successForeground: "#ffffff",
81
- // AUDIT FIX: was #e67e00 (2.86:1 — severe fail); #9a5200 = 5.86:1 ✓ AAA-near
82
- warning: "#9a5200",
83
- warningForeground: "#ffffff"
84
- };
85
- function deriveColors(t, scheme) {
86
- const dark = scheme === "dark";
87
- const bg = t.background;
88
- const foregroundSubtle = mixWithBackground(t.foreground, bg, 0.7);
89
- const foregroundMuted = mixWithBackground(t.foreground, bg, 0.62);
90
- const surface = dark ? lighten(bg, -0.06) : darken(bg, 0.04);
91
- const surfaceStrong = dark ? lighten(bg, -0.12) : darken(bg, 0.08);
92
- const destructiveTint = dark ? withAlphaOnDark(t.destructive, 0.15, bg) : withAlphaOnWhite(t.destructive, 0.08);
93
- const destructiveBorder = dark ? withAlphaOnDark(t.destructive, 0.45, bg) : withAlphaOnWhite(t.destructive, 0.3);
94
- const successTint = dark ? withAlphaOnDark(t.success, 0.15, bg) : withAlphaOnWhite(t.success, 0.08);
95
- const successBorder = dark ? withAlphaOnDark(t.success, 0.45, bg) : withAlphaOnWhite(t.success, 0.3);
96
- const warningTint = dark ? withAlphaOnDark(t.warning, 0.15, bg) : withAlphaOnWhite(t.warning, 0.08);
97
- const warningBorder = dark ? withAlphaOnDark(t.warning, 0.45, bg) : withAlphaOnWhite(t.warning, 0.3);
98
- return {
99
- ...t,
100
- foregroundSubtle,
101
- foregroundMuted,
102
- surface,
103
- surfaceStrong,
104
- destructiveTint,
105
- destructiveBorder,
106
- successTint,
107
- successBorder,
108
- warningTint,
109
- warningBorder,
110
- overlay: t.overlay ?? "rgba(0,0,0,0.45)",
111
- accentResolved: t.accent ?? t.primary,
112
- accentForegroundResolved: t.accentForeground ?? t.primaryForeground,
113
- ring: t.accent ?? t.primary,
114
- input: t.border,
115
- separator: dark ? lighten(t.border, 0.22) : darken(t.border, 0.16)
116
- };
117
- }
118
-
119
- // src/theme/ThemeProvider.tsx
120
- var ThemeContext = React2.createContext({
121
- colors: deriveColors(defaultLight, "light"),
122
- colorScheme: "light"
123
- });
12
+ var ThemeContext = React2.createContext(void 0);
124
13
  function useTheme() {
125
14
  const context = React2.useContext(ThemeContext);
126
15
  if (!context) {
@@ -136,7 +25,7 @@ var mvs = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateVerticalSca
136
25
  // src/components/Spinner/Spinner.tsx
137
26
  var sizeMap = {
138
27
  sm: "small",
139
- md: "small",
28
+ md: "large",
140
29
  lg: "large"
141
30
  };
142
31
  var labelFontSize = {
@@ -146,7 +35,7 @@ var labelFontSize = {
146
35
  };
147
36
  function Spinner({ size = "md", color, label, ...props }) {
148
37
  const { colors } = useTheme();
149
- const a11yLabel = label || "Loading";
38
+ const a11yLabel = label || "Cargando";
150
39
  if (label) {
151
40
  return /* @__PURE__ */ React2__default.default.createElement(
152
41
  reactNative.View,
package/dist/Spinner.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { Spinner } from './chunk-BCWEHE34.mjs';
2
- import './chunk-EMUWGDWC.mjs';
1
+ export { Spinner } from './chunk-2VIDP72N.mjs';
2
+ import './chunk-KSSVIFYR.mjs';
3
3
  import './chunk-2CE3TQVY.mjs';
4
4
  import './chunk-Y6FXYEAI.mjs';
package/dist/Stats.d.mts CHANGED
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { ViewStyle } from 'react-native';
3
3
 
4
4
  type StatsVariant = 'elevated' | 'outlined' | 'filled';
5
+ type StatsSize = 'default' | 'compact';
5
6
  interface StatsProps {
6
7
  value: string;
7
8
  label: string;
@@ -10,6 +11,8 @@ interface StatsProps {
10
11
  iconName?: string;
11
12
  iconColor?: string;
12
13
  variant?: StatsVariant;
14
+ /** `'compact'` reduces everything proportionally for tight grids. */
15
+ size?: StatsSize;
13
16
  onPress?: () => void;
14
17
  style?: ViewStyle;
15
18
  accessibilityLabel?: string;
@@ -19,7 +22,7 @@ interface StatsGroupProps {
19
22
  gap?: number;
20
23
  style?: ViewStyle;
21
24
  }
22
- declare function StatsComponent({ value, label, description, icon, iconName, iconColor, variant, onPress, style, accessibilityLabel, }: StatsProps): React.JSX.Element;
25
+ declare function StatsComponent({ value, label, description, icon, iconName, iconColor, variant, size, onPress, style, accessibilityLabel, }: StatsProps): React.JSX.Element;
23
26
  declare function StatsGroup({ children, gap, style }: StatsGroupProps): React.JSX.Element;
24
27
  declare const Stats: React.NamedExoticComponent<StatsProps> & {
25
28
  readonly type: typeof StatsComponent;
package/dist/Stats.d.ts CHANGED
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { ViewStyle } from 'react-native';
3
3
 
4
4
  type StatsVariant = 'elevated' | 'outlined' | 'filled';
5
+ type StatsSize = 'default' | 'compact';
5
6
  interface StatsProps {
6
7
  value: string;
7
8
  label: string;
@@ -10,6 +11,8 @@ interface StatsProps {
10
11
  iconName?: string;
11
12
  iconColor?: string;
12
13
  variant?: StatsVariant;
14
+ /** `'compact'` reduces everything proportionally for tight grids. */
15
+ size?: StatsSize;
13
16
  onPress?: () => void;
14
17
  style?: ViewStyle;
15
18
  accessibilityLabel?: string;
@@ -19,7 +22,7 @@ interface StatsGroupProps {
19
22
  gap?: number;
20
23
  style?: ViewStyle;
21
24
  }
22
- declare function StatsComponent({ value, label, description, icon, iconName, iconColor, variant, onPress, style, accessibilityLabel, }: StatsProps): React.JSX.Element;
25
+ declare function StatsComponent({ value, label, description, icon, iconName, iconColor, variant, size, onPress, style, accessibilityLabel, }: StatsProps): React.JSX.Element;
23
26
  declare function StatsGroup({ children, gap, style }: StatsGroupProps): React.JSX.Element;
24
27
  declare const Stats: React.NamedExoticComponent<StatsProps> & {
25
28
  readonly type: typeof StatsComponent;