@ajuarezso/sui-design-system 0.24.1 → 0.25.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/sui-accordion/README.md +85 -11
- package/docs/sui-activity-feed/README.md +65 -11
- package/docs/sui-activity-filter/README.md +54 -5
- package/docs/sui-alert/README.md +54 -0
- package/docs/sui-app-store-badge/README.md +64 -10
- package/docs/sui-avatar/README.md +92 -29
- package/docs/sui-avatar-group/README.md +75 -9
- package/docs/sui-badge/README.md +85 -17
- package/docs/sui-banner/README.md +85 -20
- package/docs/sui-brand-logo/README.md +95 -31
- package/docs/sui-breadcrumb-item/README.md +54 -3
- package/docs/sui-breadcrumbs/README.md +54 -6
- package/docs/sui-button/README.md +76 -12
- package/docs/sui-button-group/README.md +91 -23
- package/docs/sui-button-group-item/README.md +81 -14
- package/docs/sui-card/README.md +105 -18
- package/docs/sui-chart-legend/README.md +63 -10
- package/docs/sui-chart-legend-dot/README.md +59 -10
- package/docs/sui-checkbox/README.md +109 -29
- package/docs/sui-checkbox-card/README.md +70 -14
- package/docs/sui-checkbox-label/README.md +92 -26
- package/docs/sui-circular-progress-bar/README.md +80 -19
- package/docs/sui-color-dot/README.md +72 -12
- package/docs/sui-color-picker/README.md +71 -13
- package/docs/sui-command-menu-footer/README.md +50 -1
- package/docs/sui-command-menu-item/README.md +74 -14
- package/docs/sui-command-menu-search/README.md +58 -3
- package/docs/sui-compact-avatar-group/README.md +73 -13
- package/docs/sui-compact-button/README.md +123 -34
- package/docs/sui-compact-select/README.md +61 -7
- package/docs/sui-compact-select-for-input/README.md +70 -6
- package/docs/sui-content-card/README.md +75 -14
- package/docs/sui-content-divider/README.md +67 -16
- package/docs/sui-content-label/README.md +99 -20
- package/docs/sui-counter-input/README.md +102 -18
- package/docs/sui-date-selector/README.md +69 -11
- package/docs/sui-datepicker/README.md +85 -18
- package/docs/sui-day-cell/README.md +75 -17
- package/docs/sui-day-label/README.md +56 -7
- package/docs/sui-divider/README.md +64 -9
- package/docs/sui-drawer-footer/README.md +63 -2
- package/docs/sui-drawer-header/README.md +69 -12
- package/docs/sui-dropdown-caption/README.md +58 -6
- package/docs/sui-dropdown-item/README.md +75 -9
- package/docs/sui-dropdown-menu/README.md +83 -14
- package/docs/sui-dropdown-search/README.md +60 -4
- package/docs/sui-emoji/README.md +94 -30
- package/docs/sui-empty-state/README.md +71 -7
- package/docs/sui-fancy-button/README.md +74 -14
- package/docs/sui-file-icon/README.md +70 -12
- package/docs/sui-file-upload/README.md +77 -17
- package/docs/sui-file-upload-card/README.md +64 -12
- package/docs/sui-filter/README.md +83 -14
- package/docs/sui-flag/README.md +73 -8
- package/docs/sui-form-hint/README.md +56 -7
- package/docs/sui-form-label/README.md +57 -5
- package/docs/sui-href/README.md +47 -0
- package/docs/sui-icon/README.md +86 -18
- package/docs/sui-image-upload/README.md +90 -22
- package/docs/sui-image-upload-profile/README.md +70 -11
- package/docs/sui-img-retry/README.md +50 -1
- package/docs/sui-inline-input/README.md +67 -9
- package/docs/sui-inline-select/README.md +62 -2
- package/docs/sui-input/README.md +90 -27
- package/docs/sui-integration-switch/README.md +84 -17
- package/docs/sui-kbd/README.md +73 -9
- package/docs/sui-key-icon/README.md +85 -23
- package/docs/sui-link-button/README.md +96 -27
- package/docs/sui-logo/README.md +93 -22
- package/docs/sui-modal/README.md +72 -13
- package/docs/sui-modal-footer/README.md +86 -12
- package/docs/sui-modal-header/README.md +57 -1
- package/docs/sui-modal-sheet/README.md +74 -12
- package/docs/sui-notification/README.md +81 -11
- package/docs/sui-notification-footer/README.md +55 -5
- package/docs/sui-notification-tab-menu/README.md +61 -5
- package/docs/sui-otp-input/README.md +70 -9
- package/docs/sui-page-header/README.md +89 -19
- package/docs/sui-pagination/README.md +73 -13
- package/docs/sui-password-strength/README.md +50 -1
- package/docs/sui-payment-icon/README.md +80 -18
- package/docs/sui-period-range/README.md +70 -11
- package/docs/sui-popover/README.md +81 -15
- package/docs/sui-product-card/README.md +89 -21
- package/docs/sui-progress-bar/README.md +82 -15
- package/docs/sui-progress-bar-label/README.md +79 -18
- package/docs/sui-radio/README.md +84 -7
- package/docs/sui-radio-card/README.md +70 -16
- package/docs/sui-radio-label/README.md +89 -22
- package/docs/sui-rating/README.md +101 -31
- package/docs/sui-rich-editor/README.md +47 -2
- package/docs/sui-segmented-control/README.md +90 -21
- package/docs/sui-select/README.md +80 -11
- package/docs/sui-sidebar/README.md +71 -16
- package/docs/sui-slider/README.md +75 -8
- package/docs/sui-social-button/README.md +71 -11
- package/docs/sui-status-badge/README.md +75 -14
- package/docs/sui-stepper/README.md +75 -18
- package/docs/sui-store-card/README.md +85 -22
- package/docs/sui-switch/README.md +82 -11
- package/docs/sui-switch-card/README.md +80 -16
- package/docs/sui-switch-label/README.md +91 -14
- package/docs/sui-tab-chips/README.md +93 -21
- package/docs/sui-tab-menu-horizontal/README.md +68 -7
- package/docs/sui-tab-menu-vertical/README.md +64 -11
- package/docs/sui-table/README.md +77 -16
- package/docs/sui-tag/README.md +86 -12
- package/docs/sui-tag-input/README.md +77 -13
- package/docs/sui-textarea/README.md +84 -17
- package/docs/sui-time-picker/README.md +96 -33
- package/docs/sui-toast/README.md +81 -20
- package/docs/sui-tooltip/README.md +80 -22
- package/docs/sui-topbar/README.md +64 -10
- package/docs/sui-topbar-button/README.md +61 -7
- package/docs/sui-topbar-item/README.md +68 -7
- package/docs/sui-topbar-user/README.md +61 -5
- package/fesm2022/ajuarezso-sui-design-system.mjs +15 -10
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +7 -3
|
@@ -22,8 +22,8 @@ Story: [Molecules/Date & Time/Day Label](https://sui-design-system.web.app/?path
|
|
|
22
22
|
|
|
23
23
|
## Qué variante usar
|
|
24
24
|
|
|
25
|
-
> **La guía del DS no tiene página para este componente** (vive dentro del datepicker).
|
|
26
|
-
>
|
|
25
|
+
> **La guía del DS no tiene página para este componente** (vive dentro del datepicker). Las
|
|
26
|
+
> reglas marcadas canon están aprobadas; lo que sigue en propuesta espera decisión.
|
|
27
27
|
>
|
|
28
28
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos directos**. Lo usa por dentro
|
|
29
29
|
> `sui-datepicker`.
|
|
@@ -31,24 +31,35 @@ 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. |
|
|
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. |
|
|
34
|
+
| `label` | una letra | No usar: «M» es martes y miércoles a la vez. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
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. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
36
36
|
|
|
37
37
|
Usos de hoy que rompen la regla: **0**.
|
|
38
38
|
|
|
39
39
|
## Tamaño en mobile y en web
|
|
40
40
|
|
|
41
|
-
**No tiene `size`.** Mide 40 × 40, igual que `sui-day-cell`, para que las columnas calcen.
|
|
42
|
-
toca: el tamaño solo importa para alinear.
|
|
41
|
+
**No tiene `size`.** Mide 40 × 40, igual que `sui-day-cell` `medium`, para que las columnas calcen.
|
|
42
|
+
No se toca: el tamaño solo importa para alinear. Con `sui-day-cell` `large` (44) la columna ya no
|
|
43
|
+
calza sola: el `sui-datepicker` `xlarge` le pone `width: 44px` desde afuera, y un calendario armado a
|
|
44
|
+
mano tiene que hacer lo mismo.
|
|
43
45
|
|
|
44
46
|
| uso | mobile | web | fuente |
|
|
45
47
|
|---|---|---|---|
|
|
46
|
-
| cabecera de columna | 40 × 40 | 40 × 40 | medido |
|
|
48
|
+
| cabecera de columna | 40 × 40 (44 de ancho, desde afuera, si las celdas van en `large`) | 40 × 40 | medido · 44: `sui-datepicker.scss`, size `xlarge` |
|
|
47
49
|
|
|
48
50
|
```html
|
|
49
51
|
@for (d of ['LU','MA','MI','JU','VI','SÁ','DO']; track d) { <sui-day-label [label]="d" /> }
|
|
50
52
|
```
|
|
51
53
|
|
|
54
|
+
### Por dispositivo (D16)
|
|
55
|
+
|
|
56
|
+
No aplica: **no tiene `size`** y no se toca, así que no sube en ningún dispositivo. Lo único que
|
|
57
|
+
cambia es su ancho, que sigue al de la celda: 44 donde `sui-day-cell` va en `large` (celular chico,
|
|
58
|
+
celular y tablet táctil), 40 en la computadora. Fuente: D16, dueño 05-10-2026.
|
|
59
|
+
|
|
60
|
+
En master-pedidos: sin `[size]`; el ancho de 44 sale de la misma señal que la celda,
|
|
61
|
+
`bp.tactil()`.
|
|
62
|
+
|
|
52
63
|
## «No usar»: por qué no hoy y cuándo sí
|
|
53
64
|
|
|
54
65
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -74,6 +85,44 @@ Outputs: ninguno.
|
|
|
74
85
|
al lector de pantalla.
|
|
75
86
|
- Acepta cualquier texto, pero el ancho es fijo de 40 px: lo que no entra se corta.
|
|
76
87
|
|
|
88
|
+
## Bien y mal
|
|
89
|
+
|
|
90
|
+
La cabecera de la semana
|
|
91
|
+
|
|
92
|
+
```html
|
|
93
|
+
<!-- ❌ mal: «M» es martes y miércoles a la vez (canon B4) -->
|
|
94
|
+
@for (d of ['L','M','M','J','V','S','D']; track $index) { <sui-day-label [label]="d" /> }
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
<!-- ✅ bien -->
|
|
99
|
+
@for (d of ['LU','MA','MI','JU','VI','SÁ','DO']; track d) { <sui-day-label [label]="d" /> }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Elegir los días que abre el local
|
|
103
|
+
|
|
104
|
+
```html
|
|
105
|
+
<!-- ❌ mal: es solo texto (columnheader); no se toca ni se marca -->
|
|
106
|
+
@for (d of dias; track d.value) { <sui-day-label [label]="d.label" (click)="alternar(d)" /> }
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
```html
|
|
110
|
+
<!-- ✅ bien: size por D16 (celular `large`, o `medium` si los 7 no entran: P18, pendiente) -->
|
|
111
|
+
<sui-button-group [multi]="true" [items]="dias" [size]="bp.sizeControl()" [(value)]="diasAbiertos" />
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Cabecera sobre celdas de 44
|
|
115
|
+
|
|
116
|
+
```html
|
|
117
|
+
<!-- ❌ mal: la etiqueta mide 40 y la celda large 44; las columnas se corren -->
|
|
118
|
+
<sui-day-label label="LU" />
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<!-- ✅ bien: el mismo ancho que la celda, como hace el datepicker xlarge -->
|
|
123
|
+
<sui-day-label label="LU" [style.width.px]="bp.tactil() ? 44 : 40" [style.max-width.px]="bp.tactil() ? 44 : 40" />
|
|
124
|
+
```
|
|
125
|
+
|
|
77
126
|
## Ejemplo
|
|
78
127
|
|
|
79
128
|
```html
|
|
@@ -33,7 +33,7 @@ Story: [Atoms/Divider/Divider](https://sui-design-system.web.app/?path=/docs/ato
|
|
|
33
33
|
> espacio, línea con texto, texto, texto con fondo y contenido al centro). Su variante «Line»
|
|
34
34
|
> («una línea horizontal simple», la default) es este componente. La guía no trae la vertical ni
|
|
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
|
-
> ahí; el resto
|
|
36
|
+
> ahí; el resto quedó aprobado por el dueño (canon, 05-10-2026).
|
|
37
37
|
>
|
|
38
38
|
> Uso medido el 04-10-2026 en `master-pedidos/src/app`: **39 dividers en 14 archivos** (los 13 de
|
|
39
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`,
|
|
@@ -43,9 +43,11 @@ Story: [Atoms/Divider/Divider](https://sui-design-system.web.app/?path=/docs/ato
|
|
|
43
43
|
| orientation | cuándo | ejemplo real | fuente |
|
|
44
44
|
|---|---|---|---|
|
|
45
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
|
-
| `vertical` | Separa datos cortos en una sola fila. El padre necesita alto (si no, mide 16 px). | — (sin usos) |
|
|
46
|
+
| `vertical` | Separa datos cortos en una sola fila. El padre necesita alto (si no, mide 16 px). | — (sin usos) | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
47
47
|
|
|
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.
|
|
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. Quedan **dos líneas a mano** (medido el 06-10-2026):
|
|
49
|
+
`pages/driver/driver-dashboard/driver-dashboard.html:410` (`.dashboard__votaciones-sep`) y
|
|
50
|
+
`pages/customer/viaje/viaje.html:111` (`.vj__ruta-divisor`).
|
|
49
51
|
|
|
50
52
|
El «o» del login y del registro también pasó a `sui-content-divider type="text-line"`.
|
|
51
53
|
|
|
@@ -56,13 +58,22 @@ Nada: las dos orientaciones tienen caso. La vertical no tiene usos hoy, pero el
|
|
|
56
58
|
|
|
57
59
|
## Tamaño en mobile y en web
|
|
58
60
|
|
|
59
|
-
Criterio de la app: **
|
|
60
|
-
(
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
Criterio de la app: **D16, tamaño por dispositivo** (canon, dueño, 05-10-2026), que reemplaza al
|
|
62
|
+
«tamaño por plataforma» del 03-10-2026 (mobile grande, web chico). La columna «mobile» es el celular de
|
|
63
|
+
380 px o más y, en lo que se toca, también la tablet (`pointer: coarse`). La columna «web» es la
|
|
64
|
+
computadora (`pointer: fine`) y, en lo que no se toca, también la tablet. En el celular chico
|
|
65
|
+
(< 380 px) va `medium` a la vista, sin achicar el área de 44 de lo que se toca. **Nada en `small` ni
|
|
66
|
+
`xsmall`**, salvo lo que el componente solo tiene en chico. En la app, `BreakpointsService` ya
|
|
67
|
+
mira el puntero y los 380 px: `bp.tactil()` (celular o pantalla táctil), `bp.celular()` (380–767) y
|
|
68
|
+
`bp.celularChico()` (< 380).
|
|
63
69
|
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
### Por dispositivo (D16)
|
|
71
|
+
|
|
72
|
+
**No aplica**: no tiene `size` y es 1 px en todos los dispositivos (celular chico, celular, tablet
|
|
73
|
+
táctil, computadora y ultrawide). Lo que cambia es el `gap` del padre, que separa los bloques (la
|
|
74
|
+
regla de spacing de la app: 20/16/12 según el breakpoint). Fuente: D16, dueño 05-10-2026.
|
|
75
|
+
|
|
76
|
+
En master-pedidos: sin `[size]`.
|
|
66
77
|
|
|
67
78
|
## API
|
|
68
79
|
|
|
@@ -86,6 +97,50 @@ Outputs: ninguno.
|
|
|
86
97
|
- Lleva `role="separator"` y `aria-orientation`. Va **entre** filas (`@if (!last)`), no uno por
|
|
87
98
|
fila: el último sobra.
|
|
88
99
|
|
|
100
|
+
## Bien y mal
|
|
101
|
+
|
|
102
|
+
Separar dos bloques dentro de una card
|
|
103
|
+
|
|
104
|
+
```html
|
|
105
|
+
<!-- ❌ mal: línea hecha a mano (pages/driver/driver-dashboard/driver-dashboard.html:410, .scss:1527) -->
|
|
106
|
+
<div class="dashboard__votaciones-sep"></div>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
```html
|
|
110
|
+
<!-- ✅ bien: la línea la pone el divider; la clase se queda solo con el margin, como en checkout y carrito -->
|
|
111
|
+
<sui-divider class="dashboard__votaciones-sep" />
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Una línea entre las filas de una lista
|
|
115
|
+
|
|
116
|
+
```html
|
|
117
|
+
<!-- ❌ mal: uno por fila; el último sobra y queda pegado al borde (Trampas) -->
|
|
118
|
+
@for (f of filas; track f.id) {
|
|
119
|
+
<app-fila [fila]="f" />
|
|
120
|
+
<sui-divider />
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
```html
|
|
125
|
+
<!-- ✅ bien -->
|
|
126
|
+
@for (f of filas; track f.id; let last = $last) {
|
|
127
|
+
<app-fila [fila]="f" />
|
|
128
|
+
@if (!last) { <sui-divider /> }
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Datos en una fila
|
|
133
|
+
|
|
134
|
+
```html
|
|
135
|
+
<!-- ❌ mal: el padre no tiene alto ni centra; la línea queda de 16 px y descolgada (Trampas) -->
|
|
136
|
+
<div><span>4.7</span><sui-divider orientation="vertical" /><span>25–35 min</span></div>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```html
|
|
140
|
+
<!-- ✅ bien: .meta { display: flex; align-items: center; height: 20px; gap: 8px } -->
|
|
141
|
+
<div class="meta"><span>4.7</span><sui-divider orientation="vertical" /><span>25–35 min</span></div>
|
|
142
|
+
```
|
|
143
|
+
|
|
89
144
|
## Ejemplo
|
|
90
145
|
|
|
91
146
|
```html
|
|
@@ -69,14 +69,32 @@ El `size` cambia **los botones** (escala del `sui-button`):
|
|
|
69
69
|
|
|
70
70
|
| uso | mobile | web | fuente |
|
|
71
71
|
|---|---|---|---|
|
|
72
|
-
| pie de un drawer | `large` (48) | `medium` (40) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
|
|
72
|
+
| pie de un drawer | `large` (48), también en la tablet táctil | `medium` (40) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · tablet: D16, dueño 05-10-2026 |
|
|
73
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) |
|
|
74
74
|
|
|
75
75
|
```html
|
|
76
|
-
<sui-drawer-footer type="stretch" [size]="bp.
|
|
76
|
+
<sui-drawer-footer type="stretch" [size]="bp.sizeControl()"
|
|
77
77
|
(primaryClick)="guardar()" (secondaryClick)="cancelar()" />
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
+
### Por dispositivo (D16)
|
|
81
|
+
|
|
82
|
+
No está en la tabla por componente de D16: son botones, así que va con **lo que se toca** (la fila
|
|
83
|
+
de `button`). El `size` del pie es el de sus dos botones.
|
|
84
|
+
|
|
85
|
+
| dispositivo | size | nota |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| celular chico (< 380) | `large` (48) | D16 pide `medium` con área tocable de 44; mientras el DS no estire el área de los `medium`, va `large` (interino) |
|
|
88
|
+
| celular (380–767) | `large` (48) | |
|
|
89
|
+
| tablet táctil (`pointer: coarse`) | `large` (48) | se toca con el dedo: Apple pide 44 pt también en el iPad |
|
|
90
|
+
| computadora (`pointer: fine`) | `medium` (40) | |
|
|
91
|
+
|
|
92
|
+
Ultrawide (≥ 1920 px): igual que la computadora, `medium`; el espacio extra va a ancho, no a botones
|
|
93
|
+
más grandes.
|
|
94
|
+
|
|
95
|
+
En master-pedidos: `[size]="bp.sizeControl()"` (da `large` o `medium`, los dos sizes que tiene el pie).
|
|
96
|
+
Igual, el par de botones va en `sui-modal-footer` (ver arriba), cuyo canon es `large` siempre (D2).
|
|
97
|
+
|
|
80
98
|
## «No usar»: por qué no hoy y cuándo sí
|
|
81
99
|
|
|
82
100
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -130,6 +148,49 @@ interface SuiFooterButtonConfig { label: string; disabled?: boolean; color?: 'pr
|
|
|
130
148
|
- `checkboxActive` y `toggleActive` son `model`: `[(checkboxActive)]`.
|
|
131
149
|
- El borde de arriba ya viene puesto: no le sumes otro.
|
|
132
150
|
|
|
151
|
+
## Bien y mal
|
|
152
|
+
|
|
153
|
+
**Pie de un modal**
|
|
154
|
+
|
|
155
|
+
```html
|
|
156
|
+
<!-- ❌ mal: el par de botones de un modal es de sui-modal-footer (canon de botones, 27-07-2026) -->
|
|
157
|
+
<sui-drawer-footer type="basic" primaryButton="Guardar"
|
|
158
|
+
(primaryClick)="guardar()" (secondaryClick)="cerrar()" />
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
```html
|
|
162
|
+
<!-- ✅ bien -->
|
|
163
|
+
<sui-modal-footer secondaryButton="Cancelar" [primaryButton]="{ label: 'Guardar' }"
|
|
164
|
+
(secondaryClick)="cerrar()" (primaryClick)="guardar()" />
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Confirmar algo destructivo**
|
|
168
|
+
|
|
169
|
+
```html
|
|
170
|
+
<!-- ❌ mal: el drawer-footer ignora `color: 'error'`; el «Eliminar» sale naranja -->
|
|
171
|
+
<sui-drawer-footer type="basic" [primaryButton]="{ label: 'Eliminar', color: 'error' }"
|
|
172
|
+
(primaryClick)="eliminar()" (secondaryClick)="cerrar()" />
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```html
|
|
176
|
+
<!-- ✅ bien -->
|
|
177
|
+
<sui-modal-footer secondaryButton="Cancelar" [primaryButton]="{ label: 'Eliminar', color: 'error' }"
|
|
178
|
+
(secondaryClick)="cerrar()" (primaryClick)="eliminar()" />
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Un solo botón**
|
|
182
|
+
|
|
183
|
+
```html
|
|
184
|
+
<!-- ❌ mal: sin `secondaryButton` aparece un «Cancelar» que nadie pidió (es el default) -->
|
|
185
|
+
<sui-drawer-footer type="basic" primaryButton="Entendido" (primaryClick)="cerrar()" />
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
```html
|
|
189
|
+
<!-- ✅ bien -->
|
|
190
|
+
<sui-drawer-footer type="basic" primaryButton="Entendido" [secondaryButton]="null"
|
|
191
|
+
[size]="bp.sizeControl()" (primaryClick)="cerrar()" />
|
|
192
|
+
```
|
|
193
|
+
|
|
133
194
|
## Ejemplo
|
|
134
195
|
|
|
135
196
|
```html
|
|
@@ -37,27 +37,27 @@ Regla corta: **modal o sheet → sui-modal con title · panel lateral de web →
|
|
|
37
37
|
|
|
38
38
|
| type | cuándo | fuente |
|
|
39
39
|
|---|---|---|
|
|
40
|
-
| `basic` (default) | Lo normal: título y cerrar. |
|
|
41
|
-
| `left-icon` | El ícono dice de qué es el panel antes de leer («history-line» en el historial). En `small` va suelto (24); en `large`/`xlarge`, en un círculo con borde. |
|
|
40
|
+
| `basic` (default) | Lo normal: título y cerrar. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
41
|
+
| `left-icon` | El ícono dice de qué es el panel antes de leer («history-line» en el historial). En `small` va suelto (24); en `large`/`xlarge`, en un círculo con borde. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
42
42
|
|
|
43
43
|
### `size`
|
|
44
44
|
|
|
45
45
|
| size | qué cambia | cuándo | fuente |
|
|
46
46
|
|---|---|---|---|
|
|
47
|
-
| `small` (default) | 64 px, todo en una línea; **no muestra `description`** | Panel con título que se explica solo. Es el único que admite `link`. |
|
|
48
|
-
| `large` | 88 px, título arriba y `description` debajo | Panel que necesita una línea de contexto («Últimos 30 días»). |
|
|
49
|
-
| `xlarge` | padding 24, título 20, descripción 16 | No: extensión de SUI sin caso; en web no hace falta letra más grande. |
|
|
47
|
+
| `small` (default) | 64 px, todo en una línea; **no muestra `description`** | Panel con título que se explica solo. Es el único que admite `link`. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
48
|
+
| `large` | 88 px, título arriba y `description` debajo | Panel que necesita una línea de contexto («Últimos 30 días»). | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
49
|
+
| `xlarge` | padding 24, título 20, descripción 16 | No: extensión de SUI sin caso; en web no hace falta letra más grande. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
50
50
|
|
|
51
51
|
### Lo demás
|
|
52
52
|
|
|
53
53
|
| input | valor | cuándo | fuente |
|
|
54
54
|
|---|---|---|---|
|
|
55
55
|
| `showDismiss` | `true` (default) | Siempre. | según la guía del DS (cerrar visible por default) |
|
|
56
|
-
| `showDismiss` | `false` | Solo si el panel no se puede cerrar sin decidir (y entonces es un modal, no un drawer). |
|
|
57
|
-
| `showDivider` | `true` | Cuando el cuerpo scrollea por debajo de la cabecera. |
|
|
56
|
+
| `showDismiss` | `false` | Solo si el panel no se puede cerrar sin decidir (y entonces es un modal, no un drawer). | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
57
|
+
| `showDivider` | `true` | Cuando el cuerpo scrollea por debajo de la cabecera. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
58
58
|
| `badge` | número | Pendientes dentro del panel (círculo rojo). | propuesta, falta aprobación |
|
|
59
|
-
| `badge` | texto o `SuiBadgeConfig` | Un estado o etiqueta al lado del título. Pasa `variant: 'lighter'`:
|
|
60
|
-
| `link` | texto | Una acción menor en la cabecera («Ver todo»). Solo en `small`. |
|
|
59
|
+
| `badge` | texto o `SuiBadgeConfig` | Un estado o etiqueta al lado del título. Pasa `variant: 'lighter'` y `size: 'medium'`: los defaults de aquí son `light` y `small` (ver Trampas). | canon (README de `sui-badge`: `lighter` en cabeceras) |
|
|
60
|
+
| `link` | texto | Una acción menor en la cabecera («Ver todo»). Solo en `small`. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
61
61
|
| `dismissAriaLabel` | «Cerrar» (default) | Ya está en español. | según el código |
|
|
62
62
|
|
|
63
63
|
Usos de hoy que rompen las reglas: **0** (no se usa).
|
|
@@ -69,7 +69,7 @@ los 40-44 del dedo. Es una pieza de web.
|
|
|
69
69
|
|
|
70
70
|
| uso | mobile | web | fuente |
|
|
71
71
|
|---|---|---|---|
|
|
72
|
-
| cabecera de panel | no se usa: `sui-modal` fullscreen con `title` | `small` o `large` |
|
|
72
|
+
| cabecera de panel | no se usa: `sui-modal` fullscreen con `title` | `small` o `large` | canon (aprobado por el dueño, 05-10-2026, bloque B7) |
|
|
73
73
|
|
|
74
74
|
```html
|
|
75
75
|
@if (!bp.isMobile()) {
|
|
@@ -77,6 +77,18 @@ los 40-44 del dedo. Es una pieza de web.
|
|
|
77
77
|
}
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
+
### Por dispositivo (D16)
|
|
81
|
+
|
|
82
|
+
No aplica: su `size` no depende del dispositivo sino del contenido (`large` cuando hay `description`,
|
|
83
|
+
`small` cuando el título se explica solo), y la X de cerrar es un `sui-compact-button` `large` fijo
|
|
84
|
+
(24 px) que el `size` de la cabecera no mueve. En el celular chico y en el celular no se usa (el
|
|
85
|
+
panel es un `sui-modal` fullscreen); en la computadora y el ultrawide va `small` o `large` según el
|
|
86
|
+
contenido. En la tablet táctil con 768 px o más el panel sí se mostraría y la X de 24 no llega al
|
|
87
|
+
piso de 44: ningún size lo arregla y queda **sin decidir**.
|
|
88
|
+
|
|
89
|
+
En master-pedidos: sin helper; `@if (!bp.isMobile())` alrededor y `size="large"` solo si lleva
|
|
90
|
+
`description`.
|
|
91
|
+
|
|
80
92
|
## «No usar»: por qué no hoy y cuándo sí
|
|
81
93
|
|
|
82
94
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -119,13 +131,58 @@ type SuiDrawerHeaderSize = 'small' | 'large' | 'xlarge';
|
|
|
119
131
|
|
|
120
132
|
- **`description` no se ve en `small`** y **`link` no se ve en `large`/`xlarge`**: los dos se pasan
|
|
121
133
|
sin error y no aparecen.
|
|
122
|
-
- **El badge de texto sale `orange` + `light` por default**, que va contra el canon del badge
|
|
123
|
-
(`lighter` en cabeceras, naranja solo si pide atención)
|
|
134
|
+
- **El badge de texto sale `orange` + `light` + `small` por default**, que va contra el canon del badge
|
|
135
|
+
(`lighter` en cabeceras, naranja solo si pide atención) y contra D16 (`medium` en la computadora;
|
|
136
|
+
`small` no se usa). Pasa un `SuiBadgeConfig` completo, con `size: 'medium'`. Un `SuiBadgeConfig`
|
|
137
|
+
sin `size` también cae en `small` (`bcfg.size ?? 'small'` en el template).
|
|
124
138
|
- **`badge` en `0` sí se dibuja** (un círculo rojo con «0»). Pasa `null` para no mostrarlo.
|
|
125
139
|
- **`left-icon` sin `icon` no dibuja nada.**
|
|
126
140
|
- El título es un `<h2>`: si la página ya tiene un `h2` al mismo nivel, revisa el orden de títulos.
|
|
127
141
|
- No hay contenedor: el fondo, el ancho y la animación del panel los pones tú.
|
|
128
142
|
|
|
143
|
+
## Bien y mal
|
|
144
|
+
|
|
145
|
+
**Cabecera de un modal**
|
|
146
|
+
|
|
147
|
+
```html
|
|
148
|
+
<!-- ❌ mal: el modal ya trae su cabecera; el drawer-header es para un panel lateral de web -->
|
|
149
|
+
<sui-modal [(open)]="abierto" [fullscreen]="true">
|
|
150
|
+
<sui-drawer-header title="Editar producto" (dismiss)="abierto.set(false)" />
|
|
151
|
+
</sui-modal>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
```html
|
|
155
|
+
<!-- ✅ bien -->
|
|
156
|
+
<sui-modal [(open)]="abierto" [fullscreen]="true" title="Editar producto"
|
|
157
|
+
description="Los cambios se ven en la carta" />
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Estado al lado del título**
|
|
161
|
+
|
|
162
|
+
```html
|
|
163
|
+
<!-- ❌ mal: el texto suelto sale `orange` + `light`, contra el canon del badge (ver Trampas) -->
|
|
164
|
+
<sui-drawer-header title="Sabores Andinos" badge="Abierto" (dismiss)="cerrar()" />
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
```html
|
|
168
|
+
<!-- ✅ bien: config completa; sin `size` el badge cae en `small` y D16 pide `medium` en la computadora -->
|
|
169
|
+
<sui-drawer-header title="Sabores Andinos" (dismiss)="cerrar()"
|
|
170
|
+
[badge]="{ label: 'Abierto', color: 'green', variant: 'lighter', size: 'medium' }" />
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Línea de contexto**
|
|
174
|
+
|
|
175
|
+
```html
|
|
176
|
+
<!-- ❌ mal: con el `small` del default la `description` no se ve, y no avisa -->
|
|
177
|
+
<sui-drawer-header title="Historial de pedidos" description="Últimos 30 días" (dismiss)="cerrar()" />
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
```html
|
|
181
|
+
<!-- ✅ bien -->
|
|
182
|
+
<sui-drawer-header size="large" title="Historial de pedidos" description="Últimos 30 días"
|
|
183
|
+
(dismiss)="cerrar()" />
|
|
184
|
+
```
|
|
185
|
+
|
|
129
186
|
## Ejemplo
|
|
130
187
|
|
|
131
188
|
```html
|
|
@@ -32,8 +32,8 @@ form-hint.**
|
|
|
32
32
|
## Qué variante usar
|
|
33
33
|
|
|
34
34
|
> **La guía del DS no tiene una pieza «caption»** en su dropdown: tiene etiqueta de grupo y
|
|
35
|
-
> separador. La caption sale del Figma del DS («Dropdown Misc Items»).
|
|
36
|
-
> **propuesta
|
|
35
|
+
> separador. La caption sale del Figma del DS («Dropdown Misc Items»). Todas las reglas de abajo
|
|
36
|
+
> son **canon**: lo que estaba en propuesta lo aprobó el dueño el 05-10-2026.
|
|
37
37
|
>
|
|
38
38
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-dropdown-menu`):
|
|
39
39
|
> **0 usos**.
|
|
@@ -42,9 +42,9 @@ No tiene variantes. Lo único que se decide es el texto:
|
|
|
42
42
|
|
|
43
43
|
| qué | regla | fuente |
|
|
44
44
|
|---|---|---|
|
|
45
|
-
| largo | Una línea; si no entra, corta palabra y salta de línea (`word-break: break-word`). |
|
|
45
|
+
| largo | Una línea; si no entra, corta palabra y salta de línea (`word-break: break-word`). | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
46
46
|
| copy | Sentence case, con punto solo si son dos frases. Tuteo: «Presiona Enter para agregar». | canon (CANON-SUI §5, `docs/VOZ-Y-ESCRITURA.md`) |
|
|
47
|
-
| posición | Al final del panel, después del último item. |
|
|
47
|
+
| posición | Al final del panel, después del último item. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
48
48
|
|
|
49
49
|
**Candidatos de hoy:** las cabeceras de grupo a mano del switcher del sidebar
|
|
50
50
|
(`components/sidebar/sidebar.html:67`, `:88`, `:104`) **no** son caption: son cabeceras de grupo y van
|
|
@@ -57,7 +57,15 @@ de 44 px del dedo.
|
|
|
57
57
|
|
|
58
58
|
| uso | mobile | web | fuente |
|
|
59
59
|
|---|---|---|---|
|
|
60
|
-
| pie de un menú | igual (14/20) | igual (14/20) |
|
|
60
|
+
| pie de un menú | igual (14/20) | igual (14/20) | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
61
|
+
|
|
62
|
+
### Por dispositivo (D16)
|
|
63
|
+
|
|
64
|
+
No aplica: no tiene input `size` y no se toca, así que mide 14/20 con 8 px de padding en todo
|
|
65
|
+
dispositivo (celular chico, celular, tablet táctil, computadora y ultrawide). El que crece en lo
|
|
66
|
+
táctil es el `sui-dropdown-item` de al lado, no la caption.
|
|
67
|
+
|
|
68
|
+
En master-pedidos: sin `[size]` ni helper.
|
|
61
69
|
|
|
62
70
|
## API
|
|
63
71
|
|
|
@@ -79,13 +87,57 @@ Slot: el contenido por defecto (`<ng-content />`) es el texto.
|
|
|
79
87
|
la caja.
|
|
80
88
|
- No lleva `role`: el lector de pantalla lo lee como texto suelto dentro del menú.
|
|
81
89
|
|
|
90
|
+
## Bien y mal
|
|
91
|
+
|
|
92
|
+
**Cabecera de un grupo**
|
|
93
|
+
|
|
94
|
+
```html
|
|
95
|
+
<!-- ❌ mal: la caption es gris claro y va al pie; no titula un grupo -->
|
|
96
|
+
<sui-dropdown-caption>Negocios</sui-dropdown-caption>
|
|
97
|
+
@for (t of negocios(); track t.id) { <sui-dropdown-item [label]="t.name" mode="option" size="large" /> }
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
```html
|
|
101
|
+
<!-- ✅ bien (lo mismo para los <span> a mano de sidebar.html:67, :88 y :104) -->
|
|
102
|
+
<sui-content-divider type="text" text="Negocios" />
|
|
103
|
+
@for (t of negocios(); track t.id) { <sui-dropdown-item [label]="t.name" mode="option" size="large" /> }
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Un dato que ayuda a elegir**
|
|
107
|
+
|
|
108
|
+
```html
|
|
109
|
+
<!-- ❌ mal: `soft-400` es el gris de los metadatos; lo que decide la elección no va aquí -->
|
|
110
|
+
<sui-dropdown-item label="Recojo en tienda" size="large" />
|
|
111
|
+
<sui-dropdown-caption>El recojo está listo en 20 min</sui-dropdown-caption>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
```html
|
|
115
|
+
<!-- ✅ bien -->
|
|
116
|
+
<sui-dropdown-item label="Recojo en tienda" description="Listo en 20 min" size="large" />
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Dónde va**
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<!-- ❌ mal: arriba del todo, empuja los items y se lee antes que ellos -->
|
|
123
|
+
<sui-dropdown-caption>Presiona Enter para agregar</sui-dropdown-caption>
|
|
124
|
+
<sui-dropdown-search [(value)]="busqueda" placeholder="Buscar etiqueta…" />
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
```html
|
|
128
|
+
<!-- ✅ bien: al final del panel, después del último item -->
|
|
129
|
+
<sui-dropdown-search [(value)]="busqueda" placeholder="Buscar etiqueta…" />
|
|
130
|
+
@for (e of etiquetas(); track e) { <sui-dropdown-item [label]="e" size="large" /> }
|
|
131
|
+
<sui-dropdown-caption>Presiona Enter para agregar</sui-dropdown-caption>
|
|
132
|
+
```
|
|
133
|
+
|
|
82
134
|
## Ejemplo
|
|
83
135
|
|
|
84
136
|
```html
|
|
85
137
|
<ng-template suiDropdownPanel>
|
|
86
138
|
<sui-dropdown-search [(value)]="busqueda" placeholder="Buscar etiqueta…" />
|
|
87
139
|
@for (e of etiquetasFiltradas(); track e) {
|
|
88
|
-
<sui-dropdown-item [label]="e" (clicked)="menu.close(); elegir(e)" />
|
|
140
|
+
<sui-dropdown-item [label]="e" size="large" (clicked)="menu.close(); elegir(e)" />
|
|
89
141
|
}
|
|
90
142
|
<sui-dropdown-caption>Presiona Enter para crear «{{ busqueda() }}»</sui-dropdown-caption>
|
|
91
143
|
</ng-template>
|
|
@@ -46,15 +46,15 @@ dropdown, select y command menu en el README de `sui-dropdown-menu`.
|
|
|
46
46
|
|
|
47
47
|
| mode | cuándo | ejemplo real de la app | fuente |
|
|
48
48
|
|---|---|---|---|
|
|
49
|
-
| `menuitem` (default) | La fila **hace algo**: editar, archivar, ir a otra pantalla. `selected` no pinta nada. | `option-sections-manager.html:40` («Editar») |
|
|
49
|
+
| `menuitem` (default) | La fila **hace algo**: editar, archivar, ir a otra pantalla. `selected` no pinta nada. | `option-sections-manager.html:40` («Editar») | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
50
50
|
| `option` | La fila **es un valor** y el elegido queda marcado (fondo `primary-alpha-10` + check a la derecha). El contenedor lleva `role="listbox"`. | `sidebar.html:69` (el negocio actual) | propuesta (ya es práctica) |
|
|
51
51
|
|
|
52
52
|
### `size`
|
|
53
53
|
|
|
54
54
|
| size | alto | cuándo | fuente |
|
|
55
55
|
|---|---|---|---|
|
|
56
|
-
| `small` (default) | 36 |
|
|
57
|
-
| `large` | 56 | Toda fila en mobile; en web, cuando hay segunda línea (`description`) o el ícono va enmarcado. | según la guía del DS (Figma: Large 56); el cuándo
|
|
56
|
+
| `small` (default) | 36 | Fila de una línea (label + `sublabel` en la misma línea). En lo táctil no va (36 < 44); en la computadora está **pendiente** (D16, nota ⁵). | según la guía del DS (Figma: Small 36) · táctil y computadora: D16, dueño 05-10-2026 |
|
|
57
|
+
| `large` | 56 | Toda fila en mobile; en web, cuando hay segunda línea (`description`) o el ícono va enmarcado. | según la guía del DS (Figma: Large 56) · toda fila en mobile: canon (decisión del dueño 04-10-2026, piso táctil 44); es el primer size ≥ 44, no hay 44 · el cuándo en web: propuesta |
|
|
58
58
|
| `xlarge` | 76 | Extensión SUI. Sin uso hoy. | — |
|
|
59
59
|
|
|
60
60
|
### Las piezas
|
|
@@ -68,7 +68,7 @@ dropdown, select y command menu en el README de `sui-dropdown-menu`.
|
|
|
68
68
|
| `shortcut` | Solo web (en mobile no hay teclado físico, ver README de `sui-kbd`). | canon (README de `sui-kbd`) |
|
|
69
69
|
| `slot="trailing"` | Badge primero, después el atajo (lo pone el componente), al final un switch o botón. | según la guía del DS (orden del Figma) |
|
|
70
70
|
| `disabled` | Existe pero hoy no se puede: queda gris claro y no recibe toques. | según la guía del DS |
|
|
71
|
-
| `highlighted` | Lo usa el select para la navegación con flechas. A mano no hace falta. |
|
|
71
|
+
| `highlighted` | Lo usa el select para la navegación con flechas. A mano no hace falta. | según el código |
|
|
72
72
|
|
|
73
73
|
**Usos de hoy que romperían la propuesta:**
|
|
74
74
|
|
|
@@ -90,18 +90,41 @@ celular: queda debajo de los 44 del dedo.
|
|
|
90
90
|
|
|
91
91
|
| uso | mobile | web | fuente |
|
|
92
92
|
|---|---|---|---|
|
|
93
|
-
| menú de acciones (⋮) | `large` (56) | `
|
|
94
|
-
| switcher con segunda línea (negocio + dirección) | `large` (56) | `large` (56) |
|
|
93
|
+
| menú de acciones (⋮) | `large` (56), también en la tablet táctil | **pendiente** (ver D16 abajo); hoy la app va en `large` en los 10 usos | mobile: canon (decisión del dueño 04-10-2026, piso táctil 44); `large` es el primer size ≥ 44, no hay 44 · tablet y web: D16, dueño 05-10-2026 (antes decía `small` como propuesta) |
|
|
94
|
+
| switcher con segunda línea (negocio + dirección) | `large` (56), también en la tablet táctil | `large` (56) mientras lleve `description`: en `small` no se ve | mobile: canon (decisión del dueño 04-10-2026, piso táctil 44) · tablet: D16, dueño 05-10-2026 · web: según el código (`description` solo en `large`) |
|
|
95
95
|
| opciones de un select | las pone el select (44) | las pone el select (36–48) | canon (README de `sui-select`, aprobado 03-10-2026) |
|
|
96
96
|
|
|
97
97
|
```html
|
|
98
|
-
|
|
98
|
+
<!-- `large` fijo mientras la computadora siga pendiente (D16, nota ⁵): es lo que ya hace la app en los 10 usos -->
|
|
99
|
+
<sui-dropdown-item label="Editar" size="large" … />
|
|
99
100
|
```
|
|
100
101
|
|
|
101
102
|
En large y xlarge el texto sube a 16 px (regla del 03-10-2026). El label va en Label/Medium 16/24
|
|
102
103
|
(el nodo de Figma del large lo dibuja en 14); la description no cambia en large (12) y el alto
|
|
103
104
|
sigue en 56: el padding-y bajó de 8 a 6.
|
|
104
105
|
|
|
106
|
+
### Por dispositivo (D16)
|
|
107
|
+
|
|
108
|
+
Está en la tabla por componente de D16 (dueño, 05-10-2026). Se toca, así que la tablet va con el
|
|
109
|
+
celular. En la computadora D16 lo deja **pendiente** (nota ⁵): no hay `medium`, y `small` (36) y
|
|
110
|
+
`large` (56) no son la misma fila más chica o más grande, porque la `description` solo se ve en
|
|
111
|
+
`large`; elegir uno cambia qué se lee.
|
|
112
|
+
|
|
113
|
+
| dispositivo | size | nota |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| celular chico (< 380) | `large` (56) | D16 deja la celda vacía; `large` es el único size ≥ 44 y es lo que ya da `bp.tactil()` |
|
|
116
|
+
| celular (380–767) | `large` (56) | el primer size ≥ 44 |
|
|
117
|
+
| tablet táctil (`pointer: coarse`) | `large` (56) | Apple pide 44 pt también en el iPad |
|
|
118
|
+
| computadora (`pointer: fine`) | **pendiente** | falta decidir (D16, nota ⁵) entre `small` (36, sin `description`) y `large` (56); hoy la app va en `large` en los 10 usos, y con `description` o `leadingFramed` solo sirve `large` |
|
|
119
|
+
|
|
120
|
+
Ultrawide: igual que la computadora.
|
|
121
|
+
|
|
122
|
+
En master-pedidos: no hay helper. Mientras la computadora siga pendiente, `size="large"` fijo en todo
|
|
123
|
+
dispositivo (lo que ya hace la app en los 10 usos); no es la decisión de la celda pendiente, es no bajar
|
|
124
|
+
de 44 en lo táctil sin elegir por la computadora. Cuando se decida, si la computadora queda en otro
|
|
125
|
+
size: `[size]="bp.tactil() ? 'large' : '<ese size>'"`. Con `description` o `leadingFramed`:
|
|
126
|
+
`size="large"` siempre.
|
|
127
|
+
|
|
105
128
|
## API
|
|
106
129
|
|
|
107
130
|
<!-- api:inicio -->
|
|
@@ -146,11 +169,54 @@ está `disabled`.
|
|
|
146
169
|
- El label corta con `…` en una línea: no hace salto de línea.
|
|
147
170
|
- Ya trae los listeners `touchstart`/`touchend` para el `:active` pegado de iOS.
|
|
148
171
|
|
|
172
|
+
## Bien y mal
|
|
173
|
+
|
|
174
|
+
**Segunda línea en `large`**
|
|
175
|
+
|
|
176
|
+
```html
|
|
177
|
+
<!-- ❌ mal: en `large` el sublabel cae abajo en gris claro (sidebar.html:71; igual en customer-layout.html:27, driver-layout.html:25 y master-layout.html:27) -->
|
|
178
|
+
<sui-dropdown-item [label]="t.name" [sublabel]="t.address ?? ''" mode="option" size="large" />
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
```html
|
|
182
|
+
<!-- ✅ bien -->
|
|
183
|
+
<sui-dropdown-item [label]="t.name" [description]="t.address ?? null" mode="option" size="large" />
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Ícono enmarcado**
|
|
187
|
+
|
|
188
|
+
```html
|
|
189
|
+
<!-- ❌ mal: el círculo está medido para 20; con 18 queda de 38 (option-sections-manager.html:41, :44, :47) -->
|
|
190
|
+
<sui-dropdown-item label="Editar" size="large" [leadingFramed]="true" (clicked)="menu.close(); openEdit(s)">
|
|
191
|
+
<sui-icon slot="leading" name="pencil-line" [size]="18" />
|
|
192
|
+
</sui-dropdown-item>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
```html
|
|
196
|
+
<!-- ✅ bien -->
|
|
197
|
+
<sui-dropdown-item label="Editar" size="large" [leadingFramed]="true" (clicked)="menu.close(); openEdit(s)">
|
|
198
|
+
<sui-icon slot="leading" name="pencil-line" [size]="20" />
|
|
199
|
+
</sui-dropdown-item>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Cerrar el menú**
|
|
203
|
+
|
|
204
|
+
```html
|
|
205
|
+
<!-- ❌ mal: el item no cierra el menú; el panel queda abierto después de archivar -->
|
|
206
|
+
<sui-dropdown-item label="Archivar" size="large" (clicked)="archivar()" />
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
```html
|
|
210
|
+
<!-- ✅ bien -->
|
|
211
|
+
<sui-dropdown-item label="Archivar" size="large"
|
|
212
|
+
(clicked)="menu.close(); archivar()" />
|
|
213
|
+
```
|
|
214
|
+
|
|
149
215
|
## Ejemplo
|
|
150
216
|
|
|
151
217
|
```html
|
|
152
|
-
<!-- Acción en un menú -->
|
|
153
|
-
<sui-dropdown-item label="Archivar"
|
|
218
|
+
<!-- Acción en un menú (`large` fijo mientras la computadora siga pendiente) -->
|
|
219
|
+
<sui-dropdown-item label="Archivar" size="large"
|
|
154
220
|
(clicked)="menu.close(); archivar()">
|
|
155
221
|
<sui-icon slot="leading" name="archive-line" [size]="20" />
|
|
156
222
|
</sui-dropdown-item>
|