@axzydev/axzy_ui_system 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "packageManager": "pnpm@10.34.0",
5
5
  "private": false,
6
6
  "license": "MIT",
7
- "version": "1.5.0",
7
+ "version": "1.5.1",
8
8
  "type": "module",
9
9
  "sideEffects": [
10
10
  "*.css"
package/src/dev.css CHANGED
@@ -116,19 +116,3 @@ html {
116
116
  animation: none;
117
117
  }
118
118
  }
119
-
120
- /* ──────────────────────────────────────────────
121
- PANEL DE PROPIEDADES A ANCHO COMPLETO (dev.css)
122
- Cuando la vitrina ocupa las 12 columnas, las filas `justify-between` de los
123
- controles dejaban la etiqueta a un lado y el control a 800px del otro. Aquí
124
- el control se agrupa junto a su etiqueta.
125
- ────────────────────────────────────────────── */
126
- .it-panel-ancho .justify-between {
127
- justify-content: flex-start;
128
- gap: 0.75rem;
129
- }
130
-
131
- /* Las notas del panel no se estiran a 100+ caracteres por línea. */
132
- .it-panel-ancho p {
133
- max-width: 72ch;
134
- }
@@ -72,6 +72,11 @@ export const sandboxMessages: ITMessagesByLocale = {
72
72
  "showcase.layout.docs": "Documentación",
73
73
  "showcase.layout.eyebrow": "Vitrina de componentes",
74
74
  "showcase.layout.gallery": "Variaciones y estados (Galería)",
75
+ "showcase.layout.galleryTitle": "Variaciones y estados",
76
+ "showcase.layout.viewCode": "Código",
77
+ "showcase.layout.hideCode": "Ocultar",
78
+ "showcase.layout.controls": "Controles",
79
+ "showcase.layout.api": "API del componente",
75
80
  "showcase.layout.jsxCode": "Código JSX",
76
81
  "showcase.layout.notes": "Notas",
77
82
  "showcase.layout.overview": "Descripción general",
@@ -1013,6 +1018,11 @@ export const sandboxMessages: ITMessagesByLocale = {
1013
1018
  "showcase.layout.docs": "Docs",
1014
1019
  "showcase.layout.eyebrow": "Component showcase",
1015
1020
  "showcase.layout.gallery": "Variations & States (Gallery)",
1021
+ "showcase.layout.galleryTitle": "Variations & states",
1022
+ "showcase.layout.viewCode": "Code",
1023
+ "showcase.layout.hideCode": "Hide",
1024
+ "showcase.layout.controls": "Controls",
1025
+ "showcase.layout.api": "Component API",
1016
1026
  "showcase.layout.jsxCode": "JSX Code",
1017
1027
  "showcase.layout.notes": "Notes",
1018
1028
  "showcase.layout.overview": "Overview",
@@ -13,7 +13,7 @@
13
13
  */
14
14
 
15
15
  import { useState, type ReactNode } from "react";
16
- import { FaCheck, FaCopy } from "react-icons/fa";
16
+ import { FaCheck, FaCode, FaCopy } from "react-icons/fa";
17
17
  import { useITTranslation } from "@/i18n";
18
18
 
19
19
  /** Eyebrow mono apagado: encabezados de sección y etiquetas de metadato. */
@@ -367,6 +367,7 @@ export const BloqueCodigo = ({
367
367
  />
368
368
  </div>
369
369
  <pre
370
+ tabIndex={0}
370
371
  className={`overflow-x-auto whitespace-pre-wrap p-4 font-mono text-xs leading-relaxed text-slate-200 ${
371
372
  compact ? "max-h-[420px] overflow-y-auto" : ""
372
373
  }`}
@@ -375,3 +376,99 @@ export const BloqueCodigo = ({
375
376
  </pre>
376
377
  </div>
377
378
  );
379
+
380
+ /** Props de `EjemploContenedor`. */
381
+ export interface EjemploContenedorProps {
382
+ /** Número del ejemplo (`01`, `02`…). Opcional. */
383
+ numero?: string;
384
+ /** Título del ejemplo (mono, mayúsculas). */
385
+ titulo: string;
386
+ /** El demo. */
387
+ children: ReactNode;
388
+ /** Código fuente del ejemplo: si se pasa, aparece el botón «Código». */
389
+ codigo?: string;
390
+ /** Nota al pie, bajo el demo. */
391
+ nota?: string;
392
+ /** Superficie del demo sin padding (layouts completos). */
393
+ sangrado?: boolean;
394
+ /** Clases extra de la superficie del demo. */
395
+ className?: string;
396
+ }
397
+
398
+ /**
399
+ * Contenedor de un ejemplo del sandbox: cabecera con número, título y la acción
400
+ * de ver el código (siempre visible), superficie del demo y nota opcional. El
401
+ * código se despliega **dentro** del mismo contenedor, no en una pestaña aparte.
402
+ *
403
+ * @example
404
+ * ```tsx
405
+ * <EjemploContenedor numero="01" titulo="Con icono" codigo={code}>
406
+ * <ITButton icon={<FaSave />}>Guardar</ITButton>
407
+ * </EjemploContenedor>
408
+ * ```
409
+ */
410
+ export const EjemploContenedor = ({
411
+ numero,
412
+ titulo,
413
+ children,
414
+ codigo,
415
+ nota,
416
+ sangrado = false,
417
+ className = "",
418
+ }: EjemploContenedorProps) => {
419
+ const { t } = useITTranslation();
420
+ const [verCodigo, setVerCodigo] = useState(false);
421
+
422
+ return (
423
+ <section className={`overflow-hidden rounded-[10px] border ${FILETE}`}>
424
+ <header
425
+ className={`flex flex-wrap items-center gap-x-3 gap-y-2 border-b bg-slate-50/70 px-4 py-2.5 dark:bg-slate-950/40 ${FILETE}`}
426
+ >
427
+ {numero && (
428
+ <span className="font-mono text-[10px] tabular-nums text-slate-400 dark:text-slate-500">
429
+ {numero}
430
+ </span>
431
+ )}
432
+ <h2 className="min-w-0 flex-1 truncate font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:text-slate-200">
433
+ {titulo}
434
+ </h2>
435
+
436
+ {codigo && (
437
+ <button
438
+ type="button"
439
+ onClick={() => setVerCodigo(!verCodigo)}
440
+ aria-expanded={verCodigo}
441
+ className={`inline-flex items-center gap-1.5 rounded-[8px] border px-2.5 py-1 font-mono text-[10px] uppercase tracking-[0.12em] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500/60 ${
442
+ verCodigo
443
+ ? "border-primary-700 text-primary-700 dark:border-primary-500 dark:text-primary-500"
444
+ : "border-slate-200 text-slate-500 hover:text-slate-900 dark:border-slate-700 dark:text-slate-400 dark:hover:text-white"
445
+ }`}
446
+ >
447
+ <FaCode size={10} />
448
+ {verCodigo ? t("showcase.layout.hideCode") : t("showcase.layout.viewCode")}
449
+ </button>
450
+ )}
451
+ </header>
452
+
453
+ <div
454
+ className={`bg-white dark:bg-slate-950 ${sangrado ? "" : "p-5 sm:p-6"} ${className}`}
455
+ >
456
+ {children}
457
+ </div>
458
+
459
+ {nota && (
460
+ <p
461
+ className={`border-t px-4 py-2.5 font-mono text-[11px] leading-relaxed text-slate-500 dark:text-slate-400 ${FILETE}`}
462
+ >
463
+ {nota}
464
+ </p>
465
+ )}
466
+
467
+ {codigo && verCodigo && (
468
+ <div className={`border-t p-3 ${FILETE}`}>
469
+ <BloqueCodigo code={codigo} compact />
470
+ </div>
471
+ )}
472
+ </section>
473
+ );
474
+ };
@@ -418,7 +418,7 @@ export const TableShowcase = () => {
418
418
  gallery={
419
419
  <div className="space-y-6">
420
420
  <div>
421
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryCustomCardsHover")}</h3>
421
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryCustomCardsHover")}</h3>
422
422
  <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
423
423
  {TABLE_DATA.slice(0, 4).map((row, i) => {
424
424
  const initials = (row.name as string).split(" ").map((w: string) => w[0]).join("");
@@ -455,7 +455,7 @@ export const TableShowcase = () => {
455
455
  </div>
456
456
 
457
457
  <div>
458
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryDefaultCards")}</h3>
458
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryDefaultCards")}</h3>
459
459
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
460
460
  <ITTable
461
461
  columns={columns}
@@ -469,7 +469,7 @@ export const TableShowcase = () => {
469
469
  </div>
470
470
 
471
471
  <div>
472
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryCustomCardsPagination")}</h3>
472
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryCustomCardsPagination")}</h3>
473
473
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
474
474
  <ITTable
475
475
  columns={columns}
@@ -501,7 +501,7 @@ export const TableShowcase = () => {
501
501
  </div>
502
502
 
503
503
  <div>
504
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryCompactFixed")}</h3>
504
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryCompactFixed")}</h3>
505
505
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800" style={{ maxWidth: 560 }}>
506
506
  <ITTable
507
507
  columns={fixedColumns}
@@ -515,7 +515,7 @@ export const TableShowcase = () => {
515
515
  </div>
516
516
 
517
517
  <div>
518
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryPinnedNameActions")}</h3>
518
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryPinnedNameActions")}</h3>
519
519
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800" style={{ maxWidth: 520 }}>
520
520
  <ITTable
521
521
  columns={pinnedColumns}
@@ -532,7 +532,7 @@ export const TableShowcase = () => {
532
532
  </div>
533
533
 
534
534
  <div>
535
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryAutoCards")}</h3>
535
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryAutoCards")}</h3>
536
536
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800" style={{ maxWidth: 420 }}>
537
537
  <ITTable
538
538
  columns={columns}
@@ -545,7 +545,7 @@ export const TableShowcase = () => {
545
545
  </div>
546
546
 
547
547
  <div>
548
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryVirtualized")}</h3>
548
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryVirtualized")}</h3>
549
549
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
550
550
  <ITTable
551
551
  columns={virtualColumns}
@@ -563,7 +563,7 @@ export const TableShowcase = () => {
563
563
  </div>
564
564
 
565
565
  <div>
566
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryColumnFilters")}</h3>
566
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryColumnFilters")}</h3>
567
567
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
568
568
  <ITTable
569
569
  columns={filterDemoColumns}
@@ -579,7 +579,7 @@ export const TableShowcase = () => {
579
579
  </div>
580
580
 
581
581
  <div>
582
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryDesignOverrides")}</h3>
582
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryDesignOverrides")}</h3>
583
583
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
584
584
  <ITTable
585
585
  columns={columns}
@@ -609,7 +609,7 @@ export const TableShowcase = () => {
609
609
  </div>
610
610
 
611
611
  <div>
612
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryPerColumnDesign")}</h3>
612
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryPerColumnDesign")}</h3>
613
613
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
614
614
  <ITTable
615
615
  columns={columns.map((col: any) =>
@@ -1062,7 +1062,7 @@ export const DataTableShowcase = () => {
1062
1062
  gallery={
1063
1063
  <div className="space-y-6">
1064
1064
  <div>
1065
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryCustomCardsHover")}</h3>
1065
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryCustomCardsHover")}</h3>
1066
1066
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
1067
1067
  <GalleryDataTable
1068
1068
  title={t("showcase.data.teamMembers")}
@@ -1105,7 +1105,7 @@ export const DataTableShowcase = () => {
1105
1105
  </div>
1106
1106
 
1107
1107
  <div>
1108
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryDefaultCardsPagination")}</h3>
1108
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryDefaultCardsPagination")}</h3>
1109
1109
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
1110
1110
  <GalleryDataTable
1111
1111
  size="sm"
@@ -1116,7 +1116,7 @@ export const DataTableShowcase = () => {
1116
1116
  </div>
1117
1117
 
1118
1118
  <div>
1119
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryDesignOverrides")}</h3>
1119
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryDesignOverrides")}</h3>
1120
1120
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
1121
1121
  <ITDataTable
1122
1122
  columns={userColumns}
@@ -1140,7 +1140,7 @@ export const DataTableShowcase = () => {
1140
1140
  </div>
1141
1141
 
1142
1142
  <div>
1143
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryPinnedIdActive")}</h3>
1143
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryPinnedIdActive")}</h3>
1144
1144
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800" style={{ maxWidth: 520 }}>
1145
1145
  <ITDataTable
1146
1146
  columns={pinnedColumns}
@@ -1158,7 +1158,7 @@ export const DataTableShowcase = () => {
1158
1158
  </div>
1159
1159
 
1160
1160
  <div>
1161
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.data.galleryServerVirtualization", { page: dtVirtualized ? 200 : 10 })}</h3>
1161
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.data.galleryServerVirtualization", { page: dtVirtualized ? 200 : 10 })}</h3>
1162
1162
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
1163
1163
  <ITDataTable
1164
1164
  key={dtVirtualized ? "dt-virt-on" : "dt-virt-off"}
@@ -33,7 +33,7 @@ const CodeExampleBlock = ({ title, desc, code, children }: { title: string; desc
33
33
  <div className="px-6 py-4 border-b border-slate-200 dark:border-slate-700">
34
34
  <ITFlex justify="between" align="center">
35
35
  <div>
36
- <h3 className="text-sm font-bold text-slate-800 dark:text-white">{title}</h3>
36
+ <h3 className="w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{title}</h3>
37
37
  <p className="text-xs text-slate-500 mt-1">{desc}</p>
38
38
  </div>
39
39
  <ITButton variant="outlined" color="gray" size="sm" onClick={() => setShowCode(!showCode)}>
@@ -150,7 +150,7 @@ export const ButtonShowcase = () => {
150
150
  gallery={
151
151
  <div className="space-y-6">
152
152
  <div>
153
- <h3 className="text-sm font-bold text-slate-700 mb-3">{t("showcase.forms.galleryWithIcon")}</h3>
153
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.forms.galleryWithIcon")}</h3>
154
154
  <div className="flex flex-wrap gap-3">
155
155
  <ITButton label={t("showcase.common.save")} icon={<FaSave />} color="success" />
156
156
  <ITButton label={t("showcase.common.edit")} icon={<FaEdit />} color="info" />
@@ -159,7 +159,7 @@ export const ButtonShowcase = () => {
159
159
  </div>
160
160
  </div>
161
161
  <div>
162
- <h3 className="text-sm font-bold text-slate-700 mb-3">{t("showcase.forms.galleryVariants")}</h3>
162
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.forms.galleryVariants")}</h3>
163
163
  <div className="flex flex-wrap gap-3">
164
164
  <ITButton label="Filled" variant="filled" />
165
165
  <ITButton label="Outlined" variant="outlined" />
@@ -170,7 +170,7 @@ export const ButtonShowcase = () => {
170
170
  </div>
171
171
  </div>
172
172
  <div>
173
- <h3 className="text-sm font-bold text-slate-700 mb-3">{t("showcase.forms.gallerySemanticColors")}</h3>
173
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.forms.gallerySemanticColors")}</h3>
174
174
  <div className="flex flex-wrap gap-3">
175
175
  <ITButton label="Primary" color="primary" />
176
176
  <ITButton label="Secondary" color="secondary" />
@@ -2006,7 +2006,7 @@ const MaskedDemo = ({
2006
2006
  const [complete, setComplete] = useState<string | null>(null);
2007
2007
  return (
2008
2008
  <div>
2009
- <h3 className="text-sm font-bold text-slate-700 mb-2">{title}</h3>
2009
+ <h3 className="mb-2 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{title}</h3>
2010
2010
  <ITMaskedInput
2011
2011
  name={title.toLowerCase().replace(/\s+/g, "_")}
2012
2012
  label={mask}
@@ -1347,7 +1347,7 @@ export const GridShowcase = () => {
1347
1347
 
1348
1348
  return (
1349
1349
  <ShowcaseLayout
1350
- demoAncho="completo"
1350
+ demoMinAncho={780}
1351
1351
  title={t("showcase.layoutPrimitives.screensTitle")}
1352
1352
  description={t("showcase.layoutPrimitives.screensSubtitle")}
1353
1353
  code={code}
@@ -1458,7 +1458,7 @@ export const ScreenFormShowcase = () => {
1458
1458
 
1459
1459
  return (
1460
1460
  <ShowcaseLayout
1461
- demoAncho="completo"
1461
+ demoMinAncho={780}
1462
1462
  title={t("showcase.layoutPrimitives.screensTitle")}
1463
1463
  description={t("showcase.layoutPrimitives.screensSubtitle")}
1464
1464
  code={formCode}
@@ -219,7 +219,7 @@ export const PageHeaderShowcase = () => {
219
219
  <ITStack spacing={6}>
220
220
  {/* 1. Team management — full header + search + filter bar + user rows */}
221
221
  <div>
222
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryTeamManagement")}</h3>
222
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.galleryTeamManagement")}</h3>
223
223
  <div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
224
224
  <div className="p-5 pb-3">
225
225
  <ITPageHeader
@@ -282,7 +282,7 @@ export const PageHeaderShowcase = () => {
282
282
 
283
283
  {/* 2. Detail page — back + breadcrumbs + back button + save/cancel */}
284
284
  <div>
285
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryDetailEdit")}</h3>
285
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.galleryDetailEdit")}</h3>
286
286
  <div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
287
287
  <div className="p-5 pb-3">
288
288
  <ITPageHeader
@@ -319,7 +319,7 @@ export const PageHeaderShowcase = () => {
319
319
 
320
320
  {/* 3. Dashboard header — icon + title + desc + date range + refresh */}
321
321
  <div>
322
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryDashboard")}</h3>
322
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.galleryDashboard")}</h3>
323
323
  <div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
324
324
  <div className="p-5">
325
325
  <ITPageHeader
@@ -345,7 +345,7 @@ export const PageHeaderShowcase = () => {
345
345
 
346
346
  {/* 4. Settings header — no icon, no breadcrumbs, just title + desc + save */}
347
347
  <div>
348
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.gallerySettingsPrefs")}</h3>
348
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.gallerySettingsPrefs")}</h3>
349
349
  <div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
350
350
  <div className="p-5">
351
351
  <ITPageHeader
@@ -364,7 +364,7 @@ export const PageHeaderShowcase = () => {
364
364
 
365
365
  {/* 5. Users list — icon + breadcrumbs + search in actions + add button */}
366
366
  <div>
367
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryUsersList")}</h3>
367
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.galleryUsersList")}</h3>
368
368
  <div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
369
369
  <div className="p-5">
370
370
  <ITPageHeader
@@ -712,7 +712,7 @@ export const PageShowcase = () => {
712
712
  <ITStack spacing={6}>
713
713
  {/* 1. Users list with ITTable */}
714
714
  <div>
715
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryUsersTable")}</h3>
715
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.galleryUsersTable")}</h3>
716
716
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
717
717
  <ITPage
718
718
  horizontalPadding={hPaddingValue}
@@ -740,7 +740,7 @@ export const PageShowcase = () => {
740
740
 
741
741
  {/* 2. Product detail */}
742
742
  <div>
743
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryProductDetail")}</h3>
743
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.galleryProductDetail")}</h3>
744
744
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
745
745
  <ITPage
746
746
  horizontalPadding={hPaddingValue}
@@ -788,7 +788,7 @@ export const PageShowcase = () => {
788
788
 
789
789
  {/* 3. Edit profile form */}
790
790
  <div>
791
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryEditProfile")}</h3>
791
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.galleryEditProfile")}</h3>
792
792
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
793
793
  <ITPage
794
794
  horizontalPadding={hPaddingValue}
@@ -839,7 +839,7 @@ export const PageShowcase = () => {
839
839
 
840
840
  {/* 4. Orders with table */}
841
841
  <div>
842
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryOrdersTable")}</h3>
842
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.galleryOrdersTable")}</h3>
843
843
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
844
844
  <ITPage
845
845
  horizontalPadding={hPaddingValue}
@@ -892,7 +892,7 @@ export const PageShowcase = () => {
892
892
 
893
893
  {/* 5. Settings with tabs */}
894
894
  <div>
895
- <h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.gallerySettings")}</h3>
895
+ <h3 className="mb-3 w-fit border-l-2 border-primary-700 pl-2.5 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-700 dark:border-primary-500 dark:text-slate-200">{t("showcase.pages.gallerySettings")}</h3>
896
896
  <div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
897
897
  <ITPage
898
898
  horizontalPadding={hPaddingValue}