@ajuarezso/sui-design-system 0.25.0 → 0.25.2
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/fesm2022/ajuarezso-sui-design-system.mjs +216 -227
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +68 -45
|
@@ -57,9 +57,9 @@ checkbox-card.**
|
|
|
57
57
|
| `label` | Siempre. El nombre de la opción, corto: «Delivery», «Lo antes posible». | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
58
58
|
| `description` | Casi siempre: la consecuencia de elegirla («Lo revisamos y te transferimos. Puede tardar unas horas.»). | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
59
59
|
| `sublabel` | Una precisión corta entre paréntesis («(canal estable)», «(sin OTA)»). Nunca la explicación: eso es `description`. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
60
|
-
| `badge` | Marca una opción frente a las otras: «Por defecto». Con string sale azul `light`; pasa el objeto con el color que corresponda según el badge
|
|
60
|
+
| `badge` | Marca una opción frente a las otras: «Por defecto». Con string sale azul `light`; pasa el objeto con el color que corresponda según el badge. Si «Por defecto» va `gray` o con el azul de hoy espera P48. | propuesta, espera P48 |
|
|
61
61
|
| `disabled` | La opción existe pero hoy no se puede: di por qué en la `description` («El local está cerrado ahora»). | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
62
|
-
| `checked` / `[(ngModel)]` / `sui-radio-group` | El estado: `[checked]` + `(selected)` sueltos (lo
|
|
62
|
+
| `checked` / `[(ngModel)]` / `sui-radio-group` | El estado: `[checked]` + `(selected)` sueltos (lo que más usa la app hoy), o `ngModel` con `name` (checkout), o dentro de un `sui-radio-group`. Cuál es el canon (grupo, o sueltos como lo normal) espera P49. | propuesta, espera P49 |
|
|
63
63
|
|
|
64
64
|
### `size` (el radio de adentro)
|
|
65
65
|
|
|
@@ -67,7 +67,7 @@ checkbox-card.**
|
|
|
67
67
|
|---|---|---|
|
|
68
68
|
| `xlarge` (28) | Mobile, vía `bp.controlSize()`. | canon (aprobado por el dueño, 28-09-2026: «componentes grandes») |
|
|
69
69
|
| `large` (24) | Desktop, vía `bp.controlSize()`. | canon (aprobado por el dueño, 28-09-2026) |
|
|
70
|
-
| `medium` (20, default) | No usar en pantallas nuevas. | canon (aprobado por el dueño, 28-09-2026) |
|
|
70
|
+
| `medium` (20, default) | No usar en pantallas nuevas, tampoco en la computadora. | canon (aprobado por el dueño, 28-09-2026) · D16, dueño 06-10-2026 |
|
|
71
71
|
|
|
72
72
|
**Usos de hoy que rompen las reglas: 0.** Los 5 que iban sin el size del breakpoint y el
|
|
73
73
|
`xlarge` fijo de `pages/customer/mandadito/mandadito.html:30` pasaron a `bp.controlSize()` el
|
|
@@ -92,13 +92,27 @@ sola. El `size` cambia solo el radio.
|
|
|
92
92
|
<sui-radio-card [size]="bp.controlSize()" … /> <!-- isMobile() ? 'xlarge' : 'large' -->
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
+
### Por dispositivo (D16)
|
|
96
|
+
|
|
97
|
+
| dispositivo | size | nota |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| celular chico (< 380) | `xlarge` (radio 28) | la card entera ya pasa de 44; el size solo agranda el radio |
|
|
100
|
+
| celular (380–767) | `xlarge` (radio 28) | |
|
|
101
|
+
| tablet táctil (`pointer: coarse`) | `xlarge` (radio 28) | `bp.controlSize()` mira solo el ancho: un iPad de 768 o más recibe `large` hasta que el helper mire el puntero |
|
|
102
|
+
| computadora (`pointer: fine`) | `large` (radio 24) | un paso menos que el celular; no baja a `medium` (D16, dueño 06-10-2026) |
|
|
103
|
+
|
|
104
|
+
Ultrawide: igual que la computadora (`large`).
|
|
105
|
+
|
|
106
|
+
En master-pedidos: `[size]="bp.controlSize()"` (`xlarge` hasta 767 px, `large` desde ahí). La
|
|
107
|
+
expresión exacta de D16, con la tablet, es `bp.tactil() ? 'xlarge' : 'large'`.
|
|
108
|
+
|
|
95
109
|
## «No usar»: por qué no hoy y cuándo sí
|
|
96
110
|
|
|
97
111
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
98
112
|
|---|---|---|
|
|
99
113
|
| `type="brand"` (0 usos) | no hay servicios de terceros que elegir | elegir el canal por el que te contactamos (WhatsApp, correo) con su logo (`brand`) |
|
|
100
114
|
| `type="card-provider"` (0 usos) | no hay pago con tarjeta guardada | elegir una tarjeta guardada en el checkout, cuando entre Culqi / Niubiz |
|
|
101
|
-
| `size="medium"` | el radio de 20 se pierde en el teléfono |
|
|
115
|
+
| `size="medium"` | el radio de 20 se pierde en el teléfono | no hay: en la computadora va `large` (D16, dueño 06-10-2026) |
|
|
102
116
|
|
|
103
117
|
## API
|
|
104
118
|
|
|
@@ -142,12 +156,52 @@ Implementa `ControlValueAccessor` (el valor del form es el `value` elegido). Den
|
|
|
142
156
|
- Suelta (sin grupo), elegirla la marca pero **no desmarca a las otras**: el padre tiene que
|
|
143
157
|
bindear `[checked]` de todas a la misma señal. Suelta, además, **cada card es una parada de Tab
|
|
144
158
|
y no hay flechas**; dentro de `sui-radio-group` sí hay un solo tab stop y flechas (revisión 04-10-2026).
|
|
159
|
+
Cuál de las dos formas es el canon espera P49.
|
|
145
160
|
- `badge` con string sale **azul `light` `small`** (en `sui-content-label` sale naranja).
|
|
146
161
|
- `size` cambia solo el radio, no el padding ni el alto de la card.
|
|
147
162
|
|
|
163
|
+
## Bien y mal
|
|
164
|
+
|
|
165
|
+
Motivos de cancelación con un radio nativo
|
|
166
|
+
|
|
167
|
+
```html
|
|
168
|
+
<!-- ❌ mal: radio del navegador, sin tamaño ni foco del DS (pages/driver/driver-order-detail/driver-order-detail.html:874) -->
|
|
169
|
+
<label class="ts__modal-reason">
|
|
170
|
+
<input type="radio" name="driverCancelReason" [value]="reason"
|
|
171
|
+
[checked]="cancelReasonSelected() === reason" (change)="cancelReasonSelected.set(reason)" />
|
|
172
|
+
<span>{{ reason }}</span>
|
|
173
|
+
</label>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
```html
|
|
177
|
+
<!-- ✅ bien: igual que la pantalla hermana, pages/orders/orders.html:567 (sueltas con [checked]; si va en sui-radio-group espera P49) -->
|
|
178
|
+
<sui-radio-card type="basic" [size]="bp.controlSize()" [value]="reason" [label]="reason"
|
|
179
|
+
[checked]="cancelReasonSelected() === reason" (selected)="cancelReasonSelected.set(reason)" />
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Suelta, sin `[checked]`
|
|
183
|
+
|
|
184
|
+
```html
|
|
185
|
+
<!-- ❌ mal: elegir una no desmarca a las otras; quedan dos marcadas -->
|
|
186
|
+
<sui-radio-card [size]="bp.controlSize()" value="delivery" label="Delivery" (selected)="modo.set('delivery')" />
|
|
187
|
+
<sui-radio-card [size]="bp.controlSize()" value="pickup" label="Recojo en tienda" (selected)="modo.set('pickup')" />
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
```html
|
|
191
|
+
<!-- ✅ bien: el grupo decide cuál está marcada (como pages/super-admin/master-settings/master-settings.html:438) -->
|
|
192
|
+
<sui-radio-group [ngModel]="modo()" (ngModelChange)="modo.set($event)">
|
|
193
|
+
<sui-radio-card [size]="bp.controlSize()" value="delivery" label="Delivery" />
|
|
194
|
+
<sui-radio-card [size]="bp.controlSize()" value="pickup" label="Recojo en tienda" />
|
|
195
|
+
</sui-radio-group>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Sueltas con `[checked]="modo() === '…'"` + `(selected)` también funciona (es lo que hace hoy casi
|
|
199
|
+
toda la app). Cuál de las dos es el canon espera P49.
|
|
200
|
+
|
|
148
201
|
## Ejemplo
|
|
149
202
|
|
|
150
203
|
```html
|
|
204
|
+
<!-- suelta con [checked], como casi toda la app; si va en sui-radio-group espera P49 -->
|
|
151
205
|
<sui-radio-card
|
|
152
206
|
[size]="bp.controlSize()"
|
|
153
207
|
type="left-icon"
|
|
@@ -36,9 +36,9 @@ o con peso → radio-card · muchas → select.**
|
|
|
36
36
|
> motivos («Spam», «Acoso», «Infringe las reglas»); el «avanzado» suma (Sublabel), badge «NEW»,
|
|
37
37
|
> descripción, Link Button y la versión con el círculo a la derecha.
|
|
38
38
|
>
|
|
39
|
-
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`)
|
|
40
|
-
> **
|
|
41
|
-
> (ver abajo a qué componente va).
|
|
39
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`), revisado
|
|
40
|
+
> el 06-10-2026: **2 usos**, las franjas horarias del checkout (con `flip`) y los distritos de
|
|
41
|
+
> «Trabaja con nosotros». Más **1 radio nativo** de motivos (ver abajo a qué componente va).
|
|
42
42
|
|
|
43
43
|
### Las piezas
|
|
44
44
|
|
|
@@ -52,17 +52,21 @@ o con peso → radio-card · muchas → select.**
|
|
|
52
52
|
| `link` | «Ver detalle» que no elige la opción. Solo se ve con `description`. | según la guía del DS |
|
|
53
53
|
| `flip` | Círculo a la derecha en listas de opciones tipo hoja (sheet) y de ajustes, donde el texto es lo que se lee y el círculo es el indicador, como las franjas del checkout. En formularios, a la izquierda. | canon (aprobado por el dueño, 03-10-2026) |
|
|
54
54
|
| `disabled` | La opción existe pero no aplica (franja ya llena). | según la guía del DS |
|
|
55
|
-
| `size` | `medium` (default, Figma): círculo 20, label 14/20. `large`: círculo 24, label 16/24. `xlarge`: círculo 28, label 16/24. En large y xlarge el sublabel y la descripción se quedan en 12/16 (canon, dueño 04-10-2026); el badge sin `size` propio sube a `medium` / `large` y el link a `medium`. Se usa con `[size]="bp.controlSize()"`. | `medium`: según la guía del DS · `large` / `xlarge`: canon (aprobado por el dueño, 03-10-2026), extensión SUI |
|
|
55
|
+
| `size` | `medium` (default, Figma): círculo 20, label 14/20. `large`: círculo 24, label 16/24. `xlarge`: círculo 28, label 16/24. En large y xlarge el sublabel y la descripción se quedan en 12/16 (canon, dueño 04-10-2026); el badge sin `size` propio sube a `medium` / `large` y el link a `medium`. `2xlarge`: círculo 28 con la fila a 44 (su uso por dispositivo está pendiente, ver D16). Se usa con `[size]="bp.controlSize()"`. | `medium`: según la guía del DS · `large` / `xlarge`: canon (aprobado por el dueño, 03-10-2026), extensión SUI |
|
|
56
56
|
|
|
57
57
|
**Usos de hoy:**
|
|
58
58
|
|
|
59
|
-
- **1 radio nativo de motivos:** `pages/driver/driver-order-detail/driver-order-detail.html:
|
|
59
|
+
- **1 radio nativo de motivos:** `pages/driver/driver-order-detail/driver-order-detail.html:874`
|
|
60
60
|
(motivos de cancelación del repartidor). Por la pantalla hermana va a `sui-radio-card
|
|
61
61
|
type="basic"` como `pages/orders/orders.html:567`, no a este componente.
|
|
62
|
-
-
|
|
63
|
-
`
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
- `pages/customer/checkout/checkout.html:474` controla la selección con `[checked]` +
|
|
63
|
+
`(selected)` por fila, sin `sui-radio-group`. Funciona porque el padre fija el estado, pero no se
|
|
64
|
+
enchufa a un formulario. Va con `bp.isMobile() ? '2xlarge' : 'medium'`: en la computadora baja a
|
|
65
|
+
`medium`, que D16 ya no usa (va `large`, dueño 06-10-2026). El `2xlarge` del teléfono está
|
|
66
|
+
pendiente (ver D16).
|
|
67
|
+
- `pages/customer/trabaja/trabaja.html:150` va con `bp.isMobile() ? 'xlarge' : 'large'`, que es lo
|
|
68
|
+
mismo que `bp.controlSize()`: cumple la fila de D16. Sin descripción la fila mide 28 en el
|
|
69
|
+
teléfono, no 44; si pasa a `2xlarge` está pendiente (ver D16).
|
|
66
70
|
|
|
67
71
|
## Tamaño en mobile y en web
|
|
68
72
|
|
|
@@ -74,12 +78,12 @@ dueño, 28-09-2026).
|
|
|
74
78
|
|
|
75
79
|
| uso | mobile | web | fuente |
|
|
76
80
|
|---|---|---|---|
|
|
77
|
-
| opciones de un formulario o una hoja (franjas horarias, método de entrega) | `
|
|
78
|
-
| lista densa de desktop | — | `
|
|
81
|
+
| opciones de un formulario o una hoja (franjas horarias, método de entrega) | `xlarge` (círculo 28, label 16/24; sin descripción la fila mide 28, no 44: `2xlarge` pendiente, ver D16) | `large` (círculo 24, label 16/24) | D16 (fila de checkbox, radio y switch; dueño 06-10-2026) |
|
|
82
|
+
| lista densa de desktop | — | `large` (círculo 24): no baja a `medium` | D16, dueño 06-10-2026 |
|
|
79
83
|
| opciones con mucho contexto cada una | `sui-radio-card` con `bp.controlSize()` | `sui-radio-card` con `bp.controlSize()` | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
80
84
|
|
|
81
85
|
```html
|
|
82
|
-
<sui-radio-label value="recojo" [size]="bp.
|
|
86
|
+
<sui-radio-label value="recojo" [size]="bp.controlSize()" label="Recojo en tienda" />
|
|
83
87
|
```
|
|
84
88
|
|
|
85
89
|
| size | círculo | label | sublabel / descripción | alto de la fila sin descripción |
|
|
@@ -89,21 +93,42 @@ dueño, 28-09-2026).
|
|
|
89
93
|
| `xlarge` | 28 | 16/24 | 12/16 | 28 |
|
|
90
94
|
| `2xlarge` | 28 | 16/24 | 12/16 | **44** (`min-height`) |
|
|
91
95
|
|
|
92
|
-
`2xlarge` (canon
|
|
93
|
-
pero la fila mide 44 como mínimo con todo centrado en vertical, y el
|
|
94
|
-
(regla del 03-10). Con descripción la fila ya pasa de 44 y vuelve a
|
|
96
|
+
`2xlarge` (canon, dueño 04-10-2026: piso táctil 44 en el teléfono) tiene el mismo círculo de 28 y
|
|
97
|
+
el mismo label que `xlarge`, pero la fila mide 44 como mínimo con todo centrado en vertical, y el
|
|
98
|
+
texto secundario se queda en 12 (regla del 03-10). Con descripción la fila ya pasa de 44 y vuelve a
|
|
99
|
+
alinearse arriba. Si reemplaza a `xlarge` en el celular y la tablet está **pendiente** (ver D16).
|
|
95
100
|
|
|
96
101
|
Toda la fila se toca (el host recibe el click). Con `xlarge` el contenido baja 2 px para que la
|
|
97
102
|
línea del label (24) quede centrada con el círculo (28).
|
|
98
103
|
|
|
99
|
-
Sin descripción, la fila en `xlarge` mide 28 px (lo que mide el círculo):
|
|
100
|
-
`2xlarge
|
|
104
|
+
Sin descripción, la fila en `xlarge` mide 28 px (lo que mide el círculo):
|
|
105
|
+
`2xlarge` la lleva a 44 (pendiente, ver D16). Con descripción llega sola: 2 + 24 (label) + 4 + 16 (descripción) = 46 px
|
|
101
106
|
en `xlarge` y en `2xlarge`.
|
|
102
107
|
|
|
103
108
|
**Regla de tamaños aplicada (canon, dueño 04-10-2026):** en `large` y `xlarge` el label sube a
|
|
104
109
|
16/24 y el sublabel y la descripción se quedan en 12/16, igual que `sui-switch-label`. Antes subían
|
|
105
110
|
a 14/20. El badge y el link siguen creciendo con el size.
|
|
106
111
|
|
|
112
|
+
### Por dispositivo (D16)
|
|
113
|
+
|
|
114
|
+
| dispositivo | size | nota |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| celular chico (< 380) | `xlarge` | círculo de 28 |
|
|
117
|
+
| celular (380–767) | `xlarge` | |
|
|
118
|
+
| 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 |
|
|
119
|
+
| computadora (`pointer: fine`) | `large` | un paso menos que el celular; no baja a `medium` (D16, dueño 06-10-2026) |
|
|
120
|
+
|
|
121
|
+
Ultrawide: igual que la computadora (`large`).
|
|
122
|
+
|
|
123
|
+
En master-pedidos: `[size]="bp.controlSize()"` (`xlarge` hasta 767 px, `large` desde ahí). La
|
|
124
|
+
expresión exacta de D16, con la tablet, es `bp.tactil() ? 'xlarge' : 'large'`.
|
|
125
|
+
|
|
126
|
+
**Pendiente: `2xlarge` en el celular y la tablet.** Sin descripción, `xlarge` deja la fila en 28 px,
|
|
127
|
+
por debajo del piso de 44. El dueño aprobó `2xlarge` el 04-10-2026 justo para eso (fila de 44), pero
|
|
128
|
+
la fila de D16 dice `xlarge` para toda la familia y ningún helper devuelve `2xlarge`. Falta que el
|
|
129
|
+
dueño decida si en este componente el celular y la tablet pasan a `2xlarge` (y que D16 y
|
|
130
|
+
`bp.controlSize()` lo recojan). Mientras no lo decida, manda la fila de D16: `xlarge`.
|
|
131
|
+
|
|
107
132
|
## «No usar»: por qué no hoy y cuándo sí
|
|
108
133
|
|
|
109
134
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -140,7 +165,8 @@ a 14/20. El badge y el link siguen creciendo con el size.
|
|
|
140
165
|
- **No implementa `ControlValueAccessor`.** El formulario se engancha al `sui-radio-group`, no a
|
|
141
166
|
cada opción. Sin grupo, se maneja con `[(checked)]`.
|
|
142
167
|
- **`size` arranca en `medium`** (círculo de 20 px): sin `[size]="bp.controlSize()"` choca con la
|
|
143
|
-
regla de controles grandes (dueño, 28-09-2026)
|
|
168
|
+
regla de controles grandes (dueño, 28-09-2026) y con D16. Aun con `xlarge`, la fila sin
|
|
169
|
+
descripción queda en 28: si pasa a `2xlarge` está pendiente (ver D16).
|
|
144
170
|
- **Tocar una opción ya elegida no la desmarca** (bien, es un radio). Tocar el link tampoco la elige.
|
|
145
171
|
- **`link` solo se dibuja con `description`.**
|
|
146
172
|
- El `sui-radio` de adentro no recibe clics (`pointer-events: none`): no le pongas handlers.
|
|
@@ -151,12 +177,53 @@ a 14/20. El badge y el link siguen creciendo con el size.
|
|
|
151
177
|
- El badge con string sale naranja; en `sui-radio-card` el default es azul.
|
|
152
178
|
- `flip` usa CSS `order`: el orden para lector de pantalla no cambia.
|
|
153
179
|
|
|
180
|
+
## Bien y mal
|
|
181
|
+
|
|
182
|
+
Sin size
|
|
183
|
+
|
|
184
|
+
```html
|
|
185
|
+
<!-- ❌ mal: sin size queda en medium, círculo de 20 en el teléfono y en la computadora -->
|
|
186
|
+
<sui-radio-label [value]="d" [label]="d" />
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
```html
|
|
190
|
+
<!-- ✅ bien -->
|
|
191
|
+
<sui-radio-label [size]="bp.controlSize()" [value]="d" [label]="d" />
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Franjas horarias en la computadora
|
|
195
|
+
|
|
196
|
+
```html
|
|
197
|
+
<!-- ❌ mal: medium en la computadora; D16 no baja de large (pages/customer/checkout/checkout.html:474) -->
|
|
198
|
+
<sui-radio-label [size]="bp.isMobile() ? '2xlarge' : 'medium'" [value]="'' + f.inicioMs"
|
|
199
|
+
[label]="etiquetaFranja(f)" [flip]="true" [disabled]="!f.disponible" />
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
```html
|
|
203
|
+
<!-- ✅ bien (si el teléfono pasa a 2xlarge está pendiente, ver D16) -->
|
|
204
|
+
<sui-radio-label [size]="bp.controlSize()" [value]="'' + f.inicioMs"
|
|
205
|
+
[label]="etiquetaFranja(f)" [flip]="true" [disabled]="!f.disponible" />
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Link sin descripción
|
|
209
|
+
|
|
210
|
+
```html
|
|
211
|
+
<!-- ❌ mal: link solo se dibuja con description; «Ver precios» no aparece -->
|
|
212
|
+
<sui-radio-label value="pro" label="Plan Pro" [link]="{ label: 'Ver precios', href: '/precios' }" />
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
```html
|
|
216
|
+
<!-- ✅ bien -->
|
|
217
|
+
<sui-radio-label [size]="bp.controlSize()" value="pro" label="Plan Pro"
|
|
218
|
+
description="Facturación mensual." [link]="{ label: 'Ver precios', href: '/precios' }" />
|
|
219
|
+
```
|
|
220
|
+
|
|
154
221
|
## Ejemplo
|
|
155
222
|
|
|
156
223
|
```html
|
|
157
224
|
<sui-radio-group [(ngModel)]="motivo" class="lista-vertical">
|
|
158
225
|
@for (m of motivos; track m) {
|
|
159
|
-
<sui-radio-label [value]="m" [label]="m" />
|
|
226
|
+
<sui-radio-label [size]="bp.controlSize()" [value]="m" [label]="m" />
|
|
160
227
|
}
|
|
161
228
|
</sui-radio-group>
|
|
162
229
|
```
|
|
@@ -50,7 +50,7 @@ lista cargada, que viene con tope. La fórmula depende de `n`: otro denominador
|
|
|
50
50
|
| appearance | cuándo | ejemplo real | fuente |
|
|
51
51
|
|---|---|---|---|
|
|
52
52
|
| `inline` (default), `readonly` | **Mostrar** una nota: la fila de estrellas pelada. | `components/ratings-detail/ratings-detail.html:31` (la nota del local) | según la guía del DS (ejemplo «Rating Review») |
|
|
53
|
-
| `inline`, interactivo | Pedir la nota en grande: en el teléfono con `size="2xlarge"` (estrellas de 32 en botones de 44 × 44);
|
|
53
|
+
| `inline`, interactivo | Pedir la nota en grande: en el teléfono y la tablet con `size="2xlarge"` (estrellas de 32 en botones de 44 × 44); en la computadora, `medium`. | `pages/customer/rate-order/rate-order.html:95` y `:169` (hoy `2xlarge` / `xlarge`, cortado con `bp.isMobile()`) | teléfono: canon (dueño, 04-10-2026): piso táctil 44 · computadora: D16, dueño 05-10-2026 (antes `xlarge`) · el «cuándo inline vs bar» sigue como propuesta |
|
|
54
54
|
| `bar` | **Pedir** una nota en el celular: con `size="2xlarge"` las celdas miden 64 × 44 (36 en los demás sizes). | `components/rate-entity-card/rate-entity-card.html:40` | según la guía del DS (ejemplo «Rating Bar») |
|
|
55
55
|
| `cell` | **No usar** hoy (ver abajo). | — | según la guía del DS (ejemplo «Rating Cell») |
|
|
56
56
|
| `bar-area` | **No usar** hoy (ver abajo). | — | según la guía del DS (ejemplo «Rating Bar With Textarea») |
|
|
@@ -68,9 +68,9 @@ lista cargada, que viene con tope. La fórmula depende de `n`: otro denominador
|
|
|
68
68
|
|
|
69
69
|
| size | px | cuándo | fuente |
|
|
70
70
|
|---|---|---|---|
|
|
71
|
-
| `small` | 16 |
|
|
72
|
-
| `medium` (default) | 20 |
|
|
73
|
-
| `large` | 24 |
|
|
71
|
+
| `small` | 16 | **No se usa**: es chico. Las filas y listas de la computadora (cada reseña, tablas, historial) van en `medium`. | D16, dueño 05-10-2026 (antes «web: filas y listas», propuesta) |
|
|
72
|
+
| `medium` (default) | 20 | Computadora, tablet y celular chico: filas, listas, perfil, ficha y detalle. | D16, dueño 05-10-2026 |
|
|
73
|
+
| `large` | 24 | Celular (380–767): filas, listas, perfil y ficha (un paso más que la computadora). Computadora: la nota grande de un resumen, la card de una calificación enviada. | celular: D16, dueño 05-10-2026 · resumen en la computadora: propuesta, falta aprobación |
|
|
74
74
|
| `xlarge` | 28 | Extensión SUI. Mobile: la nota grande de un resumen. | propuesta, falta aprobación |
|
|
75
75
|
|
|
76
76
|
### El resto de las propiedades
|
|
@@ -98,8 +98,8 @@ lista cargada, que viene con tope. La fórmula depende de `n`: otro denominador
|
|
|
98
98
|
`pages/super-admin/master-users/master-user-sheet.html:142`.
|
|
99
99
|
- **1 rating usado como ícono** (`type="heart"` con `max=1` para los favoritos):
|
|
100
100
|
`components/ratings-detail/ratings-detail.html:45`. Va `sui-icon name="heart-3-fill"`.
|
|
101
|
-
- **A discutir, 2 `inline` interactivos de 28 px** como input:
|
|
102
|
-
`pages/customer/rate-order/rate-order.html:
|
|
101
|
+
- **A discutir, 2 `inline` interactivos de 28 px en la computadora** (en el teléfono ya van en `2xlarge`) como input:
|
|
102
|
+
`pages/customer/rate-order/rate-order.html:95` y `:169`. Alternativa: `appearance="bar"`.
|
|
103
103
|
|
|
104
104
|
## No usar: por qué no hoy y cuándo sí
|
|
105
105
|
|
|
@@ -120,15 +120,16 @@ Criterio de la app: **D16, tamaño por dispositivo** (canon, dueño, 05-10-2026)
|
|
|
120
120
|
380 px o más y, en lo que se toca, también la tablet (`pointer: coarse`). La columna «web» es la
|
|
121
121
|
computadora (`pointer: fine`) y, en lo que no se toca, también la tablet. En el celular chico
|
|
122
122
|
(< 380 px) va `medium` a la vista, sin achicar el área de 44 de lo que se toca. **Nada en `small` ni
|
|
123
|
-
`xsmall`**, salvo lo que el componente solo tiene en chico.
|
|
124
|
-
`
|
|
123
|
+
`xsmall`**, salvo lo que el componente solo tiene en chico. En la app, `bp.isMobile()` mira solo el
|
|
124
|
+
ancho (≤ 767 px); `bp.celular()` (380–767) y `bp.tactil()` (celular o pantalla táctil) ya miran los
|
|
125
|
+
380 px y el puntero: son las dos señales que usa este componente (ver «Por dispositivo (D16)»).
|
|
125
126
|
|
|
126
127
|
| uso | mobile | web | fuente |
|
|
127
128
|
|---|---|---|---|
|
|
128
|
-
| Mostrar en una fila o lista | `
|
|
129
|
-
| Mostrar en perfil o ficha | `large` (24) | `medium` (20) |
|
|
129
|
+
| Mostrar en una fila o lista | `large` (24) | `medium` (20) | D16, dueño 05-10-2026 (antes `medium` / `small`) |
|
|
130
|
+
| Mostrar en perfil o ficha | `large` (24) | `medium` (20) | D16, dueño 05-10-2026 |
|
|
130
131
|
| La nota grande de un resumen | `xlarge` (28) | `large` (24) | propuesta, falta aprobación |
|
|
131
|
-
| Pedir una nota | `2xlarge`: `inline` (estrellas de 32 en botones de 44 × 44) o `bar` (celdas de 64 × 44) | `bar` (64 × 36), o `inline` `
|
|
132
|
+
| Pedir una nota | `2xlarge`: `inline` (estrellas de 32 en botones de 44 × 44) o `bar` (celdas de 64 × 44) | `bar` (64 × 36), o `inline` `medium` con mouse | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · web: D16, dueño 05-10-2026 (lo que se toca va `medium` en la computadora; antes `large`, propuesta) |
|
|
132
133
|
|
|
133
134
|
```ts
|
|
134
135
|
readonly bp = inject(BreakpointsService); // master-pedidos: src/app/services/breakpoints.service.ts
|
|
@@ -136,7 +137,7 @@ readonly bp = inject(BreakpointsService); // master-pedidos: src/app/services/br
|
|
|
136
137
|
|
|
137
138
|
```html
|
|
138
139
|
<sui-rating [value]="local.rating" [readonly]="true" [halfStep]="true"
|
|
139
|
-
[size]="bp.
|
|
140
|
+
[size]="bp.celular() ? 'large' : 'medium'" ariaLabel="Nota del local" />
|
|
140
141
|
```
|
|
141
142
|
|
|
142
143
|
En `bar` el `size` no cuenta salvo `2xlarge` (celda de 44 de alto en vez de 36; íconos fijos de 20
|
|
@@ -157,6 +158,28 @@ nota de solo lectura sigue `medium`/`large`.
|
|
|
157
158
|
(el botón es el ícono, sin padding) y `2xlarge` 44 px (32 + 6 + 6); `bar` 36 px (8 + 20 + 8 de cada
|
|
158
159
|
celda) y en `2xlarge` 44 (12 + 20 + 12); `cell` 58 px (12 + 32 + 12 de padding y 2 de borde).
|
|
159
160
|
|
|
161
|
+
### Por dispositivo (D16)
|
|
162
|
+
|
|
163
|
+
`rating` no está en la tabla por componente de D16 (dueño, 05-10-2026), así que va por la regla
|
|
164
|
+
general y tiene **dos filas según el modo**: mostrar una nota (`readonly`) es «lo que no se toca» y
|
|
165
|
+
pedirla es «lo que se toca».
|
|
166
|
+
|
|
167
|
+
| dispositivo | size | nota |
|
|
168
|
+
|---|---|---|
|
|
169
|
+
| celular chico (< 380 px) | mostrar `medium` · pedir `2xlarge` | D16 pide `medium` con área de 44 para pedir, pero solo `2xlarge` llega a 44: hasta que el DS estire el área (nota ¹ de D16), se queda el grande |
|
|
170
|
+
| celular (380–767 px) | mostrar `large` · pedir `2xlarge` | mostrar sube un paso (P1 b); pedir: `inline` 44 × 44 o `bar` 64 × 44 |
|
|
171
|
+
| tablet táctil (`pointer: coarse`) | mostrar `medium` · pedir `2xlarge` | se pide con el dedo: mismo piso de 44 que el celular |
|
|
172
|
+
| computadora (`pointer: fine`) | mostrar `medium` · pedir `medium` | en `bar` el `size` no cuenta salvo `2xlarge` (celdas de 36) |
|
|
173
|
+
|
|
174
|
+
Ultrawide (≥ 1920 px): igual que la computadora. `small` no se usa en ningún dispositivo. La nota
|
|
175
|
+
grande de un resumen va un paso arriba de esta tabla (`large` en la computadora, `xlarge` en el
|
|
176
|
+
celular), y eso sigue en propuesta.
|
|
177
|
+
|
|
178
|
+
En master-pedidos, sin helper propio:
|
|
179
|
+
|
|
180
|
+
- mostrar: `[size]="bp.celular() ? 'large' : 'medium'"` (resumen, en propuesta: `bp.celular() ? 'xlarge' : 'large'`)
|
|
181
|
+
- pedir: `[size]="bp.tactil() ? '2xlarge' : 'medium'"`
|
|
182
|
+
|
|
160
183
|
## API
|
|
161
184
|
|
|
162
185
|
<!-- api:inicio -->
|
|
@@ -209,13 +232,57 @@ Implementa `ControlValueAccessor` sobre `value` (sirve con `formControlName`). `
|
|
|
209
232
|
nativo), Home/End van a 1 y al máximo, sin vuelta. Cada flecha elige y emite `valueChange`. Si
|
|
210
233
|
la pantalla ya escribe la nota al lado, ponle `aria-hidden="true"` para que no se lea dos veces.
|
|
211
234
|
|
|
235
|
+
## Bien y mal
|
|
236
|
+
|
|
237
|
+
Lo favorito no es una nota
|
|
238
|
+
|
|
239
|
+
```html
|
|
240
|
+
<!-- ❌ mal: un rating de un corazón como ícono (components/ratings-detail/ratings-detail.html:45) -->
|
|
241
|
+
<sui-rating type="heart" appearance="inline" [readonly]="true" [value]="1" [max]="1" />
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
```html
|
|
245
|
+
<!-- ✅ bien: ícono del mismo tamaño que las estrellas de al lado -->
|
|
246
|
+
<sui-icon name="heart-3-fill" [size]="bp.celular() ? 28 : 24" aria-hidden="true" />
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
La nota grande de un resumen
|
|
250
|
+
|
|
251
|
+
```html
|
|
252
|
+
<!-- ❌ mal: tamaños invertidos, más chico en el celular (components/ratings-detail/ratings-detail.html:34) -->
|
|
253
|
+
<sui-rating [value]="average()" [readonly]="true" [halfStep]="true"
|
|
254
|
+
[size]="bp.isMobile() ? 'large' : 'xlarge'" />
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
```html
|
|
258
|
+
<!-- ✅ bien: regla general de lo que no se toca, un paso más grande en el celular.
|
|
259
|
+
El paso extra del resumen (`xlarge` / `large`) sigue en propuesta, falta aprobación -->
|
|
260
|
+
<sui-rating [value]="average()" [readonly]="true" [halfStep]="true"
|
|
261
|
+
[size]="bp.celular() ? 'large' : 'medium'" />
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
La nota en una fila o lista
|
|
265
|
+
|
|
266
|
+
```html
|
|
267
|
+
<!-- ❌ mal: `small` fijo, 16 px también en el celular (pages/drivers/drivers.html:160, pages/customer/order-tracking/order-tracking.html:407) -->
|
|
268
|
+
<sui-rating type="star" size="small" [value]="driver.rating" [readonly]="true" [halfStep]="true" />
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
```html
|
|
272
|
+
<!-- ✅ bien -->
|
|
273
|
+
<sui-rating type="star" [size]="bp.celular() ? 'large' : 'medium'"
|
|
274
|
+
[value]="driver.rating" [readonly]="true" [halfStep]="true" />
|
|
275
|
+
```
|
|
276
|
+
|
|
212
277
|
## Ejemplo
|
|
213
278
|
|
|
214
279
|
```html
|
|
215
280
|
<!-- Mostrar la nota del local (promedio, desde el agregado) -->
|
|
216
281
|
<span class="nota">{{ notaTexto }}</span>
|
|
217
|
-
<sui-rating [value]="local.rating" [readonly]="true" [halfStep]="true"
|
|
282
|
+
<sui-rating [value]="local.rating" [readonly]="true" [halfStep]="true"
|
|
283
|
+
[size]="bp.celular() ? 'large' : 'medium'" aria-hidden="true" />
|
|
218
284
|
|
|
219
285
|
<!-- Pedir la nota al repartidor -->
|
|
220
|
-
<sui-rating appearance="bar" type="star" [
|
|
286
|
+
<sui-rating appearance="bar" type="star" [size]="bp.tactil() ? '2xlarge' : 'medium'"
|
|
287
|
+
[(value)]="nota" ariaLabel="Califica al repartidor" />
|
|
221
288
|
```
|
|
@@ -47,6 +47,12 @@ Regla corta: **hoy, siempre `sui-textarea`.**
|
|
|
47
47
|
**No tiene `size`.** Los botones de la barra son de 28 px: **no tiene tamaño suficiente para
|
|
48
48
|
mobile**. Si alguna vez se usa, que sea en el panel web.
|
|
49
49
|
|
|
50
|
+
### Por dispositivo (D16)
|
|
51
|
+
|
|
52
|
+
No aplica: no tiene input `size` y la barra mide 28 px en todos los dispositivos, así que no llega a
|
|
53
|
+
los 44 de D16 (dueño, 05-10-2026) en el celular ni en la tablet táctil. Solo en la computadora
|
|
54
|
+
(`pointer: fine`); en master-pedidos no hay nada que bindear.
|
|
55
|
+
|
|
50
56
|
## «No usar»: por qué no hoy y cuándo sí
|
|
51
57
|
|
|
52
58
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -106,6 +112,45 @@ Sub-componente: `sui-rich-editor-item` (cada botón de la barra).
|
|
|
106
112
|
- Por default muestra solo la barra: sin `[editable]="true"` no hay dónde escribir.
|
|
107
113
|
- El label de tamaño por default es técnico («14px»); el de título ya está en español («Título», 04-10-2026).
|
|
108
114
|
|
|
115
|
+
## Bien y mal
|
|
116
|
+
|
|
117
|
+
Una descripción o una nota
|
|
118
|
+
|
|
119
|
+
```html
|
|
120
|
+
<!-- ❌ mal: el texto se guarda y se muestra plano; la barra sobra y en el teléfono no se toca -->
|
|
121
|
+
<sui-rich-editor [editable]="true" placeholder="Describe el producto…" [(value)]="descripcion" />
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
```html
|
|
125
|
+
<!-- ✅ bien -->
|
|
126
|
+
<sui-textarea [size]="bp.sizeControl()" label="Descripción" [rows]="4"
|
|
127
|
+
placeholder="Describe el producto…" [(value)]="descripcion" />
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
La barra entera esperando que todo funcione
|
|
131
|
+
|
|
132
|
+
```html
|
|
133
|
+
<!-- ❌ mal: título, tamaño, enlace, comentario y mención solo emiten (action); nadie los resuelve -->
|
|
134
|
+
<sui-rich-editor [editable]="true" [(value)]="html" />
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```html
|
|
138
|
+
<!-- ✅ bien: solo lo que el editor aplica solo -->
|
|
139
|
+
<sui-rich-editor layout="formatting" [showMore]="false" [editable]="true" [(value)]="html" />
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Un editor sin dónde escribir
|
|
143
|
+
|
|
144
|
+
```html
|
|
145
|
+
<!-- ❌ mal: sin [editable]="true" solo se dibuja la barra -->
|
|
146
|
+
<sui-rich-editor layout="formatting" placeholder="Escribe la respuesta…" [(value)]="html" />
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
```html
|
|
150
|
+
<!-- ✅ bien -->
|
|
151
|
+
<sui-rich-editor layout="formatting" [editable]="true" placeholder="Escribe la respuesta…" [(value)]="html" />
|
|
152
|
+
```
|
|
153
|
+
|
|
109
154
|
## Ejemplo
|
|
110
155
|
|
|
111
156
|
```html
|
|
@@ -34,13 +34,15 @@ tab-chips · secciones → tab menu.**
|
|
|
34
34
|
>
|
|
35
35
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`):
|
|
36
36
|
> **5 usos en 4 archivos**. Tamaños: 3 `small`, 1 `medium`, 1 sin `size` (`medium`). 1 con solo
|
|
37
|
-
> íconos (vista cuadrícula / lista del catálogo).
|
|
37
|
+
> íconos (vista cuadrícula / lista del catálogo). El 06-10-2026 ya eran **9 usos en 7 archivos**
|
|
38
|
+
> (ver «Usos de hoy» abajo).
|
|
38
39
|
|
|
39
40
|
### `size`
|
|
40
41
|
|
|
41
42
|
| size | cuándo | fuente |
|
|
42
43
|
|---|---|---|
|
|
43
|
-
| `
|
|
44
|
+
| `2xlarge` | Celular y tablet táctil: el único que llega a 44 px por segmento. | canon (dueño, 04-10-2026: piso táctil 44 en el teléfono) y D16, dueño 05-10-2026 |
|
|
45
|
+
| `xlarge` | No se usa: 40 px no llega a 44 en el teléfono y sobra en la computadora. Ninguna pantalla de la app lo usa (medido el 06-10-2026; solo aparece en la vitrina `master-preview`). | D16, dueño 05-10-2026 (antes «mobile», 28-09-2026) |
|
|
44
46
|
| `large` | No aporta: 32 px, chico para el dedo y grande para web. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
45
47
|
| `medium` (default) | Computadora: junto a títulos o filtros, también solo íconos en una barra. | canon (dueño, 05-10-2026, D16); el valor exacto, canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
46
48
|
| `small` | No usar: es chico. Los íconos de una barra (cuadrícula / lista) van en `medium`. | canon (dueño, 05-10-2026, D16) |
|
|
@@ -57,17 +59,21 @@ tab-chips · secciones → tab menu.**
|
|
|
57
59
|
**Usos de hoy que rompen las reglas:**
|
|
58
60
|
|
|
59
61
|
- **2 dentro de un borrador que se guarda después (a discutir):**
|
|
60
|
-
`pages/super-admin/master-settings/master-settings.html:
|
|
61
|
-
«Precio único») y `:
|
|
62
|
+
`pages/super-admin/master-settings/master-settings.html:281` (modo de envío: «Por distancia» /
|
|
63
|
+
«Precio único») y `:314` («Por calle» / «En línea recta»). La guía dice que se aplica de
|
|
62
64
|
inmediato; aquí la elección espera al «Guardar». Es trabajo de `sui-radio-card`.
|
|
63
|
-
- **1 con textos largos, a verificar en mobile:** `pages/super-admin/master-roles/master-roles.html:
|
|
65
|
+
- **1 con textos largos, a verificar en mobile:** `pages/super-admin/master-roles/master-roles.html:48`
|
|
64
66
|
(«Administrador de ciudad» / «Jefe de operaciones»). Por ancho de texto quedan apretados cerca
|
|
65
67
|
del borde a 390 px; no se midió en la pantalla real.
|
|
66
|
-
- **2 en `small` con texto** (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
- **2 en `small` con texto** (D16: `small` no se usa): `master-settings.html:281` y `:314`. El
|
|
69
|
+
tercero, `pages/products/products.html:83`, va en `small` en la computadora con solo íconos: con
|
|
70
|
+
D16 también pasa a `medium`.
|
|
71
|
+
- **Sin tamaño por dispositivo** (revisado el 06-10-2026): `master-roles.html:48` (sin `size`) y
|
|
72
|
+
`pages/super-admin/master-categorias/master-categorias.html:124` (`medium` fijo) se quedan en 28
|
|
73
|
+
en el teléfono; `master-settings.html:224` usa `tallaServicio()` (`master-settings.ts:452`), que
|
|
74
|
+
da `large` (32) en el teléfono. Los que cortan con `bp.isMobile()`
|
|
75
|
+
(`pages/driver/driver-schedule/driver-schedule.html:31`, `pages/overview/overview.html:45`,
|
|
76
|
+
`pages/driver/driver-dashboard/driver-dashboard.html:865`) dejan la tablet táctil en `medium`.
|
|
71
77
|
|
|
72
78
|
## Tamaño en mobile y en web
|
|
73
79
|
|
|
@@ -80,8 +86,8 @@ En large, xlarge y 2xlarge el texto sube a 16 px (regla del 03-10-2026): Label/M
|
|
|
80
86
|
`large` el padding del segmento con texto bajó de 6 a 4 para que siga midiendo 32.
|
|
81
87
|
|
|
82
88
|
**`2xlarge` es el size del teléfono**: 44 px por segmento, con texto o solo ícono (canon (dueño,
|
|
83
|
-
04-10-2026): piso táctil 44 en el teléfono). `xlarge` (40) no
|
|
84
|
-
|
|
89
|
+
04-10-2026): piso táctil 44 en el teléfono). `xlarge` (40) no se usa: no llega a 44 y ninguna
|
|
90
|
+
pantalla de la app lo tiene.
|
|
85
91
|
|
|
86
92
|
| uso | mobile | web | fuente |
|
|
87
93
|
|---|---|---|---|
|
|
@@ -89,9 +95,27 @@ ya lo usan.
|
|
|
89
95
|
| solo íconos en una barra (cuadrícula / lista) | `2xlarge` (44) | `medium` | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · web: canon (dueño, 05-10-2026, D16), antes `small` |
|
|
90
96
|
|
|
91
97
|
```html
|
|
92
|
-
<sui-segmented-control [size]="bp.
|
|
98
|
+
<sui-segmented-control [size]="bp.tactil() ? '2xlarge' : 'medium'" … />
|
|
93
99
|
```
|
|
94
100
|
|
|
101
|
+
### Por dispositivo (D16)
|
|
102
|
+
|
|
103
|
+
Fila de `segmented-control` en la tabla de D16 (dueño, 05-10-2026): se toca, y el size que llega a
|
|
104
|
+
44 es `2xlarge`.
|
|
105
|
+
|
|
106
|
+
| dispositivo | size | nota |
|
|
107
|
+
|---|---|---|
|
|
108
|
+
| celular chico (< 380 px) | `2xlarge` (44) | D16 pide `medium` con área de 44, pero el DS todavía no estira el área de los `medium` (nota ¹ de D16): hasta entonces se queda el grande |
|
|
109
|
+
| celular (380–767 px) | `2xlarge` (44) | con texto o solo íconos |
|
|
110
|
+
| tablet táctil (`pointer: coarse`) | `2xlarge` (44) | Apple pide 44 también en el iPad |
|
|
111
|
+
| computadora (`pointer: fine`) | `medium` (28) | también solo íconos en una barra; nunca `small` |
|
|
112
|
+
|
|
113
|
+
Ultrawide (≥ 1920 px): igual que la computadora, `medium`; el espacio extra va al `max-width`, no a
|
|
114
|
+
segmentos más altos.
|
|
115
|
+
|
|
116
|
+
En master-pedidos: `[size]="bp.tactil() ? '2xlarge' : 'medium'"`. No hay helper: `bp.sizeChips()`
|
|
117
|
+
llega a `xlarge` (40) y `bp.sizeControl()` a `large` (32), y ninguno de los dos da 44 aquí.
|
|
118
|
+
|
|
95
119
|
## «No usar»: por qué no hoy y cuándo sí
|
|
96
120
|
|
|
97
121
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -145,12 +169,57 @@ interface SuiSegmentedControlItem<T = string> {
|
|
|
145
169
|
- Los tamaños son extensión de SUI: la guía tiene uno solo. Su versión redondeada (`Rounded`)
|
|
146
170
|
no existe en SUI.
|
|
147
171
|
|
|
172
|
+
## Bien y mal
|
|
173
|
+
|
|
174
|
+
Vista cuadrícula / lista
|
|
175
|
+
|
|
176
|
+
```html
|
|
177
|
+
<!-- ❌ mal: `small` en la computadora; D16 no usa `small` (pages/products/products.html:83) -->
|
|
178
|
+
<sui-segmented-control [size]="bp.isMobile() ? '2xlarge' : 'small'"
|
|
179
|
+
[tabs]="viewToggleItems" [(active)]="viewMode" />
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
```html
|
|
183
|
+
<!-- ✅ bien -->
|
|
184
|
+
<sui-segmented-control [size]="bp.tactil() ? '2xlarge' : 'medium'"
|
|
185
|
+
[tabs]="viewToggleItems" [(active)]="viewMode" />
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Modo del servicio en el panel
|
|
189
|
+
|
|
190
|
+
```html
|
|
191
|
+
<!-- ❌ mal: `large` (32) en el teléfono no llega a 44 (master-settings.html:224, tallaServicio en master-settings.ts:452) -->
|
|
192
|
+
<sui-segmented-control [size]="bp.isMobile() ? 'large' : 'medium'"
|
|
193
|
+
ariaLabel="Cómo se cobra la tarifa de servicio"
|
|
194
|
+
[tabs]="MODOS_SERVICIO" [active]="borrador().servicioModo" (tabChange)="setModoServicio($event)" />
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
```html
|
|
198
|
+
<!-- ✅ bien -->
|
|
199
|
+
<sui-segmented-control [size]="bp.tactil() ? '2xlarge' : 'medium'"
|
|
200
|
+
ariaLabel="Cómo se cobra la tarifa de servicio"
|
|
201
|
+
[tabs]="MODOS_SERVICIO" [active]="borrador().servicioModo" (tabChange)="setModoServicio($event)" />
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Rol a invitar
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<!-- ❌ mal: sin `size` ni `ariaLabel`: 28 px también en el teléfono y el grupo sin nombre (pages/super-admin/master-roles/master-roles.html:48) -->
|
|
208
|
+
<sui-segmented-control [tabs]="rolesCiudad" [active]="rolStaff()" (activeChange)="rolStaff.set($any($event))" />
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
```html
|
|
212
|
+
<!-- ✅ bien -->
|
|
213
|
+
<sui-segmented-control [size]="bp.tactil() ? '2xlarge' : 'medium'" ariaLabel="Rol"
|
|
214
|
+
[tabs]="rolesCiudad" [active]="rolStaff()" (activeChange)="rolStaff.set($any($event))" />
|
|
215
|
+
```
|
|
216
|
+
|
|
148
217
|
## Ejemplo
|
|
149
218
|
|
|
150
219
|
```html
|
|
151
220
|
<div style="max-width: 320px">
|
|
152
221
|
<sui-segmented-control
|
|
153
|
-
[size]="bp.
|
|
222
|
+
[size]="bp.tactil() ? '2xlarge' : 'medium'"
|
|
154
223
|
[tabs]="[{ value: 'grid', label: 'Vista cuadrícula', icon: 'layout-grid-line', iconOnly: true },
|
|
155
224
|
{ value: 'list', label: 'Vista lista', icon: 'list-unordered', iconOnly: true }]"
|
|
156
225
|
[(active)]="vista" />
|