@ajuarezso/sui-design-system 0.25.0 → 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 +83 -9
- package/docs/sui-activity-feed/README.md +55 -1
- package/docs/sui-activity-filter/README.md +50 -1
- package/docs/sui-alert/README.md +54 -0
- package/docs/sui-app-store-badge/README.md +57 -3
- package/docs/sui-avatar/README.md +66 -6
- package/docs/sui-avatar-group/README.md +64 -2
- package/docs/sui-badge/README.md +79 -11
- package/docs/sui-banner/README.md +70 -5
- package/docs/sui-brand-logo/README.md +77 -14
- package/docs/sui-breadcrumb-item/README.md +51 -0
- package/docs/sui-breadcrumbs/README.md +48 -0
- package/docs/sui-button/README.md +68 -6
- package/docs/sui-button-group/README.md +70 -5
- package/docs/sui-button-group-item/README.md +68 -4
- package/docs/sui-card/README.md +97 -10
- package/docs/sui-chart-legend/README.md +53 -0
- package/docs/sui-chart-legend-dot/README.md +49 -0
- package/docs/sui-checkbox/README.md +106 -26
- package/docs/sui-checkbox-card/README.md +58 -2
- package/docs/sui-checkbox-label/README.md +89 -23
- package/docs/sui-circular-progress-bar/README.md +63 -5
- package/docs/sui-color-dot/README.md +61 -5
- package/docs/sui-color-picker/README.md +62 -4
- package/docs/sui-command-menu-footer/README.md +49 -0
- package/docs/sui-command-menu-item/README.md +63 -4
- package/docs/sui-command-menu-search/README.md +58 -4
- package/docs/sui-compact-avatar-group/README.md +61 -4
- package/docs/sui-compact-button/README.md +112 -28
- package/docs/sui-compact-select/README.md +58 -4
- package/docs/sui-compact-select-for-input/README.md +69 -5
- package/docs/sui-content-card/README.md +63 -2
- package/docs/sui-content-divider/README.md +49 -1
- package/docs/sui-content-label/README.md +83 -4
- package/docs/sui-counter-input/README.md +91 -7
- package/docs/sui-date-selector/README.md +61 -3
- package/docs/sui-datepicker/README.md +72 -5
- package/docs/sui-day-cell/README.md +60 -3
- package/docs/sui-day-label/README.md +52 -3
- package/docs/sui-divider/README.md +57 -5
- package/docs/sui-drawer-footer/README.md +63 -2
- package/docs/sui-drawer-header/README.md +60 -3
- package/docs/sui-dropdown-caption/README.md +53 -1
- package/docs/sui-dropdown-item/README.md +72 -6
- package/docs/sui-dropdown-menu/README.md +74 -5
- package/docs/sui-dropdown-search/README.md +57 -1
- package/docs/sui-emoji/README.md +82 -18
- package/docs/sui-empty-state/README.md +68 -4
- package/docs/sui-fancy-button/README.md +59 -1
- package/docs/sui-file-icon/README.md +56 -1
- package/docs/sui-file-upload/README.md +69 -9
- package/docs/sui-file-upload-card/README.md +53 -2
- package/docs/sui-filter/README.md +74 -5
- package/docs/sui-flag/README.md +62 -1
- package/docs/sui-form-hint/README.md +54 -5
- package/docs/sui-form-label/README.md +53 -1
- package/docs/sui-href/README.md +47 -0
- package/docs/sui-icon/README.md +69 -4
- package/docs/sui-image-upload/README.md +70 -3
- package/docs/sui-image-upload-profile/README.md +58 -0
- package/docs/sui-img-retry/README.md +49 -0
- package/docs/sui-inline-input/README.md +61 -3
- package/docs/sui-inline-select/README.md +60 -0
- package/docs/sui-input/README.md +77 -14
- package/docs/sui-integration-switch/README.md +69 -2
- package/docs/sui-kbd/README.md +71 -7
- package/docs/sui-key-icon/README.md +65 -6
- package/docs/sui-link-button/README.md +79 -13
- package/docs/sui-logo/README.md +74 -4
- package/docs/sui-modal/README.md +61 -2
- package/docs/sui-modal-footer/README.md +83 -9
- package/docs/sui-modal-header/README.md +56 -0
- package/docs/sui-modal-sheet/README.md +72 -10
- package/docs/sui-notification/README.md +71 -1
- package/docs/sui-notification-footer/README.md +51 -1
- package/docs/sui-notification-tab-menu/README.md +57 -1
- package/docs/sui-otp-input/README.md +67 -6
- package/docs/sui-page-header/README.md +83 -15
- package/docs/sui-pagination/README.md +60 -0
- package/docs/sui-password-strength/README.md +50 -1
- package/docs/sui-payment-icon/README.md +66 -7
- package/docs/sui-period-range/README.md +65 -6
- package/docs/sui-popover/README.md +73 -7
- package/docs/sui-product-card/README.md +76 -8
- package/docs/sui-progress-bar/README.md +72 -8
- package/docs/sui-progress-bar-label/README.md +69 -12
- package/docs/sui-radio/README.md +83 -6
- package/docs/sui-radio-card/README.md +58 -4
- package/docs/sui-radio-label/README.md +86 -19
- package/docs/sui-rating/README.md +81 -14
- package/docs/sui-rich-editor/README.md +45 -0
- package/docs/sui-segmented-control/README.md +83 -14
- package/docs/sui-select/README.md +72 -3
- package/docs/sui-sidebar/README.md +64 -9
- package/docs/sui-slider/README.md +68 -1
- package/docs/sui-social-button/README.md +63 -3
- package/docs/sui-status-badge/README.md +64 -6
- package/docs/sui-stepper/README.md +57 -0
- package/docs/sui-store-card/README.md +71 -8
- package/docs/sui-switch/README.md +80 -9
- package/docs/sui-switch-card/README.md +70 -6
- package/docs/sui-switch-label/README.md +90 -13
- package/docs/sui-tab-chips/README.md +79 -9
- package/docs/sui-tab-menu-horizontal/README.md +62 -1
- package/docs/sui-tab-menu-vertical/README.md +56 -3
- package/docs/sui-table/README.md +68 -7
- package/docs/sui-tag/README.md +75 -4
- package/docs/sui-tag-input/README.md +71 -7
- package/docs/sui-textarea/README.md +78 -11
- package/docs/sui-time-picker/README.md +70 -7
- package/docs/sui-toast/README.md +65 -5
- package/docs/sui-tooltip/README.md +61 -4
- package/docs/sui-topbar/README.md +57 -3
- package/docs/sui-topbar-button/README.md +57 -3
- package/docs/sui-topbar-item/README.md +61 -0
- package/docs/sui-topbar-user/README.md +56 -0
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +19 -19
package/docs/sui-badge/README.md
CHANGED
|
@@ -77,7 +77,7 @@ Regla corta: **etiqueta, número o estado con muchos valores → badge · comple
|
|
|
77
77
|
fijos y los ternarios legibles en el template; el resto de los 77 dinámicos, que salen de
|
|
78
78
|
funciones o campos, no):
|
|
79
79
|
|
|
80
|
-
- **5 casos.** «Pendiente» en `red`: `pages/super-admin/super-admin.html:
|
|
80
|
+
- **5 casos.** «Pendiente» en `red`: `pages/super-admin/super-admin.html:637`. «Pendiente» en
|
|
81
81
|
`yellow` (ausente): `pages/super-admin/master-gastos/master-gastos.html:67` y `:115`. «No cuadra»
|
|
82
82
|
en `yellow`: `pages/super-admin/master-gastos/master-gastos.html:60` y `:129`. Los cinco pasan a
|
|
83
83
|
`orange`.
|
|
@@ -117,7 +117,7 @@ un paso más fuerte con texto **oscuro**; `filled` = fondo saturado con texto bl
|
|
|
117
117
|
|
|
118
118
|
- **16 `light` → `lighter`** (salvo que estén sobre superficie teñida; no se verificó
|
|
119
119
|
renderizado). Ejemplos: `pages/super-admin/master-drivers/master-drivers.html:781`, `:783`, `:785`,
|
|
120
|
-
`pages/super-admin/master-users/master-user-sheet.html:44`, `pages/reports/reports.html:
|
|
120
|
+
`pages/super-admin/master-users/master-user-sheet.html:44`, `pages/reports/reports.html:217`.
|
|
121
121
|
- **1 `filled` como metadato → `lighter`:** `pages/customer/profile/profile.html:122` («Por defecto»).
|
|
122
122
|
A discutir: `pages/public/pricing/pricing.html:37` (el «Popular» del plan destacado).
|
|
123
123
|
- **1 `lighter` sobre superficie oscura → `dark`:** `pages/mi-negocio/mi-negocio.html:89` («Mes gratis»).
|
|
@@ -126,8 +126,7 @@ un paso más fuerte con texto **oscuro**; `filled` = fondo saturado con texto bl
|
|
|
126
126
|
|
|
127
127
|
| eje | valor | cuándo | fuente |
|
|
128
128
|
|---|---|---|---|
|
|
129
|
-
| `size` | `small` (default, 16 px) |
|
|
130
|
-
| `size` | `small` | No usar: es chico (D16). Hasta el 05-10-2026 era el normal de web, en mayúsculas. | canon (dueño, 05-10-2026, D16); reemplaza la regla del 03-10-2026 |
|
|
129
|
+
| `size` | `small` (default, 16 px) | **No usar**: es chico (D16). Es el default del componente, así que hay que pasar `size` siempre. Va en MAYÚSCULAS (eso sí es de la guía). Hasta el 05-10-2026 era el normal de web. | D16, dueño 05-10-2026 (reemplaza la regla del 03-10-2026) · mayúsculas y default: según la guía del DS |
|
|
131
130
|
| `size` | `medium` (20 px) | **Lo normal en la computadora, la tablet y el celular chico** (el badge no se toca), sin mayúsculas. En el celular, `large` o `xlarge` (ver «Tamaño»). | canon (dueño, 05-10-2026, D16); antes, canon del 03-10-2026 solo para nombres, montos y títulos grandes |
|
|
132
131
|
| `type` | `number` | **Números**: queda cuadrado/circular. | según la guía del DS |
|
|
133
132
|
| `type` | `number` | Va con `filled` cuando el conteo pide acción. | canon (aprobado por el dueño, 03-10-2026) |
|
|
@@ -179,14 +178,45 @@ canon (dueño, 04-10-2026):** el badge mantiene su escala propia 12 / 14 / 16 (`
|
|
|
179
178
|
| junto a un título o un monto | `xlarge` (28) | `medium` (20) | canon (dueño, 05-10-2026, P1 b) |
|
|
180
179
|
| conteo (`type="number"`) | `large` (24) | `medium` (20) | canon (dueño, 05-10-2026, P1 b); web `medium`: canon (dueño, 05-10-2026, D16) · antes de migrar, ver en captura que el contador de 24 no tape el ícono de la barra inferior |
|
|
181
180
|
|
|
182
|
-
Patrón (`bp` = `BreakpointsService
|
|
183
|
-
|
|
184
|
-
`
|
|
181
|
+
Patrón (`bp` = `BreakpointsService`). Medido el 06-10-2026 en `master-pedidos/src/app` (sin
|
|
182
|
+
`master-preview`, `master-prototipos`, `mockup-sheets-*`, `dx/*`, `master-rutina`, `master-medico`
|
|
183
|
+
ni `dev-index`): 211 de los 228 badges ya van con `bp.sizeBadge()`. Quedan **17 fijos**:
|
|
184
|
+
|
|
185
|
+
- **2 en `small`**, el conteo de la barra inferior: `components/glass-tab-bar/glass-tab-bar.html:16`
|
|
186
|
+
y `:33` (pendiente de ver en captura que el de 24 no tape el ícono).
|
|
187
|
+
- **15 en `medium`**, que en el celular no suben (van a `large`, o a `xlarge` si están junto a un
|
|
188
|
+
título o un monto, según la tabla de arriba):
|
|
189
|
+
`components/product-categories/product-categories.html:17` y `:52`,
|
|
190
|
+
`components/total-sales/total-sales.html:20`, `components/metrics-cards/metrics-cards.html:15`,
|
|
191
|
+
`pages/products/products.html:61`, `pages/customers/customers.html:16`,
|
|
192
|
+
`pages/discounts/discounts.html:20`,
|
|
193
|
+
`pages/super-admin/master-semanas/master-semanas.html:26`, `:40`, `:52` y `:64`,
|
|
194
|
+
`pages/overview/components/overview-visitors/overview-visitors.html:11`,
|
|
195
|
+
`pages/overview/components/overview-conversion/overview-conversion.html:11`,
|
|
196
|
+
`pages/overview/components/overview-sales/overview-sales.html:11` y
|
|
197
|
+
`pages/reports/reports.html:40`.
|
|
185
198
|
|
|
186
199
|
```html
|
|
187
|
-
<sui-badge [size]="bp.
|
|
200
|
+
<sui-badge [size]="bp.sizeBadge()" …/>
|
|
188
201
|
```
|
|
189
202
|
|
|
203
|
+
### Por dispositivo (D16)
|
|
204
|
+
|
|
205
|
+
El badge no se toca: sube **solo en el celular de 380 px o más**. Fuente: D16, dueño 05-10-2026.
|
|
206
|
+
|
|
207
|
+
| dispositivo | size | nota |
|
|
208
|
+
|---|---|---|
|
|
209
|
+
| celular chico (< 380) | `medium` | no se toca: no sube aunque sea un celular |
|
|
210
|
+
| celular (380–767) | `large` (`xlarge` junto a un título o un monto) | un paso más que en la computadora |
|
|
211
|
+
| tablet táctil (`pointer: coarse`) | `medium` | no se toca: el puntero no cambia nada |
|
|
212
|
+
| computadora (`pointer: fine`) | `medium` | nunca `small`; `medium` va sin MAYÚSCULAS |
|
|
213
|
+
|
|
214
|
+
En el ultrawide, igual que en la computadora.
|
|
215
|
+
|
|
216
|
+
En master-pedidos: `[size]="bp.sizeBadge()"` (`large` en el celular, `medium` en el resto). Junto
|
|
217
|
+
a un título o un monto, donde el celular va en `xlarge`, el helper no alcanza (solo devuelve
|
|
218
|
+
`large` o `medium`): `[size]="bp.celular() ? 'xlarge' : 'medium'"`.
|
|
219
|
+
|
|
190
220
|
## API
|
|
191
221
|
|
|
192
222
|
<!-- api:inicio -->
|
|
@@ -233,15 +263,53 @@ interface SuiBadgeConfig {
|
|
|
233
263
|
- `disabled` no baja la opacidad: pinta todo en los grises de deshabilitado.
|
|
234
264
|
- El host lleva `role="status"`: el lector de pantalla anuncia los cambios.
|
|
235
265
|
|
|
266
|
+
## Bien y mal
|
|
267
|
+
|
|
268
|
+
Estado pendiente
|
|
269
|
+
|
|
270
|
+
```html
|
|
271
|
+
<!-- ❌ mal: red es error; «Pendiente» pide atención (pages/super-admin/super-admin.html:637) -->
|
|
272
|
+
<sui-badge variant="lighter" color="red" [size]="bp.sizeBadge()">Pendiente</sui-badge>
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
```html
|
|
276
|
+
<!-- ✅ bien -->
|
|
277
|
+
<sui-badge color="orange" [size]="bp.sizeBadge()">Pendiente</sui-badge>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Categoría en una lista
|
|
281
|
+
|
|
282
|
+
```html
|
|
283
|
+
<!-- ❌ mal: light es solo para una superficie ya teñida; en una lista va lighter (pages/reports/reports.html:217) -->
|
|
284
|
+
<sui-badge variant="light" color="gray" [size]="bp.sizeBadge()">{{ product.category }}</sui-badge>
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
```html
|
|
288
|
+
<!-- ✅ bien -->
|
|
289
|
+
<sui-badge color="gray" [size]="bp.sizeBadge()">{{ product.category }}</sui-badge>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Metadato al lado de un nombre
|
|
293
|
+
|
|
294
|
+
```html
|
|
295
|
+
<!-- ❌ mal: filled es para un conteo que pide acción o encima de una foto; «Por defecto» es un metadato sin carga, va gray lighter (pages/customer/profile/profile.html:122) -->
|
|
296
|
+
<sui-badge variant="filled" color="orange" [size]="bp.sizeBadge()">Por defecto</sui-badge>
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
```html
|
|
300
|
+
<!-- ✅ bien -->
|
|
301
|
+
<sui-badge color="gray" [size]="bp.sizeBadge()">Por defecto</sui-badge>
|
|
302
|
+
```
|
|
303
|
+
|
|
236
304
|
## Ejemplo
|
|
237
305
|
|
|
238
306
|
```html
|
|
239
307
|
<!-- Metadato en una lista: lighter (default) -->
|
|
240
|
-
<sui-badge color="green">Conectado</sui-badge>
|
|
308
|
+
<sui-badge color="green" [size]="bp.sizeBadge()">Conectado</sui-badge>
|
|
241
309
|
|
|
242
310
|
<!-- Estado vivo -->
|
|
243
|
-
<sui-badge color="green" type="with-dot">Abierto</sui-badge>
|
|
311
|
+
<sui-badge color="green" type="with-dot" [size]="bp.sizeBadge()">Abierto</sui-badge>
|
|
244
312
|
|
|
245
313
|
<!-- Conteo que pide acción -->
|
|
246
|
-
<sui-badge color="orange" variant="filled" type="number">3</sui-badge>
|
|
314
|
+
<sui-badge color="orange" variant="filled" type="number" [size]="bp.sizeBadge()">3</sui-badge>
|
|
247
315
|
```
|
|
@@ -119,19 +119,37 @@ El banner **no tiene `size`**: mide 44 px de alto en web, centrado; en mobile (
|
|
|
119
119
|
| uso | mobile | web | fuente |
|
|
120
120
|
|---|---|---|---|
|
|
121
121
|
| la barra | 44 px mínimo, crece si el texto envuelve | 44 px fijos, una línea | según el componente |
|
|
122
|
-
| el link de acción | `
|
|
122
|
+
| el link de acción | **pendiente (P8)**: `medium` con el área de 44 en la barra (a, recomendada) o `large` (b) | `medium` (20 px) | web: D16, dueño 05-10-2026 · mobile: pendiente P8 (antes decía `large` como propuesta) |
|
|
123
123
|
| la X de cerrar | se ve de 24 px; **se toca en 44 × 44** | se ve de 24; se toca en 40 × 40 | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (antes 40, pedido del dueño 03-10-2026): área táctil invisible, extensión SUI |
|
|
124
124
|
|
|
125
125
|
```html
|
|
126
126
|
<sui-banner variant="warning" variantStyle="lighter" title="Tu plan vence en 3 días"
|
|
127
127
|
description="Renueva para seguir recibiendo pedidos">
|
|
128
|
-
<sui-link-button slot="action" variant="modifiable" [underline]="true"
|
|
129
|
-
[size]="bp.isMobile() ? 'large' : 'medium'" (clicked)="renovar()">Renovar plan</sui-link-button>
|
|
128
|
+
<sui-link-button slot="action" variant="modifiable" [underline]="true" (clicked)="renovar()">Renovar plan</sui-link-button>
|
|
130
129
|
</sui-banner>
|
|
131
130
|
```
|
|
132
131
|
|
|
133
|
-
`size="large"` del link-button ya está publicado (la app usa 0.
|
|
134
|
-
|
|
132
|
+
`size="large"` del link-button ya está publicado (la app usa 0.24.1), pero mientras P8 siga
|
|
133
|
+
pendiente el link queda en su default (`medium`), que es como está hoy el de la suscripción
|
|
134
|
+
(`subscription-banner.html:10`).
|
|
135
|
+
|
|
136
|
+
### Por dispositivo (D16)
|
|
137
|
+
|
|
138
|
+
La barra **no tiene `size`**: su alto lo decide el ancho (≤ 767 px envuelve con mínimo de 44; más
|
|
139
|
+
ancho, 44 fijos en una línea). Lo único que cambia por dispositivo es el link del slot `action`, que
|
|
140
|
+
sigue la fila de `link-button` de D16.
|
|
141
|
+
|
|
142
|
+
| dispositivo | size | nota |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| celular chico (< 380) | link `medium` | la barra envuelve; la X se toca en 44 × 44 |
|
|
145
|
+
| celular (380–767) | link **pendiente (P8)** | la barra envuelve; la X se toca en 44 × 44. Ningún size del link llega a 44 por sí solo |
|
|
146
|
+
| tablet táctil (`pointer: coarse`) | link **pendiente (P8)** | con ≥ 768 px la barra va en una línea y la X se toca en 40 × 40: el área de 44 sale con `max-width: 767px`, no con el puntero (el mixin `sui-tactil` está propuesto, sin aprobar) |
|
|
147
|
+
| computadora (`pointer: fine`) | link `medium` | 44 px fijos, una línea; X en 40 × 40 |
|
|
148
|
+
|
|
149
|
+
Ultrawide: igual que la computadora; el banner ya ocupa todo el ancho de su contenedor.
|
|
150
|
+
|
|
151
|
+
En master-pedidos: el banner no lleva `[size]`; el link va sin `[size]` (su default `medium`)
|
|
152
|
+
hasta que se decida P8. No hay helper en `BreakpointsService` para el link.
|
|
135
153
|
|
|
136
154
|
## «No usar»: por qué no hoy y cuándo sí
|
|
137
155
|
|
|
@@ -188,6 +206,53 @@ y `[slot=action]` (el link).
|
|
|
188
206
|
- En mobile, una pantalla con modal a pantalla completa tapa el banner: el de la suscripción se
|
|
189
207
|
esconde con `uiOverlay.fullscreenOpen()` para no quedar encima.
|
|
190
208
|
|
|
209
|
+
## Bien y mal
|
|
210
|
+
|
|
211
|
+
**Aviso de un pedido, no de toda la app**
|
|
212
|
+
|
|
213
|
+
```html
|
|
214
|
+
<!-- ❌ mal: es el cobro de UN pedido, dentro de su detalle (driver-order-detail.html:410) -->
|
|
215
|
+
<sui-banner [variant]="pagaElLocal() ? 'error' : 'info'" variantStyle="filled"
|
|
216
|
+
[title]="quienPagaTitulo()" [description]="cobro" />
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
```html
|
|
220
|
+
<!-- ✅ bien -->
|
|
221
|
+
<sui-alert [variant]="pagaElLocal() ? 'error' : 'info'" [variantStyle]="pagaElLocal() ? 'filled' : 'lighter'"
|
|
222
|
+
[title]="quienPagaTitulo()" [description]="cobro" />
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Plan por vencer: acompaña, no grita**
|
|
226
|
+
|
|
227
|
+
```html
|
|
228
|
+
<!-- ❌ mal: `light` no se usa hoy; el aviso que acompaña es `lighter` (subscription-banner.html:7) -->
|
|
229
|
+
<sui-banner [variant]="isDanger() ? 'error' : 'warning'"
|
|
230
|
+
[variantStyle]="isDanger() ? 'filled' : 'light'" [title]="bannerTitle()" />
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
```html
|
|
234
|
+
<!-- ✅ bien -->
|
|
235
|
+
<sui-banner [variant]="isDanger() ? 'error' : 'warning'"
|
|
236
|
+
[variantStyle]="isDanger() ? 'filled' : 'lighter'" [title]="bannerTitle()" />
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Modo de toda la app hecho a mano**
|
|
240
|
+
|
|
241
|
+
```html
|
|
242
|
+
<!-- ❌ mal: barra propia con #fff y un <button> suelto (impersonation-banner.ts:17) -->
|
|
243
|
+
<div class="imp" role="status">
|
|
244
|
+
<span class="imp__text">Estás administrando <strong>{{ t.name }}</strong> como super admin</span>
|
|
245
|
+
<button type="button" class="imp__exit" (click)="exit()">Salir</button>
|
|
246
|
+
</div>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
```html
|
|
250
|
+
<!-- ✅ bien -->
|
|
251
|
+
<sui-banner variant="warning" variantStyle="filled" [title]="'Estás administrando ' + t.name + ' como super admin'">
|
|
252
|
+
<sui-link-button slot="action" variant="modifiable" [underline]="true" (clicked)="exit()">Salir</sui-link-button>
|
|
253
|
+
</sui-banner>
|
|
254
|
+
```
|
|
255
|
+
|
|
191
256
|
## Ejemplo
|
|
192
257
|
|
|
193
258
|
```html
|
|
@@ -58,10 +58,10 @@ Regla corta: **la marca es lo que se muestra → brand-logo · es un ícono más
|
|
|
58
58
|
|---|---|---|---|
|
|
59
59
|
| `xs` | 16 | Dentro de un texto o de un tag. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
60
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. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
62
|
-
| `lg` | 32 | Tarjeta de contacto (el tamaño del Figma). | 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
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. | 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
|
|
|
@@ -75,19 +75,19 @@ 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
|
-
|
|
82
|
-
marcado canon.
|
|
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.
|
|
83
83
|
|
|
84
84
|
| uso | mobile | web | fuente |
|
|
85
85
|
|---|---|---|---|
|
|
86
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) | `lg` (32) | mobile: canon (decisión del dueño 04-10-2026, piso táctil 44: `2xl` es el único size que llega) · web: propuesta |
|
|
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 |
|
|
88
88
|
|
|
89
89
|
```html
|
|
90
|
-
<sui-brand-logo company="instagram" [size]="bp.
|
|
90
|
+
<sui-brand-logo company="instagram" [size]="bp.tactil() ? '2xl' : 'lg'" [href]="url" target="_blank"
|
|
91
91
|
ariaLabel="Síguenos en Instagram" />
|
|
92
92
|
```
|
|
93
93
|
|
|
@@ -95,6 +95,25 @@ Con `href` el logo **es** el área táctil: en mobile tiene que medir 44 px o m
|
|
|
95
95
|
tamaño que llega es `2xl` (48). Si se quiere un logo de 32 px tocable, el link va en un
|
|
96
96
|
contenedor de 44 px.
|
|
97
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
|
+
|
|
98
117
|
## «No usar»: por qué no hoy y cuándo sí
|
|
99
118
|
|
|
100
119
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -132,13 +151,57 @@ Outputs: ninguno.
|
|
|
132
151
|
- Con `href` y `disabled` a la vez, no se vuelve link.
|
|
133
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.
|
|
134
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
|
+
|
|
135
198
|
## Ejemplo
|
|
136
199
|
|
|
137
200
|
```html
|
|
138
|
-
<!-- Tarjeta de soporte -->
|
|
139
|
-
<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'" />
|
|
140
203
|
|
|
141
|
-
<!-- Red del negocio, como link -->
|
|
142
|
-
<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"
|
|
143
206
|
ariaLabel="Síguenos en Instagram" />
|
|
144
207
|
```
|
|
@@ -52,6 +52,17 @@ no se usa en mobile.
|
|
|
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
|
|
@@ -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
|
|
@@ -103,8 +103,9 @@ Uso medido el 04-10-2026: 123 `large`, 93 `small`, 58 `medium` (5 por default),
|
|
|
103
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
|
|
|
@@ -138,11 +139,15 @@ en la acción principal. En la computadora, `medium` (40); la tablet va como el
|
|
|
138
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) |
|
|
139
140
|
| CTA de landing | `xlarge` (52) | `large` (48) | propuesta, falta aprobación |
|
|
140
141
|
|
|
141
|
-
Patrón (`bp` = `BreakpointsService
|
|
142
|
-
|
|
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`):
|
|
143
148
|
|
|
144
149
|
```html
|
|
145
|
-
<sui-button [size]="bp.
|
|
150
|
+
<sui-button [size]="bp.sizeControl()" …/>
|
|
146
151
|
```
|
|
147
152
|
|
|
148
153
|
### Piso táctil de 44 en el teléfono (canon, dueño 04-10-2026)
|
|
@@ -181,6 +186,23 @@ Vale para todos los componentes que tienen `size` `large` / `xlarge`:
|
|
|
181
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
|
|
182
187
|
en esos dos tamaños.
|
|
183
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
|
+
|
|
184
206
|
## API
|
|
185
207
|
|
|
186
208
|
<!-- api:inicio -->
|
|
@@ -236,6 +258,46 @@ interface SuiFooterButtonConfig {
|
|
|
236
258
|
disabled propio desde afuera.
|
|
237
259
|
- Ya trae el arreglo de iOS para el `:active` pegado (`touchstart`/`touchend`): no lo agregues.
|
|
238
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
|
+
|
|
239
301
|
## Ejemplo
|
|
240
302
|
|
|
241
303
|
```html
|
|
@@ -249,6 +311,6 @@ interface SuiFooterButtonConfig {
|
|
|
249
311
|
</sui-button>
|
|
250
312
|
|
|
251
313
|
<!-- Solo ícono -->
|
|
252
|
-
<sui-button variant="ghost" color="neutral" [size]="bp.
|
|
314
|
+
<sui-button variant="ghost" color="neutral" [size]="bp.sizeControl()" leftIcon="pencil-line" [onlyIcon]="true"
|
|
253
315
|
aria-label="Editar" (click)="editar()" />
|
|
254
316
|
```
|