@ajuarezso/sui-design-system 0.24.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/sui-accordion/README.md +4 -4
- package/docs/sui-activity-feed/README.md +11 -11
- package/docs/sui-activity-filter/README.md +5 -5
- package/docs/sui-app-store-badge/README.md +7 -7
- package/docs/sui-avatar/README.md +26 -23
- package/docs/sui-avatar-group/README.md +11 -7
- package/docs/sui-badge/README.md +7 -7
- package/docs/sui-banner/README.md +15 -15
- package/docs/sui-brand-logo/README.md +24 -23
- package/docs/sui-breadcrumb-item/README.md +3 -3
- package/docs/sui-breadcrumbs/README.md +6 -6
- package/docs/sui-button/README.md +9 -7
- package/docs/sui-button-group/README.md +25 -22
- package/docs/sui-button-group-item/README.md +16 -13
- package/docs/sui-card/README.md +8 -8
- package/docs/sui-chart-legend/README.md +10 -10
- package/docs/sui-chart-legend-dot/README.md +10 -10
- package/docs/sui-checkbox/README.md +4 -4
- package/docs/sui-checkbox-card/README.md +12 -12
- package/docs/sui-checkbox-label/README.md +3 -3
- package/docs/sui-circular-progress-bar/README.md +19 -16
- package/docs/sui-color-dot/README.md +13 -9
- package/docs/sui-color-picker/README.md +9 -9
- package/docs/sui-command-menu-footer/README.md +1 -1
- package/docs/sui-command-menu-item/README.md +13 -12
- package/docs/sui-command-menu-search/README.md +3 -2
- package/docs/sui-compact-avatar-group/README.md +14 -11
- package/docs/sui-compact-button/README.md +16 -11
- package/docs/sui-compact-select/README.md +5 -5
- package/docs/sui-compact-select-for-input/README.md +1 -1
- package/docs/sui-content-card/README.md +12 -12
- package/docs/sui-content-divider/README.md +18 -15
- package/docs/sui-content-label/README.md +17 -17
- package/docs/sui-counter-input/README.md +12 -12
- package/docs/sui-date-selector/README.md +8 -8
- package/docs/sui-datepicker/README.md +14 -14
- package/docs/sui-day-cell/README.md +15 -14
- package/docs/sui-day-label/README.md +4 -4
- package/docs/sui-divider/README.md +9 -6
- package/docs/sui-drawer-header/README.md +9 -9
- package/docs/sui-dropdown-caption/README.md +5 -5
- package/docs/sui-dropdown-item/README.md +5 -5
- package/docs/sui-dropdown-menu/README.md +10 -10
- package/docs/sui-dropdown-search/README.md +3 -3
- package/docs/sui-emoji/README.md +13 -13
- package/docs/sui-empty-state/README.md +4 -4
- package/docs/sui-fancy-button/README.md +15 -13
- package/docs/sui-file-icon/README.md +14 -11
- package/docs/sui-file-upload/README.md +10 -10
- package/docs/sui-file-upload-card/README.md +11 -10
- package/docs/sui-filter/README.md +12 -12
- package/docs/sui-flag/README.md +11 -7
- package/docs/sui-form-hint/README.md +2 -2
- package/docs/sui-form-label/README.md +4 -4
- package/docs/sui-icon/README.md +19 -16
- package/docs/sui-image-upload/README.md +20 -19
- package/docs/sui-image-upload-profile/README.md +12 -11
- package/docs/sui-img-retry/README.md +1 -1
- package/docs/sui-inline-input/README.md +6 -6
- package/docs/sui-inline-select/README.md +2 -2
- package/docs/sui-input/README.md +14 -14
- package/docs/sui-integration-switch/README.md +15 -15
- package/docs/sui-kbd/README.md +3 -3
- package/docs/sui-key-icon/README.md +22 -19
- package/docs/sui-link-button/README.md +21 -18
- package/docs/sui-logo/README.md +20 -19
- package/docs/sui-modal/README.md +11 -11
- package/docs/sui-modal-footer/README.md +3 -3
- package/docs/sui-modal-header/README.md +1 -1
- package/docs/sui-modal-sheet/README.md +4 -4
- package/docs/sui-notification/README.md +11 -11
- package/docs/sui-notification-footer/README.md +4 -4
- package/docs/sui-notification-tab-menu/README.md +4 -4
- package/docs/sui-otp-input/README.md +5 -5
- package/docs/sui-page-header/README.md +14 -12
- package/docs/sui-pagination/README.md +13 -13
- package/docs/sui-payment-icon/README.md +16 -13
- package/docs/sui-period-range/README.md +5 -5
- package/docs/sui-popover/README.md +10 -10
- package/docs/sui-product-card/README.md +15 -15
- package/docs/sui-progress-bar/README.md +12 -9
- package/docs/sui-progress-bar-label/README.md +14 -10
- package/docs/sui-radio/README.md +2 -2
- package/docs/sui-radio-card/README.md +12 -12
- package/docs/sui-radio-label/README.md +3 -3
- package/docs/sui-rating/README.md +22 -19
- package/docs/sui-rich-editor/README.md +2 -2
- package/docs/sui-segmented-control/README.md +9 -9
- package/docs/sui-select/README.md +9 -9
- package/docs/sui-sidebar/README.md +7 -7
- package/docs/sui-slider/README.md +7 -7
- package/docs/sui-social-button/README.md +8 -8
- package/docs/sui-status-badge/README.md +13 -10
- package/docs/sui-stepper/README.md +18 -18
- package/docs/sui-store-card/README.md +16 -16
- package/docs/sui-switch/README.md +2 -2
- package/docs/sui-switch-card/README.md +10 -10
- package/docs/sui-switch-label/README.md +1 -1
- package/docs/sui-tab-chips/README.md +17 -15
- package/docs/sui-tab-menu-horizontal/README.md +6 -6
- package/docs/sui-tab-menu-vertical/README.md +8 -8
- package/docs/sui-table/README.md +13 -13
- package/docs/sui-tag/README.md +14 -11
- package/docs/sui-tag-input/README.md +6 -6
- package/docs/sui-textarea/README.md +8 -8
- package/docs/sui-time-picker/README.md +25 -25
- package/docs/sui-toast/README.md +16 -15
- package/docs/sui-tooltip/README.md +19 -18
- package/docs/sui-topbar/README.md +7 -7
- package/docs/sui-topbar-button/README.md +4 -4
- package/docs/sui-topbar-item/README.md +7 -7
- package/docs/sui-topbar-user/README.md +5 -5
- package/fesm2022/ajuarezso-sui-design-system.mjs +17 -12
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +27 -23
|
@@ -46,7 +46,7 @@ Regla corta: **sale de datos o son más de 6 → select · 2–6 fijas → radio
|
|
|
46
46
|
| La lista sale de datos (ubigeo, repartidores, categorías, planes) | `sui-select` | según la guía del DS (elegir una opción de un menú) |
|
|
47
47
|
| Más de ~6 opciones fijas | `sui-select` | derivado del README de `sui-radio` («más de ~6 → select»), falta confirmación |
|
|
48
48
|
| 2 a 6 opciones fijas en un formulario | `sui-radio-label` / `sui-radio-card` | propuesta, falta aprobación (sale del umbral de `sui-radio`) |
|
|
49
|
-
| 2 a 4 modos que se aplican al instante | `sui-segmented-control` | según la guía del DS («aplicarla de inmediato», ver README de `sui-segmented-control`); el tope de 4
|
|
49
|
+
| 2 a 4 modos que se aplican al instante | `sui-segmented-control` | según la guía del DS («aplicarla de inmediato», ver README de `sui-segmented-control`); el tope de 4: canon (decisión del dueño 04-10-2026: 2 a 4 opciones excluyentes → segmented, 5 o más → tab-chips) |
|
|
50
50
|
| Filtro de una barra con 5 o más opciones | `sui-select` sin label (o `sui-compact-select` en web) | propuesta, falta aprobación |
|
|
51
51
|
|
|
52
52
|
**Candidatos de hoy** (no rompen nada; se verían mejor con radios o segmented):
|
|
@@ -69,11 +69,11 @@ Regla corta: **sale de datos o son más de 6 → select · 2–6 fijas → radio
|
|
|
69
69
|
|---|---|---|
|
|
70
70
|
| `type="basic"` (default) sin ícono | Todo select de la app hoy. | según la guía del DS |
|
|
71
71
|
| `type="avatar"` + `imageUrl` | Elegir un **repartidor**: la foto de quien quedó elegido en el campo. Hoy `pages/orders/orders.html:257` muestra solo el nombre. | según la guía del DS (ejemplo «User»); el caso es propuesta |
|
|
72
|
-
| `type="provider"` + `imageUrl` | Método de pago con logo (Yape, Plin). | según la guía del DS (ejemplo «Payment Method»); el caso
|
|
72
|
+
| `type="provider"` + `imageUrl` | Método de pago con logo (Yape, Plin). | según la guía del DS (ejemplo «Payment Method»); el caso, canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
73
73
|
| `leadingIcon` (`true` o nombre RemixIcon) | Un ícono que ayuda a reconocer el campo en un formulario largo. Hoy sin caso. | según la guía del DS (ejemplo «Icons») |
|
|
74
74
|
| `type="country"` + `flag` | No usar hoy: todo es Perú. | según la guía del DS (ejemplo «Country») |
|
|
75
|
-
| `type="brand"` / `"company"` | No usar hoy. |
|
|
76
|
-
| `badge` | No usar hoy. |
|
|
75
|
+
| `type="brand"` / `"company"` | No usar hoy. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
76
|
+
| `badge` | No usar hoy. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
77
77
|
|
|
78
78
|
### Las piezas
|
|
79
79
|
|
|
@@ -109,10 +109,10 @@ y las opciones de la lista; el alto no cambia (las opciones bajan 2 de padding p
|
|
|
109
109
|
|
|
110
110
|
| uso | mobile | web | fuente |
|
|
111
111
|
|---|---|---|---|
|
|
112
|
-
| campo de formulario | `large` (48) | `medium` (40) |
|
|
113
|
-
| filtro de una barra | `large` (48) | `
|
|
114
|
-
| dentro de una tabla
|
|
115
|
-
| `xlarge` (52) | no usar | no usar |
|
|
112
|
+
| campo de formulario | `large` (48) | `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) |
|
|
113
|
+
| filtro de una barra | `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) (hoy `pages/orders/orders.html:257` va en `small`: se migra) |
|
|
114
|
+
| dentro de una tabla | no aplica | `medium` (40) | canon (dueño, 05-10-2026, D16): nada en `xsmall` (la guía del DS lo usa en tablas densas) |
|
|
115
|
+
| `xlarge` (52) | no usar | no usar | canon (aprobado por el dueño, 05-10-2026, bloque B6): queda más alto que el botón `large` del footer |
|
|
116
116
|
|
|
117
117
|
```html
|
|
118
118
|
<sui-select [size]="bp.isMobile() ? 'large' : 'medium'" label="Distrito" … /> <!-- bp = BreakpointsService -->
|
|
@@ -126,7 +126,7 @@ y las opciones de la lista; el alto no cambia (las opciones bajan 2 de padding p
|
|
|
126
126
|
| `type="brand"` / `"company"` | no hay listas de marcas o empresas | elegir la marca de un producto envasado o la empresa de una flota |
|
|
127
127
|
| `leadingIcon` | ningún formulario lo necesita para reconocerse | un formulario largo del panel con varios selects seguidos |
|
|
128
128
|
| `badge` | no hay valores que marcar | marcar el plan elegido como «Recomendado» |
|
|
129
|
-
| `size="xsmall"` |
|
|
129
|
+
| `size="xsmall"` | es chico (D16, 05-10-2026) | nunca: cambiar el estado de una fila va con un select `medium` |
|
|
130
130
|
| `size="xlarge"` | queda más alto que el botón del footer | un select solo, como acción principal de la pantalla |
|
|
131
131
|
|
|
132
132
|
## API
|
|
@@ -31,8 +31,8 @@ Regla corta: **navegación del rol → sidebar · secciones de una pantalla →
|
|
|
31
31
|
> **La guía del DS no tiene página del sidebar.** El componente sale del Figma de SUI (Sidebar
|
|
32
32
|
> [Navigation], node 3802:11759) y el cajón de mobile no existe en ese Figma: se portó del layout
|
|
33
33
|
> del super admin. Lo de abajo es **práctica de la app** (los 4 usos están homologados desde el
|
|
34
|
-
> 25-07-2026) o **propuesta, falta aprobación**; lo marcado «canon» sale de `docs/CANON-SUI.md
|
|
35
|
-
>
|
|
34
|
+
> 25-07-2026) o **propuesta, falta aprobación**; lo marcado «canon» sale de `docs/CANON-SUI.md`,
|
|
35
|
+
> de `master-pedidos/CLAUDE.md` o de la aprobación del dueño del 05-10-2026.
|
|
36
36
|
>
|
|
37
37
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **4 sidebars**, sin contar vitrinas
|
|
38
38
|
> (`master-preview` tiene el quinto).
|
|
@@ -56,12 +56,12 @@ Regla corta: **navegación del rol → sidebar · secciones de una pantalla →
|
|
|
56
56
|
|
|
57
57
|
| prop | cuándo | fuente |
|
|
58
58
|
|---|---|---|
|
|
59
|
-
| `icon` | Siempre, RemixIcon `-line`. Sin ícono, el modo colapsado queda vacío. |
|
|
59
|
+
| `icon` | Siempre, RemixIcon `-line`. Sin ícono, el modo colapsado queda vacío. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
60
60
|
| `route` | Navegación normal (usa `routerLink`). | práctica de la app |
|
|
61
61
|
| sin `route` | Acción, no navegación (abrir Configuración, colapsar): `action` o solo `value`, y se escucha `(itemClicked)`. | práctica de la app |
|
|
62
|
-
| `badge` | Un contador que pide acción: notificaciones sin leer, con tope «99+» (`components/sidebar/sidebar.ts:129`). Nunca un «NEW» decorativo. | práctica de la app
|
|
63
|
-
| `variant: 'danger'` | Solo «Cerrar sesión» o salidas destructivas. |
|
|
64
|
-
| `shortcut`, `colorDot` | No usar (ver «No usar»). |
|
|
62
|
+
| `badge` | Un contador que pide acción: notificaciones sin leer, con tope «99+» (`components/sidebar/sidebar.ts:129`). Nunca un «NEW» decorativo. | práctica de la app · el «nunca NEW»: canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
63
|
+
| `variant: 'danger'` | Solo «Cerrar sesión» o salidas destructivas. | «Cerrar sesión» en rojo: canon (decisión del dueño 04-10-2026, salida destructiva en `color error` aunque sea un link; `danger` pinta `--sui-state-error-base`) · el «solo» (ningún otro item en rojo): canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
64
|
+
| `shortcut`, `colorDot` | No usar (ver «No usar»). | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
65
65
|
|
|
66
66
|
## Tamaño en mobile y en web
|
|
67
67
|
|
|
@@ -78,7 +78,7 @@ El sidebar **no tiene `size`**. El ancho lo decide el viewport:
|
|
|
78
78
|
|---|---|---|---|
|
|
79
79
|
| navegación del rol | cajón `drawer`, cerrado por defecto | columna fija de 272 | práctica de la app (4 de 4) |
|
|
80
80
|
| colapsar | nunca (`!bp.isMobile()`) | opcional, a pedido de la persona | práctica de la app |
|
|
81
|
-
| `sheet` | no usar (0 usos) | — |
|
|
81
|
+
| `sheet` | no usar (0 usos) | — | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
82
82
|
|
|
83
83
|
**Qué pasa en mobile (≤ 767 px):** el sidebar sale del flujo y queda `position: fixed` fuera de la
|
|
84
84
|
pantalla. Lo abre la acción `toggle-sidebar` de la **barra inferior** («Más»), que el layout
|
|
@@ -38,19 +38,19 @@ Regla corta: **escala con tope y la posición importa → slider · número exac
|
|
|
38
38
|
| type | cuándo | fuente |
|
|
39
39
|
|---|---|---|
|
|
40
40
|
| `single` (default) | Un valor: radio de cobertura, porcentaje. | según la guía del DS |
|
|
41
|
-
| `range` | Un mínimo y un máximo en la misma escala: rango de precios de un filtro. Una sola barra con dos manijas, nunca dos sliders. | según la guía del DS (existe); el «cuándo
|
|
41
|
+
| `range` | Un mínimo y un máximo en la misma escala: rango de precios de un filtro. Una sola barra con dos manijas, nunca dos sliders. | según la guía del DS (existe); el «cuándo», canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
42
42
|
|
|
43
43
|
### Las piezas
|
|
44
44
|
|
|
45
45
|
| prop | cuándo | fuente |
|
|
46
46
|
|---|---|---|
|
|
47
|
-
| `label` | Siempre que el slider no esté dentro de un campo que ya lo titula. Sin `label` desaparece toda la fila de arriba, `amount` incluido. |
|
|
48
|
-
| `amount` | El valor con su unidad, a la derecha del label: «12 km», «S/ 10 – S/ 40». Sin `amount` escribe el número pelado. |
|
|
49
|
-
| `sublabel` | Una precisión corta junto al label: «(máximo 15)». |
|
|
50
|
-
| `tooltip` | Solo **sin** `amount`: el número flota sobre la manija mientras se arrastra. Con `amount` repite el valor y sin unidad. | según la guía del DS (existe); el «cuándo
|
|
51
|
-
| `tooltipAlways` | No usar (ver abajo). |
|
|
47
|
+
| `label` | Siempre que el slider no esté dentro de un campo que ya lo titula. Sin `label` desaparece toda la fila de arriba, `amount` incluido. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
48
|
+
| `amount` | El valor con su unidad, a la derecha del label: «12 km», «S/ 10 – S/ 40». Sin `amount` escribe el número pelado. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
49
|
+
| `sublabel` | Una precisión corta junto al label: «(máximo 15)». | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
50
|
+
| `tooltip` | Solo **sin** `amount`: el número flota sobre la manija mientras se arrastra. Con `amount` repite el valor y sin unidad. | según la guía del DS (existe); el «cuándo», canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
51
|
+
| `tooltipAlways` | No usar (ver abajo). | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
52
52
|
| `min` / `max` / `step` | La escala real del negocio (1–15 km, paso 1). | API |
|
|
53
|
-
| `disabled` | La escala existe pero hoy no se puede mover (falta un dato antes). |
|
|
53
|
+
| `disabled` | La escala existe pero hoy no se puede mover (falta un dato antes). | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
54
54
|
| `size` | `medium` (default, Figma): manija 16, riel 6, label 12/16. `large`: manija 24, riel 8, punto interno 8, label 14/20 — para mobile. | `medium`: según la guía del DS · `large`: canon (aprobado por el dueño, 03-10-2026), extensión SUI |
|
|
55
55
|
|
|
56
56
|
**Usos de hoy que rompen la propuesta:**
|
|
@@ -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,7 +94,7 @@ 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%"
|
|
@@ -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,13 @@ 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. Hoy la app corta con
|
|
107
|
+
`BreakpointsService.isMobile()` (≤ 767 px), que todavía no mira el puntero ni los 380 px.
|
|
105
108
|
|
|
106
109
|
| size | alto | texto | ícono (caja) | punto |
|
|
107
110
|
|---|---|---|---|---|
|
|
@@ -117,7 +120,7 @@ escala de badge (12/14/16) se mantiene. No es táctil: no tiene foco ni output.
|
|
|
117
120
|
|
|
118
121
|
| uso | mobile | web | fuente |
|
|
119
122
|
|---|---|---|---|
|
|
120
|
-
| Estado en una fila, card o tabla | `large` (28) | `medium` (24) |
|
|
123
|
+
| 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) |
|
|
121
124
|
| Estado principal de una pantalla de detalle (el pedido que se mira) | `xlarge` (32) | `medium` (24) | propuesta: el tamaño es extensión SUI aprobada (03-10-2026); el «cuándo» falta aprobarlo |
|
|
122
125
|
|
|
123
126
|
```html
|
|
@@ -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
|
|
@@ -175,5 +175,5 @@ type SuiStepperSize = 'small' | 'xsmall' | 'medium'; // medium: extensión SUI
|
|
|
175
175
|
variant="horizontal"
|
|
176
176
|
[steps]="[{ label: 'Datos' }, { label: 'Vehículo' }, { label: 'Listo' }]"
|
|
177
177
|
[currentStep]="1"
|
|
178
|
-
|
|
178
|
+
size="medium" />
|
|
179
179
|
```
|
|
@@ -38,23 +38,23 @@ Regla corta: **local en un listado del cliente → store-card · local en un pan
|
|
|
38
38
|
|
|
39
39
|
| estado | cuándo | fuente |
|
|
40
40
|
|---|---|---|
|
|
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). |
|
|
41
|
+
| `isOpen: true` | Abierto: chip verde «Abierto». | según el código |
|
|
42
|
+
| `isOpen: false` | Cerrado: chip «Cerrado» y la portada en gris; sigue abriendo la carta (se puede mirar). | según el código |
|
|
43
|
+
| `isSuspended: true` | No se puede pedir: «No disponible», toda la tarjeta al 60 % y sin link. | según el código |
|
|
44
|
+
| `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
45
|
|
|
46
46
|
### Las piezas
|
|
47
47
|
|
|
48
48
|
| prop | cuándo | fuente |
|
|
49
49
|
|---|---|---|
|
|
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). |
|
|
50
|
+
| `store` (obligatorio) | Siempre, con `SuiStoreCardData`. | según el código |
|
|
51
|
+
| `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 |
|
|
52
|
+
| `deliveryText = null` | No hay envío que mostrar: la columna desaparece y el distrito deja de cortarse. | según el código |
|
|
53
|
+
| `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 |
|
|
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. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
55
|
+
| `isFavorite` + `(toggleFavorite)` | El corazón lleno o vacío; el padre guarda el favorito. | según el código |
|
|
56
|
+
| `(ratingClicked)` | La nota abre las opiniones y la info del local (`StoreRatingsModalService`). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
57
|
+
| `disableLink` | La tarjeta no navega (una vitrina, una lámina, una vista previa). | según el código |
|
|
58
58
|
|
|
59
59
|
**Usos de hoy que rompen las reglas:** 0. A mirar: la cola de aprobación no pasa
|
|
60
60
|
`deliveryText` (deduce el envío del `deliveryType`).
|
|
@@ -73,16 +73,16 @@ El ancho lo da el contenedor. El `size` cambia **el corazón de favorito**, en l
|
|
|
73
73
|
| uso | mobile | web | fuente |
|
|
74
74
|
|---|---|---|---|
|
|
75
75
|
| 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) | `
|
|
76
|
+
| 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
77
|
| 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
78
|
|
|
79
79
|
```html
|
|
80
|
-
<sui-store-card [store]="local" [size]="bp.isMobile() ? 'large' : '
|
|
80
|
+
<sui-store-card [store]="local" [size]="bp.isMobile() ? 'large' : 'medium'" />
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
`medium` (40)
|
|
83
|
+
`medium` (40) es el de la computadora (D16); la tablet va como el teléfono, porque se toca. **Favoritos no pasa `size`**
|
|
84
84
|
(`pages/customer/favorites/favorites.html`): en el teléfono el corazón queda en 36 hasta que la
|
|
85
|
-
app le pase `[size]="bp.isMobile() ? 'large' : '
|
|
85
|
+
app le pase `[size]="bp.isMobile() ? 'large' : 'medium'"` (cambio de la app, no del DS).
|
|
86
86
|
|
|
87
87
|
## «No usar»: por qué no hoy y cuándo sí
|
|
88
88
|
|
|
@@ -22,7 +22,7 @@ propio título (día de la semana, tarjeta de la oferta).
|
|
|
22
22
|
descripción y el toque en toda la fila.
|
|
23
23
|
- Un valor de formulario que se confirma con «Guardar»: `sui-checkbox`. (Excepción aceptada hoy:
|
|
24
24
|
los formularios de producto y de planes usan switch para «disponible»/«activo» aunque se guarden
|
|
25
|
-
después; es el patrón que la persona reconoce.
|
|
25
|
+
después; es el patrón que la persona reconoce. Canon: aprobado por el dueño, 05-10-2026, bloque B2.)
|
|
26
26
|
- Algo destructivo o que no se deshace: el switch promete que se puede volver atrás al toque.
|
|
27
27
|
- Elegir entre dos modos con nombre: `sui-segmented-control` si se aplica al instante (cuadrícula /
|
|
28
28
|
lista); `sui-radio-card` si se guarda después («Por distancia» / «Precio único» en ajustes).
|
|
@@ -59,7 +59,7 @@ Regla corta: **se aplica ya → switch · se confirma después → checkbox · d
|
|
|
59
59
|
|
|
60
60
|
| caso | regla | fuente |
|
|
61
61
|
|---|---|---|
|
|
62
|
-
| Texto al lado del switch | Dice **qué hace prenderlo** y no cambia con el estado: «Recibir pedidos», no «Sucursal en pausa». El estado ya lo dice el switch (y un badge si hace falta). |
|
|
62
|
+
| Texto al lado del switch | Dice **qué hace prenderlo** y no cambia con el estado: «Recibir pedidos», no «Sucursal en pausa». El estado ya lo dice el switch (y un badge si hace falta). | canon (aprobado por el dueño, 05-10-2026, bloque B4; precedente escrito en `pages/schedule/schedule.html:31`) |
|
|
63
63
|
|
|
64
64
|
**Usos de hoy que rompen las reglas:**
|
|
65
65
|
|
|
@@ -40,22 +40,22 @@ Regla corta: **ajuste con peso, al toque → switch-card · lista de ajustes →
|
|
|
40
40
|
|
|
41
41
|
| type | cuándo | fuente |
|
|
42
42
|
|---|---|---|
|
|
43
|
-
| `left-icon` + ícono proyectado | Lo normal: `<sui-icon sui-switch-card-leading name="…" [size]="20" />`. |
|
|
44
|
-
| `left-icon` + `emoji` | Ver «No usar». |
|
|
45
|
-
| `basic` | El ajuste es EL tema de la pantalla y no necesita ícono («Disponible» en el inicio del repartidor, «Disponibilidad automática»). |
|
|
46
|
-
| `avatar` (`imageUrl`) | Ver «No usar». |
|
|
47
|
-
| `card-provider`, `brand`, `company` (`imageUrl` o proyectado) | Ver «No usar». |
|
|
43
|
+
| `left-icon` + ícono proyectado | Lo normal: `<sui-icon sui-switch-card-leading name="…" [size]="20" />`. | canon (aprobado por el dueño, 05-10-2026, bloque B2) (14 de 16) |
|
|
44
|
+
| `left-icon` + `emoji` | Ver «No usar». | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
45
|
+
| `basic` | El ajuste es EL tema de la pantalla y no necesita ícono («Disponible» en el inicio del repartidor, «Disponibilidad automática»). | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
|
|
46
|
+
| `avatar` (`imageUrl`) | Ver «No usar». | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
47
|
+
| `card-provider`, `brand`, `company` (`imageUrl` o proyectado) | Ver «No usar». | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
48
48
|
|
|
49
49
|
### Las piezas
|
|
50
50
|
|
|
51
51
|
| prop | cuándo | fuente |
|
|
52
52
|
|---|---|---|
|
|
53
|
-
| `label` | Siempre. Qué hace prenderlo, sin cambiar con el estado: «Notificaciones», no «Activadas / Desactivadas». |
|
|
54
|
-
| `description` | La consecuencia o el estado real del permiso: «Push activado — recibes alertas cuando se te asigna un pedido.» |
|
|
55
|
-
| `sublabel` | Precisión corta: «(beta)». |
|
|
53
|
+
| `label` | Siempre. Qué hace prenderlo, sin cambiar con el estado: «Notificaciones», no «Activadas / Desactivadas». | canon (aprobado por el dueño, 05-10-2026, bloque B4) (misma regla que el switch-label) |
|
|
54
|
+
| `description` | La consecuencia o el estado real del permiso: «Push activado — recibes alertas cuando se te asigna un pedido.» | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
55
|
+
| `sublabel` | Precisión corta: «(beta)». | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
56
56
|
| `badge` | Solo novedad. Con string sale azul `light`. | propuesta |
|
|
57
|
-
| `disabled` | Mientras se guarda el cambio, o cuando no aplica (no puedes estar disponible sin saldo). |
|
|
58
|
-
| `checked` + `(checkedChange)` | Siempre los dos: es controlada. |
|
|
57
|
+
| `disabled` | Mientras se guarda el cambio, o cuando no aplica (no puedes estar disponible sin saldo). | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
58
|
+
| `checked` + `(checkedChange)` | Siempre los dos: es controlada. | según el código |
|
|
59
59
|
|
|
60
60
|
### `size` (el interruptor de adentro)
|
|
61
61
|
|
|
@@ -42,7 +42,7 @@ Regla corta: **ajuste con texto → este · ajuste con peso → switch-card · s
|
|
|
42
42
|
|
|
43
43
|
| prop | cuándo | fuente |
|
|
44
44
|
|---|---|---|
|
|
45
|
-
| `label` | Siempre. Qué hace prenderlo, sin cambiar con el estado: «Recibir pedidos», no «Abierto/Cerrado». | según la guía del DS (pieza); la regla de qué dice
|
|
45
|
+
| `label` | Siempre. Qué hace prenderlo, sin cambiar con el estado: «Recibir pedidos», no «Abierto/Cerrado». | según la guía del DS (pieza); la regla de qué dice: canon (aprobado por el dueño, 05-10-2026, bloque B4) (precedente en `pages/schedule/schedule.html:31`) |
|
|
46
46
|
| `description` | Cuando conviene decir la consecuencia: «Los clientes pueden agregarlo al carrito. Apágalo si se te acabó.» Es lo que ya hacen los 5 usos. | según la guía del DS (pieza); el «cuándo» ya es práctica de la app |
|
|
47
47
|
| `sublabel` | Precisión corta entre paréntesis: «(beta)». | según la guía del DS |
|
|
48
48
|
| `badge` | Solo novedad. Con string sale naranja `light`: pasa el objeto. | según la guía del DS (pieza «NEW»); el color es propuesta |
|
|
@@ -39,7 +39,7 @@ secciones → tab menu.**
|
|
|
39
39
|
## Qué variante usar
|
|
40
40
|
|
|
41
41
|
> **La guía del DS no tiene este componente**: es una extensión de SUI (la «cat nav» de las apps de
|
|
42
|
-
> delivery).
|
|
42
|
+
> delivery). Las reglas marcadas canon están aprobadas; lo que sigue en propuesta espera decisión.
|
|
43
43
|
>
|
|
44
44
|
> Uso medido el 04-10-2026 en `master-pedidos/src/app` (sin `master-preview`, `master-prototipos`,
|
|
45
45
|
> `mockup-sheets-*`, `dx/*`, `master-rutina`, `master-medico`, `dev-index`):
|
|
@@ -53,30 +53,30 @@ secciones → tab menu.**
|
|
|
53
53
|
|---|---|---|---|
|
|
54
54
|
| filtro de estado | La lista es la misma; los chips la recortan. «Todos» va primero y es el elegido por defecto. | `pages/envios/envios.html:98` («Todos · Activos · Entregados · Cancelados») · `pages/orders/orders.html:64` | propuesta, falta aprobación |
|
|
55
55
|
| filtro de período | Rango de fechas de un reporte o gráfico **con 5 o más opciones** (los meses). Con 2 a 4 («Hoy · 7 días · 30 días») va `sui-segmented-control`. | `pages/central/central-gastos/central-gastos.html:10` (meses) | canon (dueño, 04-10-2026) |
|
|
56
|
-
| categorías del catálogo | Saltar a una categoría de la carta; con `sticky` y `autoScroll`. | `pages/customer/restaurant-menu/restaurant-menu.html:226` |
|
|
57
|
-
| sugerencias rápidas | **No.** Un motivo frecuente que completa un texto no es una selección: el chip elige el primero solo. Si se usa, el primer chip es el neutro («Otro motivo») y el texto lleva su propio signal. | `pages/super-admin/master-orders/master-orders.html:900` (bien resuelto) |
|
|
56
|
+
| categorías del catálogo | Saltar a una categoría de la carta; con `sticky` y `autoScroll`. | `pages/customer/restaurant-menu/restaurant-menu.html:226` | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
57
|
+
| sugerencias rápidas | **No.** Un motivo frecuente que completa un texto no es una selección: el chip elige el primero solo. Si se usa, el primer chip es el neutro («Otro motivo») y el texto lleva su propio signal. | `pages/super-admin/master-orders/master-orders.html:900` (bien resuelto) | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
58
58
|
|
|
59
59
|
### `sticky`
|
|
60
60
|
|
|
61
61
|
| valor | cuándo | fuente |
|
|
62
62
|
|---|---|---|
|
|
63
|
-
| `false` (default) | Filtros arriba de una lista corta o dentro de un modal o sheet. |
|
|
64
|
-
| `true` | Solo la navegación de categorías de una lista larga que scrollea (la carta). Se pega arriba del contenedor de scroll y, pegado, pinta fondo `bg-weak-50`. |
|
|
63
|
+
| `false` (default) | Filtros arriba de una lista corta o dentro de un modal o sheet. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
64
|
+
| `true` | Solo la navegación de categorías de una lista larga que scrollea (la carta). Se pega arriba del contenedor de scroll y, pegado, pinta fondo `bg-weak-50`. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
65
65
|
|
|
66
66
|
### `autoScroll`
|
|
67
67
|
|
|
68
68
|
| valor | cuándo | fuente |
|
|
69
69
|
|---|---|---|
|
|
70
|
-
| `true` (default) | Siempre: centra el chip elegido cuando cambia `value` (también si lo cambia el scroll de la carta). |
|
|
71
|
-
| `false` | Solo si el `value` cambia muy seguido por código y el movimiento distrae. Hoy ningún caso. |
|
|
70
|
+
| `true` (default) | Siempre: centra el chip elegido cuando cambia `value` (también si lo cambia el scroll de la carta). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
71
|
+
| `false` | Solo si el `value` cambia muy seguido por código y el movimiento distrae. Hoy ningún caso. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
72
72
|
|
|
73
73
|
### Ítems (`chips`)
|
|
74
74
|
|
|
75
75
|
| qué | cuándo | fuente |
|
|
76
76
|
|---|---|---|
|
|
77
|
-
| `string[]` | Cuando el texto es el valor (meses, provincias). |
|
|
78
|
-
| `{ value, label }` | Cuando el valor es un id o una clave en inglés (`'active'` → «Activos»). |
|
|
79
|
-
| `count` | El número de ítems detrás del filtro, cuando ayuda a decidir («Recargas 3»). `0` o `undefined` no se dibuja. **El número va en `count`, no dentro del `label`.** |
|
|
77
|
+
| `string[]` | Cuando el texto es el valor (meses, provincias). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
78
|
+
| `{ value, label }` | Cuando el valor es un id o una clave en inglés (`'active'` → «Activos»). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
79
|
+
| `count` | El número de ítems detrás del filtro, cuando ayuda a decidir («Recargas 3»). `0` o `undefined` no se dibuja. **El número va en `count`, no dentro del `label`.** | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
80
80
|
| texto | Una o dos palabras, sentence case, sin punto. Plural si filtra («Activos»). | canon (copy de `docs/CANON-SUI.md`) |
|
|
81
81
|
|
|
82
82
|
**Usos de hoy que rompen las reglas:**
|
|
@@ -103,8 +103,9 @@ secciones → tab menu.**
|
|
|
103
103
|
las franjas de abajo y se parece más a un filtro.
|
|
104
104
|
- **1 con el número dentro del texto:** `pages/notifications/notifications.ts:194`
|
|
105
105
|
(`No leídas (3)` → `count: 3`).
|
|
106
|
-
- **22 sin tamaño por
|
|
107
|
-
entraron el 03-10-2026; los 22 que faltan son casi todos del super admin y de la central.
|
|
106
|
+
- **22 sin tamaño por dispositivo.** Los 20 que ya lo tienen (`bp.isMobile() ? 'large' : 'medium'`)
|
|
107
|
+
entraron el 03-10-2026; los 22 que faltan son casi todos del super admin y de la central. Con D16
|
|
108
|
+
(05-10-2026) el par es `bp.isMobile() ? 'xlarge' : 'medium'`, y ningún chip queda en `small`.
|
|
108
109
|
|
|
109
110
|
## Tamaño en mobile y en web
|
|
110
111
|
|
|
@@ -120,12 +121,13 @@ En large y xlarge el texto sube a 16 px (regla del 03-10-2026): el chip va en 16
|
|
|
120
121
|
contador mide 11 px en `small` y `medium`, y 12 px (pastilla de 20) en `large` y `xlarge`.
|
|
121
122
|
|
|
122
123
|
**Área táctil: 44 px en `xlarge`**, el piso del teléfono (canon del dueño, 04-10-2026: piso táctil
|
|
123
|
-
44 en el teléfono). `large` (40) queda para pantallas que ya lo usan
|
|
124
|
+
44 en el teléfono). `large` (40) queda para pantallas que ya lo usan; la tablet va como el celular, porque se
|
|
125
|
+
toca (canon, dueño, 05-10-2026, D16).
|
|
124
126
|
|
|
125
127
|
| uso | mobile | web | fuente |
|
|
126
128
|
|---|---|---|---|
|
|
127
|
-
| filtros y categorías | `xlarge` (44) | `medium` | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono
|
|
128
|
-
| filtros
|
|
129
|
+
| filtros y categorías | `xlarge` (44) | `medium` | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · computadora `medium` (la tablet va como el celular): canon (dueño, 05-10-2026, D16) |
|
|
130
|
+
| filtros en la cabecera de una tabla | — | `medium` | canon (dueño, 05-10-2026, D16): nada en `small` |
|
|
129
131
|
|
|
130
132
|
```html
|
|
131
133
|
<sui-tab-chips [chips]="filtros" [(value)]="filtro" [size]="bp.isMobile() ? 'xlarge' : 'medium'" />
|
|
@@ -42,10 +42,10 @@ segmented · secciones → tab menu · filtros → tab-chips.**
|
|
|
42
42
|
| qué | cuándo | fuente |
|
|
43
43
|
|---|---|---|
|
|
44
44
|
| texto | Lo normal: el nombre de la sección, una o dos palabras. | según la guía del DS (ejemplos con texto) |
|
|
45
|
-
| `icon` | Solo si **todas** las pestañas llevan ícono y ayuda a reconocerlas. Nunca en una sola. |
|
|
46
|
-
| `number` | Pendientes **que piden acción** dentro de esa sección («Solicitudes 3»). Es un círculo rojo: no lo uses para totales neutros. |
|
|
47
|
-
| `rightIcon` | No: la flecha dice «te lleva a otra pantalla» y una pestaña no navega. |
|
|
48
|
-
| `disabled` | Una sección que existe pero no aplica todavía (depende del plan). |
|
|
45
|
+
| `icon` | Solo si **todas** las pestañas llevan ícono y ayuda a reconocerlas. Nunca en una sola. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
46
|
+
| `number` | Pendientes **que piden acción** dentro de esa sección («Solicitudes 3»). Es un círculo rojo: no lo uses para totales neutros. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
47
|
+
| `rightIcon` | No: la flecha dice «te lleva a otra pantalla» y una pestaña no navega. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
48
|
+
| `disabled` | Una sección que existe pero no aplica todavía (depende del plan). | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
49
49
|
|
|
50
50
|
### `size`
|
|
51
51
|
|
|
@@ -61,7 +61,7 @@ desde el 03-10-2026 (`sui-tab-menu-horizontal.scss`, bloque «Tamaños»). Cuán
|
|
|
61
61
|
- **A discutir, 1 sin tamaño por plataforma:** el único uso
|
|
62
62
|
(`components/store-ratings-modal/store-ratings-modal.html:43`) es del modal del local, que el
|
|
63
63
|
cliente abre en el teléfono, y no pasa `size`: mide 48 px tocables (`medium`). Llega a 44, pero la
|
|
64
|
-
|
|
64
|
+
regla de abajo (canon, 05-10-2026) pide `large` en mobile.
|
|
65
65
|
|
|
66
66
|
## Tamaño en mobile y en web
|
|
67
67
|
|
|
@@ -80,7 +80,7 @@ es solo el texto: el `gap` entre pestañas no responde.
|
|
|
80
80
|
|
|
81
81
|
| uso | mobile | web | fuente |
|
|
82
82
|
|---|---|---|---|
|
|
83
|
-
| 2-3 secciones | `large` (52, texto 16) | `medium` (48) |
|
|
83
|
+
| 2-3 secciones | `large` (52, texto 16) | `medium` (48) | canon (aprobado por el dueño, 05-10-2026, bloque B1); el tamaño es extensión SUI aprobada (03-10-2026) |
|
|
84
84
|
| 4+ secciones | si no entran a 390 px, se salen sin poder deslizarse (las 4 del panel de repartidores, con sus números, ya no entran a 360): va `sui-tab-chips` | el mismo | según el código |
|
|
85
85
|
|
|
86
86
|
```html
|