@axzydev/axzy_ui_system 1.4.8 → 1.5.1
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.
- package/README.md +2 -11
- package/dist/index.cjs +1826 -1351
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +115 -14
- package/dist/index.d.ts +115 -14
- package/dist/index.js +1481 -1010
- package/dist/index.js.map +1 -1
- package/dist/layered.css +1 -1
- package/package.json +3 -16
- package/src/App.tsx +90 -73
- package/src/components/atoms/badget/badget.tsx +23 -5
- package/src/components/atoms/chip/chip.tsx +3 -1
- package/src/components/atoms/image/image.tsx +3 -1
- package/src/components/atoms/input/input.tsx +8 -5
- package/src/components/atoms/loader/loader.tsx +3 -1
- package/src/components/atoms/slide/slide.props.ts +12 -0
- package/src/components/atoms/slide/slide.tsx +3 -0
- package/src/components/molecules/alert/alert.tsx +3 -1
- package/src/components/molecules/breadcrumbs/breadcrumbs.tsx +3 -1
- package/src/components/molecules/calendar/calendar.tsx +9 -6
- package/src/components/molecules/card/card.tsx +5 -2
- package/src/components/molecules/chip-input/chip-input.tsx +9 -7
- package/src/components/molecules/date-picker/datePicker.tsx +9 -9
- package/src/components/molecules/dropdown-menu/dropdown-menu.props.ts +1 -1
- package/src/components/molecules/dropdown-menu/dropdown-menu.tsx +6 -3
- package/src/components/molecules/field/field.tsx +3 -1
- package/src/components/molecules/form-header/form-header.tsx +3 -1
- package/src/components/molecules/line-bar-chart/line-bar-chart.props.ts +2 -2
- package/src/components/molecules/line-bar-chart/line-bar-chart.tsx +20 -15
- package/src/components/molecules/masked-input/masked-input.tsx +3 -1
- package/src/components/molecules/multi-select/multi-select.tsx +12 -9
- package/src/components/molecules/pagination/pagination.tsx +11 -5
- package/src/components/molecules/search-select/search-select.tsx +11 -9
- package/src/components/molecules/select/select.tsx +6 -4
- package/src/components/molecules/stepper/stepper.tsx +6 -4
- package/src/components/molecules/table/table.tsx +30 -28
- package/src/components/molecules/time-picker/timePicker.tsx +8 -6
- package/src/components/molecules/wysiwyg/wysiwyg.tsx +23 -12
- package/src/components/organisms/confirm-dialog/confirm-dialog.props.ts +4 -4
- package/src/components/organisms/confirm-dialog/confirm-dialog.tsx +16 -8
- package/src/components/organisms/data-table/dataTable.tsx +31 -25
- package/src/components/organisms/dialog/dialog.tsx +3 -0
- package/src/components/organisms/drawer/drawer.tsx +3 -0
- package/src/components/organisms/dropfile/dropfile.tsx +19 -17
- package/src/components/organisms/form-builder/fieldRenderer.tsx +4 -2
- package/src/components/organisms/navbar/navbar.tsx +4 -2
- package/src/components/organisms/page-header/page-header.tsx +3 -1
- package/src/components/organisms/searchTable/components/PaginationControls.tsx +8 -6
- package/src/components/organisms/searchTable/components/PaginationInfo.tsx +3 -1
- package/src/components/organisms/searchTable/components/SearchAndSortBar.tsx +7 -5
- package/src/components/organisms/searchTable/components/SearchInput.tsx +4 -2
- package/src/components/organisms/searchTable/components/SortButton.tsx +13 -11
- package/src/components/organisms/searchTable/components/TableEmptyState.tsx +4 -2
- package/src/components/organisms/searchTable/components/TableRow.tsx +6 -4
- package/src/components/organisms/searchTable/searchTable.tsx +4 -2
- package/src/components/organisms/sidebar/sidebar.props.ts +1 -1
- package/src/components/organisms/sidebar/sidebar.tsx +9 -4
- package/src/components/organisms/toast/toast.tsx +3 -1
- package/src/components/organisms/topbar/topbar.tsx +4 -2
- package/src/components/templates/page/page.props.ts +4 -4
- package/src/components/templates/page/page.tsx +6 -4
- package/src/components/theme-provider/themeProvider.tsx +28 -17
- package/src/dev.css +61 -2
- package/src/global.d.ts +10 -0
- package/src/i18n/context.ts +9 -0
- package/src/i18n/index.ts +22 -0
- package/src/i18n/locales/en.ts +163 -0
- package/src/i18n/locales/es.ts +165 -0
- package/src/i18n/provider.tsx +44 -0
- package/src/i18n/translator.ts +82 -0
- package/src/i18n/types.ts +54 -0
- package/src/i18n/useITTranslation.ts +20 -0
- package/src/index.css +0 -1
- package/src/index.ts +7 -1
- package/src/sandbox/LandingShowcase.tsx +224 -580
- package/src/sandbox/NotFoundShowcase.tsx +51 -36
- package/src/sandbox/TopbarSearch.tsx +6 -4
- package/src/sandbox/controls.tsx +180 -0
- package/src/sandbox/i18n.ts +1939 -0
- package/src/sandbox/icons.tsx +25 -0
- package/src/sandbox/locale.tsx +72 -0
- package/src/sandbox/ui.tsx +474 -0
- package/src/sandbox/useHashRoute.ts +46 -10
- package/src/showcases/DataShowcases.tsx +103 -87
- package/src/showcases/FeedbackShowcases.tsx +37 -30
- package/src/showcases/FormShowcases.tsx +303 -215
- package/src/showcases/GettingStartedShowcase.tsx +151 -145
- package/src/showcases/HelpShowcase.tsx +126 -128
- package/src/showcases/HomeShowcase.tsx +678 -482
- package/src/showcases/LayoutPrimitivesShowcases.tsx +129 -114
- package/src/showcases/NavigationShowcases.tsx +45 -37
- package/src/showcases/PageShowcases.tsx +171 -152
- package/src/showcases/ProductoDetalle.tsx +272 -129
- package/src/showcases/ShowcaseLayout.tsx +256 -219
- package/src/showcases/SizesShowcase.tsx +123 -64
- package/src/showcases/StructureShowcases.tsx +203 -138
- package/src/showcases/portfolioUi.tsx +153 -0
- package/src/showcases/techIcons.ts +3 -0
- package/src/utils/table.utils.ts +10 -2
- package/src/components/atoms/avatar/avatar.doc.mdx +0 -48
- package/src/components/atoms/avatar/avatar.stories.tsx +0 -64
- package/src/components/atoms/badget/badget.doc.mdx +0 -46
- package/src/components/atoms/badget/badget.stories.tsx +0 -75
- package/src/components/atoms/button/button.doc.mdx +0 -59
- package/src/components/atoms/button/button.stories.tsx +0 -173
- package/src/components/atoms/checkbox/checkbox.doc.mdx +0 -54
- package/src/components/atoms/checkbox/checkbox.stories.tsx +0 -53
- package/src/components/atoms/chip/chip.doc.mdx +0 -47
- package/src/components/atoms/chip/chip.stories.tsx +0 -64
- package/src/components/atoms/divider/divider.doc.mdx +0 -42
- package/src/components/atoms/divider/divider.stories.tsx +0 -33
- package/src/components/atoms/flex/flex.doc.mdx +0 -59
- package/src/components/atoms/flex/flex.stories.tsx +0 -70
- package/src/components/atoms/grid/grid.doc.mdx +0 -54
- package/src/components/atoms/grid/grid.stories.tsx +0 -71
- package/src/components/atoms/image/image.doc.mdx +0 -44
- package/src/components/atoms/image/image.stories.tsx +0 -48
- package/src/components/atoms/input/input.doc.mdx +0 -70
- package/src/components/atoms/input/input.stories.tsx +0 -113
- package/src/components/atoms/input-number/input-number.doc.mdx +0 -74
- package/src/components/atoms/input-number/input-number.stories.tsx +0 -111
- package/src/components/atoms/loader/loader.doc.mdx +0 -43
- package/src/components/atoms/loader/loader.stories.tsx +0 -104
- package/src/components/atoms/popover/popover.doc.mdx +0 -53
- package/src/components/atoms/popover/popover.stories.tsx +0 -24
- package/src/components/atoms/progress/progress.doc.mdx +0 -48
- package/src/components/atoms/progress/progress.stories.tsx +0 -39
- package/src/components/atoms/radio/radio.doc.mdx +0 -62
- package/src/components/atoms/radio/radio.stories.tsx +0 -48
- package/src/components/atoms/segmented-control/segmented-control.doc.mdx +0 -60
- package/src/components/atoms/segmented-control/segmented-control.stories.tsx +0 -62
- package/src/components/atoms/skeleton/skeleton.doc.mdx +0 -43
- package/src/components/atoms/skeleton/skeleton.stories.tsx +0 -29
- package/src/components/atoms/slide/slide.doc.mdx +0 -46
- package/src/components/atoms/slide/slide.stories.tsx +0 -120
- package/src/components/atoms/slider/slider.doc.mdx +0 -49
- package/src/components/atoms/slider/slider.stories.tsx +0 -29
- package/src/components/atoms/stack/stack.doc.mdx +0 -126
- package/src/components/atoms/stack/stack.stories.tsx +0 -283
- package/src/components/atoms/text/text.doc.mdx +0 -41
- package/src/components/atoms/text/text.stories.tsx +0 -66
- package/src/components/atoms/textarea/textarea.doc.mdx +0 -64
- package/src/components/atoms/textarea/textarea.stories.tsx +0 -26
- package/src/components/atoms/tooltip/tooltip.doc.mdx +0 -47
- package/src/components/atoms/tooltip/tooltip.stories.tsx +0 -19
- package/src/components/isolation/isolation.stories.tsx +0 -202
- package/src/components/molecules/accordion/accordion.doc.mdx +0 -47
- package/src/components/molecules/accordion/accordion.stories.tsx +0 -68
- package/src/components/molecules/alert/alert.doc.mdx +0 -48
- package/src/components/molecules/alert/alert.stories.tsx +0 -40
- package/src/components/molecules/breadcrumbs/breadcrumbs.doc.mdx +0 -57
- package/src/components/molecules/breadcrumbs/breadcrumbs.stories.tsx +0 -20
- package/src/components/molecules/calendar/calendar.doc.mdx +0 -76
- package/src/components/molecules/calendar/calendar.stories.tsx +0 -90
- package/src/components/molecules/card/card.doc.mdx +0 -54
- package/src/components/molecules/card/card.stories.tsx +0 -57
- package/src/components/molecules/chip-input/chip-input.doc.mdx +0 -44
- package/src/components/molecules/chip-input/chip-input.stories.tsx +0 -52
- package/src/components/molecules/date-picker/date-picker.doc.mdx +0 -65
- package/src/components/molecules/date-picker/date-picker.stories.tsx +0 -88
- package/src/components/molecules/dropdown-menu/dropdown-menu.doc.mdx +0 -46
- package/src/components/molecules/dropdown-menu/dropdown-menu.stories.tsx +0 -41
- package/src/components/molecules/empty-state/empty-state.doc.mdx +0 -50
- package/src/components/molecules/empty-state/empty-state.stories.tsx +0 -19
- package/src/components/molecules/field/field.doc.mdx +0 -43
- package/src/components/molecules/field/field.stories.tsx +0 -42
- package/src/components/molecules/form-header/form-header.doc.mdx +0 -38
- package/src/components/molecules/form-header/form-header.stories.tsx +0 -52
- package/src/components/molecules/masked-input/masked-input.doc.mdx +0 -78
- package/src/components/molecules/masked-input/masked-input.stories.tsx +0 -126
- package/src/components/molecules/multi-select/multi-select.doc.mdx +0 -55
- package/src/components/molecules/multi-select/multi-select.stories.tsx +0 -59
- package/src/components/molecules/pagination/pagination.doc.mdx +0 -62
- package/src/components/molecules/pagination/pagination.stories.tsx +0 -110
- package/src/components/molecules/search-select/search-select.doc.mdx +0 -77
- package/src/components/molecules/search-select/search-select.stories.tsx +0 -146
- package/src/components/molecules/select/select.doc.mdx +0 -75
- package/src/components/molecules/select/select.stories.tsx +0 -85
- package/src/components/molecules/stat-card/stat-card.doc.mdx +0 -48
- package/src/components/molecules/stat-card/stat-card.stories.tsx +0 -40
- package/src/components/molecules/stepper/stepper.doc.mdx +0 -54
- package/src/components/molecules/stepper/stepper.stories.tsx +0 -154
- package/src/components/molecules/table/table.doc.mdx +0 -140
- package/src/components/molecules/table/table.stories.tsx +0 -402
- package/src/components/molecules/tabs/tabs.doc.mdx +0 -52
- package/src/components/molecules/tabs/tabs.stories.tsx +0 -31
- package/src/components/molecules/time-picker/timePicker.doc.mdx +0 -68
- package/src/components/molecules/time-picker/timePicker.stories.tsx +0 -130
- package/src/components/molecules/wysiwyg/wysiwyg.stories.tsx +0 -95
- package/src/components/organisms/confirm-dialog/confirm-dialog.doc.mdx +0 -60
- package/src/components/organisms/confirm-dialog/confirm-dialog.stories.tsx +0 -32
- package/src/components/organisms/data-table/ITDataTable.doc.mdx +0 -132
- package/src/components/organisms/data-table/ITDataTable.stories.tsx +0 -353
- package/src/components/organisms/dialog/dialog.doc.mdx +0 -54
- package/src/components/organisms/dialog/dialog.stories.tsx +0 -126
- package/src/components/organisms/drawer/drawer.doc.mdx +0 -59
- package/src/components/organisms/drawer/drawer.stories.tsx +0 -40
- package/src/components/organisms/dropfile/dropfile.doc.mdx +0 -74
- package/src/components/organisms/dropfile/dropfile.stories.tsx +0 -93
- package/src/components/organisms/form-builder/formBuilder.doc.mdx +0 -251
- package/src/components/organisms/form-builder/formBuilder.stories.tsx +0 -914
- package/src/components/organisms/navbar/navbar.doc.mdx +0 -77
- package/src/components/organisms/navbar/navbar.stories.tsx +0 -83
- package/src/components/organisms/page-header/page-header.doc.mdx +0 -54
- package/src/components/organisms/page-header/page-header.stories.tsx +0 -74
- package/src/components/organisms/searchTable/searchTable.doc.mdx +0 -79
- package/src/components/organisms/searchTable/searchTable.stories.tsx +0 -73
- package/src/components/organisms/sidebar/sidebar.doc.mdx +0 -176
- package/src/components/organisms/sidebar/sidebar.stories.tsx +0 -234
- package/src/components/organisms/toast/toast.doc.mdx +0 -50
- package/src/components/organisms/toast/toast.stories.tsx +0 -137
- package/src/components/organisms/topbar/topbar.doc.mdx +0 -72
- package/src/components/organisms/topbar/topbar.stories.tsx +0 -79
- package/src/components/organisms/triple-filter/tripleFilter.doc.mdx +0 -62
- package/src/components/organisms/triple-filter/tripleFilter.stories.tsx +0 -31
- package/src/components/templates/layout/layout.doc.mdx +0 -53
- package/src/components/templates/layout/layout.stories.tsx +0 -113
- package/src/components/templates/page/page.doc.mdx +0 -86
- package/src/components/templates/page/page.stories.tsx +0 -97
- package/src/components/theme-provider/themeProvider.doc.mdx +0 -85
- 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
package/src/index.ts
CHANGED
|
@@ -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,
|