@ajuarezso/sui-design-system 0.21.0 → 0.23.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 (114) hide show
  1. package/docs/INDEX.md +30 -35
  2. package/docs/sui-accordion/README.md +171 -0
  3. package/docs/sui-activity-feed/README.md +154 -0
  4. package/docs/sui-activity-filter/README.md +100 -0
  5. package/docs/sui-alert/README.md +28 -19
  6. package/docs/sui-app-store-badge/README.md +5 -4
  7. package/docs/sui-avatar/README.md +16 -16
  8. package/docs/sui-avatar-group/README.md +4 -4
  9. package/docs/sui-badge/README.md +27 -9
  10. package/docs/sui-banner/README.md +10 -9
  11. package/docs/sui-brand-logo/README.md +3 -3
  12. package/docs/sui-breadcrumbs/README.md +1 -1
  13. package/docs/sui-button/README.md +64 -21
  14. package/docs/sui-button-group/README.md +6 -4
  15. package/docs/sui-button-group-item/README.md +3 -3
  16. package/docs/sui-card/README.md +17 -19
  17. package/docs/sui-chart-legend/README.md +8 -7
  18. package/docs/sui-checkbox/README.md +11 -6
  19. package/docs/sui-checkbox-card/README.md +24 -19
  20. package/docs/sui-checkbox-label/README.md +32 -10
  21. package/docs/sui-circular-progress-bar/README.md +2 -0
  22. package/docs/sui-color-dot/README.md +1 -1
  23. package/docs/sui-color-picker/README.md +22 -7
  24. package/docs/sui-command-menu-footer/README.md +100 -0
  25. package/docs/sui-command-menu-item/README.md +140 -0
  26. package/docs/sui-command-menu-search/README.md +105 -0
  27. package/docs/sui-compact-avatar-group/README.md +4 -3
  28. package/docs/sui-compact-button/README.md +41 -44
  29. package/docs/sui-compact-select/README.md +12 -5
  30. package/docs/sui-compact-select-for-input/README.md +5 -2
  31. package/docs/sui-content-card/README.md +6 -5
  32. package/docs/sui-content-divider/README.md +4 -4
  33. package/docs/sui-content-label/README.md +11 -6
  34. package/docs/sui-counter-input/README.md +21 -17
  35. package/docs/sui-date-selector/README.md +16 -12
  36. package/docs/sui-datepicker/README.md +46 -28
  37. package/docs/sui-day-cell/README.md +17 -8
  38. package/docs/sui-day-label/README.md +2 -2
  39. package/docs/sui-divider/README.md +5 -5
  40. package/docs/sui-drawer-footer/README.md +19 -5
  41. package/docs/sui-dropdown-caption/README.md +92 -0
  42. package/docs/sui-dropdown-item/README.md +163 -0
  43. package/docs/sui-dropdown-menu/README.md +196 -0
  44. package/docs/sui-dropdown-search/README.md +113 -0
  45. package/docs/sui-emoji/README.md +6 -6
  46. package/docs/sui-empty-state/README.md +13 -23
  47. package/docs/sui-fancy-button/README.md +24 -18
  48. package/docs/sui-file-icon/README.md +1 -1
  49. package/docs/sui-file-upload/README.md +3 -0
  50. package/docs/sui-file-upload-card/README.md +8 -7
  51. package/docs/sui-filter/README.md +181 -0
  52. package/docs/sui-flag/README.md +3 -2
  53. package/docs/sui-form-hint/README.md +12 -8
  54. package/docs/sui-form-label/README.md +11 -16
  55. package/docs/sui-href/README.md +85 -0
  56. package/docs/sui-icon/README.md +4 -3
  57. package/docs/sui-image-upload/README.md +28 -16
  58. package/docs/sui-img-retry/README.md +107 -0
  59. package/docs/sui-inline-input/README.md +7 -6
  60. package/docs/sui-inline-select/README.md +8 -5
  61. package/docs/sui-input/README.md +27 -33
  62. package/docs/sui-integration-switch/README.md +14 -7
  63. package/docs/sui-kbd/README.md +4 -4
  64. package/docs/sui-key-icon/README.md +6 -2
  65. package/docs/sui-link-button/README.md +21 -17
  66. package/docs/sui-modal/README.md +238 -0
  67. package/docs/sui-modal-footer/README.md +178 -0
  68. package/docs/sui-modal-header/README.md +115 -0
  69. package/docs/sui-modal-sheet/README.md +170 -0
  70. package/docs/sui-notification/README.md +8 -6
  71. package/docs/sui-notification-footer/README.md +2 -2
  72. package/docs/sui-notification-tab-menu/README.md +5 -3
  73. package/docs/sui-page-header/README.md +123 -0
  74. package/docs/sui-pagination/README.md +8 -5
  75. package/docs/sui-password-strength/README.md +1 -1
  76. package/docs/sui-period-range/README.md +18 -14
  77. package/docs/sui-popover/README.md +13 -7
  78. package/docs/sui-product-card/README.md +14 -10
  79. package/docs/sui-progress-bar/README.md +4 -2
  80. package/docs/sui-progress-bar-label/README.md +2 -0
  81. package/docs/sui-radio/README.md +14 -7
  82. package/docs/sui-radio-card/README.md +12 -12
  83. package/docs/sui-radio-label/README.md +36 -11
  84. package/docs/sui-rating/README.md +28 -9
  85. package/docs/sui-rich-editor/README.md +3 -3
  86. package/docs/sui-segmented-control/README.md +33 -19
  87. package/docs/sui-select/README.md +40 -33
  88. package/docs/sui-sidebar/README.md +216 -0
  89. package/docs/sui-slider/README.md +7 -0
  90. package/docs/sui-social-button/README.md +24 -11
  91. package/docs/sui-status-badge/README.md +7 -3
  92. package/docs/sui-stepper/README.md +30 -17
  93. package/docs/sui-store-card/README.md +9 -4
  94. package/docs/sui-switch/README.md +16 -11
  95. package/docs/sui-switch-card/README.md +18 -16
  96. package/docs/sui-switch-label/README.md +25 -11
  97. package/docs/sui-tab-chips/README.md +56 -39
  98. package/docs/sui-tab-menu-horizontal/README.md +19 -11
  99. package/docs/sui-tab-menu-vertical/README.md +10 -5
  100. package/docs/sui-table/README.md +264 -0
  101. package/docs/sui-tag/README.md +25 -11
  102. package/docs/sui-tag-input/README.md +25 -12
  103. package/docs/sui-textarea/README.md +23 -20
  104. package/docs/sui-time-picker/README.md +39 -30
  105. package/docs/sui-toast/README.md +27 -22
  106. package/docs/sui-tooltip/README.md +14 -17
  107. package/docs/sui-topbar/README.md +153 -0
  108. package/docs/sui-topbar-button/README.md +95 -0
  109. package/docs/sui-topbar-item/README.md +97 -0
  110. package/docs/sui-topbar-user/README.md +83 -0
  111. package/fesm2022/ajuarezso-sui-design-system.mjs +1076 -242
  112. package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
  113. package/package.json +1 -1
  114. package/types/ajuarezso-sui-design-system.d.ts +616 -280
@@ -30,7 +30,7 @@ Regla corta: **el campo cambia según una elección corta pegada a él → este
30
30
  >
31
31
  > Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos**. Candidato: el gasto del super
32
32
  > admin pone «Monto» (`type="number"`) y «Moneda» (PEN/USD) como dos campos separados,
33
- > `pages/super-admin/master-gastos/master-gastos.html:193` y `:200`.
33
+ > `pages/super-admin/master-gastos/master-gastos.html:195` y `:203`.
34
34
 
35
35
  | prop | cuándo | fuente |
36
36
  |---|---|---|
@@ -51,6 +51,9 @@ contiene**: el selector ocupa todo el alto interior del campo (46 · 38 · 34 ·
51
51
  toca (y su hover) cubre el campo de arriba a abajo. Sus opciones miden 44 en `large` y en mobile
52
52
  (≤ 767 px); 36 en el resto, como en `sui-select`.
53
53
 
54
+ En large y xlarge el texto sube a 16 px (regla del 03-10-2026): en `large` el valor y las opciones van
55
+ en 16/24, igual que el valor del `sui-input` large; el alto no cambia (46 dentro del campo, 44 la opción).
56
+
54
57
  | size del input y del selector | campo | fuente |
55
58
  |---|---|---|
56
59
  | `large` | 48 | canon (aprobado por el dueño, 03-10-2026), extensión SUI |
@@ -67,7 +70,7 @@ de la guía no descontaba el borde del input). Ahora el campo mide exacto.
67
70
 
68
71
  | qué | por qué no hoy | cuándo sí, en un flujo nuevo |
69
72
  |---|---|---|
70
- | el componente entero (0 usos) | todo es en soles y con +51 | la moneda de un gasto (`master-gastos.html:193`) o teléfonos de otro país |
73
+ | el componente entero (0 usos) | todo es en soles y con +51 | la moneda de un gasto (`master-gastos.html:195`) o teléfonos de otro país |
71
74
  | `country` con bandera | solo hay teléfonos de Perú | repartidores o clientes con número extranjero |
72
75
 
73
76
  ## API
@@ -65,20 +65,21 @@ no le sirve a ningún uso de hoy.
65
65
 
66
66
  ## Tamaño en mobile y en web
67
67
 
68
- La fila mide 72 (leading de 40 + padding 16) en las dos. El `size` cambia **solo la X de quitar**:
68
+ La fila mide 74 en las dos: leading de 40 + padding 16 × 2 + borde 1 × 2 (`sui-content-card.scss:19,21`; Figma la dibuja en 72 con el borde por dentro). El `size` cambia **solo la X de quitar**:
69
69
 
70
70
  | size | X visible | área táctil | glyph | fuente |
71
71
  |---|---|---|---|---|
72
72
  | `medium` (default) | 20 × 20 | 20 × 20 | 20 | Figma |
73
- | `large` | 32 × 32 (radius 8 al hover) | 40 × 40 (`::before` invisible) | 20 | canon (aprobado por el dueño, 03-10-2026): extensión SUI |
73
+ | `large` | 32 × 32 (radius 8 al hover) | 44 × 44 en el teléfono, 40 × 40 en web (`::before` invisible) | 20 | canon (aprobado por el dueño, 03-10-2026): extensión SUI · 44: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
74
74
 
75
75
  En `large` el glyph queda en el mismo lugar que en `medium` (la caja grande se come el aire del
76
- gap con margen negativo), así que la fila se ve igual: lo que crece es dónde se puede tocar.
76
+ gap con margen negativo), así que la fila se ve igual: lo que crece es dónde se puede tocar. En el teléfono el área
77
+ táctil de `large` es de **44** (desde el 04-10-2026; 40 en web).
77
78
 
78
79
  | uso | mobile | web | fuente |
79
80
  |---|---|---|---|
80
- | fila | 72, sin cambio | 72, sin cambio | Figma |
81
- | X para quitar | `large` (32, área 40) | `medium` (20) | propuesta: el tamaño es extensión SUI aprobada (03-10-2026); el «cuándo» falta aprobarlo |
81
+ | fila | 74, sin cambio | 74, sin cambio | medido del `.scss` |
82
+ | X para quitar | `large` (32, área 44) | `medium` (20) | propuesta: el tamaño es extensión SUI aprobada (03-10-2026); el «cuándo» falta aprobarlo |
82
83
 
83
84
  ```html
84
85
  <sui-content-card … [size]="bp.isMobile() ? 'large' : 'medium'" (dismiss)="quitar(item)" />
@@ -27,16 +27,16 @@ Story: [Atoms/Divider/Content Divider](https://sui-design-system.web.app/?path=/
27
27
  > marcado «según la guía del DS» sale de su texto o de sus ejemplos; el resto es **propuesta,
28
28
  > falta aprobación**.
29
29
  >
30
- > Uso medido el 03-10-2026 en `master-pedidos/src/app`: **1 content-divider**
31
- > (`pages/super-admin/master-drivers/master-drivers.html:190`, `solid-text` «Con pocos
32
- > pedidos»), sin contar prototipos ni vitrinas (`master-preview`, `master-prototipos`,
30
+ > Uso medido el 04-10-2026 en `master-pedidos/src/app`: **3 content-dividers en 3 archivos**:
31
+ > `pages/auth/login/login.html:61` y `pages/auth/register/register.html:97` (`text-line` «o») y
32
+ > `pages/super-admin/master-drivers/master-drivers.html:192` (`solid-text` «Con pocos pedidos»), sin contar prototipos ni vitrinas (`master-preview`, `master-prototipos`,
33
33
  > `mockup-sheets-*`, `dx/*`, `_guia-*`, `master-rutina`, `master-medico`, `master-ejercicios`,
34
34
  > `dev-index`).
35
35
 
36
36
  | type | cuándo | ejemplo | fuente |
37
37
  |---|---|---|---|
38
38
  | `text-line` | El «o» entre dos formas de hacer lo mismo. | `text="o"` entre «Continuar con Google» y el formulario de correo | según la guía del DS («OR») |
39
- | `solid-text` | Cabecera de un grupo dentro de una lista o un modal, con fondo. | «Con pocos pedidos» (`master-drivers.html:190`) | según la guía del DS («a menudo en modales») |
39
+ | `solid-text` | Cabecera de un grupo dentro de una lista o un modal, con fondo. | «Con pocos pedidos» (`master-drivers.html:192`) | según la guía del DS («a menudo en modales») |
40
40
  | `text` | Cabecera de grupo sin fondo, en una lista partida por fecha o por tipo. | «Ayer», «Esta semana» | según la guía del DS (existe) · propuesta (cuándo) |
41
41
  | `line` (default) | **No usar** (ver abajo). | — | según la guía del DS (default) |
42
42
  | `line-spacing` | **No usar** (ver abajo). | — | según la guía del DS |
@@ -73,11 +73,15 @@ content-card · ajuste → switch-label.**
73
73
 
74
74
  No se toca, así que no tiene que llegar a 44. El `size` es de lectura, no de dedo.
75
75
 
76
- | uso | mobile | web |
77
- |---|---|---|
78
- | consejos y pasos | `large` | `large` |
79
- | filas de dato | `medium` | `medium` |
80
- | fila que se toca (soporte) | `large`, o dale a la fila un alto mínimo de 44 | `medium` |
76
+ | uso | mobile | web | fuente |
77
+ |---|---|---|---|
78
+ | consejos y pasos | `large` | `large` | propuesta, falta aprobación |
79
+ | filas de dato | `medium` | `medium` | propuesta, falta aprobación |
80
+ | fila que se toca (soporte) | `large`, o dale a la fila un alto mínimo de 44 | `medium` | propuesta, falta aprobación |
81
+
82
+ Alto de la fila, medido: `medium` 40 (máx. entre el leading de 40 y el texto 20 + 4 + 16) y
83
+ `large` 48 (máx. entre 48 y 24 + 4 + 20). Lo que se toca es lo que la envuelve: «Contactar soporte»
84
+ va dentro de un `<a>` con padding 12 y borde 1, que da 66.
81
85
 
82
86
  ```html
83
87
  <sui-content-label [size]="bp.isMobile() ? 'large' : 'medium'" … /> <!-- solo si la fila se toca -->
@@ -130,7 +134,8 @@ No se toca, así que no tiene que llegar a 44. El `size` es de lectura, no de de
130
134
  salen `slate`, no el color del rol.
131
135
  - `left-icon` sin `icon` no dibuja nada a la izquierda.
132
136
  - El `toggle` es un `sui-switch` `medium` fijo y solo el interruptor se toca, no la fila.
133
- - El host lleva `role="group"` y `aria-label` = `label`.
137
+ - El host lleva `role="group"` y `aria-label` = `label`. El `toggle` toma su nombre del `label`
138
+ (y su descripción de `description`) con `aria-labelledby` (revisión 04-10-2026).
134
139
 
135
140
  ## Ejemplo
136
141
 
@@ -31,14 +31,14 @@ Regla corta: **se ajusta de a uno y tiene tope → counter · se tipea → input
31
31
  > con − y + a los lados) y no dice cuándo usarlo. Todo lo de abajo es **propuesta, falta
32
32
  > aprobación**, salvo lo que se indica.
33
33
  >
34
- > Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`, más
35
- > `master-ejercicios`): **4 usos en 4 archivos**, todos con `min=1`. Tamaños: 2 `large`, 2 `medium`.
36
- > 1 con `label`, 2 con `ariaLabel`, 2 sin ninguno de los dos.
34
+ > Uso medido el 04-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`, más
35
+ > `master-ejercicios`): **4 usos en 4 archivos**, todos con `min=1`. Tamaños: 2 `large`, 2
36
+ > `bp.isMobile() ? 'large' : 'medium'`. Los 4 con `ariaLabel` (1 además con `label`).
37
37
 
38
38
  | prop | cuándo | fuente |
39
39
  |---|---|---|
40
- | `min` | `1` en cantidades de compra: en 1 el − se apaga y quitar queda en el tacho (evita borrar por error). | propuesta (ya es práctica en los 4 usos: `pages/customer/cart/cart.html:82`) |
41
- | `max` | Siempre el tope real: stock, tope por pedido, cupo del viaje. Sin dato, 99. | propuesta (ya es práctica: `pages/customer/restaurant-menu/restaurant-menu.html:480`) |
40
+ | `min` | `1` en cantidades de compra: en 1 el − se apaga y quitar queda en el tacho (evita borrar por error). | propuesta (ya es práctica en los 4 usos: `pages/customer/cart/cart.html:80`) |
41
+ | `max` | Siempre el tope real: stock, tope por pedido, cupo del viaje. Sin dato, 99. | propuesta (ya es práctica: `pages/customer/restaurant-menu/restaurant-menu.html:479`) |
42
42
  | `step` | `1`. Otro paso no tiene caso hoy. | propuesta, falta aprobación |
43
43
  | `label` | Cuando es un campo de un formulario («Pasajeros»). | según la guía del DS (su ejemplo lleva label) |
44
44
  | `hint` | El tope dicho en palabras: «Hasta 4 pasajeros». | propuesta (ya es práctica: `components/cambiar-pasajeros/cambiar-pasajeros.html:7`) |
@@ -48,12 +48,8 @@ Regla corta: **se ajusta de a uno y tiene tope → counter · se tipea → input
48
48
  | `error` + `errorMessage` | No usar hoy: el contador no deja salir del rango. | — |
49
49
  | `required` · `sublabel` · `tooltip` | No usar hoy: una cantidad siempre tiene valor. | — |
50
50
 
51
- **Usos de hoy que rompen la regla:**
52
-
53
- - **2 sin `label` ni `ariaLabel`** (el lector de pantalla dice solo «grupo»):
54
- `pages/customer/cart/cart.html:82`, `pages/customer/restaurant-menu/restaurant-menu.html:480`.
55
- - **2 en `medium` en pantallas del teléfono** → `large`: `pages/customer/cart/cart.html:82`,
56
- `pages/customer/viaje/viaje.html:190`.
51
+ **Usos de hoy que rompen la regla:** ninguno (medido el 04-10-2026). Los 2 sin nombre para el
52
+ lector y los 2 en `medium` fijo en el teléfono se corrigieron en la app el 03-10-2026 (`f96cf735`).
57
53
 
58
54
  ## Tamaño en mobile y en web
59
55
 
@@ -70,13 +66,19 @@ dentro de la píldora). El ícono es de 20 hasta `large` y de 24 en `xlarge`.
70
66
  | `medium` (default) · `small` · `xsmall` | 40 · 36 · 32 | 24 | según la guía del DS |
71
67
  | `2xsmall` | 28 | 24 | extensión SUI |
72
68
 
69
+ En large y xlarge el texto sube a 16 px (canon, aprobado por el dueño el 03-10-2026): el número va en 16/24; el alto del
70
+ campo no cambia (lo ponen los botones).
71
+
72
+ **En el teléfono va en `xlarge`: botones − y + de 44** (canon (dueño, 04-10-2026): piso táctil 44 en el teléfono). `large` deja los botones
73
+ en 40, por debajo del piso; no hace falta un size nuevo porque `xlarge` ya llega.
74
+
73
75
  | uso | mobile | web | fuente |
74
76
  |---|---|---|---|
75
- | cantidad junto al CTA (detalle del producto) | `large` (48), igual que el botón | `large` | propuesta (ya es práctica en `restaurant-menu.html:480`) |
76
- | cantidad en una fila (carrito, pasajeros) | `large` (48) | `medium` (40) | propuesta, falta aprobación |
77
+ | cantidad junto al CTA (detalle del producto) | `xlarge` (52, botones de 44) | `large` | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · web: propuesta |
78
+ | cantidad en una fila (carrito, pasajeros) | `xlarge` (52, botones de 44) | `medium` (40) | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · web: propuesta, falta aprobación |
77
79
 
78
80
  ```html
79
- <sui-counter-input [size]="bp.isMobile() ? 'large' : 'medium'" … /> <!-- bp = BreakpointsService -->
81
+ <sui-counter-input [size]="bp.isMobile() ? 'xlarge' : 'medium'" … /> <!-- bp = BreakpointsService -->
80
82
  ```
81
83
 
82
84
  ## «No usar»: por qué no hoy y cuándo sí
@@ -127,9 +129,11 @@ dentro de la píldora). El ícono es de 20 hasta `large` y de 24 en `xlarge`.
127
129
  (ya recortado a `min`/`max`) y el padre lo aplica. Con solo `[value]` y sin `(valueChange)` el
128
130
  número no se mueve.
129
131
  - `min` y `max` arrancan en −∞ y +∞: sin pasarlos, el contador baja a negativos.
130
- - Los botones de 24 px de `medium` para abajo no llegan a los 40 de un dedo: en mobile, `large`
131
- o `xlarge` (ver «Tamaño en mobile y en web»).
132
- - Sin `label` ni `ariaLabel` el grupo no tiene nombre para el lector de pantalla.
132
+ - Los botones − y + miden 24 px de `medium` para abajo, 40 en `large` y 44 en `xlarge`: solo
133
+ `xlarge` llega a los 44 del área táctil del teléfono (ver «Tamaño en mobile y en web»).
134
+ - El número (`role="spinbutton"`) toma su nombre del `label` visible (`aria-labelledby`); si se
135
+ pasa `ariaLabel`, manda ese. Recibe foco y responde a ↑/↓ (un paso) e Inicio/Fin (al
136
+ mínimo/máximo, si están definidos) desde el 04-10-2026; antes solo se operaba con − y +.
133
137
  - El campo es una píldora (radio completo), decisión de SUI; el Figma de origen usa 10/8 px.
134
138
 
135
139
  ## Ejemplo
@@ -2,7 +2,7 @@
2
2
  name: sui-date-selector
3
3
  selector: sui-date-selector
4
4
  resumen: La cabecera de un calendario con el mes y las flechas de anterior y siguiente
5
- alternativas: [sui-datepicker (el calendario completo, que ya la trae), sui-tab-chips (elegir entre pocos días: hoy, mañana, sábado)]
5
+ alternativas: [sui-datepicker (el calendario completo, que ya la trae), sui-segmented-control (2 a 4 días o períodos fijos), sui-tab-chips (5 o más)]
6
6
  ---
7
7
 
8
8
  # sui-date-selector
@@ -19,7 +19,8 @@ del mes, las ganancias del repartidor por mes).
19
19
 
20
20
  - Un calendario completo: `sui-datepicker` ya lo trae adentro.
21
21
  - Elegir entre pocos días: `sui-tab-chips` (como la hoja de pedido programado).
22
- - Cambiar entre períodos fijos («Hoy», «Esta semana», «Este mes»): `sui-tab-chips`, como el super admin.
22
+ - Cambiar entre períodos fijos («Hoy», «Esta semana», «Este mes»): `sui-segmented-control` si son 2 a 4,
23
+ `sui-tab-chips` si son 5 o más. **Período o filtro con 2 a 4 opciones excluyentes → `sui-segmented-control`; con 5 o más, o si no caben y tienen que deslizarse → `sui-tab-chips`** (canon, dueño 04-10-2026).
23
24
 
24
25
  ## Qué variante usar
25
26
 
@@ -35,27 +36,29 @@ del mes, las ganancias del repartidor por mes).
35
36
  | `leftIcon` + `rightIcon` | `true` / `true` (default) | Lo normal: se puede ir atrás y adelante. | propuesta |
36
37
  | `rightIcon` | `false` | Ya se está en el período actual y no hay futuro que mirar (ganancias, gastos). Mejor que dejar la flecha y que no haga nada. | propuesta |
37
38
  | `leftIcon` | `false` | Ya se está en el primer período con datos (el mes en que se abrió el local). | propuesta |
38
- | los dos en `false` | — | No usar: sin flechas es un título; va un texto. | no usar |
39
+ | los dos en `false` | — | No usar: sin flechas es un título; va un texto. | propuesta |
39
40
  | `disabled` | `true` | Mientras carga el período nuevo, para que no se encadenen toques. | propuesta |
40
41
 
41
42
  Usos de hoy que rompen la regla: **0**.
42
43
 
43
44
  ## Tamaño en mobile y en web
44
45
 
45
- **No tiene `size`.** Mide 288 × 36 y las flechas son `sui-compact-button` `large` de **24 px**:
46
- en mobile **no llegan** a los 44 px.
46
+ Tiene `size`: **`medium`** (default, 288 × 36, flechas `sui-compact-button` de 24, Figma) y
47
+ **`large`** (52 de alto, flechas de **44 × 44** con el ícono en 20, mes en 16/24). El
48
+ `sui-datepicker` `xlarge` usa `large`.
47
49
 
48
- | uso | mobile | web | fuente |
49
- |---|---|---|---|
50
- | cabecera de un período | — **no hay tamaño** | 288 × 36, flechas de 24 | medido |
50
+ | size | barra | flechas | texto | uso | fuente |
51
+ |---|---|---|---|---|---|
52
+ | `large` | 52 (44 + 4 de aire arriba y abajo) | **44 × 44** | 16/24 | mobile | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
53
+ | `medium` (default) | 36 | 24 × 24 | 14/20 | web | medido (Figma 442:192) |
51
54
 
52
55
  ```html
53
- <!-- Web -->
54
- <sui-date-selector label="Octubre 2026" [rightIcon]="!esMesActual()" (prev)="mesAnterior()" (next)="mesSiguiente()" />
56
+ <sui-date-selector [size]="bp.isMobile() ? 'large' : 'medium'" label="Octubre 2026"
57
+ [rightIcon]="!esMesActual()" (prev)="mesAnterior()" (next)="mesSiguiente()" />
55
58
  ```
56
59
 
57
- **Sin tamaño suficiente para mobile.** En el celular, hasta que el DS le sume un `size`, se arma
58
- con `sui-compact-button` `xlarge` (o `sui-button` `onlyIcon` `large`) a los lados de un título.
60
+ Dentro del `sui-datepicker` `large` (y en mobile con `small`–`large`) el datepicker agranda las
61
+ flechas a 40 por su cuenta; con `xlarge` usa este `size="large"` (44).
59
62
 
60
63
  ## «No usar»: por qué no hoy y cuándo sí
61
64
 
@@ -75,6 +78,7 @@ con `sui-compact-button` `xlarge` (o `sui-button` `onlyIcon` `large`) a los lado
75
78
  | `leftIcon` | `boolean` | `true` |
76
79
  | `rightIcon` | `boolean` | `true` |
77
80
  | `disabled` | `boolean` | `false` |
81
+ | `size` | `'medium' \| 'large'` | `'medium'` |
78
82
 
79
83
  | output | payload |
80
84
  |---|---|
@@ -2,7 +2,7 @@
2
2
  name: sui-datepicker
3
3
  selector: sui-datepicker
4
4
  resumen: Calendario para elegir una fecha o un rango de fechas, en popover o en línea
5
- alternativas: [sui-input type="date" (una fecha suelta en un formulario: abre el selector del sistema), sui-tab-chips + sui-radio-label (día y franja de un pedido programado), sui-tab-chips o sui-select (períodos fijos: hoy, 7 días, 30 días)]
5
+ alternativas: [sui-input type="date" (una fecha suelta en un formulario: abre el selector del sistema), sui-tab-chips + sui-radio-label (día y franja de un pedido programado), sui-segmented-control (2 a 4 períodos fijos: hoy, 7 días, 30 días), sui-tab-chips (5 o más períodos fijos)]
6
6
  ---
7
7
 
8
8
  # sui-datepicker
@@ -23,8 +23,8 @@ un **calendario en línea** donde importa ver el mes entero (días con pedidos m
23
23
  - **El día y la hora de un pedido programado**: el checkout ya tiene su hoja (`sui-modal-sheet`
24
24
  con `sui-tab-chips` para el día y `sui-radio-label` con `flip` para la franja). Es la maqueta
25
25
  aprobada.
26
- - **Períodos fijos** («Hoy», «Últimos 7 días», «Este mes») sin rango libre: `sui-tab-chips`
27
- (super admin, ganancias del repartidor) o `sui-select` (resumen del local).
26
+ - **Períodos fijos** («Hoy», «Últimos 7 días», «Este mes») sin rango libre: `sui-segmented-control`
27
+ si son 2 a 4, `sui-tab-chips` si son 5 o más o se deslizan (canon, dueño 04-10-2026).
28
28
  - Una hora: `sui-time-picker`.
29
29
 
30
30
  Regla corta: **rango o calendario visible → datepicker · una fecha en un formulario → `sui-input
@@ -65,14 +65,14 @@ type="date"` · día + franja de entrega → la hoja del checkout.**
65
65
  | `min` / `max` | Siempre que haya un límite real: un cupón no vence en el pasado (`min` = hoy), un reporte no pasa de hoy (`max` = hoy). Los presets se recortan al límite. | propuesta |
66
66
  | `markedDates` | Días con algo: pedidos programados, gastos cargados. El punto es chico: dice «hay algo», no cuánto. | propuesta |
67
67
  | `presets` | Los 8 de fábrica están en español (Hoy, Últimos 7 días… Todo el tiempo). Recortarlos a los que la pantalla usa: un reporte del local no necesita «Últimos 12 meses» si no hay datos de hace un año. | propuesta |
68
- | `placeholder` | Lo que se elige, no «Seleccionar fecha»: «Elige el período», «Desde cuándo». | propuesta |
68
+ | `placeholder` | El default «Seleccionar fecha» ya está en español y se usa tal cual. Cambiarlo por lo que se elige («Elige el período», «Desde cuándo») es propuesta: hoy choca con esa regla. | default: canon (CANON-SUI §5.7) · cambiarlo: propuesta, falta aprobación |
69
69
  | `disabled` | Mientras carga lo que depende de la fecha. | propuesta |
70
70
 
71
71
  Usos de hoy que rompen la regla: **0** (no hay datepickers). Los 8 campos de fecha son fechas
72
- sueltas en formularios y ya usan `sui-input`: `pages/discounts/discounts.html:181` y `:285`
73
- («Válido hasta»), `pages/super-admin/super-admin.html:323`, `:329` y `:414`,
74
- `pages/super-admin/master-gastos/master-gastos.html:215`,
75
- `pages/central/central-gastos/central-gastos.html:115`, y `pages/promociones/promociones.html:336`
72
+ sueltas en formularios y ya usan `sui-input` (líneas del `type`, medidas el 04-10-2026):
73
+ `pages/discounts/discounts.html:189` y `:301` («Válido hasta»), `pages/super-admin/super-admin.html:324`,
74
+ `:330` y `:419`, `pages/super-admin/master-gastos/master-gastos.html:220`,
75
+ `pages/central/central-gastos/central-gastos.html:115`, y `pages/promociones/promociones.html:341`
76
76
  (`datetime-local`, «Programar»).
77
77
 
78
78
  **A decidir por el dueño** (la regla de arriba es la lectura plana; la contraria también se sostiene):
@@ -80,30 +80,41 @@ sueltas en formularios y ya usan `sui-input`: `pages/discounts/discounts.html:18
80
80
  | opción | a favor | en contra |
81
81
  |---|---|---|
82
82
  | fecha suelta → `sui-input type="date"` (la propuesta) | selector del sistema, 48 px, cero código nuevo, 0 cambios en la app | se ve distinto en iOS, Android y web; no marca días |
83
- | toda fecha → `sui-datepicker` | se ve igual en todos lados, con la marca | el popover de 368 px no es hoja en mobile, el trigger mide 40 px sin `size`, y los botones del footer están en inglés (ver Trampas) |
83
+ | toda fecha → `sui-datepicker` | se ve igual en todos lados, con la marca | el popover de 368 px no es hoja en mobile, el trigger mide 40 px si no se pasa `size="large"`, las celdas de día miden 40 y los presets 36 (ver «Tamaño») |
84
84
 
85
85
  ## Tamaño en mobile y en web
86
86
 
87
- En mobile se toca con el dedo: lo que se toca mide **44 px o más** (40 en los botones sueltos). En
88
- web, con mouse, puede ir más chico. En pantallas de los dos se elige con el servicio de breakpoints
87
+ En mobile se toca con el dedo: lo que se toca mide **44 px o más** (canon del dueño, 04-10-2026).
88
+ Para eso está **`xlarge`**: con los otros sizes las celdas de día (40) y los presets (36) no llegan.
89
+ En web, con mouse, puede ir más chico. En pantallas de los dos se elige con el servicio de breakpoints
89
90
  de la app (`bp`, en `services/breakpoints.service.ts`).
90
91
 
91
- Tiene `size` para el campo: `small` (36), `medium` (40, default, el de siempre) y **`large` (48)**,
92
- el mismo alto que `sui-input` y `sui-select` `large`. Con `large` **y siempre en mobile (≤ 767
93
- px)** el panel también crece: **flechas de mes de 40** y **Cancelar / Aplicar en `large` (48)**. En
94
- el teléfono el footer del rango pone el resumen «Rango: …» arriba y los dos botones abajo, 50/50.
95
-
96
- | pieza | web (`medium`) | `large` | mobile (cualquier size) | fuente |
97
- |---|---|---|---|---|
98
- | campo (trigger) | 40 | 48 | el del `size` | 40: medido · 36 y 48: canon (aprobado por el dueño, 03-10-2026), extensión SUI |
99
- | celda de día | 40 × 40, paso de 48 | igual | 40 × 40, paso de 44 | medido |
100
- | flechas de mes | 24 | 40 | 40 | canon (aprobado por el dueño, 03-10-2026), extensión SUI |
101
- | Cancelar / Aplicar | 36 | 48 | 48 | canon (aprobado por el dueño, 03-10-2026), extensión SUI |
92
+ Tiene `size` para el campo: `small` (36), `medium` (40, default, el de siempre), **`large` (48)**,
93
+ el mismo alto que `sui-input` y `sui-select` `large`, y **`xlarge` (52)**, el de `sui-input` `xlarge`.
94
+ Con `large` **y siempre en mobile (≤ 767 px)** el panel también crece: **flechas de mes de 40** y
95
+ **Cancelar / Aplicar en `large` (48)**. Con **`xlarge`** todo lo que se toca llega a 44: **días de
96
+ 44 × 44** (`sui-day-cell` `large`, gap 4: 7 × 44 + 6 × 4 = 332, entra en 390), **flechas de mes de
97
+ 44** (`sui-date-selector` `large`, barra de 52) y **rangos predefinidos de 44** (`sui-period-range`
98
+ `large`). En el teléfono el footer del rango pone el resumen «Rango: …» arriba y los dos botones
99
+ abajo, 50/50.
100
+
101
+ | pieza | web (`medium`) | `large` | mobile (`small`–`large`) | **`xlarge`** | fuente |
102
+ |---|---|---|---|---|---|
103
+ | campo (trigger) | 40 | 48 | el del `size` | **52** | 40: medido · 36 y 48: canon (aprobado por el dueño, 03-10-2026), extensión SUI · 52: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
104
+ | celda de día | 40 × 40, paso de 48 | igual | 40 × 40, paso de 44 (**no llega a 44**) | **44 × 44**, paso de 48 | 40: medido · 44: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
105
+ | preset del rango (`sui-period-range`) | 168 × 36 | igual | 36 de alto, en fila que se desliza (**no llega a 44**) | **44** de alto | 36: medido · 44: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
106
+ | flechas de mes | 24 | 40 | 40 | **44** | 40: canon (aprobado por el dueño, 03-10-2026) · 44: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
107
+ | Cancelar / Aplicar | 36 | 48 | 48 | 48 | canon (aprobado por el dueño, 03-10-2026), extensión SUI |
108
+
109
+ En large y xlarge el texto sube a 16 px (regla del 03-10-2026): con `large` y `xlarge`, la fecha del
110
+ campo (y su placeholder) va en 16/24. Con `large` el calendario no cambia (días, mes y resumen en
111
+ 14); con `xlarge` los días, el mes y los rangos predefinidos también van en 16/24 (sus piezas son
112
+ `large`). El resumen del rango sigue en 14.
102
113
 
103
114
  ```html
104
115
  <!-- Web: popover. Mobile: en línea dentro de un sui-modal fullscreen. -->
105
116
  @if (bp.isMobile()) {
106
- <sui-datepicker mode="range" size="large" [inline]="true" [calendars]="1" [(value)]="rango" />
117
+ <sui-datepicker mode="range" size="xlarge" [inline]="true" [calendars]="1" [(value)]="rango" />
107
118
  } @else {
108
119
  <sui-datepicker mode="range" placeholder="Elige el período" [(value)]="rango" />
109
120
  }
@@ -111,8 +122,8 @@ el teléfono el footer del rango pone el resumen «Rango: …» arriba y los dos
111
122
 
112
123
  | uso | mobile | web | fuente |
113
124
  |---|---|---|---|
114
- | fecha en un formulario | `large` | `medium` | propuesta, falta aprobación |
115
- | filtro de período de un reporte | `large`, en línea dentro de un modal | `medium`, popover | propuesta, falta aprobación |
125
+ | fecha en un formulario | `xlarge` (días de 44) | `medium` | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (el «web medium» es propuesta) |
126
+ | filtro de período de un reporte | `xlarge`, en línea dentro de un modal | `medium`, popover | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (el «web medium» es propuesta) |
116
127
 
117
128
  ## «No usar»: por qué no hoy y cuándo sí
118
129
 
@@ -125,7 +136,7 @@ en la columna de la derecha, se usa (aprobado por el dueño, 03-10-2026).
125
136
  | `mode="date"` en un formulario | `sui-input type="date"` hace lo mismo con el selector del sistema | un calendario que se ve siempre, con días marcados (pedidos programados de la semana para el local) |
126
137
  | `markedDates` | no hay calendarios a la vista | días con pedidos programados o con gastos cargados |
127
138
  | `calendars="2"` en mobile | se fuerza a 1 solo | — |
128
- | el popover (`inline=false`) en mobile | no es hoja: es un panel flotante de 368 px y el trigger mide 40 | ninguno en mobile; en web, cualquiera |
139
+ | el popover (`inline=false`) en mobile | no es hoja: es un panel flotante de 368 px (aunque el campo `large` mida 48) | ninguno en mobile; en web, cualquiera |
129
140
 
130
141
  ## API
131
142
 
@@ -137,7 +148,7 @@ en la columna de la derecha, se usa (aprobado por el dueño, 03-10-2026).
137
148
  | `mode` | `'date' \| 'range'` | `'date'` |
138
149
  | `calendars` | `1 \| 2` | `2` |
139
150
  | `inline` | `boolean` | `false` |
140
- | `size` | `'small' \| 'medium' \| 'large'` | `'medium'` |
151
+ | `size` | `'small' \| 'medium' \| 'large' \| 'xlarge'` | `'medium'` |
141
152
  | `placeholder` | `string` | `'Seleccionar fecha'` |
142
153
  | `showFooter` | `boolean` | `true` |
143
154
  | `disabled` | `boolean` | `false` |
@@ -175,7 +186,14 @@ interface DatepickerPreset { id: DatepickerPresetId; label: string; resolve: (ho
175
186
  - En mobile (hasta 767 px) **se fuerza un solo calendario** aunque `calendars` sea 2.
176
187
  - El campo muestra la fecha como `dd/MM/yyyy`; el rango, como «1 de oct 2026 – 7 de oct 2026».
177
188
  - «Todo el tiempo» devuelve `{ start: null, end: null }`: quien lo recibe tiene que tratarlo como
178
- «sin filtro», no como «vacío».
189
+ «sin filtro», no como «vacío». El campo muestra «Todo el tiempo» (antes caía al placeholder y
190
+ parecía vacío; fix 04-10-2026). Un `{ start: null, end: null }` que llega de afuera se sigue
191
+ mostrando como placeholder: el componente no sabe si es «todo» o «nada».
192
+ - **Accesibilidad (04-10-2026)**: el panel es un `dialog` modal con nombre («Elegir fecha» /
193
+ «Elegir período»; `group` en `inline`), la fila LU…DO está dentro de la grilla, cada día se
194
+ anuncia con la fecha completa («martes 7 de octubre de 2026»), hoy lleva `aria-current="date"`,
195
+ inicio y fin del rango salen seleccionados, y las flechas mueven el foco entre días (← → un
196
+ día, ↑ ↓ una semana, Inicio/Fin a la punta de la semana). Las flechas no cambian de mes.
179
197
  - Cierra con clic afuera y con Escape, y eso **descarta** la elección (como Cancelar).
180
198
  - Las piezas internas son `sui-date-selector`, `sui-day-label`, `sui-day-cell` y
181
199
  `sui-period-range`: no se arman a mano.
@@ -54,18 +54,23 @@ Usos de hoy que rompen la regla: **0**.
54
54
 
55
55
  ## Tamaño en mobile y en web
56
56
 
57
- **No tiene `size`.** Mide 40 × 40 fijo. En el `sui-datepicker` el paso entre celdas es de 44 px en
58
- mobile (gap 4) y 48 en web (gap 8): llega justo a los 44.
57
+ Tiene `size`: **`medium`** (default, 40 × 40, Figma) y **`large`** (44 × 44, número en 16/24). El
58
+ `sui-datepicker` `xlarge` pinta sus días en `large`. En el `sui-datepicker` el paso entre celdas es
59
+ de 44 px en mobile (gap 4) y 48 en web (gap 8) con `medium`, y 48 (gap 4) con `large`.
59
60
 
60
- | uso | mobile | web | fuente |
61
- |---|---|---|---|
62
- | celda de una grilla | 40 × 40 con gap 4 (paso 44) | 40 × 40 con gap 8 | medido |
61
+ | size | celda | texto | uso | fuente |
62
+ |---|---|---|---|---|
63
+ | `large` | **44 × 44** | 16/24 | mobile: lo que se toca llega a 44 (en 390 entran 7 × 44 con gap 4 = 332) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
64
+ | `medium` (default) | 40 × 40 | 14/20 | web | medido (Figma 437:174) |
65
+
66
+ Los puntos de hoy y de marcado no cambian con el size.
63
67
 
64
68
  ```html
65
- <!-- La grilla da el paso: gap 4 en mobile, 8 en web -->
66
- <div class="semana" [style.gap.px]="bp.isMobile() ? 4 : 8">
69
+ <!-- La grilla da el paso: gap 4 -->
70
+ <div class="semana" [style.gap.px]="4">
67
71
  @for (d of dias(); track d.fecha) {
68
- <sui-day-cell [day]="d.numero" [today]="d.esHoy" [marked]="d.conTurno" (clicked)="elegir(d)" />
72
+ <sui-day-cell [size]="bp.isMobile() ? 'large' : 'medium'" [day]="d.numero" [today]="d.esHoy"
73
+ [marked]="d.conTurno" (clicked)="elegir(d)" />
69
74
  }
70
75
  </div>
71
76
  ```
@@ -86,6 +91,7 @@ mobile (gap 4) y 48 en web (gap 8): llega justo a los 44.
86
91
  |---|---|---|
87
92
  | `day` | `number \| string` | — (requerido) |
88
93
  | `type` | `'basic' \| 'range'` | `'basic'` |
94
+ | `size` | `'medium' \| 'large'` | `'medium'` |
89
95
  | `rangePosition` | `'start' \| 'end' \| 'in' \| null` | `null` |
90
96
  | `selected` | `boolean` | `false` |
91
97
  | `marked` | `boolean` | `false` |
@@ -108,6 +114,9 @@ mobile (gap 4) y 48 en web (gap 8): llega justo a los 44.
108
114
  - `today` y `marked` juntos: se ve solo el punto de hoy.
109
115
  - `outOfMonth` no la bloquea: se puede tocar igual. Para bloquearla, `disabled`.
110
116
  - Ya trae el arreglo de iOS para el `:active` pegado.
117
+ - Sin `ariaLabel` se anuncia «Día N», sin mes: dentro de `sui-datepicker` ya recibe la fecha
118
+ completa. Hoy lleva `aria-current="date"` y, en `type="range"`, `start`/`end` salen
119
+ `aria-selected` (04-10-2026).
111
120
 
112
121
  ## Ejemplo
113
122
 
@@ -31,8 +31,8 @@ Story: [Molecules/Date & Time/Day Label](https://sui-design-system.web.app/?path
31
31
  | input | valor | cuándo | fuente |
32
32
  |---|---|---|---|
33
33
  | `label` | dos letras en mayúsculas | Lo normal, igual que el datepicker: `LU MA MI JU VI SÁ DO`. La semana arranca el lunes. | propuesta |
34
- | `label` | una letra | No usar: «M» es martes y miércoles a la vez. | no usar |
35
- | `label` | tres letras o más | No usar: «MIÉ» entra justo en 40 px, pero rompe el formato de dos letras del datepicker; «LUNES» ya no entra. | no usar |
34
+ | `label` | una letra | No usar: «M» es martes y miércoles a la vez. | propuesta |
35
+ | `label` | tres letras o más | No usar: «MIÉ» entra justo en 40 px, pero rompe el formato de dos letras del datepicker; «LUNES» ya no entra. | propuesta |
36
36
 
37
37
  Usos de hoy que rompen la regla: **0**.
38
38
 
@@ -15,7 +15,7 @@ Story: [Atoms/Divider/Divider](https://sui-design-system.web.app/?path=/docs/ato
15
15
 
16
16
  - **horizontal**: bloques dentro de una card, filas de una lista, secciones de un formulario, el
17
17
  subtotal del total.
18
- - **vertical**: datos en una misma fila («4,7 | 25–35 min | Envío S/ 3.00»).
18
+ - **vertical**: datos en una misma fila («4.7 | 25–35 min | Envío S/ 3.00»).
19
19
 
20
20
  **No lo uses** para:
21
21
 
@@ -35,14 +35,14 @@ Story: [Atoms/Divider/Divider](https://sui-design-system.web.app/?path=/docs/ato
35
35
  > dice cuándo separar con línea y cuándo con espacio. Lo marcado «según la guía del DS» sale de
36
36
  > ahí; el resto es **propuesta, falta aprobación**.
37
37
  >
38
- > Uso medido el 03-10-2026 en `master-pedidos/src/app`: **13 dividers en 10 pantallas**, todos
39
- > horizontales, sin contar prototipos ni vitrinas (`master-preview`, `master-prototipos`,
38
+ > Uso medido el 04-10-2026 en `master-pedidos/src/app`: **39 dividers en 14 archivos** (los 13 de
39
+ > antes + las 26 líneas a mano que se pasaron el 03-10-2026), todos horizontales, sin contar prototipos ni vitrinas (`master-preview`, `master-prototipos`,
40
40
  > `mockup-sheets-*`, `dx/*`, `_guia-*`, `master-rutina`, `master-medico`, `master-ejercicios`,
41
41
  > `dev-index`).
42
42
 
43
43
  | orientation | cuándo | ejemplo real | fuente |
44
44
  |---|---|---|---|
45
- | `horizontal` (default) | Separa bloques o filas. El espacio arriba y abajo lo pone el `gap` del padre, no el divider. | `pages/driver/driver-dashboard/driver-dashboard.html:1124` (entre filas, `@if (!last)`) | según la guía del DS («Line») |
45
+ | `horizontal` (default) | Separa bloques o filas. El espacio arriba y abajo lo pone el `gap` del padre, no el divider. | `pages/driver/driver-dashboard/driver-dashboard.html:1127` (entre filas, `@if (!last)`) | según la guía del DS («Line») |
46
46
  | `vertical` | Separa datos cortos en una sola fila. El padre necesita alto (si no, mide 16 px). | — (sin usos) | propuesta, falta aprobación |
47
47
 
48
48
  **Corregido el 03-10-2026:** las 26 líneas hechas a mano (mi-negocio, checkout, carrito, billetera y movimientos) ya son `sui-divider`. Seis conservan un `margin` propio porque sus vecinos se separan con margen y no con el `gap` del padre; pasarlo al `gap` es un cambio aparte.
@@ -97,6 +97,6 @@ Outputs: ninguno.
97
97
 
98
98
  <!-- Datos en una fila -->
99
99
  <div class="meta">
100
- <span>4,7</span><sui-divider orientation="vertical" /><span>25–35 min</span>
100
+ <span>4.7</span><sui-divider orientation="vertical" /><span>25–35 min</span>
101
101
  </div>
102
102
  ```
@@ -58,15 +58,23 @@ Usos de hoy que rompen las reglas: **0** (no se usa).
58
58
 
59
59
  ## Tamaño en mobile y en web
60
60
 
61
- **No tiene tamaño**: los botones miden **40 px**, sin input para cambiarlos. En mobile el canon de
62
- modales pide 48. El pie mide 80 px de alto.
61
+ El `size` cambia **los botones** (escala del `sui-button`):
62
+
63
+ | size | botones | texto del checkbox / switch | alto del pie | fuente |
64
+ |---|---|---|---|---|
65
+ | `medium` (default) | 40 | 14 | 80 | Figma |
66
+ | `large` | 48 | 16 (Paragraph/Medium) | 88 (el padding sigue en 20) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono. Size nuevo del 04-10-2026 |
67
+
68
+ `large` es el siguiente de la escala del `sui-button` (48), el mismo alto que el canon de modales.
63
69
 
64
70
  | uso | mobile | web | fuente |
65
71
  |---|---|---|---|
66
- | par de botones | `sui-modal-footer` (botones `large`, 48) | `sui-modal-footer` | canon (CLAUDE.md, botones: size `large` en todos los modales) |
72
+ | pie de un drawer | `large` (48) | `medium` (40) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
73
+ | par de botones de un modal | `sui-modal-footer` (botones `large`, 48) | `sui-modal-footer` | canon (CLAUDE.md, botones: size `large` en todos los modales) |
67
74
 
68
75
  ```html
69
- <sui-modal-footer secondaryButton="Cancelar" primaryButton="Guardar" [stretch]="bp.isMobile()" … />
76
+ <sui-drawer-footer type="stretch" [size]="bp.isMobile() ? 'large' : 'medium'"
77
+ (primaryClick)="guardar()" (secondaryClick)="cancelar()" />
70
78
  ```
71
79
 
72
80
  ## «No usar»: por qué no hoy y cuándo sí
@@ -83,6 +91,7 @@ modales pide 48. El pie mide 80 px de alto.
83
91
  | input | tipo | default |
84
92
  |---|---|---|
85
93
  | `type` | `'stretch' \| 'basic' \| 'checkbox' \| 'toggle' \| 'stepper' \| 'link-button'` | `'stretch'` |
94
+ | `size` | `'medium' \| 'large'` | `'medium'` |
86
95
  | `primaryButton` | `SuiFooterButtonConfig \| string` | `'Continuar'` |
87
96
  | `secondaryButton` | `SuiFooterButtonConfig \| string \| null` | `'Cancelar'` |
88
97
  | `checkboxLabel` | `string` | `''` |
@@ -110,9 +119,14 @@ interface SuiFooterButtonConfig { label: string; disabled?: boolean; color?: 'pr
110
119
  «Continuar» y sin `secondaryButton` dice «Cancelar». Para un solo botón pasa
111
120
  `[secondaryButton]="null"`.
112
121
  - **`color: 'error'` se ignora**: el primario está fijo en `primary`.
113
- - **Sin tamaño**: botones de 40 px.
122
+ - **`size` va de `medium` (40, default) a `large` (48)** desde el 04-10-2026; antes no tenía tamaño.
123
+ - **Los botones del pie no emitían nada antes del 04-10-2026**: el template escuchaba `(clicked)` en
124
+ `sui-button`, que no tiene ese output (su evento es el `click` nativo), así que `primaryClick` y
125
+ `secondaryClick` nunca salían con un toque real. Arreglado (`(click)`), con test.
114
126
  - `stepper` usa `{ current, total }` con `current` desde 0, y dibuja sus propios puntos (no es
115
127
  `sui-stepper`).
128
+ Para el lector es un `progressbar` «Progreso» que dice «Paso 2 de 4» (`aria-valuetext`, desde
129
+ el 04-10-2026).
116
130
  - `checkboxActive` y `toggleActive` son `model`: `[(checkboxActive)]`.
117
131
  - El borde de arriba ya viene puesto: no le sumes otro.
118
132