@retray-dev/ui-kit 12.2.0 → 13.2.0

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