@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
package/docs/sui-input/README.md
CHANGED
|
@@ -35,11 +35,14 @@ Regla corta: **una línea → input · varias → textarea · de una lista → s
|
|
|
35
35
|
> fecha y contador) sin do/don't. Lo marcado «según la guía del DS» sale de esos ejemplos; el
|
|
36
36
|
> resto es canon (CLAUDE.md, CANON-SUI o aprobado por el dueño el 05-10-2026); lo que sigue en **propuesta** espera decisión.
|
|
37
37
|
>
|
|
38
|
-
> Uso medido el
|
|
39
|
-
> `master-ejercicios`): **
|
|
40
|
-
>
|
|
41
|
-
>
|
|
42
|
-
>
|
|
38
|
+
> Uso medido el 06-10-2026 en `master-pedidos/src/app` @ `9f0e54c3` (misma exclusión que
|
|
39
|
+
> `sui-badge`, más `master-ejercicios`): **200 usos en 66 archivos** — 196 en 63 `.html` y 4 en
|
|
40
|
+
> templates inline de 3 `.ts` (`components/option-image/option-image.ts`, `pages/dx/modal-test/modal-test.ts`,
|
|
41
|
+
> `pages/dx/sandbox/sandbox.ts`). Tipos: 45 `text`, 35 sin `type` (`text`), 35 `amount`,
|
|
42
|
+
> 22 `search`, 22 `tel`, 18 `number`, 10 `email`, 7 `date`, 3 `password-toggle`, 2 `url`,
|
|
43
|
+
> 1 `datetime-local`. Tamaños, tras la migración a D16: 195 `bp.sizeControl()` (191 en `.html`
|
|
44
|
+
> y los 4 inline), 3 `xlarge` (los buscadores principales del cliente), 1 `bp.controlSize()` y
|
|
45
|
+
> 1 dinámico propio (`components/product-detail-view/product-detail-view.html:223`). Ninguno sin `size`.
|
|
43
46
|
|
|
44
47
|
### `type` — qué dato es
|
|
45
48
|
|
|
@@ -116,21 +119,39 @@ teléfono también va en 16 en todos los tamaños (antes se quedaba en 14 al lad
|
|
|
116
119
|
|---|---|---|---|
|
|
117
120
|
| campo de formulario | `large` (48), igual que el botón del footer | `medium` (40) | mobile `large`: canon (decisión del dueño 04-10-2026, piso táctil 44: `medium` 40 no llega y `large` 48 es el primer size que sí) · web `medium`: canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
118
121
|
| buscador principal del cliente (home, carta, rubro) | `xlarge` (52) + `fullRadius` | `xlarge` + `fullRadius` | canon (aprobado por el dueño, 05-10-2026, bloque B1) (ya es práctica en las 3 pantallas) |
|
|
119
|
-
| buscador o filtro de una lista del panel | `large` (48) | `medium` (40) | mobile `large`: canon (decisión del dueño 04-10-2026, piso táctil 44: `large` 48 es el primer size que llega) · web `medium`: canon (dueño, 05-10-2026, D16) (
|
|
122
|
+
| buscador o filtro de una lista del panel | `large` (48) | `medium` (40) | mobile `large`: canon (decisión del dueño 04-10-2026, piso táctil 44: `large` 48 es el primer size que llega) · web `medium`: canon (dueño, 05-10-2026, D16) (`pages/orders/orders.html:73` ya va con `bp.sizeControl()`; medido el 06-10-2026) |
|
|
120
123
|
| campo dentro de una tabla o fila densa | no aplica | `medium` (40) | canon (dueño, 05-10-2026, D16): nada en `xsmall` (la guía del DS lo usa ahí) |
|
|
121
124
|
|
|
122
125
|
```html
|
|
123
|
-
<sui-input [size]="bp.
|
|
126
|
+
<sui-input [size]="bp.sizeControl()" label="Teléfono" type="tel" … />
|
|
124
127
|
<!-- bp = BreakpointsService de la app -->
|
|
125
128
|
```
|
|
126
129
|
|
|
127
|
-
No uses `bp.controlSize()` en campos: da `xlarge` (52) en mobile,
|
|
128
|
-
del footer (
|
|
129
|
-
`pages/
|
|
130
|
-
|
|
130
|
+
No uses `bp.controlSize()` en campos: es el de checkbox/radio/switch, da `xlarge` (52) en mobile,
|
|
131
|
+
más alto que el botón `large` del footer, y `large` en la computadora (1 uso hoy:
|
|
132
|
+
`pages/customer/checkout/checkout.html:385`, el cupón). El texto sube solo a 16 px en mobile (evita
|
|
133
|
+
el zoom de iOS): no hace falta pedirlo.
|
|
131
134
|
|
|
132
|
-
Hoy: **
|
|
133
|
-
|
|
135
|
+
Hoy (medido el 06-10-2026): **195 de los 200 usos** ya van con `bp.sizeControl()` (191 en `.html` y
|
|
136
|
+
4 en templates inline de `.ts`); quedan los 3 buscadores principales en `xlarge` fijo (van bien), el cupón con `bp.controlSize()` y un dinámico propio.
|
|
137
|
+
|
|
138
|
+
### Por dispositivo (D16)
|
|
139
|
+
|
|
140
|
+
Fila `input` de la tabla D16 (dueño, 05-10-2026). Se toca, así que va por tipo de puntero además
|
|
141
|
+
del ancho, igual que `sui-button`: campo y botón de al lado miden lo mismo en cada dispositivo.
|
|
142
|
+
|
|
143
|
+
| dispositivo | size | nota |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| celular chico (< 380 px) | `large` (48) | D16 pide `medium` con área tocable de 44; mientras el DS no estire el área de los `medium`, va `large` (interino) |
|
|
146
|
+
| celular (380–767 px) | `large` (48) | mismo alto que el botón `large` del footer |
|
|
147
|
+
| tablet táctil (`pointer: coarse`) | `large` (48) | también se toca con el dedo; `bp.isMobile()` la dejaba en `medium` |
|
|
148
|
+
| computadora (`pointer: fine`) | `medium` (40) | también filtros y campos dentro de tablas; `small` y `xsmall` no se usan |
|
|
149
|
+
|
|
150
|
+
Buscador principal del cliente (home, carta, rubro): `xlarge` (52) + `fullRadius` en todos los
|
|
151
|
+
dispositivos (B1). Ultrawide (≥ 1920 px): igual que la computadora, `medium`; el espacio extra va a
|
|
152
|
+
ancho y columnas, no a campos más altos.
|
|
153
|
+
|
|
154
|
+
En master-pedidos: `[size]="bp.sizeControl()"` · buscador principal: `size="xlarge"` + `[fullRadius]="true"`.
|
|
134
155
|
|
|
135
156
|
## «No usar»: por qué no hoy y cuándo sí
|
|
136
157
|
|
|
@@ -221,13 +242,55 @@ proyectados con `leadingControl` / `trailingControl`).
|
|
|
221
242
|
- En el teléfono la X de limpiar y el ojo se ven de 12-20 px pero se tocan en 44 × 44 (área
|
|
222
243
|
invisible, 04-10-2026).
|
|
223
244
|
|
|
245
|
+
## Bien y mal
|
|
246
|
+
|
|
247
|
+
Tamaño del campo del cupón
|
|
248
|
+
|
|
249
|
+
```html
|
|
250
|
+
<!-- ❌ mal: bp.controlSize() es de checkbox/radio/switch: xlarge en el celular y large en la computadora (pages/customer/checkout/checkout.html:385) -->
|
|
251
|
+
<sui-input [size]="bp.controlSize()" placeholder="Código de descuento" [(value)]="cupon" />
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
```html
|
|
255
|
+
<!-- ✅ bien (y el botón «Aplicar» de al lado, también con bp.sizeControl()) -->
|
|
256
|
+
<sui-input [size]="bp.sizeControl()" placeholder="Código de descuento" [(value)]="cupon" />
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
DNI con el label afuera
|
|
260
|
+
|
|
261
|
+
```html
|
|
262
|
+
<!-- ❌ mal: el label suelto no conoce el id del campo (su for no apunta a nada) y el DNI no es un número (pages/driver-onboarding/step-info/step-info.html:56 y :60) -->
|
|
263
|
+
<sui-form-label label="DNI" [required]="true" for="ob-dni" />
|
|
264
|
+
<sui-input [size]="bp.sizeControl()" type="number" inputmode="numeric" placeholder="74523618"
|
|
265
|
+
[maxlength]="8" [(value)]="dni" />
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
```html
|
|
269
|
+
<!-- ✅ bien -->
|
|
270
|
+
<sui-input label="DNI" [required]="true" type="text" inputmode="numeric" placeholder="74523618"
|
|
271
|
+
[maxlength]="8" hint="8 dígitos" [size]="bp.sizeControl()" [(value)]="dni" />
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Teléfono con espacios en el placeholder
|
|
275
|
+
|
|
276
|
+
```html
|
|
277
|
+
<!-- ❌ mal: con [maxlength]="9", quien copia los espacios del placeholder llega al tope antes del último dígito (pages/mi-negocio/mi-negocio.html:689) -->
|
|
278
|
+
<sui-input [size]="bp.sizeControl()" type="tel" placeholder="987 654 321" [maxlength]="9" [(value)]="telefono" />
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
```html
|
|
282
|
+
<!-- ✅ bien -->
|
|
283
|
+
<sui-input label="Teléfono" type="tel" [maxlength]="9" autocomplete="tel" placeholder="987654321"
|
|
284
|
+
[size]="bp.sizeControl()" [(value)]="telefono" />
|
|
285
|
+
```
|
|
286
|
+
|
|
224
287
|
## Ejemplo
|
|
225
288
|
|
|
226
289
|
```html
|
|
227
290
|
<!-- Campo de formulario -->
|
|
228
291
|
<sui-input label="Teléfono" [required]="true" type="tel" [maxlength]="9" autocomplete="tel"
|
|
229
292
|
placeholder="987654321" hint="9 dígitos, empezando con 9"
|
|
230
|
-
[size]="bp.
|
|
293
|
+
[size]="bp.sizeControl()" [(value)]="telefono" />
|
|
231
294
|
|
|
232
295
|
<!-- Monto -->
|
|
233
296
|
<sui-input label="Monto de la compra" type="amount" prefix="S/" placeholder="0.00" [(value)]="monto" />
|
|
@@ -74,7 +74,7 @@ Regla corta: **servicio externo que se prende y se configura → integration-swi
|
|
|
74
74
|
| layout | `vertical` | `horizontal` |
|
|
75
75
|
|
|
76
76
|
```html
|
|
77
|
-
<sui-integration-switch [size]="bp.
|
|
77
|
+
<sui-integration-switch [size]="bp.sizeControl()"
|
|
78
78
|
[type]="bp.isMobile() ? 'vertical' : 'horizontal'" … />
|
|
79
79
|
```
|
|
80
80
|
|
|
@@ -82,11 +82,33 @@ Regla corta: **servicio externo que se prende y se configura → integration-swi
|
|
|
82
82
|
y a diferencia de `sui-switch-card`, tocar la tarjeta no prende nada: solo responde el
|
|
83
83
|
interruptor. Para algo que se prende y apaga en el teléfono, `sui-switch-card` es la salida.
|
|
84
84
|
|
|
85
|
+
### Por dispositivo (D16)
|
|
86
|
+
|
|
87
|
+
No está en la tabla D16 por componente: va como **lo que se toca**, porque el `size` solo agranda
|
|
88
|
+
«Administrar», que es un botón. Fuente: D16, dueño 05-10-2026.
|
|
89
|
+
|
|
90
|
+
| dispositivo | size | nota |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| celular chico (< 380) | `large` (44) | D16 pide `medium` con área tocable de 44; mientras el DS no estire el área de los `medium`, va `large` (interino) |
|
|
93
|
+
| celular (380–767) | `large` (44) | |
|
|
94
|
+
| tablet táctil (`pointer: coarse`) | `large` (44) | también se toca con el dedo: Apple pide 44 pt en el iPad |
|
|
95
|
+
| computadora (`pointer: fine`) | `medium` (38) | nunca más chico |
|
|
96
|
+
|
|
97
|
+
En el ultrawide, igual que en la computadora: el espacio extra va a más columnas, no a un
|
|
98
|
+
«Administrar» más grande.
|
|
99
|
+
|
|
100
|
+
D16 no alcanza al interruptor: es `sui-switch` `medium` fijo dentro del componente, aunque los
|
|
101
|
+
switches sueltos vayan en `xlarge`/`large`. El badge interno arranca en `small`: pásalo como objeto
|
|
102
|
+
con `size: bp.sizeBadge()`.
|
|
103
|
+
|
|
104
|
+
En master-pedidos: `[size]="bp.sizeControl()"`. El `type` sigue por ancho
|
|
105
|
+
(`bp.isMobile() ? 'vertical' : 'horizontal'`): es layout, no tamaño.
|
|
106
|
+
|
|
85
107
|
## «No usar»: por qué no hoy y cuándo sí
|
|
86
108
|
|
|
87
109
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
88
110
|
|---|---|---|
|
|
89
|
-
| todo el componente (0 usos) | no hay integraciones
|
|
111
|
+
| todo el componente (0 usos) | no hay integraciones (el tamaño para mobile ya existe: `large`, 04-10-2026) | conectar Culqi / Izipay o WhatsApp Business desde el panel del local (web primero) |
|
|
90
112
|
| `vertical` · `list` | sin borde y en columna, el bloque se pierde | casi nunca: una sola integración destacada en una pantalla vacía |
|
|
91
113
|
|
|
92
114
|
## API
|
|
@@ -135,6 +157,51 @@ Slot: `[sui-integration-brand]` (reemplaza al logo). Implementa `ControlValueAcc
|
|
|
135
157
|
El interruptor toma su nombre de ese título (y su descripción de `description`) con
|
|
136
158
|
`aria-labelledby` (revisión 04-10-2026); antes el lector decía solo «interruptor».
|
|
137
159
|
|
|
160
|
+
## Bien y mal
|
|
161
|
+
|
|
162
|
+
La app no tiene usos todavía: los pares salen de «Cuándo usarlo» y de «Trampas».
|
|
163
|
+
|
|
164
|
+
Un ajuste propio de la app
|
|
165
|
+
|
|
166
|
+
```html
|
|
167
|
+
<!-- ❌ mal: avisar de pedidos nuevos es un ajuste de la app, no un servicio externo -->
|
|
168
|
+
<sui-integration-switch title="Notificaciones" brandIcon="notification-3-line"
|
|
169
|
+
[manage]="false" [active]="avisos()" (activeChange)="avisos.set($event)" />
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
```html
|
|
173
|
+
<!-- ✅ bien -->
|
|
174
|
+
<sui-switch-card label="Notificaciones" [size]="bp.controlSize()"
|
|
175
|
+
[checked]="avisos()" (checkedChange)="avisos.set($event)" />
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Servicio que solo se prende
|
|
179
|
+
|
|
180
|
+
```html
|
|
181
|
+
<!-- ❌ mal: manage arranca en true y pinta «Administrar» aunque no haya nada que configurar -->
|
|
182
|
+
<sui-integration-switch title="Mapbox" brandIcon="map-2-line" [size]="bp.sizeControl()"
|
|
183
|
+
[active]="mapbox()" (activeChange)="mapbox.set($event)" />
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
```html
|
|
187
|
+
<!-- ✅ bien -->
|
|
188
|
+
<sui-integration-switch title="Mapbox" brandIcon="map-2-line" [manage]="false"
|
|
189
|
+
[active]="mapbox()" (activeChange)="mapbox.set($event)" />
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Integración nueva
|
|
193
|
+
|
|
194
|
+
```html
|
|
195
|
+
<!-- ❌ mal: el string sale naranja light y en small, que D16 no usa -->
|
|
196
|
+
<sui-integration-switch title="Culqi" brandIcon="bank-card-line" badge="Nuevo" … />
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
<!-- ✅ bien -->
|
|
201
|
+
<sui-integration-switch title="Culqi" brandIcon="bank-card-line" [size]="bp.sizeControl()"
|
|
202
|
+
[badge]="{ label: 'Nuevo', color: 'purple', size: bp.sizeBadge() }" … />
|
|
203
|
+
```
|
|
204
|
+
|
|
138
205
|
## Ejemplo
|
|
139
206
|
|
|
140
207
|
```html
|
package/docs/sui-kbd/README.md
CHANGED
|
@@ -46,20 +46,44 @@ Usos de hoy que rompen la regla: **0**.
|
|
|
46
46
|
|
|
47
47
|
## Tamaño en mobile y en web
|
|
48
48
|
|
|
49
|
-
No es táctil: es una tecla dibujada.
|
|
50
|
-
|
|
51
|
-
oculta con el servicio de breakpoints de la app (`bp`, en
|
|
52
|
-
es **canon (aprobado por el dueño,
|
|
49
|
+
No es táctil: es una tecla dibujada. Donde se usa con el dedo no hay teclado físico, así que no se
|
|
50
|
+
muestra; con mouse tiene un solo tamaño. Donde la pantalla existe en los dos (panel del local,
|
|
51
|
+
super admin) se oculta con el servicio de breakpoints de la app (`bp`, en
|
|
52
|
+
`services/breakpoints.service.ts`). Que no vaya en mobile es **canon (aprobado por el dueño,
|
|
53
|
+
05-10-2026, bloque B7)**; que la tablet táctil cuente como mobile sale de D16 (ver abajo).
|
|
53
54
|
|
|
54
|
-
| uso | mobile | web |
|
|
55
|
+
| uso | mobile (celular y tablet táctil) | web (computadora) |
|
|
55
56
|
|---|---|---|
|
|
56
57
|
| atajo de teclado | no se muestra | tamaño único (20 px de alto) |
|
|
57
58
|
|
|
58
59
|
```html
|
|
59
|
-
@if (!bp.
|
|
60
|
+
@if (!bp.tactil()) { <sui-kbd>⌘K</sui-kbd> }
|
|
60
61
|
```
|
|
61
62
|
|
|
62
|
-
No tiene tamaños:
|
|
63
|
+
No tiene tamaños: con el dedo no hay teclas, así que no se pinta.
|
|
64
|
+
|
|
65
|
+
### Por dispositivo (D16)
|
|
66
|
+
|
|
67
|
+
El tamaño no aplica: `sui-kbd` no tiene `size` (20 px fijo). Lo que depende del dispositivo es
|
|
68
|
+
**si se muestra**, y eso no va por ancho sino por puntero, como D16: el iPad (768–1024 px,
|
|
69
|
+
`pointer: coarse`) da `bp.isMobile()` falso, y con `!bp.isMobile()` el ⌘K saldría en una pantalla
|
|
70
|
+
sin teclas.
|
|
71
|
+
|
|
72
|
+
| dispositivo | se muestra | nota |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| celular chico (< 380) | no | con el dedo no hay teclas |
|
|
75
|
+
| celular (380–767) | no | |
|
|
76
|
+
| tablet táctil (`pointer: coarse`) | no | misma razón que el celular: se usa con el dedo |
|
|
77
|
+
| computadora (`pointer: fine`) | sí, 20 px | |
|
|
78
|
+
| ultrawide | sí, 20 px | igual que la computadora |
|
|
79
|
+
|
|
80
|
+
**Pendiente**: el iPad con teclado físico. Con un teclado conectado los atajos sí funcionan, pero
|
|
81
|
+
la pantalla sigue siendo táctil y ni el ancho ni el puntero dicen si hay un teclado conectado;
|
|
82
|
+
falta que el dueño decida si se muestra ahí. Hasta entonces va oculto, que es el lado seguro: un atajo que falta no confunde, uno
|
|
83
|
+
que no se puede apretar sí.
|
|
84
|
+
|
|
85
|
+
En master-pedidos: `@if (!bp.tactil()) { <sui-kbd>⌘K</sui-kbd> }` (`tactil` = celular por ancho
|
|
86
|
+
o cualquier pantalla `pointer: coarse`). No uses `!bp.isMobile()`: deja pasar la tablet.
|
|
63
87
|
|
|
64
88
|
## «No usar»: por qué no hoy y cuándo sí
|
|
65
89
|
|
|
@@ -88,6 +112,46 @@ Slot: `<ng-content>` (el texto o el `sui-icon`).
|
|
|
88
112
|
- El ícono de adentro va a 16 px y toma `text-sub-600` aunque le pongas otro color.
|
|
89
113
|
- Mide 20 px de alto fijo: no crece con el texto de al lado.
|
|
90
114
|
|
|
115
|
+
## Bien y mal
|
|
116
|
+
|
|
117
|
+
La app no lo usa directo: los pares salen de «Cuándo usarlo» y de «Trampas».
|
|
118
|
+
|
|
119
|
+
Flecha al pie de un menú
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<!-- ❌ mal: subtle no se elige solo al poner un ícono; sale con el fondo blanco del texto -->
|
|
123
|
+
<sui-kbd><sui-icon name="arrow-up-line" [size]="16" /></sui-kbd>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```html
|
|
127
|
+
<!-- ✅ bien -->
|
|
128
|
+
<sui-kbd variant="subtle"><sui-icon name="arrow-up-line" [size]="16" /></sui-kbd>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Atajo en una pantalla que también se ve en el celular
|
|
132
|
+
|
|
133
|
+
```html
|
|
134
|
+
<!-- ❌ mal: con el dedo no hay teclas; con !bp.isMobile() el ⌘K igual sale en el iPad (768–1024, táctil) -->
|
|
135
|
+
@if (!bp.isMobile()) { <sui-kbd>⌘K</sui-kbd> }
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```html
|
|
139
|
+
<!-- ✅ bien -->
|
|
140
|
+
@if (!bp.tactil()) { <sui-kbd>⌘K</sui-kbd> }
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Una etiqueta que no es una tecla
|
|
144
|
+
|
|
145
|
+
```html
|
|
146
|
+
<!-- ❌ mal: no es un atajo; además sale en MAYÚSCULAS -->
|
|
147
|
+
<sui-kbd>Nuevo</sui-kbd>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```html
|
|
151
|
+
<!-- ✅ bien -->
|
|
152
|
+
<sui-badge color="purple" [size]="bp.sizeBadge()">Nuevo</sui-badge>
|
|
153
|
+
```
|
|
154
|
+
|
|
91
155
|
## Ejemplo
|
|
92
156
|
|
|
93
157
|
```html
|
|
@@ -74,11 +74,10 @@ Se encontraron buscando reglas `*icon*` con `border-radius: 50%`, fondo y 32–6
|
|
|
74
74
|
|
|
75
75
|
## Tamaño en mobile y en web
|
|
76
76
|
|
|
77
|
-
En mobile se lee
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
con el valor de web, y el celular chico (< 380 px) también (D16).
|
|
77
|
+
En mobile se lee con el celular en la mano, así que va más grande; en web, más chico. Se elige
|
|
78
|
+
con el servicio de breakpoints de la app (`bp`, en `services/breakpoints.service.ts`) también en
|
|
79
|
+
las pantallas que solo existen en el celular (cliente, repartidor): no se toca, así que la tablet
|
|
80
|
+
va con el valor de web, y el celular chico (< 380 px) también (D16, dueño 05-10-2026).
|
|
82
81
|
Es **canon (dueño, 05-10-2026, P1 b)**: un paso más grande en el celular que en computadora, y
|
|
83
82
|
se migra todo ahora, no solo al tocar cada pantalla.
|
|
84
83
|
|
|
@@ -89,9 +88,28 @@ se migra todo ahora, no solo al tocar cada pantalla.
|
|
|
89
88
|
| resultado de un modal | `64` | `56` |
|
|
90
89
|
|
|
91
90
|
```html
|
|
92
|
-
<sui-key-icon name="lock-line" styleVariant="lighter" color="red" [size]="bp.
|
|
91
|
+
<sui-key-icon name="lock-line" styleVariant="lighter" color="red" [size]="bp.celular() ? 64 : 56" />
|
|
93
92
|
```
|
|
94
93
|
|
|
94
|
+
### Por dispositivo (D16)
|
|
95
|
+
|
|
96
|
+
La key-icon no se toca: sube un paso **solo en el celular de 380 px o más**. Fuente: D16, dueño
|
|
97
|
+
05-10-2026 (P1 b).
|
|
98
|
+
|
|
99
|
+
| dispositivo | size | nota |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| celular chico (< 380) | valor «web» (`32` fila · `40` card · `56` modal) | no se toca: no sube aunque sea un celular |
|
|
102
|
+
| celular (380–767) | valor «mobile» (`40` fila · `48` card · `64` modal) | un paso más que en la computadora |
|
|
103
|
+
| tablet táctil (`pointer: coarse`) | valor «web» (`32` · `40` · `56`) | no se toca: el puntero no cambia nada |
|
|
104
|
+
| computadora (`pointer: fine`) | valor «web» (`32` · `40` · `56`) | |
|
|
105
|
+
|
|
106
|
+
En el ultrawide, igual que en la computadora: el espacio extra va a más columnas, no a círculos
|
|
107
|
+
más grandes.
|
|
108
|
+
|
|
109
|
+
En master-pedidos no hay helper: `[size]="bp.celular() ? 40 : 32"` (fila),
|
|
110
|
+
`[size]="bp.celular() ? 48 : 40"` (card) o `[size]="bp.celular() ? 64 : 56"` (resultado de un
|
|
111
|
+
modal). No uses `bp.isMobile()`: incluye el celular chico, que va con el valor de web.
|
|
112
|
+
|
|
95
113
|
## «No usar»: por qué no hoy y cuándo sí
|
|
96
114
|
|
|
97
115
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -121,6 +139,47 @@ Outputs: ninguno.
|
|
|
121
139
|
- **El default es `stroke` `gray`**: si quieres el círculo de color, pide `lighter` explícito.
|
|
122
140
|
- `name` va sin `ri-`, como en `sui-icon`.
|
|
123
141
|
|
|
142
|
+
## Bien y mal
|
|
143
|
+
|
|
144
|
+
Resultado de un modal: cuenta bloqueada
|
|
145
|
+
|
|
146
|
+
```html
|
|
147
|
+
<!-- ❌ mal: círculo hecho a mano, 64 fijo y un ícono de 30 fuera de la escala (components/cuenta-bloqueada/cuenta-bloqueada.html:4) -->
|
|
148
|
+
<span class="cb__icono"><sui-icon name="lock-line" [size]="30" /></span>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```html
|
|
152
|
+
<!-- ✅ bien -->
|
|
153
|
+
<sui-key-icon name="lock-line" styleVariant="lighter" color="red" [size]="bp.celular() ? 64 : 56" />
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Resultado de un modal: calificación enviada
|
|
157
|
+
|
|
158
|
+
```html
|
|
159
|
+
<!-- ❌ mal: el mismo círculo a mano, con los colores del estado en el SCSS (components/driver-rate-modal/driver-rate-modal.html:17) -->
|
|
160
|
+
<div class="drm__exito-icono" [class.drm__exito-icono--tibio]="!fueBueno()" aria-hidden="true">
|
|
161
|
+
<sui-icon [name]="fueBueno() ? 'check-line' : 'heart-3-line'" [size]="32" />
|
|
162
|
+
</div>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
```html
|
|
166
|
+
<!-- ✅ bien -->
|
|
167
|
+
<sui-key-icon [name]="fueBueno() ? 'check-line' : 'heart-3-line'" styleVariant="lighter"
|
|
168
|
+
[color]="fueBueno() ? 'green' : 'blue'" [size]="bp.celular() ? 64 : 56" />
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Tamaño por dispositivo
|
|
172
|
+
|
|
173
|
+
```html
|
|
174
|
+
<!-- ❌ mal: isMobile incluye el celular chico, que va con el valor de web (D16) -->
|
|
175
|
+
<sui-key-icon name="store-2-line" [size]="bp.isMobile() ? 40 : 32" />
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```html
|
|
179
|
+
<!-- ✅ bien -->
|
|
180
|
+
<sui-key-icon name="store-2-line" [size]="bp.celular() ? 40 : 32" />
|
|
181
|
+
```
|
|
182
|
+
|
|
124
183
|
## Ejemplo
|
|
125
184
|
|
|
126
185
|
```html
|
|
@@ -60,11 +60,11 @@ Es el reemplazo del `sui-button` `ghost` `primary`.
|
|
|
60
60
|
**Usos de hoy que rompen la regla:**
|
|
61
61
|
|
|
62
62
|
- **4 `error` que abren una destructiva grande → `sui-button` `stroke` `error`:**
|
|
63
|
-
`pages/super-admin/master-orders/master-orders.html:
|
|
63
|
+
`pages/super-admin/master-orders/master-orders.html:467` («Cancelar pedido»),
|
|
64
64
|
`pages/orders/orders.html:233` («Rechazar pedido»), `pages/central/central-gastos/central-gastos.html:101`
|
|
65
|
-
(«Anular gasto») y `pages/driver/driver-order-detail/driver-order-detail.html:
|
|
65
|
+
(«Anular gasto») y `pages/driver/driver-order-detail/driver-order-detail.html:774` («Cancelar» el
|
|
66
66
|
pedido, en `large`; nuevo, medido el 04-10-2026).
|
|
67
|
-
- A discutir: `pages/super-admin/master-orders/master-orders.html:
|
|
67
|
+
- A discutir: `pages/super-admin/master-orders/master-orders.html:472` («Liberar» en `gray`): es una
|
|
68
68
|
acción de operación, no una salida de baja jerarquía.
|
|
69
69
|
|
|
70
70
|
### `size`
|
|
@@ -98,7 +98,7 @@ Los íconos son nombres RemixIcon sin el prefijo `ri-`. Miden 20 px en `large` y
|
|
|
98
98
|
|---|---|---|
|
|
99
99
|
| `true` | La acción existe pero ahora no se puede: mientras se guarda, mientras se procesa otra acción. Mejor que esconderla si la persona la espera en ese lugar. | cómo se ve: según la guía del DS · cuándo: canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
100
100
|
|
|
101
|
-
Ejemplos: `components/add-product-modal/add-product-modal.html:
|
|
101
|
+
Ejemplos: `components/add-product-modal/add-product-modal.html:341` («Vista previa» mientras guarda),
|
|
102
102
|
`pages/orders/orders.html:233`.
|
|
103
103
|
|
|
104
104
|
### `href`, `target`, `rel`, `type`, `ariaLabel`
|
|
@@ -112,13 +112,13 @@ Ejemplos: `components/add-product-modal/add-product-modal.html:339` («Vista pre
|
|
|
112
112
|
|
|
113
113
|
## Tamaño en mobile y en web
|
|
114
114
|
|
|
115
|
-
En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más**. En
|
|
116
|
-
(`pointer: coarse`)
|
|
117
|
-
(`pointer: fine`), `medium`; en el celular chico (< 380 px), `medium
|
|
115
|
+
En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más**. En el celular y en
|
|
116
|
+
la tablet (`pointer: coarse`) el size está **pendiente (P8)**, porque ningún size del link llega a
|
|
117
|
+
44; en la computadora (`pointer: fine`), `medium`; en el celular chico (< 380 px), `medium`.
|
|
118
118
|
Nada en `small` ni `xsmall` (canon, dueño, 05-10-2026, D16; reemplaza al «tamaño por plataforma» del
|
|
119
119
|
03-10-2026, que bajaba la web a `small`). Hoy la app lo resuelve con `BreakpointsService`
|
|
120
120
|
(`src/app/services/breakpoints.service.ts`, mobile = hasta 767 px): `[size]="bp.isMobile() ? 'large' : 'medium'"`,
|
|
121
|
-
que
|
|
121
|
+
que es la propuesta sin aprobar de P8 (ver «Por dispositivo (D16)» abajo). Medido el 04-10-2026 en `master-pedidos`: 166 `[size]`
|
|
122
122
|
con `bp` (142 `large`/`medium`, 22 `large`/`small`, 2 `medium`/`xsmall`); los 24 que bajan de `medium` se migran.
|
|
123
123
|
|
|
124
124
|
| size | alto | texto | ícono |
|
|
@@ -146,10 +146,29 @@ táctil la pone el contenedor: la fila o el bloque donde vive tiene que medir 44
|
|
|
146
146
|
dejar aire alrededor del link. `small` (16) no va en ningún lado (D16, 05-10-2026). Medido el 04-10-2026: los 4 de
|
|
147
147
|
repartidor y cliente ya usan `[size]="bp.isMobile() ? 'medium' : 'small'"`
|
|
148
148
|
(`pages/driver/driver-profile/driver-profile.html:258` y `:264`,
|
|
149
|
-
`pages/driver/driver-dashboard/driver-dashboard.html:
|
|
149
|
+
`pages/driver/driver-dashboard/driver-dashboard.html:1210`,
|
|
150
150
|
`pages/customer/order-history/order-history.html:412`). Quedan 2 `small` fijos, los dos del panel
|
|
151
|
-
de la empresa: `pages/mi-negocio/mi-negocio.html:
|
|
152
|
-
`components/add-product-modal/add-product-modal.html:
|
|
151
|
+
de la empresa: `pages/mi-negocio/mi-negocio.html:473` y
|
|
152
|
+
`components/add-product-modal/add-product-modal.html:341`.
|
|
153
|
+
|
|
154
|
+
### Por dispositivo (D16)
|
|
155
|
+
|
|
156
|
+
Fila `link-button` de la tabla D16 (dueño, 05-10-2026). Se toca, pero ningún size llega a 44, así
|
|
157
|
+
que el tamaño en las pantallas táctiles espera P8.
|
|
158
|
+
|
|
159
|
+
| dispositivo | size | nota |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| celular chico (< 380) | `medium` | |
|
|
162
|
+
| celular (380–767) | pendiente (P8) | a) el contenedor (fila o card) llega a 44 y el link va `medium` (recomendada) · b) `large` (24) por legibilidad |
|
|
163
|
+
| tablet táctil (`pointer: coarse`) | pendiente (P8) | la misma pregunta: también se toca con el dedo |
|
|
164
|
+
| computadora (`pointer: fine`) | `medium` | también en filas y cabeceras; `small` no se usa |
|
|
165
|
+
|
|
166
|
+
En el ultrawide, igual que en la computadora. Dentro de un párrafo, el size del texto que lo rodea.
|
|
167
|
+
|
|
168
|
+
En master-pedidos no hay helper hasta que se decida P8: `size="medium"` en la computadora y en el
|
|
169
|
+
celular chico. No uses `bp.sizeControl()` (sería elegir la b) ni bajes a `small`. El
|
|
170
|
+
`[size]="bp.isMobile() ? 'large' : 'medium'"` que hoy lleva el link suelto es la propuesta sin
|
|
171
|
+
aprobar, y además deja el celular chico en `large`.
|
|
153
172
|
|
|
154
173
|
## «No usar»: por qué no hoy y cuándo sí
|
|
155
174
|
|
|
@@ -186,9 +205,10 @@ Slots: `<ng-content>` (el texto).
|
|
|
186
205
|
## Trampas
|
|
187
206
|
|
|
188
207
|
- **El output es `(clicked)`**, no `(click)` como en `sui-button`. `(click)` sobre el host igual
|
|
189
|
-
funciona porque el clic burbujea, pero hoy hay
|
|
208
|
+
funciona porque el clic burbujea, pero hoy hay 8 usos así (`components/subscription-banner/subscription-banner.html:10`,
|
|
190
209
|
`pages/super-admin/master-approvals/master-approvals.html:89`, `pages/central/central-gastos/central-gastos.html:101`,
|
|
191
|
-
`pages/account-suspended/account-suspended.html:66` y `:70`, `pages/customer/viaje/viaje.html:
|
|
210
|
+
`pages/account-suspended/account-suspended.html:66` y `:70`, `pages/customer/viaje/viaje.html:211`,
|
|
211
|
+
`pages/super-admin/master-solicitudes/master-solicitudes.html:47` y `:50`; medido el 06-10-2026).
|
|
192
212
|
Usa `(clicked)`, que ya respeta `disabled`.
|
|
193
213
|
- **`rel` arranca en `null`**, a diferencia de compact, fancy y social, que traen
|
|
194
214
|
`'noopener noreferrer'`. Con `target="_blank"` hay que ponerlo a mano.
|
|
@@ -204,6 +224,52 @@ Slots: `<ng-content>` (el texto).
|
|
|
204
224
|
toast local). No es la del paquete: un arreglo en el DS no le llega.
|
|
205
225
|
- Ya trae el arreglo de iOS para el `:active` pegado: no lo agregues.
|
|
206
226
|
|
|
227
|
+
## Bien y mal
|
|
228
|
+
|
|
229
|
+
Cancelar un pedido
|
|
230
|
+
|
|
231
|
+
```html
|
|
232
|
+
<!-- ❌ mal: error en link es para quitar algo menor; cancelar el pedido es una destructiva grande (pages/driver/driver-order-detail/driver-order-detail.html:774) -->
|
|
233
|
+
<sui-link-button variant="error" size="large" (clicked)="showCancelModal.set(true)">
|
|
234
|
+
Cancelar {{ comoSeLlama }}
|
|
235
|
+
</sui-link-button>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
```html
|
|
239
|
+
<!-- ✅ bien -->
|
|
240
|
+
<sui-button variant="stroke" color="error" [size]="bp.sizeControl()" (click)="showCancelModal.set(true)">
|
|
241
|
+
Cancelar {{ comoSeLlama }}
|
|
242
|
+
</sui-button>
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Link al pie de una sección del panel
|
|
246
|
+
|
|
247
|
+
```html
|
|
248
|
+
<!-- ❌ mal: small no se usa en ningún lado (D16); igual order-history.html:412 con 'medium' : 'small' (pages/mi-negocio/mi-negocio.html:473) -->
|
|
249
|
+
<sui-link-button variant="gray" size="small" rightIcon="arrow-right-s-line"
|
|
250
|
+
(clicked)="goToProducts()">Ir a Productos</sui-link-button>
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
```html
|
|
254
|
+
<!-- ✅ bien -->
|
|
255
|
+
<sui-link-button variant="gray" size="medium" rightIcon="arrow-right-s-line"
|
|
256
|
+
(clicked)="goToProducts()">Ir a Productos</sui-link-button>
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Acción que se deshabilita mientras procesa
|
|
260
|
+
|
|
261
|
+
```html
|
|
262
|
+
<!-- ❌ mal: (click) escucha el host, no el output; (clicked) es el que respeta disabled (pages/super-admin/master-solicitudes/master-solicitudes.html:47) -->
|
|
263
|
+
<sui-link-button variant="gray" size="medium" [disabled]="ocupada() === f.id"
|
|
264
|
+
(click)="cambiar(f, 'nueva')">Reabrir</sui-link-button>
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
```html
|
|
268
|
+
<!-- ✅ bien -->
|
|
269
|
+
<sui-link-button variant="gray" size="medium" [disabled]="ocupada() === f.id"
|
|
270
|
+
(clicked)="cambiar(f, 'nueva')">Reabrir</sui-link-button>
|
|
271
|
+
```
|
|
272
|
+
|
|
207
273
|
## Ejemplo
|
|
208
274
|
|
|
209
275
|
```html
|
package/docs/sui-logo/README.md
CHANGED
|
@@ -86,10 +86,13 @@ sobran): `components/ota-update/ota-update.html:17`, `pages/role-selector/role-s
|
|
|
86
86
|
|
|
87
87
|
## Tamaño en mobile y en web
|
|
88
88
|
|
|
89
|
-
En
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
En el celular va un paso más grande que en la computadora: el logo no se toca, así que sigue la
|
|
90
|
+
regla de «lo que no se toca» (P1 b). Se elige siempre con el servicio de breakpoints de la app
|
|
91
|
+
(`bp`, en `services/breakpoints.service.ts`), **también en las pantallas que solo existen en el
|
|
92
|
+
celular** (cliente, repartidor): con D16 el celular chico (< 380) lleva el valor de web en la
|
|
93
|
+
pantalla de entrada, así que «mobile» ya no es un valor fijo para ellas (ver «Por dispositivo»).
|
|
94
|
+
En la tabla, «mobile» es el celular de 380 a 767 px y «web» la computadora. Es **canon (aprobado
|
|
95
|
+
por el dueño, 05-10-2026, bloque B1 y D16)**.
|
|
93
96
|
|
|
94
97
|
| uso | mobile | web |
|
|
95
98
|
|---|---|---|
|
|
@@ -104,6 +107,34 @@ el celular (cliente, repartidor) va directo el valor de mobile. Es **canon (apro
|
|
|
104
107
|
En la barra no cambia el alto, cambia la forma: en mobile no entra la palabra. Es lo que ya hace
|
|
105
108
|
`layouts/public/public-layout.html:4`–`:6`, con dos logos y CSS.
|
|
106
109
|
|
|
110
|
+
### Por dispositivo (D16)
|
|
111
|
+
|
|
112
|
+
El logo **no se toca**, así que va como «lo que no se toca» de D16 (la misma fila que
|
|
113
|
+
`brand-logo`): sube un paso solo en el celular de 380 px o más; el celular chico, la tablet y la
|
|
114
|
+
computadora llevan el valor de web (con el matiz de la tablet de 600 a 767, abajo). En la
|
|
115
|
+
práctica solo cambia la pantalla de entrada: la barra cambia de forma por ancho (no de tamaño) y
|
|
116
|
+
la pantalla de marca va a 120 en todos.
|
|
117
|
+
|
|
118
|
+
La app distingue el celular **por ancho, no por puntero**: `bp.celular()` y `bp.isMobile()` son
|
|
119
|
+
`max-width: 767px`. Por eso la tablet táctil de 600 a 767 px (una Android chica en vertical) cae
|
|
120
|
+
del lado del celular, igual que con `bp.sizeBadge()`; la tablet «de web» empieza en 768.
|
|
121
|
+
|
|
122
|
+
| dispositivo | size | nota |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| celular chico (< 380) | entrada `xl` · barra `[markOnly]="true"` `lg` | valor de web en el tamaño; la palabra tampoco entra en la barra |
|
|
125
|
+
| celular (380–767) | entrada `2xl` · barra `[markOnly]="true"` `lg` | sube un paso (P1 b) |
|
|
126
|
+
| tablet táctil, 600–767 | entrada `2xl` · barra `[markOnly]="true"` `lg` | se lee como celular: la app separa por ancho, no por puntero |
|
|
127
|
+
| tablet táctil, 768–1024 | entrada `xl` · barra `horizontal` `lg` | no se toca: valor de web; desde 768 la palabra ya entra |
|
|
128
|
+
| computadora | entrada `xl` · barra `horizontal` `lg` | |
|
|
129
|
+
|
|
130
|
+
Ultrawide: igual que la computadora; el espacio extra no agranda el logo. La pantalla de marca
|
|
131
|
+
(«Acerca de», actualización) es `stacked` `[height]="120"` en los cinco. Fuente: D16, dueño
|
|
132
|
+
05-10-2026.
|
|
133
|
+
|
|
134
|
+
En master-pedidos: no hay helper. Entrada `[size]="bp.celular() ? '2xl' : 'xl'"`; barra
|
|
135
|
+
`size="lg" [markOnly]="bp.isMobile()"`. Se usa `bp.celular()` y no `bp.tactil()`: el logo no
|
|
136
|
+
se toca, la tablet desde 768 no sube.
|
|
137
|
+
|
|
107
138
|
## «No usar»: por qué no hoy y cuándo sí
|
|
108
139
|
|
|
109
140
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -139,6 +170,45 @@ Outputs: ninguno.
|
|
|
139
170
|
- **No trae padding**: el `viewBox` es justo el dibujo. El aire lo pone quien lo usa.
|
|
140
171
|
- **No es `sui-brand-logo`**: ese sirve logos de otras marcas como imágenes que no se pueden teñir.
|
|
141
172
|
|
|
173
|
+
## Bien y mal
|
|
174
|
+
|
|
175
|
+
Un tamaño de la escala, no un alto a mano
|
|
176
|
+
|
|
177
|
+
```html
|
|
178
|
+
<!-- ❌ mal: alto libre por debajo de 48 (components/ota-update/ota-update.html:17) -->
|
|
179
|
+
<sui-logo orientation="horizontal" [height]="40" />
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
```html
|
|
183
|
+
<!-- ✅ bien -->
|
|
184
|
+
<sui-logo size="xl" />
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
El logo en el pie de la landing
|
|
188
|
+
|
|
189
|
+
```html
|
|
190
|
+
<!-- ❌ mal: PNG suelto, no sigue al dibujo ni al tema (components/landing-footer/landing-footer.html:7) -->
|
|
191
|
+
<img src="assets/landing/logo-blanco.png" alt="Master Pedidos" width="150" height="53" />
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
```html
|
|
195
|
+
<!-- ✅ bien -->
|
|
196
|
+
<sui-logo size="2xl" markColor="var(--sui-static-white)" textColor="var(--sui-static-white)" />
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Selector de rol en el celular y en la computadora
|
|
200
|
+
|
|
201
|
+
```html
|
|
202
|
+
<!-- ❌ mal: 2xl fijo y los colores que ya son el default (pages/role-selector/role-selector.html:10) -->
|
|
203
|
+
<sui-logo orientation="horizontal" size="2xl"
|
|
204
|
+
markColor="var(--sui-primary-base)" textColor="var(--sui-text-strong-950)" />
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
```html
|
|
208
|
+
<!-- ✅ bien -->
|
|
209
|
+
<sui-logo [size]="bp.celular() ? '2xl' : 'xl'" />
|
|
210
|
+
```
|
|
211
|
+
|
|
142
212
|
## Ejemplo
|
|
143
213
|
|
|
144
214
|
```html
|