@ajuarezso/sui-design-system 0.22.0 → 0.23.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/docs/INDEX.md +8 -8
- package/docs/sui-accordion/README.md +2 -2
- package/docs/sui-activity-feed/README.md +1 -2
- package/docs/sui-alert/README.md +28 -19
- package/docs/sui-app-store-badge/README.md +5 -4
- package/docs/sui-avatar/README.md +16 -16
- package/docs/sui-avatar-group/README.md +4 -4
- package/docs/sui-badge/README.md +27 -9
- package/docs/sui-banner/README.md +10 -9
- package/docs/sui-brand-logo/README.md +3 -3
- package/docs/sui-breadcrumbs/README.md +1 -1
- package/docs/sui-button/README.md +48 -24
- package/docs/sui-button-group/README.md +6 -4
- package/docs/sui-button-group-item/README.md +3 -3
- package/docs/sui-card/README.md +17 -19
- package/docs/sui-chart-legend/README.md +8 -7
- package/docs/sui-checkbox/README.md +11 -6
- package/docs/sui-checkbox-card/README.md +24 -19
- package/docs/sui-checkbox-label/README.md +32 -10
- package/docs/sui-circular-progress-bar/README.md +2 -0
- package/docs/sui-color-dot/README.md +1 -1
- package/docs/sui-color-picker/README.md +22 -7
- package/docs/sui-command-menu-footer/README.md +8 -8
- package/docs/sui-command-menu-search/README.md +2 -2
- package/docs/sui-compact-avatar-group/README.md +4 -3
- package/docs/sui-compact-button/README.md +41 -44
- package/docs/sui-compact-select/README.md +9 -5
- package/docs/sui-compact-select-for-input/README.md +2 -2
- package/docs/sui-content-card/README.md +6 -5
- package/docs/sui-content-divider/README.md +4 -4
- package/docs/sui-content-label/README.md +11 -6
- package/docs/sui-counter-input/README.md +19 -18
- package/docs/sui-date-selector/README.md +16 -12
- package/docs/sui-datepicker/README.md +46 -32
- package/docs/sui-day-cell/README.md +17 -8
- package/docs/sui-day-label/README.md +2 -2
- package/docs/sui-divider/README.md +5 -5
- package/docs/sui-drawer-footer/README.md +19 -5
- package/docs/sui-dropdown-search/README.md +3 -3
- package/docs/sui-emoji/README.md +6 -6
- package/docs/sui-empty-state/README.md +13 -23
- package/docs/sui-fancy-button/README.md +24 -18
- package/docs/sui-file-icon/README.md +1 -1
- package/docs/sui-file-upload/README.md +3 -0
- package/docs/sui-file-upload-card/README.md +8 -7
- package/docs/sui-filter/README.md +5 -5
- package/docs/sui-flag/README.md +3 -2
- package/docs/sui-form-hint/README.md +12 -8
- package/docs/sui-form-label/README.md +11 -16
- package/docs/sui-icon/README.md +4 -3
- package/docs/sui-image-upload/README.md +28 -16
- package/docs/sui-inline-input/README.md +7 -6
- package/docs/sui-inline-select/README.md +8 -5
- package/docs/sui-input/README.md +26 -35
- package/docs/sui-integration-switch/README.md +14 -7
- package/docs/sui-kbd/README.md +4 -4
- package/docs/sui-key-icon/README.md +6 -2
- package/docs/sui-link-button/README.md +21 -17
- package/docs/sui-modal-footer/README.md +1 -1
- package/docs/sui-notification/README.md +8 -6
- package/docs/sui-notification-footer/README.md +2 -2
- package/docs/sui-notification-tab-menu/README.md +5 -3
- package/docs/sui-pagination/README.md +8 -5
- package/docs/sui-password-strength/README.md +1 -1
- package/docs/sui-period-range/README.md +18 -14
- package/docs/sui-popover/README.md +13 -7
- package/docs/sui-product-card/README.md +14 -10
- package/docs/sui-progress-bar/README.md +4 -2
- package/docs/sui-progress-bar-label/README.md +2 -0
- package/docs/sui-radio/README.md +14 -7
- package/docs/sui-radio-card/README.md +12 -12
- package/docs/sui-radio-label/README.md +36 -11
- package/docs/sui-rating/README.md +28 -9
- package/docs/sui-rich-editor/README.md +3 -3
- package/docs/sui-segmented-control/README.md +32 -21
- package/docs/sui-select/README.md +35 -31
- package/docs/sui-sidebar/README.md +1 -2
- package/docs/sui-slider/README.md +7 -0
- package/docs/sui-social-button/README.md +24 -11
- package/docs/sui-status-badge/README.md +7 -3
- package/docs/sui-stepper/README.md +30 -17
- package/docs/sui-store-card/README.md +9 -4
- package/docs/sui-switch/README.md +16 -11
- package/docs/sui-switch-card/README.md +18 -16
- package/docs/sui-switch-label/README.md +22 -11
- package/docs/sui-tab-chips/README.md +55 -41
- package/docs/sui-tab-menu-horizontal/README.md +19 -11
- package/docs/sui-tab-menu-vertical/README.md +10 -5
- package/docs/sui-tag/README.md +25 -11
- package/docs/sui-tag-input/README.md +24 -14
- package/docs/sui-textarea/README.md +21 -21
- package/docs/sui-time-picker/README.md +38 -32
- package/docs/sui-toast/README.md +27 -22
- package/docs/sui-tooltip/README.md +14 -17
- package/docs/sui-topbar-button/README.md +2 -2
- package/fesm2022/ajuarezso-sui-design-system.mjs +1071 -240
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +601 -267
|
@@ -26,7 +26,8 @@ Vehículo → Listo»).
|
|
|
26
26
|
- Secciones que se visitan en cualquier orden: `sui-tab-menu-horizontal`.
|
|
27
27
|
- Un solo paso: no hay nada que indicar.
|
|
28
28
|
|
|
29
|
-
Regla corta: **pasos con nombre y orden → stepper · porcentaje →
|
|
29
|
+
Regla corta (propuesta, falta aprobación): **pasos con nombre y orden → stepper · porcentaje →
|
|
30
|
+
progress-bar · secciones sin orden → tab menu.**
|
|
30
31
|
|
|
31
32
|
## Qué variante usar
|
|
32
33
|
|
|
@@ -35,9 +36,11 @@ Regla corta: **pasos con nombre y orden → stepper · porcentaje → progress-b
|
|
|
35
36
|
> procesos secuenciales». El **vertical**, el mismo indicador «para layouts diversos», con una
|
|
36
37
|
> flecha en el paso activo. Estados de cada paso: `default`, `active`, `completed`. No trae do/don't.
|
|
37
38
|
>
|
|
38
|
-
> Uso medido el
|
|
39
|
-
> **
|
|
40
|
-
> (`small`), sin `interactive`, de 2 o 3 pasos.
|
|
39
|
+
> Uso medido el 04-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`):
|
|
40
|
+
> **8 usos en 8 archivos**. 7 en los onboardings: todos `variant="horizontal"`, sin `size`
|
|
41
|
+
> (`small`), sin `interactive`, de 2 o 3 pasos. 1 en el home del cliente:
|
|
42
|
+
> `pages/customer/store-browser/store-browser.html:214`, `variant="dot"`, `size="medium"`,
|
|
43
|
+
> `[interactive]="true"` (paginador de los rubros, desde el 03-10-2026).
|
|
41
44
|
|
|
42
45
|
### `variant`
|
|
43
46
|
|
|
@@ -45,7 +48,7 @@ Regla corta: **pasos con nombre y orden → stepper · porcentaje → progress-b
|
|
|
45
48
|
|---|---|---|---|
|
|
46
49
|
| `horizontal` (default) | Flujo de **2 a 4 pasos** con nombre, arriba del contenido del paso. Mobile y web. | `pages/driver-onboarding/step-info/step-info.html:3` («Datos → Vehículo → Listo») | según la guía del DS (procesos secuenciales); el límite de pasos es propuesta |
|
|
47
50
|
| `vertical` | Flujo de **5+ pasos** en web, en una columna al costado del formulario. | (sin uso) | según la guía del DS (la pieza existe); el cuándo es propuesta |
|
|
48
|
-
| `dot` | Pantallas que se pasan de a una sin nombre: carrusel de bienvenida, fotos. | (
|
|
51
|
+
| `dot` | Pantallas que se pasan de a una sin nombre: carrusel de bienvenida, fotos. | `pages/customer/store-browser/store-browser.html:214` (páginas de rubros del home) | según la guía del DS (puntos de carrusel) |
|
|
49
52
|
|
|
50
53
|
### `size`
|
|
51
54
|
|
|
@@ -53,7 +56,7 @@ Regla corta: **pasos con nombre y orden → stepper · porcentaje → progress-b
|
|
|
53
56
|
|---|---|---|---|
|
|
54
57
|
| `small` (default) | punto de 8 · indicador de 20 · texto 14 | Web. | según la guía del DS (`small` es su default) |
|
|
55
58
|
| `xsmall` | solo el punto: 4 px. Horizontal y vertical quedan igual que `small`. | Puntos sobre una foto o un banner chico, donde 8 px tapan. | según la guía del DS (el tamaño existe); el cuándo es propuesta |
|
|
56
|
-
| `medium` | punto de 10 · indicador de 24 · texto 16 · card vertical de 44 | Mobile.
|
|
59
|
+
| `medium` | punto de 10 · indicador de 24 · texto 16 · card vertical de 44 | Mobile. Publicado desde la 0.20.0 (la app usa la 0.22.0). | canon (dueño: tamaño por plataforma, 03-10-2026) |
|
|
57
60
|
|
|
58
61
|
### Estado de cada paso (`currentStep`, `errorStep`)
|
|
59
62
|
|
|
@@ -70,7 +73,7 @@ Regla corta: **pasos con nombre y orden → stepper · porcentaje → progress-b
|
|
|
70
73
|
| valor | cuándo | fuente |
|
|
71
74
|
|---|---|---|
|
|
72
75
|
| `false` (default) | Los onboardings: se avanza con el botón «Continuar», no tocando el paso. | propuesta, falta aprobación |
|
|
73
|
-
| `true` |
|
|
76
|
+
| `true` | Los puntos de un carrusel (en el teléfono se tocan en 44 de alto, ver Tamaño), o pasos hechos que se pueden **volver a editar** en web (el horizontal mide 24 de alto). | propuesta, falta aprobación |
|
|
74
77
|
|
|
75
78
|
### `steps`, `count`, `ariaLabel`
|
|
76
79
|
|
|
@@ -82,11 +85,14 @@ Regla corta: **pasos con nombre y orden → stepper · porcentaje → progress-b
|
|
|
82
85
|
|
|
83
86
|
**Usos de hoy que rompen las reglas:**
|
|
84
87
|
|
|
85
|
-
- **0 de variante o estado
|
|
88
|
+
- **0 de variante o estado** en los onboardings: los 7 son horizontales de 2 o 3 pasos, y `step-complete` usa
|
|
86
89
|
`currentStep = stepLabels.length` para marcar todo hecho (`pages/driver-onboarding/step-complete/step-complete.html:3`).
|
|
87
|
-
- **7 sin tamaño por plataforma** (
|
|
88
|
-
|
|
90
|
+
- **7 sin tamaño por plataforma** (`medium` ya está publicado): los onboardings se hacen en el
|
|
91
|
+
teléfono y van con `[size]="bp.isMobile() ? 'medium' : 'small'"`. Ejemplos:
|
|
89
92
|
`pages/customer-onboarding/step-phone/step-phone.html:3`, `pages/business-onboarding/step-info/step-info.html:3`.
|
|
93
|
+
- **A discutir, 1 `interactive` en mobile:** `pages/customer/store-browser/store-browser.html:214`
|
|
94
|
+
usa los puntos `medium` como paginador tocable en el home del cliente. Desde el 04-10-2026 cada
|
|
95
|
+
punto se toca en 22 × 44 en el teléfono (ver Tamaño); el dibujo sigue de 10 × 10.
|
|
90
96
|
|
|
91
97
|
## Tamaño en mobile y en web
|
|
92
98
|
|
|
@@ -94,25 +100,29 @@ Regla corta: **pasos con nombre y orden → stepper · porcentaje → progress-b
|
|
|
94
100
|
|---|---|---|---|
|
|
95
101
|
| horizontal arriba de un paso | `medium` (indicador 24, texto 16) | `small` (indicador 20, texto 14) | canon (dueño: tamaño por plataforma, 03-10-2026) |
|
|
96
102
|
| vertical al costado | no se usa (no entra al lado del formulario) | `small` | propuesta, falta aprobación |
|
|
97
|
-
| puntos de carrusel | `medium` (10) | `small` (8) | propuesta, falta aprobación |
|
|
103
|
+
| puntos de carrusel | `medium` (10, se toca en 22 × 44) | `small` (8) | tamaño: propuesta, falta aprobación · área de 44: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
|
|
98
104
|
|
|
99
105
|
```html
|
|
100
106
|
<sui-stepper [steps]="pasos" [currentStep]="paso - 1" [size]="bp.isMobile() ? 'medium' : 'small'" />
|
|
101
107
|
```
|
|
102
108
|
|
|
103
|
-
Sin `interactive` el tamaño solo afecta lo que se lee. Con `interactive`,
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
Sin `interactive` el tamaño solo afecta lo que se lee. Con `interactive`, en el teléfono
|
|
110
|
+
(≤ 767 px) **los puntos se tocan en 44 de alto** (canon (dueño, 04-10-2026): piso táctil 44 en el teléfono): un `::before` invisible
|
|
111
|
+
los estira a 44 de alto y, de ancho, hasta la mitad del espacio con el vecino, para que dos áreas
|
|
112
|
+
nunca se pisen: `medium` 22 × 44, `small` 18 × 44, `xsmall` 10 × 44. El dibujo no cambia. No se
|
|
113
|
+
agregó un size que separe los puntos: cambiaría el paginador, y lo que faltaba era alto. El
|
|
114
|
+
horizontal sigue en 24 de alto con `medium`: con `interactive` queda para web. La card vertical `medium` sí llega a 44 (padding 10 + 24 + padding 10).
|
|
115
|
+
Alto de cada pieza: horizontal `small` 20 y `medium` 24 (el indicador; la línea del texto mide lo
|
|
116
|
+
mismo) · puntos 4 / 8 / 10 · card vertical `small` 36 (8 + 20 + 8) y `medium` 44.
|
|
106
117
|
|
|
107
118
|
## «No usar»: por qué no hoy y cuándo sí
|
|
108
119
|
|
|
109
120
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
110
121
|
|---|---|---|
|
|
111
122
|
| `vertical` | ningún flujo tiene 5+ pasos | un alta de local completa en web (datos, carta, horario, pagos, repartidores) |
|
|
112
|
-
| `dot` | ningún carrusel usa el componente | un carrusel de bienvenida o de fotos del producto |
|
|
113
123
|
| `xsmall` | no hay puntos sobre fotos | puntos sobre el banner del carrusel del home |
|
|
114
124
|
| `errorStep` | ningún flujo muestra dónde se cortó | el estado de una solicitud de repartidor rechazada en el paso «Documentos» |
|
|
115
|
-
| `interactive` | en los onboardings se avanza con el botón | un formulario largo en web donde se vuelve a corregir un paso hecho |
|
|
125
|
+
| `interactive` | en los onboardings se avanza con el botón (el único uso, en el home del cliente, está a discutir arriba) | un formulario largo en web donde se vuelve a corregir un paso hecho |
|
|
116
126
|
|
|
117
127
|
## API
|
|
118
128
|
|
|
@@ -140,7 +150,7 @@ interface SuiStepperItem {
|
|
|
140
150
|
label?: string; // sin label sale «Paso N»
|
|
141
151
|
}
|
|
142
152
|
type SuiStepperVariant = 'dot' | 'horizontal' | 'vertical';
|
|
143
|
-
type SuiStepperSize = 'small' | 'xsmall' | 'medium'; // medium:
|
|
153
|
+
type SuiStepperSize = 'small' | 'xsmall' | 'medium'; // medium: extensión SUI (03-10-2026)
|
|
144
154
|
```
|
|
145
155
|
|
|
146
156
|
## Trampas
|
|
@@ -152,6 +162,9 @@ type SuiStepperSize = 'small' | 'xsmall' | 'medium'; // medium: repo del DS, n
|
|
|
152
162
|
- **El horizontal hace `flex-wrap`**: con muchos pasos o nombres largos baja a otra línea en vez de
|
|
153
163
|
cortarse. Con 4+ pasos en mobile, revisa a 390 px.
|
|
154
164
|
- **`stepClick` solo sale con `interactive`**; sin él los pasos son `div` y no responden.
|
|
165
|
+
- **Rol del host (04-10-2026):** sin `interactive` es `role="list"` con hijos `listitem`; con
|
|
166
|
+
`interactive` los pasos son `<button>` (no pueden ser `listitem`), así que el host pasa a
|
|
167
|
+
`role="group"` con su `ariaLabel`. El paso actual lleva `aria-current="step"` en los dos casos.
|
|
155
168
|
- `errorStep` gana sobre `currentStep`: los anteriores quedan hechos y los siguientes por hacer.
|
|
156
169
|
- El activo usa `--sui-primary-base`, que en la app es naranja.
|
|
157
170
|
|
|
@@ -68,17 +68,22 @@ El ancho lo da el contenedor. El `size` cambia **el corazón de favorito**, en l
|
|
|
68
68
|
|---|---|---|---|
|
|
69
69
|
| `small` (default) | 36 × 36 | 18 | lo que había en el DS |
|
|
70
70
|
| `medium` | 40 × 40 | 20 | canon (aprobado por el dueño, 03-10-2026): extensión SUI |
|
|
71
|
+
| `large` | 44 × 44 | 20 | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono. Size nuevo del 04-10-2026; además la nota se toca en 44 de alto |
|
|
71
72
|
|
|
72
73
|
| uso | mobile | web | fuente |
|
|
73
74
|
|---|---|---|---|
|
|
74
75
|
| tarjeta | ancho completo | celda de una grilla de 2–3 columnas (≥ 300 de ancho) | lo que hay en la app |
|
|
75
|
-
| corazón de favorito | `
|
|
76
|
-
| nota (abre las opiniones) |
|
|
76
|
+
| corazón de favorito | `large` (44) | `small` (36) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
|
|
77
|
+
| nota (abre las opiniones) | `large`: se ve igual (≈ 38) y se toca en 44 de alto con un `::before` invisible que no se estira a los lados (no pisa la columna de al lado) | ≈ 38: padding 4 × 2 + etiqueta de 10 px + gap 2 + valor de 13 px, con el `line-height` heredado | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (área) · medido del `.scss` (alto visible) |
|
|
77
78
|
|
|
78
79
|
```html
|
|
79
|
-
<sui-store-card [store]="local" [size]="bp.isMobile() ? '
|
|
80
|
+
<sui-store-card [store]="local" [size]="bp.isMobile() ? 'large' : 'small'" />
|
|
80
81
|
```
|
|
81
82
|
|
|
83
|
+
`medium` (40) queda para quien ya lo usa: no llega al piso de 44. **Favoritos no pasa `size`**
|
|
84
|
+
(`pages/customer/favorites/favorites.html`): en el teléfono el corazón queda en 36 hasta que la
|
|
85
|
+
app le pase `[size]="bp.isMobile() ? 'large' : 'small'"` (cambio de la app, no del DS).
|
|
86
|
+
|
|
82
87
|
## «No usar»: por qué no hoy y cuándo sí
|
|
83
88
|
|
|
84
89
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -97,7 +102,7 @@ El ancho lo da el contenedor. El `size` cambia **el corazón de favorito**, en l
|
|
|
97
102
|
| `isFavorite` | `boolean` | `false` |
|
|
98
103
|
| `disableLink` | `boolean` | `false` |
|
|
99
104
|
| `linkBase` | `string` | `'/cliente/restaurante'` |
|
|
100
|
-
| `size` | `'small' \| 'medium'` | `'small'` |
|
|
105
|
+
| `size` | `'small' \| 'medium' \| 'large'` | `'small'` |
|
|
101
106
|
| `deliveryText` | `string \| null` | `undefined` |
|
|
102
107
|
| `distanceText` | `string \| null` | `undefined` |
|
|
103
108
|
|
|
@@ -22,7 +22,7 @@ propio título (día de la semana, tarjeta de la oferta).
|
|
|
22
22
|
descripción y el toque en toda la fila.
|
|
23
23
|
- Un valor de formulario que se confirma con «Guardar»: `sui-checkbox`. (Excepción aceptada hoy:
|
|
24
24
|
los formularios de producto y de planes usan switch para «disponible»/«activo» aunque se guarden
|
|
25
|
-
después; es el patrón que la persona reconoce.)
|
|
25
|
+
después; es el patrón que la persona reconoce. Propuesta, falta aprobación.)
|
|
26
26
|
- Algo destructivo o que no se deshace: el switch promete que se puede volver atrás al toque.
|
|
27
27
|
- Elegir entre dos modos con nombre: `sui-segmented-control` si se aplica al instante (cuadrícula /
|
|
28
28
|
lista); `sui-radio-card` si se guarda después («Por distancia» / «Precio único» en ajustes).
|
|
@@ -64,24 +64,24 @@ Regla corta: **se aplica ya → switch · se confirma después → checkbox · d
|
|
|
64
64
|
**Usos de hoy que rompen las reglas:**
|
|
65
65
|
|
|
66
66
|
- **19 switches con su texto armado a mano → `sui-switch-label`.** Ejemplos:
|
|
67
|
-
`pages/discounts/discounts.html:
|
|
67
|
+
`pages/discounts/discounts.html:207` («Un uso por cliente», con `sui-form-label` + `<span>`),
|
|
68
68
|
`pages/drivers/drivers.html:58` («Aceptar pedidos automáticamente»),
|
|
69
|
-
`pages/super-admin/master-plans/master-plans.html:
|
|
70
|
-
El resto: `discounts.html:
|
|
71
|
-
`pages/schedule/schedule.html:46`, `components/add-product-modal/add-product-modal.html:
|
|
72
|
-
`components/option-sections-manager/option-sections-manager.html:107`, `:
|
|
69
|
+
`pages/super-admin/master-plans/master-plans.html:92` («Plan activo», y 8 más en ese archivo).
|
|
70
|
+
El resto: `discounts.html:319`, `pages/super-admin/master-map-overview/master-map-overview.html:67`,
|
|
71
|
+
`pages/schedule/schedule.html:46`, `components/add-product-modal/add-product-modal.html:205`, `:264`, `:289`,
|
|
72
|
+
`components/option-sections-manager/option-sections-manager.html:107`, `:125`.
|
|
73
73
|
- **3 con la etiqueta que repite el estado** («Disponible» / «No disponible», «Activo»):
|
|
74
|
-
`components/option-sections-manager/option-sections-manager.html:
|
|
75
|
-
`components/add-product-modal/add-product-modal.html:
|
|
74
|
+
`components/option-sections-manager/option-sections-manager.html:145`,
|
|
75
|
+
`components/add-product-modal/add-product-modal.html:312`, `pages/employees/employees.html:99`.
|
|
76
76
|
- **2 en `medium` (sin `size`):** `pages/drivers/drivers.html:58`,
|
|
77
77
|
`pages/super-admin/master-map-overview/master-map-overview.html:67`.
|
|
78
78
|
- **1 nativo dibujado como switch:** `components/settings-panel/settings-panel.html:97`
|
|
79
79
|
(«Notificaciones Push») → `sui-switch-label`.
|
|
80
80
|
|
|
81
|
-
Bien pelados (el texto vive en la fila o la tabla): `pages/discounts/discounts.html:
|
|
82
|
-
de la tabla), `pages/super-admin/master-settings/master-settings.html:
|
|
81
|
+
Bien pelados (el texto vive en la fila o la tabla): `pages/discounts/discounts.html:98` (columna
|
|
82
|
+
de la tabla), `pages/super-admin/master-settings/master-settings.html:105`, los días de
|
|
83
83
|
`components/weekly-schedule-editor/weekly-schedule-editor.html:5` y
|
|
84
|
-
`pages/driver/driver-schedule/driver-schedule.html:
|
|
84
|
+
`pages/driver/driver-schedule/driver-schedule.html:106`, `pages/central/central-ofertas/central-ofertas.html:19`.
|
|
85
85
|
|
|
86
86
|
## Tamaño en mobile y en web
|
|
87
87
|
|
|
@@ -114,6 +114,7 @@ va `sui-switch-label`, que hace tocable todo el bloque.
|
|
|
114
114
|
| `size` | `'medium' \| 'large' \| 'xlarge'` | `'medium'` |
|
|
115
115
|
| `checked` | `boolean` | `false` |
|
|
116
116
|
| `disabled` | `boolean` | `false` |
|
|
117
|
+
| `focusable` | `boolean` | `true` |
|
|
117
118
|
|
|
118
119
|
| output | payload |
|
|
119
120
|
|---|---|
|
|
@@ -131,6 +132,10 @@ Implementa `ControlValueAccessor` (`[(ngModel)]`, `formControlName`).
|
|
|
131
132
|
mezcles las dos formas.
|
|
132
133
|
- `disabled` no baja la opacidad: cambia el color y achica el círculo. Un `opacity` encima lo duplica.
|
|
133
134
|
- No tiene `aria-label`: pelado, pásalo con `[attr.aria-label]` (como en `central-ofertas`).
|
|
135
|
+
Dentro de `sui-switch-label`, `sui-switch-card`, `sui-integration-switch` y el toggle de
|
|
136
|
+
`sui-content-label` ya toma el nombre del texto con `aria-labelledby` (revisión 04-10-2026).
|
|
137
|
+
- **`[focusable]="false"` lo saca del Tab** (tabindex -1), para cuando un padre es el control
|
|
138
|
+
enfocable. `tabindex="-1"` en el host no sirve: el binding del componente lo pisa.
|
|
134
139
|
- Ya trae el arreglo de iOS para el `:active` pegado.
|
|
135
140
|
|
|
136
141
|
## Ejemplo
|
|
@@ -17,7 +17,8 @@ su propia tarjeta: «Notificaciones», «Ubicación siempre», «Recibir pedidos
|
|
|
17
17
|
|
|
18
18
|
**No lo uses** para:
|
|
19
19
|
|
|
20
|
-
- Algo que se confirma después con «Guardar»: `sui-checkbox-card` (
|
|
20
|
+
- Algo que se confirma después con «Guardar»: `sui-checkbox-card` (según la guía del DS: el switch
|
|
21
|
+
es «para prender o apagar un ajuste de forma inmediata»).
|
|
21
22
|
- Una lista larga de ajustes parecidos: `sui-switch-label` con `flip`, uno por fila.
|
|
22
23
|
- Una integración con otro servicio (logo + «Administrar»): `sui-integration-switch`.
|
|
23
24
|
- Algo destructivo o que no se deshace: un botón con confirmación.
|
|
@@ -30,16 +31,16 @@ Regla corta: **ajuste con peso, al toque → switch-card · lista de ajustes →
|
|
|
30
31
|
> **La guía del DS no tiene página de la switch card.** De la guía sale lo del switch que lleva
|
|
31
32
|
> adentro: **«para prender o apagar un ajuste de forma inmediata»**.
|
|
32
33
|
>
|
|
33
|
-
> Uso medido el
|
|
34
|
-
> switch-cards en 8 archivos**. Tipos:
|
|
35
|
-
>
|
|
36
|
-
> que
|
|
34
|
+
> Uso medido el 04-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-card`): **16
|
|
35
|
+
> switch-cards en 8 archivos**. Tipos: 14 `left-icon` (los 14 con el ícono proyectado), 2 `basic`.
|
|
36
|
+
> Tamaños: los 16 con `bp.controlSize()`. Ninguna vive ya en un formulario que se guarda con un
|
|
37
|
+
> botón: las 10 que lo hacían pasaron a `sui-checkbox-card` el 03-10-2026.
|
|
37
38
|
|
|
38
39
|
### `type` (el leading)
|
|
39
40
|
|
|
40
41
|
| type | cuándo | fuente |
|
|
41
42
|
|---|---|---|
|
|
42
|
-
| `left-icon` + ícono proyectado | Lo normal: `<sui-icon sui-switch-card-leading name="…" [size]="20" />`. | propuesta (
|
|
43
|
+
| `left-icon` + ícono proyectado | Lo normal: `<sui-icon sui-switch-card-leading name="…" [size]="20" />`. | propuesta (14 de 16) |
|
|
43
44
|
| `left-icon` + `emoji` | Ver «No usar». | propuesta |
|
|
44
45
|
| `basic` | El ajuste es EL tema de la pantalla y no necesita ícono («Disponible» en el inicio del repartidor, «Disponibilidad automática»). | propuesta |
|
|
45
46
|
| `avatar` (`imageUrl`) | Ver «No usar». | propuesta |
|
|
@@ -64,19 +65,16 @@ Regla corta: **ajuste con peso, al toque → switch-card · lista de ajustes →
|
|
|
64
65
|
| `large` (40 × 24) | Desktop, vía `bp.controlSize()`. | canon (aprobado por el dueño, 28-09-2026) |
|
|
65
66
|
| `medium` (default) | No usar en pantallas nuevas. | canon (aprobado por el dueño, 28-09-2026) |
|
|
66
67
|
|
|
67
|
-
**Usos de hoy que rompen las reglas
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
`pages/super-admin/master-settings/master-settings.html` (`:36` «Pausar los pedidos», `:179`,
|
|
72
|
-
`:336`, `:342`, `:349`, cada uno con su «Guardar…» abajo).
|
|
73
|
-
- **6 sin `size`**: los 5 de `master-settings` de arriba y `pages/notifications/notifications.html:59`
|
|
74
|
-
(«Sonidos de la app»).
|
|
68
|
+
**Usos de hoy que rompen las reglas: 0.** Los 10 que se guardaban con un botón (métodos de pago
|
|
69
|
+
de mi-negocio y 5 ajustes de master-settings) pasaron a `sui-checkbox-card`, y el de
|
|
70
|
+
`pages/notifications/notifications.html:59` («Sonidos de la app») ya lleva `bp.controlSize()`,
|
|
71
|
+
los dos el 03-10-2026.
|
|
75
72
|
|
|
76
73
|
## Tamaño en mobile y en web
|
|
77
74
|
|
|
78
|
-
La card entera se toca
|
|
79
|
-
|
|
75
|
+
La card entera se toca: 74 px con descripción (16 + 40 + 16 de padding y contenido, más 2 de
|
|
76
|
+
borde) y 54 px la más chica (`basic`, sin descripción, `medium`). Llega al piso de 44 sola. El
|
|
77
|
+
`size` cambia solo el interruptor.
|
|
80
78
|
|
|
81
79
|
| uso | mobile | web |
|
|
82
80
|
|---|---|---|
|
|
@@ -130,6 +128,10 @@ Slot: `[sui-switch-card-leading]` (el ícono o el logo). Implementa `ControlValu
|
|
|
130
128
|
- `avatar` siempre dibuja un `sui-avatar` con `imageUrl` (si falla, las iniciales del `label`): no usa lo
|
|
131
129
|
proyectado. `card-provider`, `brand` y `company` leen `imageUrl` y, sin ella, usan lo proyectado.
|
|
132
130
|
- Toda la card togglea; el toque sobre el propio switch no cuenta doble.
|
|
131
|
+
- **Teclado**: el único tab stop es el switch de la derecha, con nombre = `label` y descripción =
|
|
132
|
+
`description` (`aria-labelledby` / `aria-describedby`). Espacio y Enter emiten
|
|
133
|
+
`checkedChange` **una vez** (revisión 04-10-2026); antes emitían dos (el switch y, por burbujeo, la card),
|
|
134
|
+
y en formulario el valor se revertía.
|
|
133
135
|
- El interruptor siempre va a la derecha (no hay `flip`).
|
|
134
136
|
- `badge` con string sale **azul `light` `small`** (en `sui-switch-label` sale naranja).
|
|
135
137
|
|
|
@@ -47,7 +47,7 @@ Regla corta: **ajuste con texto → este · ajuste con peso → switch-card · s
|
|
|
47
47
|
| `sublabel` | Precisión corta entre paréntesis: «(beta)». | según la guía del DS |
|
|
48
48
|
| `badge` | Solo novedad. Con string sale naranja `light`: pasa el objeto. | según la guía del DS (pieza «NEW»); el color es propuesta |
|
|
49
49
|
| `link` | «Saber más» que no toca el interruptor. Solo se ve con `description`. | según la guía del DS |
|
|
50
|
-
| `flip` | Interruptor a la **derecha** en listas de ajustes: el texto se lee primero y el control queda bajo el pulgar, como en iOS y Android (es lo que hacen a mano `drivers.html:58`, `discounts.html:
|
|
50
|
+
| `flip` | Interruptor a la **derecha** en listas de ajustes: el texto se lee primero y el control queda bajo el pulgar, como en iOS y Android (es lo que hacen a mano `drivers.html:58`, `discounts.html:207`, `schedule.html:46`). Sin `flip` (izquierda) dentro de un formulario, alineado con las casillas o los switches del resto del form. | canon (aprobado por el dueño, 03-10-2026) |
|
|
51
51
|
| `disabled` | Mientras se guarda el cambio o cuando no aplica. | según la guía del DS |
|
|
52
52
|
|
|
53
53
|
### `size`
|
|
@@ -60,25 +60,34 @@ Regla corta: **ajuste con texto → este · ajuste con peso → switch-card · s
|
|
|
60
60
|
|
|
61
61
|
**Usos de hoy que rompen las reglas:**
|
|
62
62
|
|
|
63
|
-
- **2 en `medium`:** `pages/products/products.html:
|
|
63
|
+
- **2 en `medium`:** `pages/products/products.html:301` («Horario propio
|
|
64
64
|
para esta categoría») y `pages/public/privacidad/privacidad.html:132` («Permitir analítica de uso»).
|
|
65
65
|
- **19 `sui-switch` con texto a mano + 1 nativo** que deberían ser este componente: el detalle
|
|
66
|
-
está en el README de `sui-switch`. Ejemplos: `pages/discounts/discounts.html:
|
|
66
|
+
está en el README de `sui-switch`. Ejemplos: `pages/discounts/discounts.html:207`,
|
|
67
67
|
`pages/drivers/drivers.html:58`, `components/settings-panel/settings-panel.html:97`.
|
|
68
68
|
|
|
69
69
|
## Tamaño en mobile y en web
|
|
70
70
|
|
|
71
|
-
| uso | mobile | web |
|
|
72
|
-
|
|
73
|
-
| fila de ajustes | `
|
|
74
|
-
| ajuste que es la acción principal de la pantalla («Cerrar por hoy») | `
|
|
71
|
+
| uso | mobile | web | fuente |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| fila de ajustes | `2xlarge` (fila de 44 como mínimo, switch 48 × 28) | `large` (40 × 24) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
|
|
74
|
+
| ajuste que es la acción principal de la pantalla («Cerrar por hoy») | `2xlarge` | `xlarge` | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
|
|
75
75
|
|
|
76
76
|
```html
|
|
77
|
-
<sui-switch-label [size]="bp.
|
|
77
|
+
<sui-switch-label [size]="bp.isMobile() ? '2xlarge' : 'large'" … />
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
| size | switch | label | descripción | alto de la fila sin descripción |
|
|
81
|
+
|---|---|---|---|---|
|
|
82
|
+
| `medium` (default, Figma) | 32 × 20 | 14/20 | 12/16 | 20 |
|
|
83
|
+
| `large` | 40 × 24 | 16/24 | 12/16 | 24 |
|
|
84
|
+
| `xlarge` | 48 × 28 | 16/24 | 12/16 | 28 |
|
|
85
|
+
| `2xlarge` | 48 × 28 | 16/24 | 12/16 | **44** (`min-height`) |
|
|
86
|
+
|
|
87
|
+
El bloque entero se toca, así que con descripción la fila pasa los 44 px sola. Sin descripción
|
|
88
|
+
`xlarge` mide 28: en el teléfono va `2xlarge` (canon (dueño, 04-10-2026): piso táctil 44 en el teléfono), que es la misma fila con
|
|
89
|
+
`min-height: 44px` y todo centrado en vertical. `2xlarge` no es un size del switch: el switch
|
|
90
|
+
interno se queda en `xlarge`.
|
|
82
91
|
|
|
83
92
|
En large y xlarge el texto sube a 16 px (regla del 03-10-2026): el label va en 16/24; sublabel y
|
|
84
93
|
descripción se quedan en 12.
|
|
@@ -101,7 +110,7 @@ descripción se quedan en 12.
|
|
|
101
110
|
| `label` | `string` | `''` |
|
|
102
111
|
| `sublabel` | `string \| null` | `null` |
|
|
103
112
|
| `description` | `string \| null` | `null` |
|
|
104
|
-
| `size` | `'medium' \| 'large' \| 'xlarge'` | `'medium'` |
|
|
113
|
+
| `size` | `'medium' \| 'large' \| 'xlarge' \| '2xlarge'` | `'medium'` |
|
|
105
114
|
| `badge` | `SuiBadgeConfig \| string \| null` | `null` |
|
|
106
115
|
| `link` | `SuiLinkConfig \| string \| null` | `null` |
|
|
107
116
|
| `flip` | `boolean` | `false` |
|
|
@@ -127,6 +136,8 @@ Implementa `ControlValueAccessor` (`[(ngModel)]`, `formControlName`).
|
|
|
127
136
|
- Deshabilitado baja todo el bloque a 0.5 de opacidad **además** del gris propio del switch.
|
|
128
137
|
- El badge con string sale naranja; en `sui-switch-card` el default es azul.
|
|
129
138
|
- `flip` usa CSS `order`: el orden de lectura no cambia.
|
|
139
|
+
- El switch de adentro es el tab stop y toma su nombre del `label` y su descripción de la
|
|
140
|
+
`description` (`aria-labelledby` / `aria-describedby`) (revisión 04-10-2026).
|
|
130
141
|
|
|
131
142
|
## Ejemplo
|
|
132
143
|
|
|
@@ -13,8 +13,9 @@ Story: [Molecules/Tabs/Tab Chips](https://sui-design-system.web.app/?path=/docs/
|
|
|
13
13
|
|
|
14
14
|
**Úsalo** para:
|
|
15
15
|
|
|
16
|
-
- **Filtrar una lista** por estado, período, rol o zona
|
|
17
|
-
«
|
|
16
|
+
- **Filtrar una lista** por estado, período, rol o zona con **5 o más opciones**, o con opciones que
|
|
17
|
+
no caben y se deslizan: «Todos · Pendientes · En camino · Entregados · Cancelados», los meses de la
|
|
18
|
+
central.
|
|
18
19
|
- **Saltar entre categorías** de un catálogo que viene de la base («Hamburguesas · Pizzas ·
|
|
19
20
|
Bebidas»), con `sticky` en la carta del local.
|
|
20
21
|
|
|
@@ -22,35 +23,38 @@ Sirve cuando las opciones son muchas, cambian según los datos o no caben y tien
|
|
|
22
23
|
|
|
23
24
|
**No lo uses** para:
|
|
24
25
|
|
|
25
|
-
- **2 a 4 modos de la
|
|
26
|
+
- **2 a 4 opciones excluyentes**, sean modos de la vista (por semana / día vs día) o un período o
|
|
27
|
+
filtro fijo («Hoy · 7 días · 30 días»): `sui-segmented-control`. **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).
|
|
26
28
|
- **Secciones de contenido distinto** (Ventas · Productos · Repartidores): `sui-tab-menu-horizontal`.
|
|
27
29
|
- **Elegir un valor que se guarda** con un botón (radio de visibilidad, motivo de rechazo,
|
|
28
|
-
sumar o descontar): `sui-radio-card
|
|
29
|
-
|
|
30
|
+
sumar o descontar): `sui-radio-card`. (`sui-segmented-control` no sirve para esto: su README lo
|
|
31
|
+
deja para opciones que se aplican en el momento.) El tab-chips **siempre tiene uno elegido** y no
|
|
32
|
+
puede quedar vacío (ver Trampas).
|
|
30
33
|
- Un chip que la persona quita: `sui-tag`.
|
|
31
34
|
|
|
32
|
-
Regla corta (la misma del README de `sui-segmented-control
|
|
33
|
-
|
|
35
|
+
Regla corta (canon, dueño 04-10-2026; la misma del README de `sui-segmented-control`): **2-4
|
|
36
|
+
opciones excluyentes (modo, período o filtro) → segmented · 5+ o que deslizan → tab-chips ·
|
|
37
|
+
secciones → tab menu.**
|
|
34
38
|
|
|
35
39
|
## Qué variante usar
|
|
36
40
|
|
|
37
41
|
> **La guía del DS no tiene este componente**: es una extensión de SUI (la «cat nav» de las apps de
|
|
38
42
|
> delivery). Todo lo que sigue es propuesta salvo lo marcado como canon.
|
|
39
43
|
>
|
|
40
|
-
> Uso medido el
|
|
41
|
-
> `mockup-*`, `dx/*`, `
|
|
42
|
-
> **
|
|
43
|
-
>
|
|
44
|
-
>
|
|
44
|
+
> Uso medido el 04-10-2026 en `master-pedidos/src/app` (sin `master-preview`, `master-prototipos`,
|
|
45
|
+
> `mockup-sheets-*`, `dx/*`, `master-rutina`, `master-medico`, `dev-index`):
|
|
46
|
+
> **42 usos en 29 archivos `.html`** (incluye `master-ejercicios`). `[sticky]="true"`: 2 (la carta
|
|
47
|
+
> del local y `master-ejercicios`). `count`: 5 listas (cifra del 03-10). `[(value)]`: 2; el resto
|
|
48
|
+
> `[value]` + `(valueChange)`. `autoScroll`: 0. `size`: 20, todos `bp.isMobile() ? 'large' : 'medium'`.
|
|
45
49
|
|
|
46
50
|
### Para qué se usa (el contenido de los chips)
|
|
47
51
|
|
|
48
52
|
| caso | cuándo | ejemplo real de la app | fuente |
|
|
49
53
|
|---|---|---|---|
|
|
50
54
|
| filtro de estado | La lista es la misma; los chips la recortan. «Todos» va primero y es el elegido por defecto. | `pages/envios/envios.html:98` («Todos · Activos · Entregados · Cancelados») · `pages/orders/orders.html:64` | propuesta, falta aprobación |
|
|
51
|
-
| filtro de período | Rango de fechas de un reporte o gráfico.
|
|
55
|
+
| filtro de período | Rango de fechas de un reporte o gráfico **con 5 o más opciones** (los meses). Con 2 a 4 («Hoy · 7 días · 30 días») va `sui-segmented-control`. | `pages/central/central-gastos/central-gastos.html:10` (meses) | canon (dueño, 04-10-2026) |
|
|
52
56
|
| categorías del catálogo | Saltar a una categoría de la carta; con `sticky` y `autoScroll`. | `pages/customer/restaurant-menu/restaurant-menu.html:226` | propuesta, falta aprobación |
|
|
53
|
-
| sugerencias rápidas | **No.** Un motivo frecuente que completa un texto no es una selección: el chip elige el primero solo. Si se usa, el primer chip es el neutro («Otro motivo») y el texto lleva su propio signal. | `pages/super-admin/master-orders/master-orders.html:
|
|
57
|
+
| sugerencias rápidas | **No.** Un motivo frecuente que completa un texto no es una selección: el chip elige el primero solo. Si se usa, el primer chip es el neutro («Otro motivo») y el texto lleva su propio signal. | `pages/super-admin/master-orders/master-orders.html:900` (bien resuelto) | propuesta, falta aprobación |
|
|
54
58
|
|
|
55
59
|
### `sticky`
|
|
56
60
|
|
|
@@ -77,50 +81,54 @@ vista → segmented · secciones → tab menu · filtros o categorías → tab-c
|
|
|
77
81
|
|
|
78
82
|
**Usos de hoy que rompen las reglas:**
|
|
79
83
|
|
|
80
|
-
- **
|
|
81
|
-
del super admin
|
|
82
|
-
|
|
83
|
-
«
|
|
84
|
-
|
|
85
|
-
`:924` y `:1002`. Es el mismo bug que se arregló en `master-orders` el 01-09-2026 (signal propio
|
|
86
|
-
para los chips y «Otro motivo» primero).
|
|
84
|
+
- **Resuelto el 03-10-2026: el motivo escrito a mano rebotaba al primer chip.** En los modales de
|
|
85
|
+
rechazo del super admin (`pages/super-admin/master-drivers/master-drivers.html:657`, `:933` y
|
|
86
|
+
`:1012`) los chips y el textarea compartían el signal. Ahora los chips llevan el suyo
|
|
87
|
+
(`master-drivers/motivo-con-chips.ts`, «Otro motivo» primero), igual que `master-orders` desde el
|
|
88
|
+
01-09-2026.
|
|
87
89
|
- **4 son secciones de contenido distinto** (→ `sui-tab-menu-horizontal` en web; en mobile, a
|
|
88
90
|
discutir porque el tab menu no se desliza, ver su README): `pages/products/products.html:6`
|
|
89
91
|
(«Categorías · Productos · Secciones reutilizables»), `pages/promociones/promociones.html:7`
|
|
90
92
|
(«Carrusel pagado · Push notifications»), `pages/super-admin/master-drivers/master-drivers.html:16`,
|
|
91
|
-
`pages/reports/reports.html:
|
|
93
|
+
`pages/reports/reports.html:99` («Ventas · Productos · Repartidores · Clientes»).
|
|
92
94
|
- **2 son modos de la misma vista** (→ `sui-segmented-control`):
|
|
93
|
-
`pages/super-admin/master-semanas/master-semanas.html:
|
|
95
|
+
`pages/super-admin/master-semanas/master-semanas.html:75` (3 métricas del mismo gráfico) y `:80`
|
|
94
96
|
(«Por semana · Día vs día»).
|
|
95
|
-
- **4 eligen un valor de un formulario** (→ `sui-radio-card
|
|
96
|
-
|
|
97
|
-
`
|
|
98
|
-
`pages/
|
|
99
|
-
|
|
97
|
+
- **4 eligen un valor de un formulario** (→ `sui-radio-card`; `sui-segmented-control` solo si se
|
|
98
|
+
aplica en el momento, sin botón «Guardar»):
|
|
99
|
+
`components/option-sections-manager/option-sections-manager.html:177` (a qué se aplica),
|
|
100
|
+
`pages/super-admin/master-drivers/master-drivers.html:99` («Sumar · Descontar»),
|
|
101
|
+
`pages/mi-negocio/mi-negocio.html:952` (radio de visibilidad) y `:988` (tiempo para confirmar).
|
|
102
|
+
A discutir: `pages/customer/checkout/checkout.html:460` (día del pedido programado), que filtra
|
|
100
103
|
las franjas de abajo y se parece más a un filtro.
|
|
101
|
-
- **1 con el número dentro del texto:** `pages/notifications/notifications.ts:
|
|
104
|
+
- **1 con el número dentro del texto:** `pages/notifications/notifications.ts:194`
|
|
102
105
|
(`No leídas (3)` → `count: 3`).
|
|
103
|
-
- **
|
|
104
|
-
|
|
106
|
+
- **22 sin tamaño por plataforma.** Los 20 que ya lo tienen (`bp.isMobile() ? 'large' : 'medium'`)
|
|
107
|
+
entraron el 03-10-2026; los 22 que faltan son casi todos del super admin y de la central.
|
|
105
108
|
|
|
106
109
|
## Tamaño en mobile y en web
|
|
107
110
|
|
|
108
|
-
|
|
109
|
-
> publique, todos miden lo de `medium`.
|
|
111
|
+
`size` está publicado desde la 0.20.0; la app usa la 0.22.0.
|
|
110
112
|
|
|
111
|
-
Alto del chip: `small` 32 px · `medium` 36 px (el de siempre, default
|
|
112
|
-
|
|
113
|
+
Alto del chip: `small` 32 px (`height: 32px`) · `medium` 36 px (el de siempre, default; sin alto
|
|
114
|
+
fijo: 8 + 8 de padding + `line-height: normal` + 2 de borde, 36 medido en Storybook con Satoshi) ·
|
|
115
|
+
`large` 40 px (`height: 40px`, con `border-box`) · `xlarge` 44 px (`height: 44px`, padding lateral 18).
|
|
116
|
+
`small` y `medium` con texto de 14 px; cambia el alto y el aire lateral. El scroller suma 12 px arriba
|
|
117
|
+
y abajo, pero ese aire es del `<nav>`, no del botón: tocar ahí no elige el chip.
|
|
113
118
|
|
|
114
|
-
En large y xlarge el texto sube a 16 px (regla del 03-10-2026): el chip
|
|
115
|
-
|
|
119
|
+
En large y xlarge el texto sube a 16 px (regla del 03-10-2026): el chip va en 16/24. El número del
|
|
120
|
+
contador mide 11 px en `small` y `medium`, y 12 px (pastilla de 20) en `large` y `xlarge`.
|
|
121
|
+
|
|
122
|
+
**Área táctil: 44 px en `xlarge`**, el piso del teléfono (canon del dueño, 04-10-2026: piso táctil
|
|
123
|
+
44 en el teléfono). `large` (40) queda para pantallas que ya lo usan y para tablet.
|
|
116
124
|
|
|
117
125
|
| uso | mobile | web | fuente |
|
|
118
126
|
|---|---|---|---|
|
|
119
|
-
| filtros y categorías | `
|
|
127
|
+
| filtros y categorías | `xlarge` (44) | `medium` | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono; tamaño por plataforma, 03-10-2026 |
|
|
120
128
|
| filtros densos en la cabecera de una tabla | — | `small` | propuesta, falta aprobación |
|
|
121
129
|
|
|
122
130
|
```html
|
|
123
|
-
<sui-tab-chips [chips]="filtros" [(value)]="filtro" [size]="bp.isMobile() ? '
|
|
131
|
+
<sui-tab-chips [chips]="filtros" [(value)]="filtro" [size]="bp.isMobile() ? 'xlarge' : 'medium'" />
|
|
124
132
|
```
|
|
125
133
|
|
|
126
134
|
## «No usar»: por qué no hoy y cuándo sí
|
|
@@ -141,7 +149,7 @@ midiendo 40. El número del contador se queda en 12.
|
|
|
141
149
|
| `chips` | `readonly (string \| SuiTabChipItem)[]` | — (requerido) |
|
|
142
150
|
| `value` · model, `[(value)]` | `string` | `''` |
|
|
143
151
|
| `sticky` | `boolean` | `false` |
|
|
144
|
-
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` |
|
|
152
|
+
| `size` | `'small' \| 'medium' \| 'large' \| 'xlarge'` | `'medium'` |
|
|
145
153
|
| `autoScroll` | `boolean` | `true` |
|
|
146
154
|
|
|
147
155
|
Outputs: ninguno.
|
|
@@ -153,7 +161,7 @@ interface SuiTabChipItem {
|
|
|
153
161
|
label: string;
|
|
154
162
|
count?: number; // 0 o undefined no se dibuja
|
|
155
163
|
}
|
|
156
|
-
type SuiTabChipsSize = 'small' | 'medium' | 'large';
|
|
164
|
+
type SuiTabChipsSize = 'small' | 'medium' | 'large';
|
|
157
165
|
```
|
|
158
166
|
|
|
159
167
|
## Trampas
|
|
@@ -165,6 +173,12 @@ type SuiTabChipsSize = 'small' | 'medium' | 'large'; // repo del DS, no en 0.1
|
|
|
165
173
|
- **`value` es `string`.** Para números (km, minutos) hay que convertir en los dos sentidos
|
|
166
174
|
(`radioEfectivo() + ''` y `+$event`).
|
|
167
175
|
- **Lleva `role="tablist"`** aunque se use como filtro: el lector de pantalla lo anuncia como pestañas.
|
|
176
|
+
- **Teclado (04-10-2026):** un solo tab stop (el chip activo). ← → mueven el foco entre chips con
|
|
177
|
+
vuelta al inicio, Home/End van al primero/último, y Enter/Espacio elige. Las flechas **no**
|
|
178
|
+
seleccionan (activación manual): cada filtro recarga datos y no se dispara una carga por chip
|
|
179
|
+
recorrido. Al salir del grupo, el tab stop vuelve al chip activo.
|
|
180
|
+
- **La cuenta va en el nombre accesible** («Pendientes, 3»): el número visible sigue
|
|
181
|
+
`aria-hidden` para que no se lea dos veces.
|
|
168
182
|
- **No tiene padding lateral propio**: lo pone la pantalla. Sí trae 12 px arriba y abajo.
|
|
169
183
|
- **`sticky` cambia el host a `display: contents`**: las clases que le pongas al host dejan de
|
|
170
184
|
pintar caja (márgenes, anchos). Pon el estilo en un contenedor.
|
|
@@ -49,18 +49,19 @@ segmented · secciones → tab menu · filtros → tab-chips.**
|
|
|
49
49
|
|
|
50
50
|
### `size`
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
| `small` · `large` · `xlarge` | No usar: no hacen nada. | según el código |
|
|
52
|
+
Los cuatro valores (`small`, `medium`, `large`, `xlarge`) cambian el alto de la franja y el texto
|
|
53
|
+
desde el 03-10-2026 (`sui-tab-menu-horizontal.scss`, bloque «Tamaños»). Cuándo usar cada uno: ver
|
|
54
|
+
«Tamaño en mobile y en web».
|
|
56
55
|
|
|
57
56
|
**Usos de hoy que rompen las reglas:**
|
|
58
57
|
|
|
59
58
|
- **0** en este componente. Los casos que deberían ser tab menu y hoy son `sui-tab-chips` están en el
|
|
60
59
|
README de `sui-tab-chips` (4: `pages/products/products.html:6`, `pages/promociones/promociones.html:7`,
|
|
61
|
-
`pages/super-admin/master-drivers/master-drivers.html:16`, `pages/reports/reports.html:
|
|
62
|
-
- **A
|
|
63
|
-
|
|
60
|
+
`pages/super-admin/master-drivers/master-drivers.html:16`, `pages/reports/reports.html:99`).
|
|
61
|
+
- **A discutir, 1 sin tamaño por plataforma:** el único uso
|
|
62
|
+
(`components/store-ratings-modal/store-ratings-modal.html:43`) es del modal del local, que el
|
|
63
|
+
cliente abre en el teléfono, y no pasa `size`: mide 48 px tocables (`medium`). Llega a 44, pero la
|
|
64
|
+
propuesta de abajo pide `large` en mobile.
|
|
64
65
|
|
|
65
66
|
## Tamaño en mobile y en web
|
|
66
67
|
|
|
@@ -69,10 +70,13 @@ Cada pestaña ocupa **todo el alto de la franja**, así que lo tocable es la fra
|
|
|
69
70
|
|
|
70
71
|
| size | franja tocable (+ 2 de bordes) | texto | ícono | gap | fuente |
|
|
71
72
|
|---|---|---|---|---|---|
|
|
72
|
-
| `small` | 40 | `label-sm` 14/20 | 20 | 20 | canon (aprobado por el dueño, 03-10-2026): extensión SUI |
|
|
73
|
-
| `medium` (default) | 48 | `label-sm` 14/20 | 20 | 24 | Figma |
|
|
74
|
-
| `large` | 52 | `label-md` 16/24 | 20 | 24 | canon (aprobado por el dueño, 03-10-2026): extensión SUI |
|
|
75
|
-
| `xlarge` | 56 | `label-md` 16/24 | 24 | 28 | canon (aprobado por el dueño, 03-10-2026): extensión SUI |
|
|
73
|
+
| `small` | 40 (10 + 20 + 10) | `label-sm` 14/20 | 20 | 20 | canon (aprobado por el dueño, 03-10-2026): extensión SUI |
|
|
74
|
+
| `medium` (default) | 48 (14 + 20 + 14) | `label-sm` 14/20 | 20 | 24 | Figma |
|
|
75
|
+
| `large` | 52 (14 + 24 + 14) | `label-md` 16/24 | 20 | 24 | canon (aprobado por el dueño, 03-10-2026): extensión SUI |
|
|
76
|
+
| `xlarge` | 56 (16 + 24 + 16) | `label-md` 16/24 | 24 | 28 | canon (aprobado por el dueño, 03-10-2026): extensión SUI |
|
|
77
|
+
|
|
78
|
+
El alto sale del `padding` vertical del botón más el `line-height` del texto. A lo ancho, lo tocable
|
|
79
|
+
es solo el texto: el `gap` entre pestañas no responde.
|
|
76
80
|
|
|
77
81
|
| uso | mobile | web | fuente |
|
|
78
82
|
|---|---|---|---|
|
|
@@ -128,6 +132,10 @@ interface SuiTabMenuHorizontalItem<T = string> {
|
|
|
128
132
|
que Figma pone en el contenedor ahora va dentro de cada pestaña. Si algo de afuera le pone
|
|
129
133
|
padding al `.sui-tab-menu-horizontal__track`, la franja crece al doble.
|
|
130
134
|
- **Emite dos veces**: `tabChange` y `activeChange`. Con `[(active)]` no hace falta `(tabChange)`.
|
|
135
|
+
- **Teclado (04-10-2026):** un solo tab stop (la pestaña activa). ← → mueven el foco **y activan**
|
|
136
|
+
(patrón de tablist con activación automática), con vuelta al inicio y saltando las deshabilitadas;
|
|
137
|
+
Home/End a los extremos. Cada flecha emite `tabChange`. No hay `aria-controls`: el `tabpanel` lo
|
|
138
|
+
arma quien lo usa.
|
|
131
139
|
- **Trae bordes arriba y abajo** (`stroke-soft-200`) y fondo blanco: no lo metas en una card que ya
|
|
132
140
|
tiene borde, o quedan dos líneas.
|
|
133
141
|
- El ícono de la pestaña activa es `strong-950`, no naranja; en el tab menu vertical es naranja.
|