@ajuarezso/sui-design-system 0.24.1 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/sui-accordion/README.md +85 -11
- package/docs/sui-activity-feed/README.md +65 -11
- package/docs/sui-activity-filter/README.md +54 -5
- package/docs/sui-alert/README.md +54 -0
- package/docs/sui-app-store-badge/README.md +64 -10
- package/docs/sui-avatar/README.md +92 -29
- package/docs/sui-avatar-group/README.md +75 -9
- package/docs/sui-badge/README.md +85 -17
- package/docs/sui-banner/README.md +85 -20
- package/docs/sui-brand-logo/README.md +95 -31
- package/docs/sui-breadcrumb-item/README.md +54 -3
- package/docs/sui-breadcrumbs/README.md +54 -6
- package/docs/sui-button/README.md +76 -12
- package/docs/sui-button-group/README.md +91 -23
- package/docs/sui-button-group-item/README.md +81 -14
- package/docs/sui-card/README.md +105 -18
- package/docs/sui-chart-legend/README.md +63 -10
- package/docs/sui-chart-legend-dot/README.md +59 -10
- package/docs/sui-checkbox/README.md +109 -29
- package/docs/sui-checkbox-card/README.md +70 -14
- package/docs/sui-checkbox-label/README.md +92 -26
- package/docs/sui-circular-progress-bar/README.md +80 -19
- package/docs/sui-color-dot/README.md +72 -12
- package/docs/sui-color-picker/README.md +71 -13
- package/docs/sui-command-menu-footer/README.md +50 -1
- package/docs/sui-command-menu-item/README.md +74 -14
- package/docs/sui-command-menu-search/README.md +58 -3
- package/docs/sui-compact-avatar-group/README.md +73 -13
- package/docs/sui-compact-button/README.md +123 -34
- package/docs/sui-compact-select/README.md +61 -7
- package/docs/sui-compact-select-for-input/README.md +70 -6
- package/docs/sui-content-card/README.md +75 -14
- package/docs/sui-content-divider/README.md +67 -16
- package/docs/sui-content-label/README.md +99 -20
- package/docs/sui-counter-input/README.md +102 -18
- package/docs/sui-date-selector/README.md +69 -11
- package/docs/sui-datepicker/README.md +85 -18
- package/docs/sui-day-cell/README.md +75 -17
- package/docs/sui-day-label/README.md +56 -7
- package/docs/sui-divider/README.md +64 -9
- package/docs/sui-drawer-footer/README.md +63 -2
- package/docs/sui-drawer-header/README.md +69 -12
- package/docs/sui-dropdown-caption/README.md +58 -6
- package/docs/sui-dropdown-item/README.md +75 -9
- package/docs/sui-dropdown-menu/README.md +83 -14
- package/docs/sui-dropdown-search/README.md +60 -4
- package/docs/sui-emoji/README.md +94 -30
- package/docs/sui-empty-state/README.md +71 -7
- package/docs/sui-fancy-button/README.md +74 -14
- package/docs/sui-file-icon/README.md +70 -12
- package/docs/sui-file-upload/README.md +77 -17
- package/docs/sui-file-upload-card/README.md +64 -12
- package/docs/sui-filter/README.md +83 -14
- package/docs/sui-flag/README.md +73 -8
- package/docs/sui-form-hint/README.md +56 -7
- package/docs/sui-form-label/README.md +57 -5
- package/docs/sui-href/README.md +47 -0
- package/docs/sui-icon/README.md +86 -18
- package/docs/sui-image-upload/README.md +90 -22
- package/docs/sui-image-upload-profile/README.md +70 -11
- package/docs/sui-img-retry/README.md +50 -1
- package/docs/sui-inline-input/README.md +67 -9
- package/docs/sui-inline-select/README.md +62 -2
- package/docs/sui-input/README.md +90 -27
- package/docs/sui-integration-switch/README.md +84 -17
- package/docs/sui-kbd/README.md +73 -9
- package/docs/sui-key-icon/README.md +85 -23
- package/docs/sui-link-button/README.md +96 -27
- package/docs/sui-logo/README.md +93 -22
- package/docs/sui-modal/README.md +72 -13
- package/docs/sui-modal-footer/README.md +86 -12
- package/docs/sui-modal-header/README.md +57 -1
- package/docs/sui-modal-sheet/README.md +74 -12
- package/docs/sui-notification/README.md +81 -11
- package/docs/sui-notification-footer/README.md +55 -5
- package/docs/sui-notification-tab-menu/README.md +61 -5
- package/docs/sui-otp-input/README.md +70 -9
- package/docs/sui-page-header/README.md +89 -19
- package/docs/sui-pagination/README.md +73 -13
- package/docs/sui-password-strength/README.md +50 -1
- package/docs/sui-payment-icon/README.md +80 -18
- package/docs/sui-period-range/README.md +70 -11
- package/docs/sui-popover/README.md +81 -15
- package/docs/sui-product-card/README.md +89 -21
- package/docs/sui-progress-bar/README.md +82 -15
- package/docs/sui-progress-bar-label/README.md +79 -18
- package/docs/sui-radio/README.md +84 -7
- package/docs/sui-radio-card/README.md +70 -16
- package/docs/sui-radio-label/README.md +89 -22
- package/docs/sui-rating/README.md +101 -31
- package/docs/sui-rich-editor/README.md +47 -2
- package/docs/sui-segmented-control/README.md +90 -21
- package/docs/sui-select/README.md +80 -11
- package/docs/sui-sidebar/README.md +71 -16
- package/docs/sui-slider/README.md +75 -8
- package/docs/sui-social-button/README.md +71 -11
- package/docs/sui-status-badge/README.md +75 -14
- package/docs/sui-stepper/README.md +75 -18
- package/docs/sui-store-card/README.md +85 -22
- package/docs/sui-switch/README.md +82 -11
- package/docs/sui-switch-card/README.md +80 -16
- package/docs/sui-switch-label/README.md +91 -14
- package/docs/sui-tab-chips/README.md +93 -21
- package/docs/sui-tab-menu-horizontal/README.md +68 -7
- package/docs/sui-tab-menu-vertical/README.md +64 -11
- package/docs/sui-table/README.md +77 -16
- package/docs/sui-tag/README.md +86 -12
- package/docs/sui-tag-input/README.md +77 -13
- package/docs/sui-textarea/README.md +84 -17
- package/docs/sui-time-picker/README.md +96 -33
- package/docs/sui-toast/README.md +81 -20
- package/docs/sui-tooltip/README.md +80 -22
- package/docs/sui-topbar/README.md +64 -10
- package/docs/sui-topbar-button/README.md +61 -7
- package/docs/sui-topbar-item/README.md +68 -7
- package/docs/sui-topbar-user/README.md +61 -5
- package/fesm2022/ajuarezso-sui-design-system.mjs +15 -10
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +7 -3
|
@@ -24,7 +24,7 @@ Story: [Molecules/Chart/Chart Legend Dot](https://sui-design-system.web.app/?pat
|
|
|
24
24
|
## Qué variante usar
|
|
25
25
|
|
|
26
26
|
> La guía del DS no tiene página para este componente: sale del Figma del DS (set «Chart Legend
|
|
27
|
-
> Dots»).
|
|
27
|
+
> Dots»). Las reglas de abajo son **canon** (cada fila dice de qué aprobación sale), salvo lo marcado «según el componente».
|
|
28
28
|
>
|
|
29
29
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos sueltos** (sí dentro de la única
|
|
30
30
|
> `sui-chart-legend`), y **3 puntos de serie hechos a mano** fuera de una leyenda.
|
|
@@ -37,23 +37,23 @@ Cada color apunta al mismo estado de la paleta que en `sui-badge`. En un gráfic
|
|
|
37
37
|
| color | estado de la paleta | cuándo | fuente |
|
|
38
38
|
|---|---|---|---|
|
|
39
39
|
| `blue` | information | Primera serie de categorías sin carga (el orden automático arranca aquí). | según el componente (orden) |
|
|
40
|
-
| `orange` | warning | Pendiente; o segunda serie de categorías. | canon (significado del badge) · como serie de categorías:
|
|
40
|
+
| `orange` | warning | Pendiente; o segunda serie de categorías. | canon (significado del badge) · como serie de categorías: canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
41
41
|
| `red` | error | Cancelado, rechazado, fallido. | canon (significado del badge) |
|
|
42
42
|
| `green` | success | Entregado, pagado, aprobado. | canon (significado del badge) |
|
|
43
|
-
| `yellow` | away | En pausa; o una serie más de categorías. | canon (significado del badge) · como serie de categorías:
|
|
44
|
-
| `purple` | feature | Lo nuevo; o una serie más de categorías. | canon (significado del badge) · como serie de categorías:
|
|
45
|
-
| `sky` · `pink` · `teal` | verified · highlighted · stable | Series de categorías a partir de la séptima. |
|
|
46
|
-
| `gray` (default) | faded | «Otros» o «Sin categoría»: lo que no se reparte. |
|
|
47
|
-
| `light-gray` | — | No usar: es el mismo gris del apagado. **Cuándo sí:** el resto de una barra de progreso partida («lo que falta»). |
|
|
43
|
+
| `yellow` | away | En pausa; o una serie más de categorías. | canon (significado del badge) · como serie de categorías: canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
44
|
+
| `purple` | feature | Lo nuevo; o una serie más de categorías. | canon (significado del badge) · como serie de categorías: canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
45
|
+
| `sky` · `pink` · `teal` | verified · highlighted · stable | Series de categorías a partir de la séptima. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
46
|
+
| `gray` (default) | faded | «Otros» o «Sin categoría»: lo que no se reparte. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
47
|
+
| `light-gray` | — | No usar: es el mismo gris del apagado. **Cuándo sí:** el resto de una barra de progreso partida («lo que falta»). | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
48
48
|
| `disabled` | — | Una serie sin datos o apagada. Dentro de `sui-chart-legend` va por `disabled: true`, no por color. | según el componente |
|
|
49
|
-
| `customColor` | el color que ya usa el gráfico | Solo si el gráfico tiene paleta propia; gana sobre `color`. |
|
|
49
|
+
| `customColor` | el color que ya usa el gráfico | Solo si el gráfico tiene paleta propia; gana sobre `color`. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
50
50
|
|
|
51
51
|
### `size`
|
|
52
52
|
|
|
53
53
|
| size | cuándo | fuente |
|
|
54
54
|
|---|---|---|
|
|
55
55
|
| `small` (16 px) | Junto a texto de 12 (como en la leyenda, que lo usa siempre). | según el componente |
|
|
56
|
-
| `medium` (20 px, default) | Junto a texto de 14: filas y tablas. |
|
|
56
|
+
| `medium` (20 px, default) | Junto a texto de 14: filas y tablas. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
57
57
|
|
|
58
58
|
El círculo de color mide 12 px en los dos tamaños: lo que cambia es el aire alrededor.
|
|
59
59
|
|
|
@@ -71,11 +71,21 @@ Es decorativo y no se toca: no tiene mínimo para el dedo.
|
|
|
71
71
|
|
|
72
72
|
| uso | mobile | web | fuente |
|
|
73
73
|
|---|---|---|---|
|
|
74
|
-
| fila de resumen o tabla | `medium` (20) | `medium` (20) |
|
|
74
|
+
| fila de resumen o tabla | `medium` (20) | `medium` (20) | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
75
75
|
| junto a texto de 12 | `small` (16) | `small` (16) | según el componente |
|
|
76
76
|
|
|
77
77
|
No cambia por plataforma: va con el tamaño del texto que acompaña, no con la pantalla.
|
|
78
78
|
|
|
79
|
+
### Por dispositivo (D16)
|
|
80
|
+
|
|
81
|
+
No aplica: el tamaño va con el texto de al lado (`medium` junto a 14, `small` junto a 12, como en la
|
|
82
|
+
leyenda), igual en celular chico, celular, tablet, computadora y ultrawide. Es lo que no se toca, y
|
|
83
|
+
`medium` ya es su size más grande: el paso extra del celular (P1 b) no tiene a dónde subir (D16,
|
|
84
|
+
dueño 05-10-2026).
|
|
85
|
+
|
|
86
|
+
En master-pedidos: no hay helper; el `size` va literal según el texto (`size="small"` junto a 12, o
|
|
87
|
+
nada para `medium`).
|
|
88
|
+
|
|
79
89
|
## «No usar»: por qué no hoy y cuándo sí
|
|
80
90
|
|
|
81
91
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -110,6 +120,45 @@ Constantes exportadas: `SUI_CHART_LEGEND_COLORS` (los 11 colores en el orden del
|
|
|
110
120
|
- `SUI_CHART_LEGEND_HEX` tiene los hex del modo claro: en modo oscuro no se invierten.
|
|
111
121
|
- Es decorativo (`aria-hidden`): el significado lo dice el texto de al lado.
|
|
112
122
|
|
|
123
|
+
## Bien y mal
|
|
124
|
+
|
|
125
|
+
Punto de una serie fuera de la leyenda
|
|
126
|
+
|
|
127
|
+
```html
|
|
128
|
+
<!-- ❌ mal: punto hecho a mano, sin anillo ni sombra (components/customer-retention/customer-retention.html:17) -->
|
|
129
|
+
<span class="customer-retention__stat-dot" [style.background]="seg.color"></span>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```html
|
|
133
|
+
<!-- ✅ bien -->
|
|
134
|
+
<sui-chart-legend-dot [customColor]="seg.color" />
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Punto sin `color`
|
|
138
|
+
|
|
139
|
+
```html
|
|
140
|
+
<!-- ❌ mal: sin color sale el default gray, no el verde de la serie -->
|
|
141
|
+
<span class="fila"><sui-chart-legend-dot /> Entregados <b>86 %</b></span>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
```html
|
|
145
|
+
<!-- ✅ bien -->
|
|
146
|
+
<span class="fila"><sui-chart-legend-dot color="green" /> Entregados <b>86 %</b></span>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Varios puntos sueltos que hacen de leyenda
|
|
150
|
+
|
|
151
|
+
```html
|
|
152
|
+
<!-- ❌ mal: es una leyenda armada a mano con puntos sueltos -->
|
|
153
|
+
<span><sui-chart-legend-dot color="blue" size="small" /> Yape</span>
|
|
154
|
+
<span><sui-chart-legend-dot color="orange" size="small" /> Efectivo</span>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
```html
|
|
158
|
+
<!-- ✅ bien -->
|
|
159
|
+
<sui-chart-legend [items]="[{ label: 'Yape' }, { label: 'Efectivo' }]" />
|
|
160
|
+
```
|
|
161
|
+
|
|
113
162
|
## Ejemplo
|
|
114
163
|
|
|
115
164
|
```html
|
|
@@ -34,11 +34,13 @@ Regla corta: **se suma y se confirma después → checkbox · se aplica ya → s
|
|
|
34
34
|
> avanzado (sublabel, badge, descripción y link). Lo marcado «según la guía del DS» sale de ahí;
|
|
35
35
|
> el resto es canon del dueño o propuesta.
|
|
36
36
|
>
|
|
37
|
-
> Uso medido el 03-10-2026 en `master-pedidos/src/app`, sin contar
|
|
38
|
-
> (`master-preview`, `master-prototipos`, `mockup-sheets-*`, `dx/*`,
|
|
39
|
-
> `master-medico`, `dev-index`): **
|
|
40
|
-
>
|
|
41
|
-
> `
|
|
37
|
+
> Uso medido el 03-10-2026 y revisado el 06-10-2026 en `master-pedidos/src/app`, sin contar
|
|
38
|
+
> prototipos ni vitrinas (`master-preview`, `master-prototipos`, `mockup-sheets-*`, `dx/*`,
|
|
39
|
+
> `_guia-*`, `master-rutina`, `master-medico`, `dev-index`): **queda 1 `sui-checkbox`**, el de la
|
|
40
|
+
> fila de opciones del detalle de producto, con el `size()` que le pasa el padre (`bp.controlSize()`
|
|
41
|
+
> en la carta del cliente, `ctrlSize()` en la vista previa del modal de producto). Los otros 4 del
|
|
42
|
+
> 03-10 eran casillas con texto armadas a mano y ya pasaron a `sui-checkbox-label`. Quedan además
|
|
43
|
+
> **2 `<input type="checkbox">` nativos** que no deberían serlo (ver abajo).
|
|
42
44
|
|
|
43
45
|
### Lo que sí dice la guía del DS
|
|
44
46
|
|
|
@@ -52,32 +54,37 @@ Regla corta: **se suma y se confirma después → checkbox · se aplica ya → s
|
|
|
52
54
|
| estado | cuándo | fuente |
|
|
53
55
|
|---|---|---|
|
|
54
56
|
| sin marcar / marcado | Lo normal. `[(checked)]` o `formControlName`. | según la guía del DS |
|
|
55
|
-
| `indeterminate` | Solo en el «seleccionar todo» de una lista cuando hay algunas marcadas y otras no. Se ve un guion. Hoy no usar (0 casos, ver abajo). |
|
|
56
|
-
| `disabled` | La opción existe pero hoy no se puede tocar (un producto agotado en las opciones de un plato). Decir por qué cerca. | según la guía del DS (existe); el «cuándo
|
|
57
|
+
| `indeterminate` | Solo en el «seleccionar todo» de una lista cuando hay algunas marcadas y otras no. Se ve un guion. Hoy no usar (0 casos, ver abajo). | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
58
|
+
| `disabled` | La opción existe pero hoy no se puede tocar (un producto agotado en las opciones de un plato). Decir por qué cerca. | según la guía del DS (existe); el «cuándo»: canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
57
59
|
|
|
58
60
|
### `size`
|
|
59
61
|
|
|
60
62
|
| size | px | cuándo | fuente |
|
|
61
63
|
|---|---|---|---|
|
|
62
|
-
| `xlarge` | 28 |
|
|
63
|
-
| `large` | 24 |
|
|
64
|
-
| `medium` (default) | 20 | Solo dentro de un componente que ya fija su escala
|
|
64
|
+
| `xlarge` | 28 | Celular y tablet táctil (D16). | canon (aprobado por el dueño, 28-09-2026: «componentes grandes») |
|
|
65
|
+
| `large` | 24 | Computadora (D16). | canon (aprobado por el dueño, 28-09-2026) |
|
|
66
|
+
| `medium` (default) | 20 | Solo dentro de un componente que ya fija su escala. Hoy no hay ninguno: la fila de opciones del detalle de producto recibe el `size` del padre, que es el de D16. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
65
67
|
| `small` | 16 | No usar (ver abajo). | canon (aprobado por el dueño, 28-09-2026) |
|
|
66
68
|
|
|
67
|
-
Regla: **`[size]="bp.
|
|
69
|
+
Regla: **`[size]="bp.tactil() ? 'xlarge' : 'large'"`** en toda pantalla (la expresión exacta de
|
|
70
|
+
D16, ver «Por dispositivo»). El único `sui-checkbox` de hoy no la lleva escrita: recibe el `size()`
|
|
71
|
+
del detalle de producto, y ese padre recibe `bp.controlSize()` o `ctrlSize()`.
|
|
68
72
|
|
|
69
|
-
**Usos de hoy
|
|
73
|
+
**Usos de hoy frente a la regla de componente** (revisado 06-10-2026):
|
|
70
74
|
|
|
71
|
-
- **4 `sui-checkbox` envueltos en un `<label>`
|
|
72
|
-
`pages/settings/team/team.html:
|
|
73
|
-
`components/option-sections-manager/option-sections-manager.html:
|
|
74
|
-
(productos).
|
|
75
|
-
|
|
75
|
+
- **Los 4 `sui-checkbox` envueltos en un `<label>` a mano ya pasaron a `sui-checkbox-label`** con
|
|
76
|
+
su tamaño: `pages/settings/team/team.html:237` y `:309` (permisos, `[size]="bp.controlSize()"`),
|
|
77
|
+
`components/option-sections-manager/option-sections-manager.html:190` (categorías) y `:212`
|
|
78
|
+
(productos). Estos dos usan `ctrlSize()`, una copia local de `bp.controlSize()`
|
|
79
|
+
(`option-sections-manager.ts:62`): da lo mismo, pero conviene usar el helper del servicio.
|
|
80
|
+
Antes, tocar el texto no marcaba nada: un `<label>` solo activa controles nativos y
|
|
81
|
+
`sui-checkbox` no lo es, así que solo respondía la casilla. `sui-checkbox-label` hace que toda
|
|
82
|
+
la fila responda.
|
|
76
83
|
- **1 checkbox nativo → `sui-checkbox-label`:** `pages/sales-channels/facebook/facebook.html:69`
|
|
77
|
-
(«Qué se sincroniza»).
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
84
|
+
(«Qué se sincroniza»). **Al migrarlo, pásale el tamaño:** `sui-checkbox-label` arranca en
|
|
85
|
+
`medium` (casilla de 20); sin `[size]` queda chico en el celular.
|
|
86
|
+
- **1 checkbox nativo que en realidad es un interruptor → `sui-switch-label`:**
|
|
87
|
+
`components/settings-panel/settings-panel.html:99` (notificaciones push, se aplica al instante).
|
|
81
88
|
- El de `components/product-detail-view/product-detail-view.html:204` está bien pelado: la fila
|
|
82
89
|
es propia (foto, nombre, precio) y es la fila la que recibe el clic.
|
|
83
90
|
|
|
@@ -89,14 +96,38 @@ que lo contiene. En web va un escalón más chico.
|
|
|
89
96
|
| uso | mobile | web |
|
|
90
97
|
|---|---|---|
|
|
91
98
|
| casilla en una lista, tabla o fila de formulario | `xlarge` (28 px) | `large` (24 px) |
|
|
92
|
-
| dentro de un componente que
|
|
99
|
+
| dentro de un componente que recibe su `size` del padre (fila de opciones del detalle de producto) | lo que pase el padre | lo que pase el padre |
|
|
93
100
|
|
|
94
101
|
```html
|
|
95
|
-
<sui-checkbox [size]="bp.
|
|
102
|
+
<sui-checkbox [size]="bp.tactil() ? 'xlarge' : 'large'" … /> <!-- tactil() = isMobile() || pointer: coarse -->
|
|
96
103
|
```
|
|
97
104
|
|
|
98
|
-
El más grande mide 28 px: ningún tamaño llega a 44 px por sí solo. La fila
|
|
99
|
-
|
|
105
|
+
El más grande mide 28 px: ningún tamaño llega a 44 px por sí solo. La fila que lo
|
|
106
|
+
contiene tiene que medir al menos 44 px de alto para que el toque sea cómodo.
|
|
107
|
+
|
|
108
|
+
### Por dispositivo (D16)
|
|
109
|
+
|
|
110
|
+
Fila de `checkbox` en la tabla de D16 (dueño, 05-10-2026; computadora resuelta el 06-10-2026): se
|
|
111
|
+
toca, y en la computadora va **un paso menos que en el celular**, sin bajar a `medium`.
|
|
112
|
+
|
|
113
|
+
| dispositivo | size | nota |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| celular chico (< 380 px) | `xlarge` (28) | la fila que lo contiene da los 44 de alto |
|
|
116
|
+
| celular (380–767 px) | `xlarge` (28) | |
|
|
117
|
+
| tablet táctil (`pointer: coarse`) | `xlarge` (28) | Apple pide 44 pt también en iPad; la fila da el alto |
|
|
118
|
+
| computadora (`pointer: fine`) | `large` (24) | un paso menos que el celular (dueño, 06-10-2026) |
|
|
119
|
+
|
|
120
|
+
Ultrawide (≥ 1920 px): igual que la computadora, `large`. `small` no se usa en ningún dispositivo;
|
|
121
|
+
`medium` solo si un padre fija su propia escala (el detalle de producto hoy no lo hace: recibe el
|
|
122
|
+
tamaño de D16 de su padre).
|
|
123
|
+
|
|
124
|
+
En master-pedidos, la expresión que da esta tabla completa es
|
|
125
|
+
**`[size]="bp.tactil() ? 'xlarge' : 'large'"`** (`bp.tactil()` = celular por ancho o pantalla
|
|
126
|
+
táctil). La fila de D16 nombra `bp.controlSize()`, que es lo que llevan hoy los usos de la app: da
|
|
127
|
+
lo mismo en el celular y en la computadora, pero mira solo el ancho (≤ 767 px), así que en un iPad
|
|
128
|
+
de 768 o más devuelve `large` y no `xlarge`. Para que la tabla se cumpla en la tablet hay dos
|
|
129
|
+
caminos: escribir la expresión de arriba, o que `controlSize()` pase a mirar `tactil()` en el
|
|
130
|
+
servicio. Eso último cambia todos los usos de golpe y es decisión del dueño.
|
|
100
131
|
|
|
101
132
|
## «No usar»: por qué no hoy y cuándo sí
|
|
102
133
|
|
|
@@ -105,7 +136,7 @@ cae en la columna de la derecha, se usa.
|
|
|
105
136
|
|
|
106
137
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
107
138
|
|---|---|---|
|
|
108
|
-
| `size="small"` (16 px) | en el teléfono se pierde y no llega al área táctil (el dueño pidió controles grandes) | una tabla
|
|
139
|
+
| `size="small"` (16 px) | en el teléfono se pierde y no llega al área táctil (el dueño pidió controles grandes), y es chico (D16, 05-10-2026) | nunca: una tabla del super admin con selección por fila también va con la casilla de web |
|
|
109
140
|
| `indeterminate` (0 usos) | ninguna lista tiene «seleccionar todo» | el «seleccionar todo» de una lista de productos o pedidos con acciones en lote |
|
|
110
141
|
|
|
111
142
|
## API
|
|
@@ -129,7 +160,10 @@ Implementa `ControlValueAccessor`: funciona con `[(ngModel)]` y `formControlName
|
|
|
129
160
|
## Trampas
|
|
130
161
|
|
|
131
162
|
- **No tiene `label`.** Para el texto está `sui-checkbox-label`. Y el host lleva `role="checkbox"`
|
|
132
|
-
sin `aria-label` propio: pelado, ponle `aria-label="…"` o
|
|
163
|
+
sin `aria-label` propio: pelado, ponle `aria-label="…"` (o `aria-labelledby` apuntando al texto
|
|
164
|
+
de la fila). **Un `<label>` que lo envuelva no sirve**: `<label>` solo activa y nombra controles
|
|
165
|
+
nativos, y `sui-checkbox` es un elemento propio con `role="checkbox"`. Tocar el texto no lo marca
|
|
166
|
+
y el lector de pantalla no lo asocia.
|
|
133
167
|
- **`checked` es model; `indeterminate` es input.** Hay `[(checked)]` pero no `[(indeterminate)]`,
|
|
134
168
|
y el componente **no limpia el guion solo** al tocarlo: mientras `indeterminate` siga en `true`
|
|
135
169
|
se ve el guion aunque cambie `checked`.
|
|
@@ -141,12 +175,58 @@ Implementa `ControlValueAccessor`: funciona con `[(ngModel)]` y `formControlName
|
|
|
141
175
|
- El tilde es un SVG dibujado a mano: no se cambia el ícono.
|
|
142
176
|
- Ya trae el arreglo de iOS para el `:active` pegado: no lo agregues.
|
|
143
177
|
|
|
178
|
+
## Bien y mal
|
|
179
|
+
|
|
180
|
+
Casilla con su texto
|
|
181
|
+
|
|
182
|
+
```html
|
|
183
|
+
<!-- ❌ mal: nativo dentro de un <label> hecho a mano (pages/sales-channels/facebook/facebook.html:69) -->
|
|
184
|
+
<label class="fb-channel__sync-item">
|
|
185
|
+
<input type="checkbox" [checked]="item.checked" (change)="toggleSync(item.id)" />
|
|
186
|
+
<span>{{ item.label }}</span>
|
|
187
|
+
</label>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
```html
|
|
191
|
+
<!-- ✅ bien -->
|
|
192
|
+
<sui-checkbox-label [size]="bp.tactil() ? 'xlarge' : 'large'" [label]="item.label"
|
|
193
|
+
[active]="item.checked" (activeChange)="toggleSync(item.id)" />
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Algo que se aplica al instante
|
|
197
|
+
|
|
198
|
+
```html
|
|
199
|
+
<!-- ❌ mal: casilla nativa pintada de interruptor para las notificaciones (components/settings-panel/settings-panel.html:99) -->
|
|
200
|
+
<label class="sp__toggle">
|
|
201
|
+
<input type="checkbox" [checked]="pushEnabled()" (change)="togglePush(!pushEnabled())" />
|
|
202
|
+
</label>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
```html
|
|
206
|
+
<!-- ✅ bien: se aplica ya → switch, no checkbox -->
|
|
207
|
+
<sui-switch-label [size]="bp.tactil() ? 'xlarge' : 'large'" label="Notificaciones push"
|
|
208
|
+
[active]="pushEnabled()" (activeChange)="togglePush($event)" />
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
«Seleccionar todo» de una lista
|
|
212
|
+
|
|
213
|
+
```html
|
|
214
|
+
<!-- ❌ mal: el guion fijo no se limpia al tocar la casilla, y pelada no tiene nombre -->
|
|
215
|
+
<sui-checkbox [size]="bp.tactil() ? 'xlarge' : 'large'" [indeterminate]="true" [(checked)]="todas" />
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
```html
|
|
219
|
+
<!-- ✅ bien -->
|
|
220
|
+
<sui-checkbox [size]="bp.tactil() ? 'xlarge' : 'large'" aria-label="Seleccionar todo"
|
|
221
|
+
[indeterminate]="algunas() && !todas()" [checked]="todas()" (checkedChange)="marcarTodas($event)" />
|
|
222
|
+
```
|
|
223
|
+
|
|
144
224
|
## Ejemplo
|
|
145
225
|
|
|
146
226
|
```html
|
|
147
227
|
<!-- Pelado, el texto vive en la fila (celda de tabla, fila propia) -->
|
|
148
|
-
<sui-checkbox [size]="bp.
|
|
228
|
+
<sui-checkbox [size]="bp.tactil() ? 'xlarge' : 'large'" [(checked)]="seleccionado" aria-label="Elegir pedido" />
|
|
149
229
|
|
|
150
230
|
<!-- Con texto: usa sui-checkbox-label, no esto a mano -->
|
|
151
|
-
<sui-checkbox-label label="Gestionar productos" [(active)]="puedeProductos" />
|
|
231
|
+
<sui-checkbox-label [size]="bp.tactil() ? 'xlarge' : 'large'" label="Gestionar productos" [(active)]="puedeProductos" />
|
|
152
232
|
```
|
|
@@ -44,23 +44,23 @@ una → radio-card.**
|
|
|
44
44
|
|
|
45
45
|
| type | cuándo | fuente |
|
|
46
46
|
|---|---|---|
|
|
47
|
-
| `left-icon` (`icon`, `emoji` o `iconSrc`) | Lo normal: un ícono que dice de qué va la opción. |
|
|
48
|
-
| `basic` | Un ajuste o una opción de texto que se guarda con un botón y no necesita ícono («Pausar los pedidos» en master-settings). |
|
|
49
|
-
| `company` | Un medio de pago o servicio con su logo redondo (Yape, Plin). El logo lo proyectas tú con `slot="leading"`. |
|
|
50
|
-
| `avatar` (`imageUrl`) | Ver «No usar». |
|
|
51
|
-
| `card-provider`, `brand` | Ver «No usar». El logo lo proyectas tú con `slot="leading"`. |
|
|
47
|
+
| `left-icon` (`icon`, `emoji` o `iconSrc`) | Lo normal: un ícono que dice de qué va la opción. | canon (aprobado por el dueño, 05-10-2026, bloque B2) (6 de hoy) |
|
|
48
|
+
| `basic` | Un ajuste o una opción de texto que se guarda con un botón y no necesita ícono («Pausar los pedidos» en master-settings). | canon (aprobado por el dueño, 05-10-2026, bloque B2) (5 de hoy) |
|
|
49
|
+
| `company` | Un medio de pago o servicio con su logo redondo (Yape, Plin). El logo lo proyectas tú con `slot="leading"`. | canon (aprobado por el dueño, 05-10-2026, bloque B2) (2 de hoy) |
|
|
50
|
+
| `avatar` (`imageUrl`) | Ver «No usar». | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
51
|
+
| `card-provider`, `brand` | Ver «No usar». El logo lo proyectas tú con `slot="leading"`. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
52
52
|
|
|
53
53
|
### Las piezas
|
|
54
54
|
|
|
55
55
|
| prop | cuándo | fuente |
|
|
56
56
|
|---|---|---|
|
|
57
|
-
| `label` | Siempre. El nombre de la opción: «Delivery». |
|
|
58
|
-
| `description` | Lo que significa elegirla: «Llevas los pedidos a la dirección del cliente». |
|
|
59
|
-
| `sublabel` | Precisión corta entre paréntesis. |
|
|
60
|
-
| `badge` | Marca una opción frente a las otras («Nuevo»). Con string sale azul `light`. |
|
|
61
|
-
| `indeterminate` | Una casilla que resume a otras («Todos los días» con algunos marcados). |
|
|
62
|
-
| `disabled` | La opción no aplica hoy; di por qué en la `description`. |
|
|
63
|
-
| `checked` | `[checked]` + `(checkedChange)`, o `[(checked)]`, o `formControlName`. |
|
|
57
|
+
| `label` | Siempre. El nombre de la opción: «Delivery». | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
58
|
+
| `description` | Lo que significa elegirla: «Llevas los pedidos a la dirección del cliente». | canon (aprobado por el dueño, 05-10-2026, bloque B4) (8 de hoy) |
|
|
59
|
+
| `sublabel` | Precisión corta entre paréntesis. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
60
|
+
| `badge` | Marca una opción frente a las otras («Nuevo»). Con string sale azul `light`. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
61
|
+
| `indeterminate` | Una casilla que resume a otras («Todos los días» con algunos marcados). | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
62
|
+
| `disabled` | La opción no aplica hoy; di por qué en la `description`. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
63
|
+
| `checked` | `[checked]` + `(checkedChange)`, o `[(checked)]`, o `formControlName`. | según el código |
|
|
64
64
|
|
|
65
65
|
### `size` (la casilla de adentro)
|
|
66
66
|
|
|
@@ -71,7 +71,7 @@ una → radio-card.**
|
|
|
71
71
|
| `medium` (default), `small` | No usar en pantallas nuevas. | canon (aprobado por el dueño, 28-09-2026) |
|
|
72
72
|
|
|
73
73
|
**Usos de hoy que rompen las reglas: 0.** El que iba sin `size`
|
|
74
|
-
(`pages/super-admin/master-administrados/master-administrados.html:
|
|
74
|
+
(`pages/super-admin/master-administrados/master-administrados.html:171`) y los switch-cards que se
|
|
75
75
|
guardaban con un botón se corrigieron el 03-10-2026.
|
|
76
76
|
|
|
77
77
|
## Tamaño en mobile y en web
|
|
@@ -88,13 +88,27 @@ sola. El `size` cambia solo la casilla.
|
|
|
88
88
|
<sui-checkbox-card [size]="bp.controlSize()" … /> <!-- isMobile() ? 'xlarge' : 'large' -->
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
+
### Por dispositivo (D16)
|
|
92
|
+
|
|
93
|
+
| dispositivo | size | nota |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| celular chico (< 380) | `xlarge` | la card entera ya pasa de 44; el size solo agranda la casilla |
|
|
96
|
+
| celular (380–767) | `xlarge` | |
|
|
97
|
+
| tablet táctil (`pointer: coarse`) | `xlarge` | `bp.controlSize()` mira solo el ancho: un iPad de 768 o más recibe `large` hasta que el helper mire el puntero |
|
|
98
|
+
| computadora (`pointer: fine`) | `large` | un paso menos que el celular; no baja a `medium` (D16, dueño 06-10-2026) |
|
|
99
|
+
|
|
100
|
+
Ultrawide: igual que la computadora (`large`).
|
|
101
|
+
|
|
102
|
+
En master-pedidos: `[size]="bp.controlSize()"` (`xlarge` hasta 767 px, `large` desde ahí). La
|
|
103
|
+
expresión exacta de D16, con la tablet, es `bp.tactil() ? 'xlarge' : 'large'`.
|
|
104
|
+
|
|
91
105
|
## «No usar»: por qué no hoy y cuándo sí
|
|
92
106
|
|
|
93
107
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
94
108
|
|---|---|---|
|
|
95
109
|
| `type="avatar"` (0 usos) | no se elige gente de a varios | elegir a varios repartidores para mandarles un aviso |
|
|
96
110
|
| `type="brand"` / `"card-provider"` (0 usos) | no hay integraciones ni tarjetas | prender varias integraciones a la vez (logo proyectado), aceptar varias marcas de tarjeta |
|
|
97
|
-
| `size="medium"` / `"small"` | la casilla se pierde en el teléfono |
|
|
111
|
+
| `size="medium"` / `"small"` | la casilla se pierde en el teléfono | no hay: en la computadora va `large` (D16, dueño 06-10-2026) |
|
|
98
112
|
|
|
99
113
|
## API
|
|
100
114
|
|
|
@@ -141,6 +155,48 @@ Slot: `[slot=leading]` (solo para `card-provider`, `brand` y `company`). Impleme
|
|
|
141
155
|
derecha solo dibuja el estado, va oculta al lector y fuera del Tab (`[focusable]="false"`).
|
|
142
156
|
Hasta el 04-10-2026 quedaba enfocable con `aria-hidden` y ahí Espacio no marcaba nada.
|
|
143
157
|
|
|
158
|
+
## Bien y mal
|
|
159
|
+
|
|
160
|
+
Card sin `size`
|
|
161
|
+
|
|
162
|
+
```html
|
|
163
|
+
<!-- ❌ mal: sin size queda la casilla medium de 20 (así estaba pages/super-admin/master-administrados/master-administrados.html:171 hasta el 03-10-2026) -->
|
|
164
|
+
<sui-checkbox-card type="left-icon" icon="motorbike-line" label="Delivery" />
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
```html
|
|
168
|
+
<!-- ✅ bien -->
|
|
169
|
+
<sui-checkbox-card [size]="bp.controlSize()" type="left-icon" icon="motorbike-line" label="Delivery" />
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Estado que no vuelve a la señal
|
|
173
|
+
|
|
174
|
+
```html
|
|
175
|
+
<!-- ❌ mal: es no controlada; el toque la marca adentro y ofreceRecojo() no se entera -->
|
|
176
|
+
<sui-checkbox-card [size]="bp.controlSize()" label="Recojo en tienda"
|
|
177
|
+
[checked]="ofreceRecojo()" />
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
```html
|
|
181
|
+
<!-- ✅ bien -->
|
|
182
|
+
<sui-checkbox-card [size]="bp.controlSize()" label="Recojo en tienda"
|
|
183
|
+
[checked]="ofreceRecojo()" (checkedChange)="ofreceRecojo.set($event)" />
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Medio de pago con logo
|
|
187
|
+
|
|
188
|
+
```html
|
|
189
|
+
<!-- ❌ mal: type="company" sin slot="leading" deja el hueco del logo -->
|
|
190
|
+
<sui-checkbox-card type="company" [size]="bp.controlSize()" label="Yape" />
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```html
|
|
194
|
+
<!-- ✅ bien (como pages/mi-negocio/mi-negocio.html:1209) -->
|
|
195
|
+
<sui-checkbox-card type="company" [size]="bp.controlSize()" label="Yape">
|
|
196
|
+
<span slot="leading" aria-label="Yape">Y</span>
|
|
197
|
+
</sui-checkbox-card>
|
|
198
|
+
```
|
|
199
|
+
|
|
144
200
|
## Ejemplo
|
|
145
201
|
|
|
146
202
|
```html
|
|
@@ -13,8 +13,8 @@ Story: [Atoms/Checkbox, Radio & Switch/Checkbox Label](https://sui-design-system
|
|
|
13
13
|
|
|
14
14
|
**Úsalo** para toda casilla que tiene texto al lado: «Acepto los términos», cada permiso de un
|
|
15
15
|
miembro del equipo, cada categoría de una lista. Toda la fila es clicable y se enchufa a un
|
|
16
|
-
formulario. En
|
|
17
|
-
controles.
|
|
16
|
+
formulario. En el celular y la tablet va `xlarge` (casilla de 28 px) y en la computadora `large`,
|
|
17
|
+
con `[size]="bp.controlSize()"`, como los demás controles (D16).
|
|
18
18
|
|
|
19
19
|
**No lo uses** para:
|
|
20
20
|
|
|
@@ -32,9 +32,10 @@ Regla corta: **casilla con texto → este · casilla sin texto → `sui-checkbox
|
|
|
32
32
|
> arma Label + (Sublabel) + badge «NEW» + descripción + Link Button, y la variante invertida
|
|
33
33
|
> (casilla a la derecha). No trae do/don't. Lo marcado «según la guía del DS» sale de ese ejemplo.
|
|
34
34
|
>
|
|
35
|
-
> Uso medido el
|
|
36
|
-
> de exclusión que `sui-badge`): **
|
|
37
|
-
>
|
|
35
|
+
> Uso medido el 06-10-2026 en `master-pedidos/src/app` (sin prototipos ni vitrinas, misma lista
|
|
36
|
+
> de exclusión que `sui-badge`): **4 usos**, todos con `bp.controlSize()` o su equivalente
|
|
37
|
+
> `ctrlSize()`. El 03-10-2026 eran 0: los 4 eran `sui-checkbox` dentro de un `<label>` a mano y se
|
|
38
|
+
> migraron el 04-10-2026. Queda **1 casilla armada a mano** (ver abajo).
|
|
38
39
|
|
|
39
40
|
### Las piezas
|
|
40
41
|
|
|
@@ -43,22 +44,20 @@ Regla corta: **casilla con texto → este · casilla sin texto → `sui-checkbox
|
|
|
43
44
|
| `label` | Siempre. Qué se marca, en una a tres palabras («Gestionar productos»). | según la guía del DS (pieza); largo según `docs/CANON-SUI.md` §5.4 |
|
|
44
45
|
| `sublabel` | Una precisión corta entre paréntesis: «(opcional)», «(12)». Va con paréntesis en el texto: el componente no los pone. | según la guía del DS («Label(Sublabel)») |
|
|
45
46
|
| `description` | Cuando la opción necesita una frase que explique qué pasa si se marca («Recibe un correo cada vez que entra un pedido»). Pasa el label a peso medio. | según la guía del DS (pieza); el «cuándo» es propuesta |
|
|
46
|
-
| `badge` | Solo para algo **nuevo** («Nuevo», en `purple` como el badge de novedad). Con string sale naranja `light`: pásale el objeto. | según la guía del DS (pieza «NEW»); el color
|
|
47
|
+
| `badge` | Solo para algo **nuevo** («Nuevo», en `purple` como el badge de novedad). Con string sale naranja `light`: pásale el objeto. | según la guía del DS (pieza «NEW»); el color: canon (aprobado por el dueño, 05-10-2026, bloque B3) |
|
|
47
48
|
| `link` | Un «Ver detalle» que abre más información sin marcar la casilla. **Solo se ve si hay `description`.** | según la guía del DS (pieza «Link Button») |
|
|
48
|
-
| `flip` | No usar en formularios: la casilla va a la izquierda, como en la guía. |
|
|
49
|
-
| `indeterminate` | El «seleccionar todo» de un grupo, cuando hay algunas marcadas. Hoy no usar (ver abajo). |
|
|
49
|
+
| `flip` | No usar en formularios: la casilla va a la izquierda, como en la guía. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
50
|
+
| `indeterminate` | El «seleccionar todo» de un grupo, cuando hay algunas marcadas. Hoy no usar (ver abajo). | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
50
51
|
| `disabled` | La opción existe pero no se puede tocar ahora; decir por qué en la descripción. | según la guía del DS |
|
|
51
|
-
| `size` | `medium` (default, Figma): casilla 20, label 14/20. `large`: casilla 24, label 16/24. `xlarge`: casilla 28, label 16/24. En large y xlarge el sublabel y la descripción se quedan en 12/16 (canon, dueño 04-10-2026); el badge sin `size` propio sube a `medium` / `large` y el link a `medium`. Se usa con `[size]="bp.controlSize()"`. | `medium`: según la guía del DS · `large` / `xlarge`: canon (aprobado por el dueño, 03-10-2026), extensión SUI |
|
|
52
|
+
| `size` | `medium` (default, Figma): casilla 20, label 14/20. `large`: casilla 24, label 16/24. `xlarge`: casilla 28, label 16/24. En large y xlarge el sublabel y la descripción se quedan en 12/16 (canon, dueño 04-10-2026); el badge sin `size` propio sube a `medium` / `large` y el link a `medium`. `2xlarge`: casilla 28 con la fila a 44 (su uso por dispositivo está pendiente, ver D16). Se usa con `[size]="bp.controlSize()"`. | `medium`: según la guía del DS · `large` / `xlarge`: canon (aprobado por el dueño, 03-10-2026), extensión SUI |
|
|
52
53
|
|
|
53
|
-
**Usos de hoy
|
|
54
|
+
**Usos de hoy (4), todos con el size de D16:** `pages/settings/team/team.html:237` y `:309`
|
|
55
|
+
(permisos, `bp.controlSize()`), `components/option-sections-manager/option-sections-manager.html:190`
|
|
56
|
+
y `:212` (`ctrlSize()`, que hace lo mismo con `bp.isMobile()`). Hasta el 04-10-2026 eran
|
|
57
|
+
`sui-checkbox` dentro de un `<label>` a mano: tocar el texto no marcaba nada.
|
|
54
58
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- **1 nativo:** `pages/sales-channels/facebook/facebook.html:69`.
|
|
58
|
-
|
|
59
|
-
**Antes de migrarlos:** los 4 de `sui-checkbox` hoy están en 24/28 px (`bp.controlSize()`,
|
|
60
|
-
regla de controles grandes del dueño, 28-09-2026). Desde el 03-10-2026 el label tiene `size`
|
|
61
|
-
(`large` 24 / `xlarge` 28): al migrar se le pasa `[size]="bp.controlSize()"` y no se achican.
|
|
59
|
+
**Uso de hoy que debería ser este componente (1):** el nativo de
|
|
60
|
+
`pages/sales-channels/facebook/facebook.html:66`. Al migrarlo se le pasa `[size]="bp.controlSize()"`.
|
|
62
61
|
|
|
63
62
|
## Tamaño en mobile y en web
|
|
64
63
|
|
|
@@ -70,11 +69,11 @@ dueño, 28-09-2026).
|
|
|
70
69
|
|
|
71
70
|
| uso | mobile | web | fuente |
|
|
72
71
|
|---|---|---|---|
|
|
73
|
-
| casilla con texto en un formulario | `
|
|
74
|
-
| lista densa de desktop (tabla, filtros) | — | `
|
|
72
|
+
| casilla con texto en un formulario | `xlarge` (casilla 28, label 16/24; sin descripción la fila mide 28, no 44: `2xlarge` pendiente, ver D16) | `large` (casilla 24, label 16/24) | D16 (fila de checkbox, radio y switch; dueño 06-10-2026) |
|
|
73
|
+
| lista densa de desktop (tabla, filtros) | — | `large` (casilla 24): no baja a `medium` | D16, dueño 06-10-2026 |
|
|
75
74
|
|
|
76
75
|
```html
|
|
77
|
-
<sui-checkbox-label [size]="bp.
|
|
76
|
+
<sui-checkbox-label [size]="bp.controlSize()" label="Recordar mi dirección" [(active)]="recordar" />
|
|
78
77
|
```
|
|
79
78
|
|
|
80
79
|
| size | casilla | label | sublabel / descripción | alto de la fila sin descripción |
|
|
@@ -84,22 +83,43 @@ dueño, 28-09-2026).
|
|
|
84
83
|
| `xlarge` | 28 | 16/24 | 12/16 | 28 |
|
|
85
84
|
| `2xlarge` | 28 | 16/24 | 12/16 | **44** (`min-height`) |
|
|
86
85
|
|
|
87
|
-
`2xlarge` (canon
|
|
88
|
-
pero la fila mide 44 como mínimo con todo centrado en vertical, y el
|
|
89
|
-
(regla del 03-10). Con descripción la fila ya pasa de 44 y vuelve a
|
|
86
|
+
`2xlarge` (canon, dueño 04-10-2026: piso táctil 44 en el teléfono) tiene la misma casilla de 28 y
|
|
87
|
+
el mismo label que `xlarge`, pero la fila mide 44 como mínimo con todo centrado en vertical, y el
|
|
88
|
+
texto secundario se queda en 12 (regla del 03-10). Con descripción la fila ya pasa de 44 y vuelve a
|
|
89
|
+
alinearse arriba. Si reemplaza a `xlarge` en el celular y la tablet está **pendiente** (ver D16).
|
|
90
90
|
|
|
91
91
|
Toda la fila se toca (el host recibe el click), así que el área táctil es la fila entera, no solo
|
|
92
92
|
la casilla. Con `xlarge` el contenido baja 2 px para que la línea del label (24) quede centrada
|
|
93
93
|
con la casilla (28).
|
|
94
94
|
|
|
95
|
-
Sin descripción, la fila en `xlarge` mide 28 px (lo que mide la casilla)
|
|
96
|
-
`2xlarge
|
|
97
|
-
en `xlarge` y en `2xlarge`.
|
|
95
|
+
Sin descripción, la fila en `xlarge` mide 28 px (lo que mide la casilla), por debajo del piso de 44;
|
|
96
|
+
`2xlarge` la lleva a 44 (pendiente, ver D16). Con descripción llega sola: 2 + 24 (label) + 4 + 16
|
|
97
|
+
(descripción) = 46 px en `xlarge` y en `2xlarge`.
|
|
98
98
|
|
|
99
99
|
**Regla de tamaños aplicada (canon, dueño 04-10-2026):** en `large` y `xlarge` el label sube a
|
|
100
100
|
16/24 y el sublabel y la descripción se quedan en 12/16, igual que `sui-switch-label`. Antes subían
|
|
101
101
|
a 14/20. El badge y el link siguen creciendo con el size.
|
|
102
102
|
|
|
103
|
+
### Por dispositivo (D16)
|
|
104
|
+
|
|
105
|
+
| dispositivo | size | nota |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| celular chico (< 380) | `xlarge` | casilla de 28 |
|
|
108
|
+
| celular (380–767) | `xlarge` | |
|
|
109
|
+
| tablet táctil (`pointer: coarse`) | `xlarge` | `bp.controlSize()` mira solo el ancho: un iPad de 768 o más recibe `large` hasta que el helper mire el puntero |
|
|
110
|
+
| computadora (`pointer: fine`) | `large` | un paso menos que el celular; no baja a `medium` (D16, dueño 06-10-2026) |
|
|
111
|
+
|
|
112
|
+
Ultrawide: igual que la computadora (`large`).
|
|
113
|
+
|
|
114
|
+
En master-pedidos: `[size]="bp.controlSize()"` (`xlarge` hasta 767 px, `large` desde ahí). La
|
|
115
|
+
expresión exacta de D16, con la tablet, es `bp.tactil() ? 'xlarge' : 'large'`.
|
|
116
|
+
|
|
117
|
+
**Pendiente: `2xlarge` en el celular y la tablet.** Sin descripción, `xlarge` deja la fila en 28 px,
|
|
118
|
+
por debajo del piso de 44. El dueño aprobó `2xlarge` el 04-10-2026 justo para eso (fila de 44), pero
|
|
119
|
+
la fila de D16 dice `xlarge` para toda la familia y ningún helper devuelve `2xlarge`. Falta que el
|
|
120
|
+
dueño decida si en este componente el celular y la tablet pasan a `2xlarge` (y que D16 y
|
|
121
|
+
`bp.controlSize()` lo recojan). Mientras no lo decida, manda la fila de D16: `xlarge`.
|
|
122
|
+
|
|
103
123
|
## «No usar»: por qué no hoy y cuándo sí
|
|
104
124
|
|
|
105
125
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -151,6 +171,52 @@ Implementa `ControlValueAccessor` (`[(ngModel)]`, `formControlName`).
|
|
|
151
171
|
«casilla, no marcada» sin el texto.
|
|
152
172
|
- Deshabilitado baja la opacidad del bloque a 0.5 (convención del proyecto).
|
|
153
173
|
|
|
174
|
+
## Bien y mal
|
|
175
|
+
|
|
176
|
+
Casilla suelta con el texto en un `<label>` aparte
|
|
177
|
+
|
|
178
|
+
```html
|
|
179
|
+
<!-- ❌ mal: tocar el texto no marcaba nada (así estaba pages/settings/team/team.html:237 hasta el 04-10-2026) -->
|
|
180
|
+
<label class="team__permission-check">
|
|
181
|
+
<sui-checkbox [size]="bp.controlSize()" [checked]="hasPermission(perm)" (checkedChange)="togglePermission(perm)" />
|
|
182
|
+
<span>{{ PERMISSION_LABELS[perm] }}</span>
|
|
183
|
+
</label>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
```html
|
|
187
|
+
<!-- ✅ bien (como pages/settings/team/team.html:237 hoy) -->
|
|
188
|
+
<sui-checkbox-label [size]="bp.controlSize()"
|
|
189
|
+
[label]="PERMISSION_LABELS[perm]" [active]="hasPermission(perm)" (activeChange)="togglePermission(perm)" />
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Estado con el nombre de otro control
|
|
193
|
+
|
|
194
|
+
```html
|
|
195
|
+
<!-- ❌ mal: aquí el estado se llama active; [(checked)] no existe -->
|
|
196
|
+
<sui-checkbox-label label="Gestionar productos" [(checked)]="permisos.productos" />
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
<!-- ✅ bien -->
|
|
201
|
+
<sui-checkbox-label [size]="bp.controlSize()" label="Gestionar productos" [(active)]="permisos.productos" />
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Casilla con texto armada a mano
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<!-- ❌ mal: input nativo + label, sin tamaño ni foco del DS (pages/sales-channels/facebook/facebook.html:66) -->
|
|
208
|
+
<label class="fb-channel__sync-item">
|
|
209
|
+
<input type="checkbox" [checked]="item.checked" (change)="toggleSync(item.id)" />
|
|
210
|
+
<span>{{ item.label }}</span>
|
|
211
|
+
</label>
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
```html
|
|
215
|
+
<!-- ✅ bien -->
|
|
216
|
+
<sui-checkbox-label [size]="bp.controlSize()"
|
|
217
|
+
[label]="item.label" [active]="item.checked" (activeChange)="toggleSync(item.id)" />
|
|
218
|
+
```
|
|
219
|
+
|
|
154
220
|
## Ejemplo
|
|
155
221
|
|
|
156
222
|
```html
|