@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
|
@@ -25,8 +25,8 @@ Regla corta: **la marca es lo que se muestra → brand-logo · es un ícono más
|
|
|
25
25
|
|
|
26
26
|
## Qué variante usar
|
|
27
27
|
|
|
28
|
-
> **La guía del DS no tiene página para este componente.**
|
|
29
|
-
>
|
|
28
|
+
> **La guía del DS no tiene página para este componente.** Lo marcado canon está
|
|
29
|
+
> aprobado; lo que sigue en **propuesta** espera decisión.
|
|
30
30
|
>
|
|
31
31
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos directos**. Lo usan por dentro
|
|
32
32
|
> `sui-content-card` (`type="brand"`), `sui-social-button`, `sui-content-label`,
|
|
@@ -37,10 +37,10 @@ Regla corta: **la marca es lo que se muestra → brand-logo · es un ícono más
|
|
|
37
37
|
|
|
38
38
|
| valor | cuándo | fuente |
|
|
39
39
|
|---|---|---|
|
|
40
|
-
| `whatsapp` | Soporte y contacto con el negocio. |
|
|
41
|
-
| `google`, `apple` | Entrar con esa cuenta (vía `sui-social-button`). |
|
|
42
|
-
| `instagram`, `facebook` | Las redes del negocio o de la app. |
|
|
43
|
-
| las otras 23 (`adobe`, `notion`, `slack`, `stripe`…) | No usar hoy. |
|
|
40
|
+
| `whatsapp` | Soporte y contacto con el negocio. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
41
|
+
| `google`, `apple` | Entrar con esa cuenta (vía `sui-social-button`). | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
42
|
+
| `instagram`, `facebook` | Las redes del negocio o de la app. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
43
|
+
| las otras 23 (`adobe`, `notion`, `slack`, `stripe`…) | No usar hoy. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
44
44
|
|
|
45
45
|
**No hay TikTok** en el catálogo (son 28 marcas), aunque la app hace publicidad ahí.
|
|
46
46
|
|
|
@@ -48,45 +48,46 @@ Regla corta: **la marca es lo que se muestra → brand-logo · es un ícono más
|
|
|
48
48
|
|
|
49
49
|
| valor | cuándo | fuente |
|
|
50
50
|
|---|---|---|
|
|
51
|
-
| `original` (default) | El normal: sobre fondo claro, con su color oficial. |
|
|
52
|
-
| `white` | Sobre fondo oscuro o sobre foto. |
|
|
53
|
-
| `black` | No usar hoy. |
|
|
51
|
+
| `original` (default) | El normal: sobre fondo claro, con su color oficial. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
52
|
+
| `white` | Sobre fondo oscuro o sobre foto. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
53
|
+
| `black` | No usar hoy. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
54
54
|
|
|
55
55
|
### `size`
|
|
56
56
|
|
|
57
57
|
| valor | px | cuándo | fuente |
|
|
58
58
|
|---|---|---|---|
|
|
59
|
-
| `xs` | 16 | Dentro de un texto o de un tag. |
|
|
60
|
-
| `sm` | 20 | Dentro de un botón (lo usa `sui-social-button`). |
|
|
61
|
-
| `md` (default) | 24 | Fila de una lista. |
|
|
62
|
-
| `lg` | 32 | Tarjeta de contacto (el tamaño del Figma). |
|
|
63
|
-
| `xl` | 40 | Tarjeta grande. |
|
|
64
|
-
| `2xl` | 48 | Lo pide `sui-content-label` en tamaño grande. |
|
|
59
|
+
| `xs` | 16 | Dentro de un texto o de un tag. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
60
|
+
| `sm` | 20 | Dentro de un botón (lo usa `sui-social-button`). | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
61
|
+
| `md` (default) | 24 | Fila de una lista o tarjeta de contacto, en la computadora, la tablet y el celular chico (ver «Por dispositivo (D16)»). | canon (aprobado por el dueño, 05-10-2026, bloque B1) · por dispositivo: D16, dueño 05-10-2026 |
|
|
62
|
+
| `lg` | 32 | Tarjeta de contacto o fila en el celular (380–767), un paso arriba del `md` de la computadora; es el tamaño del Figma. También el logo con `href` en la computadora (propuesta). | canon (aprobado por el dueño, 05-10-2026, bloque B1) · por dispositivo: D16, dueño 05-10-2026 |
|
|
63
|
+
| `xl` | 40 | Tarjeta grande. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
64
|
+
| `2xl` | 48 | Lo pide `sui-content-label` en tamaño grande. Y el logo con `href` en todo lo táctil: es el único que llega a 44. | canon (aprobado por el dueño, 05-10-2026, bloque B1) · con `href`: canon (dueño, 04-10-2026) |
|
|
65
65
|
|
|
66
66
|
### `href`, `target`, `rel`, `disabled`, `ariaLabel`
|
|
67
67
|
|
|
68
68
|
| input | cuándo | fuente |
|
|
69
69
|
|---|---|---|
|
|
70
|
-
| `href` + `target="_blank"` | El logo lleva a la red social. `rel` ya viene en `noopener noreferrer`. |
|
|
71
|
-
| `ariaLabel` | Con `href`, siempre: «Síguenos en Instagram». Sin `href`, el default («Logo de Instagram») alcanza. |
|
|
72
|
-
| `disabled` | No usar hoy. |
|
|
70
|
+
| `href` + `target="_blank"` | El logo lleva a la red social. `rel` ya viene en `noopener noreferrer`. | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
|
|
71
|
+
| `ariaLabel` | Con `href`, siempre: «Síguenos en Instagram». Sin `href`, el default («Logo de Instagram») alcanza. | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
|
|
72
|
+
| `disabled` | No usar hoy. | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
|
|
73
73
|
|
|
74
74
|
Usos de hoy que rompen la regla: **0**.
|
|
75
75
|
|
|
76
76
|
## Tamaño en mobile y en web
|
|
77
77
|
|
|
78
|
-
En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. Se elige
|
|
79
|
+
siempre con el servicio de breakpoints de la app (`bp`, en `services/breakpoints.service.ts`),
|
|
80
|
+
también en las pantallas que solo existen en el celular (cliente, repartidor): con D16 el celular
|
|
81
|
+
chico y la tablet llevan el valor de web en lo que no se toca (D16, dueño 05-10-2026). Todo es
|
|
82
|
+
**propuesta**, salvo lo marcado canon.
|
|
82
83
|
|
|
83
|
-
| uso | mobile | web |
|
|
84
|
-
|
|
85
|
-
| tarjeta de contacto, fila | `lg` (32) | `md` (24) |
|
|
86
|
-
| como link (con `href`, se toca) | `2xl` (48) | `lg` (32) |
|
|
84
|
+
| uso | mobile | web | fuente |
|
|
85
|
+
|---|---|---|---|
|
|
86
|
+
| tarjeta de contacto, fila | `lg` (32) | `md` (24) | canon (dueño, 05-10-2026, P1 b) |
|
|
87
|
+
| como link (con `href`, se toca) | `2xl` (48), también en la tablet táctil | `lg` (32) | mobile: canon (decisión del dueño 04-10-2026, piso táctil 44: `2xl` es el único size que llega) · tablet: D16, dueño 05-10-2026 (lo que se toca) · web: propuesta |
|
|
87
88
|
|
|
88
89
|
```html
|
|
89
|
-
<sui-brand-logo company="instagram" [size]="bp.
|
|
90
|
+
<sui-brand-logo company="instagram" [size]="bp.tactil() ? '2xl' : 'lg'" [href]="url" target="_blank"
|
|
90
91
|
ariaLabel="Síguenos en Instagram" />
|
|
91
92
|
```
|
|
92
93
|
|
|
@@ -94,6 +95,25 @@ Con `href` el logo **es** el área táctil: en mobile tiene que medir 44 px o m
|
|
|
94
95
|
tamaño que llega es `2xl` (48). Si se quiere un logo de 32 px tocable, el link va en un
|
|
95
96
|
contenedor de 44 px.
|
|
96
97
|
|
|
98
|
+
### Por dispositivo (D16)
|
|
99
|
+
|
|
100
|
+
Sin `href` no se toca: sigue la fila de `brand-logo` de D16 (sube un paso solo en el celular). Con
|
|
101
|
+
`href` se toca: va `2xl` en todo lo táctil.
|
|
102
|
+
|
|
103
|
+
| dispositivo | size | nota |
|
|
104
|
+
|---|---|---|
|
|
105
|
+
| celular chico (< 380) | `md` · con `href`: `2xl` | lo que no se toca va con el valor de web; el link no tiene otro size que llegue a 44 |
|
|
106
|
+
| celular (380–767) | `lg` · con `href`: `2xl` | el valor de mobile de la tabla de arriba |
|
|
107
|
+
| tablet táctil (`pointer: coarse`) | `md` · con `href`: `2xl` | se toca con el dedo: el link también pide 44 |
|
|
108
|
+
| computadora (`pointer: fine`) | `md` · con `href`: `lg` | el `lg` del link en la computadora sigue siendo propuesta |
|
|
109
|
+
|
|
110
|
+
Ultrawide: igual que la computadora.
|
|
111
|
+
|
|
112
|
+
En master-pedidos (no hay helper propio): `[size]="bp.celular() ? 'lg' : 'md'"` sin `href`;
|
|
113
|
+
`[size]="bp.tactil() ? '2xl' : 'lg'"` con `href`. Los size de la fila son los de «tarjeta de
|
|
114
|
+
contacto, fila»: en otro uso (`xs` en un texto, `xl` en una tarjeta grande) se sube un paso igual,
|
|
115
|
+
solo en `bp.celular()`.
|
|
116
|
+
|
|
97
117
|
## «No usar»: por qué no hoy y cuándo sí
|
|
98
118
|
|
|
99
119
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -131,13 +151,57 @@ Outputs: ninguno.
|
|
|
131
151
|
- Con `href` y `disabled` a la vez, no se vuelve link.
|
|
132
152
|
- El `aria-label` por defecto es «Logo de <Marca>» (en español desde el 04-10-2026); con `href` pasa uno que diga adónde lleva.
|
|
133
153
|
|
|
154
|
+
## Bien y mal
|
|
155
|
+
|
|
156
|
+
**Logo que lleva a la red del negocio**
|
|
157
|
+
|
|
158
|
+
```html
|
|
159
|
+
<!-- ❌ mal: con `href` el logo ES el área táctil, y `lg` (32) no llega a 44 en el celular -->
|
|
160
|
+
<sui-brand-logo company="instagram" size="lg" [href]="url" target="_blank"
|
|
161
|
+
ariaLabel="Síguenos en Instagram" />
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
```html
|
|
165
|
+
<!-- ✅ bien -->
|
|
166
|
+
<sui-brand-logo company="instagram" [size]="bp.tactil() ? '2xl' : 'lg'" [href]="url" target="_blank"
|
|
167
|
+
ariaLabel="Síguenos en Instagram" />
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Entrar con Google**
|
|
171
|
+
|
|
172
|
+
```html
|
|
173
|
+
<!-- ❌ mal: botón armado a mano con el logo adentro -->
|
|
174
|
+
<sui-button variant="stroke" color="neutral" [size]="bp.sizeControl()">
|
|
175
|
+
<sui-brand-logo company="google" size="sm" /> Continuar con Google
|
|
176
|
+
</sui-button>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```html
|
|
180
|
+
<!-- ✅ bien -->
|
|
181
|
+
<sui-social-button brand="google" variantStyle="stroke" [size]="bp.sizeControl()" label="Continuar con Google" />
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**WhatsApp como un ícono más del botón**
|
|
185
|
+
|
|
186
|
+
```html
|
|
187
|
+
<!-- ❌ mal: dentro de un botón la marca no es el contenido, y el <img> no toma el color del texto -->
|
|
188
|
+
<sui-button variant="stroke" color="neutral" [size]="bp.sizeControl()">
|
|
189
|
+
<sui-brand-logo company="whatsapp" size="sm" /> Escríbenos
|
|
190
|
+
</sui-button>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```html
|
|
194
|
+
<!-- ✅ bien -->
|
|
195
|
+
<sui-button variant="stroke" color="neutral" [size]="bp.sizeControl()" leftIcon="whatsapp-line">Escríbenos</sui-button>
|
|
196
|
+
```
|
|
197
|
+
|
|
134
198
|
## Ejemplo
|
|
135
199
|
|
|
136
200
|
```html
|
|
137
|
-
<!-- Tarjeta de soporte -->
|
|
138
|
-
<sui-brand-logo company="whatsapp" size="lg" />
|
|
201
|
+
<!-- Tarjeta de soporte: no se toca, sube un paso solo en el celular -->
|
|
202
|
+
<sui-brand-logo company="whatsapp" [size]="bp.celular() ? 'lg' : 'md'" />
|
|
139
203
|
|
|
140
|
-
<!-- Red del negocio, como link -->
|
|
141
|
-
<sui-brand-logo company="instagram" size="2xl" [href]="tenant.instagramUrl" target="_blank"
|
|
204
|
+
<!-- Red del negocio, como link: se toca, 2xl en todo lo táctil -->
|
|
205
|
+
<sui-brand-logo company="instagram" [size]="bp.tactil() ? '2xl' : 'lg'" [href]="tenant.instagramUrl" target="_blank"
|
|
142
206
|
ariaLabel="Síguenos en Instagram" />
|
|
143
207
|
```
|
|
@@ -31,11 +31,11 @@ desplegable al lado o un separador propio. Hoy no hay ningún caso.
|
|
|
31
31
|
| input | valor | cuándo | fuente |
|
|
32
32
|
|---|---|---|---|
|
|
33
33
|
| `label` | texto | El nombre del nivel. | según la guía del DS |
|
|
34
|
-
| `icon` | nombre RemixIcon | Solo el primer nivel (inicio), y con `ariaLabel` si va sin texto. | según la guía del DS (el ícono existe); el cuándo
|
|
34
|
+
| `icon` | nombre RemixIcon | Solo el primer nivel (inicio), y con `ariaLabel` si va sin texto. | según la guía del DS (el ícono existe); el cuándo: canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
35
35
|
| `href` | ruta | Con ruta: dibuja un `<a>`; una ruta interna (`/…`) navega con el router sin recargar. | según la guía del DS (como enlace) |
|
|
36
36
|
| `href` | vacío | Dibuja un `<button>` y avisa por `(clicked)`. | según el código |
|
|
37
37
|
| `active` | `true` | La página actual: no es clicable, va en negro y lleva `aria-current="page"`. | según la guía del DS |
|
|
38
|
-
| `ariaLabel` | texto | Obligatorio cuando va solo el ícono. |
|
|
38
|
+
| `ariaLabel` | texto | Obligatorio cuando va solo el ícono. | canon (aprobado por el dueño, 05-10-2026, bloque B5) |
|
|
39
39
|
|
|
40
40
|
Usos de hoy que rompen las reglas: **0** (no se usa).
|
|
41
41
|
|
|
@@ -46,12 +46,23 @@ no se usa en mobile.
|
|
|
46
46
|
|
|
47
47
|
| uso | mobile | web | fuente |
|
|
48
48
|
|---|---|---|---|
|
|
49
|
-
| miga | no se usa | el componente (dentro de `sui-breadcrumbs`) |
|
|
49
|
+
| miga | no se usa | el componente (dentro de `sui-breadcrumbs`) | canon (aprobado por el dueño, 05-10-2026, bloque B7) |
|
|
50
50
|
|
|
51
51
|
```html
|
|
52
52
|
@if (!bp.isMobile()) { <sui-breadcrumbs [items]="ruta()" /> }
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
+
### Por dispositivo (D16)
|
|
56
|
+
|
|
57
|
+
No aplica: no tiene `size` y mide 20 px fijos en todo dispositivo. Ni la miga ni `sui-breadcrumbs`
|
|
58
|
+
se ocultan solos (no tienen `@media` ni lógica para eso): **lo decide la pantalla que usa la ruta**,
|
|
59
|
+
con su propio `@if (!bp.isMobile())`. Con eso no se muestra en el celular chico ni en el celular, y
|
|
60
|
+
sí en la computadora y el ultrawide. En la tablet táctil con 768 px o más `bp.isMobile()` es falso, la
|
|
61
|
+
ruta se muestra y la miga de 20 px no llega al piso de 44 de lo táctil: no hay size que lo arregle y
|
|
62
|
+
queda sin decidir, igual que en `sui-breadcrumbs`.
|
|
63
|
+
|
|
64
|
+
En master-pedidos: sin `[size]`; la pantalla envuelve `sui-breadcrumbs` en `@if (!bp.isMobile())`.
|
|
65
|
+
|
|
55
66
|
## «No usar»: por qué no hoy y cuándo sí
|
|
56
67
|
|
|
57
68
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -85,6 +96,46 @@ no se usa en mobile.
|
|
|
85
96
|
`SuiBreadcrumbEntry`. No son lo mismo.
|
|
86
97
|
- No trae separador: el separador lo pone `sui-breadcrumbs`.
|
|
87
98
|
|
|
99
|
+
## Bien y mal
|
|
100
|
+
|
|
101
|
+
**Ruta armada a mano**
|
|
102
|
+
|
|
103
|
+
```html
|
|
104
|
+
<!-- ❌ mal: separador propio y activo a mano; sui-breadcrumbs ya hace las dos cosas -->
|
|
105
|
+
<sui-breadcrumb-item label="Productos" href="/empresa/productos" />
|
|
106
|
+
<sui-icon name="arrow-right-s-line" />
|
|
107
|
+
<sui-breadcrumb-item label="Hamburguesas" [active]="true" />
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
```html
|
|
111
|
+
<!-- ✅ bien -->
|
|
112
|
+
<sui-breadcrumbs [items]="[{ label: 'Productos', href: '/empresa/productos' }, { label: 'Hamburguesas' }]" />
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Inicio solo con el ícono**
|
|
116
|
+
|
|
117
|
+
```html
|
|
118
|
+
<!-- ❌ mal: sin texto ni `ariaLabel`, el lector de pantalla no dice adónde lleva -->
|
|
119
|
+
<sui-breadcrumb-item icon="home-5-line" href="/empresa/inicio" />
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
```html
|
|
123
|
+
<!-- ✅ bien -->
|
|
124
|
+
<sui-breadcrumb-item icon="home-5-line" ariaLabel="Inicio" href="/empresa/inicio" />
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Navegar dos veces**
|
|
128
|
+
|
|
129
|
+
```html
|
|
130
|
+
<!-- ❌ mal: con `href` el clic ya navega y además emite `clicked` -->
|
|
131
|
+
<sui-breadcrumb-item label="Productos" href="/empresa/productos" (clicked)="router.navigateByUrl('/empresa/productos')" />
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
```html
|
|
135
|
+
<!-- ✅ bien -->
|
|
136
|
+
<sui-breadcrumb-item label="Productos" href="/empresa/productos" />
|
|
137
|
+
```
|
|
138
|
+
|
|
88
139
|
## Ejemplo
|
|
89
140
|
|
|
90
141
|
```html
|
|
@@ -38,17 +38,17 @@ Regla corta: **3+ niveles en web → breadcrumbs · mobile o 1-2 niveles → fle
|
|
|
38
38
|
| divider | cuándo | fuente |
|
|
39
39
|
|---|---|---|
|
|
40
40
|
| `arrow` (default) | Siempre en la app. | según la guía del DS (es su default) |
|
|
41
|
-
| `slash` | No: misma función que la flecha; dos estilos en la misma app se leen como dos cosas. | según la guía del DS (la forma existe); el no
|
|
42
|
-
| `dot` | No: el punto separa metadatos («12 min · S/ 4.50»), no niveles. Extensión de SUI. |
|
|
41
|
+
| `slash` | No: misma función que la flecha; dos estilos en la misma app se leen como dos cosas. | según la guía del DS (la forma existe); el no: canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
42
|
+
| `dot` | No: el punto separa metadatos («12 min · S/ 4.50»), no niveles. Extensión de SUI. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
43
43
|
|
|
44
44
|
### Ítems (`items`)
|
|
45
45
|
|
|
46
46
|
| qué | cuándo | fuente |
|
|
47
47
|
|---|---|---|
|
|
48
48
|
| `label` | Siempre el nombre real del nivel («Hamburguesas», no «Categoría»). Un id nunca es el nombre. | canon (CLAUDE.md, «un identificador nunca es el título de nada») |
|
|
49
|
-
| `href` | Cada nivel anterior con su ruta interna (`/empresa/productos`): navega con el router, sin recargar. |
|
|
50
|
-
| sin `href` + `(navigate)` | Cuando volver no es una ruta (cerrar un panel, limpiar un filtro). |
|
|
51
|
-
| `icon` solo en el primero | El inicio como casa (`home-5-line`) con `ariaLabel`. | según la guía del DS (ítems con ícono); el cuándo
|
|
49
|
+
| `href` | Cada nivel anterior con su ruta interna (`/empresa/productos`): navega con el router, sin recargar. | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
|
|
50
|
+
| sin `href` + `(navigate)` | Cuando volver no es una ruta (cerrar un panel, limpiar un filtro). | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
|
|
51
|
+
| `icon` solo en el primero | El inicio como casa (`home-5-line`) con `ariaLabel`. | según la guía del DS (ítems con ícono); el cuándo: canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
52
52
|
| `active` | No hace falta: el último ya es el activo. Solo si la página actual no va al final (raro). | según el código |
|
|
53
53
|
|
|
54
54
|
Usos de hoy que rompen las reglas: **0** (no se usa).
|
|
@@ -59,7 +59,7 @@ Alto fijo de **20 px** (texto 14, ícono 20), sin `size`. **No tiene tamaño par
|
|
|
59
59
|
|
|
60
60
|
| uso | mobile | web | fuente |
|
|
61
61
|
|---|---|---|---|
|
|
62
|
-
| ruta de 3+ niveles | no se usa: flecha de volver | `sui-breadcrumbs` |
|
|
62
|
+
| ruta de 3+ niveles | no se usa: flecha de volver | `sui-breadcrumbs` | canon (aprobado por el dueño, 05-10-2026, bloque B7) |
|
|
63
63
|
|
|
64
64
|
```html
|
|
65
65
|
@if (!bp.isMobile()) {
|
|
@@ -67,6 +67,16 @@ Alto fijo de **20 px** (texto 14, ícono 20), sin `size`. **No tiene tamaño par
|
|
|
67
67
|
}
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
+
### Por dispositivo (D16)
|
|
71
|
+
|
|
72
|
+
No aplica: no tiene `size` y sus migas miden 20 px fijos (texto 14, ícono 20) en todo dispositivo;
|
|
73
|
+
lo que cambia por dispositivo es si se muestra, no su tamaño. En el celular chico y el celular no se
|
|
74
|
+
usa (flecha de volver); en la computadora y el ultrawide va tal cual. En la tablet táctil con 768 px o
|
|
75
|
+
más `bp.isMobile()` es falso y la ruta se muestra, con migas de 20 px que no llegan al piso de 44 de
|
|
76
|
+
lo táctil: no hay size que lo arregle y no está decidido si se oculta también ahí.
|
|
77
|
+
|
|
78
|
+
En master-pedidos: sin `[size]`; se muestra con `@if (!bp.isMobile())`.
|
|
79
|
+
|
|
70
80
|
## «No usar»: por qué no hoy y cuándo sí
|
|
71
81
|
|
|
72
82
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -111,6 +121,44 @@ type SuiBreadcrumbDivider = 'arrow' | 'slash' | 'dot';
|
|
|
111
121
|
- El host dice `aria-label="Ruta de navegación"` (hasta el 03-10-2026, «Breadcrumb») y no se puede cambiar.
|
|
112
122
|
- `SuiBreadcrumbEntry` (los datos) no es `SuiBreadcrumbItem` (el componente de cada miga).
|
|
113
123
|
|
|
124
|
+
## Bien y mal
|
|
125
|
+
|
|
126
|
+
**Ruta en el celular**
|
|
127
|
+
|
|
128
|
+
```html
|
|
129
|
+
<!-- ❌ mal: en 390 px la fila se corta y compite con el título -->
|
|
130
|
+
<sui-breadcrumbs [items]="ruta()" />
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
```html
|
|
134
|
+
<!-- ✅ bien -->
|
|
135
|
+
@if (!bp.isMobile()) { <sui-breadcrumbs [items]="ruta()" /> }
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**El nombre del nivel**
|
|
139
|
+
|
|
140
|
+
```html
|
|
141
|
+
<!-- ❌ mal: un id nunca es el nombre de nada -->
|
|
142
|
+
<sui-breadcrumbs [items]="[{ label: 'Productos', href: '/empresa/productos' }, { label: producto.id }]" />
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
```html
|
|
146
|
+
<!-- ✅ bien -->
|
|
147
|
+
<sui-breadcrumbs [items]="[{ label: 'Productos', href: '/empresa/productos' }, { label: producto.name }]" />
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Navegar dos veces**
|
|
151
|
+
|
|
152
|
+
```html
|
|
153
|
+
<!-- ❌ mal: los ítems con `href` ya navegan; `navigate` sale igual y vuelve a navegar -->
|
|
154
|
+
<sui-breadcrumbs [items]="ruta()" (navigate)="router.navigateByUrl($event.href ?? '')" />
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
```html
|
|
158
|
+
<!-- ✅ bien: con `href`, sin `(navigate)` -->
|
|
159
|
+
<sui-breadcrumbs [items]="ruta()" />
|
|
160
|
+
```
|
|
161
|
+
|
|
114
162
|
## Ejemplo
|
|
115
163
|
|
|
116
164
|
```html
|
|
@@ -98,13 +98,14 @@ Uso medido el 04-10-2026: 123 `large`, 93 `small`, 58 `medium` (5 por default),
|
|
|
98
98
|
| size | cuándo | fuente |
|
|
99
99
|
|---|---|---|
|
|
100
100
|
| `large` (48 px) | Footers de modal y CTA táctiles en mobile. | ya es canon (default de sui-modal-footer); extensión de SUI, la guía no lo tiene |
|
|
101
|
-
| `medium` (40 px, default) |
|
|
102
|
-
| `small` (36) / `xsmall` (32) |
|
|
103
|
-
| `2xsmall` (28) |
|
|
101
|
+
| `medium` (40 px, default) | Todo botón en la computadora: CTA, formularios, acciones de cards, filas, cabeceras y tablas. En el celular chico (< 380 px), a la vista, con el área de 44. La tablet va como el celular. | default según la guía del DS; el «cuándo»: canon (aprobado por el dueño, 05-10-2026, bloque B1) y, para filas, cabeceras y tablas, canon (dueño, 05-10-2026, D16); solo en web (en el teléfono manda el piso táctil de 44) |
|
|
102
|
+
| `small` (36) / `xsmall` (32) | No usar: son chicos. Las acciones de cards, filas y cabeceras van en `medium` en web y `large` en el teléfono. | escala según la guía del DS; no usarlos: canon (dueño, 05-10-2026, D16), reemplaza el «cuándo» del bloque B13 |
|
|
103
|
+
| `2xsmall` (28) | No usar: es chico. Las acciones de ícono en tablas van en `medium` `onlyIcon`; si de verdad no entra, `sui-compact-button`. | escala según la guía del DS; no usarlo: canon (dueño, 05-10-2026, D16), reemplaza el «cuándo» del bloque B13 |
|
|
104
104
|
| `xlarge` (52) | Extensión de SUI. Sin uso hoy. | canon (aprobado por el dueño, 03-10-2026) |
|
|
105
105
|
|
|
106
|
-
En la app el patrón responsive
|
|
107
|
-
`bp.controlSize()`
|
|
106
|
+
En la app el patrón responsive es `[size]="bp.sizeControl()"`: `large` en el celular y la tablet
|
|
107
|
+
táctil, `medium` en la computadora (D16, dueño 05-10-2026). **No uses `bp.controlSize()` en un
|
|
108
|
+
botón**: es el de checkbox/radio/switch y da `large` en la computadora. Ver «Por dispositivo (D16)».
|
|
108
109
|
|
|
109
110
|
## «No usar»: por qué no hoy y cuándo sí
|
|
110
111
|
|
|
@@ -127,20 +128,26 @@ flujo nuevo cae en la columna de la derecha, se usa (aprobado por el dueño, 03-
|
|
|
127
128
|
## Tamaño en mobile y en web
|
|
128
129
|
|
|
129
130
|
En mobile se toca con el dedo: **44 px como mínimo** (piso táctil, canon del dueño 04-10-2026) y 48
|
|
130
|
-
en la acción principal. En
|
|
131
|
+
en la acción principal. En la computadora, `medium` (40); la tablet va como el celular; en el celular chico
|
|
132
|
+
(< 380 px), `medium` a la vista con el área de 44. Nada en `small`, `xsmall` ni `2xsmall` (canon, dueño,
|
|
133
|
+
05-10-2026, D16).
|
|
131
134
|
|
|
132
135
|
| uso | mobile | web | fuente |
|
|
133
136
|
|---|---|---|---|
|
|
134
137
|
| acción principal de la pantalla o footer de modal | `large` (48) | `medium` (40) | canon (aprobado por el dueño, 03-10-2026) (footer de modal siempre `large`) |
|
|
135
|
-
| acción dentro de una card o una fila | `large` (48) | `
|
|
136
|
-
| acción en una tabla
|
|
138
|
+
| acción dentro de una card o una fila | `large` (48) | `medium` (40) | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono — antes `medium` (40), que no llega · web: canon (dueño, 05-10-2026, D16), antes `small` / `xsmall` |
|
|
139
|
+
| acción en una tabla | — (no hay tablas en mobile) | `medium` (40) | canon (dueño, 05-10-2026, D16), antes `2xsmall` (03-10-2026) |
|
|
137
140
|
| CTA de landing | `xlarge` (52) | `large` (48) | propuesta, falta aprobación |
|
|
138
141
|
|
|
139
|
-
Patrón (`bp` = `BreakpointsService
|
|
140
|
-
|
|
142
|
+
Patrón (`bp` = `BreakpointsService`). Medido el 06-10-2026 en `master-pedidos/src/app`, sin
|
|
143
|
+
prototipos ni vitrinas: 399 de 412 `sui-button` ya van con `bp.sizeControl()`; quedan 5 con
|
|
144
|
+
`sizeAccionesCard()` de `master-drivers.ts:243` (`bp.isMobile()` solo: deja la tablet en `medium`),
|
|
145
|
+
1 con `bp.controlSize()` (`checkout.html:392`), 1 en `small` (`notifications.html:50`), 2 sin
|
|
146
|
+
`size` y 4 en `large` fijo (2 en el footer de `copy-text-dialog`, donde va bien; `cart.html:190` y
|
|
147
|
+
`master-orders.html:662` no son footer de modal y en la computadora irían en `medium`):
|
|
141
148
|
|
|
142
149
|
```html
|
|
143
|
-
<sui-button [size]="bp.
|
|
150
|
+
<sui-button [size]="bp.sizeControl()" …/>
|
|
144
151
|
```
|
|
145
152
|
|
|
146
153
|
### Piso táctil de 44 en el teléfono (canon, dueño 04-10-2026)
|
|
@@ -179,6 +186,23 @@ Vale para todos los componentes que tienen `size` `large` / `xlarge`:
|
|
|
179
186
|
En large y xlarge el texto sube a 16 px (regla del 03-10-2026): el botón ya usa Label/Medium 16/24
|
|
180
187
|
en esos dos tamaños.
|
|
181
188
|
|
|
189
|
+
### Por dispositivo (D16)
|
|
190
|
+
|
|
191
|
+
Fila `button` de la tabla D16 (dueño, 05-10-2026). Se toca, así que va por tipo de puntero además
|
|
192
|
+
del ancho.
|
|
193
|
+
|
|
194
|
+
| dispositivo | size | nota |
|
|
195
|
+
|---|---|---|
|
|
196
|
+
| celular chico (< 380 px) | `large` (48) | D16 pide `medium` con área tocable de 44; mientras el DS no estire el área de los `medium`, va `large` (interino) |
|
|
197
|
+
| celular (380–767 px) | `large` (48) | |
|
|
198
|
+
| tablet táctil (`pointer: coarse`) | `large` (48) | también se toca con el dedo: Apple pide 44 pt en el iPad |
|
|
199
|
+
| computadora (`pointer: fine`) | `medium` (40) | también en tablas, filas y cabeceras; `small`, `xsmall` y `2xsmall` no se usan |
|
|
200
|
+
|
|
201
|
+
Footer de modal: `large` en todos (D2). Ultrawide (≥ 1920 px): igual que la computadora, `medium`;
|
|
202
|
+
el espacio extra va a ancho y columnas, no a botones más grandes.
|
|
203
|
+
|
|
204
|
+
En master-pedidos: `[size]="bp.sizeControl()"`.
|
|
205
|
+
|
|
182
206
|
## API
|
|
183
207
|
|
|
184
208
|
<!-- api:inicio -->
|
|
@@ -234,6 +258,46 @@ interface SuiFooterButtonConfig {
|
|
|
234
258
|
disabled propio desde afuera.
|
|
235
259
|
- Ya trae el arreglo de iOS para el `:active` pegado (`touchstart`/`touchend`): no lo agregues.
|
|
236
260
|
|
|
261
|
+
## Bien y mal
|
|
262
|
+
|
|
263
|
+
**Botón de ícono en una cabecera**
|
|
264
|
+
|
|
265
|
+
```html
|
|
266
|
+
<!-- ❌ mal: small (36) no llega a 44 en el teléfono y en la computadora va medium (pages/notifications/notifications.html:50) -->
|
|
267
|
+
<sui-button variant="stroke" color="neutral" size="small" [onlyIcon]="true" leftIcon="check-double-line"
|
|
268
|
+
aria-label="Marcar todas como leídas" (click)="markAllAsRead()" />
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
```html
|
|
272
|
+
<!-- ✅ bien -->
|
|
273
|
+
<sui-button variant="stroke" color="neutral" [size]="bp.sizeControl()" [onlyIcon]="true" leftIcon="check-double-line"
|
|
274
|
+
aria-label="Marcar todas como leídas" (click)="markAllAsRead()" />
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
**El helper equivocado para el tamaño**
|
|
278
|
+
|
|
279
|
+
```html
|
|
280
|
+
<!-- ❌ mal: controlSize() es de checkbox/radio/switch y da large en la computadora (pages/customer/checkout/checkout.html:392) -->
|
|
281
|
+
<sui-button [size]="bp.controlSize()" (click)="applyCoupon()">Aplicar</sui-button>
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
```html
|
|
285
|
+
<!-- ✅ bien: large en celular y tablet táctil, medium en la computadora -->
|
|
286
|
+
<sui-button [size]="bp.sizeControl()" (click)="applyCoupon()">Aplicar</sui-button>
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**El botón que abre una confirmación de borrar**
|
|
290
|
+
|
|
291
|
+
```html
|
|
292
|
+
<!-- ❌ mal: filled error es para confirmar; este solo abre el modal (pages/empresa/about/about.html:46, igual en repartidor/about) -->
|
|
293
|
+
<sui-button variant="filled" color="error" [size]="bp.sizeControl()" (click)="openDeleteModal()">Eliminar mi cuenta</sui-button>
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
```html
|
|
297
|
+
<!-- ✅ bien: stroke error abre; el filled error queda para el «Sí, eliminar» del modal -->
|
|
298
|
+
<sui-button variant="stroke" color="error" [size]="bp.sizeControl()" (click)="openDeleteModal()">Eliminar mi cuenta</sui-button>
|
|
299
|
+
```
|
|
300
|
+
|
|
237
301
|
## Ejemplo
|
|
238
302
|
|
|
239
303
|
```html
|
|
@@ -247,6 +311,6 @@ interface SuiFooterButtonConfig {
|
|
|
247
311
|
</sui-button>
|
|
248
312
|
|
|
249
313
|
<!-- Solo ícono -->
|
|
250
|
-
<sui-button variant="ghost" color="neutral" size="
|
|
314
|
+
<sui-button variant="ghost" color="neutral" [size]="bp.sizeControl()" leftIcon="pencil-line" [onlyIcon]="true"
|
|
251
315
|
aria-label="Editar" (click)="editar()" />
|
|
252
316
|
```
|