@ajuarezso/sui-design-system 0.24.1 → 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 +85 -11
- package/docs/sui-activity-feed/README.md +65 -11
- package/docs/sui-activity-filter/README.md +54 -5
- package/docs/sui-alert/README.md +54 -0
- package/docs/sui-app-store-badge/README.md +64 -10
- package/docs/sui-avatar/README.md +92 -29
- package/docs/sui-avatar-group/README.md +75 -9
- package/docs/sui-badge/README.md +85 -17
- package/docs/sui-banner/README.md +85 -20
- package/docs/sui-brand-logo/README.md +95 -31
- package/docs/sui-breadcrumb-item/README.md +54 -3
- package/docs/sui-breadcrumbs/README.md +54 -6
- package/docs/sui-button/README.md +76 -12
- package/docs/sui-button-group/README.md +91 -23
- package/docs/sui-button-group-item/README.md +81 -14
- package/docs/sui-card/README.md +105 -18
- package/docs/sui-chart-legend/README.md +63 -10
- package/docs/sui-chart-legend-dot/README.md +59 -10
- package/docs/sui-checkbox/README.md +109 -29
- package/docs/sui-checkbox-card/README.md +70 -14
- package/docs/sui-checkbox-label/README.md +92 -26
- package/docs/sui-circular-progress-bar/README.md +80 -19
- package/docs/sui-color-dot/README.md +72 -12
- package/docs/sui-color-picker/README.md +71 -13
- package/docs/sui-command-menu-footer/README.md +50 -1
- package/docs/sui-command-menu-item/README.md +74 -14
- package/docs/sui-command-menu-search/README.md +58 -3
- package/docs/sui-compact-avatar-group/README.md +73 -13
- package/docs/sui-compact-button/README.md +123 -34
- package/docs/sui-compact-select/README.md +61 -7
- package/docs/sui-compact-select-for-input/README.md +70 -6
- package/docs/sui-content-card/README.md +75 -14
- package/docs/sui-content-divider/README.md +67 -16
- package/docs/sui-content-label/README.md +99 -20
- package/docs/sui-counter-input/README.md +102 -18
- package/docs/sui-date-selector/README.md +69 -11
- package/docs/sui-datepicker/README.md +85 -18
- package/docs/sui-day-cell/README.md +75 -17
- package/docs/sui-day-label/README.md +56 -7
- package/docs/sui-divider/README.md +64 -9
- package/docs/sui-drawer-footer/README.md +63 -2
- package/docs/sui-drawer-header/README.md +69 -12
- package/docs/sui-dropdown-caption/README.md +58 -6
- package/docs/sui-dropdown-item/README.md +75 -9
- package/docs/sui-dropdown-menu/README.md +83 -14
- package/docs/sui-dropdown-search/README.md +60 -4
- package/docs/sui-emoji/README.md +94 -30
- package/docs/sui-empty-state/README.md +71 -7
- package/docs/sui-fancy-button/README.md +74 -14
- package/docs/sui-file-icon/README.md +70 -12
- package/docs/sui-file-upload/README.md +77 -17
- package/docs/sui-file-upload-card/README.md +64 -12
- package/docs/sui-filter/README.md +83 -14
- package/docs/sui-flag/README.md +73 -8
- package/docs/sui-form-hint/README.md +56 -7
- package/docs/sui-form-label/README.md +57 -5
- package/docs/sui-href/README.md +47 -0
- package/docs/sui-icon/README.md +86 -18
- package/docs/sui-image-upload/README.md +90 -22
- package/docs/sui-image-upload-profile/README.md +70 -11
- package/docs/sui-img-retry/README.md +50 -1
- package/docs/sui-inline-input/README.md +67 -9
- package/docs/sui-inline-select/README.md +62 -2
- package/docs/sui-input/README.md +90 -27
- package/docs/sui-integration-switch/README.md +84 -17
- package/docs/sui-kbd/README.md +73 -9
- package/docs/sui-key-icon/README.md +85 -23
- package/docs/sui-link-button/README.md +96 -27
- package/docs/sui-logo/README.md +93 -22
- package/docs/sui-modal/README.md +72 -13
- package/docs/sui-modal-footer/README.md +86 -12
- package/docs/sui-modal-header/README.md +57 -1
- package/docs/sui-modal-sheet/README.md +74 -12
- package/docs/sui-notification/README.md +81 -11
- package/docs/sui-notification-footer/README.md +55 -5
- package/docs/sui-notification-tab-menu/README.md +61 -5
- package/docs/sui-otp-input/README.md +70 -9
- package/docs/sui-page-header/README.md +89 -19
- package/docs/sui-pagination/README.md +73 -13
- package/docs/sui-password-strength/README.md +50 -1
- package/docs/sui-payment-icon/README.md +80 -18
- package/docs/sui-period-range/README.md +70 -11
- package/docs/sui-popover/README.md +81 -15
- package/docs/sui-product-card/README.md +89 -21
- package/docs/sui-progress-bar/README.md +82 -15
- package/docs/sui-progress-bar-label/README.md +79 -18
- package/docs/sui-radio/README.md +84 -7
- package/docs/sui-radio-card/README.md +70 -16
- package/docs/sui-radio-label/README.md +89 -22
- package/docs/sui-rating/README.md +101 -31
- package/docs/sui-rich-editor/README.md +47 -2
- package/docs/sui-segmented-control/README.md +90 -21
- package/docs/sui-select/README.md +80 -11
- package/docs/sui-sidebar/README.md +71 -16
- package/docs/sui-slider/README.md +75 -8
- package/docs/sui-social-button/README.md +71 -11
- package/docs/sui-status-badge/README.md +75 -14
- package/docs/sui-stepper/README.md +75 -18
- package/docs/sui-store-card/README.md +85 -22
- package/docs/sui-switch/README.md +82 -11
- package/docs/sui-switch-card/README.md +80 -16
- package/docs/sui-switch-label/README.md +91 -14
- package/docs/sui-tab-chips/README.md +93 -21
- package/docs/sui-tab-menu-horizontal/README.md +68 -7
- package/docs/sui-tab-menu-vertical/README.md +64 -11
- package/docs/sui-table/README.md +77 -16
- package/docs/sui-tag/README.md +86 -12
- package/docs/sui-tag-input/README.md +77 -13
- package/docs/sui-textarea/README.md +84 -17
- package/docs/sui-time-picker/README.md +96 -33
- package/docs/sui-toast/README.md +81 -20
- package/docs/sui-tooltip/README.md +80 -22
- package/docs/sui-topbar/README.md +64 -10
- package/docs/sui-topbar-button/README.md +61 -7
- package/docs/sui-topbar-item/README.md +68 -7
- package/docs/sui-topbar-user/README.md +61 -5
- package/fesm2022/ajuarezso-sui-design-system.mjs +15 -10
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +7 -3
|
@@ -47,8 +47,8 @@ otra marca: hoy Google y Apple.
|
|
|
47
47
|
|---|---|---|---|
|
|
48
48
|
| `google` + `stroke` | Iniciar sesión o registrarse con Google: fondo blanco, logo a color. | `pages/auth/login/login.html:39` («Continuar con Google») | canon (aprobado por el dueño, 03-10-2026) |
|
|
49
49
|
| `apple` + `filled` | Iniciar sesión con Apple: negro lleno, como pide Apple. | `pages/auth/login/login.html:50` («Continuar con Apple») | canon (aprobado por el dueño, 03-10-2026) |
|
|
50
|
-
| `google` + `filled` (rojo) | No: el botón de Google va en blanco. Es lo que sale si se olvida `variantStyle`. | — |
|
|
51
|
-
| `apple` + `stroke` | No: Apple va negro lleno en tema claro. | — |
|
|
50
|
+
| `google` + `filled` (rojo) | No: el botón de Google va en blanco. Es lo que sale si se olvida `variantStyle`. | — | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
51
|
+
| `apple` + `stroke` | No: Apple va negro lleno en tema claro. | — | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
52
52
|
| `facebook`, `x-twitter`, `linkedin`, `github`, `dropbox` (cualquier estilo) | No hay login con esas cuentas. | — | no usar · canon (aprobado por el dueño, 03-10-2026) |
|
|
53
53
|
|
|
54
54
|
### `onlyIcon`
|
|
@@ -70,11 +70,11 @@ otra marca: hoy Google y Apple.
|
|
|
70
70
|
|
|
71
71
|
| prop | cuándo | fuente |
|
|
72
72
|
|---|---|---|
|
|
73
|
-
| `label` | Sin pasarlo sale «Continuar con Google» / «Continuar con Apple», que sirve igual para entrar y para registrarse. Pasarlo solo si el texto tiene que decir otra cosa. |
|
|
74
|
-
| `loading` | Desde el toque hasta que vuelve la ventana de la marca: cambia el logo por un spinner y deshabilita el botón. |
|
|
75
|
-
| `disabled` | Mientras otro login está en curso, para que no se abran dos (en el login: `processingRedirect`). Nunca para una marca que no tiene login. |
|
|
76
|
-
| `href` | Solo si el login se hace navegando a una URL (OAuth por redirect web). Pinta un `<a>`. |
|
|
77
|
-
| `ariaLabel` | No hace falta: con texto se lee el texto; con `onlyIcon` el componente usa el label. |
|
|
73
|
+
| `label` | Sin pasarlo sale «Continuar con Google» / «Continuar con Apple», que sirve igual para entrar y para registrarse. Pasarlo solo si el texto tiene que decir otra cosa. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
74
|
+
| `loading` | Desde el toque hasta que vuelve la ventana de la marca: cambia el logo por un spinner y deshabilita el botón. | canon (aprobado por el dueño, 05-10-2026, bloque B8); ya es la práctica del login |
|
|
75
|
+
| `disabled` | Mientras otro login está en curso, para que no se abran dos (en el login: `processingRedirect`). Nunca para una marca que no tiene login. | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
76
|
+
| `href` | Solo si el login se hace navegando a una URL (OAuth por redirect web). Pinta un `<a>`. | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
|
|
77
|
+
| `ariaLabel` | No hace falta: con texto se lee el texto; con `onlyIcon` el componente usa el label. | canon (aprobado por el dueño, 05-10-2026, bloque B5) |
|
|
78
78
|
|
|
79
79
|
## Tamaño en mobile y en web
|
|
80
80
|
|
|
@@ -94,11 +94,11 @@ con mouse, va un tamaño más chico. La app ya lo resuelve con `BreakpointsServi
|
|
|
94
94
|
|
|
95
95
|
| uso | mobile | web | fuente |
|
|
96
96
|
|---|---|---|---|
|
|
97
|
-
| login con Google o Apple | `large` (48), **ancho completo** (`width: 100%`) | `medium` (40), ancho del formulario | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (alto) ·
|
|
97
|
+
| login con Google o Apple | `large` (48), **ancho completo** (`width: 100%`) | `medium` (40), ancho del formulario | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (alto) · ancho: canon (aprobado por el dueño, 05-10-2026, bloque B1; es lo que ya hace `pages/auth/login/login.html` con `.auth-page__provider-btn`) |
|
|
98
98
|
|
|
99
99
|
```html
|
|
100
100
|
<sui-social-button brand="google" variantStyle="stroke" style="width: 100%"
|
|
101
|
-
[size]="bp.
|
|
101
|
+
[size]="bp.sizeControl()" (clicked)="loginGoogle()" /> <!-- D16, dueño 05-10-2026 -->
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
**Ancho completo**: `width: 100%` en el host estira el botón (arreglado en el DS el 03-10-2026 con
|
|
@@ -111,6 +111,23 @@ estira nunca. El host sigue siendo `inline-flex`: para el ancho completo va `wid
|
|
|
111
111
|
No se estira el alto con CSS desde afuera: el logo y el padding no escalan. Para el teléfono va
|
|
112
112
|
`size="large"`.
|
|
113
113
|
|
|
114
|
+
### Por dispositivo (D16)
|
|
115
|
+
|
|
116
|
+
Fila `social-button` de la tabla D16 (dueño, 05-10-2026), la misma que `sui-button`.
|
|
117
|
+
|
|
118
|
+
| dispositivo | size | nota |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| celular chico (< 380 px) | `large` (48) | interino: D16 pide `medium` con área tocable de 44; hasta que el DS la estire, se queda el grande (nota ¹ de D16) |
|
|
121
|
+
| celular (380–767 px) | `large` (48) | ancho completo, del mismo alto que el CTA de al lado |
|
|
122
|
+
| tablet táctil (`pointer: coarse`) | `large` (48) | con `bp.isMobile()` el iPad quedaba en `medium` 40 |
|
|
123
|
+
| computadora (`pointer: fine`) | `medium` (40) | |
|
|
124
|
+
|
|
125
|
+
Ultrawide (≥ 1920 px): igual que la computadora, `medium`; el formulario de login no se ensancha.
|
|
126
|
+
|
|
127
|
+
En master-pedidos: `[size]="bp.sizeControl()"`, el mismo helper que `sui-button` (devuelve `'large' | 'medium'`, los dos
|
|
128
|
+
sizes que tiene el componente). Hoy los 5 usos van con `bp.isMobile() ? 'large' : 'medium'`
|
|
129
|
+
(`pages/auth/login/login.html:39` y `:50`, `pages/auth/register/register.html:86`, `:87` y `:94`): se migran.
|
|
130
|
+
|
|
114
131
|
## «No usar»: por qué no hoy y cuándo sí
|
|
115
132
|
|
|
116
133
|
Nada se borra del DS. Lo marcado «no usar» no tiene caso en la app de hoy; si un flujo nuevo cae
|
|
@@ -160,12 +177,55 @@ en la columna de la derecha, se usa (aprobado por el dueño, 03-10-2026).
|
|
|
160
177
|
- El output es `(clicked)`.
|
|
161
178
|
- Ya trae el arreglo de iOS para el `:active` pegado: no lo agregues.
|
|
162
179
|
|
|
180
|
+
## Bien y mal
|
|
181
|
+
|
|
182
|
+
**Google sin estilo**
|
|
183
|
+
|
|
184
|
+
```html
|
|
185
|
+
<!-- ❌ mal: `variantStyle` arranca en `filled` y el botón de Google sale rojo lleno -->
|
|
186
|
+
<sui-social-button brand="google" [size]="bp.sizeControl()" (clicked)="entrarConGoogle()" />
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
```html
|
|
190
|
+
<!-- ✅ bien: Google en blanco con logo a color -->
|
|
191
|
+
<sui-social-button brand="google" variantStyle="stroke" [size]="bp.sizeControl()" (clicked)="entrarConGoogle()" />
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**La fila de marcas en el registro**
|
|
195
|
+
|
|
196
|
+
```html
|
|
197
|
+
<!-- ❌ mal: solo ícono y dos marcas sin login, deshabilitadas de adorno (pages/auth/register/register.html:86-94) -->
|
|
198
|
+
<sui-social-button brand="x-twitter" variantStyle="stroke" [onlyIcon]="true" [disabled]="true" />
|
|
199
|
+
<sui-social-button brand="google" variantStyle="stroke" [onlyIcon]="true" (clicked)="onGoogleRegister()" />
|
|
200
|
+
<sui-social-button brand="linkedin" variantStyle="stroke" [onlyIcon]="true" [disabled]="true" />
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```html
|
|
204
|
+
<!-- ✅ bien: lo mismo que el login, con texto y solo las marcas que tienen login -->
|
|
205
|
+
<sui-social-button brand="google" variantStyle="stroke" [size]="bp.sizeControl()"
|
|
206
|
+
style="width: 100%" [loading]="loading()" (clicked)="onGoogleRegister()" />
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**El size por dispositivo**
|
|
210
|
+
|
|
211
|
+
```html
|
|
212
|
+
<!-- ❌ mal: solo mira el ancho; en el iPad (≥ 768, táctil) queda en `medium` 40 (pages/auth/login/login.html:39) -->
|
|
213
|
+
<sui-social-button brand="google" variantStyle="stroke"
|
|
214
|
+
[size]="bp.isMobile() ? 'large' : 'medium'" (clicked)="entrarConGoogle()" />
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
```html
|
|
218
|
+
<!-- ✅ bien: el helper de D16 -->
|
|
219
|
+
<sui-social-button brand="google" variantStyle="stroke"
|
|
220
|
+
[size]="bp.sizeControl()" (clicked)="entrarConGoogle()" />
|
|
221
|
+
```
|
|
222
|
+
|
|
163
223
|
## Ejemplo
|
|
164
224
|
|
|
165
225
|
```html
|
|
166
226
|
<!-- Login: Google en blanco, Apple negro lleno, los dos con texto -->
|
|
167
|
-
<sui-social-button brand="google" variantStyle="stroke" [loading]="cargandoGoogle()"
|
|
227
|
+
<sui-social-button brand="google" variantStyle="stroke" [size]="bp.sizeControl()" [loading]="cargandoGoogle()"
|
|
168
228
|
[disabled]="procesando()" (clicked)="entrarConGoogle()" />
|
|
169
|
-
<sui-social-button brand="apple" variantStyle="filled" [loading]="cargandoApple()"
|
|
229
|
+
<sui-social-button brand="apple" variantStyle="filled" [size]="bp.sizeControl()" [loading]="cargandoApple()"
|
|
170
230
|
[disabled]="procesando()" (clicked)="entrarConApple()" />
|
|
171
231
|
```
|
|
@@ -35,7 +35,7 @@ etiqueta → badge.**
|
|
|
35
35
|
> «resaltar estados o condiciones en poco espacio», trae cuatro estados (`completed`,
|
|
36
36
|
> `pending`, `failed`, `disabled`), dos estilos (`stroke`, `light`), ícono o punto, y un ícono
|
|
37
37
|
> por estado en sus ejemplos (los mismos que pone SUI). No trae do/don't. Lo marcado
|
|
38
|
-
> «según la guía del DS» sale de ahí;
|
|
38
|
+
> «según la guía del DS» sale de ahí; lo marcado **canon** está aprobado; lo que sigue en **propuesta** espera decisión.
|
|
39
39
|
>
|
|
40
40
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 status-badges** (eran 3), sin contar
|
|
41
41
|
> prototipos ni vitrinas (`master-preview`, `master-prototipos`, `mockup-sheets-*`, `dx/*`,
|
|
@@ -51,7 +51,7 @@ etiqueta → badge.**
|
|
|
51
51
|
| `pending` | orange (`warning`) | Espera que alguien haga algo. | «Pendiente», «En revisión» | según la guía del DS (estado y color) |
|
|
52
52
|
| `failed` | red (`error`) | Terminó mal. | «Rechazada», «Fallido», «Anulado» | según la guía del DS (estado y color) |
|
|
53
53
|
| `disabled` | gray (`faded`) | Apagado o fuera de uso. | «Desactivado», «Vencido» | según la guía del DS (estado y color; es el default de la guía) |
|
|
54
|
-
| `information` | blue (`information`) | Extensión SUI: avanza solo y nadie tiene que actuar. | «En proceso» |
|
|
54
|
+
| `information` | blue (`information`) | Extensión SUI: avanza solo y nadie tiene que actuar. | «En proceso» | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
55
55
|
|
|
56
56
|
Es el mismo mapa que el badge aprobado (green bien, orange pendiente, red error, blue info,
|
|
57
57
|
gray neutro), porque los dos pintan con los mismos tokens `--sui-state-*`.
|
|
@@ -63,10 +63,10 @@ gray neutro), porque los dos pintan con los mismos tokens `--sui-state-*`.
|
|
|
63
63
|
| `appearance` | `stroke` (default) | Tablas y listas: fondo blanco, texto gris, solo el ícono lleva color. Es el que menos ruido hace cuando hay muchos. | según la guía del DS (default) |
|
|
64
64
|
| `appearance` | `light` | El estado es **el** dato de la card o de la fila (fondo teñido, texto de color). | propuesta, falta aprobación |
|
|
65
65
|
| `withDot` | `false` (default) | Ícono del estado. Lo normal. | según la guía del DS |
|
|
66
|
-
| `withDot` | `true` con `stroke` | Tabla densa con la misma columna de estado en muchas filas, donde veinte íconos hacen ruido. |
|
|
67
|
-
| `withDot` | `true` con `light` | **No usar** (ver abajo). |
|
|
66
|
+
| `withDot` | `true` con `stroke` | Tabla densa con la misma columna de estado en muchas filas, donde veinte íconos hacen ruido. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
67
|
+
| `withDot` | `true` con `light` | **No usar** (ver abajo). | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
68
68
|
| `icon` | `''` (default) | Siempre el del estado: es la mitad de su significado. | según la guía del DS (ícono por estado en sus ejemplos) |
|
|
69
|
-
| `icon` | nombre Remix | **No usar** (ver abajo). |
|
|
69
|
+
| `icon` | nombre Remix | **No usar** (ver abajo). | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
70
70
|
|
|
71
71
|
### `sui-status-badge` o `sui-badge`
|
|
72
72
|
|
|
@@ -98,10 +98,15 @@ dueño, 03-10-2026).
|
|
|
98
98
|
|
|
99
99
|
## Tamaño en mobile y en web
|
|
100
100
|
|
|
101
|
-
Criterio de la app: **
|
|
102
|
-
(
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
Criterio de la app: **D16, tamaño por dispositivo** (canon, dueño, 05-10-2026), que reemplaza al
|
|
102
|
+
«tamaño por plataforma» del 03-10-2026 (mobile grande, web chico). La columna «mobile» es el celular de
|
|
103
|
+
380 px o más y, en lo que se toca, también la tablet (`pointer: coarse`). La columna «web» es la
|
|
104
|
+
computadora (`pointer: fine`) y, en lo que no se toca, también la tablet. En el celular chico
|
|
105
|
+
(< 380 px) va `medium` a la vista, sin achicar el área de 44 de lo que se toca. **Nada en `small` ni
|
|
106
|
+
`xsmall`**, salvo lo que el componente solo tiene en chico. En la app, `BreakpointsService` ya
|
|
107
|
+
separa el celular chico (`bp.celularChico()`, < 380 px), el celular (`bp.celular()`, 380–767) y la
|
|
108
|
+
pantalla táctil (`bp.toque()`); `bp.isMobile()` sola (≤ 767 px) mete al celular chico con el
|
|
109
|
+
celular, y para lo que no se toca eso está mal.
|
|
105
110
|
|
|
106
111
|
| size | alto | texto | ícono (caja) | punto |
|
|
107
112
|
|---|---|---|---|---|
|
|
@@ -117,15 +122,33 @@ escala de badge (12/14/16) se mantiene. No es táctil: no tiene foco ni output.
|
|
|
117
122
|
|
|
118
123
|
| uso | mobile | web | fuente |
|
|
119
124
|
|---|---|---|---|
|
|
120
|
-
| Estado en una fila, card o tabla | `large` (28) | `medium` (24) |
|
|
121
|
-
| Estado principal de una pantalla de detalle (el pedido que se mira) | `xlarge` (32) | `medium` (24) |
|
|
125
|
+
| Estado en una fila, card o tabla | `large` (28) | `medium` (24) | canon (dueño, 05-10-2026, P1 b); el tamaño es extensión SUI aprobada (03-10-2026) |
|
|
126
|
+
| Estado principal de una pantalla de detalle (el pedido que se mira) | `xlarge` (32) | `medium` (24) | D16, dueño 05-10-2026 (tabla por componente: «`xlarge` en el detalle»); el tamaño es extensión SUI aprobada (03-10-2026) |
|
|
122
127
|
|
|
123
128
|
```html
|
|
124
|
-
<sui-status-badge status="completed" appearance="light" [size]="bp.
|
|
129
|
+
<sui-status-badge status="completed" appearance="light" [size]="bp.celular() ? 'large' : 'medium'">Entregado</sui-status-badge>
|
|
125
130
|
```
|
|
126
131
|
|
|
127
132
|
No se agranda con CSS en la pantalla: se pasa `size`.
|
|
128
133
|
|
|
134
|
+
### Por dispositivo (D16)
|
|
135
|
+
|
|
136
|
+
El status-badge no se toca: sube **solo en el celular de 380 px o más**. Fuente: D16, dueño
|
|
137
|
+
05-10-2026.
|
|
138
|
+
|
|
139
|
+
| dispositivo | size | nota |
|
|
140
|
+
|---|---|---|
|
|
141
|
+
| celular chico (< 380) | `medium` | no se toca: no sube aunque sea un celular |
|
|
142
|
+
| celular (380–767) | `large` (`xlarge` en el detalle) | un paso más que en la computadora |
|
|
143
|
+
| tablet táctil (`pointer: coarse`) | `medium` | no se toca: el puntero no cambia nada |
|
|
144
|
+
| computadora (`pointer: fine`) | `medium` | es el más chico que tiene; no hay `small` |
|
|
145
|
+
|
|
146
|
+
En el ultrawide, igual que en la computadora.
|
|
147
|
+
|
|
148
|
+
En master-pedidos no hay helper propio: `[size]="bp.celular() ? 'large' : 'medium'"` (es lo mismo
|
|
149
|
+
que devuelve `bp.sizeBadge()`, y los dos valores existen aquí). En el detalle:
|
|
150
|
+
`[size]="bp.celular() ? 'xlarge' : 'medium'"`.
|
|
151
|
+
|
|
129
152
|
## API
|
|
130
153
|
|
|
131
154
|
<!-- api:inicio -->
|
|
@@ -157,12 +180,50 @@ Slot: `<ng-content>` (el texto).
|
|
|
157
180
|
distintos a propósito.
|
|
158
181
|
- El host lleva `role="status"`: el lector de pantalla anuncia los cambios.
|
|
159
182
|
|
|
183
|
+
## Bien y mal
|
|
184
|
+
|
|
185
|
+
Distintivo del local
|
|
186
|
+
|
|
187
|
+
```html
|
|
188
|
+
<!-- ❌ mal: no es un trámite; pending con ícono propio se lee «algo avanza» (así estaba pages/customer/restaurant-menu/restaurant-menu.html hasta el 03-10-2026) -->
|
|
189
|
+
<sui-status-badge status="pending" icon="vip-crown-2-fill" appearance="light">Local exclusivo</sui-status-badge>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
```html
|
|
193
|
+
<!-- ✅ bien: categoría o distinción → sui-badge (pink = destacado) -->
|
|
194
|
+
<sui-badge color="pink" type="left-icon" [size]="bp.sizeBadge()"><sui-icon data-slot="start" name="vip-crown-2-fill" [size]="16" />Local exclusivo</sui-badge>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Estado del pedido
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
<!-- ❌ mal: el pedido tiene más de cuatro estados (preparando, en camino…); «En camino» no es el final de un ciclo -->
|
|
201
|
+
<sui-status-badge status="information">En camino</sui-status-badge>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
```html
|
|
205
|
+
<!-- ✅ bien -->
|
|
206
|
+
<sui-badge color="blue" [size]="bp.sizeBadge()">En camino</sui-badge>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Punto en una tabla densa
|
|
210
|
+
|
|
211
|
+
```html
|
|
212
|
+
<!-- ❌ mal: con light el fondo ya dice el color, el punto repite; y sin status sale verde (completed) -->
|
|
213
|
+
<sui-status-badge appearance="light" [withDot]="true">Desactivado</sui-status-badge>
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
```html
|
|
217
|
+
<!-- ✅ bien -->
|
|
218
|
+
<sui-status-badge status="disabled" [withDot]="true" [size]="bp.celular() ? 'large' : 'medium'">Desactivado</sui-status-badge>
|
|
219
|
+
```
|
|
220
|
+
|
|
160
221
|
## Ejemplo
|
|
161
222
|
|
|
162
223
|
```html
|
|
163
224
|
<!-- En una tabla de recargas: stroke (default) -->
|
|
164
|
-
<sui-status-badge status="pending">En revisión</sui-status-badge>
|
|
225
|
+
<sui-status-badge status="pending" [size]="bp.celular() ? 'large' : 'medium'">En revisión</sui-status-badge>
|
|
165
226
|
|
|
166
227
|
<!-- El estado es el dato principal de la card -->
|
|
167
|
-
<sui-status-badge status="failed" appearance="light">Rechazada</sui-status-badge>
|
|
228
|
+
<sui-status-badge status="failed" appearance="light" [size]="bp.celular() ? 'large' : 'medium'">Rechazada</sui-status-badge>
|
|
168
229
|
```
|
|
@@ -26,7 +26,7 @@ Vehículo → Listo»).
|
|
|
26
26
|
- Secciones que se visitan en cualquier orden: `sui-tab-menu-horizontal`.
|
|
27
27
|
- Un solo paso: no hay nada que indicar.
|
|
28
28
|
|
|
29
|
-
Regla corta (
|
|
29
|
+
Regla corta (canon, aprobado por el dueño, 05-10-2026, bloque B2): **pasos con nombre y orden → stepper · porcentaje →
|
|
30
30
|
progress-bar · secciones sin orden → tab menu.**
|
|
31
31
|
|
|
32
32
|
## Qué variante usar
|
|
@@ -46,17 +46,17 @@ progress-bar · secciones sin orden → tab menu.**
|
|
|
46
46
|
|
|
47
47
|
| variant | cuándo | ejemplo real de la app | fuente |
|
|
48
48
|
|---|---|---|---|
|
|
49
|
-
| `horizontal` (default) | Flujo de **2 a 4 pasos** con nombre, arriba del contenido del paso. Mobile y web. | `pages/driver-onboarding/step-info/step-info.html:3` («Datos → Vehículo → Listo») | según la guía del DS (procesos secuenciales); el límite de pasos
|
|
50
|
-
| `vertical` | Flujo de **5+ pasos** en web, en una columna al costado del formulario. | (sin uso) | según la guía del DS (la pieza existe); el cuándo
|
|
49
|
+
| `horizontal` (default) | Flujo de **2 a 4 pasos** con nombre, arriba del contenido del paso. Mobile y web. | `pages/driver-onboarding/step-info/step-info.html:3` («Datos → Vehículo → Listo») | según la guía del DS (procesos secuenciales); el límite de pasos, canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
50
|
+
| `vertical` | Flujo de **5+ pasos** en web, en una columna al costado del formulario. | (sin uso) | según la guía del DS (la pieza existe); el cuándo, canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
51
51
|
| `dot` | Pantallas que se pasan de a una sin nombre: carrusel de bienvenida, fotos. | `pages/customer/store-browser/store-browser.html:214` (páginas de rubros del home) | según la guía del DS (puntos de carrusel) |
|
|
52
52
|
|
|
53
53
|
### `size`
|
|
54
54
|
|
|
55
55
|
| size | qué cambia | cuándo | fuente |
|
|
56
56
|
|---|---|---|---|
|
|
57
|
-
| `small` (default) | punto de 8 · indicador de 20 · texto 14 |
|
|
58
|
-
| `xsmall` | solo el punto: 4 px. Horizontal y vertical quedan igual que `small`. | Puntos sobre una foto o un banner chico, donde 8 px tapan. | según la guía del DS (el tamaño existe); el cuándo
|
|
59
|
-
| `medium` | punto de 10 · indicador de 24 · texto 16 · card vertical de 44 |
|
|
57
|
+
| `small` (default) | punto de 8 · indicador de 20 · texto 14 | No usar: es chico. En web va `medium`. | el tamaño y el default: según la guía del DS · no usarlo: canon (dueño, 05-10-2026, D16) |
|
|
58
|
+
| `xsmall` | solo el punto: 4 px. Horizontal y vertical quedan igual que `small`. | Puntos sobre una foto o un banner chico, donde 8 px tapan. | según la guía del DS (el tamaño existe); el cuándo, canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
59
|
+
| `medium` | punto de 10 · indicador de 24 · texto 16 · card vertical de 44 | Siempre: celular, tablet y computadora. Es el más grande que tiene, así que en el celular no sube un paso. Publicado desde la 0.20.0. | canon (dueño, 05-10-2026, D16); antes solo mobile (tamaño por plataforma, 03-10-2026) |
|
|
60
60
|
|
|
61
61
|
### Estado de cada paso (`currentStep`, `errorStep`)
|
|
62
62
|
|
|
@@ -65,30 +65,30 @@ progress-bar · secciones sin orden → tab menu.**
|
|
|
65
65
|
| `completed` | índice menor que `currentStep` | pasos ya hechos (check verde) | según la guía del DS |
|
|
66
66
|
| `active` | índice igual a `currentStep` | el paso en pantalla | según la guía del DS |
|
|
67
67
|
| `default` | índice mayor que `currentStep` | lo que falta | según la guía del DS |
|
|
68
|
-
| todos `completed` | `currentStep` = cantidad de pasos | la pantalla final («Listo») |
|
|
69
|
-
| `error` | `errorStep` = índice | un flujo que se cortó en ese paso (pago rechazado, documento no aprobado). Extensión de SUI. |
|
|
68
|
+
| todos `completed` | `currentStep` = cantidad de pasos | la pantalla final («Listo») | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
69
|
+
| `error` | `errorStep` = índice | un flujo que se cortó en ese paso (pago rechazado, documento no aprobado). Extensión de SUI. | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
70
70
|
|
|
71
71
|
### `interactive`
|
|
72
72
|
|
|
73
73
|
| valor | cuándo | fuente |
|
|
74
74
|
|---|---|---|
|
|
75
|
-
| `false` (default) | Los onboardings: se avanza con el botón «Continuar», no tocando el paso. |
|
|
75
|
+
| `false` (default) | Los onboardings: se avanza con el botón «Continuar», no tocando el paso. | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
76
76
|
| `true` | Los puntos de un carrusel (en el teléfono se tocan en 44 de alto, ver Tamaño), o pasos hechos que se pueden **volver a editar** en web (el horizontal mide 24 de alto). | propuesta, falta aprobación |
|
|
77
77
|
|
|
78
78
|
### `steps`, `count`, `ariaLabel`
|
|
79
79
|
|
|
80
80
|
| input | cuándo | fuente |
|
|
81
81
|
|---|---|---|
|
|
82
|
-
| `steps` | Siempre en `horizontal` y `vertical`, con `label` en cada uno. |
|
|
82
|
+
| `steps` | Siempre en `horizontal` y `vertical`, con `label` en cada uno. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
83
83
|
| `count` | Solo en `dot`, cuando los pasos no tienen nombre. Si pasas `steps`, `count` se ignora. | según el código |
|
|
84
|
-
| `ariaLabel` | Default «Progreso». Cámbialo si hay más de un stepper en la pantalla («Pasos del registro»). |
|
|
84
|
+
| `ariaLabel` | Default «Progreso». Cámbialo si hay más de un stepper en la pantalla («Pasos del registro»). | canon (aprobado por el dueño, 05-10-2026, bloque B5) |
|
|
85
85
|
|
|
86
86
|
**Usos de hoy que rompen las reglas:**
|
|
87
87
|
|
|
88
88
|
- **0 de variante o estado** en los onboardings: los 7 son horizontales de 2 o 3 pasos, y `step-complete` usa
|
|
89
89
|
`currentStep = stepLabels.length` para marcar todo hecho (`pages/driver-onboarding/step-complete/step-complete.html:3`).
|
|
90
|
-
- **7
|
|
91
|
-
|
|
90
|
+
- **7 en `small`** (`medium` ya está publicado): con D16 (05-10-2026) van `size="medium"` en el
|
|
91
|
+
celular, la tablet y la computadora (es su size más grande). Ejemplos:
|
|
92
92
|
`pages/customer-onboarding/step-phone/step-phone.html:3`, `pages/business-onboarding/step-info/step-info.html:3`.
|
|
93
93
|
- **A discutir, 1 `interactive` en mobile:** `pages/customer/store-browser/store-browser.html:214`
|
|
94
94
|
usa los puntos `medium` como paginador tocable en el home del cliente. Desde el 04-10-2026 cada
|
|
@@ -98,12 +98,12 @@ progress-bar · secciones sin orden → tab menu.**
|
|
|
98
98
|
|
|
99
99
|
| uso | mobile | web | fuente |
|
|
100
100
|
|---|---|---|---|
|
|
101
|
-
| horizontal arriba de un paso | `medium` (indicador 24, texto 16) | `
|
|
102
|
-
| vertical al costado | no se usa (no entra al lado del formulario) | `
|
|
103
|
-
| puntos de carrusel | `medium` (10, se toca en 22 × 44) | `
|
|
101
|
+
| horizontal arriba de un paso | `medium` (indicador 24, texto 16) | `medium` | canon (dueño, 05-10-2026, D16); reemplaza al web `small` del 03-10-2026 |
|
|
102
|
+
| vertical al costado | no se usa (no entra al lado del formulario) | `medium` | canon (dueño, 05-10-2026, D16) |
|
|
103
|
+
| puntos de carrusel | `medium` (10, se toca en 22 × 44) | `medium` (10) | tamaño: canon (dueño, 05-10-2026, D16) (`medium` es el más grande que tiene) · área de 44: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono |
|
|
104
104
|
|
|
105
105
|
```html
|
|
106
|
-
<sui-stepper [steps]="pasos" [currentStep]="paso - 1"
|
|
106
|
+
<sui-stepper [steps]="pasos" [currentStep]="paso - 1" size="medium" />
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
Sin `interactive` el tamaño solo afecta lo que se lee. Con `interactive`, en el teléfono
|
|
@@ -115,6 +115,23 @@ horizontal sigue en 24 de alto con `medium`: con `interactive` queda para web. L
|
|
|
115
115
|
Alto de cada pieza: horizontal `small` 20 y `medium` 24 (el indicador; la línea del texto mide lo
|
|
116
116
|
mismo) · puntos 4 / 8 / 10 · card vertical `small` 36 (8 + 20 + 8) y `medium` 44.
|
|
117
117
|
|
|
118
|
+
### Por dispositivo (D16)
|
|
119
|
+
|
|
120
|
+
`medium` es el size más grande del stepper, así que no cambia por dispositivo: va `medium` en
|
|
121
|
+
todos. Fuente: D16, dueño 05-10-2026 (tabla por componente).
|
|
122
|
+
|
|
123
|
+
| dispositivo | size | nota |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| celular chico (< 380) | `medium` | con `interactive`, los puntos se tocan en 22 × 44 |
|
|
126
|
+
| celular (380–767) | `medium` | no sube un paso: no hay uno más grande |
|
|
127
|
+
| tablet táctil (`pointer: coarse`) | `medium` | el área de 44 de los puntos hoy se prende solo hasta 767 px: en un iPad de 768 o más los puntos `interactive` se tocan en 10 × 10 |
|
|
128
|
+
| computadora (`pointer: fine`) | `medium` | nunca `small` (el default): hay que pasar `size` |
|
|
129
|
+
|
|
130
|
+
En el ultrawide, igual que en la computadora. `xsmall` solo para puntos sobre una foto o un banner
|
|
131
|
+
chico (ver `size`).
|
|
132
|
+
|
|
133
|
+
En master-pedidos: `size="medium"` fijo, sin helper (no depende del dispositivo).
|
|
134
|
+
|
|
118
135
|
## «No usar»: por qué no hoy y cuándo sí
|
|
119
136
|
|
|
120
137
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -168,6 +185,46 @@ type SuiStepperSize = 'small' | 'xsmall' | 'medium'; // medium: extensión SUI
|
|
|
168
185
|
- `errorStep` gana sobre `currentStep`: los anteriores quedan hechos y los siguientes por hacer.
|
|
169
186
|
- El activo usa `--sui-primary-base`, que en la app es naranja.
|
|
170
187
|
|
|
188
|
+
## Bien y mal
|
|
189
|
+
|
|
190
|
+
Stepper de un onboarding
|
|
191
|
+
|
|
192
|
+
```html
|
|
193
|
+
<!-- ❌ mal: sin size queda small, el default chico (pages/customer-onboarding/step-phone/step-phone.html:3 y los otros 6 onboardings) -->
|
|
194
|
+
<sui-stepper variant="horizontal" [steps]="stepLabels" [currentStep]="currentStep - 1" />
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
```html
|
|
198
|
+
<!-- ✅ bien -->
|
|
199
|
+
<sui-stepper variant="horizontal" [steps]="stepLabels" [currentStep]="currentStep - 1" size="medium" />
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Paso actual numerado desde 1
|
|
203
|
+
|
|
204
|
+
```html
|
|
205
|
+
<!-- ❌ mal: currentStep arranca en 0; con el número de la app marca como hecho el paso en pantalla -->
|
|
206
|
+
<sui-stepper [steps]="stepLabels" [currentStep]="currentStep" size="medium" />
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
```html
|
|
210
|
+
<!-- ✅ bien -->
|
|
211
|
+
<sui-stepper [steps]="stepLabels" [currentStep]="currentStep - 1" size="medium" />
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Puntos que llevan a una página
|
|
215
|
+
|
|
216
|
+
```html
|
|
217
|
+
<!-- ❌ mal: sin interactive los puntos son div y stepClick nunca sale -->
|
|
218
|
+
<sui-stepper variant="dot" size="medium" [count]="paginas().length"
|
|
219
|
+
[currentStep]="pagina()" (stepClick)="irAPagina($event)" />
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```html
|
|
223
|
+
<!-- ✅ bien (como pages/customer/store-browser/store-browser.html:214) -->
|
|
224
|
+
<sui-stepper variant="dot" size="medium" [count]="paginas().length" [currentStep]="pagina()"
|
|
225
|
+
[interactive]="true" ariaLabel="Páginas de rubros" (stepClick)="irAPagina($event)" />
|
|
226
|
+
```
|
|
227
|
+
|
|
171
228
|
## Ejemplo
|
|
172
229
|
|
|
173
230
|
```html
|
|
@@ -175,5 +232,5 @@ type SuiStepperSize = 'small' | 'xsmall' | 'medium'; // medium: extensión SUI
|
|
|
175
232
|
variant="horizontal"
|
|
176
233
|
[steps]="[{ label: 'Datos' }, { label: 'Vehículo' }, { label: 'Listo' }]"
|
|
177
234
|
[currentStep]="1"
|
|
178
|
-
|
|
235
|
+
size="medium" />
|
|
179
236
|
```
|
|
@@ -29,35 +29,38 @@ 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`)
|
|
38
39
|
|
|
39
40
|
| estado | cuándo | fuente |
|
|
40
41
|
|---|---|---|
|
|
41
|
-
| `isOpen: true` | Abierto: chip verde «Abierto». |
|
|
42
|
-
| `isOpen: false` | Cerrado: chip «Cerrado» y la portada en gris; sigue abriendo la carta (se puede mirar). |
|
|
43
|
-
| `isSuspended: true` | No se puede pedir: «No disponible», toda la tarjeta al 60 % y sin link. |
|
|
44
|
-
| `isOwnerPreview` + `ownerPreviewStatus` | Vista previa: «Borrador», «En revisión» o «Rechazado»; sin corazón, sin nota ni distancia (solo ubicación y envío). |
|
|
42
|
+
| `isOpen: true` | Abierto: chip verde «Abierto». | según el código |
|
|
43
|
+
| `isOpen: false` | Cerrado: chip «Cerrado» y la portada en gris; sigue abriendo la carta (se puede mirar). | según el código |
|
|
44
|
+
| `isSuspended: true` | No se puede pedir: «No disponible», toda la tarjeta al 60 % y sin link. | según el código |
|
|
45
|
+
| `isOwnerPreview` + `ownerPreviewStatus` | Vista previa: «Borrador», «En revisión» o «Rechazado»; sin corazón, sin nota ni distancia (solo ubicación y envío). | según el código |
|
|
45
46
|
|
|
46
47
|
### Las piezas
|
|
47
48
|
|
|
48
49
|
| prop | cuándo | fuente |
|
|
49
50
|
|---|---|---|
|
|
50
|
-
| `store` (obligatorio) | Siempre, con `SuiStoreCardData`. |
|
|
51
|
-
| `deliveryText` string | **Siempre en pantallas nuevas**: el texto del envío calculado por la app (`StateService.computeDeliveryFee`). |
|
|
52
|
-
| `deliveryText = null` | No hay envío que mostrar: la columna desaparece y el distrito deja de cortarse. |
|
|
53
|
-
| `deliveryText` sin pasar | La tarjeta lo deduce de `deliveryType` (Gratis / Recojo / Courier / S/ X). Solo para no romper lo viejo. |
|
|
54
|
-
| `distanceText` | Lo mismo para la distancia: un rango mientras es estimada («menos de 500 m»), el número cuando la ruta se midió («475 m»). `null` la quita. |
|
|
55
|
-
| `isFavorite` + `(toggleFavorite)` | El corazón lleno o vacío; el padre guarda el favorito. |
|
|
56
|
-
| `(ratingClicked)` | La nota abre las opiniones y la info del local (`StoreRatingsModalService`). |
|
|
57
|
-
| `disableLink` | La tarjeta no navega (una vitrina, una lámina, una vista previa). |
|
|
58
|
-
|
|
59
|
-
**Usos de hoy que rompen las reglas:**
|
|
60
|
-
`
|
|
51
|
+
| `store` (obligatorio) | Siempre, con `SuiStoreCardData`. | según el código |
|
|
52
|
+
| `deliveryText` string | **Siempre en pantallas nuevas**: el texto del envío calculado por la app (`StateService.computeDeliveryFee`). | canon (aprobado por el dueño, 05-10-2026, bloque B9); precedente: favoritos |
|
|
53
|
+
| `deliveryText = null` | No hay envío que mostrar: la columna desaparece y el distrito deja de cortarse. | según el código |
|
|
54
|
+
| `deliveryText` sin pasar | La tarjeta lo deduce de `deliveryType` (Gratis / Recojo / Courier / S/ X). Solo para no romper lo viejo. | según el código |
|
|
55
|
+
| `distanceText` | Lo mismo para la distancia: un rango mientras es estimada («menos de 500 m»), el número cuando la ruta se midió («475 m»). `null` la quita. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
56
|
+
| `isFavorite` + `(toggleFavorite)` | El corazón lleno o vacío; el padre guarda el favorito. | según el código |
|
|
57
|
+
| `(ratingClicked)` | La nota abre las opiniones y la info del local (`StoreRatingsModalService`). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
58
|
+
| `disableLink` | La tarjeta no navega (una vitrina, una lámina, una vista previa). | según el código |
|
|
59
|
+
|
|
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
|
|
|
@@ -73,16 +76,36 @@ El ancho lo da el contenedor. El `size` cambia **el corazón de favorito**, en l
|
|
|
73
76
|
| uso | mobile | web | fuente |
|
|
74
77
|
|---|---|---|---|
|
|
75
78
|
| tarjeta | ancho completo | celda de una grilla de 2–3 columnas (≥ 300 de ancho) | lo que hay en la app |
|
|
76
|
-
| corazón de favorito | `large` (44) | `
|
|
79
|
+
| corazón de favorito | `large` (44) | `medium` (40) | 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` (el default del componente: hay que pasarlo) |
|
|
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)
|
|
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' : 'small'"` (cambio de la app, no d
|
|
|
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)"
|