@ajuarezso/sui-design-system 0.20.0 → 0.22.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 +75 -80
- package/docs/sui-accordion/README.md +171 -0
- package/docs/sui-activity-feed/README.md +155 -0
- package/docs/sui-activity-filter/README.md +100 -0
- package/docs/sui-alert/README.md +13 -0
- package/docs/sui-badge/README.md +17 -0
- package/docs/sui-banner/README.md +190 -0
- package/docs/sui-breadcrumb-item/README.md +96 -0
- package/docs/sui-breadcrumbs/README.md +122 -0
- package/docs/sui-button/README.md +36 -0
- package/docs/sui-card/README.md +168 -0
- package/docs/sui-chart-legend/README.md +140 -0
- package/docs/sui-chart-legend-dot/README.md +118 -0
- package/docs/sui-checkbox-card/README.md +150 -0
- 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-select/README.md +130 -0
- package/docs/sui-compact-select-for-input/README.md +120 -0
- package/docs/sui-content-card/README.md +147 -0
- package/docs/sui-content-label/README.md +148 -0
- package/docs/sui-counter-input/README.md +148 -0
- package/docs/sui-date-selector/README.md +98 -0
- package/docs/sui-datepicker/README.md +197 -0
- package/docs/sui-day-cell/README.md +118 -0
- package/docs/sui-day-label/README.md +81 -0
- package/docs/sui-drawer-footer/README.md +127 -0
- package/docs/sui-drawer-header/README.md +140 -0
- 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-empty-state/README.md +145 -0
- package/docs/sui-file-upload/README.md +154 -0
- package/docs/sui-file-upload-card/README.md +129 -0
- package/docs/sui-filter/README.md +181 -0
- package/docs/sui-href/README.md +85 -0
- package/docs/sui-image-upload/README.md +200 -0
- package/docs/sui-image-upload-profile/README.md +145 -0
- package/docs/sui-img-retry/README.md +107 -0
- package/docs/sui-inline-input/README.md +104 -0
- package/docs/sui-inline-select/README.md +101 -0
- package/docs/sui-input/README.md +247 -0
- package/docs/sui-integration-switch/README.md +142 -0
- 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 +179 -0
- package/docs/sui-notification-footer/README.md +98 -0
- package/docs/sui-notification-tab-menu/README.md +112 -0
- package/docs/sui-otp-input/README.md +116 -0
- package/docs/sui-page-header/README.md +123 -0
- package/docs/sui-pagination/README.md +146 -0
- package/docs/sui-password-strength/README.md +99 -0
- package/docs/sui-period-range/README.md +93 -0
- package/docs/sui-popover/README.md +178 -0
- package/docs/sui-product-card/README.md +173 -0
- package/docs/sui-radio-card/README.md +160 -0
- package/docs/sui-rating/README.md +7 -6
- package/docs/sui-rich-editor/README.md +114 -0
- package/docs/sui-segmented-control/README.md +3 -0
- package/docs/sui-select/README.md +183 -0
- package/docs/sui-sidebar/README.md +217 -0
- package/docs/sui-stepper/README.md +166 -0
- package/docs/sui-store-card/README.md +147 -0
- package/docs/sui-switch-card/README.md +149 -0
- package/docs/sui-switch-label/README.md +3 -0
- package/docs/sui-tab-chips/README.md +188 -0
- package/docs/sui-tab-menu-horizontal/README.md +142 -0
- package/docs/sui-tab-menu-vertical/README.md +136 -0
- package/docs/sui-table/README.md +264 -0
- package/docs/sui-tag-input/README.md +123 -0
- package/docs/sui-textarea/README.md +160 -0
- package/docs/sui-time-picker/README.md +240 -0
- package/docs/sui-toast/README.md +190 -0
- package/docs/sui-tooltip/README.md +201 -0
- 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 +291 -246
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +208 -50
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-activity-filter
|
|
3
|
+
selector: sui-activity-filter
|
|
4
|
+
resumen: Chip con ícono para filtrar un historial de actividad por tipo — Archivos, Comentarios, Tareas — prendido o apagado
|
|
5
|
+
alternativas: [sui-tab-chips (los filtros de lista de la app, siempre uno elegido), sui-segmented-control (2-4 vistas hermanas), sui-tag (una etiqueta que se puede quitar), sui-badge (un estado que no se toca)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-activity-filter
|
|
9
|
+
|
|
10
|
+
Story: [Organisms/Activity/Activity Filter](https://sui-design-system.web.app/?path=/docs/organisms-activity-activity-filter--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** en la fila de filtros **de un `sui-activity-feed`**, para mostrar solo un tipo de
|
|
15
|
+
actividad. Es un botón que se prende y se apaga (`aria-pressed`); la fila de chips y qué se
|
|
16
|
+
filtra lo arma la pantalla.
|
|
17
|
+
|
|
18
|
+
**No lo uses** para:
|
|
19
|
+
|
|
20
|
+
- Filtrar una lista o un catálogo: `sui-tab-chips`, que es el patrón de filtros de toda la app
|
|
21
|
+
(desliza en horizontal y siempre hay uno elegido).
|
|
22
|
+
- Cambiar entre 2-4 vistas de lo mismo: `sui-segmented-control`.
|
|
23
|
+
- Mostrar un estado: `sui-badge`.
|
|
24
|
+
|
|
25
|
+
Regla corta: **filtros del activity feed → activity filter · cualquier otra lista → tab chips.**
|
|
26
|
+
|
|
27
|
+
## Qué variante usar
|
|
28
|
+
|
|
29
|
+
> **La guía del DS no tiene página de este filtro.** Sale del Figma de SUI (Activity Feed Selected
|
|
30
|
+
> Filter [1.1], frame 165967:3881: Default, Hover, Active). Uso medido el 03-10-2026 en
|
|
31
|
+
> `master-pedidos/src/app`: **0 usos**. Lo de abajo es **propuesta, falta aprobación**.
|
|
32
|
+
|
|
33
|
+
| prop | cuándo | fuente |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `active` | El filtro que está aplicado (fondo naranja al 10 %, texto e ícono naranja). | Figma (State=Active) |
|
|
36
|
+
| `icon` | Un ícono que diga el tipo: `file-list-2-line` archivos, `chat-3-line` comentarios, `task-line` tareas. | propuesta, falta aprobación |
|
|
37
|
+
| `icon` en `null` | «Todos»: el chip que limpia el filtro va sin ícono. | propuesta, falta aprobación |
|
|
38
|
+
| `disabled` | Un tipo que no tiene ninguna actividad en el rango elegido. Mejor que esconderlo: la fila no salta. | propuesta, falta aprobación (el disabled no está en el Figma) |
|
|
39
|
+
|
|
40
|
+
¿Uno o varios a la vez? El componente no lo decide. Propuesta: **uno a la vez, con «Todos»**,
|
|
41
|
+
igual que `sui-tab-chips`; así nadie se queda con un historial vacío por combinar filtros.
|
|
42
|
+
|
|
43
|
+
## Tamaño en mobile y en web
|
|
44
|
+
|
|
45
|
+
**No tiene `size`**: 30 de alto (4 + 20 + 4 y el borde), texto 14/500, ícono de 18, radio 8.
|
|
46
|
+
|
|
47
|
+
| uso | mobile | web | fuente |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
| filtros del activity feed | no usar: 30 no llega al dedo; usar `sui-tab-chips` en `large` | `sui-activity-filter` | propuesta, falta aprobación |
|
|
50
|
+
|
|
51
|
+
La fila de chips la arma la pantalla: el componente no trae contenedor ni scroll lateral.
|
|
52
|
+
|
|
53
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
54
|
+
|
|
55
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| `sui-activity-filter` (0 usos) | no hay activity feed en la app | arriba de un historial de cambios en super admin, solo en web |
|
|
58
|
+
| como filtro de listas | los filtros de la app son `sui-tab-chips` | nunca: dos componentes de filtro con distinto aspecto confunden |
|
|
59
|
+
|
|
60
|
+
## API
|
|
61
|
+
|
|
62
|
+
<!-- api:inicio -->
|
|
63
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
64
|
+
|
|
65
|
+
| input | tipo | default |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| `active` | `boolean` | `false` |
|
|
68
|
+
| `disabled` | `boolean` | `false` |
|
|
69
|
+
| `icon` | `string \| null` | `'file-list-2-line'` |
|
|
70
|
+
|
|
71
|
+
| output | payload |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `clicked` | `Event` |
|
|
74
|
+
<!-- api:fin -->
|
|
75
|
+
|
|
76
|
+
Slot: `<ng-content>` (el texto del chip).
|
|
77
|
+
|
|
78
|
+
## Trampas
|
|
79
|
+
|
|
80
|
+
- **`icon` trae un ícono por defecto** (`file-list-2-line`): un chip sin `icon` igual muestra el de
|
|
81
|
+
archivos. Para sacarlo, `[icon]="null"`.
|
|
82
|
+
- **Escucha `(clicked)`, no `(click)`.** El host no es un `<button>` nativo: Enter y Espacio emiten
|
|
83
|
+
`(clicked)` pero **no** generan un `click`, así que con `(click)` el filtro no funciona por
|
|
84
|
+
teclado. Además `(clicked)` ya se calla cuando está `disabled`.
|
|
85
|
+
- `active` no cambia solo al tocarlo: lo controla la pantalla (`[active]="filtro() === 'archivos'"`).
|
|
86
|
+
- El host es el botón (`role="button"`, `tabindex`, Enter y Espacio): no lo envuelvas en un
|
|
87
|
+
`<button>`.
|
|
88
|
+
- El foco usa un `outline` de 2 px naranja, no el doble anillo de los inputs del DS.
|
|
89
|
+
- Ya trae el arreglo de iOS para el `:active` pegado.
|
|
90
|
+
|
|
91
|
+
## Ejemplo
|
|
92
|
+
|
|
93
|
+
```html
|
|
94
|
+
<div class="historial__filtros">
|
|
95
|
+
<sui-activity-filter [icon]="null" [active]="filtro() === 'todos'" (clicked)="filtro.set('todos')">Todos</sui-activity-filter>
|
|
96
|
+
<sui-activity-filter icon="file-list-2-line" [active]="filtro() === 'archivos'" (clicked)="filtro.set('archivos')">Archivos</sui-activity-filter>
|
|
97
|
+
<sui-activity-filter icon="chat-3-line" [active]="filtro() === 'comentarios'" (clicked)="filtro.set('comentarios')">Comentarios</sui-activity-filter>
|
|
98
|
+
</div>
|
|
99
|
+
<sui-activity-feed [items]="historialFiltrado()" />
|
|
100
|
+
```
|
package/docs/sui-alert/README.md
CHANGED
|
@@ -136,6 +136,19 @@ cliente**, que no es una novedad: `pages/envios/envios.html:725`,
|
|
|
136
136
|
y `:198` (`accionActivar`, `accionReintentar`, usadas en `notifications.html:17` y `:23`).
|
|
137
137
|
- Más de dos acciones: 0.
|
|
138
138
|
|
|
139
|
+
## Tamaño en mobile y en web
|
|
140
|
+
|
|
141
|
+
El alert no tiene un tamaño «de mobile»: el tamaño lo decide el contenido (guía del DS).
|
|
142
|
+
Con descripción va `large` en las dos plataformas; de una línea, `small`. Lo que cambia
|
|
143
|
+
en mobile es el ancho: ocupa toda la columna.
|
|
144
|
+
|
|
145
|
+
| uso | mobile | web | fuente |
|
|
146
|
+
|---|---|---|---|
|
|
147
|
+
| aviso con descripción | `large` | `large` | guía del DS |
|
|
148
|
+
| aviso de una línea en la página | `small` | `small` | guía del DS |
|
|
149
|
+
| dentro de un campo o una card | `xsmall` | `xsmall` | guía del DS |
|
|
150
|
+
|
|
151
|
+
|
|
139
152
|
## API
|
|
140
153
|
|
|
141
154
|
<!-- api:inicio -->
|
package/docs/sui-badge/README.md
CHANGED
|
@@ -153,6 +153,23 @@ dos valores (`pages/invoices/invoices.html:50` pagado/reembolsado,
|
|
|
153
153
|
`pages/super-admin/master-gastos/master-gastos.html:67` confirmado/pendiente) son candidatos; los de
|
|
154
154
|
pedidos con muchos estados (`pages/orders/orders.html:113`) se quedan como badge.
|
|
155
155
|
|
|
156
|
+
## Tamaño en mobile y en web
|
|
157
|
+
|
|
158
|
+
En mobile el badge se lee de más lejos y al lado de textos de 16 px; en web va más chico.
|
|
159
|
+
`large` (24) y `xlarge` (28) son extensión SUI del 03-10-2026.
|
|
160
|
+
|
|
161
|
+
| uso | mobile | web | fuente |
|
|
162
|
+
|---|---|---|---|
|
|
163
|
+
| estado en una lista o card | `large` (24) | `small` (16, mayúsculas) | canon (aprobado por el dueño, 03-10-2026) |
|
|
164
|
+
| junto a un título o un monto | `xlarge` (28) | `medium` (20) | propuesta, falta aprobación |
|
|
165
|
+
| conteo (`type="number"`) | `large` (24) | `small` (16) | propuesta, falta aprobación |
|
|
166
|
+
|
|
167
|
+
Patrón (la app ya lo usa en 27 lugares; `bp` = `BreakpointsService`, mobile hasta 767 px):
|
|
168
|
+
|
|
169
|
+
```html
|
|
170
|
+
<sui-badge [size]="bp.isMobile() ? 'large' : 'small'" …/>
|
|
171
|
+
```
|
|
172
|
+
|
|
156
173
|
## API
|
|
157
174
|
|
|
158
175
|
<!-- api:inicio -->
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-banner
|
|
3
|
+
selector: sui-banner
|
|
4
|
+
resumen: Barra de aviso a todo el ancho, arriba de la pantalla, para algo que afecta a toda la app
|
|
5
|
+
alternativas: [sui-alert (aviso ligado a una sección o una card), sui-toast (resultado efímero de una acción), sui-notification (fila de la bandeja), sui-modal (algo que bloquea todo, como quedarse sin conexión)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-banner
|
|
9
|
+
|
|
10
|
+
Story: [Molecules/Feedback/Banner](https://sui-design-system.web.app/?path=/docs/molecules-feedback-banner--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** cuando el aviso es de **toda la app o de toda la pantalla**, no de una parte: el plan
|
|
15
|
+
del local venció, estás administrando un local como super admin, hay una versión nueva, la app
|
|
16
|
+
está en modo de prueba. Va pegado arriba, a todo el ancho, y se queda mientras dure la situación.
|
|
17
|
+
|
|
18
|
+
**No lo uses** para:
|
|
19
|
+
|
|
20
|
+
- Un aviso de una sección, una card o un paso del flujo («Cobras S/ 12.00 al local al recoger»):
|
|
21
|
+
eso es `sui-alert`, aunque sea importante. El banner no tiene tamaños ni descripción larga: no
|
|
22
|
+
está hecho para vivir en medio del contenido.
|
|
23
|
+
- Confirmar que algo salió bien: `sui-toast`.
|
|
24
|
+
- Algo que impide usar la app (sin conexión, cuenta suspendida): un `sui-modal` o una pantalla
|
|
25
|
+
propia. La app ya lo hace así con «Sin conexión».
|
|
26
|
+
|
|
27
|
+
Regla corta (canon, la misma del alert): **contexto → alert · toda la app → banner · efímero →
|
|
28
|
+
toast · bandeja → notification.**
|
|
29
|
+
|
|
30
|
+
## Qué variante usar
|
|
31
|
+
|
|
32
|
+
> La guía del DS dice **para qué** es el banner, pero no cuándo va cada relleno ni cada tipo. Lo
|
|
33
|
+
> marcado «según la guía del DS» sale de su texto o de sus ejemplos publicados; lo marcado
|
|
34
|
+
> «canon» ya lo aprobó el dueño en el README de `sui-alert`; el resto es **propuesta** y falta su ok.
|
|
35
|
+
>
|
|
36
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`, sin contar prototipos ni vitrinas
|
|
37
|
+
> (`master-preview`, `master-prototipos`, `mockup-*`, `dx/*`, `_guia-*`, `master-rutina`,
|
|
38
|
+
> `master-medico`, `master-ejercicios`, `dev-index`): **2 banners** en 2 archivos, más **1 barra
|
|
39
|
+
> hecha a mano** que debería ser banner.
|
|
40
|
+
|
|
41
|
+
### Lo que sí dice la guía del DS
|
|
42
|
+
|
|
43
|
+
- **Para qué es**: avisos cruciales, **arriba de la pantalla** y a la vista. Coincide con «toda la
|
|
44
|
+
app → banner».
|
|
45
|
+
- **Una sola línea**: título, punto medio, descripción y **un link** como acción. El link es un
|
|
46
|
+
`sui-link-button` `modifiable`, `medium` y **subrayado**: toma el color del banner.
|
|
47
|
+
- **Botón de cerrar** en todos sus ejemplos.
|
|
48
|
+
- **Defaults**: la guía arranca en relleno `filled` y tipo `feature`; SUI arranca en `stroke` e
|
|
49
|
+
`info`. Es un default, no una recomendación de uso.
|
|
50
|
+
|
|
51
|
+
### `variant` — qué tipo de aviso es
|
|
52
|
+
|
|
53
|
+
Los mismos cinco tipos que `sui-alert`, con el mismo significado.
|
|
54
|
+
|
|
55
|
+
| variant | cuándo | ejemplo real de la app | fuente |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| `info` (default) | Un dato de toda la app que conviene saber y no pide nada: hay una versión nueva, estás viendo datos de prueba. | (sin uso hoy) | propuesta (sigue la regla canon del alert) |
|
|
58
|
+
| `success` | Un estado bueno que dura y afecta a todo: «Tu local ya está publicado». Si es la confirmación de un clic, es toast. | (sin uso hoy) | propuesta (sigue la regla canon del alert) |
|
|
59
|
+
| `warning` | Hay que hacer algo pronto o lo que hagas tiene consecuencia para toda la cuenta: el plan vence, estás administrando un local que no es tuyo. | `components/subscription-banner/subscription-banner.html:5` («Tu plan vence en 3 días») · candidato: `components/impersonation-banner/impersonation-banner.ts:17` | propuesta (sigue la regla canon del alert) |
|
|
60
|
+
| `error` | Algo ya pasó y afecta a toda la cuenta. | `components/subscription-banner/subscription-banner.html:5` («Tu plan venció») | propuesta (sigue la regla canon del alert) |
|
|
61
|
+
| `feature` | Novedad que alcanza a toda la app. **Aquí es gris**, no morado como en el alert. | (sin uso hoy) | canon (decisión documentada en el `.ts`, recogida en el README del alert) |
|
|
62
|
+
|
|
63
|
+
### `variantStyle` — el peso visual
|
|
64
|
+
|
|
65
|
+
Misma pregunta que en el alert: **¿este aviso tiene que ganarle a todo lo demás de la pantalla?**
|
|
66
|
+
|
|
67
|
+
| variantStyle | cuándo | ejemplo real de la app | fuente |
|
|
68
|
+
|---|---|---|---|
|
|
69
|
+
| `lighter` | El aviso **acompaña**: hay que tenerlo presente, pero se puede seguir trabajando. Es el caso normal. | `subscription-banner.html:7` en el caso «vence en N días» (hoy en `light`) | propuesta |
|
|
70
|
+
| `filled` (default de la guía) | Hay que **actuar ya**, o la app está en un **modo que cambia lo que haces**: el plan venció, estás administrando otro local. Uno a la vez. | `subscription-banner.html:7` («Tu plan venció») | propuesta |
|
|
71
|
+
| `light` | No usar hoy, como en el alert. **Cuándo sí:** un banner dentro de una zona ya teñida, donde `lighter` se pierde. | — | propuesta |
|
|
72
|
+
| `stroke` (default SUI) | No usar hoy: un banner blanco con borde se confunde con la barra superior. **Cuándo sí:** arriba de una pantalla a sangre (un mapa o una foto), donde la banda blanca sí se distingue. | — | propuesta |
|
|
73
|
+
|
|
74
|
+
### `dismissible`, `showIcon`, acción y título
|
|
75
|
+
|
|
76
|
+
| prop | valor | cuándo | fuente |
|
|
77
|
+
|---|---|---|---|
|
|
78
|
+
| `dismissible` | `true` | Solo si el aviso se puede ignorar sin problema (versión nueva, novedad). La guía lo muestra en todos sus ejemplos. | según la guía del DS (que exista) · propuesta (cuándo) |
|
|
79
|
+
| `dismissible` | `false` (default) | Todo `filled` y todo aviso que tiene que seguir ahí: plan vencido, administrando otro local. Cerrarlo no arregla nada. | propuesta |
|
|
80
|
+
| `showIcon` | `true` (default) | Siempre: el ícono es la mitad del significado del tipo. | propuesta |
|
|
81
|
+
| `showIcon` | `false` | No usar hoy. **Cuándo sí:** cuando se proyecta un avatar o logo en `slot="icon"` (ver abajo), que ya ocupa ese lugar. | propuesta |
|
|
82
|
+
| `slot="icon"` | avatar o logo | Reemplaza al ícono del tipo: el logo del local que estás administrando. | propuesta |
|
|
83
|
+
| `slot="action"` | **un** `sui-link-button` `variant="modifiable"` con `[underline]="true"` | La única acción del banner: «Renovar plan», «Salir», «Actualizar». Nunca un `sui-button`, nunca dos. | según la guía del DS |
|
|
84
|
+
| `title` | frase corta | Lo que pasa, en sentence case y sin punto final. | canon (copy de la app) |
|
|
85
|
+
| `description` | complemento | Qué hacer o hasta cuándo. Una línea en web; en mobile se envuelve. | según la guía del DS (una línea) |
|
|
86
|
+
|
|
87
|
+
### Usos de hoy que rompen la regla
|
|
88
|
+
|
|
89
|
+
- **Rompe el canon — 1 banner en contexto → `sui-alert`:**
|
|
90
|
+
`pages/driver/driver-order-detail/driver-order-detail.html:391` («Cobras S/ … al local al
|
|
91
|
+
recoger»). Es el aviso de **un pedido**, dentro de su detalle: va `sui-alert` (`error` `filled`
|
|
92
|
+
si cobra en el mostrador, `info` `lighter` si cobra en la puerta).
|
|
93
|
+
- **Barra hecha a mano que es un banner — 1:** `components/impersonation-banner/impersonation-banner.ts:17`
|
|
94
|
+
(«Estás administrando … como super admin» + botón «Salir»), con `#fff` y `rgb()` sueltos. Pasaría a
|
|
95
|
+
`<sui-banner variant="warning" variantStyle="filled">` con un link «Salir».
|
|
96
|
+
- **Romperían la propuesta — 1 `light` → `lighter`:** `components/subscription-banner/subscription-banner.html:7`
|
|
97
|
+
(el caso «vence en N días»).
|
|
98
|
+
- No confundir: `components/upgrade-banner/` (6 pantallas) se llama «banner» pero es un aviso dentro
|
|
99
|
+
de una sección; su destino es `sui-alert`, ya anotado en `docs/CANON-SUI.md`.
|
|
100
|
+
|
|
101
|
+
## Tamaño en mobile y en web
|
|
102
|
+
|
|
103
|
+
El banner **no tiene `size`**: mide 44 px de alto en web, centrado; en mobile (≤ 767 px) pasa a
|
|
104
|
+
`min-height: 44px`, se alinea a la izquierda y el texto se envuelve en varias líneas.
|
|
105
|
+
|
|
106
|
+
| uso | mobile | web | fuente |
|
|
107
|
+
|---|---|---|---|
|
|
108
|
+
| la barra | 44 px mínimo, crece si el texto envuelve | 44 px fijos, una línea | según el componente |
|
|
109
|
+
| el link de acción | `large` (24 px) cuando se publique (hoy `medium`, 20 px) | `medium` (20 px) | propuesta |
|
|
110
|
+
| la X de cerrar | se ve de 24 px; **se toca en 40 × 40** | igual | canon (aprobado por el dueño, 03-10-2026): área táctil invisible, extensión SUI |
|
|
111
|
+
|
|
112
|
+
```html
|
|
113
|
+
<sui-banner variant="warning" variantStyle="lighter" title="Tu plan vence en 3 días"
|
|
114
|
+
description="Renueva para seguir recibiendo pedidos">
|
|
115
|
+
<sui-link-button slot="action" variant="modifiable" [underline]="true"
|
|
116
|
+
[size]="bp.isMobile() ? 'large' : 'medium'" (clicked)="renovar()">Renovar plan</sui-link-button>
|
|
117
|
+
</sui-banner>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
`size="large"` del link-button está en el repo del DS y todavía no en el paquete publicado 0.19.0:
|
|
121
|
+
hasta entonces va `medium` en las dos.
|
|
122
|
+
|
|
123
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
124
|
+
|
|
125
|
+
Nada se borra del DS. Lo marcado «no usar» no tiene caso en la app de hoy; si un flujo nuevo cae
|
|
126
|
+
en la columna de la derecha, se usa.
|
|
127
|
+
|
|
128
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
129
|
+
|---|---|---|
|
|
130
|
+
| `light` | queda a medio camino entre `lighter` y `filled` | un banner dentro de una zona ya teñida |
|
|
131
|
+
| `stroke` | blanco con borde: se confunde con la barra superior | arriba de un mapa o una foto a sangre |
|
|
132
|
+
| `success` | no hay estados buenos que afecten a toda la app | «Tu local ya está publicado» el día que sale al aire |
|
|
133
|
+
| `feature` | no hay novedades anunciadas arriba | anunciar una función nueva a todos los locales, con X para cerrarlo |
|
|
134
|
+
| `showIcon=false` | sin el ícono se pierde el tipo | con un avatar o logo en `slot="icon"` |
|
|
135
|
+
|
|
136
|
+
## API
|
|
137
|
+
|
|
138
|
+
<!-- api:inicio -->
|
|
139
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
140
|
+
|
|
141
|
+
| input | tipo | default |
|
|
142
|
+
|---|---|---|
|
|
143
|
+
| `variant` | `'info' \| 'success' \| 'warning' \| 'error' \| 'feature'` | `'info'` |
|
|
144
|
+
| `variantStyle` | `'filled' \| 'light' \| 'lighter' \| 'stroke'` | `'stroke'` |
|
|
145
|
+
| `title` | `string \| null` | `null` |
|
|
146
|
+
| `description` | `string \| null` | `null` |
|
|
147
|
+
| `showIcon` | `boolean` | `true` |
|
|
148
|
+
| `dismissible` | `boolean` | `false` |
|
|
149
|
+
|
|
150
|
+
| output | payload |
|
|
151
|
+
|---|---|
|
|
152
|
+
| `closed` | `void` |
|
|
153
|
+
<!-- api:fin -->
|
|
154
|
+
|
|
155
|
+
Signal pública: `dismissed` (`signal(false)`). Slots: `[slot=icon]` (reemplaza el ícono del tipo)
|
|
156
|
+
y `[slot=action]` (el link).
|
|
157
|
+
|
|
158
|
+
## Trampas
|
|
159
|
+
|
|
160
|
+
- **Defaults distintos al alert:** el banner arranca en `stroke` (blanco con borde), el alert en
|
|
161
|
+
`lighter`. Pásale siempre `variantStyle`.
|
|
162
|
+
- **`feature` es gris** aquí (estado «faded» de la paleta) y morado en `sui-alert`.
|
|
163
|
+
- No tiene `size` ni `actions[]`: la acción va **proyectada** en `slot="action"`, a diferencia del
|
|
164
|
+
alert. Los slots usan `slot=`, no `data-slot=`.
|
|
165
|
+
- En web la altura es **fija** (44 px): un título más una descripción largos se cortan. En mobile sí
|
|
166
|
+
envuelve.
|
|
167
|
+
- **La X se toca en 40 × 40** aunque se vea de 24 (un `::before` invisible sobre su `<button>`,
|
|
168
|
+
desde 03-10-2026). En mobile esa área se mete 4 px en el espacio del texto o del link de acción
|
|
169
|
+
(el padding derecho es 40 y la X ocupa de 4 a 44 px desde el borde): un toque justo en la última
|
|
170
|
+
letra del link puede caer en la X.
|
|
171
|
+
- Al tocar la X se oculta solo (`dismissed`) y emite `closed`; no recuerda nada: si tiene que
|
|
172
|
+
quedarse cerrado entre sesiones, lo guarda el padre.
|
|
173
|
+
- El host lleva `role="region"` con `aria-label` = `title`, y borra el `title` nativo.
|
|
174
|
+
- En mobile, una pantalla con modal a pantalla completa tapa el banner: el de la suscripción se
|
|
175
|
+
esconde con `uiOverlay.fullscreenOpen()` para no quedar encima.
|
|
176
|
+
|
|
177
|
+
## Ejemplo
|
|
178
|
+
|
|
179
|
+
```html
|
|
180
|
+
<!-- Aviso que acompaña -->
|
|
181
|
+
<sui-banner variant="warning" variantStyle="lighter"
|
|
182
|
+
title="Tu plan vence en 3 días" description="Renueva para seguir recibiendo pedidos">
|
|
183
|
+
<sui-link-button slot="action" variant="modifiable" [underline]="true" (clicked)="renovar()">Renovar plan</sui-link-button>
|
|
184
|
+
</sui-banner>
|
|
185
|
+
|
|
186
|
+
<!-- Modo que cambia lo que haces: filled, sin X -->
|
|
187
|
+
<sui-banner variant="warning" variantStyle="filled" title="Estás administrando Pollería El Dorado como super admin">
|
|
188
|
+
<sui-link-button slot="action" variant="modifiable" [underline]="true" (clicked)="salir()">Salir</sui-link-button>
|
|
189
|
+
</sui-banner>
|
|
190
|
+
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-breadcrumb-item
|
|
3
|
+
selector: sui-breadcrumb-item
|
|
4
|
+
resumen: Una miga suelta de la ruta; casi siempre la dibuja sui-breadcrumbs por ti
|
|
5
|
+
alternativas: [sui-breadcrumbs (la ruta completa con separadores), sui-link-button (un enlace de texto suelto)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-breadcrumb-item
|
|
9
|
+
|
|
10
|
+
Story: [Molecules/Breadcrumbs/Breadcrumb Item](https://sui-design-system.web.app/?path=/docs/molecules-breadcrumbs-breadcrumb-item--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**No lo uses directo.** `sui-breadcrumbs` lo dibuja por cada entrada de `items`, pone los
|
|
15
|
+
separadores y decide cuál es el activo. Las reglas de cuándo mostrar una ruta están en el README de
|
|
16
|
+
`sui-breadcrumbs`.
|
|
17
|
+
|
|
18
|
+
**Úsalo suelto** solo si armas una ruta que `sui-breadcrumbs` no cubre: una miga con un menú
|
|
19
|
+
desplegable al lado o un separador propio. Hoy no hay ningún caso.
|
|
20
|
+
|
|
21
|
+
**Tampoco** para un enlace de texto que no es parte de una ruta («Ver todas»): `sui-link-button`.
|
|
22
|
+
|
|
23
|
+
## Qué variante usar
|
|
24
|
+
|
|
25
|
+
> **Lo que dice la guía del DS**: el ítem de la ruta tiene un estado `active` (la página actual),
|
|
26
|
+
> puede llevar **ícono** y puede ser **un enlace**. No trae do/don't.
|
|
27
|
+
>
|
|
28
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`): **0 usos**
|
|
29
|
+
> directos (y 0 de `sui-breadcrumbs`).
|
|
30
|
+
|
|
31
|
+
| input | valor | cuándo | fuente |
|
|
32
|
+
|---|---|---|---|
|
|
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 es propuesta |
|
|
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
|
+
| `href` | vacío | Dibuja un `<button>` y avisa por `(clicked)`. | según el código |
|
|
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. | propuesta, falta aprobación |
|
|
39
|
+
|
|
40
|
+
Usos de hoy que rompen las reglas: **0** (no se usa).
|
|
41
|
+
|
|
42
|
+
## Tamaño en mobile y en web
|
|
43
|
+
|
|
44
|
+
Alto fijo de **20 px**, sin `size`. **No tiene tamaño para mobile**, igual que `sui-breadcrumbs`:
|
|
45
|
+
no se usa en mobile.
|
|
46
|
+
|
|
47
|
+
| uso | mobile | web | fuente |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
| miga | no se usa | el componente (dentro de `sui-breadcrumbs`) | propuesta, falta aprobación |
|
|
50
|
+
|
|
51
|
+
```html
|
|
52
|
+
@if (!bp.isMobile()) { <sui-breadcrumbs [items]="ruta()" /> }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
56
|
+
|
|
57
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| suelto, fuera de `sui-breadcrumbs` | `sui-breadcrumbs` cubre todos los casos | una ruta con un selector en una miga (cambiar de local desde la ruta en web) |
|
|
60
|
+
| en mobile | 20 px de alto | nunca |
|
|
61
|
+
|
|
62
|
+
## API
|
|
63
|
+
|
|
64
|
+
<!-- api:inicio -->
|
|
65
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
66
|
+
|
|
67
|
+
| input | tipo | default |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| `label` | `string` | `''` |
|
|
70
|
+
| `icon` | `string` | `''` |
|
|
71
|
+
| `href` | `string` | `''` |
|
|
72
|
+
| `active` | `boolean` | `false` |
|
|
73
|
+
| `ariaLabel` | `string` | `''` |
|
|
74
|
+
|
|
75
|
+
| output | payload |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `clicked` | `void` |
|
|
78
|
+
<!-- api:fin -->
|
|
79
|
+
|
|
80
|
+
## Trampas
|
|
81
|
+
|
|
82
|
+
- **`clicked` no sale cuando el ítem es `active`.**
|
|
83
|
+
- **Con `href`, el clic navega y además emite `clicked`**: no navegues dos veces.
|
|
84
|
+
- **El nombre de la clase es `SuiBreadcrumbItem`** y el de los datos de `sui-breadcrumbs` es
|
|
85
|
+
`SuiBreadcrumbEntry`. No son lo mismo.
|
|
86
|
+
- No trae separador: el separador lo pone `sui-breadcrumbs`.
|
|
87
|
+
|
|
88
|
+
## Ejemplo
|
|
89
|
+
|
|
90
|
+
```html
|
|
91
|
+
<!-- Lo normal: que lo dibuje sui-breadcrumbs -->
|
|
92
|
+
<sui-breadcrumbs [items]="[{ label: 'Productos', href: '/empresa/productos' }, { label: 'Hamburguesas' }]" />
|
|
93
|
+
|
|
94
|
+
<!-- Suelto, solo si de verdad hace falta -->
|
|
95
|
+
<sui-breadcrumb-item icon="home-5-line" ariaLabel="Inicio" href="/empresa/inicio" />
|
|
96
|
+
```
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-breadcrumbs
|
|
3
|
+
selector: sui-breadcrumbs
|
|
4
|
+
resumen: Ruta de migas en web que dice dónde estás dentro de una jerarquía de 3 o más niveles y deja volver a cualquiera
|
|
5
|
+
alternativas: [sui-page-header (título de la pantalla), botón de volver del layout (mobile), sui-tab-menu-horizontal (secciones del mismo nivel)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-breadcrumbs
|
|
9
|
+
|
|
10
|
+
Story: [Molecules/Breadcrumbs/Breadcrumbs](https://sui-design-system.web.app/?path=/docs/molecules-breadcrumbs-breadcrumbs--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** en **web** cuando una pantalla está **3 o más niveles adentro** y sirve volver a un nivel
|
|
15
|
+
intermedio sin pasar por todos: «Productos › Hamburguesas › Clásica con queso» en el panel de la
|
|
16
|
+
empresa, «Locales › Sabores Andinos › Pedidos» en el super admin.
|
|
17
|
+
|
|
18
|
+
**No lo uses** para:
|
|
19
|
+
|
|
20
|
+
- **Mobile**: ahí se vuelve con la flecha del layout. Una fila de migas en 390 px se corta y
|
|
21
|
+
compite con el título.
|
|
22
|
+
- **Una pantalla de 1 o 2 niveles**: el título y el volver ya lo dicen.
|
|
23
|
+
- Secciones del mismo nivel: `sui-tab-menu-horizontal`.
|
|
24
|
+
- Los pasos de un flujo: `sui-stepper`.
|
|
25
|
+
|
|
26
|
+
Regla corta: **3+ niveles en web → breadcrumbs · mobile o 1-2 niveles → flecha de volver.**
|
|
27
|
+
|
|
28
|
+
## Qué variante usar
|
|
29
|
+
|
|
30
|
+
> **Lo que dice la guía del DS**: «guía mostrando el camino dentro de una app o sitio». Ejemplos con
|
|
31
|
+
> flecha (default), **como enlaces** y con **separador `/`**. El ítem activo es la página actual. No
|
|
32
|
+
> trae do/don't.
|
|
33
|
+
>
|
|
34
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`): **0 usos**.
|
|
35
|
+
|
|
36
|
+
### `divider`
|
|
37
|
+
|
|
38
|
+
| divider | cuándo | fuente |
|
|
39
|
+
|---|---|---|
|
|
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 es propuesta |
|
|
42
|
+
| `dot` | No: el punto separa metadatos («12 min · S/ 4.50»), no niveles. Extensión de SUI. | propuesta, falta aprobación |
|
|
43
|
+
|
|
44
|
+
### Ítems (`items`)
|
|
45
|
+
|
|
46
|
+
| qué | cuándo | fuente |
|
|
47
|
+
|---|---|---|
|
|
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. | propuesta, falta aprobación |
|
|
50
|
+
| sin `href` + `(navigate)` | Cuando volver no es una ruta (cerrar un panel, limpiar un filtro). | propuesta, falta aprobación |
|
|
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 es propuesta |
|
|
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
|
+
|
|
54
|
+
Usos de hoy que rompen las reglas: **0** (no se usa).
|
|
55
|
+
|
|
56
|
+
## Tamaño en mobile y en web
|
|
57
|
+
|
|
58
|
+
Alto fijo de **20 px** (texto 14, ícono 20), sin `size`. **No tiene tamaño para mobile**: no se usa ahí.
|
|
59
|
+
|
|
60
|
+
| uso | mobile | web | fuente |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| ruta de 3+ niveles | no se usa: flecha de volver | `sui-breadcrumbs` | propuesta, falta aprobación |
|
|
63
|
+
|
|
64
|
+
```html
|
|
65
|
+
@if (!bp.isMobile()) {
|
|
66
|
+
<sui-breadcrumbs [items]="ruta()" />
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
71
|
+
|
|
72
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| el componente entero | ninguna pantalla pasa de 2 niveles con salto a uno intermedio | el detalle de un producto dentro de una categoría en el panel web, o un local dentro del super admin |
|
|
75
|
+
| `slash` | ya hay flecha; mezclar estilos confunde | nunca, mientras la flecha sea el estilo de la app |
|
|
76
|
+
| `dot` | el punto es separador de metadatos | nunca para niveles |
|
|
77
|
+
| en mobile | 20 px de alto y la ruta se corta | nunca |
|
|
78
|
+
|
|
79
|
+
## API
|
|
80
|
+
|
|
81
|
+
<!-- api:inicio -->
|
|
82
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
83
|
+
|
|
84
|
+
| input | tipo | default |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| `items` | `readonly SuiBreadcrumbEntry[]` | — (requerido) |
|
|
87
|
+
| `divider` | `'arrow' \| 'slash' \| 'dot'` | `'arrow'` |
|
|
88
|
+
|
|
89
|
+
| output | payload |
|
|
90
|
+
|---|---|
|
|
91
|
+
| `navigate` | `SuiBreadcrumbEntry` |
|
|
92
|
+
<!-- api:fin -->
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
interface SuiBreadcrumbEntry {
|
|
96
|
+
label?: string;
|
|
97
|
+
icon?: string; // RemixIcon, 20 px
|
|
98
|
+
href?: string; // interno → router; externo → navegador
|
|
99
|
+
active?: boolean; // default: el último
|
|
100
|
+
ariaLabel?: string; // obligatorio si va solo el ícono
|
|
101
|
+
}
|
|
102
|
+
type SuiBreadcrumbDivider = 'arrow' | 'slash' | 'dot';
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Trampas
|
|
106
|
+
|
|
107
|
+
- **`navigate` sale en todo clic**, también en los que tienen `href` (el navegador ya navega). Si
|
|
108
|
+
usas `href`, no navegues otra vez en `(navigate)`.
|
|
109
|
+
- **El último ítem es el activo solo**: no es clicable y va en negro.
|
|
110
|
+
- **No corta texto largo**: con nombres de producto largos la fila crece. Acórtalos tú.
|
|
111
|
+
- El host dice `aria-label="Ruta de navegación"` (hasta el 03-10-2026, «Breadcrumb») y no se puede cambiar.
|
|
112
|
+
- `SuiBreadcrumbEntry` (los datos) no es `SuiBreadcrumbItem` (el componente de cada miga).
|
|
113
|
+
|
|
114
|
+
## Ejemplo
|
|
115
|
+
|
|
116
|
+
```html
|
|
117
|
+
<sui-breadcrumbs
|
|
118
|
+
[items]="[{ icon: 'home-5-line', href: '/empresa/inicio', ariaLabel: 'Inicio' },
|
|
119
|
+
{ label: 'Productos', href: '/empresa/productos' },
|
|
120
|
+
{ label: 'Hamburguesas', href: '/empresa/productos?categoria=hamburguesas' },
|
|
121
|
+
{ label: 'Clásica con queso' }]" />
|
|
122
|
+
```
|
|
@@ -122,6 +122,42 @@ flujo nuevo cae en la columna de la derecha, se usa (aprobado por el dueño, 03-
|
|
|
122
122
|
| `sui-button-group` (0 usos) | hoy no hay opciones combinables pegadas | días del horario del local o filtros que se suman |
|
|
123
123
|
| `sui-topbar-button` (0 usos) | las barras de la app tienen sus íconos propios | si se unifica la barra superior del admin con la del DS |
|
|
124
124
|
|
|
125
|
+
## Tamaño en mobile y en web
|
|
126
|
+
|
|
127
|
+
En mobile se toca con el dedo: 40 px como mínimo y 48 en la acción principal. En web, 28–40.
|
|
128
|
+
|
|
129
|
+
| uso | mobile | web | fuente |
|
|
130
|
+
|---|---|---|---|
|
|
131
|
+
| 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`) |
|
|
132
|
+
| acción dentro de una card o una fila | `medium` (40) | `small` (36) / `xsmall` (32) | canon (aprobado por el dueño, 03-10-2026) |
|
|
133
|
+
| acción en una tabla densa | — (no hay tablas en mobile) | `2xsmall` (28) | canon (aprobado por el dueño, 03-10-2026) |
|
|
134
|
+
| CTA de landing | `xlarge` (52) | `large` (48) | propuesta, falta aprobación |
|
|
135
|
+
|
|
136
|
+
Patrón (la app ya lo usa en 27 lugares; `bp` = `BreakpointsService`, mobile hasta 767 px):
|
|
137
|
+
|
|
138
|
+
```html
|
|
139
|
+
<sui-button [size]="bp.isMobile() ? 'large' : 'medium'" …/>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Regla de tamaños para todo el DS (aprobada por el dueño, 03-10-2026)
|
|
143
|
+
|
|
144
|
+
Vale para todos los componentes que tienen `size` `large` / `xlarge`:
|
|
145
|
+
|
|
146
|
+
- **Alto, padding y área táctil crecen en cada paso.**
|
|
147
|
+
- **El texto sube un solo escalón: hasta `medium` va en 14 px; `large` y `xlarge` van en 16 px.**
|
|
148
|
+
Labels, botones, chips, tabs e ítems usan `--sui-type-label-md-*`; valores y placeholders de
|
|
149
|
+
campos, `--sui-type-paragraph-md-*`. El line-height acompaña (24). Siempre con token (un
|
|
150
|
+
fallback `var(--token, 16px)` está bien), nunca px sueltos.
|
|
151
|
+
- **El texto secundario chico no cambia**: hints, contadores, sublabels y captions de 12.
|
|
152
|
+
- **Los íconos se quedan en 20.**
|
|
153
|
+
- Si la línea de 24 movería el alto medido, se baja el padding para que el alto total quede igual.
|
|
154
|
+
- Los chips cuya escala arranca en 12 (`sui-tag`, `sui-status-badge`) siguen a `sui-badge`, la
|
|
155
|
+
referencia: 14 en `large` y 16 en `xlarge` (derivado de la referencia `sui-badge`, falta
|
|
156
|
+
confirmación del dueño).
|
|
157
|
+
|
|
158
|
+
En large y xlarge el texto sube a 16 px (regla del 03-10-2026): el botón ya usa Label/Medium 16/24
|
|
159
|
+
en esos dos tamaños.
|
|
160
|
+
|
|
125
161
|
## API
|
|
126
162
|
|
|
127
163
|
<!-- api:inicio -->
|