@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
@@ -1,85 +1,144 @@
1
- import React, { useState } from "react";
1
+ import { useState } from "react";
2
2
  import { FaCode } from "react-icons/fa";
3
- import {
4
- ITButton,
5
- ITInput,
6
- ITSelect,
7
- ITBadget,
8
- } from "../index";
9
- import { CodeViewer } from "./ShowcaseLayout";
3
+ import { ITBadget, ITButton, ITInput, ITSelect } from "../index";
4
+ import { BloqueCodigo, BotonAccion, EYEBROW, FILETE } from "@/sandbox/ui";
5
+ import { useITTranslation } from "@/i18n";
10
6
 
11
7
  type SizeKey = "sm" | "md" | "lg";
12
8
 
13
- const sizes: SizeKey[] = ["sm", "md", "lg"];
9
+ const SIZES: SizeKey[] = ["sm", "md", "lg"];
14
10
 
15
- const sizeDemoCode = (s: SizeKey) => `// Medida estándar "${s}" — misma escala en todos los componentes
11
+ /** Código de ejemplo de cada medida, mostrado en el bloque desplegable. */
12
+ const codigoDeMedida = (s: SizeKey) => `// Medida estándar "${s}" — misma escala en todos los componentes
16
13
  <ITInput size="${s}" label="Nombre" />
17
14
  <ITSelect size="${s}" label="Rol" />
18
15
  <ITButton size="${s}">Guardar</ITButton>
19
16
  <ITBadget size="${s}">Activo</ITBadget>`;
20
17
 
21
- const SizeRow = ({ size, isOpen, onToggleShow }: { size: SizeKey; isOpen: boolean; onToggleShow: () => void }) => (
22
- <div className="bg-white dark:bg-slate-900 rounded-xl border border-slate-200 dark:border-slate-700 shadow-sm overflow-hidden">
23
- <div className="px-6 py-4 border-b border-slate-200 dark:border-slate-700 flex items-center justify-between">
24
- <div>
25
- <h3 className="text-sm font-bold text-slate-800 dark:text-white uppercase">{size}</h3>
26
- <p className="text-xs text-slate-500 mt-1">Medida estándar del sistema</p>
27
- </div>
28
- <ITButton variant="outlined" color="gray" size="sm" onClick={onToggleShow}>
29
- <span className="inline-flex items-center gap-1.5"><FaCode size={12} /> Código</span>
30
- </ITButton>
31
- </div>
32
- <div className="px-6 py-5 space-y-4">
33
- <div>
34
- <p className="text-xs text-slate-400 mb-1.5">ITInput</p>
35
- <ITInput name={`names_${size}`} label="Nombre" placeholder="Ej: Juan" onChange={() => {}} onBlur={() => {}} size={size} />
36
- </div>
18
+ /**
19
+ * Una fila de medida: la etiqueta mono, los componentes en esa medida y el botón
20
+ * para ver el código. Filete entre filas, sin tarjetas anidadas.
21
+ */
22
+ const FilaMedida = ({
23
+ size,
24
+ abierta,
25
+ onToggle,
26
+ }: {
27
+ /** Medida que muestra la fila. */
28
+ size: SizeKey;
29
+ /** Si el bloque de código está desplegado. */
30
+ abierta: boolean;
31
+ /** Alterna el bloque de código. */
32
+ onToggle: () => void;
33
+ }) => {
34
+ const { t } = useITTranslation();
35
+
36
+ return (
37
+ <div className={`grid gap-5 border-b py-6 lg:grid-cols-[150px_minmax(0,1fr)] lg:gap-10 ${FILETE}`}>
37
38
  <div>
38
- <p className="text-xs text-slate-400 mb-1.5">ITSelect</p>
39
- <ITSelect
40
- name={`roles_${size}`}
41
- label="Rol"
42
- placeholder="Selecciona una opción"
43
- size={size}
44
- onChange={() => {}}
45
- onBlur={() => {}}
46
- options={[
47
- { label: "Administrador", value: "admin" },
48
- { label: "Colaborador", value: "staff" },
49
- ]}
50
- />
39
+ <p className="font-display text-[18px] font-bold tracking-[-0.02em] text-slate-900 uppercase dark:text-white">
40
+ {size}
41
+ </p>
42
+ <p className="mt-1 text-[12px] leading-relaxed text-slate-500 dark:text-slate-400">
43
+ {t("showcase.sizes.rowDesc")}
44
+ </p>
45
+ <BotonAccion
46
+ variante="text"
47
+ tamano="sm"
48
+ className="!mt-3 !px-0"
49
+ icono={<FaCode size={11} />}
50
+ onClick={onToggle}
51
+ >
52
+ {t("showcase.common.code")}
53
+ </BotonAccion>
51
54
  </div>
52
- <div className="flex flex-wrap items-center gap-3 pt-1">
53
- <p className="text-xs text-slate-400 mr-1">ITButton / ITBadget</p>
54
- <ITButton size={size}>Guardar</ITButton>
55
- <ITButton variant="outlined" color="gray" size={size}>Cancelar</ITButton>
56
- <ITBadget size={size}>Activo</ITBadget>
57
- <ITBadget size={size} variant="outlined">Borrador</ITBadget>
55
+
56
+ <div className="min-w-0">
57
+ <div className="grid gap-4 sm:grid-cols-2">
58
+ <ITInput
59
+ name={`names_${size}`}
60
+ label={t("showcase.sizes.name")}
61
+ placeholder={t("showcase.sizes.exampleName")}
62
+ onChange={() => {}}
63
+ onBlur={() => {}}
64
+ size={size}
65
+ />
66
+ <ITSelect
67
+ name={`roles_${size}`}
68
+ label={t("showcase.sizes.role")}
69
+ placeholder={t("showcase.sizes.placeholder")}
70
+ size={size}
71
+ onChange={() => {}}
72
+ onBlur={() => {}}
73
+ options={[
74
+ { label: "Administrador", value: "admin" },
75
+ { label: "Colaborador", value: "staff" },
76
+ ]}
77
+ />
78
+ </div>
79
+
80
+ <div className="mt-5 flex flex-wrap items-center gap-3">
81
+ <ITButton size={size}>{t("showcase.common.save")}</ITButton>
82
+ <ITButton variant="outlined" color="gray" size={size}>
83
+ {t("showcase.common.cancel")}
84
+ </ITButton>
85
+ <ITBadget size={size}>{t("showcase.common.active")}</ITBadget>
86
+ <ITBadget size={size} variant="outlined">
87
+ {t("showcase.sizes.draft")}
88
+ </ITBadget>
89
+ </div>
90
+
91
+ {abierta && (
92
+ <div className="mt-5">
93
+ <BloqueCodigo code={codigoDeMedida(size)} filename={`size="${size}"`} />
94
+ </div>
95
+ )}
58
96
  </div>
59
97
  </div>
60
- {isOpen && (
61
- <div className="border-t border-slate-200 dark:border-slate-700">
62
- <CodeViewer code={sizeDemoCode(size)} />
63
- </div>
64
- )}
65
- </div>
66
- );
98
+ );
99
+ };
67
100
 
101
+ /**
102
+ * Medidas del sistema (`#ui-system/general/sizes`): la misma escala
103
+ * `sm / md / lg` aplicada a input, select, botón y badge, en filas con filete.
104
+ *
105
+ * @example
106
+ * ```tsx
107
+ * <SizesShowcase />
108
+ * ```
109
+ */
68
110
  export const SizesShowcase = () => {
69
- const [openSize, setOpenSize] = useState<SizeKey | null>(null);
111
+ const { t } = useITTranslation();
112
+ const [abierta, setAbierta] = useState<SizeKey | null>(null);
70
113
 
71
114
  return (
72
- <div className="space-y-6">
73
- <div>
74
- <h2 className="text-xl font-bold text-slate-900 dark:text-white">Medidas estándar · sm / md / lg</h2>
75
- <p className="text-sm text-slate-500 mt-1">
76
- Una sola escala para todos los componentes. El tamaño del formulario, select, botón y badge
77
- se controla con la misma prop <code className="px-1 py-0.5 bg-slate-100 dark:bg-slate-800 rounded text-slate-700 dark:text-slate-300">size</code>.
115
+ <div className="animate-fadeIn pb-4">
116
+ <header className={`border-b pb-8 ${FILETE}`}>
117
+ <p className={EYEBROW}>{`sm · md · lg`}</p>
118
+ <h1 className="mt-2.5 font-display text-[32px] font-bold leading-[1.06] tracking-[-0.02em] text-slate-900 dark:text-white sm:text-[40px]">
119
+ {t("showcase.sizes.title")}
120
+ </h1>
121
+ <p className="mt-4 max-w-[68ch] text-[15px] leading-relaxed text-slate-600 dark:text-slate-300">
122
+ {t("showcase.sizes.desc")}{" "}
123
+ <code className="rounded-[6px] border border-slate-200 bg-slate-50 px-1.5 py-0.5 font-mono text-[12px] text-slate-700 dark:border-slate-800 dark:bg-slate-950 dark:text-slate-200">
124
+ size
125
+ </code>
126
+ .
78
127
  </p>
79
- </div>
80
- {sizes.map((s) => (
81
- <SizeRow key={s} size={s} isOpen={openSize === s} onToggleShow={() => setOpenSize(openSize === s ? null : s)} />
82
- ))}
128
+ </header>
129
+
130
+ <section className="pt-10">
131
+ <div className={`border-t ${FILETE}`}>
132
+ {SIZES.map((size) => (
133
+ <FilaMedida
134
+ key={size}
135
+ size={size}
136
+ abierta={abierta === size}
137
+ onToggle={() => setAbierta(abierta === size ? null : size)}
138
+ />
139
+ ))}
140
+ </div>
141
+ </section>
83
142
  </div>
84
143
  );
85
- };
144
+ };