@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.
- package/docs/INDEX.md +30 -35
- package/docs/sui-accordion/README.md +171 -0
- package/docs/sui-activity-feed/README.md +154 -0
- package/docs/sui-activity-filter/README.md +100 -0
- 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 +64 -21
- 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 +100 -0
- package/docs/sui-command-menu-item/README.md +140 -0
- package/docs/sui-command-menu-search/README.md +105 -0
- 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 +12 -5
- package/docs/sui-compact-select-for-input/README.md +5 -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 +21 -17
- package/docs/sui-date-selector/README.md +16 -12
- package/docs/sui-datepicker/README.md +46 -28
- 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-caption/README.md +92 -0
- package/docs/sui-dropdown-item/README.md +163 -0
- package/docs/sui-dropdown-menu/README.md +196 -0
- package/docs/sui-dropdown-search/README.md +113 -0
- 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 +181 -0
- 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-href/README.md +85 -0
- package/docs/sui-icon/README.md +4 -3
- package/docs/sui-image-upload/README.md +28 -16
- package/docs/sui-img-retry/README.md +107 -0
- package/docs/sui-inline-input/README.md +7 -6
- package/docs/sui-inline-select/README.md +8 -5
- package/docs/sui-input/README.md +27 -33
- 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/README.md +238 -0
- package/docs/sui-modal-footer/README.md +178 -0
- package/docs/sui-modal-header/README.md +115 -0
- package/docs/sui-modal-sheet/README.md +170 -0
- 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-page-header/README.md +123 -0
- 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 +33 -19
- package/docs/sui-select/README.md +40 -33
- package/docs/sui-sidebar/README.md +216 -0
- 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 +25 -11
- package/docs/sui-tab-chips/README.md +56 -39
- package/docs/sui-tab-menu-horizontal/README.md +19 -11
- package/docs/sui-tab-menu-vertical/README.md +10 -5
- package/docs/sui-table/README.md +264 -0
- package/docs/sui-tag/README.md +25 -11
- package/docs/sui-tag-input/README.md +25 -12
- package/docs/sui-textarea/README.md +23 -20
- package/docs/sui-time-picker/README.md +39 -30
- package/docs/sui-toast/README.md +27 -22
- package/docs/sui-tooltip/README.md +14 -17
- package/docs/sui-topbar/README.md +153 -0
- package/docs/sui-topbar-button/README.md +95 -0
- package/docs/sui-topbar-item/README.md +97 -0
- package/docs/sui-topbar-user/README.md +83 -0
- package/fesm2022/ajuarezso-sui-design-system.mjs +1076 -242
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +616 -280
|
@@ -51,18 +51,28 @@ Regla corta: **color libre que se guarda → color-picker · una de N categoría
|
|
|
51
51
|
**Usos de hoy que rompen la regla:**
|
|
52
52
|
|
|
53
53
|
- **1 nativo → `sui-color-picker` con `[alpha]="false"`:**
|
|
54
|
-
`components/add-product-modal/add-product-modal.html:
|
|
54
|
+
`components/add-product-modal/add-product-modal.html:302` (color de cada opción cuando el grupo
|
|
55
55
|
se muestra «como colores»; guarda `swatchHex` de 6 caracteres).
|
|
56
56
|
|
|
57
57
|
## Tamaño en mobile y en web
|
|
58
58
|
|
|
59
|
-
|
|
|
60
|
-
|
|
61
|
-
|
|
|
59
|
+
| size | botón que abre el panel | puntos del panel | fuente |
|
|
60
|
+
|---|---|---|---|
|
|
61
|
+
| `medium` (default) | 38 (6 + 24 del punto + 6, más 2 de borde), texto 14 | 24, separados 4 | Figma |
|
|
62
|
+
| `large` | 44 (9 + 24 + 9 + 2), texto 16 | 32 (`sui-color-dot` `large`), separados 12: paso de 44 entre centros, 5 por fila | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono. Size nuevo del 04-10-2026 |
|
|
63
|
+
|
|
64
|
+
| uso | mobile | web | fuente |
|
|
65
|
+
|---|---|---|---|
|
|
66
|
+
| color picker | `large` | `medium` | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<sui-color-picker [size]="bp.isMobile() ? 'large' : 'medium'" [(value)]="color" />
|
|
70
|
+
```
|
|
62
71
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
72
|
+
Los puntos se **ven y se tocan** de 32: el dibujo de `sui-color-dot` usa sus dos pseudo-elementos
|
|
73
|
+
(punto y anillo), así que no hay dónde colgar un área invisible. La separación de 12 deja 44 entre
|
|
74
|
+
centros, lo que evita tocar el vecino. Los controles del espectro, los sliders y el campo hex no
|
|
75
|
+
cambian con `size`.
|
|
66
76
|
|
|
67
77
|
## «No usar»: por qué no hoy y cuándo sí
|
|
68
78
|
|
|
@@ -88,6 +98,7 @@ Agrandarlo es una decisión del DS.
|
|
|
88
98
|
| `eyedropper` | `boolean` | `true` |
|
|
89
99
|
| `showFormatLabel` | `boolean` | `true` |
|
|
90
100
|
| `disabled` | `boolean` | `false` |
|
|
101
|
+
| `size` | `'medium' \| 'large'` | `'medium'` |
|
|
91
102
|
| `ariaLabel` | `string` | `'Seleccionar color'` |
|
|
92
103
|
|
|
93
104
|
| output | payload |
|
|
@@ -108,6 +119,10 @@ Agrandarlo es una decisión del DS.
|
|
|
108
119
|
- Acepta 3, 4, 6 u 8 caracteres con o sin `#`, y siempre emite con `#`.
|
|
109
120
|
- El botón muestra el nombre en español si el color es uno de los 10 («Naranja»); si no, el hex
|
|
110
121
|
en mayúsculas.
|
|
122
|
+
- La muestra de color del botón es un `<span>` con el dibujo de `sui-color-dot` en `selected`, no
|
|
123
|
+
un `sui-color-dot`: hasta el 04-10-2026 quedaba un botón (`role="radio"`) dentro del botón. El
|
|
124
|
+
campo hex ya no lleva `inputmode="text"` (no cambiaba nada y es lo que rompe la acción del
|
|
125
|
+
teclado en Android).
|
|
111
126
|
- Elegir un recomendado **cierra** el panel; arrastrar el espectro no.
|
|
112
127
|
- El panel vive en un overlay del CDK: escapa a cualquier `overflow: hidden` del contenedor.
|
|
113
128
|
- No implementa `ControlValueAccessor`: se usa con `[(value)]`.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-command-menu-footer
|
|
3
|
+
selector: sui-command-menu-footer
|
|
4
|
+
resumen: Pie del buscador ⌘K (command menu) con las teclas para moverse y elegir, y un link de ayuda
|
|
5
|
+
alternativas: [sui-modal-footer (botones de un modal), sui-kbd (una tecla suelta), sui-dropdown-caption (texto de pie de un menú flotante)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-command-menu-footer
|
|
9
|
+
|
|
10
|
+
Story: [Organisms/Command Menu/Command Menu Footer](https://sui-design-system.web.app/?path=/docs/organisms-command-menu-command-menu-footer--docs)
|
|
11
|
+
|
|
12
|
+
La última de las tres piezas del command menu (ver README de `sui-command-menu-item`): dos grupos
|
|
13
|
+
de teclas (↑ ↓ «Navegar», ↵ «Seleccionar») y a la derecha un texto con un link de ayuda.
|
|
14
|
+
|
|
15
|
+
## Cuándo usarlo / cuándo no
|
|
16
|
+
|
|
17
|
+
**Úsalo** al pie de un command menu **en desktop**, para enseñar las teclas.
|
|
18
|
+
|
|
19
|
+
**No lo uses** para:
|
|
20
|
+
|
|
21
|
+
- Mobile: no hay teclado físico; las teclas no dicen nada (README de `sui-kbd`). No se pinta.
|
|
22
|
+
- Un command menu que **no** se mueve con flechas: si el pie dice «↑ ↓ Navegar», las flechas tienen
|
|
23
|
+
que funcionar. `sui-command-menu-item` no las trae; las cablea quien arma el menú.
|
|
24
|
+
- Botones de un modal: `sui-modal-footer`.
|
|
25
|
+
|
|
26
|
+
Regla corta: **command menu en desktop con flechas cableadas → footer · mobile → nada.**
|
|
27
|
+
|
|
28
|
+
## Qué variante usar
|
|
29
|
+
|
|
30
|
+
> **La guía del DS lo pone como parte opcional del command menu**: un pie para mostrar atajos de
|
|
31
|
+
> teclado o información extra. No trae do/don't. Todo lo de abajo es **propuesta, falta
|
|
32
|
+
> aprobación**, salvo lo marcado canon.
|
|
33
|
+
>
|
|
34
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-dropdown-menu`):
|
|
35
|
+
> **0 usos**.
|
|
36
|
+
|
|
37
|
+
No tiene variantes. Se decide el copy y si va el bloque de ayuda.
|
|
38
|
+
|
|
39
|
+
| prop | regla | fuente |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `navigateLabel` · `selectLabel` | **Siempre en español**: «Moverte» y «Abrir» (o «Elegir»). Los defaults son `'Navegar'` y `'Seleccionar'`. | canon (CANON-SUI §5: copy en español, tuteo) |
|
|
42
|
+
| `helpText` + `helpLink` | Solo si hay adónde mandar a la persona (el WhatsApp de soporte). Si no, `[helpText]="null"` saca el bloque entero. Los defaults dicen «¿No es lo que buscas? Prueba el» + «Centro de ayuda». | propuesta |
|
|
43
|
+
| `helpLink` como objeto | `{ label, href, target }` dibuja un `<a>` de verdad; con `target: '_blank'` pone `rel="noopener noreferrer"` solo. | API |
|
|
44
|
+
|
|
45
|
+
## Tamaño en mobile y en web
|
|
46
|
+
|
|
47
|
+
No tiene tamaños: 48 px de alto, textos 12/16, hasta 600 px de ancho.
|
|
48
|
+
|
|
49
|
+
| uso | mobile | web | fuente |
|
|
50
|
+
|---|---|---|---|
|
|
51
|
+
| pie del command menu | no se pinta | 48 px | canon para mobile (README de `sui-kbd`: en mobile las teclas no se muestran) |
|
|
52
|
+
|
|
53
|
+
```html
|
|
54
|
+
@if (!bp.isMobile()) {
|
|
55
|
+
<sui-command-menu-footer navigateLabel="Moverte" selectLabel="Abrir" [helpText]="null" />
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## API
|
|
60
|
+
|
|
61
|
+
<!-- api:inicio -->
|
|
62
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
63
|
+
|
|
64
|
+
| input | tipo | default |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `navigateLabel` | `string` | `'Navegar'` |
|
|
67
|
+
| `selectLabel` | `string` | `'Seleccionar'` |
|
|
68
|
+
| `helpText` | `string \| null` | `'¿No es lo que buscas? Prueba el'` |
|
|
69
|
+
| `helpLink` | `SuiLinkConfig \| string \| null` | `'Centro de ayuda'` |
|
|
70
|
+
|
|
71
|
+
| output | payload |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `helpClicked` | `MouseEvent` |
|
|
74
|
+
<!-- api:fin -->
|
|
75
|
+
|
|
76
|
+
`helpLink` como string dibuja un botón que solo emite `helpClicked`; como `SuiLinkConfig`
|
|
77
|
+
(`{ label, href?, target?, rel? }`) dibuja un `<a>`, y un `href` interno navega dentro de la app.
|
|
78
|
+
|
|
79
|
+
## Trampas
|
|
80
|
+
|
|
81
|
+
- **Los cuatro textos por defecto están en español desde el 04-10-2026**: «Navegar», «Seleccionar»,
|
|
82
|
+
«¿No es lo que buscas? Prueba el» y «Centro de ayuda». El link no lleva a ningún lado si no le pasas `href`.
|
|
83
|
+
- **`helpText: null` saca también el link**; `helpLink: null` saca solo el link y deja el texto.
|
|
84
|
+
- **Promete flechas que nadie cablea**: ni `sui-command-menu-item` ni el modal mueven la selección
|
|
85
|
+
con ↑ ↓.
|
|
86
|
+
- Hasta 600 px el texto de ayuda se oculta (queda solo el link): pasa en un modal angosto aunque sea
|
|
87
|
+
desktop.
|
|
88
|
+
- Las teclas son íconos fijos (↑ ↓ ↵); no se pueden cambiar.
|
|
89
|
+
|
|
90
|
+
## Ejemplo
|
|
91
|
+
|
|
92
|
+
```html
|
|
93
|
+
@if (!bp.isMobile()) {
|
|
94
|
+
<sui-command-menu-footer
|
|
95
|
+
navigateLabel="Moverte"
|
|
96
|
+
selectLabel="Abrir"
|
|
97
|
+
helpText="¿No es lo que buscas? Escríbenos por"
|
|
98
|
+
[helpLink]="{ label: 'WhatsApp', href: 'https://wa.me/51931819925', target: '_blank' }" />
|
|
99
|
+
}
|
|
100
|
+
```
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-command-menu-item
|
|
3
|
+
selector: sui-command-menu-item
|
|
4
|
+
resumen: Fila de resultado del buscador ⌘K (command menu) que lleva a una pantalla, un pedido o una persona
|
|
5
|
+
alternativas: [sui-dropdown-item (fila de un menú de acciones anclado a un botón), sui-filter-item (fila de un panel de filtros), sui-content-card (resultado que se ve en una lista de la pantalla)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-command-menu-item
|
|
9
|
+
|
|
10
|
+
Story: [Organisms/Command Menu/Command Menu Item](https://sui-design-system.web.app/?path=/docs/organisms-command-menu-command-menu-item--docs)
|
|
11
|
+
|
|
12
|
+
**SUI no tiene un componente «command menu» entero.** Se arma con tres piezas dentro de un
|
|
13
|
+
`sui-modal`: `sui-command-menu-search` arriba, la lista de `sui-command-menu-item` en el medio
|
|
14
|
+
(con cabeceras de grupo `sui-content-divider`) y `sui-command-menu-footer` abajo. Quien lo arma pone
|
|
15
|
+
el filtrado, el teclado y el atajo ⌘K.
|
|
16
|
+
|
|
17
|
+
## Cuándo usarlo / cuándo no
|
|
18
|
+
|
|
19
|
+
**Úsalo** para los resultados de un buscador que **lleva a algún lado**: abrir un pedido, ir a una
|
|
20
|
+
pantalla del panel, abrir la ficha de un repartidor o un local. Es el patrón del super admin o del
|
|
21
|
+
panel del local **en desktop**, donde hay teclado.
|
|
22
|
+
|
|
23
|
+
**No lo uses** para:
|
|
24
|
+
|
|
25
|
+
- Acciones sobre algo concreto (editar, archivar): `sui-dropdown-item` dentro de un
|
|
26
|
+
`sui-dropdown-menu`.
|
|
27
|
+
- Elegir un valor de un formulario: `sui-select`.
|
|
28
|
+
- La lista de resultados de una pantalla de búsqueda (la del cliente buscando tiendas): ahí van las
|
|
29
|
+
cards de la pantalla, no filas de palette.
|
|
30
|
+
- Un menú en mobile: el ⌘K es un patrón de teclado.
|
|
31
|
+
|
|
32
|
+
Regla corta: **buscar y saltar → command menu · actuar sobre algo → dropdown · elegir un valor →
|
|
33
|
+
select.** La tabla completa está en el README de `sui-dropdown-menu`.
|
|
34
|
+
|
|
35
|
+
## Qué variante usar
|
|
36
|
+
|
|
37
|
+
> **La guía del DS define el command menu como el buscador que deja saltar rápido desde cualquier
|
|
38
|
+
> pantalla**, armado dentro de un diálogo, con input, lista, grupos con título, items y un pie con
|
|
39
|
+
> teclas. El item tiene dos tamaños, `small` (default) y `medium`, y el elegido se marca con fondo
|
|
40
|
+
> `bg-weak-50`. No trae do/don't. Lo demás es **propuesta, falta aprobación**.
|
|
41
|
+
>
|
|
42
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-dropdown-menu`):
|
|
43
|
+
> **0 usos**. Solo aparece en la vitrina `master-preview`.
|
|
44
|
+
|
|
45
|
+
### `type` — qué va a la izquierda
|
|
46
|
+
|
|
47
|
+
| type | cuándo | fuente |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| `left-icon` | Ir a una **pantalla** o una sección: «Pedidos», «Mi negocio», «Recargas». | según la guía del DS (item con ícono); el cuándo es propuesta |
|
|
50
|
+
| `avatar` | Una **persona**: repartidor, cliente, dueño de local (`avatar` con `src` o `initials`). | propuesta |
|
|
51
|
+
| `company` | Un **local**: su logo en `avatar.src`. | propuesta |
|
|
52
|
+
| `basic` (default) | Una búsqueda reciente o un resultado sin imagen («Pedido #1234»). | propuesta |
|
|
53
|
+
| `brand` | Un servicio externo con su logo (Yape, WhatsApp), proyectado en `slot="brand"`. | propuesta |
|
|
54
|
+
| `country` | No usar hoy: todo es Perú. | propuesta |
|
|
55
|
+
|
|
56
|
+
### `size` y los extras
|
|
57
|
+
|
|
58
|
+
| prop | cuándo | fuente |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| `size="small"` (default, 40) | Listas de resultados de una línea (`title` + `sublabel`). | según la guía del DS (default `small`) |
|
|
61
|
+
| `size="medium"` (64) | Cuando el resultado necesita una segunda línea (`description`) para distinguirse: «Pedido #1234» · «Juan Pérez · S/ 45.00». | según la guía del DS (existe); el cuándo es propuesta |
|
|
62
|
+
| `badge` | Un estado corto que ayuda a elegir («Pendiente», «Cerrado»). String = gris `lighter`; objeto `SuiBadgeConfig` para color. | propuesta |
|
|
63
|
+
| `shortcut` | El atajo de esa acción (`sui-kbd`). Solo web. | canon (README de `sui-kbd`: en mobile no se pinta) |
|
|
64
|
+
| `showButton` | Una flecha a la derecha cuando el resultado abre otra pantalla. | propuesta |
|
|
65
|
+
|
|
66
|
+
## Tamaño en mobile y en web
|
|
67
|
+
|
|
68
|
+
El command menu es un patrón de desktop. En mobile no hay ⌘K ni flechas; si se reusa la lista en un
|
|
69
|
+
buscador de mobile, la fila `small` mide 40 y queda debajo de los 44 del dedo.
|
|
70
|
+
|
|
71
|
+
| uso | mobile | web | fuente |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| resultado de una línea | `medium` (64) | `small` (40) | propuesta, falta aprobación |
|
|
74
|
+
| resultado con descripción | `medium` (64) | `medium` (64) | propuesta |
|
|
75
|
+
|
|
76
|
+
```html
|
|
77
|
+
<sui-command-menu-item [size]="bp.isMobile() ? 'medium' : 'small'" … /> <!-- bp = BreakpointsService -->
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## API
|
|
81
|
+
|
|
82
|
+
<!-- api:inicio -->
|
|
83
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
84
|
+
|
|
85
|
+
| input | tipo | default |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `type` | `'basic' \| 'left-icon' \| 'avatar' \| 'brand' \| 'company' \| 'country'` | `'basic'` |
|
|
88
|
+
| `size` | `'small' \| 'medium'` | `'small'` |
|
|
89
|
+
| `title` | `string` | — (requerido) |
|
|
90
|
+
| `sublabel` | `string \| null` | `null` |
|
|
91
|
+
| `description` | `string \| null` | `null` |
|
|
92
|
+
| `icon` | `string \| null` | `null` |
|
|
93
|
+
| `avatar` | `SuiAvatarConfig \| string \| null` | `null` |
|
|
94
|
+
| `flagName` | `SuiFlagName \| null` | `null` |
|
|
95
|
+
| `badge` | `SuiBadgeConfig \| string \| null` | `null` |
|
|
96
|
+
| `shortcut` | `string \| null` | `null` |
|
|
97
|
+
| `showButton` | `boolean` | `false` |
|
|
98
|
+
|
|
99
|
+
| output | payload |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `clicked` | `MouseEvent` |
|
|
102
|
+
| `buttonClicked` | `MouseEvent` |
|
|
103
|
+
<!-- api:fin -->
|
|
104
|
+
|
|
105
|
+
Slot: `[slot=brand]` (solo con `type="brand"`). `avatar` acepta un string (la URL) o
|
|
106
|
+
`SuiAvatarConfig` (`{ src?, initials?, color? }`).
|
|
107
|
+
|
|
108
|
+
## Trampas
|
|
109
|
+
|
|
110
|
+
- **`(clicked)` nunca sale.** El componente declara el output pero no lo conecta a ningún clic (el
|
|
111
|
+
host no escucha `click` y el template no llama a `onClick`; el spec no lo prueba). Escucha el
|
|
112
|
+
`(click)` nativo del host: `<sui-command-menu-item (click)="ir(r)" … />`.
|
|
113
|
+
- **Enter y Espacio no hacen nada.** Tiene `role="button"` y `tabindex="0"`, así que se enfoca con
|
|
114
|
+
Tab, pero activarlo con teclado lo tiene que cablear quien lo usa (`(keydown.enter)`).
|
|
115
|
+
- **No hay estado «elegido»** para la navegación con flechas: el fondo `weak-50` sale con hover y
|
|
116
|
+
con `:focus-visible`. Para mover la selección con ↑ ↓ hay que mover el foco entre filas.
|
|
117
|
+
- `description` solo se ve en `medium`.
|
|
118
|
+
- `showButton` pinta una flecha con `ariaLabel="Abrir"` fijo, y su clic sale por `buttonClicked`
|
|
119
|
+
(no burbujea al item).
|
|
120
|
+
- `type="left-icon"` sin `icon` en `small` cae al ícono `apps-line`; en `medium` queda el círculo vacío.
|
|
121
|
+
- Mide como máximo 600 px de ancho.
|
|
122
|
+
- El host borra el atributo `title` nativo (no aparece el tooltip gris del navegador).
|
|
123
|
+
|
|
124
|
+
## Ejemplo
|
|
125
|
+
|
|
126
|
+
```html
|
|
127
|
+
<sui-modal [(open)]="buscadorAbierto" size="large" [fullscreen]="true">
|
|
128
|
+
<sui-command-menu-search [(value)]="q" placeholder="Busca pedidos, locales o repartidores…"
|
|
129
|
+
[shortcut]="!bp.isMobile()" />
|
|
130
|
+
<sui-content-divider type="text" text="Pantallas" />
|
|
131
|
+
@for (p of pantallas(); track p.ruta) {
|
|
132
|
+
<sui-command-menu-item type="left-icon" [icon]="p.icono" [title]="p.nombre"
|
|
133
|
+
[size]="bp.isMobile() ? 'medium' : 'small'"
|
|
134
|
+
(click)="ir(p.ruta)" (keydown.enter)="ir(p.ruta)" />
|
|
135
|
+
}
|
|
136
|
+
@if (!bp.isMobile()) {
|
|
137
|
+
<sui-command-menu-footer navigateLabel="Moverte" selectLabel="Abrir" [helpText]="null" />
|
|
138
|
+
}
|
|
139
|
+
</sui-modal>
|
|
140
|
+
```
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-command-menu-search
|
|
3
|
+
selector: sui-command-menu-search
|
|
4
|
+
resumen: Campo de arriba del buscador ⌘K (command menu), sin caja y con borde inferior
|
|
5
|
+
alternativas: [sui-input type="search" (buscador de una pantalla), sui-dropdown-search (filtrar los items de un menú flotante)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-command-menu-search
|
|
9
|
+
|
|
10
|
+
Story: [Organisms/Command Menu/Command Menu Search](https://sui-design-system.web.app/?path=/docs/organisms-command-menu-command-menu-search--docs)
|
|
11
|
+
|
|
12
|
+
Es la primera de las tres piezas del command menu (ver README de `sui-command-menu-item`): el
|
|
13
|
+
campo, el chip ⌘K y un botón para limpiar. **No busca**: emite el texto y quien lo usa filtra.
|
|
14
|
+
|
|
15
|
+
## Cuándo usarlo / cuándo no
|
|
16
|
+
|
|
17
|
+
**Úsalo** arriba de un command menu armado dentro de un `sui-modal`: el buscador que salta a
|
|
18
|
+
pedidos, locales, repartidores o pantallas del panel en desktop.
|
|
19
|
+
|
|
20
|
+
**No lo uses** para:
|
|
21
|
+
|
|
22
|
+
- El buscador de una pantalla o de una lista a la vista: `sui-input type="search"` (ya lleva
|
|
23
|
+
`enterkeyhint="search"`, tamaños y label).
|
|
24
|
+
- Filtrar las opciones de un menú anclado a un botón: `sui-dropdown-search`.
|
|
25
|
+
- Fuera del command menu: no tiene caja, solo un borde abajo; suelto parece texto.
|
|
26
|
+
|
|
27
|
+
Regla corta: **buscar en toda la app → command-menu-search · buscar en una pantalla → sui-input
|
|
28
|
+
search · filtrar un menú → dropdown-search.**
|
|
29
|
+
|
|
30
|
+
## Qué variante usar
|
|
31
|
+
|
|
32
|
+
> **La guía del DS define el command menu como el buscador que deja saltar rápido desde cualquier
|
|
33
|
+
> pantalla**; el input es su primera parte. No dice nada del chip ni del botón de la derecha (salen
|
|
34
|
+
> del Figma del DS). Todo lo de abajo es **propuesta, falta aprobación**, salvo lo marcado canon.
|
|
35
|
+
>
|
|
36
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-dropdown-menu`):
|
|
37
|
+
> **0 usos**.
|
|
38
|
+
|
|
39
|
+
Los tres estados salen solos del `value`: vacío (lupa gris, placeholder gris), hover (placeholder
|
|
40
|
+
más oscuro) y con texto (lupa naranja, X para limpiar).
|
|
41
|
+
|
|
42
|
+
| prop | regla | fuente |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `placeholder` | **Siempre**, en español y diciendo qué se busca: «Busca pedidos, locales o repartidores…». El default genérico es `'Buscar o ir a…'`. | canon (CANON-SUI §5: copy en español, elipsis `…`) |
|
|
45
|
+
| `shortcut` | `true` solo en web; en mobile `false` (no hay teclado físico). | canon (README de `sui-kbd`) |
|
|
46
|
+
| `button` | Déjalo en `true`: la X de limpiar ahorra borrar a mano. El ícono de info del estado vacío no hace nada. | propuesta |
|
|
47
|
+
|
|
48
|
+
## Tamaño en mobile y en web
|
|
49
|
+
|
|
50
|
+
No tiene tamaños: 48 px de alto (14 + 20 + 13 + 1 de borde), texto 14/20, hasta 600 px de ancho.
|
|
51
|
+
|
|
52
|
+
| uso | mobile | web | fuente |
|
|
53
|
+
|---|---|---|---|
|
|
54
|
+
| buscador del command menu | igual, sin chip ⌘K | igual, con chip ⌘K | canon para el chip (README de `sui-kbd`); el resto, propuesta |
|
|
55
|
+
|
|
56
|
+
```html
|
|
57
|
+
<sui-command-menu-search [(value)]="q" placeholder="Busca pedidos, locales o repartidores…"
|
|
58
|
+
[shortcut]="!bp.isMobile()" /> <!-- bp = BreakpointsService -->
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## API
|
|
62
|
+
|
|
63
|
+
<!-- api:inicio -->
|
|
64
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
65
|
+
|
|
66
|
+
| input | tipo | default |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| `value` | `string` | `''` |
|
|
69
|
+
| `placeholder` | `string` | `'Buscar o ir a…'` |
|
|
70
|
+
| `shortcut` | `boolean` | `true` |
|
|
71
|
+
| `button` | `boolean` | `true` |
|
|
72
|
+
|
|
73
|
+
| output | payload |
|
|
74
|
+
|---|---|
|
|
75
|
+
| `valueChange` | `string` |
|
|
76
|
+
| `cleared` | `void` |
|
|
77
|
+
<!-- api:fin -->
|
|
78
|
+
|
|
79
|
+
`value` no es `model`, pero el par `value` + `valueChange` permite `[(value)]`. La X emite
|
|
80
|
+
`valueChange('')` y `cleared`, y devuelve el foco al campo.
|
|
81
|
+
|
|
82
|
+
## Trampas
|
|
83
|
+
|
|
84
|
+
- **Sin `[(value)]` no funciona bien.** El componente no guarda lo que se escribe: solo lo emite. Si
|
|
85
|
+
no se le devuelve el `value`, la X nunca aparece y la lupa no cambia: el estado «con texto» sale
|
|
86
|
+
del input `value`, no de lo escrito.
|
|
87
|
+
- **El chip dice ⌘K, fijo.** En Windows el atajo es Ctrl+K y el chip no cambia; tampoco hay atajo
|
|
88
|
+
real: el `keydown` global lo cablea quien arma el command menu.
|
|
89
|
+
- **iOS hace zoom al enfocarlo**: el campo está en 14 px y la regla de la app pide 16 px en los
|
|
90
|
+
inputs de mobile (CLAUDE.md, «Responsive mobile»).
|
|
91
|
+
- **El teclado no trae la lupa**: el `<input>` es `type="text"` sin `enterkeyhint="search"` (CLAUDE.md,
|
|
92
|
+
«La lupa del teclado»).
|
|
93
|
+
- **El campo no tiene nombre accesible**: solo placeholder, sin `aria-label`.
|
|
94
|
+
- No tiene `disabled`.
|
|
95
|
+
- El ícono de info del estado vacío es decorativo: no abre ayuda ni tiene `aria-label`.
|
|
96
|
+
|
|
97
|
+
## Ejemplo
|
|
98
|
+
|
|
99
|
+
```html
|
|
100
|
+
<sui-command-menu-search
|
|
101
|
+
[(value)]="q"
|
|
102
|
+
placeholder="Busca pedidos, locales o repartidores…"
|
|
103
|
+
[shortcut]="!bp.isMobile()"
|
|
104
|
+
(cleared)="resultados.set([])" />
|
|
105
|
+
```
|
|
@@ -25,8 +25,8 @@ de lista. Es una píldora blanca con los avatares casi pegados y el «+N» como
|
|
|
25
25
|
> marcado «según la guía del DS» sale de su texto o de su código; el resto es **propuesta,
|
|
26
26
|
> falta aprobación**.
|
|
27
27
|
>
|
|
28
|
-
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos directos**.
|
|
29
|
-
>
|
|
28
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos directos**. En el DS no lo
|
|
29
|
+
> monta ningún componente: `sui-table` solo lo nombra como contenido que se proyecta en una celda.
|
|
30
30
|
|
|
31
31
|
### Lo que sí dice la guía del DS
|
|
32
32
|
|
|
@@ -94,7 +94,8 @@ Outputs: ninguno.
|
|
|
94
94
|
- **El estilo se llama `appearance`**, no `variant` ni `style` (el atributo `style` es del HTML).
|
|
95
95
|
- **`size` no es el de `sui-avatar`**: `'24'` → avatar `sm`, `'32'` → `md`, `'40'` → `lg`.
|
|
96
96
|
- **`count` gana sobre el cálculo**: si lo pasas, se muestra aunque no sobre nadie.
|
|
97
|
-
- Las reglas de foto y color de cada persona son las de `sui-avatar
|
|
97
|
+
- Las reglas de foto y color de cada persona son las de `sui-avatar`: el `color` por rol va
|
|
98
|
+
explícito en cada item (canon, aprobado por el dueño, 03-10-2026); sin él cae a `slate`.
|
|
98
99
|
|
|
99
100
|
## Ejemplo
|
|
100
101
|
|
|
@@ -27,11 +27,11 @@ carrusel o un mapa.
|
|
|
27
27
|
> dos tamaños, el radio completo y el deshabilitado, sin do/don't. Las reglas de abajo son
|
|
28
28
|
> **canon (aprobado por el dueño, 03-10-2026)** salvo donde dice otra fuente.
|
|
29
29
|
>
|
|
30
|
-
> Uso medido el
|
|
30
|
+
> Uso medido el 04-10-2026 en `master-pedidos/src/app`: 11 compact-buttons en 7 archivos, sin
|
|
31
31
|
> contar prototipos ni vitrinas (`master-preview`, `master-prototipos`, `mockup-sheets-*`,
|
|
32
32
|
> `dx/*`, `master-rutina`, `master-medico`, `dev-index`). Estilos: 6 `ghost`, 3 `stroke` (uno
|
|
33
|
-
> por error, ver abajo), 2 `white`, 0 `modifiable`. Tamaños:
|
|
34
|
-
> 4 con `fullRadius`, 1 con `disabled`.
|
|
33
|
+
> por error, ver abajo), 2 `white`, 0 `modifiable`. Tamaños: 3 `large`, 2 `medium`, 2 `xlarge` y
|
|
34
|
+
> 4 por `bp` (`2xlarge`/`large` y `3xlarge`/`medium`). 4 con `fullRadius`, 1 con `disabled`.
|
|
35
35
|
|
|
36
36
|
### Lo que sí dice la guía del DS
|
|
37
37
|
|
|
@@ -47,21 +47,20 @@ carrusel o un mapa.
|
|
|
47
47
|
| variantStyle | cuándo | ejemplo real de la app | fuente |
|
|
48
48
|
|---|---|---|---|
|
|
49
49
|
| `stroke` (default) | Acciones de una fila o una card: «más», «editar», el − / + de una cantidad. | `components/product-detail-view/product-detail-view.html:169` (− / +) | canon (aprobado por el dueño, 03-10-2026) |
|
|
50
|
-
| `ghost` | Cerrar en la cabecera de un modal o un sheet. | `components/store-ratings-modal/store-ratings-modal.html:33` («Cerrar») | canon (aprobado por el dueño, 03-10-2026) |
|
|
50
|
+
| `ghost` | Cerrar en la cabecera de un modal o un sheet, y acciones de fila sin caja (quitar, más, editar) donde el `stroke` recarga una lista densa. | `components/store-ratings-modal/store-ratings-modal.html:33` («Cerrar») · `components/option-sections-manager/option-sections-manager.html:38` (quitar) | cerrar: canon (aprobado por el dueño, 03-10-2026) · filas: canon (dueño, 04-10-2026), igual que en `sui-button` |
|
|
51
51
|
| `white` | Flotante sobre un mapa o una foto, siempre con `fullRadius`. | `pages/customer/store-browser/arrastre-carrusel.ts:102` (flechas del carrusel) | canon (aprobado por el dueño, 03-10-2026) |
|
|
52
52
|
| `modifiable` | Hereda el color del contenedor: el cerrar del alert (ya lo trae `sui-alert` adentro). | (sin uso directo; vive dentro de `sui-alert`) | hereda el color: según la guía del DS · dónde va: canon (aprobado por el dueño, 03-10-2026) |
|
|
53
53
|
|
|
54
54
|
**Usos de hoy que rompen la regla:**
|
|
55
55
|
|
|
56
|
-
- **1 bug: `variant="ghost"` en vez de `variantStyle`.** `pages/super-admin/master-settings/master-settings.html:
|
|
56
|
+
- **1 bug: `variant="ghost"` en vez de `variantStyle`.** `pages/super-admin/master-settings/master-settings.html:658`
|
|
57
57
|
(«Quitar este nivel»). `variant` no es un input del compact-button: el atributo se ignora y el
|
|
58
58
|
botón sale `stroke`. Pasar a `variantStyle="ghost"`.
|
|
59
|
-
- **
|
|
60
|
-
`components/option-sections-manager/option-sections-manager.html:
|
|
61
|
-
`components/add-product-modal/add-product-modal.html:
|
|
62
|
-
`pages/super-admin/master-settings/master-settings.html:
|
|
63
|
-
|
|
64
|
-
borrar en filas. Los dos canon se contradicen: hay que elegir uno.
|
|
59
|
+
- **Resuelto — `ghost` en acciones de fila** (canon, dueño 04-10-2026): se permite, igual que en
|
|
60
|
+
`sui-button`. Los 5 usos de hoy quedan bien: `components/option-sections-manager/option-sections-manager.html:38`
|
|
61
|
+
y `:148`, `components/add-product-modal/add-product-modal.html:315`,
|
|
62
|
+
`pages/super-admin/master-settings/master-settings.html:113` y `:658` (este último sigue con el
|
|
63
|
+
bug de `variant` en vez de `variantStyle`).
|
|
65
64
|
|
|
66
65
|
### `size`
|
|
67
66
|
|
|
@@ -70,19 +69,18 @@ carrusel o un mapa.
|
|
|
70
69
|
| `medium` | 20 (16) | Solo desktop, filas muy densas (tablas). | escala: según la guía del DS · cuándo: canon (aprobado por el dueño, 03-10-2026) |
|
|
71
70
|
| `large` (default) | 24 (20) | Desktop, dentro de cards. | default según la guía del DS · cuándo: canon (aprobado por el dueño, 03-10-2026) |
|
|
72
71
|
| `xlarge` | 28 (24) | Cabeceras de modal en desktop; flechas de carrusel que solo se ven con mouse. | extensión de SUI · canon (aprobado por el dueño, 03-10-2026) |
|
|
73
|
-
| `2xlarge` | 32 (20) | **El mínimo en mobile**: filas y cards que se tocan con el dedo. | extensión de SUI · canon (aprobado por el dueño, 03-10-2026).
|
|
74
|
-
| `3xlarge` | 36 (20) | Cerrar en modales y sheets en mobile. | ídem: canon;
|
|
75
|
-
| `4xlarge` | 40 (24) | Flotantes sobre el mapa (volver, centrar). | ídem: canon;
|
|
72
|
+
| `2xlarge` | 32 (20) | **El mínimo en mobile**: filas y cards que se tocan con el dedo. | extensión de SUI · canon (aprobado por el dueño, 03-10-2026). Publicado desde 0.20.0 |
|
|
73
|
+
| `3xlarge` | 36 (20) | Cerrar en modales y sheets en mobile. | ídem: canon; publicado desde 0.20.0 |
|
|
74
|
+
| `4xlarge` | 40 (24) | Flotantes sobre el mapa (volver, centrar). | ídem: canon; publicado desde 0.20.0 |
|
|
75
|
+
| `5xlarge` | 44 (24) | **El del teléfono** cuando el botón se toca solo: cerrar un modal o sheet, flotantes sobre el mapa. El ícono se queda en 24 como `4xlarge`: crece el área, no el dibujo. | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
|
|
76
76
|
|
|
77
|
-
**
|
|
78
|
-
|
|
77
|
+
**Migración a tamaños de mobile: hecha** (medido el 04-10-2026). Los 4 casos del cliente ya usan
|
|
78
|
+
`bp`: `components/product-detail-view/product-detail-view.html:169` y `:173` y
|
|
79
|
+
`pages/customer/order-history/order-history.html:382` con `2xlarge`/`large`, y
|
|
80
|
+
`components/store-ratings-modal/store-ratings-modal.html:33` con `3xlarge` en mobile.
|
|
79
81
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
`medium` → `3xlarge`), `pages/customer/order-history/order-history.html:383` (flecha de la fila
|
|
83
|
-
en `large` → `2xlarge`).
|
|
84
|
-
- **La migración está bloqueada** hasta que se publique la versión del DS con `2xlarge`,
|
|
85
|
-
`3xlarge` y `4xlarge`.
|
|
82
|
+
**Uso de hoy que rompe la regla:** `store-ratings-modal.html:33` cierra en web con `medium` (20);
|
|
83
|
+
la tabla de abajo pide `xlarge` (28).
|
|
86
84
|
|
|
87
85
|
### `fullRadius`
|
|
88
86
|
|
|
@@ -106,29 +104,29 @@ botones de 20 o 24 px):
|
|
|
106
104
|
En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más**. En web, con mouse,
|
|
107
105
|
va un tamaño más chico. La app ya lo resuelve con `BreakpointsService`
|
|
108
106
|
(`src/app/services/breakpoints.service.ts`, mobile = hasta 767 px):
|
|
109
|
-
`[size]="bp.isMobile() ? 'large' : 'small'"
|
|
110
|
-
|
|
107
|
+
`[size]="bp.isMobile() ? 'large' : 'small'"`. Medido el 04-10-2026 en `master-pedidos`: 166 `[size]`
|
|
108
|
+
con `bp` (142 `large`/`medium`, 22 `large`/`small`, 2 `medium`/`xsmall`). Regla del dueño, 03-10-2026.
|
|
111
109
|
|
|
112
110
|
| uso | mobile | web | fuente |
|
|
113
111
|
|---|---|---|---|
|
|
114
|
-
| acciones de fila o card (más, quitar, − / +) | `2xlarge` (32) | `large` (24); `medium` (20) en tablas densas | canon (
|
|
115
|
-
| cerrar en la cabecera de un modal o sheet | `
|
|
116
|
-
| flotante sobre el mapa o una foto | `
|
|
112
|
+
| acciones de fila o card (más, quitar, − / +) | `5xlarge` (44); si la fila no lo deja entrar, `2xlarge` (32) con aire alrededor | `large` (24); `medium` (20) en tablas densas | 44: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · la excepción de 32: propuesta, falta aprobación |
|
|
113
|
+
| cerrar en la cabecera de un modal o sheet | `5xlarge` (44) | `xlarge` (28) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (antes `3xlarge`, 03-10-2026) |
|
|
114
|
+
| flotante sobre el mapa o una foto | `5xlarge` (44) | `xlarge` (28) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (antes `4xlarge`, 03-10-2026) |
|
|
117
115
|
|
|
118
116
|
```html
|
|
119
117
|
<sui-compact-button icon="close-line" variantStyle="ghost" ariaLabel="Cerrar"
|
|
120
|
-
[size]="bp.isMobile() ? '
|
|
118
|
+
[size]="bp.isMobile() ? '5xlarge' : 'xlarge'" (clicked)="cerrar()" />
|
|
121
119
|
```
|
|
122
120
|
|
|
123
|
-
|
|
124
|
-
(
|
|
125
|
-
|
|
126
|
-
toque el vecino. `medium` y `large` no
|
|
127
|
-
|
|
121
|
+
`2xlarge`, `3xlarge` y `4xlarge` están publicados desde la 0.20.0 (la app usa la 0.22.0); `5xlarge`
|
|
122
|
+
(44) se agregó el 04-10-2026 para llegar al piso táctil del teléfono. Si una fila o card no deja
|
|
123
|
+
entrar un botón de 44, `2xlarge` (32) con aire alrededor (gap o padding) es la excepción, para que el
|
|
124
|
+
dedo no toque el vecino. `medium` y `large` no
|
|
125
|
+
van en mobile.
|
|
128
126
|
|
|
129
127
|
## «No usar»: por qué no hoy y cuándo sí
|
|
130
128
|
|
|
131
|
-
Ningún valor del compact-button está en «no usar»: los cuatro estilos y los
|
|
129
|
+
Ningún valor del compact-button está en «no usar»: los cuatro estilos y los siete tamaños tienen
|
|
132
130
|
un caso. `modifiable` no tiene un uso directo hoy porque el único lugar donde va (el cerrar del
|
|
133
131
|
alert) ya lo trae `sui-alert` adentro.
|
|
134
132
|
|
|
@@ -141,7 +139,7 @@ alert) ya lo trae `sui-alert` adentro.
|
|
|
141
139
|
|---|---|---|
|
|
142
140
|
| `icon` | `string` | — (requerido) |
|
|
143
141
|
| `variantStyle` | `'stroke' \| 'ghost' \| 'modifiable' \| 'white'` | `'stroke'` |
|
|
144
|
-
| `size` | `'medium' \| 'large' \| 'xlarge' \| '2xlarge' \| '3xlarge' \| '4xlarge'` | `'large'` |
|
|
142
|
+
| `size` | `'medium' \| 'large' \| 'xlarge' \| '2xlarge' \| '3xlarge' \| '4xlarge' \| '5xlarge'` | `'large'` |
|
|
145
143
|
| `fullRadius` | `boolean` | `false` |
|
|
146
144
|
| `disabled` | `boolean` | `false` |
|
|
147
145
|
| `href` | `string \| null` | `null` |
|
|
@@ -160,14 +158,12 @@ El clic se escucha con `(clicked)`. `icon` recibe el nombre RemixIcon, sin el pr
|
|
|
160
158
|
## Trampas
|
|
161
159
|
|
|
162
160
|
- **El estilo se llama `variantStyle`**, no `variant`. `variant="ghost"` no da error de
|
|
163
|
-
compilación: se ignora y sale `stroke` (
|
|
161
|
+
compilación: se ignora y sale `stroke` (pasa hoy en `master-settings.html:658`).
|
|
164
162
|
- **`icon` y `ariaLabel` son obligatorios**: sin `ariaLabel` no compila.
|
|
165
163
|
- **El output es `(clicked)`**. `(click)` sobre el host también llega porque el clic burbujea; hoy 6
|
|
166
|
-
usos lo escuchan así (`product-detail-view.html:169` y `:173`, `master-settings.html:
|
|
167
|
-
`arrastre-carrusel.ts:102` y `:104`, `order-history.html:
|
|
164
|
+
usos lo escuchan así (`product-detail-view.html:169` y `:173`, `master-settings.html:658`,
|
|
165
|
+
`arrastre-carrusel.ts:102` y `:104`, `order-history.html:382`). Usa `(clicked)`, que ya respeta
|
|
168
166
|
`disabled`.
|
|
169
|
-
- **El paquete publicado (0.19.0) solo trae `medium`, `large` y `xlarge`.** Pasar `2xlarge` con un
|
|
170
|
-
cast compila, pero el botón sale sin tamaño y con ícono de 16: no lo hagas hasta que se publique.
|
|
171
167
|
- En `medium` el ícono mide 16, no los 18 de la guía.
|
|
172
168
|
- `modifiable` en hover pinta blanco al 16 %: pensado para fondos oscuros o de color. Sobre blanco
|
|
173
169
|
casi no se nota. Se ajusta con `--sui-compact-button-hover-bg` y `--sui-compact-button-active-bg`.
|
|
@@ -178,13 +174,14 @@ El clic se escucha con `(clicked)`. `icon` recibe el nombre RemixIcon, sin el pr
|
|
|
178
174
|
## Ejemplo
|
|
179
175
|
|
|
180
176
|
```html
|
|
181
|
-
<!-- Cerrar en la cabecera de un sheet
|
|
182
|
-
<sui-compact-button icon="close-line" variantStyle="ghost" size="
|
|
177
|
+
<!-- Cerrar en la cabecera de un sheet: 5xlarge (44) en mobile, xlarge en web -->
|
|
178
|
+
<sui-compact-button icon="close-line" variantStyle="ghost" [size]="bp.isMobile() ? '5xlarge' : 'xlarge'"
|
|
179
|
+
ariaLabel="Cerrar" (clicked)="cerrar()" />
|
|
183
180
|
|
|
184
181
|
<!-- Acción de una fila en desktop -->
|
|
185
182
|
<sui-compact-button icon="more-2-line" ariaLabel="Opciones de la sección" (clicked)="abrirMenu()" />
|
|
186
183
|
|
|
187
184
|
<!-- Flotante sobre el mapa -->
|
|
188
|
-
<sui-compact-button icon="arrow-left-line" variantStyle="white" [fullRadius]="true"
|
|
189
|
-
ariaLabel="Volver" (clicked)="volver()" />
|
|
185
|
+
<sui-compact-button icon="arrow-left-line" variantStyle="white" [fullRadius]="true"
|
|
186
|
+
[size]="bp.isMobile() ? '5xlarge' : 'xlarge'" ariaLabel="Volver" (clicked)="volver()" />
|
|
190
187
|
```
|
|
@@ -31,7 +31,7 @@ Regla corta: **filtro suelto en una barra, ancho al texto → compact · campo c
|
|
|
31
31
|
>
|
|
32
32
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos**. Los filtros de las barras del
|
|
33
33
|
> panel usan `sui-select` sin label (6: `pages/customers/customers.html:38`,
|
|
34
|
-
> `pages/settings/team/team.html:
|
|
34
|
+
> `pages/settings/team/team.html:67`, `pages/drivers/drivers.html:73`…), que se estira a todo el ancho.
|
|
35
35
|
|
|
36
36
|
| prop | cuándo | fuente |
|
|
37
37
|
|---|---|---|
|
|
@@ -42,18 +42,22 @@ Regla corta: **filtro suelto en una barra, ancho al texto → compact · campo c
|
|
|
42
42
|
| `selected` / `selectedChange` | La opción elegida (objeto entero). O `formControlName`, nunca los dos. | API |
|
|
43
43
|
| `placeholder` | El filtro sin elegir: «Todos». Corto. | propuesta, falta aprobación |
|
|
44
44
|
| `value` / `icon` | Lo que muestra el campo cuando no hay `items` (modo «solo campo», el menú lo arma la pantalla). | API |
|
|
45
|
-
| `error` | No usar hoy: un filtro no tiene error. |
|
|
45
|
+
| `error` | No usar hoy: un filtro no tiene error. | propuesta, falta aprobación |
|
|
46
46
|
| `disabled` | Mientras carga la lista. | según la guía del DS |
|
|
47
47
|
| `clicked` | Solo si la pantalla arma su propio menú (sin `items`). | API |
|
|
48
48
|
|
|
49
|
-
**Candidatos de hoy:** los 6 filtros de barra del panel en web (arriba). En mobile
|
|
50
|
-
`sui-select` `large` a todo el ancho
|
|
49
|
+
**Candidatos de hoy:** los 6 filtros de barra del panel en web (arriba). En mobile pueden seguir
|
|
50
|
+
como `sui-select` `large` a todo el ancho o pasar a este en `large` (48, desde el 03-10-2026).
|
|
51
51
|
|
|
52
52
|
## Tamaño en mobile y en web
|
|
53
53
|
|
|
54
54
|
Tiene los tres tamaños de la guía —`medium` (40), `small` (36), `xsmall` (32)— y **`large` (48)**,
|
|
55
55
|
extensión SUI para mobile: mide lo mismo que un `sui-button` `large` de la misma barra. En `large`
|
|
56
|
-
crece el aire (padding
|
|
56
|
+
crece el aire (padding 12 a los lados, 14 a la izquierda en `type="basic"`; radio 12) y los íconos
|
|
57
|
+
siguen en 20. Alto: padding 11 + línea 24 + 11 + borde 2 = 48.
|
|
58
|
+
|
|
59
|
+
En large y xlarge el texto sube a 16 px (regla del 03-10-2026): el valor y las opciones del menú
|
|
60
|
+
van en 16/24 en `large` y el padding vertical baja para que el alto siga en 48 (trigger) y 44 (opción).
|
|
57
61
|
|
|
58
62
|
Las opciones del menú siguen al `size` como en `sui-select`: 36 hasta `medium`, **44 en `large`**, y
|
|
59
63
|
**44 en mobile (≤ 767 px) con cualquier tamaño**.
|
|
@@ -101,6 +105,7 @@ Las opciones del menú siguen al `size` como en `sui-select`: 36 hasta `medium`,
|
|
|
101
105
|
| `selected` · model, `[(selected)]` | `SuiCompactSelectItem<T> \| null` | `null` |
|
|
102
106
|
| `error` | `boolean` | `false` |
|
|
103
107
|
| `disabled` | `boolean` | `false` |
|
|
108
|
+
| `ariaLabel` | `string \| null` | `null` |
|
|
104
109
|
|
|
105
110
|
| output | payload |
|
|
106
111
|
|---|---|
|
|
@@ -116,6 +121,8 @@ Implementa `ControlValueAccessor` (el valor es el `value` de la opción).
|
|
|
116
121
|
se entera de lo que escribe `selected`.
|
|
117
122
|
- Sin `items` no abre nada: solo emite `(clicked)`.
|
|
118
123
|
- `type="icon"` **no muestra texto**: solo el ícono de la opción elegida.
|
|
124
|
+
Pásale `ariaLabel` («Ordenar por»): es el nombre que lee el lector de pantalla (desde el
|
|
125
|
+
04-10-2026; sin él usa el label de la opción elegida o el placeholder).
|
|
119
126
|
- El menú mide al menos 200 px aunque el campo sea más angosto.
|
|
120
127
|
- Las opciones miden 36 px en web hasta `medium`; 44 en `large` y en mobile (ver «Tamaño»).
|
|
121
128
|
|