@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
|
@@ -29,9 +29,10 @@ Regla corta: **local en un listado del cliente → store-card · local en un pan
|
|
|
29
29
|
> (`deliveryText`, `distanceText`) desde que la tarjeta y el checkout cobraban distinto.
|
|
30
30
|
>
|
|
31
31
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-card`): **2
|
|
32
|
-
> store-cards en 2 archivos**: favoritos del cliente (`pages/customer/favorites/favorites.html:
|
|
32
|
+
> store-cards en 2 archivos**: favoritos del cliente (`pages/customer/favorites/favorites.html:117`,
|
|
33
33
|
> con `deliveryText` y `distanceText`) y la cola de aprobación
|
|
34
|
-
> (`pages/super-admin/master-approvals/master-approvals.html:
|
|
34
|
+
> (`pages/super-admin/master-approvals/master-approvals.html:31`, en vista previa). Líneas
|
|
35
|
+
> revisadas el 06-10-2026. El inicio del
|
|
35
36
|
> cliente arma sus filas de locales con clases propias.
|
|
36
37
|
|
|
37
38
|
### Los estados (salen de `store`)
|
|
@@ -56,8 +57,10 @@ Regla corta: **local en un listado del cliente → store-card · local en un pan
|
|
|
56
57
|
| `(ratingClicked)` | La nota abre las opiniones y la info del local (`StoreRatingsModalService`). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
57
58
|
| `disableLink` | La tarjeta no navega (una vitrina, una lámina, una vista previa). | según el código |
|
|
58
59
|
|
|
59
|
-
**Usos de hoy que rompen las reglas:**
|
|
60
|
-
`
|
|
60
|
+
**Usos de hoy que rompen las reglas:** 1. Favoritos pasa `small` en la computadora
|
|
61
|
+
(`pages/customer/favorites/favorites.html:117`, `[size]="bp.isMobile() ? 'large' : 'small'"`): con
|
|
62
|
+
D16 va `medium` (ver «Por dispositivo»). A mirar: la cola de aprobación no pasa `deliveryText`
|
|
63
|
+
(deduce el envío del `deliveryType`).
|
|
61
64
|
|
|
62
65
|
## Tamaño en mobile y en web
|
|
63
66
|
|
|
@@ -77,12 +80,32 @@ El ancho lo da el contenedor. El `size` cambia **el corazón de favorito**, en l
|
|
|
77
80
|
| nota (abre las opiniones) | `large`: se ve igual (≈ 38) y se toca en 44 de alto con un `::before` invisible que no se estira a los lados (no pisa la columna de al lado) | ≈ 38: padding 4 × 2 + etiqueta de 10 px + gap 2 + valor de 13 px, con el `line-height` heredado | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (área) · medido del `.scss` (alto visible) |
|
|
78
81
|
|
|
79
82
|
```html
|
|
80
|
-
<sui-store-card [store]="local" [size]="bp.
|
|
83
|
+
<sui-store-card [store]="local" [size]="bp.sizeControl()" />
|
|
81
84
|
```
|
|
82
85
|
|
|
83
|
-
`medium` (40) es el de la computadora (D16); la tablet va como el teléfono, porque se toca.
|
|
84
|
-
(`pages/customer/favorites/favorites.html
|
|
85
|
-
|
|
86
|
+
`medium` (40) es el de la computadora (D16); la tablet va como el teléfono, porque se toca.
|
|
87
|
+
**Favoritos pasa `small` en la computadora** (`pages/customer/favorites/favorites.html:117`,
|
|
88
|
+
`[size]="bp.isMobile() ? 'large' : 'small'"`): el corazón queda en 36 y en un iPad de 768 o más
|
|
89
|
+
también, porque `isMobile()` no mira el puntero. Va `[size]="bp.sizeControl()"` (cambio de la app,
|
|
90
|
+
no del DS).
|
|
91
|
+
|
|
92
|
+
### Por dispositivo (D16)
|
|
93
|
+
|
|
94
|
+
El corazón y la nota se tocan: la tarjeta sigue la fila «lo que se toca». Fuente: D16, dueño
|
|
95
|
+
05-10-2026 (tabla por componente: «el default del componente es `small`: hay que pasar `size`»).
|
|
96
|
+
|
|
97
|
+
| dispositivo | size | nota |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| celular chico (< 380) | `large` (interino) | D16 pide `medium` con área de 44, pero el DS todavía no estira el corazón de 40 a 44: hasta que lo haga, se queda `large` |
|
|
100
|
+
| celular (380–767) | `large` | corazón de 44 y la nota tocable en 44 de alto |
|
|
101
|
+
| tablet táctil (`pointer: coarse`) | `large` | se toca igual que el teléfono |
|
|
102
|
+
| computadora (`pointer: fine`) | `medium` | corazón de 40; nunca `small` (el default) |
|
|
103
|
+
|
|
104
|
+
En el ultrawide, igual que en la computadora: el espacio extra va a más columnas en la grilla, no
|
|
105
|
+
a una tarjeta más grande.
|
|
106
|
+
|
|
107
|
+
En master-pedidos: `[size]="bp.sizeControl()"` (`large` en todo celular y pantalla táctil,
|
|
108
|
+
`medium` en la computadora).
|
|
86
109
|
|
|
87
110
|
## «No usar»: por qué no hoy y cuándo sí
|
|
88
111
|
|
|
@@ -139,11 +162,51 @@ app le pase `[size]="bp.isMobile() ? 'large' : 'medium'"` (cambio de la app, no
|
|
|
139
162
|
- Los íconos usan `color="var(--sui-primary-base, #fa7319)"`: el hex es respaldo, no se repite
|
|
140
163
|
afuera.
|
|
141
164
|
|
|
165
|
+
## Bien y mal
|
|
166
|
+
|
|
167
|
+
Corazón en la computadora
|
|
168
|
+
|
|
169
|
+
```html
|
|
170
|
+
<!-- ❌ mal: small (36) en la computadora y en el iPad; D16 pide medium y large (pages/customer/favorites/favorites.html:117) -->
|
|
171
|
+
<sui-store-card [size]="bp.isMobile() ? 'large' : 'small'" [store]="fav" [isFavorite]="true" />
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```html
|
|
175
|
+
<!-- ✅ bien -->
|
|
176
|
+
<sui-store-card [size]="bp.sizeControl()" [store]="fav" [isFavorite]="true" />
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Envío y distancia en un listado nuevo
|
|
180
|
+
|
|
181
|
+
```html
|
|
182
|
+
<!-- ❌ mal: sin deliveryText la tarjeta deduce el envío del deliveryType y puede cobrar distinto que el checkout (mismo patrón que pages/super-admin/master-approvals/master-approvals.html:31, a mirar) -->
|
|
183
|
+
<sui-store-card [store]="local" [size]="bp.sizeControl()" />
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
```html
|
|
187
|
+
<!-- ✅ bien: el texto llega escrito; null quita la columna -->
|
|
188
|
+
<sui-store-card [store]="local" [size]="bp.sizeControl()"
|
|
189
|
+
[deliveryText]="envioDeLaTarjeta(local)" [distanceText]="distanciaDeLaTarjeta(local)" />
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Tarjeta en una vitrina
|
|
193
|
+
|
|
194
|
+
```html
|
|
195
|
+
<!-- ❌ mal: sin disableLink la tarjeta navega a /cliente/restaurante/:id desde una lámina -->
|
|
196
|
+
<sui-store-card [store]="local" [size]="bp.sizeControl()" />
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
<!-- ✅ bien -->
|
|
201
|
+
<sui-store-card [store]="local" [size]="bp.sizeControl()" [disableLink]="true" />
|
|
202
|
+
```
|
|
203
|
+
|
|
142
204
|
## Ejemplo
|
|
143
205
|
|
|
144
206
|
```html
|
|
145
207
|
<sui-store-card
|
|
146
208
|
[store]="local"
|
|
209
|
+
[size]="bp.sizeControl()"
|
|
147
210
|
[isFavorite]="true"
|
|
148
211
|
[deliveryText]="envioDeLaTarjeta(local)"
|
|
149
212
|
[distanceText]="distanciaDeLaTarjeta(local)"
|
|
@@ -51,8 +51,8 @@ Regla corta: **se aplica ya → switch · se confirma después → checkbox · d
|
|
|
51
51
|
|
|
52
52
|
| size | px | cuándo | fuente |
|
|
53
53
|
|---|---|---|---|
|
|
54
|
-
| `xlarge` | 48 × 28 |
|
|
55
|
-
| `large` | 40 × 24 |
|
|
54
|
+
| `xlarge` | 48 × 28 | Celular y tablet táctil: `bp.tactil() ? 'xlarge' : 'large'`. Y en tarjetas donde el switch es la acción principal (ofertas de Central). | canon (aprobado por el dueño, 28-09-2026: «componentes grandes»); la tablet: D16, dueño 05-10-2026 |
|
|
55
|
+
| `large` | 40 × 24 | Computadora. | canon (aprobado por el dueño, 28-09-2026); confirmado en D16, dueño 06-10-2026 |
|
|
56
56
|
| `medium` (default) | 32 × 20 | No usar en pantallas nuevas (ver abajo). Es el único tamaño de la guía. | canon (aprobado por el dueño, 28-09-2026) |
|
|
57
57
|
|
|
58
58
|
### La etiqueta dice lo que hace, no el estado
|
|
@@ -85,18 +85,39 @@ de la tabla), `pages/super-admin/master-settings/master-settings.html:105`, los
|
|
|
85
85
|
|
|
86
86
|
## Tamaño en mobile y en web
|
|
87
87
|
|
|
88
|
-
| uso | mobile | web |
|
|
89
|
-
|
|
90
|
-
| switch en una fila, tabla o tarjeta | `xlarge` (48 × 28) | `large` (40 × 24) |
|
|
91
|
-
| switch que es la acción principal de la tarjeta (ofertas de Central) | `xlarge` | `xlarge` |
|
|
88
|
+
| uso | mobile | web | fuente |
|
|
89
|
+
|---|---|---|---|
|
|
90
|
+
| switch en una fila, tabla o tarjeta | `xlarge` (48 × 28) | `large` (40 × 24) | canon (aprobado por el dueño, 28-09-2026); web confirmado en D16, dueño 06-10-2026 |
|
|
91
|
+
| switch que es la acción principal de la tarjeta (ofertas de Central) | `xlarge` | `xlarge` | canon (aprobado por el dueño, 28-09-2026). Excepción previa a D16: la tabla de D16 pone `large` en la computadora y no la menciona. Pendiente de confirmar |
|
|
92
92
|
|
|
93
93
|
```html
|
|
94
|
-
<sui-switch [size]="bp.
|
|
94
|
+
<sui-switch [size]="bp.tactil() ? 'xlarge' : 'large'" … />
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
El más grande mide 28 px de alto: el toque cómodo (≥ 44 px) lo da la fila; por eso con texto
|
|
98
98
|
va `sui-switch-label`, que hace tocable todo el bloque.
|
|
99
99
|
|
|
100
|
+
### Por dispositivo (D16)
|
|
101
|
+
|
|
102
|
+
Fila de `switch` en la tabla de D16 (dueño, 05-10-2026; computadora resuelta el 06-10-2026): se
|
|
103
|
+
toca, y en la computadora va **un paso menos que en el celular**, sin bajar a `medium`.
|
|
104
|
+
|
|
105
|
+
| dispositivo | size | nota |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| celular chico (< 380 px) | `xlarge` (48 × 28) | la fila que lo contiene da los 44 de alto |
|
|
108
|
+
| celular (380–767 px) | `xlarge` (48 × 28) | |
|
|
109
|
+
| tablet táctil (`pointer: coarse`) | `xlarge` (48 × 28) | se toca con el dedo, aunque mida más de 767 |
|
|
110
|
+
| computadora (`pointer: fine`) | `large` (40 × 24) | un paso menos que el celular (dueño, 06-10-2026) |
|
|
111
|
+
|
|
112
|
+
Ultrawide (≥ 1920 px): igual que la computadora, `large`. `medium` no se usa en ningún dispositivo
|
|
113
|
+
(ver «No usar»).
|
|
114
|
+
|
|
115
|
+
En master-pedidos: `[size]="bp.tactil() ? 'xlarge' : 'large'"`, la misma expresión que
|
|
116
|
+
`sui-switch-label`. La fila de D16 nombra `bp.controlSize()`, que es lo que usan los 25 switches de
|
|
117
|
+
hoy, pero ese helper mira solo el ancho (`isMobile()`, ≤ 767): en un iPad de 768 o más da `large`.
|
|
118
|
+
`bp.tactil()` también mira el puntero y da lo que pide la tabla. Si `controlSize()` pasa a mirar
|
|
119
|
+
`tactil()`, los 25 quedan bien sin tocar las pantallas.
|
|
120
|
+
|
|
100
121
|
## «No usar»: por qué no hoy y cuándo sí
|
|
101
122
|
|
|
102
123
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -138,14 +159,64 @@ Implementa `ControlValueAccessor` (`[(ngModel)]`, `formControlName`).
|
|
|
138
159
|
enfocable. `tabindex="-1"` en el host no sirve: el binding del componente lo pisa.
|
|
139
160
|
- Ya trae el arreglo de iOS para el `:active` pegado.
|
|
140
161
|
|
|
162
|
+
## Bien y mal
|
|
163
|
+
|
|
164
|
+
Interruptor con su texto al lado
|
|
165
|
+
|
|
166
|
+
```html
|
|
167
|
+
<!-- ❌ mal: texto armado a mano y sin size, queda en medium (pages/drivers/drivers.html:58) -->
|
|
168
|
+
<label class="drivers__autoconfirm">
|
|
169
|
+
<div class="drivers__autoconfirm-text">
|
|
170
|
+
<span class="drivers__autoconfirm-title">Aceptar pedidos automáticamente</span>
|
|
171
|
+
<span class="drivers__autoconfirm-desc">El pedido salta la confirmación y pasa directo a buscar repartidor (como los locales administrados).</span>
|
|
172
|
+
</div>
|
|
173
|
+
<sui-switch [checked]="autoConfirm()" (checkedChange)="setAutoConfirm($event)" />
|
|
174
|
+
</label>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
```html
|
|
178
|
+
<!-- ✅ bien -->
|
|
179
|
+
<sui-switch-label [size]="bp.tactil() ? 'xlarge' : 'large'" [flip]="true"
|
|
180
|
+
label="Aceptar pedidos automáticamente"
|
|
181
|
+
description="El pedido salta la confirmación y pasa directo a buscar repartidor (como los locales administrados)."
|
|
182
|
+
[active]="autoConfirm()" (activeChange)="setAutoConfirm($event)" />
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Estado de un empleado en su tarjeta
|
|
186
|
+
|
|
187
|
+
```html
|
|
188
|
+
<!-- ❌ mal: large fijo en el teléfono y una etiqueta que cambia con el estado (pages/employees/employees.html:99) -->
|
|
189
|
+
<sui-switch size="large" [checked]="employee.status === 'Activo'" (checkedChange)="toggleStatus(employee.id)" />
|
|
190
|
+
<span class="employees__toggle-label">{{ employee.status }}</span>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```html
|
|
194
|
+
<!-- ✅ bien -->
|
|
195
|
+
<sui-switch-label [size]="bp.tactil() ? 'xlarge' : 'large'" label="Empleado activo"
|
|
196
|
+
[active]="employee.status === 'Activo'" (activeChange)="toggleStatus(employee.id)" />
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Pelado sin nombre accesible
|
|
200
|
+
|
|
201
|
+
```html
|
|
202
|
+
<!-- ❌ mal: sin aria-label el lector de pantalla dice «interruptor» y nada más -->
|
|
203
|
+
<sui-switch [size]="bp.tactil() ? 'xlarge' : 'large'" [checked]="oferta.activo" (checkedChange)="prender(oferta, $event)" />
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<!-- ✅ bien -->
|
|
208
|
+
<sui-switch [size]="bp.tactil() ? 'xlarge' : 'large'" [checked]="oferta.activo"
|
|
209
|
+
[attr.aria-label]="'Prender ' + oferta.titulo" (checkedChange)="prender(oferta, $event)" />
|
|
210
|
+
```
|
|
211
|
+
|
|
141
212
|
## Ejemplo
|
|
142
213
|
|
|
143
214
|
```html
|
|
144
215
|
<!-- Pelado en una tarjeta que ya tiene su título -->
|
|
145
|
-
<sui-switch [size]="bp.
|
|
216
|
+
<sui-switch [size]="bp.tactil() ? 'xlarge' : 'large'" [checked]="oferta.activo" [disabled]="guardando()"
|
|
146
217
|
[attr.aria-label]="'Prender ' + oferta.titulo" (checkedChange)="prender(oferta, $event)" />
|
|
147
218
|
|
|
148
219
|
<!-- Con texto: sui-switch-label -->
|
|
149
|
-
<sui-switch-label [size]="bp.
|
|
220
|
+
<sui-switch-label [size]="bp.tactil() ? 'xlarge' : 'large'" label="Recibir pedidos" [flip]="true"
|
|
150
221
|
[(active)]="abierto" />
|
|
151
222
|
```
|
|
@@ -62,13 +62,15 @@ Regla corta: **ajuste con peso, al toque → switch-card · lista de ajustes →
|
|
|
62
62
|
| size | cuándo | fuente |
|
|
63
63
|
|---|---|---|
|
|
64
64
|
| `xlarge` (48 × 28) | Mobile, vía `bp.controlSize()`. | canon (aprobado por el dueño, 28-09-2026: «componentes grandes») |
|
|
65
|
-
| `large` (40 × 24) |
|
|
65
|
+
| `large` (40 × 24) | Computadora, vía `bp.controlSize()`. Un paso menos que el celular; no baja a `medium`. | canon (aprobado por el dueño, 28-09-2026); confirmado en D16, dueño 06-10-2026 |
|
|
66
66
|
| `medium` (default) | No usar en pantallas nuevas. | canon (aprobado por el dueño, 28-09-2026) |
|
|
67
67
|
|
|
68
|
-
**Usos de hoy que rompen las reglas:
|
|
69
|
-
|
|
70
|
-
`
|
|
71
|
-
|
|
68
|
+
**Usos de hoy que rompen las reglas: 1** (medido el 06-10-2026, 22 switch-cards en 11 archivos).
|
|
69
|
+
`pages/super-admin/master-categorias/master-categorias.html:170` («Chapa «Beta»») va con
|
|
70
|
+
`size="large"` fijo: en el teléfono queda un paso chico. Va `[size]="bp.controlSize()"`. Los 10 que
|
|
71
|
+
se guardaban con un botón (métodos de pago de mi-negocio y 5 ajustes de master-settings) pasaron a
|
|
72
|
+
`sui-checkbox-card`, y el de `pages/notifications/notifications.html:59` («Sonidos de la app») ya
|
|
73
|
+
lleva `bp.controlSize()`, los dos el 03-10-2026.
|
|
72
74
|
|
|
73
75
|
## Tamaño en mobile y en web
|
|
74
76
|
|
|
@@ -84,6 +86,22 @@ borde) y 54 px la más chica (`basic`, sin descripción, `medium`). Llega al pis
|
|
|
84
86
|
<sui-switch-card [size]="bp.controlSize()" … /> <!-- isMobile() ? 'xlarge' : 'large' -->
|
|
85
87
|
```
|
|
86
88
|
|
|
89
|
+
### Por dispositivo (D16)
|
|
90
|
+
|
|
91
|
+
Fuente: D16, dueño 05-10-2026, con la fila de checkbox, radio y switch resuelta el 06-10-2026.
|
|
92
|
+
|
|
93
|
+
| dispositivo | size | nota |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| celular chico (< 380) | `xlarge` | la card entera ya pasa de 44; el size solo agranda el interruptor |
|
|
96
|
+
| celular (380–767) | `xlarge` | |
|
|
97
|
+
| tablet táctil (`pointer: coarse`) | `xlarge` | `bp.controlSize()` mira solo el ancho: un iPad de 768 o más recibe `large` hasta que el helper mire el puntero |
|
|
98
|
+
| computadora (`pointer: fine`) | `large` | un paso menos que el celular; no baja a `medium` (D16, dueño 06-10-2026) |
|
|
99
|
+
|
|
100
|
+
Ultrawide: igual que la computadora (`large`).
|
|
101
|
+
|
|
102
|
+
En master-pedidos: `[size]="bp.controlSize()"` (`xlarge` hasta 767 px, `large` desde ahí). La
|
|
103
|
+
expresión exacta de D16, con la tablet, es `bp.tactil() ? 'xlarge' : 'large'`.
|
|
104
|
+
|
|
87
105
|
## «No usar»: por qué no hoy y cuándo sí
|
|
88
106
|
|
|
89
107
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -91,7 +109,7 @@ borde) y 54 px la más chica (`basic`, sin descripción, `medium`). Llega al pis
|
|
|
91
109
|
| `emoji` (0 usos) | los ajustes de hoy llevan un ícono Remix | un ajuste de los grandes del rol que quiera el emoji animado del catálogo (`SuiEmoji`) |
|
|
92
110
|
| `type="avatar"` (0 usos) | no se prende ni apaga a una persona | prender o apagar a un repartidor de tu flota |
|
|
93
111
|
| `type="brand"` / `"company"` / `"card-provider"` (0 usos) | no hay integraciones | casi nunca: una integración es `sui-integration-switch` |
|
|
94
|
-
| `size="medium"` | el interruptor de 32 × 20 se pierde en el teléfono |
|
|
112
|
+
| `size="medium"` | el interruptor de 32 × 20 se pierde en el teléfono | no hay: en la computadora va `large` (D16, dueño 06-10-2026) |
|
|
95
113
|
|
|
96
114
|
## API
|
|
97
115
|
|
|
@@ -135,6 +153,52 @@ Slot: `[sui-switch-card-leading]` (el ícono o el logo). Implementa `ControlValu
|
|
|
135
153
|
- El interruptor siempre va a la derecha (no hay `flip`).
|
|
136
154
|
- `badge` con string sale **azul `light` `small`** (en `sui-switch-label` sale naranja).
|
|
137
155
|
|
|
156
|
+
## Bien y mal
|
|
157
|
+
|
|
158
|
+
Tamaño fijo
|
|
159
|
+
|
|
160
|
+
```html
|
|
161
|
+
<!-- ❌ mal: large fijo; en el teléfono el interruptor queda un paso chico (pages/super-admin/master-categorias/master-categorias.html:170) -->
|
|
162
|
+
<sui-switch-card type="basic" size="large" label="Chapa «Beta»"
|
|
163
|
+
[checked]="!!e.etiqueta" (checkedChange)="editar('etiqueta', $event ? 'Beta' : '')" />
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
```html
|
|
167
|
+
<!-- ✅ bien -->
|
|
168
|
+
<sui-switch-card type="basic" [size]="bp.controlSize()" label="Chapa «Beta»"
|
|
169
|
+
[checked]="!!e.etiqueta" (checkedChange)="editar('etiqueta', $event ? 'Beta' : '')" />
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Interruptor que no se mueve
|
|
173
|
+
|
|
174
|
+
```html
|
|
175
|
+
<!-- ❌ mal: es controlada; sin checkedChange el toque no cambia nada -->
|
|
176
|
+
<sui-switch-card type="basic" [size]="bp.controlSize()" label="Estoy trabajando"
|
|
177
|
+
[checked]="isAvailable()" />
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
```html
|
|
181
|
+
<!-- ✅ bien (como pages/driver/driver-dashboard/driver-dashboard.html:211) -->
|
|
182
|
+
<sui-switch-card type="basic" [size]="bp.controlSize()" label="Estoy trabajando"
|
|
183
|
+
[checked]="isAvailable()" (checkedChange)="onAvailabilityChange($event)" />
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Ícono del ajuste
|
|
187
|
+
|
|
188
|
+
```html
|
|
189
|
+
<!-- ❌ mal: el ícono no se proyecta con slot=; left-icon queda con el círculo vacío -->
|
|
190
|
+
<sui-switch-card type="left-icon" [size]="bp.controlSize()" label="Notificaciones" [checked]="push()" (checkedChange)="cambiarPush($event)">
|
|
191
|
+
<sui-icon slot="leading" name="notification-3-line" [size]="20" />
|
|
192
|
+
</sui-switch-card>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
```html
|
|
196
|
+
<!-- ✅ bien -->
|
|
197
|
+
<sui-switch-card type="left-icon" [size]="bp.controlSize()" label="Notificaciones" [checked]="push()" (checkedChange)="cambiarPush($event)">
|
|
198
|
+
<sui-icon sui-switch-card-leading name="notification-3-line" [size]="20" />
|
|
199
|
+
</sui-switch-card>
|
|
200
|
+
```
|
|
201
|
+
|
|
138
202
|
## Ejemplo
|
|
139
203
|
|
|
140
204
|
```html
|
|
@@ -34,9 +34,9 @@ Regla corta: **ajuste con texto → este · ajuste con peso → switch-card · s
|
|
|
34
34
|
> **5 usos en 4 archivos**, todos con `description`. Desde el 03-10-2026, 3 con `flip` (los
|
|
35
35
|
> ajustes del producto en `add-product-modal` y la analítica de `privacidad`) y 2 sin él porque
|
|
36
36
|
> viven dentro de un formulario (el horario de una categoría en `products`, «Cerrar por hoy» en
|
|
37
|
-
> `central-inicio`). Tamaños: 2 `ctrlSize()`
|
|
38
|
-
> (
|
|
39
|
-
> armado a mano** y 1 nativo que deberían ser este componente.
|
|
37
|
+
> `central-inicio`). Tamaños (revisado el 06-10-2026): 2 `ctrlSize()` (`large`/`xlarge`), 1
|
|
38
|
+
> `bp.isMobile() ? '2xlarge' : 'xlarge'` («Cerrar por hoy»), 2 sin `size` (`medium`). Hay **19
|
|
39
|
+
> `sui-switch` con el texto armado a mano** y 1 nativo que deberían ser este componente.
|
|
40
40
|
|
|
41
41
|
### Las piezas
|
|
42
42
|
|
|
@@ -54,13 +54,14 @@ Regla corta: **ajuste con texto → este · ajuste con peso → switch-card · s
|
|
|
54
54
|
|
|
55
55
|
| size | cuándo | fuente |
|
|
56
56
|
|---|---|---|
|
|
57
|
-
| `xlarge` |
|
|
58
|
-
| `large` |
|
|
57
|
+
| `xlarge` | Celular y tablet táctil: `[size]="bp.tactil() ? 'xlarge' : 'large'"`. Con descripción la fila pasa los 44 sola. En la computadora, solo si el ajuste es la acción principal de la pantalla («Cerrar por hoy» en Central): excepción previa a D16, pendiente de confirmar. | celular y tablet: D16 (fila de checkbox, radio y switch, dueño 05-10-2026); computadora: canon (aprobado por el dueño, 28-09-2026: «componentes grandes») |
|
|
58
|
+
| `large` | Computadora. | canon (aprobado por el dueño, 28-09-2026); confirmado en D16, dueño 06-10-2026 |
|
|
59
|
+
| `2xlarge` | Existe: la misma fila de `xlarge` con `min-height: 44px`. En qué dispositivo va está **pendiente** (ver «Por dispositivo»). | el size: canon (dueño, 04-10-2026: piso táctil 44 en el teléfono); su uso: pendiente |
|
|
59
60
|
| `medium` (default) | No usar en pantallas nuevas. | canon (aprobado por el dueño, 28-09-2026) |
|
|
60
61
|
|
|
61
62
|
**Usos de hoy que rompen las reglas:**
|
|
62
63
|
|
|
63
|
-
- **2 en `medium`:** `pages/products/products.html:
|
|
64
|
+
- **2 en `medium`:** `pages/products/products.html:303` («Horario propio
|
|
64
65
|
para esta categoría») y `pages/public/privacidad/privacidad.html:132` («Permitir analítica de uso»).
|
|
65
66
|
- **19 `sui-switch` con texto a mano + 1 nativo** que deberían ser este componente: el detalle
|
|
66
67
|
está en el README de `sui-switch`. Ejemplos: `pages/discounts/discounts.html:207`,
|
|
@@ -70,11 +71,11 @@ Regla corta: **ajuste con texto → este · ajuste con peso → switch-card · s
|
|
|
70
71
|
|
|
71
72
|
| uso | mobile | web | fuente |
|
|
72
73
|
|---|---|---|---|
|
|
73
|
-
| fila de ajustes | `
|
|
74
|
-
| ajuste que es la acción principal de la pantalla («Cerrar por hoy») | `
|
|
74
|
+
| fila de ajustes | `xlarge` (switch 48 × 28; con descripción la fila pasa los 44) | `large` (40 × 24) | D16 (fila de checkbox, radio y switch, dueño 05-10-2026; computadora 06-10-2026) |
|
|
75
|
+
| ajuste que es la acción principal de la pantalla («Cerrar por hoy») | `xlarge` | `xlarge` | mobile: D16. Web `xlarge`: excepción previa a D16 (canon, dueño 28-09-2026), que pone `large` en la computadora y no la menciona. Pendiente de confirmar |
|
|
75
76
|
|
|
76
77
|
```html
|
|
77
|
-
<sui-switch-label [size]="bp.
|
|
78
|
+
<sui-switch-label [size]="bp.tactil() ? 'xlarge' : 'large'" … />
|
|
78
79
|
```
|
|
79
80
|
|
|
80
81
|
| size | switch | label | descripción | alto de la fila sin descripción |
|
|
@@ -85,13 +86,35 @@ Regla corta: **ajuste con texto → este · ajuste con peso → switch-card · s
|
|
|
85
86
|
| `2xlarge` | 48 × 28 | 16/24 | 12/16 | **44** (`min-height`) |
|
|
86
87
|
|
|
87
88
|
El bloque entero se toca, así que con descripción la fila pasa los 44 px sola. Sin descripción
|
|
88
|
-
`xlarge` mide 28
|
|
89
|
-
|
|
90
|
-
interno se queda en `xlarge`.
|
|
89
|
+
`xlarge` mide 28. `2xlarge` es la misma fila con `min-height: 44px` y todo centrado en vertical
|
|
90
|
+
(canon, dueño 04-10-2026: piso táctil 44 en el teléfono). `2xlarge` no es un size del switch: el
|
|
91
|
+
switch interno se queda en `xlarge`.
|
|
91
92
|
|
|
92
93
|
En large y xlarge el texto sube a 16 px (regla del 03-10-2026): el label va en 16/24; sublabel y
|
|
93
94
|
descripción se quedan en 12.
|
|
94
95
|
|
|
96
|
+
### Por dispositivo (D16)
|
|
97
|
+
|
|
98
|
+
| dispositivo | size | nota |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| celular chico (< 380 px) | `xlarge` (switch 48 × 28) | con descripción la fila pasa los 44; sin descripción mide 28 (ver pendiente) |
|
|
101
|
+
| celular (380–767 px) | `xlarge` | igual |
|
|
102
|
+
| tablet táctil (`pointer: coarse`) | `xlarge` | se toca con el dedo, aunque mida más de 767 |
|
|
103
|
+
| computadora (`pointer: fine`) | `large` | un paso menos que el celular; no baja a `medium` (D16, dueño 06-10-2026) |
|
|
104
|
+
|
|
105
|
+
Ultrawide (≥ 1920 px): igual que la computadora (`large`).
|
|
106
|
+
|
|
107
|
+
**Pendiente: `2xlarge` en la fila sin descripción.** El canon del 04-10-2026 pide una fila de 44 en
|
|
108
|
+
el teléfono, y en este componente eso es `2xlarge`. La fila de D16 (05-10 y 06-10-2026) dice
|
|
109
|
+
`xlarge` para toda la familia y no nombra `2xlarge`. Con descripción no chocan: `xlarge` ya pasa
|
|
110
|
+
los 44, y los 5 usos de hoy la tienen. Sin descripción, `xlarge` deja la fila en 28 y D16 no dice
|
|
111
|
+
si sube a `2xlarge`. Lo decide el dueño; hasta entonces va `xlarge` y, si el ajuste no tiene
|
|
112
|
+
descripción, conviene escribirle una.
|
|
113
|
+
|
|
114
|
+
En master-pedidos: `[size]="bp.tactil() ? 'xlarge' : 'large'"`. La fila de D16 nombra
|
|
115
|
+
`bp.controlSize()`, pero ese helper mira solo el ancho (`isMobile()`, ≤ 767): en un iPad de 768 o
|
|
116
|
+
más da `large`. `bp.tactil()` también mira el puntero y da lo que pide la tabla.
|
|
117
|
+
|
|
95
118
|
## «No usar»: por qué no hoy y cuándo sí
|
|
96
119
|
|
|
97
120
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -139,11 +162,65 @@ Implementa `ControlValueAccessor` (`[(ngModel)]`, `formControlName`).
|
|
|
139
162
|
- El switch de adentro es el tab stop y toma su nombre del `label` y su descripción de la
|
|
140
163
|
`description` (`aria-labelledby` / `aria-describedby`) (revisión 04-10-2026).
|
|
141
164
|
|
|
165
|
+
## Bien y mal
|
|
166
|
+
|
|
167
|
+
Ajuste en una página que también se abre en el teléfono
|
|
168
|
+
|
|
169
|
+
```html
|
|
170
|
+
<!-- ❌ mal: sin size queda en medium, switch de 32 × 20 (pages/public/privacidad/privacidad.html:132) -->
|
|
171
|
+
<sui-switch-label [flip]="true" label="Permitir analítica de uso"
|
|
172
|
+
description="Se puede activar o desactivar en cualquier momento. Nada de lo que escribes sale de tu dispositivo."
|
|
173
|
+
[active]="analiticaActiva()" (activeChange)="cambiarAnalitica($event)" />
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
```html
|
|
177
|
+
<!-- ✅ bien -->
|
|
178
|
+
<sui-switch-label [size]="bp.tactil() ? 'xlarge' : 'large'" [flip]="true" label="Permitir analítica de uso"
|
|
179
|
+
description="Se puede activar o desactivar en cualquier momento. Nada de lo que escribes sale de tu dispositivo."
|
|
180
|
+
[active]="analiticaActiva()" (activeChange)="cambiarAnalitica($event)" />
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Ajuste dentro de un modal con formulario
|
|
184
|
+
|
|
185
|
+
```html
|
|
186
|
+
<!-- ❌ mal: sin size queda en medium en el teléfono y en la computadora (pages/products/products.html:303) -->
|
|
187
|
+
<sui-switch-label
|
|
188
|
+
label="Horario propio para esta categoría"
|
|
189
|
+
description="Fuera de ese horario, sus productos se ven atenuados y no se pueden agregar al carrito. Sin horario propio, la categoría está disponible siempre."
|
|
190
|
+
[active]="categoryScheduleEnabled()"
|
|
191
|
+
[disabled]="categoryScheduleSaving()"
|
|
192
|
+
(activeChange)="categoryScheduleEnabled.set($event)" />
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
```html
|
|
196
|
+
<!-- ✅ bien: sin flip, porque vive dentro de un formulario -->
|
|
197
|
+
<sui-switch-label
|
|
198
|
+
[size]="bp.tactil() ? 'xlarge' : 'large'"
|
|
199
|
+
label="Horario propio para esta categoría"
|
|
200
|
+
description="Fuera de ese horario, sus productos se ven atenuados y no se pueden agregar al carrito. Sin horario propio, la categoría está disponible siempre."
|
|
201
|
+
[active]="categoryScheduleEnabled()"
|
|
202
|
+
[disabled]="categoryScheduleSaving()"
|
|
203
|
+
(activeChange)="categoryScheduleEnabled.set($event)" />
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Link sin descripción
|
|
207
|
+
|
|
208
|
+
```html
|
|
209
|
+
<!-- ❌ mal: link solo se dibuja con description; «Qué se mide» no aparece -->
|
|
210
|
+
<sui-switch-label label="Permitir analítica de uso" link="Qué se mide" [(active)]="analitica" />
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
```html
|
|
214
|
+
<!-- ✅ bien -->
|
|
215
|
+
<sui-switch-label [size]="bp.tactil() ? 'xlarge' : 'large'" label="Permitir analítica de uso"
|
|
216
|
+
description="Nada de lo que escribes sale de tu dispositivo." link="Qué se mide" [(active)]="analitica" />
|
|
217
|
+
```
|
|
218
|
+
|
|
142
219
|
## Ejemplo
|
|
143
220
|
|
|
144
221
|
```html
|
|
145
222
|
<sui-switch-label
|
|
146
|
-
[size]="bp.
|
|
223
|
+
[size]="bp.tactil() ? 'xlarge' : 'large'"
|
|
147
224
|
[flip]="true"
|
|
148
225
|
label="Recibir pedidos"
|
|
149
226
|
description="Desactívalo para cerrar un rato sin tocar el horario."
|
|
@@ -41,11 +41,12 @@ secciones → tab menu.**
|
|
|
41
41
|
> **La guía del DS no tiene este componente**: es una extensión de SUI (la «cat nav» de las apps de
|
|
42
42
|
> delivery). Las reglas marcadas canon están aprobadas; lo que sigue en propuesta espera decisión.
|
|
43
43
|
>
|
|
44
|
-
> Uso medido el
|
|
44
|
+
> Uso medido el 06-10-2026 en `master-pedidos/src/app` (sin `master-preview`, `master-prototipos`,
|
|
45
45
|
> `mockup-sheets-*`, `dx/*`, `master-rutina`, `master-medico`, `dev-index`):
|
|
46
|
-
> **
|
|
46
|
+
> **44 usos en 31 archivos `.html`** (incluye `master-ejercicios`). `[sticky]="true"`: 2 (la carta
|
|
47
47
|
> del local y `master-ejercicios`). `count`: 5 listas (cifra del 03-10). `[(value)]`: 2; el resto
|
|
48
|
-
> `[value]` + `(valueChange)`. `autoScroll`: 0. `size`:
|
|
48
|
+
> `[value]` + `(valueChange)`. `autoScroll`: 0. `size`: los 44 lo pasan, 43 con `bp.sizeChips()` y 1
|
|
49
|
+
> con `sizeRango()` (`master-overview`, ver «Por dispositivo»).
|
|
49
50
|
|
|
50
51
|
### Para qué se usa (el contenido de los chips)
|
|
51
52
|
|
|
@@ -103,13 +104,16 @@ secciones → tab menu.**
|
|
|
103
104
|
las franjas de abajo y se parece más a un filtro.
|
|
104
105
|
- **1 con el número dentro del texto:** `pages/notifications/notifications.ts:194`
|
|
105
106
|
(`No leídas (3)` → `count: 3`).
|
|
106
|
-
- **
|
|
107
|
-
|
|
108
|
-
(
|
|
107
|
+
- **Resuelto el 06-10-2026: el tamaño por dispositivo.** Con D16 (05-10-2026) el size es
|
|
108
|
+
`bp.sizeChips()` (`xlarge` en lo táctil, `medium` en la computadora) y ningún chip queda en
|
|
109
|
+
`small`. De los 44 usos medidos (misma exclusión de arriba), 43 pasan `bp.sizeChips()` y el otro
|
|
110
|
+
es la excepción de `master-overview` (ver «Por dispositivo»). Fuera de la medición, la guía del
|
|
111
|
+
super admin tiene 13 sin `size` (quedan en `medium`):
|
|
112
|
+
`pages/super-admin/master-preview/_guia-moleculas/navegacion.ts` (11) y `fechas.ts:52`, `:119`.
|
|
109
113
|
|
|
110
114
|
## Tamaño en mobile y en web
|
|
111
115
|
|
|
112
|
-
`size` está publicado desde la 0.20.0; la app usa la 0.
|
|
116
|
+
`size` está publicado desde la 0.20.0; la app usa la 0.24.1.
|
|
113
117
|
|
|
114
118
|
Alto del chip: `small` 32 px (`height: 32px`) · `medium` 36 px (el de siempre, default; sin alto
|
|
115
119
|
fijo: 8 + 8 de padding + `line-height: normal` + 2 de borde, 36 medido en Storybook con Satoshi) ·
|
|
@@ -130,9 +134,31 @@ toca (canon, dueño, 05-10-2026, D16).
|
|
|
130
134
|
| filtros en la cabecera de una tabla | — | `medium` | canon (dueño, 05-10-2026, D16): nada en `small` |
|
|
131
135
|
|
|
132
136
|
```html
|
|
133
|
-
<sui-tab-chips [chips]="filtros" [(value)]="filtro" [size]="bp.
|
|
137
|
+
<sui-tab-chips [chips]="filtros" [(value)]="filtro" [size]="bp.sizeChips()" />
|
|
134
138
|
```
|
|
135
139
|
|
|
140
|
+
### Por dispositivo (D16)
|
|
141
|
+
|
|
142
|
+
Fila de `tab-chips` en la tabla de D16 (dueño, 05-10-2026): se toca, así que va grande en todo lo
|
|
143
|
+
táctil y `medium` en la computadora.
|
|
144
|
+
|
|
145
|
+
| dispositivo | size | nota |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| celular chico (< 380 px) | `xlarge` (44) | D16 pide `medium` con área tocable de 44, pero el DS todavía no estira el área de los `medium` (36). Hasta que lo haga, se queda el grande |
|
|
148
|
+
| celular (380–767 px) | `xlarge` (44) | el size que llega al piso de 44 |
|
|
149
|
+
| tablet táctil (`pointer: coarse`) | `xlarge` (44) | se toca con el dedo, aunque mida más de 767 |
|
|
150
|
+
| computadora (`pointer: fine`) | `medium` (36) | también en filtros de tablas; `small` no se usa |
|
|
151
|
+
|
|
152
|
+
Ultrawide (≥ 1920 px): igual que la computadora, `medium`. `large` (40) no sale de ningún
|
|
153
|
+
dispositivo: no llega a 44.
|
|
154
|
+
|
|
155
|
+
En master-pedidos: `[size]="bp.sizeChips()"`.
|
|
156
|
+
|
|
157
|
+
Excepción que hay hoy: `pages/super-admin/master-overview/master-overview.ts:165` (`sizeRango()`)
|
|
158
|
+
pasa `medium` en el teléfono porque los cinco períodos en `xlarge` no entran en los 398 px de un
|
|
159
|
+
celular de 430. Deja el chip en 36, debajo del piso de 44, aunque la fila se desliza. Pendiente de
|
|
160
|
+
confirmar con el dueño; no se copia a otras pantallas.
|
|
161
|
+
|
|
136
162
|
## Pista de scroll (canon, aprobado por el dueño el 05-10-2026)
|
|
137
163
|
|
|
138
164
|
Desde la **0.24.0**. La barra de scroll está oculta, así que con chips que no entran no se notaba
|
|
@@ -217,15 +243,59 @@ type SuiTabChipsSize = 'small' | 'medium' | 'large' | 'xlarge';
|
|
|
217
243
|
- **El chip activo es oscuro** (`bg-strong-950`), no naranja: es el estilo del componente, no se
|
|
218
244
|
cambia por pantalla.
|
|
219
245
|
|
|
246
|
+
## Bien y mal
|
|
247
|
+
|
|
248
|
+
El número de pendientes
|
|
249
|
+
|
|
250
|
+
```html
|
|
251
|
+
<!-- ❌ mal: el número va dentro del label (armado en pages/notifications/notifications.ts:194) -->
|
|
252
|
+
<sui-tab-chips [size]="bp.sizeChips()" [(value)]="tab"
|
|
253
|
+
[chips]="[{ value: 'todas', label: 'Todas' }, { value: 'no_leidas', label: 'No leídas (3)' }]" />
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
```html
|
|
257
|
+
<!-- ✅ bien -->
|
|
258
|
+
<sui-tab-chips [size]="bp.sizeChips()" [(value)]="tab"
|
|
259
|
+
[chips]="[{ value: 'todas', label: 'Todas' }, { value: 'no_leidas', label: 'No leídas', count: 3 }]" />
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Dos modos de la misma vista
|
|
263
|
+
|
|
264
|
+
```html
|
|
265
|
+
<!-- ❌ mal: 2 opciones excluyentes de la misma vista; no es un filtro (pages/super-admin/master-semanas/master-semanas.html:80) -->
|
|
266
|
+
<sui-tab-chips [size]="bp.sizeChips()" [chips]="vistas" [value]="vista()"
|
|
267
|
+
(valueChange)="vista.set($any($event))" />
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
```html
|
|
271
|
+
<!-- ✅ bien -->
|
|
272
|
+
<sui-segmented-control [size]="bp.tactil() ? '2xlarge' : 'medium'" [tabs]="vistas" [(active)]="vista" />
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Chips de sugerencia junto a un texto libre (los chips con su propio signal y «Otro motivo» primero en `chipsMotivo`)
|
|
276
|
+
|
|
277
|
+
```html
|
|
278
|
+
<!-- ❌ mal: chips y textarea comparten el signal; cada tecla rebota al primer chip -->
|
|
279
|
+
<sui-tab-chips [size]="bp.sizeChips()" [chips]="motivos" [(value)]="motivo" />
|
|
280
|
+
<sui-textarea label="Motivo" [(value)]="motivo" />
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
```html
|
|
284
|
+
<!-- ✅ bien -->
|
|
285
|
+
<sui-tab-chips [size]="bp.sizeChips()" [chips]="chipsMotivo" [value]="chip()" (valueChange)="elegirChip($event)" />
|
|
286
|
+
<sui-textarea label="Motivo" [(value)]="motivo" />
|
|
287
|
+
```
|
|
288
|
+
|
|
220
289
|
## Ejemplo
|
|
221
290
|
|
|
222
291
|
```html
|
|
223
292
|
<!-- Filtro de estado: «Todos» primero -->
|
|
224
293
|
<sui-tab-chips
|
|
294
|
+
[size]="bp.sizeChips()"
|
|
225
295
|
[chips]="[{ value: 'todos', label: 'Todos' }, { value: 'activos', label: 'Activos' },
|
|
226
296
|
{ value: 'entregados', label: 'Entregados' }, { value: 'cancelados', label: 'Cancelados' }]"
|
|
227
297
|
[(value)]="filtro" />
|
|
228
298
|
|
|
229
299
|
<!-- Categorías de la carta -->
|
|
230
|
-
<sui-tab-chips [chips]="categorias()" [value]="categoria()" (valueChange)="irA($event)" [sticky]="true" />
|
|
300
|
+
<sui-tab-chips [size]="bp.sizeChips()" [chips]="categorias()" [value]="categoria()" (valueChange)="irA($event)" [sticky]="true" />
|
|
231
301
|
```
|