@ajuarezso/sui-design-system 0.19.0 → 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 +193 -48
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +166 -27
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-logo
|
|
3
|
+
selector: sui-logo
|
|
4
|
+
resumen: El logo de Master Pedidos (la M y la palabra), dibujado en SVG y coloreable
|
|
5
|
+
alternativas: [sui-brand-logo (logos de OTRAS marcas: WhatsApp, Google, Apple…), sui-avatar (el logo de un local, que es una foto)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-logo
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Logo](https://sui-design-system.web.app/?path=/docs/atoms-logo--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** siempre que aparezca la marca Master Pedidos: barras, login, «Acerca de», la pantalla
|
|
15
|
+
de actualización, las páginas públicas.
|
|
16
|
+
|
|
17
|
+
**No lo uses** para:
|
|
18
|
+
|
|
19
|
+
- El logo de un local: es una foto, va en `sui-avatar`.
|
|
20
|
+
- Logos de terceros: `sui-brand-logo`.
|
|
21
|
+
- El splash nativo (`index.html`): se pinta antes de que arranque Angular, así que es una copia a
|
|
22
|
+
mano en SVG. Si se cambia el logo, hay que tocar las dos.
|
|
23
|
+
|
|
24
|
+
**Nunca un PNG o un SVG suelto del logo**: con `sui-logo` el color sigue al tema y el dibujo es
|
|
25
|
+
uno solo.
|
|
26
|
+
|
|
27
|
+
## Qué variante usar
|
|
28
|
+
|
|
29
|
+
> **La guía del DS no tiene este componente**: es propio de SUI, porque es la marca de la app.
|
|
30
|
+
> Todo lo de abajo es **propuesta, falta aprobación**; los ejemplos salen de cómo se usa hoy.
|
|
31
|
+
>
|
|
32
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: 10 logos en 8 archivos, sin contar
|
|
33
|
+
> prototipos ni vitrinas. 4 `horizontal`, 3 `stacked`, 3 `markOnly`; 7 con `[height]` y 3 con `size`.
|
|
34
|
+
|
|
35
|
+
### `orientation` y `markOnly`
|
|
36
|
+
|
|
37
|
+
| valor | cuándo | ejemplo real de la app | fuente |
|
|
38
|
+
|---|---|---|---|
|
|
39
|
+
| `horizontal` (default) | Barras y cabeceras: la M a la izquierda y la palabra en dos líneas. | `layouts/public/public-layout.html:4` · `pages/public/pedido-en-vivo/pedido-en-vivo.html:72` · `pages/role-selector/role-selector.html:10` | propuesta |
|
|
40
|
+
| `stacked` | Pantallas de marca centradas: la M arriba y la palabra abajo. | `pages/empresa/about/about.html:12` · `components/ota-update/ota-update.html:118` | propuesta |
|
|
41
|
+
| `[markOnly]="true"` | Donde la palabra no entra o ya está escrita al lado: nav mobile, login. | `layouts/public/public-layout.html:6` · `pages/auth/login/login.html:3` | propuesta |
|
|
42
|
+
|
|
43
|
+
No existe la versión de una sola línea («Master Pedidos» en un renglón): es otro dibujo.
|
|
44
|
+
|
|
45
|
+
### `size` y `height`
|
|
46
|
+
|
|
47
|
+
`size` fija el **alto**; el ancho sale solo.
|
|
48
|
+
|
|
49
|
+
| valor | alto | cuándo | fuente |
|
|
50
|
+
|---|---|---|---|
|
|
51
|
+
| `xs` / `sm` | 16 / 20 | No usar hoy: la palabra no se lee (con `markOnly` sí sirve). | propuesta |
|
|
52
|
+
| `md` (default) | 24 | Barra de una página pública. | propuesta |
|
|
53
|
+
| `lg` | 32 | Nav pública, login. | propuesta |
|
|
54
|
+
| `xl` | 40 | Pantalla de actualización. | propuesta |
|
|
55
|
+
| `2xl` | 48 | Selector de rol. | propuesta |
|
|
56
|
+
| `height` | libre | **Solo para más de 48 px**: el apilado de 120 en «Acerca de» y en la actualización. | propuesta |
|
|
57
|
+
|
|
58
|
+
**Usos de hoy que romperían la propuesta: 4 `[height]` que van a la escala.**
|
|
59
|
+
`components/ota-update/ota-update.html:17` (`40` → `size="xl"`),
|
|
60
|
+
`pages/public/pedido-en-vivo/pedido-en-vivo.html:72` (`22` → `md`),
|
|
61
|
+
`layouts/public/public-layout.html:6` (`28` → `lg`), `pages/customer/about/about.html:19` (`44` → `xl` o `2xl`).
|
|
62
|
+
|
|
63
|
+
### `markColor` y `textColor`
|
|
64
|
+
|
|
65
|
+
| combinación | cuándo | fuente |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| de marca (default): M `--sui-primary-base` + palabra `--sui-text-strong-950` | Sobre fondo claro. **No hace falta pasar los colores**: ya son el default. | propuesta |
|
|
68
|
+
| monocromo: todo `--sui-text-strong-950` | Login y nav pública, donde el naranja ya está en el botón principal. | propuesta |
|
|
69
|
+
| blanco: todo `--sui-static-white` | Sobre naranja o sobre foto. `static-white` no cambia con el tema. | propuesta |
|
|
70
|
+
| cualquier otro color | No usar. | propuesta |
|
|
71
|
+
|
|
72
|
+
**Usos de hoy redundantes: 6** pasan a mano los colores que ya son el default (no rompen nada,
|
|
73
|
+
sobran): `components/ota-update/ota-update.html:17`, `pages/role-selector/role-selector.html:10`,
|
|
74
|
+
`pages/empresa/about/about.html:12`.
|
|
75
|
+
|
|
76
|
+
**Logo que no pasa por el componente: 1.** `components/landing-footer/landing-footer.html:7` usa
|
|
77
|
+
`assets/landing/logo-blanco.png` → `sui-logo` con los dos colores en `--sui-static-white`.
|
|
78
|
+
|
|
79
|
+
### `decorative` y `ariaLabel`
|
|
80
|
+
|
|
81
|
+
| input | cuándo | fuente |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| `[decorative]="true"` | Cuando al lado ya está escrito «Master Pedidos» (el título de «Acerca de»): así el lector de pantalla no lo dice dos veces. | propuesta |
|
|
84
|
+
| `ariaLabel` | No tocar: ya dice «Master Pedidos». | propuesta |
|
|
85
|
+
|
|
86
|
+
## Tamaño en mobile y en web
|
|
87
|
+
|
|
88
|
+
En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. En las
|
|
89
|
+
pantallas que se usan en los dos (panel del local, super admin) se elige con el servicio de
|
|
90
|
+
breakpoints de la app (`bp`, en `services/breakpoints.service.ts`); en las que solo existen en
|
|
91
|
+
el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propuesta**.
|
|
92
|
+
|
|
93
|
+
| uso | mobile | web |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| barra | `[markOnly]="true"` `size="lg"` | `horizontal` `size="lg"` |
|
|
96
|
+
| pantalla de entrada (selector de rol, login) | `2xl` (48) | `xl` (40) |
|
|
97
|
+
| pantalla de marca («Acerca de», actualización) | `stacked` `[height]="120"` | igual |
|
|
98
|
+
|
|
99
|
+
```html
|
|
100
|
+
<sui-logo size="lg" [markOnly]="bp.isMobile()" />
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
En la barra no cambia el alto, cambia la forma: en mobile no entra la palabra. Es lo que ya hace
|
|
104
|
+
`layouts/public/public-layout.html:4`–`:6`, con dos logos y CSS.
|
|
105
|
+
|
|
106
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
107
|
+
|
|
108
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| `size` `xs`, `sm` con palabra | la palabra no se lee | con `markOnly`: el ícono chico en una firma o un pie de página |
|
|
111
|
+
| un color fuera de los tres | la marca es naranja, negra o blanca | ninguno previsto |
|
|
112
|
+
|
|
113
|
+
## API
|
|
114
|
+
|
|
115
|
+
<!-- api:inicio -->
|
|
116
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
117
|
+
|
|
118
|
+
| input | tipo | default |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `orientation` | `'horizontal' \| 'stacked'` | `'horizontal'` |
|
|
121
|
+
| `markOnly` | `boolean` | `false` |
|
|
122
|
+
| `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl' \| '2xl'` | `'md'` |
|
|
123
|
+
| `height` | `number \| string \| null` | `null` |
|
|
124
|
+
| `markColor` | `string` | `'var(--sui-primary-base)'` |
|
|
125
|
+
| `textColor` | `string` | `'var(--sui-text-strong-950)'` |
|
|
126
|
+
| `decorative` | `boolean` | `false` |
|
|
127
|
+
| `ariaLabel` | `string` | `'Master Pedidos'` |
|
|
128
|
+
|
|
129
|
+
Outputs: ninguno.
|
|
130
|
+
<!-- api:fin -->
|
|
131
|
+
|
|
132
|
+
## Trampas
|
|
133
|
+
|
|
134
|
+
- **`height` gana sobre `size`.** Un número son px; un string es cualquier valor CSS (`'60%'`).
|
|
135
|
+
- **Los colores van por custom property**: `markColor="var(--sui-primary-base)"` funciona; un
|
|
136
|
+
`fill` puesto desde afuera, no.
|
|
137
|
+
- **Con `markOnly`, `orientation` no hace nada.**
|
|
138
|
+
- **No trae padding**: el `viewBox` es justo el dibujo. El aire lo pone quien lo usa.
|
|
139
|
+
- **No es `sui-brand-logo`**: ese sirve logos de otras marcas como imágenes que no se pueden teñir.
|
|
140
|
+
|
|
141
|
+
## Ejemplo
|
|
142
|
+
|
|
143
|
+
```html
|
|
144
|
+
<!-- Barra de una página pública -->
|
|
145
|
+
<sui-logo size="md" />
|
|
146
|
+
|
|
147
|
+
<!-- «Acerca de»: el título ya dice el nombre -->
|
|
148
|
+
<sui-logo orientation="stacked" [height]="120" [decorative]="true" />
|
|
149
|
+
|
|
150
|
+
<!-- Sobre el fondo naranja -->
|
|
151
|
+
<sui-logo [markOnly]="true" size="2xl" markColor="var(--sui-static-white)" />
|
|
152
|
+
```
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-payment-icon
|
|
3
|
+
selector: sui-payment-icon
|
|
4
|
+
resumen: El círculo de color de un pago de servicio (agua, gas, luz, internet, alquiler…)
|
|
5
|
+
alternativas: [sui-key-icon (cualquier otro ícono en círculo), sui-brand-logo (el logo de un medio de pago con marca)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-payment-icon
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Icon/Payment Icon](https://sui-design-system.web.app/?path=/docs/atoms-icon-payment-icon--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** para identificar el **tipo de un pago de servicio** en una lista: agua, gas, luz,
|
|
15
|
+
donación, internet, teléfono, alquiler, impuestos. Es un `sui-key-icon` `lighter` con el ícono y
|
|
16
|
+
el color ya elegidos.
|
|
17
|
+
|
|
18
|
+
**No lo uses** para:
|
|
19
|
+
|
|
20
|
+
- **Medios de pago** (Yape, Plin, efectivo, tarjeta): no están aquí. Este componente es de
|
|
21
|
+
**servicios**, no de cómo se paga.
|
|
22
|
+
- Cualquier otro ícono en círculo: `sui-key-icon`.
|
|
23
|
+
|
|
24
|
+
## Qué variante usar
|
|
25
|
+
|
|
26
|
+
> **La guía del DS no tiene página para este componente.** Todo es **propuesta, falta
|
|
27
|
+
> aprobación**.
|
|
28
|
+
>
|
|
29
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos**.
|
|
30
|
+
|
|
31
|
+
### `type`
|
|
32
|
+
|
|
33
|
+
| valor | ícono y color | cuándo | fuente |
|
|
34
|
+
|---|---|---|---|
|
|
35
|
+
| `water` | gota, celeste | No usar hoy. | propuesta |
|
|
36
|
+
| `gas` | fuego, rojo | No usar hoy. | propuesta |
|
|
37
|
+
| `electricity` | foco, amarillo | No usar hoy. | propuesta |
|
|
38
|
+
| `donate` | mano con corazón, rosa | No usar hoy. | propuesta |
|
|
39
|
+
| `internet` | wifi, azul | No usar hoy. | propuesta |
|
|
40
|
+
| `phone` | celular, naranja | No usar hoy. | propuesta |
|
|
41
|
+
| `rent` | casa, verde | No usar hoy. | propuesta |
|
|
42
|
+
| `tax` | documento, morado | No usar hoy. | propuesta |
|
|
43
|
+
|
|
44
|
+
### `size` y `ariaLabel`
|
|
45
|
+
|
|
46
|
+
| input | cuándo | fuente |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| `size` `40` (default) | El único tamaño del Figma. Los demás (32, 48, 56, 64) heredan la escala de `sui-key-icon`. | propuesta |
|
|
49
|
+
| `ariaLabel` | Solo si al lado no está escrito el servicio. Si no, es decorativo. | propuesta |
|
|
50
|
+
|
|
51
|
+
Usos de hoy que rompen la regla: **0**.
|
|
52
|
+
|
|
53
|
+
## Tamaño en mobile y en web
|
|
54
|
+
|
|
55
|
+
En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. En las
|
|
56
|
+
pantallas que se usan en los dos (panel del local, super admin) se elige con el servicio de
|
|
57
|
+
breakpoints de la app (`bp`, en `services/breakpoints.service.ts`); en las que solo existen en
|
|
58
|
+
el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propuesta**.
|
|
59
|
+
|
|
60
|
+
| uso | mobile | web |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| fila de una lista | `40` | `32` |
|
|
63
|
+
|
|
64
|
+
```html
|
|
65
|
+
<sui-payment-icon type="electricity" [size]="bp.isMobile() ? 40 : 32" />
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
69
|
+
|
|
70
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| todo el componente (0 usos) | la app no maneja pagos de servicios | si el local registra sus gastos fijos por tipo (luz, agua, internet, alquiler), o si la billetera paga servicios |
|
|
73
|
+
|
|
74
|
+
## API
|
|
75
|
+
|
|
76
|
+
<!-- api:inicio -->
|
|
77
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
78
|
+
|
|
79
|
+
| input | tipo | default |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| `type` | `SuiPaymentIconType` | — (requerido) |
|
|
82
|
+
| `size` | `32 \| 40 \| 48 \| 56 \| 64` | `40` |
|
|
83
|
+
| `ariaLabel` | `string \| null` | `null` |
|
|
84
|
+
|
|
85
|
+
Outputs: ninguno.
|
|
86
|
+
<!-- api:fin -->
|
|
87
|
+
|
|
88
|
+
## Trampas
|
|
89
|
+
|
|
90
|
+
- **No es para medios de pago**: no hay Yape, Plin ni tarjeta.
|
|
91
|
+
- **`type` decide el ícono y el color**: no se pueden cambiar. Si necesitas otro, usa `sui-key-icon`.
|
|
92
|
+
- **`size` es un número**: `[size]="48"`.
|
|
93
|
+
|
|
94
|
+
## Ejemplo
|
|
95
|
+
|
|
96
|
+
```html
|
|
97
|
+
<sui-payment-icon type="electricity" />
|
|
98
|
+
```
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-progress-bar
|
|
3
|
+
selector: sui-progress-bar
|
|
4
|
+
resumen: Barra que muestra cuánto falta para completar algo, pintada con el estado de lo que mide
|
|
5
|
+
alternativas: [sui-progress-bar-label (la misma barra con título, número y descripción), sui-circular-progress-bar (el avance en un círculo, junto a un título), un gráfico (repartir un total entre partes)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-progress-bar
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Progress/Progress Bar](https://sui-design-system.web.app/?path=/docs/atoms-progress-progress-bar--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** para mostrar **cuánto avanzó algo hacia un final**: una descarga, una foto que se sube,
|
|
15
|
+
la meta del día, el saldo que queda. Va pelada (sin texto) solo cuando otra cosa de la pantalla ya
|
|
16
|
+
dice qué mide y cuánto.
|
|
17
|
+
|
|
18
|
+
**No lo uses** para:
|
|
19
|
+
|
|
20
|
+
- Una barra con título o número visible: `sui-progress-bar-label` (la arma con la tipografía y el
|
|
21
|
+
espaciado del DS).
|
|
22
|
+
- **Repartir un total entre partes** (visitas por dispositivo, ventas por canal): eso no es un
|
|
23
|
+
avance hacia algo, es una proporción. Va un gráfico, o la barra en `blue` si es una sola cifra.
|
|
24
|
+
- Una espera sin porcentaje conocido: un spinner o un skeleton.
|
|
25
|
+
|
|
26
|
+
## Qué variante usar
|
|
27
|
+
|
|
28
|
+
> **La guía del DS lo define como «un gráfico simple para mostrar qué tan completo está algo»**
|
|
29
|
+
> y trae cuatro colores (`blue` default, `red`, `orange`, `green`), una sola altura, `value` y
|
|
30
|
+
> `max`. No dice cuándo usar cada color. Cada color apunta a un token de estado
|
|
31
|
+
> (`--sui-state-*`), igual que el badge: de ahí sale su significado, que es el mismo que el del
|
|
32
|
+
> badge aprobado. Lo marcado «según la guía del DS» sale de ahí; el resto es **propuesta, falta
|
|
33
|
+
> aprobación**.
|
|
34
|
+
>
|
|
35
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **2 barras peladas en 1 pantalla**
|
|
36
|
+
> (`overview-visitors`), sin contar prototipos ni vitrinas (`master-preview`,
|
|
37
|
+
> `master-prototipos`, `mockup-sheets-*`, `dx/*`, `_guia-*`, `master-rutina`, `master-medico`,
|
|
38
|
+
> `master-ejercicios`, `dev-index`). Las otras 4 barras de la app usan `sui-progress-bar-label`.
|
|
39
|
+
|
|
40
|
+
### `color` — el estado de lo que mide
|
|
41
|
+
|
|
42
|
+
| color | token | cuándo | ejemplo | fuente |
|
|
43
|
+
|---|---|---|---|---|
|
|
44
|
+
| `blue` (default) | `information` | Avance neutro: no hay nada que juzgar. | Subir una foto, descargar, pasos de un formulario | según la guía del DS (default y token) · propuesta (cuándo) |
|
|
45
|
+
| `green` | `success` | Se cumplió o va bien. | Meta cumplida, saldo alto | según la guía del DS (token) · propuesta (cuándo) |
|
|
46
|
+
| `orange` | `warning` | Va en curso y pide atención. | Saldo bajando, meta del día a medias | según la guía del DS (token) · propuesta (cuándo) |
|
|
47
|
+
| `red` | `error` | Se perdió o se acabó. | Meta perdida, saldo agotado | según la guía del DS (token) · propuesta (cuándo) |
|
|
48
|
+
| `purple` | `feature` | **No usar** (ver abajo). Extensión SUI. | — | propuesta, falta aprobación |
|
|
49
|
+
|
|
50
|
+
**Ojo con el naranja**: en este proyecto el `orange` de estado (`--sui-state-warning-base`) es
|
|
51
|
+
el mismo `#fa7319` de la marca. Una barra naranja sin un juicio detrás se lee como «marca», no
|
|
52
|
+
como «atención».
|
|
53
|
+
|
|
54
|
+
### `size`
|
|
55
|
+
|
|
56
|
+
| size | alto | cuándo | fuente |
|
|
57
|
+
|---|---|---|---|
|
|
58
|
+
| `small` | 4 px | Web: dentro de una card o una fila densa. | propuesta, falta aprobación |
|
|
59
|
+
| `medium` (default) | 6 px | Web: lo normal y la barra principal. Mobile: dentro de una fila densa. Es la única altura de la guía. | según la guía del DS |
|
|
60
|
+
| `large` | 8 px | Mobile: lo normal y la barra principal (descarga, meta del día). | propuesta, falta aprobación |
|
|
61
|
+
| `xlarge` | 10 px | **No usar** (ver abajo). | propuesta, falta aprobación |
|
|
62
|
+
|
|
63
|
+
### `value` y `ariaLabel`
|
|
64
|
+
|
|
65
|
+
| propiedad | regla | fuente |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| `value` | Siempre de 0 a 100. Si el dato viene como fracción (0,6) o como «3 de 5», se convierte antes. | propuesta, falta aprobación |
|
|
68
|
+
| `ariaLabel` | **Obligatorio** en la barra pelada: sin título visible, el lector de pantalla no sabe qué mide. | propuesta, falta aprobación |
|
|
69
|
+
|
|
70
|
+
**Usos de hoy que rompen la regla — a discutir, 2:**
|
|
71
|
+
`pages/overview/components/overview-visitors/overview-visitors.html:22` y `:45` pintan en
|
|
72
|
+
`orange` cómo se reparten las visitas por dispositivo. No es un avance ni pide atención: con esta
|
|
73
|
+
regla va `blue`, o mejor un gráfico. Tampoco llevan `ariaLabel`.
|
|
74
|
+
|
|
75
|
+
## No usar: por qué no hoy y cuándo sí
|
|
76
|
+
|
|
77
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| `color="purple"` | No está en la guía y no hay caso. | El avance de una función en prueba, con el mismo morado que el badge «Beta». |
|
|
80
|
+
| `size="xlarge"` | Ninguna barra es lo único de su pantalla. | Una pantalla de carga larga, donde la barra es lo único (importar la carta de un local). |
|
|
81
|
+
|
|
82
|
+
## Tamaño en mobile y en web
|
|
83
|
+
|
|
84
|
+
Criterio de la app: **en mobile se lee y se toca con el dedo, así que va más grande; en web
|
|
85
|
+
(desktop), más chico.** Mobile es `≤ 767 px`, el mismo corte de `BreakpointsService.isMobile()`
|
|
86
|
+
en master-pedidos. Fuente: canon del dueño (03-10-2026), el mismo patrón que ya usan 27 controles
|
|
87
|
+
de la app.
|
|
88
|
+
|
|
89
|
+
| uso | mobile | web | fuente |
|
|
90
|
+
|---|---|---|---|
|
|
91
|
+
| Dentro de una fila o card densa | `medium` (6) | `small` (4) | propuesta, falta aprobación |
|
|
92
|
+
| Lo normal, y la barra que es lo principal (descarga, meta del día) | `large` (8) | `medium` (6) | propuesta, falta aprobación |
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
readonly bp = inject(BreakpointsService); // master-pedidos: src/app/services/breakpoints.service.ts
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```html
|
|
99
|
+
<sui-progress-bar [value]="progreso()" [size]="bp.isMobile() ? 'medium' : 'small'" ariaLabel="Subiendo la foto" />
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## API
|
|
103
|
+
|
|
104
|
+
<!-- api:inicio -->
|
|
105
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
106
|
+
|
|
107
|
+
| input | tipo | default |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| `value` | `number` | `0` |
|
|
110
|
+
| `color` | `'blue' \| 'green' \| 'orange' \| 'red' \| 'purple'` | `'blue'` |
|
|
111
|
+
| `size` | `'small' \| 'medium' \| 'large' \| 'xlarge'` | `'medium'` |
|
|
112
|
+
| `ariaLabel` | `string \| null` | `null` |
|
|
113
|
+
|
|
114
|
+
Outputs: ninguno.
|
|
115
|
+
<!-- api:fin -->
|
|
116
|
+
|
|
117
|
+
## Trampas
|
|
118
|
+
|
|
119
|
+
- **No hay `max`** (la guía sí lo tiene): `value` es un porcentaje de 0 a 100, con tope.
|
|
120
|
+
- **El default es `blue`**, no el naranja de la marca.
|
|
121
|
+
- El azul de la barra es `--sui-state-information-base`, **no** `--sui-primary-base` (que en
|
|
122
|
+
este proyecto es naranja).
|
|
123
|
+
- El ancho es el 100 % del padre: dentro de un flex, dale `flex: 1` o un ancho.
|
|
124
|
+
- Lleva `role="progressbar"` con `aria-valuenow`; la animación se apaga con
|
|
125
|
+
`prefers-reduced-motion`.
|
|
126
|
+
|
|
127
|
+
## Ejemplo
|
|
128
|
+
|
|
129
|
+
```html
|
|
130
|
+
<!-- Dentro de una fila que ya dice «Subiendo la foto · 64 %» -->
|
|
131
|
+
<sui-progress-bar [value]="progreso()" ariaLabel="Subiendo la foto" />
|
|
132
|
+
```
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-progress-bar-label
|
|
3
|
+
selector: sui-progress-bar-label
|
|
4
|
+
resumen: La barra de progreso con lo que mide, cuánto va y, si hace falta, qué hacer
|
|
5
|
+
alternativas: [sui-progress-bar (la barra pelada, cuando otra cosa ya la rotula), sui-circular-progress-bar (el avance en un círculo, junto a un título)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-progress-bar-label
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Progress/Progress Bar Label](https://sui-design-system.web.app/?path=/docs/atoms-progress-progress-bar-label--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** siempre que una barra de progreso lleve **título o número visible**: «Descargando
|
|
15
|
+
actualización 64 %», «Meta del día · 3 de 5 entregas», «Saldo restante · S/ 12.40 de S/ 20.00».
|
|
16
|
+
Arma la barra (`sui-progress-bar` adentro), el título, el número y una fila opcional con
|
|
17
|
+
descripción y link, con el espaciado del DS.
|
|
18
|
+
|
|
19
|
+
**No lo uses** para:
|
|
20
|
+
|
|
21
|
+
- Una barra que ya está rotulada por la fila donde vive: `sui-progress-bar`.
|
|
22
|
+
- Un avance que va en un cuadrado al lado de un título: `sui-circular-progress-bar`.
|
|
23
|
+
- Repartir un total entre partes: un gráfico.
|
|
24
|
+
|
|
25
|
+
## Qué variante usar
|
|
26
|
+
|
|
27
|
+
> **La guía del DS no tiene una página propia para esto**: son los ejemplos «With Label» y
|
|
28
|
+
> «Advanced» de la página de la barra de progreso (título + «80%», y debajo un link
|
|
29
|
+
> «Upgrade» con una descripción). No dice cuándo usar cada forma. Lo marcado «según la guía del
|
|
30
|
+
> DS» sale de esos ejemplos; el resto es **propuesta, falta aprobación**.
|
|
31
|
+
>
|
|
32
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **4 en 3 pantallas** (la descarga del
|
|
33
|
+
> OTA, el saldo y la meta del día en el dashboard del repartidor, el saldo en la billetera), sin
|
|
34
|
+
> contar prototipos ni vitrinas (`master-preview`, `master-prototipos`, `mockup-sheets-*`,
|
|
35
|
+
> `dx/*`, `_guia-*`, `master-rutina`, `master-medico`, `master-ejercicios`, `dev-index`). Todas
|
|
36
|
+
> `on-top`; 3 con `percentage` de texto; 1 con `showBottom`; ninguna con `link`.
|
|
37
|
+
|
|
38
|
+
`color` y `size` se eligen con las tablas de `sui-progress-bar`: el color es el **estado de lo
|
|
39
|
+
que mide** (blue neutro, green cumplido, orange pide atención, red perdido o agotado).
|
|
40
|
+
|
|
41
|
+
| propiedad | valor | cuándo | ejemplo real | fuente |
|
|
42
|
+
|---|---|---|---|---|
|
|
43
|
+
| `type` | `on-top` (default) | Título y número arriba, barra abajo. Lo normal. | Las 4 de la app | según la guía del DS («With Label») |
|
|
44
|
+
| `type` | `on-right` | Sin título: barra y número en una línea, dentro de una fila que ya dice qué mide a la izquierda. | Pedidos por distrito en una tabla | propuesta, falta aprobación |
|
|
45
|
+
| `title` | texto | Qué mide, en sentence case, sin punto: «Saldo restante», «Meta del día». | `pages/driver/driver-wallet/driver-wallet.html:43` | según la guía del DS |
|
|
46
|
+
| `percentage` | `true` (default) | El porcentaje es la unidad que importa (una descarga). | `components/ota-update/ota-update.html:132` | según la guía del DS («80%») |
|
|
47
|
+
| `percentage` | texto | Hay una unidad real: entregas, soles. «3 de 5 entregas», «S/ 12.40 de S/ 20.00». | `pages/driver/driver-dashboard/driver-dashboard.html:512` | propuesta, falta aprobación |
|
|
48
|
+
| `percentage` | `false` | El número ya está escrito al lado, o no significa nada. | — | propuesta, falta aprobación |
|
|
49
|
+
| `showBottom` + `description` | texto | Qué está pasando o qué hacer mientras avanza: «No cierres la app, estamos dejando todo listo.» | `components/ota-update/ota-update.html:132` | según la guía del DS («Advanced») |
|
|
50
|
+
| `link` | texto o `{ label, href }` | La acción que resuelve lo que la barra avisa: «Recargar» cuando el saldo está en rojo. Va con `showBottom`. | — (sin usos) | según la guía del DS («Upgrade») · propuesta (cuándo) |
|
|
51
|
+
| `ariaLabel` | texto | Lo que mide, si el título no alcanza («Saldo restante sobre el saldo de cortesía»). | `pages/driver/driver-dashboard/driver-dashboard.html:240` | propuesta, falta aprobación |
|
|
52
|
+
|
|
53
|
+
**Usos de hoy que rompen la regla — a discutir, 1:**
|
|
54
|
+
`components/ota-update/ota-update.html:132` pinta la descarga en `orange`. Una descarga es avance
|
|
55
|
+
neutro: con la regla de color va `blue`. En la app el naranja se lee como la marca, así que puede
|
|
56
|
+
ser una decisión de marca y no un error: decide el dueño. Las de saldo y meta (`driver-wallet:43`,
|
|
57
|
+
`driver-dashboard:240` y `:512`) ya pintan verde, naranja y rojo según el estado: cumplen.
|
|
58
|
+
|
|
59
|
+
## No usar: por qué no hoy y cuándo sí
|
|
60
|
+
|
|
61
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| `type="on-right"` | Ninguna barra de hoy vive en una fila con su nombre al lado. | Una tabla del super admin con el avance por distrito o por local. |
|
|
64
|
+
| `link` | Ninguna barra de hoy ofrece la acción que la resuelve. | «Recargar» bajo el saldo del repartidor cuando está en rojo. |
|
|
65
|
+
|
|
66
|
+
## Tamaño en mobile y en web
|
|
67
|
+
|
|
68
|
+
Criterio de la app: **en mobile se lee y se toca con el dedo, así que va más grande; en web
|
|
69
|
+
(desktop), más chico.** Mobile es `≤ 767 px`, el mismo corte de `BreakpointsService.isMobile()`
|
|
70
|
+
en master-pedidos. Fuente: canon del dueño (03-10-2026), el mismo patrón que ya usan 27 controles
|
|
71
|
+
de la app.
|
|
72
|
+
|
|
73
|
+
El `size` solo cambia la barra; el título y el número no cambian de tamaño.
|
|
74
|
+
|
|
75
|
+
| uso | mobile | web | fuente |
|
|
76
|
+
|---|---|---|---|
|
|
77
|
+
| Dentro de una card o fila densa (saldo en el dashboard) | `medium` (6) | `small` (4) | propuesta, falta aprobación |
|
|
78
|
+
| Lo normal, y la barra que es lo principal (descarga, meta del día) | `large` (8) | `medium` (6) | propuesta, falta aprobación |
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
readonly bp = inject(BreakpointsService); // master-pedidos: src/app/services/breakpoints.service.ts
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
```html
|
|
85
|
+
<sui-progress-bar-label title="Saldo restante" [value]="balancePercent()"
|
|
86
|
+
[size]="bp.isMobile() ? 'large' : 'medium'" [color]="balanceColor()" />
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Hoy las 4 de la app tienen un size fijo para las dos plataformas.
|
|
90
|
+
|
|
91
|
+
## API
|
|
92
|
+
|
|
93
|
+
<!-- api:inicio -->
|
|
94
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
95
|
+
|
|
96
|
+
| input | tipo | default |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| `value` | `number` | `0` |
|
|
99
|
+
| `type` | `'on-top' \| 'on-right'` | `'on-top'` |
|
|
100
|
+
| `title` | `string` | `''` |
|
|
101
|
+
| `percentage` | `boolean \| string` | `true` |
|
|
102
|
+
| `showBottom` | `boolean` | `false` |
|
|
103
|
+
| `description` | `string` | `''` |
|
|
104
|
+
| `link` | `SuiLinkConfig \| string \| null` | `null` |
|
|
105
|
+
| `color` | `'blue' \| 'green' \| 'orange' \| 'red' \| 'purple'` | `'blue'` |
|
|
106
|
+
| `size` | `'small' \| 'medium' \| 'large' \| 'xlarge'` | `'medium'` |
|
|
107
|
+
| `ariaLabel` | `string \| null` | `null` |
|
|
108
|
+
|
|
109
|
+
| output | payload |
|
|
110
|
+
|---|---|
|
|
111
|
+
| `linkClick` | `void` |
|
|
112
|
+
<!-- api:fin -->
|
|
113
|
+
|
|
114
|
+
Output: `(linkClick)`. Con `link` de texto el `<a>` no navega y solo emite; con
|
|
115
|
+
`{ label, href }` navega y además emite.
|
|
116
|
+
|
|
117
|
+
## Trampas
|
|
118
|
+
|
|
119
|
+
- **`description` y `link` solo se ven con `[showBottom]="true"`.**
|
|
120
|
+
- **`on-right` ignora `title`, `description` y `link`**: solo barra y número.
|
|
121
|
+
- `percentage` acepta `true`, `false` o un texto: un texto vacío vuelve al porcentaje.
|
|
122
|
+
- El porcentaje automático se redondea (`64.6` → «65%»).
|
|
123
|
+
- El link se pinta en el azul de información, no en el naranja de la marca.
|
|
124
|
+
- Si no hay `title` y `percentage` es `false`, no se dibuja la fila de arriba.
|
|
125
|
+
- Tiene el strip del `title` nativo: no aparece el tooltip gris del navegador.
|
|
126
|
+
|
|
127
|
+
## Ejemplo
|
|
128
|
+
|
|
129
|
+
```html
|
|
130
|
+
<!-- Meta del día del repartidor -->
|
|
131
|
+
<sui-progress-bar-label
|
|
132
|
+
title="Meta del día"
|
|
133
|
+
[value]="hechas / meta * 100"
|
|
134
|
+
[percentage]="hechas + ' de ' + meta + ' entregas'"
|
|
135
|
+
[color]="perdida ? 'red' : cumplida ? 'green' : 'orange'"
|
|
136
|
+
size="large" />
|
|
137
|
+
|
|
138
|
+
<!-- Saldo en rojo, con la acción que lo resuelve -->
|
|
139
|
+
<sui-progress-bar-label
|
|
140
|
+
title="Saldo restante" [value]="18" percentage="S/ 3.60 de S/ 20.00" color="red"
|
|
141
|
+
[showBottom]="true" link="Recargar" description="para seguir recibiendo pedidos"
|
|
142
|
+
(linkClick)="abrirRecarga()" />
|
|
143
|
+
```
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-radio
|
|
3
|
+
selector: sui-radio
|
|
4
|
+
resumen: El círculo solo para elegir una opción de una lista corta, sin texto propio
|
|
5
|
+
alternativas: [sui-radio-label (círculo con su texto, lista densa), sui-radio-card (opción con peso o que se toca en el teléfono), sui-select (más de 6 opciones), sui-segmented-control (2-4 modos que se aplican al instante), sui-checkbox (varias a la vez)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-radio
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Checkbox, Radio & Switch/Radio](https://sui-design-system.web.app/?path=/docs/atoms-checkbox-radio-switch-radio--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** para elegir **una** opción de una lista corta, solo como círculo: cuando el texto vive
|
|
15
|
+
en otra parte (una columna «Por defecto» en una tabla, una fila propia con foto y precio).
|
|
16
|
+
Va dentro de un `sui-radio-group`, que es el que hace que elegir una desmarque la otra.
|
|
17
|
+
|
|
18
|
+
**No lo uses** para:
|
|
19
|
+
|
|
20
|
+
- Un círculo con su texto en una lista densa (franjas horarias): `sui-radio-label`.
|
|
21
|
+
- Opciones con peso (ícono, descripción, borde) o que se tocan en el teléfono: `sui-radio-card`
|
|
22
|
+
(método de pago, tipo de entrega, motivos de cancelación). Crece con `bp.controlSize()`; el
|
|
23
|
+
radio-label no tiene `size`.
|
|
24
|
+
- Más de ~6 opciones: `sui-select`.
|
|
25
|
+
- 2-4 modos de la misma vista que se aplican al instante: `sui-segmented-control`.
|
|
26
|
+
- Varias a la vez: `sui-checkbox`.
|
|
27
|
+
|
|
28
|
+
Regla corta: **lista densa de texto → radio-label · con peso o en el teléfono → radio-card · muchas → select · sin texto → este.**
|
|
29
|
+
|
|
30
|
+
## Qué variante usar
|
|
31
|
+
|
|
32
|
+
> **La guía del DS lo define como control para «una sola selección de una lista corta de
|
|
33
|
+
> opciones»**, y su ejemplo con label es una lista de motivos para reportar algo («Spam»,
|
|
34
|
+
> «Acoso», «Infringe las reglas»). Muestra deshabilitado, con label y con label avanzado. No
|
|
35
|
+
> trae do/don't de tamaños.
|
|
36
|
+
>
|
|
37
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`):
|
|
38
|
+
> **2 `sui-radio` en 2 archivos**, ambos en modo suelto (`standaloneChecked`), con tamaño
|
|
39
|
+
> dinámico. Más **1 `<input type="radio">` nativo**.
|
|
40
|
+
|
|
41
|
+
### Estado y modo
|
|
42
|
+
|
|
43
|
+
| qué | cuándo | fuente |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| dentro de `sui-radio-group` + `[value]` | Siempre que haya más de una opción. El grupo hace la exclusión y se enchufa a `[(ngModel)]`. | según la guía del DS (es un radio group) |
|
|
46
|
+
| suelto con `[(standaloneChecked)]` | Solo cuando la exclusión la hace la fila o el padre (la fila de opciones del detalle de producto). **Suelto, al tocarlo se desmarca** como un checkbox. | propuesta, falta aprobación |
|
|
47
|
+
| `disabled` | La opción existe pero no aplica ahora (una variante agotada). | según la guía del DS |
|
|
48
|
+
|
|
49
|
+
### `size`
|
|
50
|
+
|
|
51
|
+
| size | px | cuándo | fuente |
|
|
52
|
+
|---|---|---|---|
|
|
53
|
+
| `xlarge` | 28 | Mobile, vía `bp.controlSize()`. | canon (aprobado por el dueño, 28-09-2026: «componentes grandes») |
|
|
54
|
+
| `large` | 24 | Desktop, vía `bp.controlSize()`. | canon (aprobado por el dueño, 28-09-2026) |
|
|
55
|
+
| `medium` (default) | 20 | Solo dentro de un componente que fija su escala (detalle de producto). Es el único tamaño de la guía. | según la guía del DS (único tamaño); el «cuándo» es propuesta |
|
|
56
|
+
|
|
57
|
+
**Usos de hoy que rompen la regla:**
|
|
58
|
+
|
|
59
|
+
- **1 radio nativo → `sui-radio-card type="basic"`:**
|
|
60
|
+
`pages/driver/driver-order-detail/driver-order-detail.html:812` (motivos de cancelación del
|
|
61
|
+
repartidor, el mismo caso del ejemplo de la guía). La pantalla hermana del local ya lo resolvió
|
|
62
|
+
así: `pages/orders/orders.html:566`.
|
|
63
|
+
- **1 suelto que se puede desincronizar:** `pages/super-admin/master-settings/master-settings.html:105`
|
|
64
|
+
(categoría por defecto). Usa `[standaloneChecked]` + `$event && …`: al tocar el que ya está
|
|
65
|
+
elegido, el círculo se apaga por dentro pero el padre sigue diciendo que es el elegido. Va en
|
|
66
|
+
un `sui-radio-group` con `[ngModel]`.
|
|
67
|
+
|
|
68
|
+
## Tamaño en mobile y en web
|
|
69
|
+
|
|
70
|
+
| uso | mobile | web |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| círculo en una fila o tabla | `xlarge` (28 px) | `large` (24 px) |
|
|
73
|
+
| dentro de un componente que fija su escala | lo que pase el padre | lo que pase el padre |
|
|
74
|
+
|
|
75
|
+
```html
|
|
76
|
+
<sui-radio [size]="bp.controlSize()" … /> <!-- isMobile() ? 'xlarge' : 'large' -->
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
El más grande mide 28 px: el área táctil de 44 px la tiene que dar la fila.
|
|
80
|
+
|
|
81
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
82
|
+
|
|
83
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| suelto (`standaloneChecked`) fuera de una fila propia | se desmarca al tocarlo de nuevo: no es un radio | nunca como grupo; solo como dibujo dentro de una fila que maneja el clic |
|
|
86
|
+
|
|
87
|
+
## API
|
|
88
|
+
|
|
89
|
+
<!-- api:inicio -->
|
|
90
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
91
|
+
|
|
92
|
+
### `sui-radio`
|
|
93
|
+
|
|
94
|
+
| input | tipo | default |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| `size` | `'medium' \| 'large' \| 'xlarge'` | `'medium'` |
|
|
97
|
+
| `value` | `SuiRadioValue` | `null` |
|
|
98
|
+
| `disabled` | `boolean` | `false` |
|
|
99
|
+
| `standaloneChecked` · model, `[(standaloneChecked)]` | `boolean` | `false` |
|
|
100
|
+
|
|
101
|
+
Outputs: ninguno.
|
|
102
|
+
|
|
103
|
+
### `sui-radio-group`
|
|
104
|
+
|
|
105
|
+
Inputs: ninguno.
|
|
106
|
+
|
|
107
|
+
Outputs: ninguno.
|
|
108
|
+
<!-- api:fin -->
|
|
109
|
+
|
|
110
|
+
`sui-radio-group`: sin inputs; implementa `ControlValueAccessor` (`[(ngModel)]`, `formControlName`)
|
|
111
|
+
y proyecta los radios (`sui-radio`, `sui-radio-label`, `sui-radio-card`).
|
|
112
|
+
|
|
113
|
+
## Trampas
|
|
114
|
+
|
|
115
|
+
- **Suelto, togglea.** `standaloneChecked` se invierte con cada toque: se puede desmarcar. Para
|
|
116
|
+
semántica de radio, `sui-radio-group`.
|
|
117
|
+
- **`sui-radio-group` no tiene `value`**: se maneja con `[(ngModel)]` o un form control.
|
|
118
|
+
- **`sui-radio-group` es `inline-flex` en fila con gap 16.** Para lista vertical hay que darle
|
|
119
|
+
`flex-direction: column; align-items: flex-start` desde afuera.
|
|
120
|
+
- **Deshabilitar el control del grupo no deshabilita los radios** (`setDisabledState` no hace
|
|
121
|
+
nada): pasa `[disabled]` a cada uno.
|
|
122
|
+
- No hay `small`: el más chico es `medium` (20 px).
|
|
123
|
+
- Sin marcar, en foco, el círculo se pinta del color de marca: viene del Figma, no es un error.
|
|
124
|
+
- No dibuja texto ni `aria-label`: pelado, pon el texto en un `<label>` o usa `sui-radio-label`.
|
|
125
|
+
|
|
126
|
+
## Ejemplo
|
|
127
|
+
|
|
128
|
+
```html
|
|
129
|
+
<sui-radio-group [(ngModel)]="categoriaPorDefecto">
|
|
130
|
+
@for (cat of categorias; track cat.id) {
|
|
131
|
+
<sui-radio [size]="bp.controlSize()" [value]="cat.id" [attr.aria-label]="cat.nombre" />
|
|
132
|
+
}
|
|
133
|
+
</sui-radio-group>
|
|
134
|
+
```
|