@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
@@ -1,40 +1,4 @@
1
- /**
2
- * Curated icon set — 12 categories, themed icons, all outlined style.
3
- * Ordered by usage probability: most-common categories first, niche last.
4
- *
5
- * All names resolve across 6 @expo/vector-icons families via renderIcon().
6
- * Priority (lowest→highest): Ionicons → MaterialIcons → FontAwesome5 → Entypo → AntDesign → Feather.
7
- * Feather is the highest priority — any name it has wins over all other families.
8
- *
9
- * ICON FAMILY RULES (strict):
10
- * - Feather (stroke-outlined, always safe) — first choice for utility icons. ✅
11
- * - Ionicons `-outline` suffix for domain-specific icons (food, sports, nature). ✅
12
- * These names don't exist in any higher-priority family, so they resolve
13
- * cleanly to Ionicons outline style — no collisions, no filled rendering.
14
- * - FontAwesome5 brand glyphs (github, twitter, etc.) — consistent flat brand
15
- * logos in the Brands category. They render as the official brand silhouette
16
- * and are visually consistent across all brands.
17
- * - AntDesign (filled) ❌ NEVER — renders filled.
18
- * - Entypo (filled) ❌ NEVER — renders filled.
19
- * - MaterialIcons (filled) ❌ NEVER — renders filled.
20
- * - Ionicons base (filled) ❌ NEVER — always use the `-outline` variant.
21
- * - FA5 regular/solid substyles (filled) ❌ NEVER.
22
- *
23
- * THEMATIC RULE (strict):
24
- * - Every icon must be directly relevant to its category. No generic
25
- * filler. Contextual relevance is allowed (e.g. truck/map-pin in Food
26
- * for delivery/location), but icons that fit in any category (phone,
27
- * mail, bell, search, etc.) are NOT used as filler — they belong in
28
- * the appropriate category (Communication / Status / Actions).
29
- * - No duplicate concepts per category (don't list both `arrow-up` and
30
- * `arrow-up-outline` — pick the best outlined version once).
31
- *
32
- * Verify: check glyphMaps in node_modules/@expo/vector-icons/build/vendor/
33
- * react-native-vector-icons/glyphmaps/
34
- * - Feather.json, Ionicons.json, FA5Free.json, FA5Free_meta.json
35
- */
36
-
37
- export interface IconCategory {
1
+ export interface CuratedCategoryDef {
38
2
  name: string
39
3
  label: string
40
4
  labelEs: string
@@ -42,808 +6,136 @@ export interface IconCategory {
42
6
  icons: string[]
43
7
  }
44
8
 
45
- export const CURATED_ICONS: IconCategory[] = [
46
- // ─── Food ────────────────────────────────────────────────────────────────────
9
+ const CATEGORIES: CuratedCategoryDef[] = [
47
10
  {
48
- name: 'food',
49
- label: 'Food',
50
- labelEs: 'Comida',
51
- categoryIcon: 'coffee',
52
- icons: [
53
- // Bebidas
54
- 'beer-outline',
55
- 'wine-outline',
56
- 'cafe-outline',
57
- 'water-outline',
58
- 'coffee',
59
- // Comida
60
- 'pizza-outline',
61
- 'fast-food-outline',
62
- 'fish-outline',
63
- 'ice-cream-outline',
64
- 'egg-outline',
65
- 'nutrition-outline',
66
- // Servicio y operación
67
- 'restaurant-outline',
68
- 'server-outline',
69
- 'menu-outline',
70
- 'basket-outline',
71
- 'receipt-outline',
72
- 'pricetag-outline',
73
- 'pricetags-outline',
74
- 'reorder-four-outline',
75
- 'reorder-three-outline',
76
- 'cart-outline',
77
- 'cash-outline',
78
- 'wallet-outline',
79
- 'storefront-outline',
80
- // Delivery / pedidos
81
- 'truck',
82
- 'package',
83
- 'shopping-bag',
84
- 'shopping-cart',
85
- // Ubicación y reserva
86
- 'map-pin',
87
- 'home',
88
- 'calendar',
89
- 'clock',
90
- // Experiencia
91
- 'star',
92
- 'heart',
93
- 'bookmark',
94
- 'thumbs-up',
95
- 'check',
96
- 'gift',
97
- ],
98
- },
99
-
100
- // ─── Sports ──────────────────────────────────────────────────────────────────
101
- {
102
- name: 'sports',
103
- label: 'Sports',
104
- labelEs: 'Deportes',
105
- categoryIcon: 'trophy-outline',
106
- icons: [
107
- // Deportes
108
- 'american-football-outline',
109
- 'baseball-outline',
110
- 'basketball-outline',
111
- 'bicycle-outline',
112
- 'football-outline',
113
- 'tennisball-outline',
114
- 'golf-outline',
115
- 'fitness-outline',
116
- 'car-sport-outline',
117
- 'game-controller-outline',
118
- // Competición y logros
119
- 'trophy-outline',
120
- 'medal-outline',
121
- 'award',
122
- 'target',
123
- 'flag',
124
- 'crosshair',
125
- // Outdoor
126
- 'compass-outline',
127
- 'map-outline',
128
- 'trail-sign-outline',
129
- 'bonfire-outline',
130
- 'snow-outline',
131
- 'flame-outline',
132
- 'sun',
133
- 'droplet',
134
- 'wind',
135
- 'map',
136
- 'map-pin',
137
- 'navigation',
138
- 'navigation-2',
139
- // Rendimiento y métricas
140
- 'stats-chart-outline',
141
- 'trending-up-outline',
142
- 'trending-down-outline',
143
- 'bar-chart-outline',
144
- 'pie-chart-outline',
145
- 'analytics-outline',
146
- 'activity',
147
- 'zap',
148
- 'watch',
149
- 'trending-up',
150
- 'trending-down',
151
- 'bar-chart-2',
152
- 'clock',
153
- 'calendar',
154
- ],
155
- },
156
-
157
- // ─── Business ────────────────────────────────────────────────────────────────
158
- {
159
- name: 'business',
160
- label: 'Business',
161
- labelEs: 'Negocios',
162
- categoryIcon: 'briefcase',
163
- icons: [
164
- // Empresa
165
- 'briefcase',
166
- 'users',
167
- 'user',
168
- 'user-plus',
169
- 'user-check',
170
- 'user-x',
171
- 'briefcase-outline',
172
- 'business-outline',
173
- 'id-card-outline',
174
- // Comercio y operación
175
- 'shopping-cart',
176
- 'shopping-bag',
177
- 'credit-card',
178
- 'dollar-sign',
179
- 'percent',
180
- 'tag',
181
- 'gift',
182
- 'cart-outline',
183
- 'cash-outline',
184
- 'wallet-outline',
185
- 'storefront-outline',
186
- 'pricetag-outline',
187
- 'pricetags-outline',
188
- 'receipt-outline',
189
- 'card-outline',
190
- // Logística
191
- 'truck',
192
- 'package',
193
- // Documentos
194
- 'file',
195
- 'file-text',
196
- 'file-plus',
197
- 'folder',
198
- 'paperclip',
199
- 'document-outline',
200
- 'document-text-outline',
201
- 'documents-outline',
202
- 'folder-outline',
203
- // Comunicación de negocio
204
- 'mail',
205
- 'phone',
206
- 'phone-call',
207
- 'send',
208
- 'message-square',
209
- 'mail-outline',
210
- // Análisis
211
- 'bar-chart',
212
- 'bar-chart-2',
213
- 'pie-chart',
214
- 'trending-up',
215
- 'trending-down',
216
- 'activity',
217
- 'globe',
218
- ],
219
- },
220
-
221
- // ─── Objects ─────────────────────────────────────────────────────────────────
222
- {
223
- name: 'objects',
224
- label: 'Objects',
225
- labelEs: 'Objetos',
226
- categoryIcon: 'package',
227
- icons: [
228
- // Archivos y carpetas
229
- 'file',
230
- 'file-text',
231
- 'file-plus',
232
- 'file-minus',
233
- 'folder',
234
- 'folder-plus',
235
- 'folder-minus',
236
- 'archive',
237
- 'save',
238
- 'paperclip',
239
- 'document-outline',
240
- 'document-text-outline',
241
- 'documents-outline',
242
- 'folder-outline',
243
- 'folder-open-outline',
244
- 'file-tray-outline',
245
- 'file-tray-full-outline',
246
- 'file-tray-stacked-outline',
247
- 'archive-outline',
248
- 'save-outline',
249
- // Seguridad
250
- 'lock',
251
- 'unlock',
252
- 'key',
253
- 'shield',
254
- 'shield-off',
255
- 'lock-closed-outline',
256
- 'lock-open-outline',
257
- 'key-outline',
258
- 'shield-outline',
259
- 'shield-checkmark-outline',
260
- // Dispositivos
261
- 'monitor',
262
- 'tablet',
263
- 'smartphone',
264
- 'tv',
265
- 'server',
266
- 'database',
267
- 'hard-drive',
268
- 'cpu',
269
- 'radio',
270
- 'laptop-outline',
271
- 'phone-portrait-outline',
272
- 'phone-landscape-outline',
273
- 'tablet-landscape-outline',
274
- 'tablet-portrait-outline',
275
- 'tv-outline',
276
- 'server-outline',
277
- 'hardware-chip-outline',
278
- 'watch-outline',
279
- ],
280
- },
281
-
282
- // ─── Status ──────────────────────────────────────────────────────────────────
283
- {
284
- name: 'status',
285
- label: 'Status',
286
- labelEs: 'Estado',
287
- categoryIcon: 'alert-circle',
288
- icons: [
289
- // Alertas
290
- 'alert-circle',
291
- 'alert-triangle',
292
- 'alert-octagon',
293
- 'info',
294
- 'help-circle',
295
- 'alert-circle-outline',
296
- 'alert-outline',
297
- 'information-circle-outline',
298
- 'help-circle-outline',
299
- // Notificaciones
300
- 'bell',
301
- 'bell-off',
302
- 'notifications-outline',
303
- 'notifications-off-outline',
304
- 'notifications-circle-outline',
305
- // Visibilidad
306
- 'eye',
307
- 'eye-off',
308
- 'eye-outline',
309
- 'eye-off-outline',
310
- // Indicadores
311
- 'flag',
312
- 'zap',
313
- 'zap-off',
314
- 'loader',
315
- 'activity',
316
- 'flash-outline',
317
- 'bulb-outline',
318
- // Éxito / error / advertencia
319
- 'check',
320
- 'check-circle',
321
- 'x',
322
- 'x-circle',
323
- 'x-octagon',
324
- 'slash',
325
- 'plus-circle',
326
- 'minus-circle',
327
- 'checkmark-circle-outline',
328
- 'checkmark-done-circle-outline',
329
- 'close-circle-outline',
330
- 'add-circle-outline',
331
- 'remove-circle-outline',
332
- // Estados de proceso
333
- 'play-circle',
334
- 'pause-circle',
335
- 'stop-circle',
336
- 'play-circle-outline',
337
- 'pause-circle-outline',
338
- 'stop-circle-outline',
339
- ],
340
- },
341
-
342
- // ─── Actions ─────────────────────────────────────────────────────────────────
343
- {
344
- name: 'actions',
11
+ name: 'acciones',
345
12
  label: 'Actions',
346
13
  labelEs: 'Acciones',
347
- categoryIcon: 'edit-3',
14
+ categoryIcon: 'zap',
348
15
  icons: [
349
- // Crear / añadir
350
- 'plus',
351
- 'plus-circle',
352
- 'plus-square',
353
- 'add-outline',
354
- 'add-circle-outline',
355
- // Eliminar / quitar
356
- 'minus',
357
- 'minus-circle',
358
- 'minus-square',
359
- 'trash',
360
- 'trash-2',
361
- 'x',
362
- 'x-circle',
363
- 'x-square',
364
- 'x-octagon',
365
- 'slash',
366
- 'trash-outline',
367
- 'trash-bin-outline',
368
- 'remove-outline',
369
- 'remove-circle-outline',
370
- 'close-circle-outline',
371
- 'backspace-outline',
372
- 'cut-outline',
373
- // Confirmar
374
- 'check',
375
- 'check-circle',
376
- 'check-square',
377
- 'checkmark-circle-outline',
378
- // Editar
379
- 'edit',
380
- 'edit-2',
381
- 'edit-3',
382
- 'copy',
383
- 'clipboard',
384
- 'scissors',
385
- 'create-outline',
386
- 'pencil-outline',
387
- 'duplicate-outline',
388
- 'copy-outline',
389
- 'clipboard-outline',
390
- // Mover datos
391
- 'download',
392
- 'download-cloud',
393
- 'upload',
394
- 'upload-cloud',
395
- 'download-outline',
396
- 'cloud-download-outline',
397
- 'cloud-upload-outline',
16
+ 'plus', 'x', 'check', 'edit-2', 'search',
17
+ 'settings', 'filter', 'trash-2', 'copy', 'save',
18
+ 'share-2', 'download', 'upload', 'refresh-cw', 'lock',
19
+ 'bookmark', 'heart', 'star', 'flag', 'link-2',
398
20
  ],
399
21
  },
400
-
401
- // ─── Communication ───────────────────────────────────────────────────────────
402
22
  {
403
- name: 'communication',
23
+ name: 'comunicacion',
404
24
  label: 'Communication',
405
25
  labelEs: 'Comunicación',
406
- categoryIcon: 'message-circle',
26
+ categoryIcon: 'mail',
407
27
  icons: [
408
- // Mensajería
409
- 'message-circle',
410
- 'message-square',
411
- 'send',
412
- 'mail',
413
- 'inbox',
414
- 'at-sign',
415
- 'mail-outline',
416
- 'mail-open-outline',
417
- 'mail-unread-outline',
418
- 'chatbubble-outline',
419
- 'chatbubble-ellipses-outline',
420
- 'chatbubbles-outline',
421
- 'send-outline',
422
- 'attach-outline',
423
- 'at-outline',
424
- 'at-circle-outline',
425
- // Llamadas
426
- 'phone',
427
- 'phone-call',
428
- 'phone-incoming',
429
- 'phone-outgoing',
430
- 'phone-missed',
431
- 'phone-off',
432
- 'phone-forwarded',
433
- 'voicemail',
434
- 'call-outline',
435
- 'phone-portrait-outline',
436
- 'phone-landscape-outline',
437
- // Personas
438
- 'user',
439
- 'user-plus',
440
- 'user-minus',
441
- 'user-check',
442
- 'user-x',
443
- 'users',
444
- 'person-outline',
445
- 'person-circle-outline',
446
- 'person-add-outline',
447
- 'person-remove-outline',
448
- 'people-outline',
449
- 'people-circle-outline',
450
- // Reacciones
451
- 'smile',
452
- 'frown',
453
- 'meh',
454
- 'heart',
455
- 'thumbs-up',
456
- 'thumbs-down',
457
- 'happy-outline',
458
- 'sad-outline',
459
- 'heart-outline',
460
- 'thumbs-up-outline',
461
- 'thumbs-down-outline',
28
+ 'mail', 'message-circle', 'message-square', 'phone', 'phone-call',
29
+ 'phone-forwarded', 'phone-incoming', 'phone-missed', 'phone-off', 'phone-outgoing',
30
+ 'send', 'at-sign', 'paperclip', 'inbox', 'volume',
31
+ 'volume-1', 'volume-2', 'volume-x', 'mic', 'mic-off',
462
32
  ],
463
33
  },
464
-
465
- // ─── Navigation ──────────────────────────────────────────────────────────────
466
34
  {
467
- name: 'navigation',
35
+ name: 'navegacion',
468
36
  label: 'Navigation',
469
37
  labelEs: 'Navegación',
470
- categoryIcon: 'compass',
38
+ categoryIcon: 'map-pin',
471
39
  icons: [
472
- // Flechas cardinales
473
- 'arrow-up',
474
- 'arrow-down',
475
- 'arrow-left',
476
- 'arrow-right',
477
- 'arrow-up-left',
478
- 'arrow-up-right',
479
- 'arrow-down-left',
480
- 'arrow-down-right',
481
- 'arrow-up-outline',
482
- 'arrow-down-outline',
483
- 'arrow-back-outline',
484
- 'arrow-forward-outline',
485
- 'arrow-undo-outline',
486
- 'arrow-redo-outline',
487
- // Chevrones
488
- 'chevron-up',
489
- 'chevron-down',
490
- 'chevron-left',
491
- 'chevron-right',
492
- 'chevrons-up',
493
- 'chevrons-down',
494
- 'chevrons-left',
495
- 'chevrons-right',
496
- 'chevron-up-outline',
497
- 'chevron-down-outline',
498
- 'chevron-back-outline',
499
- 'chevron-forward-outline',
500
- 'chevron-collapse-outline',
501
- 'chevron-expand-outline',
502
- // Esquinas
503
- 'corner-up-left',
504
- 'corner-up-right',
505
- 'corner-down-left',
506
- 'corner-down-right',
507
- 'corner-left-up',
508
- 'corner-left-down',
509
- 'corner-right-up',
510
- 'corner-right-down',
511
- // Giro / refrescar
512
- 'refresh-cw',
513
- 'refresh-ccw',
514
- 'rotate-cw',
515
- 'rotate-ccw',
516
- 'refresh-outline',
517
- 'reload-outline',
518
- // Orientación y mapa
519
- 'navigation',
520
- 'navigation-2',
521
- 'compass',
522
- 'map',
523
- 'map-pin',
524
- 'target',
525
- 'crosshair',
526
- 'home',
527
- 'anchor',
528
- 'compass-outline',
529
- 'map-outline',
530
- 'location-outline',
531
- 'navigate-outline',
532
- 'pin-outline',
533
- 'home-outline',
40
+ 'arrow-up', 'arrow-down', 'arrow-left', 'arrow-right',
41
+ 'chevron-up', 'chevron-down', 'chevron-left', 'chevron-right',
42
+ 'chevrons-up', 'chevrons-down', 'chevrons-left', 'chevrons-right',
43
+ 'arrow-up-circle', 'arrow-down-circle', 'arrow-left-circle', 'arrow-right-circle',
44
+ 'corner-up-left', 'corner-up-right', 'corner-down-left', 'corner-down-right',
534
45
  ],
535
46
  },
536
-
537
- // ─── Media ───────────────────────────────────────────────────────────────────
538
47
  {
539
- name: 'media',
540
- label: 'Media',
541
- labelEs: 'Medios',
542
- categoryIcon: 'image',
48
+ name: 'comida',
49
+ label: 'Food',
50
+ labelEs: 'Comida',
51
+ categoryIcon: 'coffee',
543
52
  icons: [
544
- // Visual
545
- 'image',
546
- 'film',
547
- 'video',
548
- 'video-off',
549
- 'camera',
550
- 'camera-off',
551
- 'image-outline',
552
- 'images-outline',
553
- 'film-outline',
554
- 'videocam-outline',
555
- 'videocam-off-outline',
556
- 'camera-outline',
557
- 'camera-reverse-outline',
558
- // Reproducción
559
- 'play',
560
- 'play-circle',
561
- 'pause',
562
- 'pause-circle',
563
- 'square',
564
- 'stop-circle',
565
- 'fast-forward',
566
- 'rewind',
567
- 'skip-forward',
568
- 'skip-back',
569
- 'repeat',
570
- 'shuffle',
571
- 'play-outline',
572
- 'pause-outline',
573
- 'play-circle-outline',
574
- 'pause-circle-outline',
575
- 'stop-circle-outline',
576
- 'play-back-outline',
577
- 'play-forward-outline',
578
- 'play-skip-back-outline',
579
- 'play-skip-forward-outline',
580
- 'repeat-outline',
581
- 'shuffle-outline',
582
- // Audio
583
- 'music',
584
- 'headphones',
585
- 'speaker',
586
- 'volume',
587
- 'volume-1',
588
- 'volume-2',
589
- 'volume-x',
590
- 'mic',
591
- 'mic-off',
592
- 'mic-outline',
593
- 'mic-off-outline',
594
- 'mic-circle-outline',
595
- 'musical-note-outline',
596
- 'musical-notes-outline',
597
- 'volume-high-outline',
598
- 'volume-low-outline',
599
- 'volume-medium-outline',
600
- 'volume-mute-outline',
601
- 'volume-off-outline',
53
+ 'coffee', 'shopping-bag', 'shopping-cart', 'package', 'box',
54
+ 'tag', 'truck', 'gift', 'award', 'star',
55
+ 'heart', 'zap', 'sun', 'moon', 'cloud',
56
+ 'droplet', 'thermometer', 'wind', 'map-pin', 'home',
57
+ ],
58
+ },
59
+ {
60
+ name: 'negocios',
61
+ label: 'Business',
62
+ labelEs: 'Negocios',
63
+ categoryIcon: 'briefcase',
64
+ icons: [
65
+ 'briefcase', 'dollar-sign', 'credit-card', 'bar-chart', 'bar-chart-2',
66
+ 'pie-chart', 'trending-up', 'trending-down', 'activity', 'target',
67
+ 'hash', 'percent', 'file-text', 'folder', 'clipboard',
68
+ 'calendar', 'clock', 'database', 'archive', 'terminal',
602
69
  ],
603
70
  },
604
-
605
- // ─── Layout ──────────────────────────────────────────────────────────────────
606
71
  {
607
- name: 'layout',
608
- label: 'Layout',
609
- labelEs: 'Diseño',
610
- categoryIcon: 'grid',
72
+ name: 'perfil',
73
+ label: 'Profile',
74
+ labelEs: 'Perfil',
75
+ categoryIcon: 'user',
611
76
  icons: [
612
- // Estructura
613
- 'grid',
614
- 'columns',
615
- 'sidebar',
616
- 'layout',
617
- 'list',
618
- 'menu',
619
- 'table',
620
- 'trello',
621
- 'grid-outline',
622
- 'list-outline',
623
- 'menu-outline',
624
- 'layers-outline',
625
- // Alineación
626
- 'align-left',
627
- 'align-center',
628
- 'align-right',
629
- 'align-justify',
630
- // Tipografía
631
- 'bold',
632
- 'italic',
633
- 'underline',
634
- 'type',
635
- 'hash',
636
- // Formas
637
- 'circle',
638
- 'square',
639
- 'triangle',
640
- 'hexagon',
641
- 'octagon',
642
- 'square-outline',
643
- 'triangle-outline',
644
- 'diamond-outline',
645
- 'shapes-outline',
646
- // Herramientas de diseño
647
- 'pen-tool',
648
- 'crop',
649
- 'layers',
650
- 'filter',
651
- 'sliders',
652
- 'aperture',
653
- 'crop-outline',
654
- 'filter-outline',
655
- 'color-fill-outline',
656
- 'color-filter-outline',
657
- 'color-palette-outline',
658
- 'color-wand-outline',
659
- 'brush-outline',
660
- // Edición
661
- 'edit',
662
- 'edit-2',
663
- 'edit-3',
664
- 'copy',
665
- 'trash',
666
- 'move',
667
- 'create-outline',
668
- 'pencil-outline',
669
- 'move-outline',
670
- 'resize-outline',
671
- 'duplicate-outline',
672
- // Navegación UI
673
- 'more-horizontal',
674
- 'more-vertical',
675
- 'maximize',
676
- 'minimize',
677
- 'zoom-in',
678
- 'zoom-out',
679
- 'eye',
680
- 'eye-off',
681
- 'eye-outline',
682
- 'eye-off-outline',
683
- 'ellipsis-horizontal-circle-outline',
684
- 'ellipsis-vertical-circle-outline',
77
+ 'user', 'users', 'user-check', 'user-x', 'user-plus',
78
+ 'user-minus', 'key', 'shield', 'shield-off', 'lock',
79
+ 'unlock', 'log-in', 'log-out', 'eye', 'eye-off',
80
+ 'bell', 'bell-off', 'settings', 'tool', 'sliders',
685
81
  ],
686
82
  },
687
-
688
- // ─── Nature ──────────────────────────────────────────────────────────────────
689
83
  {
690
- name: 'nature',
691
- label: 'Nature',
692
- labelEs: 'Naturaleza',
693
- categoryIcon: 'sunny-outline',
84
+ name: 'multimedia',
85
+ label: 'Media',
86
+ labelEs: 'Multimedia',
87
+ categoryIcon: 'camera',
694
88
  icons: [
695
- // Sol, luna y estrellas
696
- 'sunny-outline',
697
- 'moon-outline',
698
- 'star-outline',
699
- 'star-half-outline',
700
- 'partly-sunny-outline',
701
- 'sun',
702
- 'moon',
703
- 'sunrise',
704
- 'sunset',
705
- // Clima
706
- 'rainy-outline',
707
- 'thunderstorm-outline',
708
- 'snow-outline',
709
- 'cloudy-outline',
710
- 'cloudy-night-outline',
711
- 'cloud-outline',
712
- 'cloud-done-outline',
713
- 'cloud-download-outline',
714
- 'cloud-upload-outline',
715
- 'cloud-offline-outline',
716
- 'cloud-circle-outline',
717
- 'cloud',
718
- 'cloud-drizzle',
719
- 'cloud-lightning',
720
- 'cloud-rain',
721
- 'cloud-snow',
722
- 'cloud-off',
723
- 'umbrella-outline',
724
- 'thermometer-outline',
725
- 'droplet',
726
- 'wind',
727
- // Agua y fuego
728
- 'water-outline',
729
- 'flame-outline',
730
- 'bonfire-outline',
731
- 'eyedrop-outline',
732
- // Flora y fauna
733
- 'leaf-outline',
734
- 'flower-outline',
735
- 'bug-outline',
736
- 'fish-outline',
737
- 'paw-outline',
738
- // Outdoor
739
- 'binoculars-outline',
740
- 'telescope-outline',
741
- 'compass-outline',
742
- 'map-outline',
743
- 'location-outline',
744
- 'flag-outline',
745
- 'trail-sign-outline',
746
- 'earth-outline',
747
- 'globe-outline',
748
- 'planet-outline',
749
- 'compass',
750
- 'map',
751
- 'map-pin',
752
- 'flag',
753
- 'navigation',
754
- 'navigation-2',
755
- 'target',
756
- 'crosshair',
757
- 'life-buoy',
89
+ 'camera', 'camera-off', 'video', 'video-off', 'film',
90
+ 'music', 'music-off', 'headphones', 'speaker', 'radio',
91
+ 'image', 'images', 'play', 'pause', 'stop',
92
+ 'skip-back', 'skip-forward', 'monitor', 'smart-phone', 'tablet',
758
93
  ],
759
94
  },
760
-
761
- // ─── Brands ──────────────────────────────────────────────────────────────────
762
95
  {
763
- name: 'brands',
764
- label: 'Brands',
765
- labelEs: 'Marcas',
766
- categoryIcon: 'globe',
96
+ name: 'texto',
97
+ label: 'Text',
98
+ labelEs: 'Texto',
99
+ categoryIcon: 'type',
767
100
  icons: [
768
- // Feather brand icons — outlined, consistent with the rest of the library
769
- 'github',
770
- 'gitlab',
771
- 'codepen',
772
- 'codesandbox',
773
- 'twitter',
774
- 'facebook',
775
- 'instagram',
776
- 'linkedin',
777
- 'youtube',
778
- 'dribbble',
779
- 'twitch',
780
- 'slack',
781
- 'figma',
782
- 'framer',
783
- 'chrome',
784
- 'rss',
785
- // Filled / flat brand logos (FA5 brands) — kept in a second
786
- // visual tier. Rendered as the brand's official silhouette.
787
- // Visually consistent (all flat single-color) but heavier than the
788
- // Feather outlined set above. Use these only when an outlined Feather
789
- // version of the brand doesn't exist.
790
- 'reddit',
791
- 'tiktok',
792
- 'pinterest',
793
- 'whatsapp',
794
- 'discord',
795
- 'snapchat',
796
- 'telegram',
797
- 'viber',
798
- 'line',
799
- 'vimeo',
800
- 'tumblr',
801
- 'behance',
802
- 'medium',
803
- 'soundcloud',
804
- 'google',
805
- 'apple',
806
- 'android',
807
- 'windows',
808
- 'linux',
809
- 'amazon',
810
- 'paypal',
811
- 'stripe',
812
- 'shopify',
813
- 'dropbox',
814
- 'spotify',
815
- 'steam',
816
- 'atlassian',
817
- 'jira',
818
- 'confluence',
819
- 'bitbucket',
820
- 'jenkins',
821
- 'docker',
822
- 'aws',
823
- 'node',
824
- 'react',
825
- 'angular',
826
- 'wordpress',
827
- 'drupal',
828
- 'joomla',
829
- 'squarespace',
830
- 'wix',
831
- 'magento',
832
- 'terminal',
833
- 'pen-tool',
101
+ 'type', 'bold', 'italic', 'underline', 'align-left',
102
+ 'align-center', 'align-right', 'align-justify', 'list', 'columns',
103
+ 'sidebar', 'minimize-2', 'maximize-2', 'edit-3', 'feather',
104
+ 'circle', 'square', 'plus-circle', 'minus-circle', 'x-circle',
834
105
  ],
835
106
  },
836
107
  ]
837
108
 
838
- /** Flat deduplicated array of all curated icon names (for "Todos" / search). */
839
- export const ALL_CURATED_ICONS: string[] = [
840
- ...new Set(CURATED_ICONS.flatMap((c) => c.icons)),
841
- ]
109
+ let _allIcons: string[] | null = null
110
+ let _categorized: CuratedCategoryDef[] | null = null
111
+
112
+ export function getAllCuratedIcons(): string[] {
113
+ if (!_allIcons) {
114
+ const seen = new Set<string>()
115
+ const result: string[] = []
116
+ for (const cat of CATEGORIES) {
117
+ for (const name of cat.icons) {
118
+ if (!seen.has(name)) {
119
+ seen.add(name)
120
+ result.push(name)
121
+ }
122
+ }
123
+ }
124
+ _allIcons = result
125
+ }
126
+ return _allIcons!
127
+ }
128
+
129
+ export function getCuratedCategories(): CuratedCategoryDef[] {
130
+ if (!_categorized) {
131
+ _categorized = CATEGORIES.map((cat) => ({ ...cat, icons: [...cat.icons] }))
132
+ }
133
+ return _categorized!
134
+ }
842
135
 
843
- /** Resolve icon to its category label, or undefined if not found. */
844
136
  export function getIconCategory(name: string): string | undefined {
845
- for (const cat of CURATED_ICONS) {
846
- if (cat.icons.includes(name)) return cat.label
137
+ for (const cat of CATEGORIES) {
138
+ if (cat.icons.includes(name)) return cat.labelEs
847
139
  }
848
140
  return undefined
849
141
  }