@axzydev/axzy_ui_system 1.4.8 → 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 (223) hide show
  1. package/README.md +2 -11
  2. package/dist/index.cjs +1826 -1351
  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 +115 -14
  7. package/dist/index.d.ts +115 -14
  8. package/dist/index.js +1481 -1010
  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.tsx +30 -28
  39. package/src/components/molecules/time-picker/timePicker.tsx +8 -6
  40. package/src/components/molecules/wysiwyg/wysiwyg.tsx +23 -12
  41. package/src/components/organisms/confirm-dialog/confirm-dialog.props.ts +4 -4
  42. package/src/components/organisms/confirm-dialog/confirm-dialog.tsx +16 -8
  43. package/src/components/organisms/data-table/dataTable.tsx +31 -25
  44. package/src/components/organisms/dialog/dialog.tsx +3 -0
  45. package/src/components/organisms/drawer/drawer.tsx +3 -0
  46. package/src/components/organisms/dropfile/dropfile.tsx +19 -17
  47. package/src/components/organisms/form-builder/fieldRenderer.tsx +4 -2
  48. package/src/components/organisms/navbar/navbar.tsx +4 -2
  49. package/src/components/organisms/page-header/page-header.tsx +3 -1
  50. package/src/components/organisms/searchTable/components/PaginationControls.tsx +8 -6
  51. package/src/components/organisms/searchTable/components/PaginationInfo.tsx +3 -1
  52. package/src/components/organisms/searchTable/components/SearchAndSortBar.tsx +7 -5
  53. package/src/components/organisms/searchTable/components/SearchInput.tsx +4 -2
  54. package/src/components/organisms/searchTable/components/SortButton.tsx +13 -11
  55. package/src/components/organisms/searchTable/components/TableEmptyState.tsx +4 -2
  56. package/src/components/organisms/searchTable/components/TableRow.tsx +6 -4
  57. package/src/components/organisms/searchTable/searchTable.tsx +4 -2
  58. package/src/components/organisms/sidebar/sidebar.props.ts +1 -1
  59. package/src/components/organisms/sidebar/sidebar.tsx +9 -4
  60. package/src/components/organisms/toast/toast.tsx +3 -1
  61. package/src/components/organisms/topbar/topbar.tsx +4 -2
  62. package/src/components/templates/page/page.props.ts +4 -4
  63. package/src/components/templates/page/page.tsx +6 -4
  64. package/src/components/theme-provider/themeProvider.tsx +28 -17
  65. package/src/dev.css +77 -2
  66. package/src/global.d.ts +10 -0
  67. package/src/i18n/context.ts +9 -0
  68. package/src/i18n/index.ts +22 -0
  69. package/src/i18n/locales/en.ts +163 -0
  70. package/src/i18n/locales/es.ts +165 -0
  71. package/src/i18n/provider.tsx +44 -0
  72. package/src/i18n/translator.ts +82 -0
  73. package/src/i18n/types.ts +54 -0
  74. package/src/i18n/useITTranslation.ts +20 -0
  75. package/src/index.css +0 -1
  76. package/src/index.ts +7 -1
  77. package/src/sandbox/LandingShowcase.tsx +224 -580
  78. package/src/sandbox/NotFoundShowcase.tsx +51 -36
  79. package/src/sandbox/TopbarSearch.tsx +6 -4
  80. package/src/sandbox/controls.tsx +180 -0
  81. package/src/sandbox/i18n.ts +1929 -0
  82. package/src/sandbox/icons.tsx +25 -0
  83. package/src/sandbox/locale.tsx +72 -0
  84. package/src/sandbox/ui.tsx +377 -0
  85. package/src/sandbox/useHashRoute.ts +46 -10
  86. package/src/showcases/DataShowcases.tsx +103 -87
  87. package/src/showcases/FeedbackShowcases.tsx +37 -30
  88. package/src/showcases/FormShowcases.tsx +302 -214
  89. package/src/showcases/GettingStartedShowcase.tsx +151 -145
  90. package/src/showcases/HelpShowcase.tsx +126 -128
  91. package/src/showcases/HomeShowcase.tsx +678 -482
  92. package/src/showcases/LayoutPrimitivesShowcases.tsx +129 -114
  93. package/src/showcases/NavigationShowcases.tsx +45 -37
  94. package/src/showcases/PageShowcases.tsx +171 -152
  95. package/src/showcases/ProductoDetalle.tsx +272 -129
  96. package/src/showcases/ShowcaseLayout.tsx +270 -216
  97. package/src/showcases/SizesShowcase.tsx +123 -64
  98. package/src/showcases/StructureShowcases.tsx +157 -131
  99. package/src/showcases/portfolioUi.tsx +153 -0
  100. package/src/showcases/techIcons.ts +3 -0
  101. package/src/utils/table.utils.ts +10 -2
  102. package/src/components/atoms/avatar/avatar.doc.mdx +0 -48
  103. package/src/components/atoms/avatar/avatar.stories.tsx +0 -64
  104. package/src/components/atoms/badget/badget.doc.mdx +0 -46
  105. package/src/components/atoms/badget/badget.stories.tsx +0 -75
  106. package/src/components/atoms/button/button.doc.mdx +0 -59
  107. package/src/components/atoms/button/button.stories.tsx +0 -173
  108. package/src/components/atoms/checkbox/checkbox.doc.mdx +0 -54
  109. package/src/components/atoms/checkbox/checkbox.stories.tsx +0 -53
  110. package/src/components/atoms/chip/chip.doc.mdx +0 -47
  111. package/src/components/atoms/chip/chip.stories.tsx +0 -64
  112. package/src/components/atoms/divider/divider.doc.mdx +0 -42
  113. package/src/components/atoms/divider/divider.stories.tsx +0 -33
  114. package/src/components/atoms/flex/flex.doc.mdx +0 -59
  115. package/src/components/atoms/flex/flex.stories.tsx +0 -70
  116. package/src/components/atoms/grid/grid.doc.mdx +0 -54
  117. package/src/components/atoms/grid/grid.stories.tsx +0 -71
  118. package/src/components/atoms/image/image.doc.mdx +0 -44
  119. package/src/components/atoms/image/image.stories.tsx +0 -48
  120. package/src/components/atoms/input/input.doc.mdx +0 -70
  121. package/src/components/atoms/input/input.stories.tsx +0 -113
  122. package/src/components/atoms/input-number/input-number.doc.mdx +0 -74
  123. package/src/components/atoms/input-number/input-number.stories.tsx +0 -111
  124. package/src/components/atoms/loader/loader.doc.mdx +0 -43
  125. package/src/components/atoms/loader/loader.stories.tsx +0 -104
  126. package/src/components/atoms/popover/popover.doc.mdx +0 -53
  127. package/src/components/atoms/popover/popover.stories.tsx +0 -24
  128. package/src/components/atoms/progress/progress.doc.mdx +0 -48
  129. package/src/components/atoms/progress/progress.stories.tsx +0 -39
  130. package/src/components/atoms/radio/radio.doc.mdx +0 -62
  131. package/src/components/atoms/radio/radio.stories.tsx +0 -48
  132. package/src/components/atoms/segmented-control/segmented-control.doc.mdx +0 -60
  133. package/src/components/atoms/segmented-control/segmented-control.stories.tsx +0 -62
  134. package/src/components/atoms/skeleton/skeleton.doc.mdx +0 -43
  135. package/src/components/atoms/skeleton/skeleton.stories.tsx +0 -29
  136. package/src/components/atoms/slide/slide.doc.mdx +0 -46
  137. package/src/components/atoms/slide/slide.stories.tsx +0 -120
  138. package/src/components/atoms/slider/slider.doc.mdx +0 -49
  139. package/src/components/atoms/slider/slider.stories.tsx +0 -29
  140. package/src/components/atoms/stack/stack.doc.mdx +0 -126
  141. package/src/components/atoms/stack/stack.stories.tsx +0 -283
  142. package/src/components/atoms/text/text.doc.mdx +0 -41
  143. package/src/components/atoms/text/text.stories.tsx +0 -66
  144. package/src/components/atoms/textarea/textarea.doc.mdx +0 -64
  145. package/src/components/atoms/textarea/textarea.stories.tsx +0 -26
  146. package/src/components/atoms/tooltip/tooltip.doc.mdx +0 -47
  147. package/src/components/atoms/tooltip/tooltip.stories.tsx +0 -19
  148. package/src/components/isolation/isolation.stories.tsx +0 -202
  149. package/src/components/molecules/accordion/accordion.doc.mdx +0 -47
  150. package/src/components/molecules/accordion/accordion.stories.tsx +0 -68
  151. package/src/components/molecules/alert/alert.doc.mdx +0 -48
  152. package/src/components/molecules/alert/alert.stories.tsx +0 -40
  153. package/src/components/molecules/breadcrumbs/breadcrumbs.doc.mdx +0 -57
  154. package/src/components/molecules/breadcrumbs/breadcrumbs.stories.tsx +0 -20
  155. package/src/components/molecules/calendar/calendar.doc.mdx +0 -76
  156. package/src/components/molecules/calendar/calendar.stories.tsx +0 -90
  157. package/src/components/molecules/card/card.doc.mdx +0 -54
  158. package/src/components/molecules/card/card.stories.tsx +0 -57
  159. package/src/components/molecules/chip-input/chip-input.doc.mdx +0 -44
  160. package/src/components/molecules/chip-input/chip-input.stories.tsx +0 -52
  161. package/src/components/molecules/date-picker/date-picker.doc.mdx +0 -65
  162. package/src/components/molecules/date-picker/date-picker.stories.tsx +0 -88
  163. package/src/components/molecules/dropdown-menu/dropdown-menu.doc.mdx +0 -46
  164. package/src/components/molecules/dropdown-menu/dropdown-menu.stories.tsx +0 -41
  165. package/src/components/molecules/empty-state/empty-state.doc.mdx +0 -50
  166. package/src/components/molecules/empty-state/empty-state.stories.tsx +0 -19
  167. package/src/components/molecules/field/field.doc.mdx +0 -43
  168. package/src/components/molecules/field/field.stories.tsx +0 -42
  169. package/src/components/molecules/form-header/form-header.doc.mdx +0 -38
  170. package/src/components/molecules/form-header/form-header.stories.tsx +0 -52
  171. package/src/components/molecules/masked-input/masked-input.doc.mdx +0 -78
  172. package/src/components/molecules/masked-input/masked-input.stories.tsx +0 -126
  173. package/src/components/molecules/multi-select/multi-select.doc.mdx +0 -55
  174. package/src/components/molecules/multi-select/multi-select.stories.tsx +0 -59
  175. package/src/components/molecules/pagination/pagination.doc.mdx +0 -62
  176. package/src/components/molecules/pagination/pagination.stories.tsx +0 -110
  177. package/src/components/molecules/search-select/search-select.doc.mdx +0 -77
  178. package/src/components/molecules/search-select/search-select.stories.tsx +0 -146
  179. package/src/components/molecules/select/select.doc.mdx +0 -75
  180. package/src/components/molecules/select/select.stories.tsx +0 -85
  181. package/src/components/molecules/stat-card/stat-card.doc.mdx +0 -48
  182. package/src/components/molecules/stat-card/stat-card.stories.tsx +0 -40
  183. package/src/components/molecules/stepper/stepper.doc.mdx +0 -54
  184. package/src/components/molecules/stepper/stepper.stories.tsx +0 -154
  185. package/src/components/molecules/table/table.doc.mdx +0 -140
  186. package/src/components/molecules/table/table.stories.tsx +0 -402
  187. package/src/components/molecules/tabs/tabs.doc.mdx +0 -52
  188. package/src/components/molecules/tabs/tabs.stories.tsx +0 -31
  189. package/src/components/molecules/time-picker/timePicker.doc.mdx +0 -68
  190. package/src/components/molecules/time-picker/timePicker.stories.tsx +0 -130
  191. package/src/components/molecules/wysiwyg/wysiwyg.stories.tsx +0 -95
  192. package/src/components/organisms/confirm-dialog/confirm-dialog.doc.mdx +0 -60
  193. package/src/components/organisms/confirm-dialog/confirm-dialog.stories.tsx +0 -32
  194. package/src/components/organisms/data-table/ITDataTable.doc.mdx +0 -132
  195. package/src/components/organisms/data-table/ITDataTable.stories.tsx +0 -353
  196. package/src/components/organisms/dialog/dialog.doc.mdx +0 -54
  197. package/src/components/organisms/dialog/dialog.stories.tsx +0 -126
  198. package/src/components/organisms/drawer/drawer.doc.mdx +0 -59
  199. package/src/components/organisms/drawer/drawer.stories.tsx +0 -40
  200. package/src/components/organisms/dropfile/dropfile.doc.mdx +0 -74
  201. package/src/components/organisms/dropfile/dropfile.stories.tsx +0 -93
  202. package/src/components/organisms/form-builder/formBuilder.doc.mdx +0 -251
  203. package/src/components/organisms/form-builder/formBuilder.stories.tsx +0 -914
  204. package/src/components/organisms/navbar/navbar.doc.mdx +0 -77
  205. package/src/components/organisms/navbar/navbar.stories.tsx +0 -83
  206. package/src/components/organisms/page-header/page-header.doc.mdx +0 -54
  207. package/src/components/organisms/page-header/page-header.stories.tsx +0 -74
  208. package/src/components/organisms/searchTable/searchTable.doc.mdx +0 -79
  209. package/src/components/organisms/searchTable/searchTable.stories.tsx +0 -73
  210. package/src/components/organisms/sidebar/sidebar.doc.mdx +0 -176
  211. package/src/components/organisms/sidebar/sidebar.stories.tsx +0 -234
  212. package/src/components/organisms/toast/toast.doc.mdx +0 -50
  213. package/src/components/organisms/toast/toast.stories.tsx +0 -137
  214. package/src/components/organisms/topbar/topbar.doc.mdx +0 -72
  215. package/src/components/organisms/topbar/topbar.stories.tsx +0 -79
  216. package/src/components/organisms/triple-filter/tripleFilter.doc.mdx +0 -62
  217. package/src/components/organisms/triple-filter/tripleFilter.stories.tsx +0 -31
  218. package/src/components/templates/layout/layout.doc.mdx +0 -53
  219. package/src/components/templates/layout/layout.stories.tsx +0 -113
  220. package/src/components/templates/page/page.doc.mdx +0 -86
  221. package/src/components/templates/page/page.stories.tsx +0 -97
  222. package/src/components/theme-provider/themeProvider.doc.mdx +0 -85
  223. package/src/components/theme-provider/themeProvider.stories.tsx +0 -58
@@ -14,9 +14,11 @@ import {
14
14
  } from "../index";
15
15
  import { PRESETS } from "../components/theme-provider/themePresets";
16
16
  import { ShowcaseLayout } from "./ShowcaseLayout";
17
+ import { useITTranslation } from "@/i18n";
17
18
 
18
19
  // 1. ITDialog Showcase
19
20
  export const DialogShowcase = () => {
21
+ const { t } = useITTranslation();
20
22
  const [isOpen, setIsOpen] = useState(false);
21
23
  const [useFormHeader, setUseFormHeader] = useState(true);
22
24
  const [auditor, setAuditor] = useState("");
@@ -26,26 +28,26 @@ export const DialogShowcase = () => {
26
28
  return (
27
29
  <ShowcaseLayout
28
30
  title="ITDialog"
29
- description="Cajas de diálogo modales con overlay oscuro y soporte de cabeceras de formulario."
31
+ description={t("showcase.feedback.dialogDesc")}
30
32
  code={code}
31
33
  demo={
32
34
  <div>
33
- <ITButton label="Abrir Ventana Modal" color="primary" onClick={() => setIsOpen(true)} />
35
+ <ITButton label={t("showcase.feedback.openModal")} color="primary" onClick={() => setIsOpen(true)} />
34
36
  <ITDialog
35
37
  isOpen={isOpen}
36
38
  onClose={() => setIsOpen(false)}
37
- title="Confirmación de Auditoría"
39
+ title={t("showcase.feedback.dialogTitle")}
38
40
  useFormHeader={useFormHeader}
39
41
  >
40
42
  <div className="p-6 space-y-4">
41
43
  <p className="text-sm text-slate-600 dark:text-slate-300">
42
- Se guardará un registro inmutable en los logs de la blockchain corporativa. Esta acción es irreversible.
44
+ {t("showcase.feedback.dialogBody")}
43
45
  </p>
44
46
  {/* Los paneles flotantes (selects, pickers, menús) se renderizan en
45
47
  un portal fuera del diálogo: elegir una opción no debe cerrarlo. */}
46
48
  <ITSearchSelect
47
- label="Auditor responsable"
48
- placeholder="Busca un auditor..."
49
+ label={t("showcase.feedback.auditorLabel")}
50
+ placeholder={t("showcase.feedback.auditorPlaceholder")}
49
51
  options={[
50
52
  { value: "ana", label: "Ana Torres" },
51
53
  { value: "luis", label: "Luis Paredes" },
@@ -55,8 +57,8 @@ export const DialogShowcase = () => {
55
57
  onChange={(next) => setAuditor(String(next))}
56
58
  />
57
59
  <div className="flex justify-end gap-3 pt-4 border-t">
58
- <ITButton label="Cancelar" variant="ghost" onClick={() => setIsOpen(false)} />
59
- <ITButton label="Autorizar" color="success" onClick={() => { alert("Transacción firmada!"); setIsOpen(false); }} />
60
+ <ITButton label={t("showcase.common.cancel")} variant="ghost" onClick={() => setIsOpen(false)} />
61
+ <ITButton label={t("showcase.feedback.authorize")} color="success" onClick={() => { alert(t("showcase.feedback.signedTransaction")); setIsOpen(false); }} />
60
62
  </div>
61
63
  </div>
62
64
  </ITDialog>
@@ -65,8 +67,10 @@ export const DialogShowcase = () => {
65
67
  controls={
66
68
  <>
67
69
  <div className="flex items-center justify-between pt-2">
68
- <span className="text-sm font-semibold text-gray-700">Usar Cabecera de Formulario</span>
69
- <ITSlideToggle isOn={useFormHeader} onToggle={setUseFormHeader} size="sm" />
70
+ <span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.feedback.useFormHeader")}</span>
71
+ <ITSlideToggle isOn={useFormHeader} onToggle={setUseFormHeader} size="sm"
72
+ ariaLabel={t("showcase.feedback.useFormHeader")}
73
+ />
70
74
  </div>
71
75
  </>
72
76
  }
@@ -76,20 +80,21 @@ export const DialogShowcase = () => {
76
80
 
77
81
  // 2. ITToast Showcase
78
82
  export const ToastShowcase = () => {
83
+ const { t } = useITTranslation();
79
84
  const [visible, setVisible] = useState(false);
80
85
  const [type, setType] = useState<any>("success");
81
- const [msg, setMsg] = useState("¡La operación se procesó con éxito!");
86
+ const [msg, setMsg] = useState(t("showcase.feedback.toastDefaultMsg"));
82
87
 
83
88
  const code = `<ITToast\n message="${msg}"\n type="${type}"\n duration={3000}\n onClose={() => setVisible(false)}\n/>`;
84
89
 
85
90
  return (
86
91
  <ShowcaseLayout
87
92
  title="ITToast"
88
- description="Alertas efímeras del sistema flotantes para notificar eventos inmediatos al usuario."
93
+ description={t("showcase.feedback.toastDesc")}
89
94
  code={code}
90
95
  demo={
91
96
  <div>
92
- <ITButton label="Lanzar Notificación" color="purple" onClick={() => setVisible(true)} />
97
+ <ITButton label={t("showcase.feedback.launchNotification")} color="purple" onClick={() => setVisible(true)} />
93
98
  {visible && (
94
99
  <ITToast
95
100
  message={msg}
@@ -102,10 +107,10 @@ export const ToastShowcase = () => {
102
107
  }
103
108
  controls={
104
109
  <>
105
- <ITInput name="msg_ctrl" label="Mensaje" value={msg} onChange={(e: any) => setMsg(e.target.value)} onBlur={() => { }} />
110
+ <ITInput name="msg_ctrl" label={t("showcase.feedback.message")} value={msg} onChange={(e: any) => setMsg(e.target.value)} onBlur={() => { }} />
106
111
  <ITSelect
107
112
  name="type_ctrl"
108
- label="Tipo de Notificación"
113
+ label={t("showcase.feedback.notificationType")}
109
114
  value={type}
110
115
  onChange={(e: any) => setType(e.target.value)}
111
116
  options={[
@@ -119,10 +124,10 @@ export const ToastShowcase = () => {
119
124
  }
120
125
  gallery={
121
126
  <div className="flex flex-wrap gap-3">
122
- <ITButton label="Toast Exito" color="success" size="sm" onClick={() => { setMsg("Operación exitosa!"); setType("success"); setVisible(true); }} />
123
- <ITButton label="Toast Error" color="danger" size="sm" onClick={() => { setMsg("Ocurrió un fallo de red."); setType("error"); setVisible(true); }} />
124
- <ITButton label="Toast Warning" color="warning" size="sm" onClick={() => { setMsg("Licencia por expirar."); setType("warning"); setVisible(true); }} />
125
- <ITButton label="Toast Info" color="info" size="sm" onClick={() => { setMsg("Actualización disponible."); setType("info"); setVisible(true); }} />
127
+ <ITButton label={t("showcase.feedback.toastSuccess")} color="success" size="sm" onClick={() => { setMsg(t("showcase.feedback.msgSuccess")); setType("success"); setVisible(true); }} />
128
+ <ITButton label={t("showcase.feedback.toastError")} color="danger" size="sm" onClick={() => { setMsg(t("showcase.feedback.msgError")); setType("error"); setVisible(true); }} />
129
+ <ITButton label={t("showcase.feedback.toastWarning")} color="warning" size="sm" onClick={() => { setMsg(t("showcase.feedback.msgWarning")); setType("warning"); setVisible(true); }} />
130
+ <ITButton label={t("showcase.feedback.toastInfo")} color="info" size="sm" onClick={() => { setMsg(t("showcase.feedback.msgInfo")); setType("info"); setVisible(true); }} />
126
131
  </div>
127
132
  }
128
133
  />
@@ -131,6 +136,7 @@ export const ToastShowcase = () => {
131
136
 
132
137
  // 3. ITLoader Showcase
133
138
  export const LoaderShowcase = () => {
139
+ const { t } = useITTranslation();
134
140
  const [variant, setVariant] = useState<any>("spinner");
135
141
  const [size, setSize] = useState<any>("md");
136
142
  const [color, setColor] = useState("primary");
@@ -140,7 +146,7 @@ export const LoaderShowcase = () => {
140
146
  return (
141
147
  <ShowcaseLayout
142
148
  title="ITLoader"
143
- description="Indicadores de carga animados con soporte para múltiples estilos visuales."
149
+ description={t("showcase.feedback.loaderDesc")}
144
150
  code={code}
145
151
  demo={
146
152
  <div className="w-full max-w-xs flex items-center justify-center min-h-[80px]">
@@ -151,7 +157,7 @@ export const LoaderShowcase = () => {
151
157
  <>
152
158
  <ITSelect
153
159
  name="var_ctrl"
154
- label="Tipo de Cargador"
160
+ label={t("showcase.feedback.loaderVariant")}
155
161
  value={variant}
156
162
  onChange={(e: any) => setVariant(e.target.value)}
157
163
  options={[
@@ -163,7 +169,7 @@ export const LoaderShowcase = () => {
163
169
  />
164
170
  <ITSelect
165
171
  name="sz_ctrl"
166
- label="Tamaño"
172
+ label={t("showcase.common.size")}
167
173
  value={size}
168
174
  onChange={(e: any) => setSize(e.target.value)}
169
175
  options={[
@@ -176,7 +182,7 @@ export const LoaderShowcase = () => {
176
182
  />
177
183
  <ITSelect
178
184
  name="col_ctrl"
179
- label="Color"
185
+ label={t("showcase.common.color")}
180
186
  value={color}
181
187
  onChange={(e: any) => setColor(e.target.value)}
182
188
  options={[
@@ -204,6 +210,7 @@ export const LoaderShowcase = () => {
204
210
 
205
211
  // 4. ITThemeProvider Showcase
206
212
  export const ThemeProviderShowcase = () => {
213
+ const { t } = useITTranslation();
207
214
  const { applyPreset, resolvedTheme, darkModeMode, setDarkModeMode } = useITTheme();
208
215
 
209
216
  const code = `// En index.tsx o App.tsx\n<ITThemeProvider>\n <App />\n</ITThemeProvider>\n\n// En tu componente:\nconst { palette, resolvedTheme, darkModeMode, setDarkModeMode, applyPreset } = useITTheme();`;
@@ -211,19 +218,19 @@ export const ThemeProviderShowcase = () => {
211
218
  return (
212
219
  <ShowcaseLayout
213
220
  title="ITThemeProvider"
214
- description="Inyector dinámico de tokens CSS que gestiona el modo oscuro/claro y las paletas de colores unificadas."
221
+ description={t("showcase.feedback.themeDesc")}
215
222
  code={code}
216
223
  demo={
217
224
  <ITStack spacing={5} className="w-full max-w-md">
218
225
  <div>
219
226
  <span className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-3 block">
220
- Modo de Apariencia
227
+ {t("showcase.feedback.appearanceMode")}
221
228
  </span>
222
229
  <div className="flex flex-wrap gap-2">
223
230
  {(["light", "dark", "system"] as const).map((mode) => (
224
231
  <ITButton
225
232
  key={mode}
226
- label={mode === "light" ? "☀️ Claro" : mode === "dark" ? "🌙 Oscuro" : "💻 Sistema"}
233
+ label={mode === "light" ? t("showcase.feedback.modeLight") : mode === "dark" ? t("showcase.feedback.modeDark") : t("showcase.feedback.modeSystem")}
227
234
  color={darkModeMode === mode ? "primary" : "secondary"}
228
235
  onClick={() => setDarkModeMode(mode)}
229
236
  size="sm"
@@ -231,13 +238,13 @@ export const ThemeProviderShowcase = () => {
231
238
  ))}
232
239
  </div>
233
240
  <p className="text-xs text-slate-500 mt-2">
234
- Tema actual: <strong>{resolvedTheme === "dark" ? "Oscuro" : "Claro"}</strong>
241
+ {t("showcase.feedback.currentTheme")} <strong>{resolvedTheme === "dark" ? t("showcase.feedback.modeDarkName") : t("showcase.feedback.modeLightName")}</strong>
235
242
  </p>
236
243
  </div>
237
244
 
238
245
  <div>
239
246
  <span className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-3 block">
240
- Presets Rápidos
247
+ {t("showcase.feedback.quickPresets")}
241
248
  </span>
242
249
  <ITGrid container spacing={2}>
243
250
  {PRESETS.map((preset) => {
@@ -271,10 +278,10 @@ export const ThemeProviderShowcase = () => {
271
278
  controls={
272
279
  <ITStack spacing={3}>
273
280
  <p className="text-xs text-slate-500">
274
- Haz clic en el botón flotante de paleta 🎨 en la esquina inferior derecha para abrir el diseñador completo.
281
+ {t("showcase.feedback.themeHint1")}
275
282
  </p>
276
283
  <p className="text-xs text-slate-500">
277
- Allí puedes ajustar cada color, guardar temas personalizados y alternar entre modo claro/oscuro.
284
+ {t("showcase.feedback.themeHint2")}
278
285
  </p>
279
286
  </ITStack>
280
287
  }