@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.
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 +61 -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 +1939 -0
  82. package/src/sandbox/icons.tsx +25 -0
  83. package/src/sandbox/locale.tsx +72 -0
  84. package/src/sandbox/ui.tsx +474 -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 +303 -215
  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 +256 -219
  97. package/src/showcases/SizesShowcase.tsx +123 -64
  98. package/src/showcases/StructureShowcases.tsx +203 -138
  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
@@ -11,29 +11,31 @@ import {
11
11
  ITCard
12
12
  } from "../index";
13
13
  import { ShowcaseLayout } from "./ShowcaseLayout";
14
+ import { useITTranslation } from "@/i18n";
14
15
 
15
16
  // 1. ITTabs Showcase
16
17
  export const TabsShowcase = () => {
18
+ const { t } = useITTranslation();
17
19
  const [variant, setVariant] = useState<any>("line");
18
20
 
19
21
  const tabItems = [
20
22
  {
21
23
  id: "tab1",
22
- label: "General",
24
+ label: t("showcase.nav.tabGeneral"),
23
25
  icon: <FaInfoCircle />,
24
- content: <div className="p-4 text-sm text-slate-600 dark:text-slate-300">Configuración global y perfil general de la cuenta.</div>
26
+ content: <div className="p-4 text-sm text-slate-600 dark:text-slate-300">{t("showcase.nav.tabsGeneralBody")}</div>
25
27
  },
26
28
  {
27
29
  id: "tab2",
28
- label: "Seguridad",
30
+ label: t("showcase.nav.tabSecurity"),
29
31
  icon: <FaSlidersH />,
30
- content: <div className="p-4 text-sm text-slate-600 dark:text-slate-300">Ajustes de credenciales, MFA y logs de accesos.</div>
32
+ content: <div className="p-4 text-sm text-slate-600 dark:text-slate-300">{t("showcase.nav.tabsSecurityBody")}</div>
31
33
  },
32
34
  {
33
35
  id: "tab3",
34
- label: "Notificaciones",
36
+ label: t("showcase.nav.tabNotifications"),
35
37
  icon: <FaRegBell />,
36
- content: <div className="p-4 text-sm text-slate-600 dark:text-slate-300">Preferencias de alertas vía email, SMS y notificaciones PUSH.</div>
38
+ content: <div className="p-4 text-sm text-slate-600 dark:text-slate-300">{t("showcase.nav.tabsNotificationsBody")}</div>
37
39
  }
38
40
  ];
39
41
 
@@ -42,7 +44,7 @@ export const TabsShowcase = () => {
42
44
  return (
43
45
  <ShowcaseLayout
44
46
  title="ITTabs"
45
- description="Separadores de contenido en pestañas integrables con íconos y transiciones."
47
+ description={t("showcase.nav.tabsDesc")}
46
48
  code={code}
47
49
  demo={
48
50
  <div className="w-full bg-white dark:bg-slate-900 border rounded-2xl p-6 shadow-sm min-h-[160px]">
@@ -53,7 +55,7 @@ export const TabsShowcase = () => {
53
55
  <>
54
56
  <ITSelect
55
57
  name="var_ctrl"
56
- label="Variante Estética"
58
+ label={t("showcase.nav.variantAesthetic")}
57
59
  value={variant}
58
60
  onChange={(e: any) => setVariant(e.target.value)}
59
61
  options={[
@@ -69,13 +71,14 @@ export const TabsShowcase = () => {
69
71
 
70
72
  // 2. ITStepper Showcase
71
73
  export const StepperShowcase = () => {
74
+ const { t } = useITTranslation();
72
75
  const [step, setStep] = useState(0);
73
76
  const [useIcons, setUseIcons] = useState(true);
74
77
 
75
78
  const steps = [
76
- { label: "Validar Identidad", content: <div className="p-6">Paso 1: Sube tu documento de identidad oficial.</div> },
77
- { label: "Cargar KYC", content: <div className="p-6">Paso 2: Rellena tus datos fiscales y origen de fondos.</div> },
78
- { label: "Completar Firma", content: <div className="p-6">Paso 3: Realiza la firma biométrica digital.</div> }
79
+ { label: t("showcase.nav.stepValidate"), content: <div className="p-6">{t("showcase.nav.stepValidateBody")}</div> },
80
+ { label: t("showcase.nav.stepKyc"), content: <div className="p-6">{t("showcase.nav.stepKycBody")}</div> },
81
+ { label: t("showcase.nav.stepSign"), content: <div className="p-6">{t("showcase.nav.stepSignBody")}</div> }
79
82
  ];
80
83
 
81
84
  const code = `<ITStepper\n steps={steps}\n currentStep={${step}}\n useIcons={${useIcons}}\n onStepChange={(idx) => setStep(idx)}\n/>`;
@@ -83,7 +86,7 @@ export const StepperShowcase = () => {
83
86
  return (
84
87
  <ShowcaseLayout
85
88
  title="ITStepper"
86
- description="Barra e indicador secuencial de pasos para completar procesos guiados complejos."
89
+ description={t("showcase.nav.stepperDesc")}
87
90
  code={code}
88
91
  demo={
89
92
  <div className="w-full">
@@ -92,18 +95,20 @@ export const StepperShowcase = () => {
92
95
  currentStep={step}
93
96
  useIcons={useIcons}
94
97
  onStepChange={setStep}
95
- onFinish={() => alert("Proceso completado exitosamente!")}
98
+ onFinish={() => alert(t("showcase.nav.stepperFinish"))}
96
99
  />
97
100
  </div>
98
101
  }
99
102
  controls={
100
103
  <>
101
104
  <div className="flex items-center justify-between pt-2">
102
- <span className="text-sm font-semibold text-gray-700">Usar íconos</span>
103
- <ITSlideToggle isOn={useIcons} onToggle={setUseIcons} size="sm" />
105
+ <span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.nav.useIcons")}</span>
106
+ <ITSlideToggle isOn={useIcons} onToggle={setUseIcons} size="sm"
107
+ ariaLabel={t("showcase.nav.useIcons")}
108
+ />
104
109
  </div>
105
110
  <div className="flex justify-between items-center pt-2">
106
- <span className="text-sm font-semibold text-gray-700">Reiniciar Paso</span>
111
+ <span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.nav.resetStep")}</span>
107
112
  <button onClick={() => setStep(0)} className="p-2 bg-slate-100 rounded-lg hover:bg-slate-200 text-slate-800">
108
113
  <FaSync size={12} />
109
114
  </button>
@@ -116,6 +121,7 @@ export const StepperShowcase = () => {
116
121
 
117
122
  // 3. ITPagination Showcase
118
123
  export const PaginationShowcase = () => {
124
+ const { t } = useITTranslation();
119
125
  const [page, setPage] = useState(1);
120
126
  const [color, setColor] = useState<any>("primary");
121
127
 
@@ -124,7 +130,7 @@ export const PaginationShowcase = () => {
124
130
  return (
125
131
  <ShowcaseLayout
126
132
  title="ITPagination"
127
- description="Controlador de navegación de páginas numeradas con botones de dirección rápida."
133
+ description={t("showcase.nav.paginationDesc")}
128
134
  code={code}
129
135
  demo={
130
136
  <div className="flex flex-col items-center gap-3">
@@ -134,14 +140,14 @@ export const PaginationShowcase = () => {
134
140
  onPageChange={setPage}
135
141
  color={color}
136
142
  />
137
- <span className="text-xs font-mono text-slate-500">Página actual activa: {page} de 10</span>
143
+ <span className="text-xs font-mono text-slate-500">{t("showcase.nav.currentPage", { page })}</span>
138
144
  </div>
139
145
  }
140
146
  controls={
141
147
  <>
142
148
  <ITSelect
143
149
  name="col_ctrl"
144
- label="Color del Botón Activo"
150
+ label={t("showcase.nav.activeColorLabel")}
145
151
  value={color}
146
152
  onChange={(e: any) => setColor(e.target.value)}
147
153
  options={[
@@ -162,6 +168,7 @@ export const PaginationShowcase = () => {
162
168
 
163
169
  // 4. ITTripleFilter Showcase
164
170
  export const TripleFilterShowcase = () => {
171
+ const { t } = useITTranslation();
165
172
  const [filter, setFilter] = useState("all");
166
173
 
167
174
  const code = `<ITTripleFilter\n value="${filter}"\n onChange={(val) => setFilter(String(val))}\n options={[\n { label: 'Todos', value: 'all' },\n { label: 'Activos', value: 'active' },\n { label: 'Inactivos', value: 'inactive' }\n ]}\n/>`;
@@ -169,7 +176,7 @@ export const TripleFilterShowcase = () => {
169
176
  return (
170
177
  <ShowcaseLayout
171
178
  title="ITTripleFilter"
172
- description="Selector segmentado rápido diseñado típicamente para filtros rápidos de 3 estados."
179
+ description={t("showcase.nav.tripleFilterDesc")}
173
180
  code={code}
174
181
  demo={
175
182
  <div className="flex flex-col items-center gap-4">
@@ -177,17 +184,17 @@ export const TripleFilterShowcase = () => {
177
184
  value={filter}
178
185
  onChange={(val) => setFilter(String(val))}
179
186
  options={[
180
- { label: "Todos", value: "all" },
181
- { label: "Activos", value: "active" },
182
- { label: "Inactivos", value: "inactive" }
187
+ { label: t("showcase.nav.filterAll"), value: "all" },
188
+ { label: t("showcase.nav.filterActive"), value: "active" },
189
+ { label: t("showcase.nav.filterInactive"), value: "inactive" }
183
190
  ]}
184
191
  />
185
- <p className="text-xs text-slate-500 font-mono">Filtro activo: "{filter}"</p>
192
+ <p className="text-xs text-slate-500 font-mono">{t("showcase.nav.activeFilter", { filter })}</p>
186
193
  </div>
187
194
  }
188
195
  controls={
189
196
  <div className="p-2 bg-slate-50 dark:bg-slate-900 rounded-lg text-xs">
190
- <p className="text-slate-500">Proporciona un layout de tipo segmentado con animación al cambiar entre las opciones disponibles.</p>
197
+ <p className="text-slate-500">{t("showcase.nav.tripleFilterHint")}</p>
191
198
  </div>
192
199
  }
193
200
  />
@@ -196,13 +203,14 @@ export const TripleFilterShowcase = () => {
196
203
 
197
204
  // ITDropdownMenu Showcase
198
205
  export const DropdownMenuShowcase = () => {
199
- const [lastAction, setLastAction] = useState<string>("—");
206
+ const { t } = useITTranslation();
207
+ const [lastAction, setLastAction] = useState<string>(t("showcase.nav.none"));
200
208
 
201
209
  const items = [
202
- { id: "edit", label: "Editar", icon: <FaEdit />, onClick: () => setLastAction("Editar") },
203
- { id: "copy", label: "Duplicar", icon: <FaCopy />, shortcut: "⌘D", onClick: () => setLastAction("Duplicar") },
204
- { id: "download", label: "Descargar", icon: <FaDownload />, disabled: true },
205
- { id: "delete", label: "Eliminar", icon: <FaTrash />, danger: true, divider: true, onClick: () => setLastAction("Eliminar") },
210
+ { id: "edit", label: t("showcase.nav.actionEdit"), icon: <FaEdit />, onClick: () => setLastAction(t("showcase.nav.actionEdit")) },
211
+ { id: "copy", label: t("showcase.nav.actionDuplicate"), icon: <FaCopy />, shortcut: "⌘D", onClick: () => setLastAction(t("showcase.nav.actionDuplicate")) },
212
+ { id: "download", label: t("showcase.nav.actionDownload"), icon: <FaDownload />, disabled: true },
213
+ { id: "delete", label: t("showcase.nav.actionDelete"), icon: <FaTrash />, danger: true, divider: true, onClick: () => setLastAction(t("showcase.nav.actionDelete")) },
206
214
  ];
207
215
 
208
216
  const code = `<ITDropdownMenu\n items={[\n { id: 'edit', label: 'Editar', icon: <FaEdit />, onClick: edit },\n { id: 'delete', label: 'Eliminar', icon: <FaTrash />, danger: true, divider: true, onClick: remove },\n ]}\n/>`;
@@ -210,15 +218,15 @@ export const DropdownMenuShowcase = () => {
210
218
  return (
211
219
  <ShowcaseLayout
212
220
  title="ITDropdownMenu"
213
- description="Menú de acciones con navegación por teclado y semántica ARIA. Se renderiza en portal, por lo que no lo recorta un ITCard ni ancestros con overflow: hidden."
221
+ description={t("showcase.nav.dropdownDesc")}
214
222
  code={code}
215
223
  demo={
216
224
  <div className="w-full max-w-md">
217
- <ITCard title="Acciones de fila">
225
+ <ITCard title={t("showcase.nav.rowActions")}>
218
226
  <div className="flex items-center justify-between">
219
227
  <div>
220
- <p className="text-sm font-semibold text-slate-700 dark:text-slate-200">Reporte Q3.pdf</p>
221
- <p className="text-xs text-slate-500">Última acción: {lastAction}</p>
228
+ <p className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">Reporte Q3.pdf</p>
229
+ <p className="text-xs text-slate-500">{t("showcase.nav.lastAction", { action: lastAction })}</p>
222
230
  </div>
223
231
  <ITDropdownMenu items={items} />
224
232
  </div>
@@ -227,14 +235,14 @@ export const DropdownMenuShowcase = () => {
227
235
  }
228
236
  controls={
229
237
  <p className="text-xs text-slate-500">
230
- Teclado: flechas para navegar, Enter para activar, Esc para cerrar. El menú se abre dentro del ITCard sin recortarse.
238
+ {t("showcase.nav.dropdownKeyboardHint")}
231
239
  </p>
232
240
  }
233
241
  gallery={
234
242
  <div className="grid grid-cols-1 md:grid-cols-2 gap-8">
235
243
  <div className="w-full max-w-xs">
236
- <p className="mb-3 text-[10px] font-bold uppercase tracking-wider text-slate-400">Trigger personalizado</p>
237
- <ITDropdownMenu items={items} trigger={<span className="text-sm font-semibold px-1">Acciones</span>} triggerLabel="Acciones" placement="bottom-start" />
244
+ <p className="mb-3 text-[10px] font-bold uppercase tracking-wider text-slate-400">{t("showcase.nav.customTrigger")}</p>
245
+ <ITDropdownMenu items={items} trigger={<span className="text-sm font-semibold px-1">{t("showcase.nav.actions")}</span>} triggerLabel={t("showcase.nav.actions")} placement="bottom-start" />
238
246
  </div>
239
247
  <div className="w-full max-w-xs">
240
248
  <p className="mb-3 text-[10px] font-bold uppercase tracking-wider text-slate-400">Placement top-start</p>