@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
@@ -13,14 +13,17 @@ import {
13
13
  FaTerminal,
14
14
  FaWrench,
15
15
  } from "react-icons/fa";
16
- import { ITAccordion, ITBadget, ITButton, ITCard, ITFlex, ITGrid, ITStack, ITText } from "../index";
16
+ import { ITAccordion, ITButton, ITFlex, ITGrid, ITStack, ITText } from "../index";
17
17
  import type { ITAccordionItem } from "../index";
18
+ import { BotonAccion } from "@/sandbox/ui";
19
+ import { useITTranslation } from "@/i18n";
18
20
 
19
21
  const GITHUB_URL = "https://github.com/maag070208/AXZY_UI_SYSTEM";
20
22
  const ISSUE_URL = `${GITHUB_URL}/issues/new`;
21
23
 
22
24
  /** Clipboard button that flips to a "Copiado" confirmation for 2s. */
23
25
  const CopyButton = ({ text }: { text: string }) => {
26
+ const { t } = useITTranslation();
24
27
  const [copied, setCopied] = useState(false);
25
28
  return (
26
29
  <ITButton
@@ -35,7 +38,7 @@ const CopyButton = ({ text }: { text: string }) => {
35
38
  >
36
39
  <ITFlex align="center" gap={1.5}>
37
40
  {copied ? <FaCheck size={10} className="text-emerald-400" /> : <FaClipboardList size={10} />}
38
- {copied ? "Copiado" : "Copiar"}
41
+ {copied ? t("showcase.common.copied") : t("showcase.common.copy")}
39
42
  </ITFlex>
40
43
  </ITButton>
41
44
  );
@@ -80,7 +83,9 @@ const ErrorBody = ({
80
83
  fix: ReactNode;
81
84
  bad?: string;
82
85
  good?: string;
83
- }) => (
86
+ }) => {
87
+ const { t } = useITTranslation();
88
+ return (
84
89
  <ITStack spacing={3} className="pt-1">
85
90
  <div className="flex items-start gap-2">
86
91
  <FaExclamationTriangle size={12} className="mt-0.5 shrink-0 text-danger-500" />
@@ -96,18 +101,19 @@ const ErrorBody = ({
96
101
  </div>
97
102
  {bad && (
98
103
  <CodeBlock
99
- filename="❌ Incorrecto"
104
+ filename={t("showcase.common.incorrect")}
100
105
  code={bad}
101
106
  />
102
107
  )}
103
108
  {good && (
104
109
  <CodeBlock
105
- filename="✅ Correcto"
110
+ filename={t("showcase.common.correct")}
106
111
  code={good}
107
112
  />
108
113
  )}
109
114
  </ITStack>
110
- );
115
+ );
116
+ };
111
117
 
112
118
  const COMMON_ERRORS: ITAccordionItem[] = [
113
119
  {
@@ -254,13 +260,13 @@ const FAQ: ITAccordionItem[] = [
254
260
  id: "faq-examples",
255
261
  title: "¿Dónde están los ejemplos de cada componente?",
256
262
  content:
257
- "En el sandbox: ejecuta `pnpm dev` y navega a `#ui-system`. Las historias de Storybook existen y deben compilar, pero la superficie principal de ejemplos es el sandbox.",
263
+ "En el sandbox: ejecuta `pnpm dev` y navega a `#ui-system`. La superficie de ejemplos es el sandbox y la referencia por componente vive en `docs/`.",
258
264
  },
259
265
  {
260
266
  id: "faq-new-component",
261
267
  title: "¿Cómo agrego un componente nuevo?",
262
268
  content:
263
- "Crea `src/components/<layer>/<kebab-name>/` con `<name>.tsx`, `<name>.props.ts` y `<name>.stories.tsx`. Documenta cada prop con JSDoc, regístralo en `src/index.ts` y actualiza los documentos y el showcase correspondiente.",
269
+ "Crea `src/components/<layer>/<kebab-name>/` con `<name>.tsx` y `<name>.props.ts`. Documenta cada prop con JSDoc, regístralo en `src/index.ts` y actualiza `docs/<capa>/<nombre>.md` y el showcase correspondiente.",
264
270
  },
265
271
  {
266
272
  id: "faq-changes-not-visible",
@@ -275,10 +281,10 @@ const FAQ: ITAccordionItem[] = [
275
281
  "Sí. Importa named exports (`import { ITButton } from \"@axzydev/axzy_ui_system\"`) y el bundler descarta lo que no usas. No hay dependencias de UI de terceros.",
276
282
  },
277
283
  {
278
- id: "faq-storybook",
279
- title: "¿Necesito Storybook para desarrollar?",
284
+ id: "faq-examples-docs",
285
+ title: "¿Dónde veo la documentación de un componente?",
280
286
  content:
281
- "No es obligatorio. `pnpm storybook` es útil para aislar un componente, pero los ejemplos de referencia viven en el sandbox y las historias solo deben seguir compilando.",
287
+ "En `docs/<capa>/<componente>.md` tienes props, defaults, ejemplo y notas. Los ejemplos vivos están en el sandbox (`pnpm dev` → `#ui-system`).",
282
288
  },
283
289
  {
284
290
  id: "faq-browser-support",
@@ -315,61 +321,47 @@ pnpm check:atomic # valida la dirección de dependencias entre capas`;
315
321
  * frecuentes, preguntas frecuentes y guía para reportar incidencias.
316
322
  */
317
323
  export const HelpShowcase = () => {
324
+ const { t } = useITTranslation();
318
325
  return (
319
326
  <ITStack spacing={10} className="animate-fadeIn">
320
- {/* ─── HERO ─── */}
321
- <ITCard className="overflow-hidden border-0 bg-gradient-to-br from-primary-50 via-white to-purple-50 dark:from-primary-950/20 dark:via-slate-900 dark:to-purple-950/20 shadow-sm">
322
- <div className="relative">
323
- <div className="absolute -top-40 -right-40 w-[500px] h-[500px] bg-primary-500/10 rounded-full blur-[120px] pointer-events-none" />
324
- <div className="absolute -bottom-40 -left-40 w-[500px] h-[500px] bg-purple-500/10 rounded-full blur-[120px] pointer-events-none" />
325
- <ITStack spacing={5} className="relative z-10">
326
- <ITStack spacing={2}>
327
- <ITBadget label="Soporte" color="purple" variant="outlined" className="w-fit" />
328
- <ITText as="h1" className="!text-4xl !font-bold !tracking-tight">
329
- Ayuda & Solución de Bugs
330
- </ITText>
331
- <ITText as="p" muted className="!text-base !leading-relaxed max-w-2xl">
332
- Guía para diagnosticar y resolver los problemas más frecuentes al usar AXZY UI System,
333
- más una checklist para reportar incidencias con todo el contexto necesario.
334
- </ITText>
335
- </ITStack>
336
- <ITFlex gap={3} wrap="wrap" align="center">
337
- <ITButton
338
- variant="filled"
339
- color="primary"
340
- icon={<FaBug size={13} />}
341
- onClick={() => window.open(ISSUE_URL, "_blank", "noopener,noreferrer")}
342
- >
343
- Reportar un bug
344
- </ITButton>
345
- <ITButton
346
- variant="outlined"
347
- color="secondary"
348
- icon={<FaBook size={13} />}
349
- onClick={() => window.open(GITHUB_URL, "_blank", "noopener,noreferrer")}
350
- >
351
- Ver repositorio
352
- </ITButton>
353
- </ITFlex>
354
- </ITStack>
355
- </div>
356
- </ITCard>
327
+ {/* ─── MASTHEAD ─── */}
328
+ <header className="border-b border-slate-200 pb-8 dark:border-slate-800">
329
+ <p className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">
330
+ {t("showcase.help.badge")}
331
+ </p>
332
+ <h1 className="mt-2.5 font-display text-[34px] font-bold leading-[1.06] tracking-[-0.015em] text-slate-900 dark:text-white sm:text-[44px]">
333
+ {t("showcase.help.title")}
334
+ </h1>
335
+ <p className="mt-5 max-w-[68ch] text-[15.5px] leading-[1.75] text-slate-600 dark:text-slate-300">
336
+ {t("showcase.help.subtitle")}
337
+ </p>
338
+ <ITFlex gap={3} wrap="wrap" align="center" className="!mt-7">
339
+ <BotonAccion
340
+ variante="filled"
341
+ icono={<FaBug size={12} />}
342
+ onClick={() => window.open(ISSUE_URL, "_blank", "noopener,noreferrer")}
343
+ >
344
+ {t("showcase.help.reportBug")}
345
+ </BotonAccion>
346
+ <BotonAccion
347
+ variante="neutral"
348
+ icono={<FaBook size={12} />}
349
+ onClick={() => window.open(GITHUB_URL, "_blank", "noopener,noreferrer")}
350
+ >
351
+ {t("showcase.help.viewRepo")}
352
+ </BotonAccion>
353
+ </ITFlex>
354
+ </header>
357
355
 
358
356
  {/* ─── DIAGNÓSTICO RÁPIDO ─── */}
359
357
  <section>
360
- <ITFlex align="center" gap={2.5} className="!mb-4">
361
- <span className="flex h-8 w-8 items-center justify-center rounded-lg bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300">
362
- <FaTerminal size={13} />
363
- </span>
364
- <ITStack spacing={0}>
365
- <ITText as="h2" className="!text-lg !font-bold">
366
- Diagnóstico rápido
367
- </ITText>
368
- <ITText as="p" muted className="!text-xs">
369
- Ejecuta estos comandos antes de reportar cualquier fallo.
370
- </ITText>
371
- </ITStack>
372
- </ITFlex>
358
+ <div className="!mb-5 border-b border-slate-200 pb-4 dark:border-slate-800">
359
+ <h2 className="flex items-center gap-2.5 font-display text-[20px] font-bold tracking-[-0.02em] text-slate-900 dark:text-white">
360
+ <span className="text-primary-700 dark:text-primary-500"><FaTerminal size={13} /></span>
361
+ {t("showcase.help.quickDiagnosis")}
362
+ </h2>
363
+ <p className="mt-1.5 text-[13px] text-slate-500 dark:text-slate-400">{t("showcase.help.quickDiagnosisHint")}</p>
364
+ </div>
373
365
  <div className="relative">
374
366
  <div className="absolute top-2 right-2 z-10">
375
367
  <CopyButton text={DIAGNOSTICS} />
@@ -380,79 +372,85 @@ export const HelpShowcase = () => {
380
372
 
381
373
  {/* ─── ERRORES COMUNES ─── */}
382
374
  <section>
383
- <ITFlex align="center" gap={2.5} className="!mb-4">
384
- <span className="flex h-8 w-8 items-center justify-center rounded-lg bg-danger-100 dark:bg-danger-950/40 text-danger-600 dark:text-danger-400">
385
- <FaExclamationTriangle size={13} />
386
- </span>
387
- <ITStack spacing={0}>
388
- <ITText as="h2" className="!text-lg !font-bold">
389
- Errores comunes y su solución
390
- </ITText>
391
- <ITText as="p" muted className="!text-xs">
392
- Síntoma, causa y arreglo de los tropiezos más habituales del stack.
393
- </ITText>
394
- </ITStack>
395
- </ITFlex>
375
+ <div className="!mb-5 border-b border-slate-200 pb-4 dark:border-slate-800">
376
+ <h2 className="flex items-center gap-2.5 font-display text-[20px] font-bold tracking-[-0.02em] text-slate-900 dark:text-white">
377
+ <span className="text-primary-700 dark:text-primary-500"><FaExclamationTriangle size={13} /></span>
378
+ {t("showcase.help.commonErrors")}
379
+ </h2>
380
+ <p className="mt-1.5 text-[13px] text-slate-500 dark:text-slate-400">{t("showcase.help.commonErrorsHint")}</p>
381
+ </div>
396
382
  <ITAccordion items={COMMON_ERRORS} allowMultiple variant="separated" />
397
383
  </section>
398
384
 
399
385
  {/* ─── FAQ ─── */}
400
386
  <section>
401
- <ITFlex align="center" gap={2.5} className="!mb-4">
402
- <span className="flex h-8 w-8 items-center justify-center rounded-lg bg-info-100 dark:bg-info-950/40 text-info-600 dark:text-info-400">
403
- <FaQuestionCircle size={13} />
404
- </span>
405
- <ITStack spacing={0}>
406
- <ITText as="h2" className="!text-lg !font-bold">
407
- Preguntas frecuentes
408
- </ITText>
409
- <ITText as="p" muted className="!text-xs">
410
- Respuestas cortas a las dudas más repetidas.
411
- </ITText>
412
- </ITStack>
413
- </ITFlex>
387
+ <div className="!mb-5 border-b border-slate-200 pb-4 dark:border-slate-800">
388
+ <h2 className="flex items-center gap-2.5 font-display text-[20px] font-bold tracking-[-0.02em] text-slate-900 dark:text-white">
389
+ <span className="text-primary-700 dark:text-primary-500"><FaQuestionCircle size={13} /></span>
390
+ {t("showcase.help.faq")}
391
+ </h2>
392
+ <p className="mt-1.5 text-[13px] text-slate-500 dark:text-slate-400">{t("showcase.help.faqHint")}</p>
393
+ </div>
414
394
  <ITAccordion items={FAQ} allowMultiple variant="bordered" />
415
395
  </section>
416
396
 
417
397
  {/* ─── CÓMO REPORTAR UN BUG ─── */}
418
- <ITCard title="Cómo reportar un bug" className="border-purple-200/60 dark:border-purple-800/60 shadow-sm">
398
+ <section className="border-t border-slate-200 pt-8 dark:border-slate-800">
419
399
  <ITStack spacing={6}>
420
- <ITText as="p" className="!text-sm" muted>
421
- Un buen reporte se puede reproducir sin preguntas extra. Sigue estos pasos y completa la
422
- checklist antes de abrir el issue.
423
- </ITText>
400
+ <div className="border-b border-slate-200 pb-4 dark:border-slate-800">
401
+ <h2 className="flex items-center gap-2.5 font-display text-[20px] font-bold tracking-[-0.02em] text-slate-900 dark:text-white">
402
+ <span className="text-primary-700 dark:text-primary-500">
403
+ <FaBug size={13} />
404
+ </span>
405
+ {t("showcase.help.howToReport")}
406
+ </h2>
407
+ <p className="mt-1.5 max-w-[70ch] text-[13px] leading-relaxed text-slate-500 dark:text-slate-400">
408
+ {t("showcase.help.reportIntro")}
409
+ </p>
410
+ </div>
424
411
 
425
412
  <ITGrid container spacing={6}>
426
413
  <ITGrid item xs={12} md={6}>
427
414
  <ITStack spacing={3}>
428
- <ITText as="h3" className="!text-[11px] !font-bold uppercase !tracking-wider text-slate-400 dark:text-slate-500">
429
- Pasos
415
+ <ITText as="h3" className="font-mono !text-[11px] !font-medium uppercase !tracking-[0.14em] text-slate-500 dark:text-slate-400">
416
+ {t("showcase.help.steps")}
430
417
  </ITText>
431
- {REPORT_STEPS.map((step, index) => (
432
- <ITFlex key={step} align="start" gap={3}>
433
- <span className="flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-950/40 text-[11px] font-bold text-primary-600 dark:text-primary-400">
434
- {index + 1}
435
- </span>
436
- <ITText as="p" className="!text-sm text-slate-600 dark:text-slate-300">
437
- {step}
438
- </ITText>
439
- </ITFlex>
440
- ))}
418
+ <ol className="border-t border-slate-200 dark:border-slate-800">
419
+ {REPORT_STEPS.map((step, index) => (
420
+ <li
421
+ key={step}
422
+ className="flex items-start gap-3 border-b border-slate-200 py-3 dark:border-slate-800"
423
+ >
424
+ <span className="font-mono text-[11px] tabular-nums text-slate-500 dark:text-slate-400">
425
+ {String(index + 1).padStart(2, "0")}
426
+ </span>
427
+ <ITText as="p" className="!text-[13.5px] !leading-relaxed text-slate-600 dark:text-slate-300">
428
+ {step}
429
+ </ITText>
430
+ </li>
431
+ ))}
432
+ </ol>
441
433
  </ITStack>
442
434
  </ITGrid>
443
435
 
444
436
  <ITGrid item xs={12} md={6}>
445
- <div className="h-full rounded-2xl border border-slate-200 dark:border-slate-800 bg-slate-50 dark:bg-slate-800/40 p-5">
446
- <ITText as="h3" className="!mb-4 !text-[11px] !font-bold uppercase !tracking-wider text-slate-400 dark:text-slate-500">
447
- Incluye en el reporte
437
+ <div>
438
+ <ITText as="h3" className="font-mono !text-[11px] !font-medium uppercase !tracking-[0.14em] text-slate-500 dark:text-slate-400">
439
+ {t("showcase.help.includeInReport")}
448
440
  </ITText>
449
- <ul className="space-y-3">
441
+ <ul className="mt-3 border-t border-slate-200 dark:border-slate-800">
450
442
  {REPORT_CHECKLIST.map((item) => (
451
- <li key={item} className="flex items-start gap-3">
452
- <span className="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-success-100 dark:bg-success-950/40 text-success-600 dark:text-success-400">
453
- <FaCheck size={10} />
443
+ <li
444
+ key={item}
445
+ className="flex items-start gap-3 border-b border-slate-200 py-3 dark:border-slate-800"
446
+ >
447
+ <FaCheck
448
+ size={10}
449
+ className="mt-1.5 shrink-0 text-primary-700 dark:text-primary-500"
450
+ />
451
+ <span className="text-[13.5px] leading-relaxed text-slate-600 dark:text-slate-300">
452
+ {item}
454
453
  </span>
455
- <span className="text-sm text-slate-600 dark:text-slate-300">{item}</span>
456
454
  </li>
457
455
  ))}
458
456
  </ul>
@@ -464,34 +462,34 @@ export const HelpShowcase = () => {
464
462
  <ITFlex align="center" gap={2}>
465
463
  <FaLifeRing size={14} className="text-primary-500" />
466
464
  <ITText as="p" className="!text-xs" muted>
467
- ¿Dudas de uso en lugar de un bug? Abre una discusión en el repositorio.
465
+ {t("showcase.help.footerHint")}
468
466
  </ITText>
469
467
  </ITFlex>
470
468
  <ITFlex gap={3} wrap="wrap">
471
- <ITButton
472
- variant="filled"
473
- color="primary"
474
- icon={<FaBug size={13} />}
469
+ <BotonAccion
470
+ variante="filled"
471
+ icono={<FaBug size={12} />}
475
472
  onClick={() => window.open(ISSUE_URL, "_blank", "noopener,noreferrer")}
476
473
  >
477
- Abrir issue
478
- </ITButton>
479
- <ITButton
480
- variant="outlined"
481
- color="secondary"
482
- icon={<FaSyncAlt size={13} />}
483
- onClick={() => window.open(`${GITHUB_URL}/blob/main/AGENTS.md`, "_blank", "noopener,noreferrer")}
474
+ {t("showcase.help.openIssue")}
475
+ </BotonAccion>
476
+ <BotonAccion
477
+ variante="neutral"
478
+ icono={<FaSyncAlt size={12} />}
479
+ onClick={() =>
480
+ window.open(`${GITHUB_URL}/blob/main/AGENTS.md`, "_blank", "noopener,noreferrer")
481
+ }
484
482
  >
485
- Ver AGENTS.md
486
- </ITButton>
483
+ {t("showcase.help.viewAgents")}
484
+ </BotonAccion>
487
485
  </ITFlex>
488
486
  </ITFlex>
489
487
 
490
488
  <ITFlex align="center" gap={2} wrap="wrap">
491
- <FixPill>Pasos reproducibles + versión + entorno = reporte accionable</FixPill>
489
+ <FixPill>{t("showcase.help.fixPill")}</FixPill>
492
490
  </ITFlex>
493
491
  </ITStack>
494
- </ITCard>
492
+ </section>
495
493
  </ITStack>
496
494
  );
497
495
  };