@ajuarezso/sui-design-system 0.18.10 → 0.20.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/INDEX.md +136 -0
- package/docs/sui-alert/README.md +216 -0
- package/docs/sui-app-store-badge/README.md +137 -0
- package/docs/sui-avatar/README.md +263 -0
- package/docs/sui-avatar-group/README.md +115 -0
- package/docs/sui-badge/README.md +212 -0
- package/docs/sui-brand-logo/README.md +143 -0
- package/docs/sui-button/README.md +192 -0
- package/docs/sui-button-group/README.md +178 -0
- package/docs/sui-button-group-item/README.md +102 -0
- package/docs/sui-checkbox/README.md +147 -0
- package/docs/sui-checkbox-label/README.md +143 -0
- package/docs/sui-circular-progress-bar/README.md +131 -0
- package/docs/sui-color-dot/README.md +112 -0
- package/docs/sui-color-picker/README.md +124 -0
- package/docs/sui-compact-avatar-group/README.md +103 -0
- package/docs/sui-compact-button/README.md +190 -0
- package/docs/sui-content-divider/README.md +124 -0
- package/docs/sui-divider/README.md +102 -0
- package/docs/sui-emoji/README.md +138 -0
- package/docs/sui-fancy-button/README.md +148 -0
- package/docs/sui-file-icon/README.md +103 -0
- package/docs/sui-flag/README.md +99 -0
- package/docs/sui-form-hint/README.md +124 -0
- package/docs/sui-form-label/README.md +148 -0
- package/docs/sui-icon/README.md +135 -0
- package/docs/sui-kbd/README.md +97 -0
- package/docs/sui-key-icon/README.md +125 -0
- package/docs/sui-link-button/README.md +221 -0
- package/docs/sui-logo/README.md +152 -0
- package/docs/sui-payment-icon/README.md +98 -0
- package/docs/sui-progress-bar/README.md +132 -0
- package/docs/sui-progress-bar-label/README.md +143 -0
- package/docs/sui-radio/README.md +134 -0
- package/docs/sui-radio-label/README.md +137 -0
- package/docs/sui-rating/README.md +198 -0
- package/docs/sui-segmented-control/README.md +144 -0
- package/docs/sui-slider/README.md +143 -0
- package/docs/sui-social-button/README.md +158 -0
- package/docs/sui-status-badge/README.md +164 -0
- package/docs/sui-switch/README.md +146 -0
- package/docs/sui-switch-label/README.md +139 -0
- package/docs/sui-tag/README.md +145 -0
- package/fesm2022/ajuarezso-sui-design-system.mjs +207 -52
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +177 -28
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-compact-avatar-group
|
|
3
|
+
selector: sui-compact-avatar-group
|
|
4
|
+
resumen: Varias personas en una píldora baja con el «+N» en texto, para tablas y filas apretadas
|
|
5
|
+
alternativas: [sui-avatar-group (la pila grande, para cards y cabeceras), sui-avatar (una sola persona)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-compact-avatar-group
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Avatar/Compact Avatar Group](https://sui-design-system.web.app/?path=/docs/atoms-avatar-compact-avatar-group--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** cuando hay que mostrar varias personas **en poco alto**: una celda de tabla, una fila
|
|
15
|
+
de lista. Es una píldora blanca con los avatares casi pegados y el «+N» como texto.
|
|
16
|
+
|
|
17
|
+
**No lo uses** para:
|
|
18
|
+
|
|
19
|
+
- Una card o una cabecera con espacio: `sui-avatar-group`.
|
|
20
|
+
- Una sola persona: `sui-avatar`.
|
|
21
|
+
|
|
22
|
+
## Qué variante usar
|
|
23
|
+
|
|
24
|
+
> **La guía del DS dice qué es, sus tamaños y sus dos estilos, no cuándo usar cada uno.** Lo
|
|
25
|
+
> marcado «según la guía del DS» sale de su texto o de su código; el resto es **propuesta,
|
|
26
|
+
> falta aprobación**.
|
|
27
|
+
>
|
|
28
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos directos**. El DS lo usa dentro
|
|
29
|
+
> de `sui-table`.
|
|
30
|
+
|
|
31
|
+
### Lo que sí dice la guía del DS
|
|
32
|
+
|
|
33
|
+
- **Para qué es**: la versión más compacta del avatar group.
|
|
34
|
+
- **Tamaños**: 40, 32 y 24; el default de la guía es 40 (en SUI, `'32'`).
|
|
35
|
+
- **Estilos**: `default` (píldora blanca con sombra) y `stroke` (además, un borde `stroke-soft-200`).
|
|
36
|
+
|
|
37
|
+
### `size`, `appearance`, `max` y `count`
|
|
38
|
+
|
|
39
|
+
| input | valor | cuándo | fuente |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| `size` | `'24'` | Celda de tabla. | propuesta |
|
|
42
|
+
| `size` | `'32'` (default SUI) | Fila de una lista. | propuesta |
|
|
43
|
+
| `size` | `'40'` (default de la guía) | Dentro de una card. | propuesta |
|
|
44
|
+
| `appearance` | `default` | Sobre un fondo gris o de color: la sombra lo separa. | propuesta |
|
|
45
|
+
| `appearance` | `stroke` | Sobre blanco, donde la sombra sola no alcanza a marcar el borde. | propuesta |
|
|
46
|
+
| `max` | `3` (default) | Tres avatares visibles. | propuesta |
|
|
47
|
+
| `count` | — | Solo si el total no está en `items` (vienen 3 caras pero son 12 personas): `count="+9"`. Si no, se calcula solo. | propuesta |
|
|
48
|
+
|
|
49
|
+
Usos de hoy que rompen la regla: **0** (no hay usos).
|
|
50
|
+
|
|
51
|
+
## Tamaño en mobile y en web
|
|
52
|
+
|
|
53
|
+
En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. En las
|
|
54
|
+
pantallas que se usan en los dos (panel del local, super admin) se elige con el servicio de
|
|
55
|
+
breakpoints de la app (`bp`, en `services/breakpoints.service.ts`); en las que solo existen en
|
|
56
|
+
el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propuesta**.
|
|
57
|
+
|
|
58
|
+
| uso | mobile | web |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| fila o celda de tabla | `'32'` | `'24'` |
|
|
61
|
+
| dentro de una card | `'40'` | `'32'` |
|
|
62
|
+
|
|
63
|
+
```html
|
|
64
|
+
<sui-compact-avatar-group [size]="bp.isMobile() ? '32' : '24'" [items]="repartidores" />
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
68
|
+
|
|
69
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| todo el componente (0 usos) | no hay tablas con varias personas por fila | la columna «repartidores» en la tabla de locales del super admin |
|
|
72
|
+
|
|
73
|
+
## API
|
|
74
|
+
|
|
75
|
+
<!-- api:inicio -->
|
|
76
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
77
|
+
|
|
78
|
+
| input | tipo | default |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `size` | `'24' \| '32' \| '40'` | `'32'` |
|
|
81
|
+
| `appearance` | `'default' \| 'stroke'` | `'default'` |
|
|
82
|
+
| `items` | `readonly SuiAvatarGroupItem[]` | `[]` |
|
|
83
|
+
| `max` | `number` | `3` |
|
|
84
|
+
| `count` | `string \| null` | `null` |
|
|
85
|
+
|
|
86
|
+
Outputs: ninguno.
|
|
87
|
+
<!-- api:fin -->
|
|
88
|
+
|
|
89
|
+
`items` usa `SuiAvatarGroupItem` (ver `sui-avatar-group`).
|
|
90
|
+
|
|
91
|
+
## Trampas
|
|
92
|
+
|
|
93
|
+
- **`size` es un string**: `size="32"`, no `[size]="32"` (con número no compila).
|
|
94
|
+
- **El estilo se llama `appearance`**, no `variant` ni `style` (el atributo `style` es del HTML).
|
|
95
|
+
- **`size` no es el de `sui-avatar`**: `'24'` → avatar `sm`, `'32'` → `md`, `'40'` → `lg`.
|
|
96
|
+
- **`count` gana sobre el cálculo**: si lo pasas, se muestra aunque no sobre nadie.
|
|
97
|
+
- Las reglas de foto y color de cada persona son las de `sui-avatar`.
|
|
98
|
+
|
|
99
|
+
## Ejemplo
|
|
100
|
+
|
|
101
|
+
```html
|
|
102
|
+
<sui-compact-avatar-group size="24" appearance="stroke" [items]="repartidoresDelLocal" />
|
|
103
|
+
```
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-compact-button
|
|
3
|
+
selector: sui-compact-button
|
|
4
|
+
resumen: Botón de solo ícono, chico, para cuando falta espacio
|
|
5
|
+
alternativas: [sui-button (acción con texto, o de ícono con onlyIcon en tamaños de 28 a 52), sui-link-button (acción que se lee como texto), sui-topbar-button (ícono de la barra superior)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-compact-button
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Button/Compact Button](https://sui-design-system.web.app/?path=/docs/atoms-button-compact-button--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** para una acción de un solo ícono donde no entra un botón: cerrar en la cabecera de un
|
|
15
|
+
modal o sheet, «más» o «quitar» en una fila, el − / + de una cantidad, las flechas flotantes de un
|
|
16
|
+
carrusel o un mapa.
|
|
17
|
+
|
|
18
|
+
**No lo uses** para:
|
|
19
|
+
|
|
20
|
+
- **Una acción con texto**: `sui-button` o `sui-link-button`.
|
|
21
|
+
- **El ícono de la barra superior**: `sui-topbar-button`.
|
|
22
|
+
- **Un ícono decorativo** que no hace nada: `sui-icon`.
|
|
23
|
+
|
|
24
|
+
## Qué variante usar
|
|
25
|
+
|
|
26
|
+
> **La guía del DS no dice cuándo usar cada estilo.** Su página muestra los cuatro estilos, los
|
|
27
|
+
> dos tamaños, el radio completo y el deshabilitado, sin do/don't. Las reglas de abajo son
|
|
28
|
+
> **canon (aprobado por el dueño, 03-10-2026)** salvo donde dice otra fuente.
|
|
29
|
+
>
|
|
30
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: 11 compact-buttons en 7 archivos, sin
|
|
31
|
+
> contar prototipos ni vitrinas (`master-preview`, `master-prototipos`, `mockup-sheets-*`,
|
|
32
|
+
> `dx/*`, `master-rutina`, `master-medico`, `dev-index`). Estilos: 6 `ghost`, 3 `stroke` (uno
|
|
33
|
+
> por error, ver abajo), 2 `white`, 0 `modifiable`. Tamaños: 6 `large`, 3 `medium`, 2 `xlarge`.
|
|
34
|
+
> 4 con `fullRadius`, 1 con `disabled`.
|
|
35
|
+
|
|
36
|
+
### Lo que sí dice la guía del DS
|
|
37
|
+
|
|
38
|
+
- **Para qué es**: botones para cuando el espacio es limitado.
|
|
39
|
+
- **Defaults**: `stroke` + `large` + sin `fullRadius`. Igual que SUI.
|
|
40
|
+
- **Tamaños**: solo `large` (24 px, ícono 20) y `medium` (20 px, ícono 18; en SUI, 16). `xlarge`
|
|
41
|
+
y los tres más grandes son extensión de SUI.
|
|
42
|
+
- **`modifiable` no tiene color, fondo ni hover propios**: hereda el color del contenedor.
|
|
43
|
+
- **Deshabilitado**: sin borde, sin fondo y sin sombra; el ícono en `text-disabled-300`.
|
|
44
|
+
|
|
45
|
+
### `variantStyle`
|
|
46
|
+
|
|
47
|
+
| variantStyle | cuándo | ejemplo real de la app | fuente |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
| `stroke` (default) | Acciones de una fila o una card: «más», «editar», el − / + de una cantidad. | `components/product-detail-view/product-detail-view.html:169` (− / +) | canon (aprobado por el dueño, 03-10-2026) |
|
|
50
|
+
| `ghost` | Cerrar en la cabecera de un modal o un sheet. | `components/store-ratings-modal/store-ratings-modal.html:33` («Cerrar») | canon (aprobado por el dueño, 03-10-2026) |
|
|
51
|
+
| `white` | Flotante sobre un mapa o una foto, siempre con `fullRadius`. | `pages/customer/store-browser/arrastre-carrusel.ts:102` (flechas del carrusel) | canon (aprobado por el dueño, 03-10-2026) |
|
|
52
|
+
| `modifiable` | Hereda el color del contenedor: el cerrar del alert (ya lo trae `sui-alert` adentro). | (sin uso directo; vive dentro de `sui-alert`) | hereda el color: según la guía del DS · dónde va: canon (aprobado por el dueño, 03-10-2026) |
|
|
53
|
+
|
|
54
|
+
**Usos de hoy que rompen la regla:**
|
|
55
|
+
|
|
56
|
+
- **1 bug: `variant="ghost"` en vez de `variantStyle`.** `pages/super-admin/master-settings/master-settings.html:647`
|
|
57
|
+
(«Quitar este nivel»). `variant` no es un input del compact-button: el atributo se ignora y el
|
|
58
|
+
botón sale `stroke`. Pasar a `variantStyle="ghost"`.
|
|
59
|
+
- **A discutir — 5 `ghost` para acciones de fila** (quitar, más):
|
|
60
|
+
`components/option-sections-manager/option-sections-manager.html:39` y `:146`,
|
|
61
|
+
`components/add-product-modal/add-product-modal.html:306`,
|
|
62
|
+
`pages/super-admin/master-settings/master-settings.html:111` y `:647`. Este canon dice `stroke`
|
|
63
|
+
para filas y `ghost` solo para cerrar; el canon de `sui-button` permite `ghost` para editar y
|
|
64
|
+
borrar en filas. Los dos canon se contradicen: hay que elegir uno.
|
|
65
|
+
|
|
66
|
+
### `size`
|
|
67
|
+
|
|
68
|
+
| size | px (ícono) | cuándo | fuente |
|
|
69
|
+
|---|---|---|---|
|
|
70
|
+
| `medium` | 20 (16) | Solo desktop, filas muy densas (tablas). | escala: según la guía del DS · cuándo: canon (aprobado por el dueño, 03-10-2026) |
|
|
71
|
+
| `large` (default) | 24 (20) | Desktop, dentro de cards. | default según la guía del DS · cuándo: canon (aprobado por el dueño, 03-10-2026) |
|
|
72
|
+
| `xlarge` | 28 (24) | Cabeceras de modal en desktop; flechas de carrusel que solo se ven con mouse. | extensión de SUI · canon (aprobado por el dueño, 03-10-2026) |
|
|
73
|
+
| `2xlarge` | 32 (20) | **El mínimo en mobile**: filas y cards que se tocan con el dedo. | extensión de SUI · canon (aprobado por el dueño, 03-10-2026). **En el repo del DS, todavía no en el paquete publicado 0.19.0** |
|
|
74
|
+
| `3xlarge` | 36 (20) | Cerrar en modales y sheets en mobile. | ídem: canon; en el repo, no en 0.19.0 |
|
|
75
|
+
| `4xlarge` | 40 (24) | Flotantes sobre el mapa (volver, centrar). | ídem: canon; en el repo, no en 0.19.0 |
|
|
76
|
+
|
|
77
|
+
**Usos de hoy que rompen la regla** (pantallas del cliente, que se usan en el teléfono, con
|
|
78
|
+
botones de 20 o 24 px):
|
|
79
|
+
|
|
80
|
+
- **4 casos**: `components/product-detail-view/product-detail-view.html:169` y `:173` (− / + en
|
|
81
|
+
`large` → `2xlarge`), `components/store-ratings-modal/store-ratings-modal.html:33` (cerrar en
|
|
82
|
+
`medium` → `3xlarge`), `pages/customer/order-history/order-history.html:383` (flecha de la fila
|
|
83
|
+
en `large` → `2xlarge`).
|
|
84
|
+
- **La migración está bloqueada** hasta que se publique la versión del DS con `2xlarge`,
|
|
85
|
+
`3xlarge` y `4xlarge`.
|
|
86
|
+
|
|
87
|
+
### `fullRadius`
|
|
88
|
+
|
|
89
|
+
| fullRadius | cuándo | fuente |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| `false` (default, radio 6) | Lo normal: filas, cards, cabeceras. | default según la guía del DS · cuándo: propuesta |
|
|
92
|
+
| `true` (círculo) | Flotante (`white`) sobre mapa o foto. | canon (aprobado por el dueño, 03-10-2026) |
|
|
93
|
+
| `true` (círculo) | El − / + de una cantidad, para que se lea como un stepper. | propuesta (es lo que ya hace `product-detail-view`) |
|
|
94
|
+
|
|
95
|
+
### `disabled`, `href`, `ariaLabel`
|
|
96
|
+
|
|
97
|
+
| prop | cuándo | fuente |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `disabled` | Se llegó al límite: no hay más stock para sumar, no se puede quitar el último. | cómo se ve: según la guía del DS · cuándo: propuesta |
|
|
100
|
+
| `href` | Solo si el botón navega sin otra acción (volver a una ruta). Pinta un `<a>`; `rel` ya viene en `'noopener noreferrer'`. | propuesta |
|
|
101
|
+
| `ariaLabel` (requerido) | Lo que hace, no lo que muestra: «Cerrar», «Quitar opción», «Agregar uno»; nunca «X» ni «Ícono». | propuesta (el input es obligatorio) |
|
|
102
|
+
| `type="submit"` | Solo dentro de un `<form>`. | propuesta |
|
|
103
|
+
|
|
104
|
+
## Tamaño en mobile y en web
|
|
105
|
+
|
|
106
|
+
En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más**. En web, con mouse,
|
|
107
|
+
va un tamaño más chico. La app ya lo resuelve con `BreakpointsService`
|
|
108
|
+
(`src/app/services/breakpoints.service.ts`, mobile = hasta 767 px):
|
|
109
|
+
`[size]="bp.isMobile() ? 'large' : 'small'"`, 27 usos hoy en `master-pedidos` (16 `large`/`small`,
|
|
110
|
+
9 `large`/`medium`, 2 `medium`/`xsmall`). Regla del dueño, 03-10-2026.
|
|
111
|
+
|
|
112
|
+
| uso | mobile | web | fuente |
|
|
113
|
+
|---|---|---|---|
|
|
114
|
+
| acciones de fila o card (más, quitar, − / +) | `2xlarge` (32) | `large` (24); `medium` (20) en tablas densas | canon (aprobado por el dueño, 03-10-2026) |
|
|
115
|
+
| cerrar en la cabecera de un modal o sheet | `3xlarge` (36) | `xlarge` (28) | canon (aprobado por el dueño, 03-10-2026) |
|
|
116
|
+
| flotante sobre el mapa o una foto | `4xlarge` (40) | `xlarge` (28) | canon (aprobado por el dueño, 03-10-2026) |
|
|
117
|
+
|
|
118
|
+
```html
|
|
119
|
+
<sui-compact-button icon="close-line" variantStyle="ghost" ariaLabel="Cerrar"
|
|
120
|
+
[size]="bp.isMobile() ? '3xlarge' : 'xlarge'" (clicked)="cerrar()" />
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**`2xlarge`, `3xlarge` y `4xlarge` están en el repo del DS y todavía no en el paquete publicado
|
|
124
|
+
(0.19.0).** Hasta publicarlos, el patrón de arriba no compila. Aun en `4xlarge` (40) el botón queda
|
|
125
|
+
por debajo de 44: deja 4 px de aire alrededor (gap o padding del contenedor) para que el dedo no
|
|
126
|
+
toque el vecino. `medium` y `large` no van en mobile: hoy hay 4 en pantallas del cliente (ver
|
|
127
|
+
«`size`» arriba).
|
|
128
|
+
|
|
129
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
130
|
+
|
|
131
|
+
Ningún valor del compact-button está en «no usar»: los cuatro estilos y los seis tamaños tienen
|
|
132
|
+
un caso. `modifiable` no tiene un uso directo hoy porque el único lugar donde va (el cerrar del
|
|
133
|
+
alert) ya lo trae `sui-alert` adentro.
|
|
134
|
+
|
|
135
|
+
## API
|
|
136
|
+
|
|
137
|
+
<!-- api:inicio -->
|
|
138
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
139
|
+
|
|
140
|
+
| input | tipo | default |
|
|
141
|
+
|---|---|---|
|
|
142
|
+
| `icon` | `string` | — (requerido) |
|
|
143
|
+
| `variantStyle` | `'stroke' \| 'ghost' \| 'modifiable' \| 'white'` | `'stroke'` |
|
|
144
|
+
| `size` | `'medium' \| 'large' \| 'xlarge' \| '2xlarge' \| '3xlarge' \| '4xlarge'` | `'large'` |
|
|
145
|
+
| `fullRadius` | `boolean` | `false` |
|
|
146
|
+
| `disabled` | `boolean` | `false` |
|
|
147
|
+
| `href` | `string \| null` | `null` |
|
|
148
|
+
| `target` | `string \| null` | `null` |
|
|
149
|
+
| `rel` | `string \| null` | `'noopener noreferrer'` |
|
|
150
|
+
| `type` | `'button' \| 'submit' \| 'reset'` | `'button'` |
|
|
151
|
+
| `ariaLabel` | `string` | — (requerido) |
|
|
152
|
+
|
|
153
|
+
| output | payload |
|
|
154
|
+
|---|---|
|
|
155
|
+
| `clicked` | `MouseEvent` |
|
|
156
|
+
<!-- api:fin -->
|
|
157
|
+
|
|
158
|
+
El clic se escucha con `(clicked)`. `icon` recibe el nombre RemixIcon, sin el prefijo `ri-`.
|
|
159
|
+
|
|
160
|
+
## Trampas
|
|
161
|
+
|
|
162
|
+
- **El estilo se llama `variantStyle`**, no `variant`. `variant="ghost"` no da error de
|
|
163
|
+
compilación: se ignora y sale `stroke` (pasó en `master-settings.html:647`).
|
|
164
|
+
- **`icon` y `ariaLabel` son obligatorios**: sin `ariaLabel` no compila.
|
|
165
|
+
- **El output es `(clicked)`**. `(click)` sobre el host también llega porque el clic burbujea; hoy 6
|
|
166
|
+
usos lo escuchan así (`product-detail-view.html:169` y `:173`, `master-settings.html:647`,
|
|
167
|
+
`arrastre-carrusel.ts:102` y `:104`, `order-history.html:383`). Usa `(clicked)`, que ya respeta
|
|
168
|
+
`disabled`.
|
|
169
|
+
- **El paquete publicado (0.19.0) solo trae `medium`, `large` y `xlarge`.** Pasar `2xlarge` con un
|
|
170
|
+
cast compila, pero el botón sale sin tamaño y con ícono de 16: no lo hagas hasta que se publique.
|
|
171
|
+
- En `medium` el ícono mide 16, no los 18 de la guía.
|
|
172
|
+
- `modifiable` en hover pinta blanco al 16 %: pensado para fondos oscuros o de color. Sobre blanco
|
|
173
|
+
casi no se nota. Se ajusta con `--sui-compact-button-hover-bg` y `--sui-compact-button-active-bg`.
|
|
174
|
+
- Al presionar, `stroke`, `ghost` y `white` se ponen oscuros (`bg-surface-800`) con el ícono
|
|
175
|
+
blanco: es el estado activo del Figma, no un error.
|
|
176
|
+
- Ya trae el arreglo de iOS para el `:active` pegado: no lo agregues.
|
|
177
|
+
|
|
178
|
+
## Ejemplo
|
|
179
|
+
|
|
180
|
+
```html
|
|
181
|
+
<!-- Cerrar en la cabecera de un sheet, en mobile -->
|
|
182
|
+
<sui-compact-button icon="close-line" variantStyle="ghost" size="xlarge" ariaLabel="Cerrar" (clicked)="cerrar()" />
|
|
183
|
+
|
|
184
|
+
<!-- Acción de una fila en desktop -->
|
|
185
|
+
<sui-compact-button icon="more-2-line" ariaLabel="Opciones de la sección" (clicked)="abrirMenu()" />
|
|
186
|
+
|
|
187
|
+
<!-- Flotante sobre el mapa -->
|
|
188
|
+
<sui-compact-button icon="arrow-left-line" variantStyle="white" [fullRadius]="true" size="xlarge"
|
|
189
|
+
ariaLabel="Volver" (clicked)="volver()" />
|
|
190
|
+
```
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-content-divider
|
|
3
|
+
selector: sui-content-divider
|
|
4
|
+
resumen: Línea con algo encima: el «o» entre dos opciones, la cabecera de un grupo o un botón entre bloques
|
|
5
|
+
alternativas: [sui-divider (la línea sola, horizontal o vertical)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-content-divider
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Divider/Content Divider](https://sui-design-system.web.app/?path=/docs/atoms-divider-content-divider--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** cuando la separación **dice algo**:
|
|
15
|
+
|
|
16
|
+
- El «o» entre dos formas de hacer lo mismo (entrar con Google **o** con el correo).
|
|
17
|
+
- La cabecera de un grupo dentro de una lista o un modal («Con pocos pedidos», «Ayer»).
|
|
18
|
+
- Un botón entre dos bloques (agregar algo ahí, ver el resto).
|
|
19
|
+
|
|
20
|
+
**No lo uses** para una línea sola: eso es `sui-divider`, que pesa menos y tiene vertical.
|
|
21
|
+
|
|
22
|
+
## Qué variante usar
|
|
23
|
+
|
|
24
|
+
> **En la guía del DS este componente se llama «Divider»** y trae: línea (default), línea con
|
|
25
|
+
> espacio, línea con texto («OR»), solo texto, texto con fondo («a menudo va en modales») y
|
|
26
|
+
> contenido al centro. Los cuatro tipos con botones vienen del Figma del DS, no de la guía. Lo
|
|
27
|
+
> marcado «según la guía del DS» sale de su texto o de sus ejemplos; el resto es **propuesta,
|
|
28
|
+
> falta aprobación**.
|
|
29
|
+
>
|
|
30
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **1 content-divider**
|
|
31
|
+
> (`pages/super-admin/master-drivers/master-drivers.html:190`, `solid-text` «Con pocos
|
|
32
|
+
> pedidos»), sin contar prototipos ni vitrinas (`master-preview`, `master-prototipos`,
|
|
33
|
+
> `mockup-sheets-*`, `dx/*`, `_guia-*`, `master-rutina`, `master-medico`, `master-ejercicios`,
|
|
34
|
+
> `dev-index`).
|
|
35
|
+
|
|
36
|
+
| type | cuándo | ejemplo | fuente |
|
|
37
|
+
|---|---|---|---|
|
|
38
|
+
| `text-line` | El «o» entre dos formas de hacer lo mismo. | `text="o"` entre «Continuar con Google» y el formulario de correo | según la guía del DS («OR») |
|
|
39
|
+
| `solid-text` | Cabecera de un grupo dentro de una lista o un modal, con fondo. | «Con pocos pedidos» (`master-drivers.html:190`) | según la guía del DS («a menudo en modales») |
|
|
40
|
+
| `text` | Cabecera de grupo sin fondo, en una lista partida por fecha o por tipo. | «Ayer», «Esta semana» | según la guía del DS (existe) · propuesta (cuándo) |
|
|
41
|
+
| `line` (default) | **No usar** (ver abajo). | — | según la guía del DS (default) |
|
|
42
|
+
| `line-spacing` | **No usar** (ver abajo). | — | según la guía del DS |
|
|
43
|
+
| `icon-button` | **No usar** hoy (ver abajo). | `icon="add-line"` | propuesta, falta aprobación |
|
|
44
|
+
| `text-button` | **No usar** hoy (ver abajo). | «Ver 12 más» | propuesta, falta aprobación |
|
|
45
|
+
| `icon-button-group` | **No usar** hoy (ver abajo). | Subir · agregar · bajar | propuesta, falta aprobación |
|
|
46
|
+
| `text-button-group` | **No usar** hoy (ver abajo). | «Producto» · «Sección» | propuesta, falta aprobación |
|
|
47
|
+
|
|
48
|
+
| propiedad | regla | fuente |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `text` | Se escribe en sentence case («o», «Con pocos pedidos»): el componente lo pasa a MAYÚSCULAS. | propuesta, falta aprobación |
|
|
51
|
+
| `icon` | Solo en `icon-button`. Nombre Remix sin `ri-`. | propuesta, falta aprobación |
|
|
52
|
+
| `ariaLabel` | **Obligatorio en `icon-button`**: sin él el lector dice «Acción». | propuesta, falta aprobación |
|
|
53
|
+
| `items` | Solo en los `-group`: de 2 a 3, cada uno con `ariaLabel` si es ícono. | propuesta, falta aprobación |
|
|
54
|
+
| `disabled` | El botón existe pero hoy no aplica (lista ya completa). | propuesta, falta aprobación |
|
|
55
|
+
|
|
56
|
+
**Corregido el 03-10-2026:** los 2 «o» que estaban hechos a mano (login y registro) ya son `type="text-line"`.
|
|
57
|
+
|
|
58
|
+
## No usar: por qué no hoy y cuándo sí
|
|
59
|
+
|
|
60
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| `line` y `line-spacing` | `sui-divider` hace lo mismo, pesa menos y tiene vertical; el espacio lo pone el `gap`. | Ninguno. |
|
|
63
|
+
| `icon-button` | No hay editores donde se inserte algo entre dos bloques. | «Agregar opción aquí» entre dos opciones en el editor de opciones del producto. |
|
|
64
|
+
| `text-button` | Ninguna pantalla de hoy corta una lista con un botón para ver el resto. | «Ver 12 más» al final de una lista cortada (reseñas, historial). |
|
|
65
|
+
| `icon-button-group` / `text-button-group` | No hay editores con bloques que se mueven o se insertan. | Mover, agregar o elegir qué insertar entre secciones de la carta. |
|
|
66
|
+
|
|
67
|
+
## Tamaño en mobile y en web
|
|
68
|
+
|
|
69
|
+
Criterio de la app: **en mobile se lee y se toca con el dedo, así que va más grande; en web
|
|
70
|
+
(desktop), más chico.** Mobile es `≤ 767 px`, el mismo corte de `BreakpointsService.isMobile()`
|
|
71
|
+
en master-pedidos. Fuente: canon del dueño (03-10-2026), el mismo patrón que ya usan 27 controles
|
|
72
|
+
de la app.
|
|
73
|
+
|
|
74
|
+
| uso | mobile | web | fuente |
|
|
75
|
+
|---|---|---|---|
|
|
76
|
+
| Cualquiera | tamaño único | tamaño único | lo que hay en el DS |
|
|
77
|
+
|
|
78
|
+
**No tiene tamaños**: el texto mide 11–12 px y los botones 32 px en las dos plataformas. En mobile
|
|
79
|
+
los botones (`icon-button`, `text-button`, grupos) quedan debajo de los 44 px del dedo; es otra
|
|
80
|
+
razón para no usarlos hoy. Si un flujo nuevo los necesita en mobile, se pide al DS un tamaño grande.
|
|
81
|
+
|
|
82
|
+
## API
|
|
83
|
+
|
|
84
|
+
<!-- api:inicio -->
|
|
85
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
86
|
+
|
|
87
|
+
| input | tipo | default |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| `type` | `'line' \| 'line-spacing' \| 'text-line' \| 'text' \| 'solid-text' \| 'icon-button' \| 'icon-button-group' \| 'text-button' \| 'text-button-group'` | `'line'` |
|
|
90
|
+
| `text` | `string` | `''` |
|
|
91
|
+
| `icon` | `string \| null` | `null` |
|
|
92
|
+
| `ariaLabel` | `string \| null` | `null` |
|
|
93
|
+
| `disabled` | `boolean` | `false` |
|
|
94
|
+
| `items` | `readonly SuiContentDividerItem[]` | `[]` |
|
|
95
|
+
|
|
96
|
+
| output | payload |
|
|
97
|
+
|---|---|
|
|
98
|
+
| `buttonClick` | `MouseEvent` |
|
|
99
|
+
| `itemClick` | `{ item: SuiContentDividerItem; index: number; event: MouseEvent }` |
|
|
100
|
+
<!-- api:fin -->
|
|
101
|
+
|
|
102
|
+
Outputs: `(buttonClick)` en `icon-button` y `text-button`; `(itemClick)` con
|
|
103
|
+
`{ item, index, event }` en los `-group`.
|
|
104
|
+
|
|
105
|
+
## Trampas
|
|
106
|
+
|
|
107
|
+
- **Todo el texto sale en MAYÚSCULAS** por CSS: escribirlo normal.
|
|
108
|
+
- **`text` y `solid-text` alinean a la izquierda**, no al centro (así está en el Figma).
|
|
109
|
+
- `text-line` usa 11 px; `text` y `solid-text`, 12 px.
|
|
110
|
+
- Sin `ariaLabel`, el `icon-button` se anuncia como «Acción» y los ítems de grupo como
|
|
111
|
+
«Acción 0», «Acción 1».
|
|
112
|
+
- `line` y `line-spacing` existen, pero la línea sola es `sui-divider`.
|
|
113
|
+
|
|
114
|
+
## Ejemplo
|
|
115
|
+
|
|
116
|
+
```html
|
|
117
|
+
<!-- Login: Google o correo -->
|
|
118
|
+
<sui-social-button brand="google" label="Continuar con Google" />
|
|
119
|
+
<sui-content-divider type="text-line" text="o" />
|
|
120
|
+
<form>…</form>
|
|
121
|
+
|
|
122
|
+
<!-- Cabecera de grupo en una lista -->
|
|
123
|
+
<sui-content-divider type="solid-text" text="Con pocos pedidos" />
|
|
124
|
+
```
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-divider
|
|
3
|
+
selector: sui-divider
|
|
4
|
+
resumen: Línea de 1 px que separa bloques (horizontal) o datos en una fila (vertical)
|
|
5
|
+
alternativas: [sui-content-divider (línea con texto o botones encima, o el «o» entre dos opciones)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-divider
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Divider/Divider](https://sui-design-system.web.app/?path=/docs/atoms-divider-divider--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** para separar con una línea:
|
|
15
|
+
|
|
16
|
+
- **horizontal**: bloques dentro de una card, filas de una lista, secciones de un formulario, el
|
|
17
|
+
subtotal del total.
|
|
18
|
+
- **vertical**: datos en una misma fila («4,7 | 25–35 min | Envío S/ 3.00»).
|
|
19
|
+
|
|
20
|
+
**No lo uses** para:
|
|
21
|
+
|
|
22
|
+
- Una línea con texto o botones encima (el «o» del login, la cabecera de un grupo):
|
|
23
|
+
`sui-content-divider`.
|
|
24
|
+
- Separar cosas que ya separa el espacio. Si el `gap` alcanza, la línea sobra.
|
|
25
|
+
- Dos acciones en texto: el canon del alert es el punto medio «·», no una línea.
|
|
26
|
+
|
|
27
|
+
**Toda línea de separación es `<sui-divider>`**, no un `<div>` con `height: 1px` y
|
|
28
|
+
`background: var(--sui-stroke-soft-200)`.
|
|
29
|
+
|
|
30
|
+
## Qué variante usar
|
|
31
|
+
|
|
32
|
+
> **La guía del DS llama «Divider» a lo que en SUI es `sui-content-divider`** (línea, línea con
|
|
33
|
+
> espacio, línea con texto, texto, texto con fondo y contenido al centro). Su variante «Line»
|
|
34
|
+
> («una línea horizontal simple», la default) es este componente. La guía no trae la vertical ni
|
|
35
|
+
> dice cuándo separar con línea y cuándo con espacio. Lo marcado «según la guía del DS» sale de
|
|
36
|
+
> ahí; el resto es **propuesta, falta aprobación**.
|
|
37
|
+
>
|
|
38
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **13 dividers en 10 pantallas**, todos
|
|
39
|
+
> horizontales, sin contar prototipos ni vitrinas (`master-preview`, `master-prototipos`,
|
|
40
|
+
> `mockup-sheets-*`, `dx/*`, `_guia-*`, `master-rutina`, `master-medico`, `master-ejercicios`,
|
|
41
|
+
> `dev-index`).
|
|
42
|
+
|
|
43
|
+
| orientation | cuándo | ejemplo real | fuente |
|
|
44
|
+
|---|---|---|---|
|
|
45
|
+
| `horizontal` (default) | Separa bloques o filas. El espacio arriba y abajo lo pone el `gap` del padre, no el divider. | `pages/driver/driver-dashboard/driver-dashboard.html:1124` (entre filas, `@if (!last)`) | según la guía del DS («Line») |
|
|
46
|
+
| `vertical` | Separa datos cortos en una sola fila. El padre necesita alto (si no, mide 16 px). | — (sin usos) | propuesta, falta aprobación |
|
|
47
|
+
|
|
48
|
+
**Corregido el 03-10-2026:** las 26 líneas hechas a mano (mi-negocio, checkout, carrito, billetera y movimientos) ya son `sui-divider`. Seis conservan un `margin` propio porque sus vecinos se separan con margen y no con el `gap` del padre; pasarlo al `gap` es un cambio aparte.
|
|
49
|
+
|
|
50
|
+
El «o» del login y del registro también pasó a `sui-content-divider type="text-line"`.
|
|
51
|
+
|
|
52
|
+
## No usar: por qué no hoy y cuándo sí
|
|
53
|
+
|
|
54
|
+
Nada: las dos orientaciones tienen caso. La vertical no tiene usos hoy, pero el caso existe
|
|
55
|
+
(la fila de nota, tiempo y envío de un local).
|
|
56
|
+
|
|
57
|
+
## Tamaño en mobile y en web
|
|
58
|
+
|
|
59
|
+
Criterio de la app: **en mobile se lee y se toca con el dedo, así que va más grande; en web
|
|
60
|
+
(desktop), más chico.** Mobile es `≤ 767 px`, el mismo corte de `BreakpointsService.isMobile()`
|
|
61
|
+
en master-pedidos. Fuente: canon del dueño (03-10-2026), el mismo patrón que ya usan 27 controles
|
|
62
|
+
de la app.
|
|
63
|
+
|
|
64
|
+
**No aplica**: es 1 px en las dos plataformas. Lo que cambia por plataforma es el `gap` del padre,
|
|
65
|
+
que separa los bloques (la regla de spacing de la app: 20/16/12 según el breakpoint).
|
|
66
|
+
|
|
67
|
+
## API
|
|
68
|
+
|
|
69
|
+
<!-- api:inicio -->
|
|
70
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
71
|
+
|
|
72
|
+
| input | tipo | default |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` |
|
|
75
|
+
|
|
76
|
+
Outputs: ninguno.
|
|
77
|
+
<!-- api:fin -->
|
|
78
|
+
|
|
79
|
+
## Trampas
|
|
80
|
+
|
|
81
|
+
- **No tiene margen**: el espacio sale del `gap` del padre. Un divider entre dos bloques sin
|
|
82
|
+
`gap` queda pegado.
|
|
83
|
+
- **El vertical mide `height: 100%`**: dentro de un padre sin alto queda en 16 px. En un flex,
|
|
84
|
+
`align-items: center` + alto en el padre.
|
|
85
|
+
- Es `display: block` (horizontal) e `inline-block` (vertical).
|
|
86
|
+
- Lleva `role="separator"` y `aria-orientation`. Va **entre** filas (`@if (!last)`), no uno por
|
|
87
|
+
fila: el último sobra.
|
|
88
|
+
|
|
89
|
+
## Ejemplo
|
|
90
|
+
|
|
91
|
+
```html
|
|
92
|
+
<!-- Entre filas de una lista -->
|
|
93
|
+
@for (f of filas; track f.id; let last = $last) {
|
|
94
|
+
<app-fila [fila]="f" />
|
|
95
|
+
@if (!last) { <sui-divider /> }
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
<!-- Datos en una fila -->
|
|
99
|
+
<div class="meta">
|
|
100
|
+
<span>4,7</span><sui-divider orientation="vertical" /><span>25–35 min</span>
|
|
101
|
+
</div>
|
|
102
|
+
```
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-emoji
|
|
3
|
+
selector: sui-emoji
|
|
4
|
+
resumen: Un emoji 3D animado (Fluent) para los momentos con emoción: estados vacíos, celebraciones, onboarding
|
|
5
|
+
alternativas: [sui-icon (ícono funcional, monocromo), sui-empty-state (el estado vacío completo, que ya trae su emoji)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-emoji
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Emoji](https://sui-design-system.web.app/?path=/docs/atoms-emoji--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** donde la pantalla tiene que **sentirse**, no solo funcionar: un estado vacío, «¡Pedido
|
|
15
|
+
confirmado!», los pasos de una landing, la barra de calificación.
|
|
16
|
+
|
|
17
|
+
**No lo uses** para:
|
|
18
|
+
|
|
19
|
+
- Un ícono funcional (un botón, una fila, un menú): eso es `sui-icon`. Un emoji no es un ícono.
|
|
20
|
+
- Muchos a la vez animados: cada uno es un APNG de ~1 MB en bucle.
|
|
21
|
+
- Una imagen propia que no es un emoji (la moneda de sol): un `<img>`.
|
|
22
|
+
|
|
23
|
+
## Qué variante usar
|
|
24
|
+
|
|
25
|
+
> **La guía del DS no tiene este componente**: es propio de SUI. Lo marcado «canon» ya es regla
|
|
26
|
+
> del proyecto; el resto es **propuesta, falta aprobación**.
|
|
27
|
+
>
|
|
28
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: 10 emojis en 3 archivos, sin contar
|
|
29
|
+
> prototipos ni vitrinas. El catálogo tiene 59.
|
|
30
|
+
|
|
31
|
+
### Dónde va
|
|
32
|
+
|
|
33
|
+
| caso | cómo | fuente |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| Estados vacíos y celebraciones | Emoji animado, uno solo, en `xl`. Nada de íconos genéricos en un estado vacío. | canon (preferencia del dueño: emojis animados en los estados vacíos) |
|
|
36
|
+
| Pasos de una landing | `lg`, uno por paso. | propuesta |
|
|
37
|
+
| Junto a un título o dentro de un texto | `md` o `sm`, como acento. | propuesta |
|
|
38
|
+
| Como ícono de un botón | No: el botón lleva `leftIcon`. | propuesta |
|
|
39
|
+
|
|
40
|
+
### `size`
|
|
41
|
+
|
|
42
|
+
| valor | px | cuándo | fuente |
|
|
43
|
+
|---|---|---|---|
|
|
44
|
+
| `xl` | 48 | Estado vacío, celebración. | propuesta |
|
|
45
|
+
| `lg` | 32 | Pasos de una landing, la barra de calificación. | propuesta |
|
|
46
|
+
| `md` (default) | 24 | Acompaña un título. | propuesta |
|
|
47
|
+
| `sm` | 20 | Dentro de una línea de texto. | propuesta |
|
|
48
|
+
| `xs` | 16 | No usar hoy. | propuesta |
|
|
49
|
+
| `full` | 100 % | Llena su caja: lo usa `sui-empty-state`. | propuesta |
|
|
50
|
+
|
|
51
|
+
### `animated`, `src`, `name`, `ariaLabel`
|
|
52
|
+
|
|
53
|
+
| input | cuándo | fuente |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| `animated` (default `true`) | Uno solo → animado. **Varios a la vez → `false`.** Ojo: solo las 5 caritas de la calificación (`pensive-face` … `grinning-face-smiling-eyes`) tienen copia estática; para el resto, `false` no cambia nada. | propuesta (la regla ya está escrita en `sui-emoji.ts`) |
|
|
56
|
+
| `name` | Uno del catálogo. Si no está, se agrega al catálogo del DS. | propuesta |
|
|
57
|
+
| `src` | Un emoji que no está en el catálogo, mientras se agrega. **Nunca** un `<img>` suelto con la URL del emoji. | propuesta |
|
|
58
|
+
| `ariaLabel` | Solo si el emoji dice algo que el texto no dice. Si no, queda decorativo (`aria-hidden`). | propuesta |
|
|
59
|
+
|
|
60
|
+
**Usos de hoy que romperían la propuesta:**
|
|
61
|
+
|
|
62
|
+
- **2 emojis como ícono de botón**: «Encargarme yo» en `pages/orders/orders.html:322` y `:353` → `leftIcon`.
|
|
63
|
+
- **5 animados a la vez** en `pages/public/landing-customers/landing-customers.html:160`–`:184`
|
|
64
|
+
(más otro en `:56`). No tienen copia estática: o se acepta el peso en la landing o se generan
|
|
65
|
+
las copias.
|
|
66
|
+
- **Un catálogo paralelo**: `core/fluent-emoji.ts` arma sus propias URLs (otro CDN incluido) y lo
|
|
67
|
+
importan 8 archivos (`components/permission-prime-modal/permission-prime-modal.ts`,
|
|
68
|
+
`pages/role-selector/role-selector.ts`, `pages/customer/order-tracking/order-tracking.ts`…).
|
|
69
|
+
- **10 `<img>` con un emoji**, fuera del componente: `pages/products/add-product/add-product.html:122`
|
|
70
|
+
(la URL del paquete escrita a mano, y 3 más en el mismo archivo),
|
|
71
|
+
`components/location-flow-outlet/location-flow-outlet.html:14`,
|
|
72
|
+
`pages/customer/order-tracking/order-tracking.html:249`. No cuentan las imágenes de los rubros
|
|
73
|
+
(`pages/customer/store-browser/store-browser.html:193` y similares): vienen de datos y no son
|
|
74
|
+
del catálogo.
|
|
75
|
+
|
|
76
|
+
## Tamaño en mobile y en web
|
|
77
|
+
|
|
78
|
+
En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. En las
|
|
79
|
+
pantallas que se usan en los dos (panel del local, super admin) se elige con el servicio de
|
|
80
|
+
breakpoints de la app (`bp`, en `services/breakpoints.service.ts`); en las que solo existen en
|
|
81
|
+
el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propuesta**.
|
|
82
|
+
|
|
83
|
+
| uso | mobile | web |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| estado vacío, celebración | `xl` (48) | `xl` (48) |
|
|
86
|
+
| pasos de una landing | `lg` (32) | `xl` (48) |
|
|
87
|
+
| dentro de un texto | `md` (24) | `sm` (20) |
|
|
88
|
+
|
|
89
|
+
```html
|
|
90
|
+
<sui-emoji name="hamburger" [size]="bp.isMobile() ? 'lg' : 'xl'" />
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
El emoji no se toca, así que la regla del dedo no aplica: en los casos de ilustración va igual o
|
|
94
|
+
más grande en web, donde sobra espacio. El tamaño con nombre más grande es `xl` (48); para uno más
|
|
95
|
+
grande, `size="full"` dentro de una caja con el alto que se quiera.
|
|
96
|
+
|
|
97
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
98
|
+
|
|
99
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| `size` `xs` | a 16 px un emoji ya no se distingue | dentro de un tag de categoría, solo con copia estática |
|
|
102
|
+
| como ícono de botón o de fila | un emoji no es un ícono | ninguno |
|
|
103
|
+
|
|
104
|
+
## API
|
|
105
|
+
|
|
106
|
+
<!-- api:inicio -->
|
|
107
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
108
|
+
|
|
109
|
+
| input | tipo | default |
|
|
110
|
+
|---|---|---|
|
|
111
|
+
| `name` | `SuiEmojiName \| null` | `null` |
|
|
112
|
+
| `src` | `string \| null` | `null` |
|
|
113
|
+
| `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl' \| 'full'` | `'md'` |
|
|
114
|
+
| `ariaLabel` | `string \| null` | `null` |
|
|
115
|
+
| `animated` | `boolean` | `true` |
|
|
116
|
+
|
|
117
|
+
Outputs: ninguno.
|
|
118
|
+
<!-- api:fin -->
|
|
119
|
+
|
|
120
|
+
## Trampas
|
|
121
|
+
|
|
122
|
+
- **Pesan**: los animados son APNG de ~1 MB y 73 fotogramas cada uno, servidos desde
|
|
123
|
+
`raw.githubusercontent.com`. Si ese servidor se cae, no hay emoji.
|
|
124
|
+
- **`animated=false` solo sirve para 5**: las caritas. El resto no tiene copia estática.
|
|
125
|
+
- **`src` gana sobre `name`.**
|
|
126
|
+
- **No toma color**: no responde a `currentColor` ni al tema.
|
|
127
|
+
- Sin `ariaLabel` es decorativo: el lector de pantalla no lo dice.
|
|
128
|
+
- `loading="lazy"`: fuera de la pantalla, no carga hasta que se acerca.
|
|
129
|
+
|
|
130
|
+
## Ejemplo
|
|
131
|
+
|
|
132
|
+
```html
|
|
133
|
+
<!-- Celebración -->
|
|
134
|
+
<sui-emoji name="party-popper" size="xl" />
|
|
135
|
+
|
|
136
|
+
<!-- La barra de calificación: cinco juntos, estáticos -->
|
|
137
|
+
<sui-emoji name="neutral-face" size="lg" [animated]="false" ariaLabel="Regular" />
|
|
138
|
+
```
|