@retray-dev/ui-kit 10.2.0 → 12.1.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 (153) hide show
  1. package/COMPONENTS.md +287 -37
  2. package/README.md +11 -2
  3. package/dist/Accordion.mjs +2 -2
  4. package/dist/AlertBanner.mjs +2 -2
  5. package/dist/AppHeader.mjs +3 -3
  6. package/dist/Avatar.mjs +2 -2
  7. package/dist/Badge.mjs +2 -2
  8. package/dist/Button.mjs +2 -2
  9. package/dist/Card.mjs +2 -2
  10. package/dist/CategoryStrip.mjs +2 -2
  11. package/dist/Checkbox.mjs +2 -2
  12. package/dist/Chip.mjs +2 -2
  13. package/dist/ConfirmDialog.d.mts +1 -6
  14. package/dist/ConfirmDialog.d.ts +1 -6
  15. package/dist/ConfirmDialog.js +29 -23
  16. package/dist/ConfirmDialog.mjs +3 -3
  17. package/dist/CurrencyDisplay.mjs +2 -2
  18. package/dist/CurrencyInput.d.mts +3 -8
  19. package/dist/CurrencyInput.d.ts +3 -8
  20. package/dist/CurrencyInput.js +3 -1
  21. package/dist/CurrencyInput.mjs +3 -3
  22. package/dist/DetailRow.mjs +2 -2
  23. package/dist/EmptyState.mjs +3 -3
  24. package/dist/ErrorBoundary.mjs +2 -2
  25. package/dist/Form.mjs +2 -2
  26. package/dist/IconButton.mjs +2 -2
  27. package/dist/IconPicker.js +675 -248
  28. package/dist/IconPicker.mjs +3 -2
  29. package/dist/ImageUpload.mjs +3 -3
  30. package/dist/ImageViewer.mjs +4 -4
  31. package/dist/Input.mjs +2 -2
  32. package/dist/LabelValue.mjs +2 -2
  33. package/dist/ListGroup.mjs +2 -2
  34. package/dist/ListItem.d.mts +7 -7
  35. package/dist/ListItem.d.ts +7 -7
  36. package/dist/ListItem.js +12 -7
  37. package/dist/ListItem.mjs +2 -2
  38. package/dist/MediaCard.mjs +2 -2
  39. package/dist/MenuGroup.mjs +2 -2
  40. package/dist/MenuItem.mjs +2 -2
  41. package/dist/MonthPicker.mjs +2 -2
  42. package/dist/NumberStepper.mjs +2 -2
  43. package/dist/PagerDots.mjs +2 -2
  44. package/dist/Pressable.d.mts +15 -7
  45. package/dist/Pressable.d.ts +15 -7
  46. package/dist/Pressable.js +7 -3
  47. package/dist/Pressable.mjs +1 -1
  48. package/dist/PricingCard.mjs +4 -4
  49. package/dist/Progress.mjs +2 -2
  50. package/dist/RadioGroup.mjs +2 -2
  51. package/dist/RetrayProvider.mjs +3 -3
  52. package/dist/Select.mjs +2 -2
  53. package/dist/SelectableGrid.mjs +2 -2
  54. package/dist/Separator.mjs +2 -2
  55. package/dist/Sheet.d.mts +4 -46
  56. package/dist/Sheet.d.ts +4 -46
  57. package/dist/Sheet.js +46 -114
  58. package/dist/Sheet.mjs +2 -3
  59. package/dist/SheetSelect.mjs +2 -2
  60. package/dist/Skeleton.mjs +2 -2
  61. package/dist/Slider.mjs +2 -2
  62. package/dist/Spinner.mjs +2 -2
  63. package/dist/Stats.d.mts +30 -0
  64. package/dist/Stats.d.ts +30 -0
  65. package/dist/Stats.js +429 -0
  66. package/dist/Stats.mjs +9 -0
  67. package/dist/Switch.mjs +2 -2
  68. package/dist/TabBar.mjs +2 -2
  69. package/dist/Tabs.mjs +2 -2
  70. package/dist/Text.d.mts +3 -1
  71. package/dist/Text.d.ts +3 -1
  72. package/dist/Text.js +3 -3
  73. package/dist/Text.mjs +2 -2
  74. package/dist/Textarea.mjs +2 -2
  75. package/dist/Toast.mjs +2 -2
  76. package/dist/Toggle.mjs +2 -2
  77. package/dist/{chunk-YJ7I257J.mjs → chunk-265G6A46.mjs} +1 -1
  78. package/dist/{chunk-ELXBDILQ.mjs → chunk-2A2LEFZG.mjs} +2 -2
  79. package/dist/{chunk-ID72TK46.mjs → chunk-2CBQKU7H.mjs} +1 -1
  80. package/dist/{chunk-OB4JUQ3O.mjs → chunk-2I2AYECM.mjs} +1 -1
  81. package/dist/{chunk-WJLKJMKR.mjs → chunk-357YO24D.mjs} +4 -4
  82. package/dist/{chunk-GQYFLP3D.mjs → chunk-3GEYJ7I5.mjs} +1 -1
  83. package/dist/{chunk-AV4EMIRH.mjs → chunk-3N2M3WZL.mjs} +1 -1
  84. package/dist/{chunk-VF2ATYN3.mjs → chunk-3UYAZ7I4.mjs} +1 -1
  85. package/dist/{chunk-JMOZEC77.mjs → chunk-4WFMPFZB.mjs} +1 -1
  86. package/dist/chunk-5OLNXP3S.mjs +144 -0
  87. package/dist/{chunk-6SECQ2ZF.mjs → chunk-7HSILTC4.mjs} +2 -2
  88. package/dist/{chunk-IRRY3CRZ.mjs → chunk-AKM4EPOT.mjs} +1 -1
  89. package/dist/{chunk-IX3NYLYQ.mjs → chunk-AQEVCEXV.mjs} +1 -1
  90. package/dist/{chunk-WBOOUHSS.mjs → chunk-BCWEHE34.mjs} +1 -1
  91. package/dist/{chunk-AJ7ZDNBT.mjs → chunk-BOVUP27T.mjs} +1 -1
  92. package/dist/{chunk-BRKYVJVV.mjs → chunk-BQZE3HAW.mjs} +1 -1
  93. package/dist/{chunk-Z6SFHN6T.mjs → chunk-D3Y2T42P.mjs} +1 -1
  94. package/dist/{chunk-T2KCAHOS.mjs → chunk-DF6DU42P.mjs} +1 -1
  95. package/dist/{chunk-TB6SD2FT.mjs → chunk-DI7CBDL6.mjs} +1 -1
  96. package/dist/{chunk-HTHGSXFG.mjs → chunk-DOGIPOF5.mjs} +1 -1
  97. package/dist/{chunk-MBMXYJJV.mjs → chunk-E7NEHHXV.mjs} +7 -3
  98. package/dist/{chunk-MX6HRKMI.mjs → chunk-EFLFRAHD.mjs} +1 -1
  99. package/dist/{chunk-SOYNZDVY.mjs → chunk-EMUWGDWC.mjs} +6 -1
  100. package/dist/{chunk-AJRVDP2H.mjs → chunk-F4V6XLP4.mjs} +3 -3
  101. package/dist/{chunk-DYT7BG5I.mjs → chunk-FA2KMTH5.mjs} +1 -1
  102. package/dist/{chunk-Y2NS74WS.mjs → chunk-FFTYLPSB.mjs} +46 -98
  103. package/dist/{chunk-VKID2D2I.mjs → chunk-FUVYSVGR.mjs} +13 -8
  104. package/dist/{chunk-7LWRKMF5.mjs → chunk-FVTVCJAH.mjs} +1 -1
  105. package/dist/{chunk-TZDGAP5N.mjs → chunk-GK4VRMNE.mjs} +2 -2
  106. package/dist/{chunk-6Q64UFIA.mjs → chunk-HJ46DTJE.mjs} +1 -1
  107. package/dist/{chunk-WF2XDFRK.mjs → chunk-HLMPMUK2.mjs} +1 -1
  108. package/dist/{chunk-GD6KXMG5.mjs → chunk-I4V5XZPS.mjs} +1 -1
  109. package/dist/{chunk-TBNZHU6C.mjs → chunk-ISY26JQJ.mjs} +2 -2
  110. package/dist/{chunk-X4G6APW6.mjs → chunk-J6Q2YJEV.mjs} +1 -1
  111. package/dist/{chunk-WYEUNUTP.mjs → chunk-JCZQOY4O.mjs} +31 -24
  112. package/dist/{chunk-U2XJFYED.mjs → chunk-JNVAIDLK.mjs} +1 -1
  113. package/dist/{chunk-SOA2Z4RB.mjs → chunk-JULSIZDM.mjs} +1 -1
  114. package/dist/chunk-KHYX4IOM.mjs +1114 -0
  115. package/dist/{chunk-RYZC432S.mjs → chunk-LRM4AVYY.mjs} +1 -1
  116. package/dist/{chunk-6L4G6PBT.mjs → chunk-MYZ2EDYU.mjs} +1 -1
  117. package/dist/{chunk-BUMAMSTZ.mjs → chunk-N4ZPVCJH.mjs} +1 -1
  118. package/dist/{chunk-Z4VHZ7B5.mjs → chunk-NXI4YDZ2.mjs} +1 -1
  119. package/dist/{chunk-ZZ2R6KZ3.mjs → chunk-OULVKTWL.mjs} +1 -1
  120. package/dist/{chunk-FCSSQK3L.mjs → chunk-P64WHW4A.mjs} +1 -1
  121. package/dist/{chunk-KOO4WITD.mjs → chunk-P73V2EKS.mjs} +1 -1
  122. package/dist/{chunk-SXLKNTA4.mjs → chunk-PGERH3P7.mjs} +1 -1
  123. package/dist/{chunk-2UYENBLV.mjs → chunk-QSFV2P7O.mjs} +1 -1
  124. package/dist/{chunk-JT7HKXRB.mjs → chunk-S3KJCPEJ.mjs} +1 -1
  125. package/dist/{chunk-BEMIQXXU.mjs → chunk-V6NFJXKO.mjs} +1 -1
  126. package/dist/{chunk-A3A6KNQN.mjs → chunk-WOEWGSTU.mjs} +1 -1
  127. package/dist/{chunk-NMU5FMQJ.mjs → chunk-X26S5EVZ.mjs} +4 -2
  128. package/dist/{chunk-YFZ3ELX5.mjs → chunk-XBAGGKLW.mjs} +2 -2
  129. package/dist/{chunk-S2R7UVOE.mjs → chunk-ZHMSAYLT.mjs} +1 -1
  130. package/dist/fonts.d.mts +1 -7
  131. package/dist/fonts.d.ts +1 -7
  132. package/dist/fonts.js +0 -2
  133. package/dist/fonts.mjs +1 -2
  134. package/dist/index.d.mts +4 -1
  135. package/dist/index.d.ts +4 -1
  136. package/dist/index.js +1184 -708
  137. package/dist/index.mjs +53 -52
  138. package/package.json +3 -3
  139. package/src/components/ConfirmDialog/ConfirmDialog.tsx +39 -30
  140. package/src/components/CurrencyInput/CurrencyInput.tsx +4 -7
  141. package/src/components/IconPicker/IconPicker.tsx +124 -112
  142. package/src/components/ListItem/ListItem.tsx +43 -28
  143. package/src/components/Pressable/Pressable.tsx +20 -8
  144. package/src/components/Sheet/Sheet.tsx +64 -172
  145. package/src/components/Stats/Stats.tsx +226 -0
  146. package/src/components/Stats/index.ts +2 -0
  147. package/src/components/Text/Text.tsx +4 -2
  148. package/src/fonts.ts +0 -7
  149. package/src/index.ts +4 -0
  150. package/src/theme/colorUtils.ts +9 -0
  151. package/src/utils/curatedIcons.ts +698 -135
  152. package/src/utils/fontGuard.ts +2 -1
  153. package/dist/chunk-53Z3NYGE.mjs +0 -742
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var React3 = require('react');
3
+ var React4 = require('react');
4
4
  var reactNative = require('react-native');
5
5
  var reactNativeGestureHandler = require('react-native-gesture-handler');
6
6
  var bottomSheet = require('@gorhom/bottom-sheet');
@@ -15,7 +15,7 @@ var reactNativeSizeMatters = require('react-native-size-matters');
15
15
 
16
16
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
17
 
18
- var React3__default = /*#__PURE__*/_interopDefault(React3);
18
+ var React4__default = /*#__PURE__*/_interopDefault(React4);
19
19
  var AntDesign__default = /*#__PURE__*/_interopDefault(AntDesign);
20
20
  var Entypo__default = /*#__PURE__*/_interopDefault(Entypo);
21
21
  var Feather__default = /*#__PURE__*/_interopDefault(Feather);
@@ -137,12 +137,12 @@ function deriveColors(t, scheme) {
137
137
  }
138
138
 
139
139
  // src/theme/ThemeProvider.tsx
140
- var ThemeContext = React3.createContext({
140
+ var ThemeContext = React4.createContext({
141
141
  colors: deriveColors(defaultLight, "light"),
142
142
  colorScheme: "light"
143
143
  });
144
144
  function useTheme() {
145
- const context = React3.useContext(ThemeContext);
145
+ const context = React4.useContext(ThemeContext);
146
146
  if (!context) {
147
147
  throw new Error("useTheme must be used within a ThemeProvider");
148
148
  }
@@ -184,14 +184,15 @@ function Icon({ name, size, color, family }) {
184
184
  }
185
185
  if (!resolved) return null;
186
186
  const Component = resolved.component;
187
- return React3__default.default.createElement(Component, { name, size, color });
187
+ return React4__default.default.createElement(Component, { name, size, color });
188
188
  }
189
189
  function renderIcon(name, size, color) {
190
- return React3__default.default.createElement(Icon, { name, size, color });
190
+ return React4__default.default.createElement(Icon, { name, size, color });
191
191
  }
192
192
 
193
193
  // src/utils/curatedIcons.ts
194
194
  var CURATED_ICONS = [
195
+ // ─── Food ────────────────────────────────────────────────────────────────────
195
196
  {
196
197
  name: "food",
197
198
  label: "Food",
@@ -199,97 +200,178 @@ var CURATED_ICONS = [
199
200
  categoryIcon: "coffee",
200
201
  icons: [
201
202
  // Bebidas
203
+ "beer-outline",
204
+ "wine-outline",
205
+ "cafe-outline",
206
+ "water-outline",
202
207
  "coffee",
203
- "wine-glass",
204
- "beer",
205
- "cocktail",
206
- "mug-hot",
207
- "glass-cheers",
208
- "wine",
209
- // Comidas
210
- "restaurant",
211
- "hamburger",
212
- "pizza-slice",
213
- "ice-cream",
214
- "cake",
215
- "egg",
216
- "fish",
217
- "bread-slice",
218
- "cookie",
219
- "cheese",
220
- "carrot",
221
- "hotdog",
222
- // Cocina / utilidades
223
- "utensils",
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",
224
229
  // Delivery / pedidos
230
+ "truck",
231
+ "package",
225
232
  "shopping-bag",
233
+ "shopping-cart",
234
+ // Ubicación y reserva
235
+ "map-pin",
236
+ "home",
237
+ "calendar",
226
238
  "clock",
239
+ // Experiencia
227
240
  "star",
228
241
  "heart",
229
- "map-pin",
230
- "phone"
242
+ "bookmark",
243
+ "thumbs-up",
244
+ "check",
245
+ "gift"
231
246
  ]
232
247
  },
248
+ // ─── Sports ──────────────────────────────────────────────────────────────────
233
249
  {
234
250
  name: "sports",
235
251
  label: "Sports",
236
252
  labelEs: "Deportes",
237
- categoryIcon: "activity",
253
+ categoryIcon: "trophy-outline",
238
254
  icons: [
239
- // Deportes específicos
240
- "futbol",
241
- "dumbbell",
242
- "running",
243
- "bicycle",
244
- "heartbeat",
245
- "fitness-center",
246
- // Competencia / logros
247
- "target",
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",
248
269
  "award",
270
+ "target",
249
271
  "flag",
250
- "star",
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",
251
295
  "zap",
252
- // Bienestar
253
- "heart",
296
+ "watch",
297
+ "trending-up",
298
+ "trending-down",
299
+ "bar-chart-2",
254
300
  "clock",
255
- "activity",
256
- "sun",
257
- "user",
258
- "users"
301
+ "calendar"
259
302
  ]
260
303
  },
304
+ // ─── Business ────────────────────────────────────────────────────────────────
261
305
  {
262
306
  name: "business",
263
307
  label: "Business",
264
308
  labelEs: "Negocios",
265
309
  categoryIcon: "briefcase",
266
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
267
322
  "shopping-cart",
268
323
  "shopping-bag",
269
324
  "credit-card",
270
325
  "dollar-sign",
271
326
  "percent",
272
- "briefcase",
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
273
338
  "truck",
274
339
  "package",
275
- "gift",
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
276
358
  "bar-chart",
277
359
  "bar-chart-2",
278
360
  "pie-chart",
279
361
  "trending-up",
280
362
  "trending-down",
281
363
  "activity",
282
- "tag",
283
- "bookmark",
284
- "pocket"
364
+ "globe"
285
365
  ]
286
366
  },
367
+ // ─── Objects ─────────────────────────────────────────────────────────────────
287
368
  {
288
369
  name: "objects",
289
370
  label: "Objects",
290
371
  labelEs: "Objetos",
291
- categoryIcon: "folder",
372
+ categoryIcon: "package",
292
373
  icons: [
374
+ // Archivos y carpetas
293
375
  "file",
294
376
  "file-text",
295
377
  "file-plus",
@@ -297,108 +379,193 @@ var CURATED_ICONS = [
297
379
  "folder",
298
380
  "folder-plus",
299
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
300
396
  "lock",
301
397
  "unlock",
302
398
  "key",
303
399
  "shield",
304
400
  "shield-off",
305
- "settings",
306
- "sliders",
307
- "toggle-left",
308
- "toggle-right",
309
- "tool",
310
- "printer",
311
- "database",
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",
312
411
  "server",
412
+ "database",
313
413
  "hard-drive",
314
414
  "cpu",
315
- "paperclip",
316
- "aperture",
317
- "box",
318
- "radio"
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"
319
425
  ]
320
426
  },
427
+ // ─── Status ──────────────────────────────────────────────────────────────────
321
428
  {
322
429
  name: "status",
323
430
  label: "Status",
324
431
  labelEs: "Estado",
325
432
  categoryIcon: "alert-circle",
326
433
  icons: [
434
+ // Alertas
327
435
  "alert-circle",
328
436
  "alert-triangle",
329
437
  "alert-octagon",
330
438
  "info",
331
439
  "help-circle",
440
+ "alert-circle-outline",
441
+ "alert-outline",
442
+ "information-circle-outline",
443
+ "help-circle-outline",
444
+ // Notificaciones
332
445
  "bell",
333
446
  "bell-off",
447
+ "notifications-outline",
448
+ "notifications-off-outline",
449
+ "notifications-circle-outline",
450
+ // Visibilidad
334
451
  "eye",
335
452
  "eye-off",
453
+ "eye-outline",
454
+ "eye-off-outline",
455
+ // Indicadores
336
456
  "flag",
337
457
  "zap",
338
458
  "zap-off",
339
459
  "loader",
340
- "clock",
341
- "watch"
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"
342
484
  ]
343
485
  },
486
+ // ─── Actions ─────────────────────────────────────────────────────────────────
344
487
  {
345
488
  name: "actions",
346
489
  label: "Actions",
347
490
  labelEs: "Acciones",
348
491
  categoryIcon: "edit-3",
349
492
  icons: [
493
+ // Crear / añadir
350
494
  "plus",
351
495
  "plus-circle",
352
496
  "plus-square",
497
+ "add-outline",
498
+ "add-circle-outline",
499
+ // Eliminar / quitar
353
500
  "minus",
354
501
  "minus-circle",
355
502
  "minus-square",
503
+ "trash",
504
+ "trash-2",
356
505
  "x",
357
506
  "x-circle",
358
507
  "x-square",
359
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
360
518
  "check",
361
519
  "check-circle",
362
520
  "check-square",
521
+ "checkmark-circle-outline",
522
+ // Editar
363
523
  "edit",
364
524
  "edit-2",
365
525
  "edit-3",
366
- "trash",
367
- "trash-2",
368
526
  "copy",
369
527
  "clipboard",
370
528
  "scissors",
529
+ "create-outline",
530
+ "pencil-outline",
531
+ "duplicate-outline",
532
+ "copy-outline",
533
+ "clipboard-outline",
534
+ // Mover datos
371
535
  "download",
372
536
  "download-cloud",
373
537
  "upload",
374
538
  "upload-cloud",
375
- "share",
376
- "share-2",
377
- "link",
378
- "link-2",
379
- "search",
380
- "zoom-in",
381
- "zoom-out",
382
- "save",
383
- "archive",
384
- "log-in",
385
- "log-out",
386
- "power",
387
- "refresh-cw",
388
- "rotate-cw",
389
- "slash"
539
+ "download-outline",
540
+ "cloud-download-outline",
541
+ "cloud-upload-outline"
390
542
  ]
391
543
  },
544
+ // ─── Communication ───────────────────────────────────────────────────────────
392
545
  {
393
546
  name: "communication",
394
547
  label: "Communication",
395
548
  labelEs: "Comunicaci\xF3n",
396
549
  categoryIcon: "message-circle",
397
550
  icons: [
398
- "mail",
551
+ // Mensajería
399
552
  "message-circle",
400
553
  "message-square",
401
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
402
569
  "phone",
403
570
  "phone-call",
404
571
  "phone-incoming",
@@ -406,30 +573,45 @@ var CURATED_ICONS = [
406
573
  "phone-missed",
407
574
  "phone-off",
408
575
  "phone-forwarded",
409
- "at-sign",
410
- "inbox",
576
+ "voicemail",
577
+ "call-outline",
578
+ "phone-portrait-outline",
579
+ "phone-landscape-outline",
580
+ // Personas
411
581
  "user",
412
582
  "user-plus",
413
583
  "user-minus",
414
584
  "user-check",
415
585
  "user-x",
416
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
417
594
  "smile",
418
595
  "frown",
419
596
  "meh",
420
597
  "heart",
421
598
  "thumbs-up",
422
599
  "thumbs-down",
423
- "star",
424
- "award"
600
+ "happy-outline",
601
+ "sad-outline",
602
+ "heart-outline",
603
+ "thumbs-up-outline",
604
+ "thumbs-down-outline"
425
605
  ]
426
606
  },
607
+ // ─── Navigation ──────────────────────────────────────────────────────────────
427
608
  {
428
609
  name: "navigation",
429
610
  label: "Navigation",
430
611
  labelEs: "Navegaci\xF3n",
431
612
  categoryIcon: "compass",
432
613
  icons: [
614
+ // Flechas cardinales
433
615
  "arrow-up",
434
616
  "arrow-down",
435
617
  "arrow-left",
@@ -438,6 +620,13 @@ var CURATED_ICONS = [
438
620
  "arrow-up-right",
439
621
  "arrow-down-left",
440
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
441
630
  "chevron-up",
442
631
  "chevron-down",
443
632
  "chevron-left",
@@ -446,6 +635,13 @@ var CURATED_ICONS = [
446
635
  "chevrons-down",
447
636
  "chevrons-left",
448
637
  "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
449
645
  "corner-up-left",
450
646
  "corner-up-right",
451
647
  "corner-down-left",
@@ -454,10 +650,14 @@ var CURATED_ICONS = [
454
650
  "corner-left-down",
455
651
  "corner-right-up",
456
652
  "corner-right-down",
653
+ // Giro / refrescar
457
654
  "refresh-cw",
458
655
  "refresh-ccw",
459
656
  "rotate-cw",
460
657
  "rotate-ccw",
658
+ "refresh-outline",
659
+ "reload-outline",
660
+ // Orientación y mapa
461
661
  "navigation",
462
662
  "navigation-2",
463
663
  "compass",
@@ -466,119 +666,248 @@ var CURATED_ICONS = [
466
666
  "target",
467
667
  "crosshair",
468
668
  "home",
469
- "maximize",
470
- "maximize-2",
471
- "minimize",
472
- "minimize-2",
473
- "external-link",
474
- "move",
475
- "anchor"
669
+ "anchor",
670
+ "compass-outline",
671
+ "map-outline",
672
+ "location-outline",
673
+ "navigate-outline",
674
+ "pin-outline",
675
+ "home-outline"
476
676
  ]
477
677
  },
678
+ // ─── Media ───────────────────────────────────────────────────────────────────
478
679
  {
479
680
  name: "media",
480
681
  label: "Media",
481
682
  labelEs: "Medios",
482
683
  categoryIcon: "image",
483
684
  icons: [
685
+ // Visual
484
686
  "image",
485
687
  "film",
486
688
  "video",
487
689
  "video-off",
690
+ "camera",
691
+ "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
488
700
  "play",
489
701
  "play-circle",
490
702
  "pause",
491
703
  "pause-circle",
492
704
  "square",
493
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
494
724
  "music",
495
725
  "headphones",
496
726
  "speaker",
497
- "camera",
498
- "camera-off",
499
- "mic",
500
- "mic-off",
501
727
  "volume",
502
728
  "volume-1",
503
729
  "volume-2",
504
730
  "volume-x",
505
- "fast-forward",
506
- "rewind",
507
- "skip-forward",
508
- "skip-back",
509
- "repeat",
510
- "shuffle",
511
- "disc"
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"
512
743
  ]
513
744
  },
745
+ // ─── Layout ──────────────────────────────────────────────────────────────────
514
746
  {
515
747
  name: "layout",
516
748
  label: "Layout",
517
749
  labelEs: "Dise\xF1o",
518
750
  categoryIcon: "grid",
519
751
  icons: [
520
- "menu",
521
- "more-horizontal",
522
- "more-vertical",
752
+ // Estructura
523
753
  "grid",
524
754
  "columns",
525
755
  "sidebar",
526
756
  "layout",
527
757
  "list",
758
+ "menu",
759
+ "table",
760
+ "trello",
761
+ "grid-outline",
762
+ "list-outline",
763
+ "menu-outline",
764
+ "layers-outline",
765
+ // Alineación
528
766
  "align-left",
529
767
  "align-center",
530
768
  "align-right",
531
769
  "align-justify",
770
+ // Tipografía
532
771
  "bold",
533
772
  "italic",
534
773
  "underline",
535
774
  "type",
536
- "filter",
537
- "crop",
538
- "layers",
539
775
  "hash",
540
- "table",
541
- "trello",
776
+ // Formas
542
777
  "circle",
543
778
  "square",
544
779
  "triangle",
545
780
  "hexagon",
546
781
  "octagon",
547
- "feather",
548
- "pen-tool"
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"
549
825
  ]
550
826
  },
827
+ // ─── Nature ──────────────────────────────────────────────────────────────────
551
828
  {
552
829
  name: "nature",
553
830
  label: "Nature",
554
831
  labelEs: "Naturaleza",
555
- categoryIcon: "sun",
832
+ categoryIcon: "sunny-outline",
556
833
  icons: [
834
+ // Sol, luna y estrellas
835
+ "sunny-outline",
836
+ "moon-outline",
837
+ "star-outline",
838
+ "star-half-outline",
839
+ "partly-sunny-outline",
557
840
  "sun",
841
+ "moon",
558
842
  "sunrise",
559
843
  "sunset",
560
- "moon",
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",
561
856
  "cloud",
562
857
  "cloud-drizzle",
563
858
  "cloud-lightning",
564
- "cloud-off",
565
859
  "cloud-rain",
566
860
  "cloud-snow",
567
- "wind",
568
- "umbrella",
569
- "thermometer",
861
+ "cloud-off",
862
+ "umbrella-outline",
863
+ "thermometer-outline",
570
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",
571
896
  "life-buoy"
572
897
  ]
573
898
  },
899
+ // ─── Brands ──────────────────────────────────────────────────────────────────
574
900
  {
575
901
  name: "brands",
576
902
  label: "Brands",
577
903
  labelEs: "Marcas",
578
904
  categoryIcon: "globe",
579
905
  icons: [
906
+ // Feather brand icons — outlined, consistent with the rest of the library
580
907
  "github",
581
908
  "gitlab",
909
+ "codepen",
910
+ "codesandbox",
582
911
  "twitter",
583
912
  "facebook",
584
913
  "instagram",
@@ -590,21 +919,56 @@ var CURATED_ICONS = [
590
919
  "figma",
591
920
  "framer",
592
921
  "chrome",
593
- "codepen",
594
- "codesandbox",
595
- "globe",
596
922
  "rss",
597
- "airplay",
598
- "cast",
599
- "bluetooth",
600
- "wifi",
601
- "wifi-off",
602
- "battery",
603
- "battery-charging",
604
- "monitor",
605
- "tablet",
606
- "smartphone",
607
- "tv"
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"
608
972
  ]
609
973
  }
610
974
  ];
@@ -679,12 +1043,68 @@ var isWeb = reactNative.Platform.OS === "web";
679
1043
  var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
680
1044
  var vs = isWeb ? (n) => n : reactNativeSizeMatters.verticalScale;
681
1045
  var ms = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateScale;
1046
+ var mvs = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateVerticalScale;
682
1047
 
683
1048
  // src/tokens.ts
684
1049
  var RADIUS = {
685
1050
  md: 14,
686
1051
  full: 9999
687
1052
  };
1053
+ var sizeMap = {
1054
+ sm: "small",
1055
+ md: "small",
1056
+ lg: "large"
1057
+ };
1058
+ var labelFontSize = {
1059
+ sm: ms(11),
1060
+ md: ms(13),
1061
+ lg: ms(14)
1062
+ };
1063
+ function Spinner({ size = "md", color, label, ...props }) {
1064
+ const { colors } = useTheme();
1065
+ const a11yLabel = label || "Loading";
1066
+ if (label) {
1067
+ return /* @__PURE__ */ React4__default.default.createElement(
1068
+ reactNative.View,
1069
+ {
1070
+ style: styles.wrapper,
1071
+ accessibilityRole: "progressbar",
1072
+ accessibilityLabel: a11yLabel,
1073
+ accessibilityState: { busy: true }
1074
+ },
1075
+ /* @__PURE__ */ React4__default.default.createElement(reactNative.ActivityIndicator, { size: sizeMap[size], color: color ?? colors.primary, ...props }),
1076
+ /* @__PURE__ */ React4__default.default.createElement(
1077
+ reactNative.Text,
1078
+ {
1079
+ style: [styles.label, { color: colors.foregroundMuted, fontSize: labelFontSize[size] }],
1080
+ allowFontScaling: true
1081
+ },
1082
+ label
1083
+ )
1084
+ );
1085
+ }
1086
+ return /* @__PURE__ */ React4__default.default.createElement(
1087
+ reactNative.ActivityIndicator,
1088
+ {
1089
+ size: sizeMap[size],
1090
+ color: color ?? colors.primary,
1091
+ accessibilityRole: "progressbar",
1092
+ accessibilityLabel: a11yLabel,
1093
+ accessibilityState: { busy: true },
1094
+ ...props
1095
+ }
1096
+ );
1097
+ }
1098
+ var styles = reactNative.StyleSheet.create({
1099
+ wrapper: {
1100
+ alignItems: "center",
1101
+ gap: vs(6)
1102
+ },
1103
+ label: {
1104
+ fontFamily: "Sohne-Regular",
1105
+ lineHeight: mvs(18)
1106
+ }
1107
+ });
688
1108
 
689
1109
  // src/components/IconPicker/IconPicker.tsx
690
1110
  var NUM_COLUMNS = 6;
@@ -699,7 +1119,7 @@ function IconCell({ name, selected, size, onPress }) {
699
1119
  };
700
1120
  const iconColor = selected ? colors.primaryForeground : colors.foreground;
701
1121
  const bg = selected ? colors.primary : "transparent";
702
- return /* @__PURE__ */ React3__default.default.createElement(
1122
+ return /* @__PURE__ */ React4__default.default.createElement(
703
1123
  reactNative.TouchableOpacity,
704
1124
  {
705
1125
  onPress: handlePress,
@@ -708,12 +1128,12 @@ function IconCell({ name, selected, size, onPress }) {
708
1128
  accessibilityRole: "button",
709
1129
  accessibilityState: { selected },
710
1130
  accessibilityLabel: name,
711
- style: [styles.cell, { width: size, height: size, backgroundColor: bg }]
1131
+ style: [styles2.cell, { width: size, height: size, backgroundColor: bg }]
712
1132
  },
713
1133
  renderIcon(name, ms(20), iconColor)
714
1134
  );
715
1135
  }
716
- var IconCellMemo = React3__default.default.memo(IconCell);
1136
+ var IconCellMemo = React4__default.default.memo(IconCell);
717
1137
  function IconPicker({
718
1138
  value,
719
1139
  onChange,
@@ -727,13 +1147,13 @@ function IconPicker({
727
1147
  }) {
728
1148
  const { colors } = useTheme();
729
1149
  const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
730
- const sheetRef = React3.useRef(null);
731
- const catScrollRef = React3.useRef(null);
732
- const [open, setOpen] = React3.useState(false);
733
- const [activeCategory, setActiveCategory] = React3.useState(null);
734
- const [containerWidth, setContainerWidth] = React3.useState(() => reactNative.Dimensions.get("window").width - s(16) * 2);
735
- const sheetName = React3.useId();
736
- const activeIcons = React3.useMemo(() => {
1150
+ const sheetRef = React4.useRef(null);
1151
+ const catScrollRef = React4.useRef(null);
1152
+ const [activeCategory, setActiveCategory] = React4.useState(null);
1153
+ const [containerWidth, setContainerWidth] = React4.useState(() => reactNative.Dimensions.get("window").width - s(16) * 2);
1154
+ const [ready, setReady] = React4.useState(false);
1155
+ const sheetName = React4.useId();
1156
+ const activeIcons = React4.useMemo(() => {
737
1157
  if (activeCategory) {
738
1158
  return CURATED_ICONS.find((c) => c.name === activeCategory)?.icons ?? ALL_CURATED_ICONS;
739
1159
  }
@@ -741,44 +1161,36 @@ function IconPicker({
741
1161
  }, [activeCategory]);
742
1162
  const gapPx = s(gap);
743
1163
  const cellSize = containerWidth > 0 ? Math.floor((containerWidth - gapPx * (numColumns - 1)) / numColumns) : 0;
744
- const rows = React3.useMemo(() => {
1164
+ const rows = React4.useMemo(() => {
745
1165
  const result = [];
746
1166
  for (let i = 0; i < activeIcons.length; i += numColumns) {
747
1167
  result.push(activeIcons.slice(i, i + numColumns));
748
1168
  }
749
1169
  return result;
750
1170
  }, [activeIcons, numColumns]);
751
- React3.useEffect(() => {
752
- if (open) {
753
- impactMedium();
754
- sheetRef.current?.present();
755
- } else {
756
- sheetRef.current?.dismiss();
757
- }
758
- }, [open]);
759
- const handleSelect = React3.useCallback(
1171
+ const handleDismiss = React4.useCallback(() => {
1172
+ setActiveCategory(null);
1173
+ setReady(false);
1174
+ }, []);
1175
+ const handleSelect = React4.useCallback(
760
1176
  (iconName) => {
761
1177
  onChange(iconName);
762
- setOpen(false);
763
- setActiveCategory(null);
764
1178
  },
765
1179
  [onChange]
766
1180
  );
767
- const handleOpen = React3.useCallback(() => {
1181
+ const handleOpen = React4.useCallback(() => {
768
1182
  if (disabled) return;
1183
+ impactMedium();
769
1184
  setActiveCategory(null);
770
- setOpen(true);
1185
+ setReady(false);
1186
+ sheetRef.current?.present();
771
1187
  }, [disabled]);
772
- const handleClose = React3.useCallback(() => {
773
- setOpen(false);
774
- setActiveCategory(null);
775
- }, []);
776
- const renderBackdrop = React3.useCallback(
777
- (props) => /* @__PURE__ */ React3__default.default.createElement(bottomSheet.BottomSheetBackdrop, { ...props, disappearsOnIndex: -1, appearsOnIndex: 0, pressBehavior: "close" }),
1188
+ const renderBackdrop = React4.useCallback(
1189
+ (props) => /* @__PURE__ */ React4__default.default.createElement(bottomSheet.BottomSheetBackdrop, { ...props, disappearsOnIndex: -1, appearsOnIndex: 0, pressBehavior: "close" }),
778
1190
  []
779
1191
  );
780
1192
  const selectedIcon = value ? renderIcon(value, ms(28), colors.foreground) : null;
781
- return /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: [styles.triggerContainer, style] }, label ? /* @__PURE__ */ React3__default.default.createElement(reactNative.Text, { style: [styles.triggerLabel, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React3__default.default.createElement(
1193
+ 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(
782
1194
  reactNative.TouchableOpacity,
783
1195
  {
784
1196
  onPress: handleOpen,
@@ -789,133 +1201,143 @@ function IconPicker({
789
1201
  accessibilityLabel: label ?? "Seleccionar icono",
790
1202
  accessibilityState: { disabled },
791
1203
  style: [
792
- styles.trigger,
1204
+ styles2.trigger,
793
1205
  {
794
1206
  backgroundColor: disabled ? colors.surface : colors.background,
795
1207
  width: TRIGGER_SIZE,
796
1208
  height: TRIGGER_SIZE,
797
1209
  borderColor: error ? colors.destructive : value ? colors.primary : colors.border
798
1210
  },
799
- disabled && styles.triggerDisabled
1211
+ disabled && styles2.triggerDisabled
800
1212
  ]
801
1213
  },
802
1214
  selectedIcon ?? renderIcon("plus", ms(24), colors.foregroundMuted)
803
- ), error ? /* @__PURE__ */ React3__default.default.createElement(
1215
+ ), error ? /* @__PURE__ */ React4__default.default.createElement(
804
1216
  reactNative.Text,
805
1217
  {
806
- style: [styles.helperText, { color: colors.destructive }],
1218
+ style: [styles2.helperText, { color: colors.destructive }],
807
1219
  allowFontScaling: true,
808
1220
  accessibilityLiveRegion: "polite"
809
1221
  },
810
1222
  error
811
- ) : null, !error && hint ? /* @__PURE__ */ React3__default.default.createElement(reactNative.Text, { style: [styles.helperText, { color: colors.foregroundMuted }], allowFontScaling: true }, hint) : null, /* @__PURE__ */ React3__default.default.createElement(
1223
+ ) : null, !error && hint ? /* @__PURE__ */ React4__default.default.createElement(reactNative.Text, { style: [styles2.helperText, { color: colors.foregroundMuted }], allowFontScaling: true }, hint) : null, /* @__PURE__ */ React4__default.default.createElement(
812
1224
  bottomSheet.BottomSheetModal,
813
1225
  {
814
1226
  ref: sheetRef,
815
1227
  name: sheetName,
816
- onDismiss: handleClose,
1228
+ onDismiss: handleDismiss,
817
1229
  enableDynamicSizing: true,
818
1230
  maxDynamicContentSize: SCREEN_HEIGHT * 0.7,
819
1231
  backdropComponent: renderBackdrop,
820
- backgroundStyle: [styles.sheetBackground, { backgroundColor: colors.card }],
821
- handleIndicatorStyle: [styles.handle, { backgroundColor: colors.border }],
1232
+ backgroundStyle: { ...styles2.sheetBackground, backgroundColor: colors.card },
1233
+ handleIndicatorStyle: { ...styles2.handle, backgroundColor: colors.border },
822
1234
  enablePanDownToClose: true,
823
1235
  topInset: insets.top,
824
1236
  android_keyboardInputMode: "adjustPan"
825
1237
  },
826
- /* @__PURE__ */ React3__default.default.createElement(
1238
+ /* @__PURE__ */ React4__default.default.createElement(
827
1239
  bottomSheet.BottomSheetScrollView,
828
1240
  {
829
- contentContainerStyle: styles.sheetContent,
1241
+ contentContainerStyle: styles2.sheetContent,
830
1242
  showsVerticalScrollIndicator: true
831
1243
  },
832
- /* @__PURE__ */ React3__default.default.createElement(reactNative.Text, { style: [styles.sectionLabel, { color: colors.foregroundSubtle }], allowFontScaling: true }, "Categor\xEDas"),
833
- /* @__PURE__ */ React3__default.default.createElement(
834
- reactNativeGestureHandler.ScrollView,
1244
+ /* @__PURE__ */ React4__default.default.createElement(
1245
+ reactNative.View,
835
1246
  {
836
- ref: catScrollRef,
837
- horizontal: true,
838
- showsHorizontalScrollIndicator: false,
839
- contentContainerStyle: styles.categoryStrip,
840
- style: styles.categoryScroll
1247
+ style: styles2.gridContainer,
1248
+ onLayout: (e) => {
1249
+ setContainerWidth(e.nativeEvent.layout.width);
1250
+ setReady(true);
1251
+ }
841
1252
  },
842
- /* @__PURE__ */ React3__default.default.createElement(
843
- reactNative.TouchableOpacity,
1253
+ !ready ? /* @__PURE__ */ React4__default.default.createElement(reactNative.View, { style: styles2.loader }, /* @__PURE__ */ React4__default.default.createElement(Spinner, { size: "md", color: colors.primary, label: "Cargando iconos..." })) : /* @__PURE__ */ React4__default.default.createElement(React4__default.default.Fragment, null, /* @__PURE__ */ React4__default.default.createElement(reactNative.Text, { style: [styles2.sectionLabel, { color: colors.foregroundSubtle }], allowFontScaling: true }, "Categor\xEDas"), /* @__PURE__ */ React4__default.default.createElement(
1254
+ reactNativeGestureHandler.ScrollView,
844
1255
  {
845
- onPress: () => setActiveCategory(null),
846
- activeOpacity: 0.7,
847
- touchSoundDisabled: true,
848
- accessibilityRole: "button",
849
- accessibilityLabel: "Todos",
850
- accessibilityState: { selected: activeCategory === null },
851
- style: [
852
- styles.categoryChip,
853
- {
854
- backgroundColor: activeCategory === null ? colors.primary : colors.surface,
855
- borderColor: activeCategory === null ? colors.primary : colors.border
856
- }
857
- ]
1256
+ ref: catScrollRef,
1257
+ horizontal: true,
1258
+ showsHorizontalScrollIndicator: false,
1259
+ contentContainerStyle: styles2.categoryStrip,
1260
+ style: styles2.categoryScroll
858
1261
  },
859
- /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.categoryChipInner }, renderIcon("grid", ms(14), activeCategory === null ? colors.primaryForeground : colors.foregroundSubtle), /* @__PURE__ */ React3__default.default.createElement(
860
- reactNative.Text,
1262
+ /* @__PURE__ */ React4__default.default.createElement(
1263
+ reactNative.TouchableOpacity,
861
1264
  {
1265
+ onPress: () => setActiveCategory(null),
1266
+ activeOpacity: 0.7,
1267
+ touchSoundDisabled: true,
1268
+ accessibilityRole: "button",
1269
+ accessibilityLabel: "Todos",
1270
+ accessibilityState: { selected: activeCategory === null },
862
1271
  style: [
863
- styles.categoryChipText,
864
- { color: activeCategory === null ? colors.primaryForeground : colors.foreground }
865
- ],
866
- allowFontScaling: true,
867
- numberOfLines: 1
1272
+ styles2.categoryChip,
1273
+ {
1274
+ backgroundColor: activeCategory === null ? colors.primary : colors.surface,
1275
+ borderColor: activeCategory === null ? colors.primary : colors.border
1276
+ }
1277
+ ]
868
1278
  },
869
- "Todos"
870
- ))
871
- ),
872
- CURATED_ICONS.map((cat) => /* @__PURE__ */ React3__default.default.createElement(
873
- reactNative.TouchableOpacity,
874
- {
875
- key: cat.name,
876
- onPress: () => setActiveCategory(cat.name),
877
- activeOpacity: 0.7,
878
- touchSoundDisabled: true,
879
- accessibilityRole: "button",
880
- accessibilityLabel: cat.labelEs,
881
- accessibilityState: { selected: activeCategory === cat.name },
882
- style: [
883
- styles.categoryChip,
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(
1280
+ reactNative.Text,
884
1281
  {
885
- backgroundColor: activeCategory === cat.name ? colors.primary : colors.surface,
886
- borderColor: activeCategory === cat.name ? colors.primary : colors.border
887
- }
888
- ]
889
- },
890
- /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.categoryChipInner }, renderIcon(cat.categoryIcon, ms(14), activeCategory === cat.name ? colors.primaryForeground : colors.foregroundSubtle), /* @__PURE__ */ React3__default.default.createElement(
891
- reactNative.Text,
1282
+ style: [
1283
+ styles2.categoryChipText,
1284
+ { color: activeCategory === null ? colors.primaryForeground : colors.foreground }
1285
+ ],
1286
+ allowFontScaling: true,
1287
+ numberOfLines: 1
1288
+ },
1289
+ "Todos"
1290
+ ))
1291
+ ),
1292
+ CURATED_ICONS.map((cat) => /* @__PURE__ */ React4__default.default.createElement(
1293
+ reactNative.TouchableOpacity,
892
1294
  {
1295
+ key: cat.name,
1296
+ onPress: () => setActiveCategory(cat.name),
1297
+ activeOpacity: 0.7,
1298
+ touchSoundDisabled: true,
1299
+ accessibilityRole: "button",
1300
+ accessibilityLabel: cat.labelEs,
1301
+ accessibilityState: { selected: activeCategory === cat.name },
893
1302
  style: [
894
- styles.categoryChipText,
895
- { color: activeCategory === cat.name ? colors.primaryForeground : colors.foreground }
896
- ],
897
- allowFontScaling: true,
898
- numberOfLines: 1
1303
+ styles2.categoryChip,
1304
+ {
1305
+ backgroundColor: activeCategory === cat.name ? colors.primary : colors.surface,
1306
+ borderColor: activeCategory === cat.name ? colors.primary : colors.border
1307
+ }
1308
+ ]
899
1309
  },
900
- cat.labelEs
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(
1311
+ reactNative.Text,
1312
+ {
1313
+ style: [
1314
+ styles2.categoryChipText,
1315
+ { color: activeCategory === cat.name ? colors.primaryForeground : colors.foreground }
1316
+ ],
1317
+ allowFontScaling: true,
1318
+ numberOfLines: 1
1319
+ },
1320
+ cat.labelEs
1321
+ ))
901
1322
  ))
902
- ))
903
- ),
904
- /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: [styles.separator, { backgroundColor: colors.border }] }),
905
- /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.gridContainer, onLayout: (e) => setContainerWidth(e.nativeEvent.layout.width) }, cellSize > 0 ? rows.map((row, i) => /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { key: row[0] ?? `row-${i}`, style: [styles.row, { marginBottom: gapPx }] }, row.map((name) => /* @__PURE__ */ React3__default.default.createElement(
906
- IconCellMemo,
907
- {
908
- key: name,
909
- name,
910
- selected: value === name,
911
- size: cellSize,
912
- onPress: () => handleSelect(name)
913
- }
914
- )), Array.from({ length: numColumns - row.length }).map((_, j) => /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { key: `spacer-${j}`, style: { width: cellSize, height: cellSize } })))) : null)
1323
+ ), /* @__PURE__ */ React4__default.default.createElement(reactNative.View, { style: [styles2.separator, { backgroundColor: colors.border }] }), cellSize > 0 ? rows.map((row, i) => /* @__PURE__ */ React4__default.default.createElement(reactNative.View, { key: row[0] ?? `row-${i}`, style: [styles2.row, { marginBottom: gapPx }] }, row.map((name) => /* @__PURE__ */ React4__default.default.createElement(
1324
+ IconCellMemo,
1325
+ {
1326
+ key: name,
1327
+ name,
1328
+ selected: value === name,
1329
+ size: cellSize,
1330
+ onPress: () => {
1331
+ handleSelect(name);
1332
+ sheetRef.current?.dismiss();
1333
+ }
1334
+ }
1335
+ )), Array.from({ length: numColumns - row.length }).map((_, j) => /* @__PURE__ */ React4__default.default.createElement(reactNative.View, { key: `spacer-${j}`, style: { width: cellSize, height: cellSize } })))) : null)
1336
+ )
915
1337
  )
916
1338
  ));
917
1339
  }
918
- var styles = reactNative.StyleSheet.create({
1340
+ var styles2 = reactNative.StyleSheet.create({
919
1341
  triggerContainer: {
920
1342
  gap: vs(8)
921
1343
  },
@@ -991,6 +1413,11 @@ var styles = reactNative.StyleSheet.create({
991
1413
  borderRadius: RADIUS.md,
992
1414
  alignItems: "center",
993
1415
  justifyContent: "center"
1416
+ },
1417
+ loader: {
1418
+ minHeight: vs(200),
1419
+ alignItems: "center",
1420
+ justifyContent: "center"
994
1421
  }
995
1422
  });
996
1423