@axzydev/axzy_ui_system 1.4.7 → 1.5.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 (226) hide show
  1. package/README.md +2 -11
  2. package/dist/index.cjs +2174 -1570
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.css +1 -1
  5. package/dist/index.css.map +1 -1
  6. package/dist/index.d.cts +232 -19
  7. package/dist/index.d.ts +232 -19
  8. package/dist/index.js +1838 -1238
  9. package/dist/index.js.map +1 -1
  10. package/dist/layered.css +1 -1
  11. package/package.json +3 -16
  12. package/src/App.tsx +90 -73
  13. package/src/components/atoms/badget/badget.tsx +23 -5
  14. package/src/components/atoms/chip/chip.tsx +3 -1
  15. package/src/components/atoms/image/image.tsx +3 -1
  16. package/src/components/atoms/input/input.tsx +8 -5
  17. package/src/components/atoms/loader/loader.tsx +3 -1
  18. package/src/components/atoms/slide/slide.props.ts +12 -0
  19. package/src/components/atoms/slide/slide.tsx +3 -0
  20. package/src/components/molecules/alert/alert.tsx +3 -1
  21. package/src/components/molecules/breadcrumbs/breadcrumbs.tsx +3 -1
  22. package/src/components/molecules/calendar/calendar.tsx +9 -6
  23. package/src/components/molecules/card/card.tsx +5 -2
  24. package/src/components/molecules/chip-input/chip-input.tsx +9 -7
  25. package/src/components/molecules/date-picker/datePicker.tsx +9 -9
  26. package/src/components/molecules/dropdown-menu/dropdown-menu.props.ts +1 -1
  27. package/src/components/molecules/dropdown-menu/dropdown-menu.tsx +6 -3
  28. package/src/components/molecules/field/field.tsx +3 -1
  29. package/src/components/molecules/form-header/form-header.tsx +3 -1
  30. package/src/components/molecules/line-bar-chart/line-bar-chart.props.ts +2 -2
  31. package/src/components/molecules/line-bar-chart/line-bar-chart.tsx +20 -15
  32. package/src/components/molecules/masked-input/masked-input.tsx +3 -1
  33. package/src/components/molecules/multi-select/multi-select.tsx +12 -9
  34. package/src/components/molecules/pagination/pagination.tsx +11 -5
  35. package/src/components/molecules/search-select/search-select.tsx +11 -9
  36. package/src/components/molecules/select/select.tsx +6 -4
  37. package/src/components/molecules/stepper/stepper.tsx +6 -4
  38. package/src/components/molecules/table/table.props.ts +10 -2
  39. package/src/components/molecules/table/table.tsx +163 -114
  40. package/src/components/molecules/time-picker/timePicker.tsx +8 -6
  41. package/src/components/molecules/wysiwyg/wysiwyg.tsx +23 -12
  42. package/src/components/organisms/confirm-dialog/confirm-dialog.props.ts +4 -4
  43. package/src/components/organisms/confirm-dialog/confirm-dialog.tsx +16 -8
  44. package/src/components/organisms/data-table/dataTable.props.ts +3 -2
  45. package/src/components/organisms/data-table/dataTable.tsx +149 -81
  46. package/src/components/organisms/dialog/dialog.tsx +3 -0
  47. package/src/components/organisms/drawer/drawer.tsx +3 -0
  48. package/src/components/organisms/dropfile/dropfile.tsx +19 -17
  49. package/src/components/organisms/form-builder/fieldRenderer.tsx +4 -2
  50. package/src/components/organisms/navbar/navbar.tsx +4 -2
  51. package/src/components/organisms/page-header/page-header.tsx +3 -1
  52. package/src/components/organisms/searchTable/components/PaginationControls.tsx +8 -6
  53. package/src/components/organisms/searchTable/components/PaginationInfo.tsx +3 -1
  54. package/src/components/organisms/searchTable/components/SearchAndSortBar.tsx +7 -5
  55. package/src/components/organisms/searchTable/components/SearchInput.tsx +4 -2
  56. package/src/components/organisms/searchTable/components/SortButton.tsx +13 -11
  57. package/src/components/organisms/searchTable/components/TableEmptyState.tsx +4 -2
  58. package/src/components/organisms/searchTable/components/TableRow.tsx +6 -4
  59. package/src/components/organisms/searchTable/searchTable.tsx +4 -2
  60. package/src/components/organisms/sidebar/sidebar.props.ts +1 -1
  61. package/src/components/organisms/sidebar/sidebar.tsx +9 -4
  62. package/src/components/organisms/toast/toast.tsx +3 -1
  63. package/src/components/organisms/topbar/topbar.tsx +4 -2
  64. package/src/components/templates/page/page.props.ts +4 -4
  65. package/src/components/templates/page/page.tsx +6 -4
  66. package/src/components/theme-provider/themeProvider.tsx +28 -17
  67. package/src/dev.css +77 -2
  68. package/src/global.d.ts +10 -0
  69. package/src/i18n/context.ts +9 -0
  70. package/src/i18n/index.ts +22 -0
  71. package/src/i18n/locales/en.ts +163 -0
  72. package/src/i18n/locales/es.ts +165 -0
  73. package/src/i18n/provider.tsx +44 -0
  74. package/src/i18n/translator.ts +82 -0
  75. package/src/i18n/types.ts +54 -0
  76. package/src/i18n/useITTranslation.ts +20 -0
  77. package/src/index.css +0 -1
  78. package/src/index.ts +9 -3
  79. package/src/sandbox/LandingShowcase.tsx +224 -580
  80. package/src/sandbox/NotFoundShowcase.tsx +51 -36
  81. package/src/sandbox/TopbarSearch.tsx +6 -4
  82. package/src/sandbox/controls.tsx +180 -0
  83. package/src/sandbox/i18n.ts +1929 -0
  84. package/src/sandbox/icons.tsx +25 -0
  85. package/src/sandbox/locale.tsx +72 -0
  86. package/src/sandbox/ui.tsx +377 -0
  87. package/src/sandbox/useHashRoute.ts +46 -10
  88. package/src/showcases/DataShowcases.tsx +201 -80
  89. package/src/showcases/FeedbackShowcases.tsx +37 -30
  90. package/src/showcases/FormShowcases.tsx +302 -214
  91. package/src/showcases/GettingStartedShowcase.tsx +151 -145
  92. package/src/showcases/HelpShowcase.tsx +126 -128
  93. package/src/showcases/HomeShowcase.tsx +678 -482
  94. package/src/showcases/LayoutPrimitivesShowcases.tsx +129 -114
  95. package/src/showcases/NavigationShowcases.tsx +45 -37
  96. package/src/showcases/PageShowcases.tsx +171 -152
  97. package/src/showcases/ProductoDetalle.tsx +272 -129
  98. package/src/showcases/ShowcaseLayout.tsx +270 -216
  99. package/src/showcases/SizesShowcase.tsx +123 -64
  100. package/src/showcases/StructureShowcases.tsx +157 -131
  101. package/src/showcases/portfolioUi.tsx +153 -0
  102. package/src/showcases/techIcons.ts +3 -0
  103. package/src/types/table.types.ts +110 -0
  104. package/src/utils/table.utils.ts +10 -2
  105. package/src/components/atoms/avatar/avatar.doc.mdx +0 -48
  106. package/src/components/atoms/avatar/avatar.stories.tsx +0 -64
  107. package/src/components/atoms/badget/badget.doc.mdx +0 -46
  108. package/src/components/atoms/badget/badget.stories.tsx +0 -75
  109. package/src/components/atoms/button/button.doc.mdx +0 -59
  110. package/src/components/atoms/button/button.stories.tsx +0 -173
  111. package/src/components/atoms/checkbox/checkbox.doc.mdx +0 -54
  112. package/src/components/atoms/checkbox/checkbox.stories.tsx +0 -53
  113. package/src/components/atoms/chip/chip.doc.mdx +0 -47
  114. package/src/components/atoms/chip/chip.stories.tsx +0 -64
  115. package/src/components/atoms/divider/divider.doc.mdx +0 -42
  116. package/src/components/atoms/divider/divider.stories.tsx +0 -33
  117. package/src/components/atoms/flex/flex.doc.mdx +0 -59
  118. package/src/components/atoms/flex/flex.stories.tsx +0 -70
  119. package/src/components/atoms/grid/grid.doc.mdx +0 -54
  120. package/src/components/atoms/grid/grid.stories.tsx +0 -71
  121. package/src/components/atoms/image/image.doc.mdx +0 -44
  122. package/src/components/atoms/image/image.stories.tsx +0 -48
  123. package/src/components/atoms/input/input.doc.mdx +0 -70
  124. package/src/components/atoms/input/input.stories.tsx +0 -113
  125. package/src/components/atoms/input-number/input-number.doc.mdx +0 -74
  126. package/src/components/atoms/input-number/input-number.stories.tsx +0 -111
  127. package/src/components/atoms/loader/loader.doc.mdx +0 -43
  128. package/src/components/atoms/loader/loader.stories.tsx +0 -104
  129. package/src/components/atoms/popover/popover.doc.mdx +0 -53
  130. package/src/components/atoms/popover/popover.stories.tsx +0 -24
  131. package/src/components/atoms/progress/progress.doc.mdx +0 -48
  132. package/src/components/atoms/progress/progress.stories.tsx +0 -39
  133. package/src/components/atoms/radio/radio.doc.mdx +0 -62
  134. package/src/components/atoms/radio/radio.stories.tsx +0 -48
  135. package/src/components/atoms/segmented-control/segmented-control.doc.mdx +0 -60
  136. package/src/components/atoms/segmented-control/segmented-control.stories.tsx +0 -62
  137. package/src/components/atoms/skeleton/skeleton.doc.mdx +0 -43
  138. package/src/components/atoms/skeleton/skeleton.stories.tsx +0 -29
  139. package/src/components/atoms/slide/slide.doc.mdx +0 -46
  140. package/src/components/atoms/slide/slide.stories.tsx +0 -120
  141. package/src/components/atoms/slider/slider.doc.mdx +0 -49
  142. package/src/components/atoms/slider/slider.stories.tsx +0 -29
  143. package/src/components/atoms/stack/stack.doc.mdx +0 -126
  144. package/src/components/atoms/stack/stack.stories.tsx +0 -283
  145. package/src/components/atoms/text/text.doc.mdx +0 -41
  146. package/src/components/atoms/text/text.stories.tsx +0 -66
  147. package/src/components/atoms/textarea/textarea.doc.mdx +0 -64
  148. package/src/components/atoms/textarea/textarea.stories.tsx +0 -26
  149. package/src/components/atoms/tooltip/tooltip.doc.mdx +0 -47
  150. package/src/components/atoms/tooltip/tooltip.stories.tsx +0 -19
  151. package/src/components/isolation/isolation.stories.tsx +0 -202
  152. package/src/components/molecules/accordion/accordion.doc.mdx +0 -47
  153. package/src/components/molecules/accordion/accordion.stories.tsx +0 -68
  154. package/src/components/molecules/alert/alert.doc.mdx +0 -48
  155. package/src/components/molecules/alert/alert.stories.tsx +0 -40
  156. package/src/components/molecules/breadcrumbs/breadcrumbs.doc.mdx +0 -57
  157. package/src/components/molecules/breadcrumbs/breadcrumbs.stories.tsx +0 -20
  158. package/src/components/molecules/calendar/calendar.doc.mdx +0 -76
  159. package/src/components/molecules/calendar/calendar.stories.tsx +0 -90
  160. package/src/components/molecules/card/card.doc.mdx +0 -54
  161. package/src/components/molecules/card/card.stories.tsx +0 -57
  162. package/src/components/molecules/chip-input/chip-input.doc.mdx +0 -44
  163. package/src/components/molecules/chip-input/chip-input.stories.tsx +0 -52
  164. package/src/components/molecules/date-picker/date-picker.doc.mdx +0 -65
  165. package/src/components/molecules/date-picker/date-picker.stories.tsx +0 -88
  166. package/src/components/molecules/dropdown-menu/dropdown-menu.doc.mdx +0 -46
  167. package/src/components/molecules/dropdown-menu/dropdown-menu.stories.tsx +0 -41
  168. package/src/components/molecules/empty-state/empty-state.doc.mdx +0 -50
  169. package/src/components/molecules/empty-state/empty-state.stories.tsx +0 -19
  170. package/src/components/molecules/field/field.doc.mdx +0 -43
  171. package/src/components/molecules/field/field.stories.tsx +0 -42
  172. package/src/components/molecules/form-header/form-header.doc.mdx +0 -38
  173. package/src/components/molecules/form-header/form-header.stories.tsx +0 -52
  174. package/src/components/molecules/masked-input/masked-input.doc.mdx +0 -78
  175. package/src/components/molecules/masked-input/masked-input.stories.tsx +0 -126
  176. package/src/components/molecules/multi-select/multi-select.doc.mdx +0 -55
  177. package/src/components/molecules/multi-select/multi-select.stories.tsx +0 -59
  178. package/src/components/molecules/pagination/pagination.doc.mdx +0 -62
  179. package/src/components/molecules/pagination/pagination.stories.tsx +0 -110
  180. package/src/components/molecules/search-select/search-select.doc.mdx +0 -77
  181. package/src/components/molecules/search-select/search-select.stories.tsx +0 -146
  182. package/src/components/molecules/select/select.doc.mdx +0 -75
  183. package/src/components/molecules/select/select.stories.tsx +0 -85
  184. package/src/components/molecules/stat-card/stat-card.doc.mdx +0 -48
  185. package/src/components/molecules/stat-card/stat-card.stories.tsx +0 -40
  186. package/src/components/molecules/stepper/stepper.doc.mdx +0 -54
  187. package/src/components/molecules/stepper/stepper.stories.tsx +0 -154
  188. package/src/components/molecules/table/table.doc.mdx +0 -123
  189. package/src/components/molecules/table/table.stories.tsx +0 -402
  190. package/src/components/molecules/tabs/tabs.doc.mdx +0 -52
  191. package/src/components/molecules/tabs/tabs.stories.tsx +0 -31
  192. package/src/components/molecules/time-picker/timePicker.doc.mdx +0 -68
  193. package/src/components/molecules/time-picker/timePicker.stories.tsx +0 -130
  194. package/src/components/molecules/wysiwyg/wysiwyg.stories.tsx +0 -95
  195. package/src/components/organisms/confirm-dialog/confirm-dialog.doc.mdx +0 -60
  196. package/src/components/organisms/confirm-dialog/confirm-dialog.stories.tsx +0 -32
  197. package/src/components/organisms/data-table/ITDataTable.doc.mdx +0 -115
  198. package/src/components/organisms/data-table/ITDataTable.stories.tsx +0 -353
  199. package/src/components/organisms/dialog/dialog.doc.mdx +0 -54
  200. package/src/components/organisms/dialog/dialog.stories.tsx +0 -126
  201. package/src/components/organisms/drawer/drawer.doc.mdx +0 -59
  202. package/src/components/organisms/drawer/drawer.stories.tsx +0 -40
  203. package/src/components/organisms/dropfile/dropfile.doc.mdx +0 -74
  204. package/src/components/organisms/dropfile/dropfile.stories.tsx +0 -93
  205. package/src/components/organisms/form-builder/formBuilder.doc.mdx +0 -251
  206. package/src/components/organisms/form-builder/formBuilder.stories.tsx +0 -914
  207. package/src/components/organisms/navbar/navbar.doc.mdx +0 -77
  208. package/src/components/organisms/navbar/navbar.stories.tsx +0 -83
  209. package/src/components/organisms/page-header/page-header.doc.mdx +0 -54
  210. package/src/components/organisms/page-header/page-header.stories.tsx +0 -74
  211. package/src/components/organisms/searchTable/searchTable.doc.mdx +0 -79
  212. package/src/components/organisms/searchTable/searchTable.stories.tsx +0 -73
  213. package/src/components/organisms/sidebar/sidebar.doc.mdx +0 -176
  214. package/src/components/organisms/sidebar/sidebar.stories.tsx +0 -234
  215. package/src/components/organisms/toast/toast.doc.mdx +0 -50
  216. package/src/components/organisms/toast/toast.stories.tsx +0 -137
  217. package/src/components/organisms/topbar/topbar.doc.mdx +0 -72
  218. package/src/components/organisms/topbar/topbar.stories.tsx +0 -79
  219. package/src/components/organisms/triple-filter/tripleFilter.doc.mdx +0 -62
  220. package/src/components/organisms/triple-filter/tripleFilter.stories.tsx +0 -31
  221. package/src/components/templates/layout/layout.doc.mdx +0 -53
  222. package/src/components/templates/layout/layout.stories.tsx +0 -113
  223. package/src/components/templates/page/page.doc.mdx +0 -86
  224. package/src/components/templates/page/page.stories.tsx +0 -97
  225. package/src/components/theme-provider/themeProvider.doc.mdx +0 -85
  226. package/src/components/theme-provider/themeProvider.stories.tsx +0 -58
@@ -0,0 +1,165 @@
1
+ import type { ITMessages } from "../types";
2
+
3
+ /**
4
+ * Catálogo base en español (locale por defecto de la librería).
5
+ *
6
+ * Las keys siguen `docs/i18n/conventions.md` (`namespace.clave`) y el inventario de
7
+ * `docs/i18n/strings.md`. Añade nuevas keys aquí y en `en.ts` a la vez.
8
+ */
9
+ const es: ITMessages = {
10
+ // ---------------------------------------------------------------- common
11
+ "common.loading": "Cargando...",
12
+ "common.loadingOptions": "Cargando opciones...",
13
+ "common.loadError": "Error cargando",
14
+ "common.search": "Buscar...",
15
+ "common.clear": "Limpiar",
16
+ "common.clearSelection": "Limpiar selección",
17
+ "common.all": "Todos",
18
+ "common.true": "Verdadero",
19
+ "common.false": "Falso",
20
+ "common.back": "Atrás",
21
+ "common.next": "Siguiente",
22
+ "common.finish": "Finalizar",
23
+ "common.accept": "Aceptar",
24
+ "common.confirm": "Confirmar",
25
+ "common.cancel": "Cancelar",
26
+ "common.close": "Cerrar",
27
+ "common.dismiss": "Descartar",
28
+ "common.closeNotification": "Cerrar notificación",
29
+ "common.menu": "Menú",
30
+ "common.userAvatar": "Usuario actual",
31
+ "common.retry": "Reintentar",
32
+ "common.error": "Error",
33
+ "common.noData": "Sin datos",
34
+ "common.empty": "No hay información para mostrar",
35
+ "common.noResults": "No se encontraron resultados",
36
+ "common.delete": "Eliminar",
37
+ "common.copy": "Copiar",
38
+
39
+ // ------------------------------------------------------------- validation
40
+ "field.required": "Este campo es requerido",
41
+
42
+ // ------------------------------------------------------------------ atoms
43
+ "image.fallbackAlt": "Fallback",
44
+ "chip.remove": "Quitar {label}",
45
+ "input.invalidFormat": "Formato inválido",
46
+ "input.showPassword": "Mostrar contraseña",
47
+ "input.hidePassword": "Ocultar contraseña",
48
+
49
+ // -------------------------------------------------------------- molecules
50
+ "card.imageAlt": "Imagen de tarjeta",
51
+ "select.placeholder": "Selecciona una opción",
52
+ "select.noResults": "No se encontraron resultados",
53
+ "multiSelect.placeholder": "Selecciona opciones",
54
+ "chipInput.placeholder": "Escribe y presiona Enter",
55
+ "chipInput.maxTags": "Máximo {count} etiquetas",
56
+ "chipInput.duplicate": "Etiqueta duplicada",
57
+ "dropdownMenu.open": "Abrir menú",
58
+ "lineBarChart.lineLabel": "Serie A",
59
+ "lineBarChart.barLabel": "Serie B",
60
+ "datePicker.invalid": "Fecha inválida",
61
+ "datePicker.placeholder": "dd/mm/aaaa",
62
+ "datePicker.rangePlaceholder": "dd/mm/aaaa - dd/mm/aaaa",
63
+ "calendar.today": "Hoy",
64
+ "timePicker.accept": "Aceptar",
65
+ "timePicker.placeholder": "HH:MM",
66
+ "timePicker.invalid": "Hora inválida",
67
+ "timePicker.hours": "Horas",
68
+ "timePicker.minutes": "Minutos",
69
+ "table.showAll": "Mostrar todos",
70
+ "table.filterTrue": "Filtrar solo verdaderos",
71
+ "table.filterFalse": "Filtrar solo falsos",
72
+ "table.sortBy": "Ordenar por {label}",
73
+ "table.filterToggle": "{action} para {label}",
74
+ "table.viewTable": "Tabla",
75
+ "table.viewCards": "Tarjetas",
76
+ "table.noResults": "No se encontraron resultados",
77
+ "table.adjustFilters": "Intenta ajustar los filtros",
78
+ "table.loading": "Cargando datos...",
79
+ "table.selectAll": "Seleccionar todo",
80
+ "wysiwyg.bold": "Negrita",
81
+ "wysiwyg.italic": "Itálica",
82
+ "wysiwyg.underline": "Subrayado",
83
+ "wysiwyg.highlight": "Marcador",
84
+ "wysiwyg.bulletList": "Lista con viñetas",
85
+ "wysiwyg.numberedList": "Lista numerada",
86
+ "wysiwyg.clearFormat": "Limpiar formato",
87
+ "pagination.itemsPerPage": "Mostrar",
88
+ "pagination.of": "de",
89
+ "breadcrumbs.aria": "Ruta de navegación",
90
+ "pageHeader.back": "Volver",
91
+ "pagination.showing": "Mostrando {from}-{to} de {total}",
92
+ "pagination.page": "Página {page}",
93
+ "pagination.aria": "Paginación",
94
+ "pagination.previous": "Página anterior",
95
+ "pagination.next": "Página siguiente",
96
+ "stepper.stepOf": "Paso {current} de {total}",
97
+ "stepper.stepAria": "Paso {n} {label}",
98
+
99
+ // -------------------------------------------------------------- organisms
100
+ "confirmDialog.title": "Confirmar acción",
101
+ "confirmDialog.message": "¿Estás seguro de que deseas continuar?",
102
+ "dropfile.upload": "Subir archivo",
103
+ "dropfile.status.pending": "Pendiente",
104
+ "dropfile.status.uploading": "Subiendo...",
105
+ "dropfile.status.uploaded": "Subido",
106
+ "dropfile.status.error": "Error",
107
+ "dropfile.dropHere": "¡Suelta aquí!",
108
+ "dropfile.clickOrDrag": "Haz clic o arrastra",
109
+ "dropfile.imageLoaded": "Imagen cargada",
110
+ "dropfile.noPreview": "Sin vista previa",
111
+ "dropfile.previewAlt": "Vista previa",
112
+ "dropfile.fileTypeNotAllowed": "Tipo de archivo no permitido.",
113
+ "dropfile.fileLoaded": "Archivo cargado",
114
+ "sidebar.notifications": "Notificaciones",
115
+ "sidebar.navAria": "Componentes de la librería",
116
+ "sidebar.noSubmenu": "No hay submenú",
117
+ // ---------------------------------------------------------------- sandbox
118
+ "searchTable.searchPlaceholder": "Buscar en todos los campos...",
119
+ "searchTable.showing": "Mostrando {from}-{to} de {total} resultados",
120
+ "searchTable.emptySearch": "No se encontraron resultados para tu búsqueda",
121
+ "searchTable.empty": "No se encontraron resultados",
122
+ "searchTable.showLabel": "Mostrar:",
123
+ "searchTable.pageOf": "Página {current} de {total}",
124
+ "searchTable.prev": "Página anterior",
125
+ "searchTable.next": "Página siguiente",
126
+ "searchTable.sort": "Ordenar",
127
+ "searchTable.sortAsc": "Asc ↑",
128
+ "searchTable.sortDesc": "Desc ↓",
129
+ "searchTable.clearSearch": "Limpiar búsqueda",
130
+ "searchTable.showingCount": "Mostrando {from} de {total} resultados",
131
+ "searchTable.sortTable": "Ordenar tabla",
132
+ "searchTable.sortAria": "Ordenar tabla {direction}",
133
+ "searchTable.sortAscending": "ascendente",
134
+ "searchTable.sortDescending": "descendente",
135
+ "formBuilder.arrayField": "Array Field: {label}",
136
+ "formBuilder.loadingOptions": "Cargando opciones...",
137
+
138
+ // ------------------------------------------------- ITThemeProvider (editor)
139
+ "themeProvider.fab.ariaLabel": "Configurar Paleta de Colores",
140
+ "themeProvider.designer.title": "Diseñador de Temas",
141
+ "themeProvider.designer.appearance": "Apariencia",
142
+ "themeProvider.designer.presets": "Presets",
143
+ "themeProvider.designer.myThemes": "Mis Temas",
144
+ "themeProvider.designer.presetNamePlaceholder": "Nombre del tema...",
145
+ "themeProvider.designer.save": "Guardar",
146
+ "themeProvider.designer.cancelSave": "X",
147
+ "themeProvider.designer.saveCurrent": "Guardar actual",
148
+ "themeProvider.designer.reset": "Restaurar default",
149
+ "themeProvider.designer.autosave": "Los cambios se guardan automáticamente",
150
+ "themeProvider.designer.close": "Cerrar",
151
+ "themeProvider.designer.deletePreset": "Eliminar",
152
+ "themeProvider.tabs.brand": "Marca",
153
+ "themeProvider.tabs.layout": "Nav & Sidebar",
154
+ "themeProvider.tabs.tables": "Tablas",
155
+ "themeProvider.mode.light": "Claro",
156
+ "themeProvider.mode.dark": "Oscuro",
157
+ "themeProvider.mode.system": "Sistema",
158
+ "themeProvider.presets.midnightIndigo": "Midnight Indigo 🌌",
159
+ "themeProvider.presets.coralReef": "Coral Reef 🪸",
160
+ "themeProvider.presets.oceanicTeal": "Oceanic Teal 🌊",
161
+ "themeProvider.presets.goldenHour": "Golden Hour ☀️",
162
+ "themeProvider.presets.deepForest": "Deep Forest 🌲",
163
+ };
164
+
165
+ export default es;
@@ -0,0 +1,44 @@
1
+ import { useMemo } from "react";
2
+ import { ITI18nContext } from "./context";
3
+ import { createI18n } from "./translator";
4
+ import type { ITI18nProviderProps } from "./types";
5
+
6
+ /**
7
+ * Provee locale y mensajes al árbol de componentes.
8
+ *
9
+ * Sin provider, los componentes usan el catálogo base en español. Con provider,
10
+ * cualquier prop de texto explícita de un componente sigue teniendo prioridad
11
+ * sobre el catálogo.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <ITThemeProvider>
16
+ * <ITI18nProvider locale="en">
17
+ * <App />
18
+ * </ITI18nProvider>
19
+ * </ITThemeProvider>
20
+ * ```
21
+ *
22
+ * @example
23
+ * ```tsx
24
+ * // Overrides parciales sobre el catálogo incluido
25
+ * <ITI18nProvider locale="es" messages={{ es: { "common.cancel": "Abortar" } }}>
26
+ * <App />
27
+ * </ITI18nProvider>
28
+ * ```
29
+ */
30
+ export function ITI18nProvider({
31
+ locale,
32
+ fallbackLocale,
33
+ messages,
34
+ children,
35
+ }: ITI18nProviderProps) {
36
+ const value = useMemo(
37
+ () => createI18n({ locale, fallbackLocale, messages }),
38
+ [locale, fallbackLocale, messages]
39
+ );
40
+
41
+ return <ITI18nContext.Provider value={value}>{children}</ITI18nContext.Provider>;
42
+ }
43
+
44
+ export default ITI18nProvider;
@@ -0,0 +1,82 @@
1
+ import { enUS, es as esDateLocale } from "date-fns/locale";
2
+ import type { Locale } from "date-fns";
3
+ import es from "./locales/es";
4
+ import en from "./locales/en";
5
+ import type { ITI18nOptions, ITI18nValue, ITMessagesByLocale } from "./types";
6
+
7
+ /** Locale por defecto de la librería (mantiene el comportamiento histórico). */
8
+ export const DEFAULT_LOCALE = "es";
9
+
10
+ /** Catálogo base incluido en el paquete. */
11
+ export const baseCatalog: ITMessagesByLocale = { es, en };
12
+
13
+ const INTL_LOCALES: Record<string, string> = { es: "es-MX", en: "en-US" };
14
+ const DATE_LOCALES: Record<string, Locale> = { es: esDateLocale, en: enUS };
15
+
16
+ /** Mapea `es`/`en` a una locale BCP-47 para `Intl.*` (default: la propia locale). */
17
+ export function toIntlLocale(locale: string): string {
18
+ return INTL_LOCALES[locale] ?? locale;
19
+ }
20
+
21
+ /** Devuelve la locale de `date-fns` para la locale dada (fallback: español). */
22
+ export function toDateLocale(locale: string): Locale {
23
+ return DATE_LOCALES[locale] ?? DATE_LOCALES[DEFAULT_LOCALE];
24
+ }
25
+
26
+ /** Sustituye los placeholders `{var}` de un texto. */
27
+ export function interpolate(template: string, vars?: Record<string, string | number>): string {
28
+ if (!vars) return template;
29
+ return template.replace(/\{(\w+)\}/g, (match, key) =>
30
+ vars[key] !== undefined ? String(vars[key]) : match
31
+ );
32
+ }
33
+
34
+ /**
35
+ * Fusiona el catálogo base con los mensajes propios.
36
+ * Prioridad (mayor → menor): `messages[locale]` → `messages[fallback]` →
37
+ * catálogo base `[locale]` → catálogo base `[fallback]` → la propia key.
38
+ */
39
+ export function resolveMessages({ locale, fallbackLocale, messages }: Required<Pick<ITI18nOptions, "locale" | "fallbackLocale">> & Pick<ITI18nOptions, "messages">): Record<string, string> {
40
+ const custom = messages ?? {};
41
+ return {
42
+ ...BASE[fallbackLocale],
43
+ ...BASE[locale],
44
+ ...custom[fallbackLocale],
45
+ ...custom[locale],
46
+ };
47
+ }
48
+
49
+ const BASE: Record<string, Record<string, string> | undefined> = { es, en };
50
+
51
+ /**
52
+ * Construye el valor de contexto de i18n (traductor + formateadores).
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * const i18n = createI18n({ locale: "en" });
57
+ * i18n.t("common.cancel"); // "Cancel"
58
+ * i18n.formatCurrency(1234.5); // "$1,234.50"
59
+ * ```
60
+ */
61
+ export function createI18n(options: ITI18nOptions = {}): ITI18nValue {
62
+ const locale = options.locale ?? DEFAULT_LOCALE;
63
+ const fallbackLocale = options.fallbackLocale ?? DEFAULT_LOCALE;
64
+ const messages = resolveMessages({ locale, fallbackLocale, messages: options.messages });
65
+ const intlLocale = toIntlLocale(locale);
66
+
67
+ const t = (key: string, vars?: Record<string, string | number>): string =>
68
+ interpolate(messages[key] ?? key, vars);
69
+
70
+ return {
71
+ locale,
72
+ fallbackLocale,
73
+ t,
74
+ dateLocale: toDateLocale(locale),
75
+ formatNumber: (value: number, opts?: Intl.NumberFormatOptions): string =>
76
+ new Intl.NumberFormat(intlLocale, opts).format(value),
77
+ formatCurrency: (value: number, currency = "MXN", opts?: Intl.NumberFormatOptions): string =>
78
+ new Intl.NumberFormat(intlLocale, { style: "currency", currency, ...opts }).format(value),
79
+ formatDate: (value: Date | number | string, opts?: Intl.DateTimeFormatOptions): string =>
80
+ new Intl.DateTimeFormat(intlLocale, opts).format(value instanceof Date ? value : new Date(value)),
81
+ };
82
+ }
@@ -0,0 +1,54 @@
1
+ import type { ReactNode } from "react";
2
+ import type { Locale } from "date-fns";
3
+
4
+ /** Supported base locales shipped with the library. */
5
+ export type ITLocale = "es" | "en";
6
+
7
+ /** Message catalog: flat `namespace.key` → text. */
8
+ export type ITMessages = Record<string, string>;
9
+
10
+ /** Message overrides keyed by locale. */
11
+ export type ITMessagesByLocale = Record<string, ITMessages>;
12
+
13
+ /** Interpolation variables for `t()`. */
14
+ export type ITVars = Record<string, string | number>;
15
+
16
+ /** Options used to build an i18n value. */
17
+ export interface ITI18nOptions {
18
+ /** Active locale. @default "es" */
19
+ locale?: string;
20
+ /** Locale used for missing keys. @default "es" */
21
+ fallbackLocale?: string;
22
+ /** Custom messages merged over the built-in catalog. */
23
+ messages?: ITMessagesByLocale;
24
+ }
25
+
26
+ /** Contract of the i18n context (returned by `useITTranslation()`). */
27
+ export interface ITI18nValue {
28
+ /** Active locale. */
29
+ locale: string;
30
+ /** Fallback locale. */
31
+ fallbackLocale: string;
32
+ /** Translate a `namespace.key` and interpolate `{var}` placeholders. */
33
+ t: (key: string, vars?: ITVars) => string;
34
+ /** Format a number using `Intl.NumberFormat(locale)`. */
35
+ formatNumber: (value: number, options?: Intl.NumberFormatOptions) => string;
36
+ /** Format a currency using `Intl.NumberFormat(locale)`. */
37
+ formatCurrency: (value: number, currency?: string, options?: Intl.NumberFormatOptions) => string;
38
+ /** Format a date using `Intl.DateTimeFormat(locale)`. */
39
+ formatDate: (value: Date | number | string, options?: Intl.DateTimeFormatOptions) => string;
40
+ /** Matching `date-fns` locale. */
41
+ dateLocale: Locale;
42
+ }
43
+
44
+ /** Props for `ITI18nProvider`. */
45
+ export interface ITI18nProviderProps {
46
+ /** Active locale. @default "es" */
47
+ locale?: string;
48
+ /** Fallback locale for missing keys. @default "es" */
49
+ fallbackLocale?: string;
50
+ /** Custom messages merged over the built-in catalog, keyed by locale. */
51
+ messages?: ITMessagesByLocale;
52
+ /** Application tree. */
53
+ children: ReactNode;
54
+ }
@@ -0,0 +1,20 @@
1
+ import { useContext } from "react";
2
+ import { ITI18nContext } from "./context";
3
+ import type { ITI18nValue } from "./types";
4
+
5
+ /**
6
+ * Devuelve el traductor y los formateadores de la locale activa.
7
+ *
8
+ * Funciona aunque no exista `ITI18nProvider` (cae al catálogo base en español).
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const { t, formatCurrency } = useITTranslation();
13
+ * return <ITButton label={t("common.cancel")} onClick={onCancel} />;
14
+ * ```
15
+ */
16
+ export function useITTranslation(): ITI18nValue {
17
+ return useContext(ITI18nContext);
18
+ }
19
+
20
+ export default useITTranslation;
package/src/index.css CHANGED
@@ -1,7 +1,6 @@
1
1
  @import "tailwindcss";
2
2
 
3
3
  @source "./**/*.{ts,tsx}";
4
- @source "../.storybook/**/*.{ts,tsx}";
5
4
 
6
5
  @variant dark (&:is(.dark &));
7
6
 
package/src/index.ts CHANGED
@@ -119,7 +119,7 @@ import type { ITTripleFilterProps, ITTripleFilterOption } from "./components/org
119
119
  import type { ITToastProps } from "./components/organisms/toast/toast.props";
120
120
  import type { ITWysiwygProps } from "./components/molecules/wysiwyg/wysiwyg.props";
121
121
  import type { FieldConfig, FieldConfigV2 } from "./types/field.types";
122
- import type { ColumnFilters, ColumnFilterValue, TableDensity } from "./types/table.types";
122
+ import type { ColumnFilters, ColumnFilterValue, TableColors, TableDensity, TableDesign, TableDesignProps, TableDesignSlot } from "./types/table.types";
123
123
 
124
124
  // UTILS
125
125
  import ITDropfile, { UploadStatus, FileTypeEnum } from "./components/organisms/dropfile/dropfile";
@@ -138,6 +138,10 @@ import { createValidationSchema } from "./types/yup.types";
138
138
 
139
139
  import { getContrastTextColor, isLightColor, resolveCssColor } from "./utils/color.utils";
140
140
 
141
+ // I18N
142
+ import { ITI18nProvider, useITTranslation, esMessages, enMessages } from "./i18n";
143
+ import type { ITI18nProviderProps, ITI18nValue, ITLocale, ITMessages, ITMessagesByLocale } from "./i18n";
144
+
141
145
  export {
142
146
  // Hooks
143
147
  useClickOutside, useDebouncedSearch, useEditableRow, useFloatingPanel, useTableState,
@@ -157,10 +161,12 @@ export {
157
161
  ITTable, ITTabs, ITText, ITTextarea, ITTripleFilter, ITThemeProvider,
158
162
  useITTheme, useITThemeSafe, useITFlatAppearance, ITTimePicker, ITToast, ITWysiwyg,
159
163
  UploadStatus, FileTypeEnum,
160
- getContrastTextColor, isLightColor, resolveCssColor
164
+ getContrastTextColor, isLightColor, resolveCssColor,
165
+ ITI18nProvider, useITTranslation, esMessages, enMessages
161
166
  };
162
167
 
163
168
  export type {
169
+ ITI18nProviderProps, ITI18nValue, ITLocale, ITMessages, ITMessagesByLocale,
164
170
  Column, ColumnFilters, ColumnFilterMode, ColumnFilterValue, FieldConfig,
165
171
  FieldConfigV2,
166
172
  ITAccordionItem, ITAccordionProps,
@@ -185,7 +191,7 @@ export {
185
191
  ITSegmentedControlProps, ITSidebarProps, ITSkeletonProps, ITSlideToggleProps, ITSliderProps,
186
192
  ITStackProps, ITStatCardProps, ITStepperProps, ITLineBarChartProps, ITLineBarDatum,
187
193
  ITTableProps, ITTabsProps, ITTabItem, ITTextProps, ITTextareaProps,
188
- TableDensity,
194
+ TableColors, TableDensity, TableDesign, TableDesignProps, TableDesignSlot,
189
195
  ITTripleFilterProps, ITTripleFilterOption, ITThemeConfig, ITThemeProviderProps, ITThemePalette, ITThemeAppearance,
190
196
  ITTimePickerProps, ITToastProps,
191
197
  ITWysiwygProps,