@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
@@ -23,124 +23,8 @@ var FontAwesome5__default = /*#__PURE__*/_interopDefault(FontAwesome5);
23
23
  var MaterialIcons__default = /*#__PURE__*/_interopDefault(MaterialIcons);
24
24
  var Ionicons__default = /*#__PURE__*/_interopDefault(Ionicons);
25
25
 
26
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
27
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
28
- }) : x)(function(x) {
29
- if (typeof require !== "undefined") return require.apply(this, arguments);
30
- throw Error('Dynamic require of "' + x + '" is not supported');
31
- });
32
-
33
- // src/theme/colorUtils.ts
34
- function hexToRgb(hex) {
35
- const clean = hex.replace("#", "");
36
- const full = clean.length === 3 ? clean.split("").map((c) => c + c).join("") : clean;
37
- if (full.length !== 6) return null;
38
- return {
39
- r: parseInt(full.slice(0, 2), 16),
40
- g: parseInt(full.slice(2, 4), 16),
41
- b: parseInt(full.slice(4, 6), 16)
42
- };
43
- }
44
- function componentToHex(c) {
45
- return Math.round(Math.max(0, Math.min(255, c))).toString(16).padStart(2, "0");
46
- }
47
- function rgbToHex(r, g, b) {
48
- return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}`;
49
- }
50
- function withAlphaOnWhite(hex, alpha) {
51
- const rgb = hexToRgb(hex);
52
- if (!rgb) return hex;
53
- const r = rgb.r * alpha + 255 * (1 - alpha);
54
- const g = rgb.g * alpha + 255 * (1 - alpha);
55
- const b = rgb.b * alpha + 255 * (1 - alpha);
56
- return rgbToHex(r, g, b);
57
- }
58
- function withAlphaOnDark(hex, alpha, bgHex = "#0f0f0f") {
59
- const rgb = hexToRgb(hex);
60
- const bg = hexToRgb(bgHex);
61
- if (!rgb || !bg) return hex;
62
- const r = rgb.r * alpha + bg.r * (1 - alpha);
63
- const g = rgb.g * alpha + bg.g * (1 - alpha);
64
- const b = rgb.b * alpha + bg.b * (1 - alpha);
65
- return rgbToHex(r, g, b);
66
- }
67
- function mixWithBackground(fgHex, bgHex, opacity) {
68
- const fg = hexToRgb(fgHex);
69
- const bg = hexToRgb(bgHex);
70
- if (!fg || !bg) return fgHex;
71
- const r = fg.r * opacity + bg.r * (1 - opacity);
72
- const g = fg.g * opacity + bg.g * (1 - opacity);
73
- const b = fg.b * opacity + bg.b * (1 - opacity);
74
- return rgbToHex(r, g, b);
75
- }
76
- function lighten(hex, amount) {
77
- return withAlphaOnWhite(hex, 1 - amount);
78
- }
79
- function darken(hex, amount) {
80
- const rgb = hexToRgb(hex);
81
- if (!rgb) return hex;
82
- return rgbToHex(rgb.r * (1 - amount), rgb.g * (1 - amount), rgb.b * (1 - amount));
83
- }
84
-
85
- // src/theme/colors.ts
86
- var defaultLight = {
87
- background: "#ffffff",
88
- foreground: "#1a1a1a",
89
- card: "#ffffff",
90
- primary: "#1a1a1a",
91
- primaryForeground: "#ffffff",
92
- // AUDIT FIX: brand accent — was undefined; falls back to primary when omitted
93
- accent: "#d4561d",
94
- accentForeground: "#ffffff",
95
- border: "#dddddd",
96
- // AUDIT FIX: was #e53935 (4.22:1 on white — fails AA); #c72828 = 5.59:1 ✓
97
- destructive: "#c72828",
98
- destructiveForeground: "#ffffff",
99
- success: "#1a7a45",
100
- successForeground: "#ffffff",
101
- // AUDIT FIX: was #e67e00 (2.86:1 — severe fail); #9a5200 = 5.86:1 ✓ AAA-near
102
- warning: "#9a5200",
103
- warningForeground: "#ffffff"
104
- };
105
- function deriveColors(t, scheme) {
106
- const dark = scheme === "dark";
107
- const bg = t.background;
108
- const foregroundSubtle = mixWithBackground(t.foreground, bg, 0.7);
109
- const foregroundMuted = mixWithBackground(t.foreground, bg, 0.62);
110
- const surface = dark ? lighten(bg, -0.06) : darken(bg, 0.04);
111
- const surfaceStrong = dark ? lighten(bg, -0.12) : darken(bg, 0.08);
112
- const destructiveTint = dark ? withAlphaOnDark(t.destructive, 0.15, bg) : withAlphaOnWhite(t.destructive, 0.08);
113
- const destructiveBorder = dark ? withAlphaOnDark(t.destructive, 0.45, bg) : withAlphaOnWhite(t.destructive, 0.3);
114
- const successTint = dark ? withAlphaOnDark(t.success, 0.15, bg) : withAlphaOnWhite(t.success, 0.08);
115
- const successBorder = dark ? withAlphaOnDark(t.success, 0.45, bg) : withAlphaOnWhite(t.success, 0.3);
116
- const warningTint = dark ? withAlphaOnDark(t.warning, 0.15, bg) : withAlphaOnWhite(t.warning, 0.08);
117
- const warningBorder = dark ? withAlphaOnDark(t.warning, 0.45, bg) : withAlphaOnWhite(t.warning, 0.3);
118
- return {
119
- ...t,
120
- foregroundSubtle,
121
- foregroundMuted,
122
- surface,
123
- surfaceStrong,
124
- destructiveTint,
125
- destructiveBorder,
126
- successTint,
127
- successBorder,
128
- warningTint,
129
- warningBorder,
130
- overlay: t.overlay ?? "rgba(0,0,0,0.45)",
131
- accentResolved: t.accent ?? t.primary,
132
- accentForegroundResolved: t.accentForeground ?? t.primaryForeground,
133
- ring: t.accent ?? t.primary,
134
- input: t.border,
135
- separator: dark ? lighten(t.border, 0.22) : darken(t.border, 0.16)
136
- };
137
- }
138
-
139
- // src/theme/ThemeProvider.tsx
140
- var ThemeContext = React4.createContext({
141
- colors: deriveColors(defaultLight, "light"),
142
- colorScheme: "light"
143
- });
26
+ // src/components/IconPicker/IconPicker.tsx
27
+ var ThemeContext = React4.createContext(void 0);
144
28
  function useTheme() {
145
29
  const context = React4.useContext(ThemeContext);
146
30
  if (!context) {
@@ -148,485 +32,104 @@ function useTheme() {
148
32
  }
149
33
  return context;
150
34
  }
151
- var glyphMapOf = (mod) => mod.glyphMap ?? {};
152
35
  var ALL_FAMILIES = [
153
- { name: "Ionicons", component: Ionicons__default.default, getGlyphMap: () => glyphMapOf(Ionicons__default.default) },
154
- { name: "MaterialIcons", component: MaterialIcons__default.default, getGlyphMap: () => glyphMapOf(MaterialIcons__default.default) },
155
- { name: "FontAwesome5", component: FontAwesome5__default.default, getGlyphMap: () => glyphMapOf(FontAwesome5__default.default) },
156
- { name: "Entypo", component: Entypo__default.default, getGlyphMap: () => glyphMapOf(Entypo__default.default) },
157
- { name: "AntDesign", component: AntDesign__default.default, getGlyphMap: () => glyphMapOf(AntDesign__default.default) },
158
- { name: "Feather", component: Feather__default.default, getGlyphMap: () => glyphMapOf(Feather__default.default) }
36
+ { name: "Feather", component: Feather__default.default },
37
+ { name: "AntDesign", component: AntDesign__default.default },
38
+ { name: "Entypo", component: Entypo__default.default },
39
+ { name: "FontAwesome5", component: FontAwesome5__default.default },
40
+ { name: "MaterialIcons", component: MaterialIcons__default.default },
41
+ { name: "Ionicons", component: Ionicons__default.default }
159
42
  ];
160
- var activeFamilies = ALL_FAMILIES;
161
- var resolvedCache = null;
162
- function buildCache(families) {
163
- const cache = /* @__PURE__ */ new Map();
164
- for (const family of activeFamilies) {
165
- const glyphMap = family.getGlyphMap();
166
- for (const iconName of Object.keys(glyphMap)) {
167
- cache.set(iconName, family);
43
+ var glyphCacheInitialized = false;
44
+ function ensureGlyphCache() {
45
+ if (glyphCacheInitialized) return;
46
+ glyphCacheInitialized = true;
47
+ for (const entry of ALL_FAMILIES) {
48
+ try {
49
+ entry.glyphMap = entry.component.glyphMap;
50
+ } catch {
51
+ entry.glyphMap = {};
168
52
  }
169
53
  }
170
- return cache;
171
- }
172
- function resolveFamily(name) {
173
- if (!resolvedCache) {
174
- resolvedCache = buildCache();
175
- }
176
- return resolvedCache.get(name) ?? null;
177
54
  }
178
55
  function Icon({ name, size, color, family }) {
179
- let resolved = null;
180
- if (family) {
181
- resolved = ALL_FAMILIES.find((f) => f.name === family) ?? null;
182
- } else {
183
- resolved = resolveFamily(name);
184
- }
185
- if (!resolved) return null;
186
- const Component = resolved.component;
187
- return React4__default.default.createElement(Component, { name, size, color });
188
- }
189
- function renderIcon(name, size, color) {
190
- return React4__default.default.createElement(Icon, { name, size, color });
56
+ ensureGlyphCache();
57
+ const entry = family ? ALL_FAMILIES.find((f) => f.name === family) : ALL_FAMILIES.find((f) => {
58
+ const glyphMap = f.glyphMap;
59
+ return glyphMap ? name in glyphMap : false;
60
+ });
61
+ if (!entry) return null;
62
+ return React4__default.default.createElement(entry.component, { name, size, color });
191
63
  }
192
64
 
193
65
  // src/utils/curatedIcons.ts
194
- var CURATED_ICONS = [
195
- // ─── Food ────────────────────────────────────────────────────────────────────
66
+ var CATEGORIES = [
196
67
  {
197
- name: "food",
198
- label: "Food",
199
- labelEs: "Comida",
200
- categoryIcon: "coffee",
201
- icons: [
202
- // Bebidas
203
- "beer-outline",
204
- "wine-outline",
205
- "cafe-outline",
206
- "water-outline",
207
- "coffee",
208
- // Comida
209
- "pizza-outline",
210
- "fast-food-outline",
211
- "fish-outline",
212
- "ice-cream-outline",
213
- "egg-outline",
214
- "nutrition-outline",
215
- // Servicio y operación
216
- "restaurant-outline",
217
- "server-outline",
218
- "menu-outline",
219
- "basket-outline",
220
- "receipt-outline",
221
- "pricetag-outline",
222
- "pricetags-outline",
223
- "reorder-four-outline",
224
- "reorder-three-outline",
225
- "cart-outline",
226
- "cash-outline",
227
- "wallet-outline",
228
- "storefront-outline",
229
- // Delivery / pedidos
230
- "truck",
231
- "package",
232
- "shopping-bag",
233
- "shopping-cart",
234
- // Ubicación y reserva
235
- "map-pin",
236
- "home",
237
- "calendar",
238
- "clock",
239
- // Experiencia
240
- "star",
241
- "heart",
242
- "bookmark",
243
- "thumbs-up",
244
- "check",
245
- "gift"
246
- ]
247
- },
248
- // ─── Sports ──────────────────────────────────────────────────────────────────
249
- {
250
- name: "sports",
251
- label: "Sports",
252
- labelEs: "Deportes",
253
- categoryIcon: "trophy-outline",
254
- icons: [
255
- // Deportes
256
- "american-football-outline",
257
- "baseball-outline",
258
- "basketball-outline",
259
- "bicycle-outline",
260
- "football-outline",
261
- "tennisball-outline",
262
- "golf-outline",
263
- "fitness-outline",
264
- "car-sport-outline",
265
- "game-controller-outline",
266
- // Competición y logros
267
- "trophy-outline",
268
- "medal-outline",
269
- "award",
270
- "target",
271
- "flag",
272
- "crosshair",
273
- // Outdoor
274
- "compass-outline",
275
- "map-outline",
276
- "trail-sign-outline",
277
- "bonfire-outline",
278
- "snow-outline",
279
- "flame-outline",
280
- "sun",
281
- "droplet",
282
- "wind",
283
- "map",
284
- "map-pin",
285
- "navigation",
286
- "navigation-2",
287
- // Rendimiento y métricas
288
- "stats-chart-outline",
289
- "trending-up-outline",
290
- "trending-down-outline",
291
- "bar-chart-outline",
292
- "pie-chart-outline",
293
- "analytics-outline",
294
- "activity",
295
- "zap",
296
- "watch",
297
- "trending-up",
298
- "trending-down",
299
- "bar-chart-2",
300
- "clock",
301
- "calendar"
302
- ]
303
- },
304
- // ─── Business ────────────────────────────────────────────────────────────────
305
- {
306
- name: "business",
307
- label: "Business",
308
- labelEs: "Negocios",
309
- categoryIcon: "briefcase",
310
- icons: [
311
- // Empresa
312
- "briefcase",
313
- "users",
314
- "user",
315
- "user-plus",
316
- "user-check",
317
- "user-x",
318
- "briefcase-outline",
319
- "business-outline",
320
- "id-card-outline",
321
- // Comercio y operación
322
- "shopping-cart",
323
- "shopping-bag",
324
- "credit-card",
325
- "dollar-sign",
326
- "percent",
327
- "tag",
328
- "gift",
329
- "cart-outline",
330
- "cash-outline",
331
- "wallet-outline",
332
- "storefront-outline",
333
- "pricetag-outline",
334
- "pricetags-outline",
335
- "receipt-outline",
336
- "card-outline",
337
- // Logística
338
- "truck",
339
- "package",
340
- // Documentos
341
- "file",
342
- "file-text",
343
- "file-plus",
344
- "folder",
345
- "paperclip",
346
- "document-outline",
347
- "document-text-outline",
348
- "documents-outline",
349
- "folder-outline",
350
- // Comunicación de negocio
351
- "mail",
352
- "phone",
353
- "phone-call",
354
- "send",
355
- "message-square",
356
- "mail-outline",
357
- // Análisis
358
- "bar-chart",
359
- "bar-chart-2",
360
- "pie-chart",
361
- "trending-up",
362
- "trending-down",
363
- "activity",
364
- "globe"
365
- ]
366
- },
367
- // ─── Objects ─────────────────────────────────────────────────────────────────
368
- {
369
- name: "objects",
370
- label: "Objects",
371
- labelEs: "Objetos",
372
- categoryIcon: "package",
373
- icons: [
374
- // Archivos y carpetas
375
- "file",
376
- "file-text",
377
- "file-plus",
378
- "file-minus",
379
- "folder",
380
- "folder-plus",
381
- "folder-minus",
382
- "archive",
383
- "save",
384
- "paperclip",
385
- "document-outline",
386
- "document-text-outline",
387
- "documents-outline",
388
- "folder-outline",
389
- "folder-open-outline",
390
- "file-tray-outline",
391
- "file-tray-full-outline",
392
- "file-tray-stacked-outline",
393
- "archive-outline",
394
- "save-outline",
395
- // Seguridad
396
- "lock",
397
- "unlock",
398
- "key",
399
- "shield",
400
- "shield-off",
401
- "lock-closed-outline",
402
- "lock-open-outline",
403
- "key-outline",
404
- "shield-outline",
405
- "shield-checkmark-outline",
406
- // Dispositivos
407
- "monitor",
408
- "tablet",
409
- "smartphone",
410
- "tv",
411
- "server",
412
- "database",
413
- "hard-drive",
414
- "cpu",
415
- "radio",
416
- "laptop-outline",
417
- "phone-portrait-outline",
418
- "phone-landscape-outline",
419
- "tablet-landscape-outline",
420
- "tablet-portrait-outline",
421
- "tv-outline",
422
- "server-outline",
423
- "hardware-chip-outline",
424
- "watch-outline"
425
- ]
426
- },
427
- // ─── Status ──────────────────────────────────────────────────────────────────
428
- {
429
- name: "status",
430
- label: "Status",
431
- labelEs: "Estado",
432
- categoryIcon: "alert-circle",
433
- icons: [
434
- // Alertas
435
- "alert-circle",
436
- "alert-triangle",
437
- "alert-octagon",
438
- "info",
439
- "help-circle",
440
- "alert-circle-outline",
441
- "alert-outline",
442
- "information-circle-outline",
443
- "help-circle-outline",
444
- // Notificaciones
445
- "bell",
446
- "bell-off",
447
- "notifications-outline",
448
- "notifications-off-outline",
449
- "notifications-circle-outline",
450
- // Visibilidad
451
- "eye",
452
- "eye-off",
453
- "eye-outline",
454
- "eye-off-outline",
455
- // Indicadores
456
- "flag",
457
- "zap",
458
- "zap-off",
459
- "loader",
460
- "activity",
461
- "flash-outline",
462
- "bulb-outline",
463
- // Éxito / error / advertencia
464
- "check",
465
- "check-circle",
466
- "x",
467
- "x-circle",
468
- "x-octagon",
469
- "slash",
470
- "plus-circle",
471
- "minus-circle",
472
- "checkmark-circle-outline",
473
- "checkmark-done-circle-outline",
474
- "close-circle-outline",
475
- "add-circle-outline",
476
- "remove-circle-outline",
477
- // Estados de proceso
478
- "play-circle",
479
- "pause-circle",
480
- "stop-circle",
481
- "play-circle-outline",
482
- "pause-circle-outline",
483
- "stop-circle-outline"
484
- ]
485
- },
486
- // ─── Actions ─────────────────────────────────────────────────────────────────
487
- {
488
- name: "actions",
68
+ name: "acciones",
489
69
  label: "Actions",
490
70
  labelEs: "Acciones",
491
- categoryIcon: "edit-3",
71
+ categoryIcon: "zap",
492
72
  icons: [
493
- // Crear / añadir
494
73
  "plus",
495
- "plus-circle",
496
- "plus-square",
497
- "add-outline",
498
- "add-circle-outline",
499
- // Eliminar / quitar
500
- "minus",
501
- "minus-circle",
502
- "minus-square",
503
- "trash",
504
- "trash-2",
505
74
  "x",
506
- "x-circle",
507
- "x-square",
508
- "x-octagon",
509
- "slash",
510
- "trash-outline",
511
- "trash-bin-outline",
512
- "remove-outline",
513
- "remove-circle-outline",
514
- "close-circle-outline",
515
- "backspace-outline",
516
- "cut-outline",
517
- // Confirmar
518
75
  "check",
519
- "check-circle",
520
- "check-square",
521
- "checkmark-circle-outline",
522
- // Editar
523
- "edit",
524
76
  "edit-2",
525
- "edit-3",
77
+ "search",
78
+ "settings",
79
+ "filter",
80
+ "trash-2",
526
81
  "copy",
527
- "clipboard",
528
- "scissors",
529
- "create-outline",
530
- "pencil-outline",
531
- "duplicate-outline",
532
- "copy-outline",
533
- "clipboard-outline",
534
- // Mover datos
82
+ "save",
83
+ "share-2",
535
84
  "download",
536
- "download-cloud",
537
85
  "upload",
538
- "upload-cloud",
539
- "download-outline",
540
- "cloud-download-outline",
541
- "cloud-upload-outline"
86
+ "refresh-cw",
87
+ "lock",
88
+ "bookmark",
89
+ "heart",
90
+ "star",
91
+ "flag",
92
+ "link-2"
542
93
  ]
543
94
  },
544
- // ─── Communication ───────────────────────────────────────────────────────────
545
95
  {
546
- name: "communication",
96
+ name: "comunicacion",
547
97
  label: "Communication",
548
98
  labelEs: "Comunicaci\xF3n",
549
- categoryIcon: "message-circle",
99
+ categoryIcon: "mail",
550
100
  icons: [
551
- // Mensajería
101
+ "mail",
552
102
  "message-circle",
553
103
  "message-square",
554
- "send",
555
- "mail",
556
- "inbox",
557
- "at-sign",
558
- "mail-outline",
559
- "mail-open-outline",
560
- "mail-unread-outline",
561
- "chatbubble-outline",
562
- "chatbubble-ellipses-outline",
563
- "chatbubbles-outline",
564
- "send-outline",
565
- "attach-outline",
566
- "at-outline",
567
- "at-circle-outline",
568
- // Llamadas
569
104
  "phone",
570
105
  "phone-call",
106
+ "phone-forwarded",
571
107
  "phone-incoming",
572
- "phone-outgoing",
573
108
  "phone-missed",
574
109
  "phone-off",
575
- "phone-forwarded",
576
- "voicemail",
577
- "call-outline",
578
- "phone-portrait-outline",
579
- "phone-landscape-outline",
580
- // Personas
581
- "user",
582
- "user-plus",
583
- "user-minus",
584
- "user-check",
585
- "user-x",
586
- "users",
587
- "person-outline",
588
- "person-circle-outline",
589
- "person-add-outline",
590
- "person-remove-outline",
591
- "people-outline",
592
- "people-circle-outline",
593
- // Reacciones
594
- "smile",
595
- "frown",
596
- "meh",
597
- "heart",
598
- "thumbs-up",
599
- "thumbs-down",
600
- "happy-outline",
601
- "sad-outline",
602
- "heart-outline",
603
- "thumbs-up-outline",
604
- "thumbs-down-outline"
110
+ "phone-outgoing",
111
+ "send",
112
+ "at-sign",
113
+ "paperclip",
114
+ "inbox",
115
+ "volume",
116
+ "volume-1",
117
+ "volume-2",
118
+ "volume-x",
119
+ "mic",
120
+ "mic-off"
605
121
  ]
606
122
  },
607
- // ─── Navigation ──────────────────────────────────────────────────────────────
608
123
  {
609
- name: "navigation",
124
+ name: "navegacion",
610
125
  label: "Navigation",
611
126
  labelEs: "Navegaci\xF3n",
612
- categoryIcon: "compass",
127
+ categoryIcon: "map-pin",
613
128
  icons: [
614
- // Flechas cardinales
615
129
  "arrow-up",
616
130
  "arrow-down",
617
131
  "arrow-left",
618
132
  "arrow-right",
619
- "arrow-up-left",
620
- "arrow-up-right",
621
- "arrow-down-left",
622
- "arrow-down-right",
623
- "arrow-up-outline",
624
- "arrow-down-outline",
625
- "arrow-back-outline",
626
- "arrow-forward-outline",
627
- "arrow-undo-outline",
628
- "arrow-redo-outline",
629
- // Chevrones
630
133
  "chevron-up",
631
134
  "chevron-down",
632
135
  "chevron-left",
@@ -635,409 +138,200 @@ var CURATED_ICONS = [
635
138
  "chevrons-down",
636
139
  "chevrons-left",
637
140
  "chevrons-right",
638
- "chevron-up-outline",
639
- "chevron-down-outline",
640
- "chevron-back-outline",
641
- "chevron-forward-outline",
642
- "chevron-collapse-outline",
643
- "chevron-expand-outline",
644
- // Esquinas
141
+ "arrow-up-circle",
142
+ "arrow-down-circle",
143
+ "arrow-left-circle",
144
+ "arrow-right-circle",
645
145
  "corner-up-left",
646
146
  "corner-up-right",
647
147
  "corner-down-left",
648
- "corner-down-right",
649
- "corner-left-up",
650
- "corner-left-down",
651
- "corner-right-up",
652
- "corner-right-down",
653
- // Giro / refrescar
654
- "refresh-cw",
655
- "refresh-ccw",
656
- "rotate-cw",
657
- "rotate-ccw",
658
- "refresh-outline",
659
- "reload-outline",
660
- // Orientación y mapa
661
- "navigation",
662
- "navigation-2",
663
- "compass",
664
- "map",
148
+ "corner-down-right"
149
+ ]
150
+ },
151
+ {
152
+ name: "comida",
153
+ label: "Food",
154
+ labelEs: "Comida",
155
+ categoryIcon: "coffee",
156
+ icons: [
157
+ "coffee",
158
+ "shopping-bag",
159
+ "shopping-cart",
160
+ "package",
161
+ "box",
162
+ "tag",
163
+ "truck",
164
+ "gift",
165
+ "award",
166
+ "star",
167
+ "heart",
168
+ "zap",
169
+ "sun",
170
+ "moon",
171
+ "cloud",
172
+ "droplet",
173
+ "thermometer",
174
+ "wind",
665
175
  "map-pin",
176
+ "home"
177
+ ]
178
+ },
179
+ {
180
+ name: "negocios",
181
+ label: "Business",
182
+ labelEs: "Negocios",
183
+ categoryIcon: "briefcase",
184
+ icons: [
185
+ "briefcase",
186
+ "dollar-sign",
187
+ "credit-card",
188
+ "bar-chart",
189
+ "bar-chart-2",
190
+ "pie-chart",
191
+ "trending-up",
192
+ "trending-down",
193
+ "activity",
666
194
  "target",
667
- "crosshair",
668
- "home",
669
- "anchor",
670
- "compass-outline",
671
- "map-outline",
672
- "location-outline",
673
- "navigate-outline",
674
- "pin-outline",
675
- "home-outline"
195
+ "hash",
196
+ "percent",
197
+ "file-text",
198
+ "folder",
199
+ "clipboard",
200
+ "calendar",
201
+ "clock",
202
+ "database",
203
+ "archive",
204
+ "terminal"
205
+ ]
206
+ },
207
+ {
208
+ name: "perfil",
209
+ label: "Profile",
210
+ labelEs: "Perfil",
211
+ categoryIcon: "user",
212
+ icons: [
213
+ "user",
214
+ "users",
215
+ "user-check",
216
+ "user-x",
217
+ "user-plus",
218
+ "user-minus",
219
+ "key",
220
+ "shield",
221
+ "shield-off",
222
+ "lock",
223
+ "unlock",
224
+ "log-in",
225
+ "log-out",
226
+ "eye",
227
+ "eye-off",
228
+ "bell",
229
+ "bell-off",
230
+ "settings",
231
+ "tool",
232
+ "sliders"
676
233
  ]
677
234
  },
678
- // ─── Media ───────────────────────────────────────────────────────────────────
679
235
  {
680
- name: "media",
236
+ name: "multimedia",
681
237
  label: "Media",
682
- labelEs: "Medios",
683
- categoryIcon: "image",
238
+ labelEs: "Multimedia",
239
+ categoryIcon: "camera",
684
240
  icons: [
685
- // Visual
686
- "image",
687
- "film",
688
- "video",
689
- "video-off",
690
241
  "camera",
691
242
  "camera-off",
692
- "image-outline",
693
- "images-outline",
694
- "film-outline",
695
- "videocam-outline",
696
- "videocam-off-outline",
697
- "camera-outline",
698
- "camera-reverse-outline",
699
- // Reproducción
700
- "play",
701
- "play-circle",
702
- "pause",
703
- "pause-circle",
704
- "square",
705
- "stop-circle",
706
- "fast-forward",
707
- "rewind",
708
- "skip-forward",
709
- "skip-back",
710
- "repeat",
711
- "shuffle",
712
- "play-outline",
713
- "pause-outline",
714
- "play-circle-outline",
715
- "pause-circle-outline",
716
- "stop-circle-outline",
717
- "play-back-outline",
718
- "play-forward-outline",
719
- "play-skip-back-outline",
720
- "play-skip-forward-outline",
721
- "repeat-outline",
722
- "shuffle-outline",
723
- // Audio
243
+ "video",
244
+ "video-off",
245
+ "film",
724
246
  "music",
247
+ "music-off",
725
248
  "headphones",
726
249
  "speaker",
727
- "volume",
728
- "volume-1",
729
- "volume-2",
730
- "volume-x",
731
- "mic",
732
- "mic-off",
733
- "mic-outline",
734
- "mic-off-outline",
735
- "mic-circle-outline",
736
- "musical-note-outline",
737
- "musical-notes-outline",
738
- "volume-high-outline",
739
- "volume-low-outline",
740
- "volume-medium-outline",
741
- "volume-mute-outline",
742
- "volume-off-outline"
250
+ "radio",
251
+ "image",
252
+ "images",
253
+ "play",
254
+ "pause",
255
+ "stop",
256
+ "skip-back",
257
+ "skip-forward",
258
+ "monitor",
259
+ "smart-phone",
260
+ "tablet"
743
261
  ]
744
262
  },
745
- // ─── Layout ──────────────────────────────────────────────────────────────────
746
263
  {
747
- name: "layout",
748
- label: "Layout",
749
- labelEs: "Dise\xF1o",
750
- categoryIcon: "grid",
264
+ name: "texto",
265
+ label: "Text",
266
+ labelEs: "Texto",
267
+ categoryIcon: "type",
751
268
  icons: [
752
- // Estructura
753
- "grid",
754
- "columns",
755
- "sidebar",
756
- "layout",
757
- "list",
758
- "menu",
759
- "table",
760
- "trello",
761
- "grid-outline",
762
- "list-outline",
763
- "menu-outline",
764
- "layers-outline",
765
- // Alineación
269
+ "type",
270
+ "bold",
271
+ "italic",
272
+ "underline",
766
273
  "align-left",
767
274
  "align-center",
768
275
  "align-right",
769
276
  "align-justify",
770
- // Tipografía
771
- "bold",
772
- "italic",
773
- "underline",
774
- "type",
775
- "hash",
776
- // Formas
277
+ "list",
278
+ "columns",
279
+ "sidebar",
280
+ "minimize-2",
281
+ "maximize-2",
282
+ "edit-3",
283
+ "feather",
777
284
  "circle",
778
285
  "square",
779
- "triangle",
780
- "hexagon",
781
- "octagon",
782
- "square-outline",
783
- "triangle-outline",
784
- "diamond-outline",
785
- "shapes-outline",
786
- // Herramientas de diseño
787
- "pen-tool",
788
- "crop",
789
- "layers",
790
- "filter",
791
- "sliders",
792
- "aperture",
793
- "crop-outline",
794
- "filter-outline",
795
- "color-fill-outline",
796
- "color-filter-outline",
797
- "color-palette-outline",
798
- "color-wand-outline",
799
- "brush-outline",
800
- // Edición
801
- "edit",
802
- "edit-2",
803
- "edit-3",
804
- "copy",
805
- "trash",
806
- "move",
807
- "create-outline",
808
- "pencil-outline",
809
- "move-outline",
810
- "resize-outline",
811
- "duplicate-outline",
812
- // Navegación UI
813
- "more-horizontal",
814
- "more-vertical",
815
- "maximize",
816
- "minimize",
817
- "zoom-in",
818
- "zoom-out",
819
- "eye",
820
- "eye-off",
821
- "eye-outline",
822
- "eye-off-outline",
823
- "ellipsis-horizontal-circle-outline",
824
- "ellipsis-vertical-circle-outline"
825
- ]
826
- },
827
- // ─── Nature ──────────────────────────────────────────────────────────────────
828
- {
829
- name: "nature",
830
- label: "Nature",
831
- labelEs: "Naturaleza",
832
- categoryIcon: "sunny-outline",
833
- icons: [
834
- // Sol, luna y estrellas
835
- "sunny-outline",
836
- "moon-outline",
837
- "star-outline",
838
- "star-half-outline",
839
- "partly-sunny-outline",
840
- "sun",
841
- "moon",
842
- "sunrise",
843
- "sunset",
844
- // Clima
845
- "rainy-outline",
846
- "thunderstorm-outline",
847
- "snow-outline",
848
- "cloudy-outline",
849
- "cloudy-night-outline",
850
- "cloud-outline",
851
- "cloud-done-outline",
852
- "cloud-download-outline",
853
- "cloud-upload-outline",
854
- "cloud-offline-outline",
855
- "cloud-circle-outline",
856
- "cloud",
857
- "cloud-drizzle",
858
- "cloud-lightning",
859
- "cloud-rain",
860
- "cloud-snow",
861
- "cloud-off",
862
- "umbrella-outline",
863
- "thermometer-outline",
864
- "droplet",
865
- "wind",
866
- // Agua y fuego
867
- "water-outline",
868
- "flame-outline",
869
- "bonfire-outline",
870
- "eyedrop-outline",
871
- // Flora y fauna
872
- "leaf-outline",
873
- "flower-outline",
874
- "bug-outline",
875
- "fish-outline",
876
- "paw-outline",
877
- // Outdoor
878
- "binoculars-outline",
879
- "telescope-outline",
880
- "compass-outline",
881
- "map-outline",
882
- "location-outline",
883
- "flag-outline",
884
- "trail-sign-outline",
885
- "earth-outline",
886
- "globe-outline",
887
- "planet-outline",
888
- "compass",
889
- "map",
890
- "map-pin",
891
- "flag",
892
- "navigation",
893
- "navigation-2",
894
- "target",
895
- "crosshair",
896
- "life-buoy"
897
- ]
898
- },
899
- // ─── Brands ──────────────────────────────────────────────────────────────────
900
- {
901
- name: "brands",
902
- label: "Brands",
903
- labelEs: "Marcas",
904
- categoryIcon: "globe",
905
- icons: [
906
- // Feather brand icons — outlined, consistent with the rest of the library
907
- "github",
908
- "gitlab",
909
- "codepen",
910
- "codesandbox",
911
- "twitter",
912
- "facebook",
913
- "instagram",
914
- "linkedin",
915
- "youtube",
916
- "dribbble",
917
- "twitch",
918
- "slack",
919
- "figma",
920
- "framer",
921
- "chrome",
922
- "rss",
923
- // Filled / flat brand logos (FA5 brands) — kept in a second
924
- // visual tier. Rendered as the brand's official silhouette.
925
- // Visually consistent (all flat single-color) but heavier than the
926
- // Feather outlined set above. Use these only when an outlined Feather
927
- // version of the brand doesn't exist.
928
- "reddit",
929
- "tiktok",
930
- "pinterest",
931
- "whatsapp",
932
- "discord",
933
- "snapchat",
934
- "telegram",
935
- "viber",
936
- "line",
937
- "vimeo",
938
- "tumblr",
939
- "behance",
940
- "medium",
941
- "soundcloud",
942
- "google",
943
- "apple",
944
- "android",
945
- "windows",
946
- "linux",
947
- "amazon",
948
- "paypal",
949
- "stripe",
950
- "shopify",
951
- "dropbox",
952
- "spotify",
953
- "steam",
954
- "atlassian",
955
- "jira",
956
- "confluence",
957
- "bitbucket",
958
- "jenkins",
959
- "docker",
960
- "aws",
961
- "node",
962
- "react",
963
- "angular",
964
- "wordpress",
965
- "drupal",
966
- "joomla",
967
- "squarespace",
968
- "wix",
969
- "magento",
970
- "terminal",
971
- "pen-tool"
286
+ "plus-circle",
287
+ "minus-circle",
288
+ "x-circle"
972
289
  ]
973
290
  }
974
291
  ];
975
- var ALL_CURATED_ICONS = [
976
- ...new Set(CURATED_ICONS.flatMap((c) => c.icons))
977
- ];
978
- var _haptics = null;
979
- var _hapticsLoaded = false;
980
- async function getHaptics() {
981
- if (reactNative.Platform.OS === "web") return null;
982
- if (!_hapticsLoaded) {
983
- _hapticsLoaded = true;
984
- try {
985
- _haptics = await import('expo-haptics');
986
- } catch {
987
- _haptics = null;
292
+ var _allIcons = null;
293
+ var _categorized = null;
294
+ function getAllCuratedIcons() {
295
+ if (!_allIcons) {
296
+ const seen = /* @__PURE__ */ new Set();
297
+ const result = [];
298
+ for (const cat of CATEGORIES) {
299
+ for (const name of cat.icons) {
300
+ if (!seen.has(name)) {
301
+ seen.add(name);
302
+ result.push(name);
303
+ }
304
+ }
988
305
  }
306
+ _allIcons = result;
989
307
  }
990
- return _haptics;
308
+ return _allIcons;
991
309
  }
992
- var _pulsar = null;
993
- var _pulsarChecked = false;
994
- var _pulsarAvailable = false;
995
- function isPulsarNativeRegistered() {
996
- try {
997
- const g = globalThis;
998
- if (typeof g.__turboModuleProxy === "function") {
999
- return g.__turboModuleProxy("RNPulsar") != null;
1000
- }
1001
- return reactNative.NativeModules?.RNPulsar != null;
1002
- } catch {
1003
- return false;
310
+ function getCuratedCategories() {
311
+ if (!_categorized) {
312
+ _categorized = CATEGORIES.map((cat) => ({ ...cat, icons: [...cat.icons] }));
1004
313
  }
314
+ return _categorized;
1005
315
  }
1006
- function getPulsar() {
316
+ var _haptics = null;
317
+ var _loaded = false;
318
+ async function getHaptics() {
1007
319
  if (reactNative.Platform.OS === "web") return null;
1008
- if (!_pulsarChecked) {
1009
- _pulsarChecked = true;
320
+ if (!_loaded) {
321
+ _loaded = true;
1010
322
  try {
1011
- if (isPulsarNativeRegistered()) {
1012
- _pulsar = __require("react-native-pulsar");
1013
- _pulsarAvailable = true;
1014
- }
323
+ _haptics = await import('expo-haptics');
1015
324
  } catch {
1016
- _pulsar = null;
1017
- _pulsarAvailable = false;
325
+ _haptics = null;
1018
326
  }
1019
327
  }
1020
- return _pulsarAvailable ? _pulsar : null;
328
+ return _haptics;
1021
329
  }
1022
330
  function selectionAsync() {
1023
- if (reactNative.Platform.OS === "web") return;
1024
- getHaptics().then((h) => {
1025
- if (h) {
1026
- h.selectionAsync();
1027
- } else {
1028
- getPulsar()?.Presets.System.selection();
1029
- }
1030
- });
331
+ getHaptics().then((h) => h?.selectionAsync());
1031
332
  }
1032
333
  function impactMedium() {
1033
- if (reactNative.Platform.OS === "web") return;
1034
- getHaptics().then((h) => {
1035
- if (h) {
1036
- h.impactAsync(h.ImpactFeedbackStyle.Medium);
1037
- } else {
1038
- getPulsar()?.Presets.System.impactMedium();
1039
- }
1040
- });
334
+ getHaptics().then((h) => h?.impactAsync(h.ImpactFeedbackStyle.Medium));
1041
335
  }
1042
336
  var isWeb = reactNative.Platform.OS === "web";
1043
337
  var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
@@ -1052,7 +346,7 @@ var RADIUS = {
1052
346
  };
1053
347
  var sizeMap = {
1054
348
  sm: "small",
1055
- md: "small",
349
+ md: "large",
1056
350
  lg: "large"
1057
351
  };
1058
352
  var labelFontSize = {
@@ -1062,7 +356,7 @@ var labelFontSize = {
1062
356
  };
1063
357
  function Spinner({ size = "md", color, label, ...props }) {
1064
358
  const { colors } = useTheme();
1065
- const a11yLabel = label || "Loading";
359
+ const a11yLabel = label || "Cargando";
1066
360
  if (label) {
1067
361
  return /* @__PURE__ */ React4__default.default.createElement(
1068
362
  reactNative.View,
@@ -1130,7 +424,7 @@ function IconCell({ name, selected, size, onPress }) {
1130
424
  accessibilityLabel: name,
1131
425
  style: [styles2.cell, { width: size, height: size, backgroundColor: bg }]
1132
426
  },
1133
- renderIcon(name, ms(20), iconColor)
427
+ /* @__PURE__ */ React4__default.default.createElement(Icon, { name, size: ms(20), color: iconColor })
1134
428
  );
1135
429
  }
1136
430
  var IconCellMemo = React4__default.default.memo(IconCell);
@@ -1154,10 +448,11 @@ function IconPicker({
1154
448
  const [ready, setReady] = React4.useState(false);
1155
449
  const sheetName = React4.useId();
1156
450
  const activeIcons = React4.useMemo(() => {
451
+ const allIcons = getAllCuratedIcons();
1157
452
  if (activeCategory) {
1158
- return CURATED_ICONS.find((c) => c.name === activeCategory)?.icons ?? ALL_CURATED_ICONS;
453
+ return getCuratedCategories().find((c) => c.name === activeCategory)?.icons ?? allIcons;
1159
454
  }
1160
- return ALL_CURATED_ICONS;
455
+ return allIcons;
1161
456
  }, [activeCategory]);
1162
457
  const gapPx = s(gap);
1163
458
  const cellSize = containerWidth > 0 ? Math.floor((containerWidth - gapPx * (numColumns - 1)) / numColumns) : 0;
@@ -1189,7 +484,7 @@ function IconPicker({
1189
484
  (props) => /* @__PURE__ */ React4__default.default.createElement(bottomSheet.BottomSheetBackdrop, { ...props, disappearsOnIndex: -1, appearsOnIndex: 0, pressBehavior: "close" }),
1190
485
  []
1191
486
  );
1192
- const selectedIcon = value ? renderIcon(value, ms(28), colors.foreground) : null;
487
+ const selectedIcon = value ? /* @__PURE__ */ React4__default.default.createElement(Icon, { name: value, size: ms(28), color: colors.foreground }) : null;
1193
488
  return /* @__PURE__ */ React4__default.default.createElement(reactNative.View, { style: [styles2.triggerContainer, style] }, label ? /* @__PURE__ */ React4__default.default.createElement(reactNative.Text, { style: [styles2.triggerLabel, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React4__default.default.createElement(
1194
489
  reactNative.TouchableOpacity,
1195
490
  {
@@ -1211,7 +506,7 @@ function IconPicker({
1211
506
  disabled && styles2.triggerDisabled
1212
507
  ]
1213
508
  },
1214
- selectedIcon ?? renderIcon("plus", ms(24), colors.foregroundMuted)
509
+ selectedIcon ?? /* @__PURE__ */ React4__default.default.createElement(Icon, { name: "plus", size: ms(24), color: colors.foregroundMuted })
1215
510
  ), error ? /* @__PURE__ */ React4__default.default.createElement(
1216
511
  reactNative.Text,
1217
512
  {
@@ -1266,7 +561,7 @@ function IconPicker({
1266
561
  activeOpacity: 0.7,
1267
562
  touchSoundDisabled: true,
1268
563
  accessibilityRole: "button",
1269
- accessibilityLabel: "Todos",
564
+ accessibilityLabel: "Todas",
1270
565
  accessibilityState: { selected: activeCategory === null },
1271
566
  style: [
1272
567
  styles2.categoryChip,
@@ -1276,7 +571,7 @@ function IconPicker({
1276
571
  }
1277
572
  ]
1278
573
  },
1279
- /* @__PURE__ */ React4__default.default.createElement(reactNative.View, { style: styles2.categoryChipInner }, renderIcon("grid", ms(14), activeCategory === null ? colors.primaryForeground : colors.foregroundSubtle), /* @__PURE__ */ React4__default.default.createElement(
574
+ /* @__PURE__ */ React4__default.default.createElement(reactNative.View, { style: styles2.categoryChipInner }, /* @__PURE__ */ React4__default.default.createElement(Icon, { name: "grid", size: ms(14), color: activeCategory === null ? colors.primaryForeground : colors.foregroundSubtle }), /* @__PURE__ */ React4__default.default.createElement(
1280
575
  reactNative.Text,
1281
576
  {
1282
577
  style: [
@@ -1286,10 +581,10 @@ function IconPicker({
1286
581
  allowFontScaling: true,
1287
582
  numberOfLines: 1
1288
583
  },
1289
- "Todos"
584
+ "Todas"
1290
585
  ))
1291
586
  ),
1292
- CURATED_ICONS.map((cat) => /* @__PURE__ */ React4__default.default.createElement(
587
+ getCuratedCategories().map((cat) => /* @__PURE__ */ React4__default.default.createElement(
1293
588
  reactNative.TouchableOpacity,
1294
589
  {
1295
590
  key: cat.name,
@@ -1307,7 +602,7 @@ function IconPicker({
1307
602
  }
1308
603
  ]
1309
604
  },
1310
- /* @__PURE__ */ React4__default.default.createElement(reactNative.View, { style: styles2.categoryChipInner }, renderIcon(cat.categoryIcon, ms(14), activeCategory === cat.name ? colors.primaryForeground : colors.foregroundSubtle), /* @__PURE__ */ React4__default.default.createElement(
605
+ /* @__PURE__ */ React4__default.default.createElement(reactNative.View, { style: styles2.categoryChipInner }, /* @__PURE__ */ React4__default.default.createElement(Icon, { name: cat.categoryIcon, size: ms(14), color: activeCategory === cat.name ? colors.primaryForeground : colors.foregroundSubtle }), /* @__PURE__ */ React4__default.default.createElement(
1311
606
  reactNative.Text,
1312
607
  {
1313
608
  style: [