@ajuarezso/sui-design-system 0.25.0 → 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 +83 -9
- package/docs/sui-activity-feed/README.md +55 -1
- package/docs/sui-activity-filter/README.md +50 -1
- package/docs/sui-alert/README.md +54 -0
- package/docs/sui-app-store-badge/README.md +57 -3
- package/docs/sui-avatar/README.md +66 -6
- package/docs/sui-avatar-group/README.md +64 -2
- package/docs/sui-badge/README.md +79 -11
- package/docs/sui-banner/README.md +70 -5
- package/docs/sui-brand-logo/README.md +77 -14
- package/docs/sui-breadcrumb-item/README.md +51 -0
- package/docs/sui-breadcrumbs/README.md +48 -0
- package/docs/sui-button/README.md +68 -6
- package/docs/sui-button-group/README.md +70 -5
- package/docs/sui-button-group-item/README.md +68 -4
- package/docs/sui-card/README.md +97 -10
- package/docs/sui-chart-legend/README.md +53 -0
- package/docs/sui-chart-legend-dot/README.md +49 -0
- package/docs/sui-checkbox/README.md +106 -26
- package/docs/sui-checkbox-card/README.md +58 -2
- package/docs/sui-checkbox-label/README.md +89 -23
- package/docs/sui-circular-progress-bar/README.md +63 -5
- package/docs/sui-color-dot/README.md +61 -5
- package/docs/sui-color-picker/README.md +62 -4
- package/docs/sui-command-menu-footer/README.md +49 -0
- package/docs/sui-command-menu-item/README.md +63 -4
- package/docs/sui-command-menu-search/README.md +58 -4
- package/docs/sui-compact-avatar-group/README.md +61 -4
- package/docs/sui-compact-button/README.md +112 -28
- package/docs/sui-compact-select/README.md +58 -4
- package/docs/sui-compact-select-for-input/README.md +69 -5
- package/docs/sui-content-card/README.md +63 -2
- package/docs/sui-content-divider/README.md +49 -1
- package/docs/sui-content-label/README.md +83 -4
- package/docs/sui-counter-input/README.md +91 -7
- package/docs/sui-date-selector/README.md +61 -3
- package/docs/sui-datepicker/README.md +72 -5
- package/docs/sui-day-cell/README.md +60 -3
- package/docs/sui-day-label/README.md +52 -3
- package/docs/sui-divider/README.md +57 -5
- package/docs/sui-drawer-footer/README.md +63 -2
- package/docs/sui-drawer-header/README.md +60 -3
- package/docs/sui-dropdown-caption/README.md +53 -1
- package/docs/sui-dropdown-item/README.md +72 -6
- package/docs/sui-dropdown-menu/README.md +74 -5
- package/docs/sui-dropdown-search/README.md +57 -1
- package/docs/sui-emoji/README.md +82 -18
- package/docs/sui-empty-state/README.md +68 -4
- package/docs/sui-fancy-button/README.md +59 -1
- package/docs/sui-file-icon/README.md +56 -1
- package/docs/sui-file-upload/README.md +69 -9
- package/docs/sui-file-upload-card/README.md +53 -2
- package/docs/sui-filter/README.md +74 -5
- package/docs/sui-flag/README.md +62 -1
- package/docs/sui-form-hint/README.md +54 -5
- package/docs/sui-form-label/README.md +53 -1
- package/docs/sui-href/README.md +47 -0
- package/docs/sui-icon/README.md +69 -4
- package/docs/sui-image-upload/README.md +70 -3
- package/docs/sui-image-upload-profile/README.md +58 -0
- package/docs/sui-img-retry/README.md +49 -0
- package/docs/sui-inline-input/README.md +61 -3
- package/docs/sui-inline-select/README.md +60 -0
- package/docs/sui-input/README.md +77 -14
- package/docs/sui-integration-switch/README.md +69 -2
- package/docs/sui-kbd/README.md +71 -7
- package/docs/sui-key-icon/README.md +65 -6
- package/docs/sui-link-button/README.md +79 -13
- package/docs/sui-logo/README.md +74 -4
- package/docs/sui-modal/README.md +61 -2
- package/docs/sui-modal-footer/README.md +83 -9
- package/docs/sui-modal-header/README.md +56 -0
- package/docs/sui-modal-sheet/README.md +72 -10
- package/docs/sui-notification/README.md +71 -1
- package/docs/sui-notification-footer/README.md +51 -1
- package/docs/sui-notification-tab-menu/README.md +57 -1
- package/docs/sui-otp-input/README.md +67 -6
- package/docs/sui-page-header/README.md +83 -15
- package/docs/sui-pagination/README.md +60 -0
- package/docs/sui-password-strength/README.md +50 -1
- package/docs/sui-payment-icon/README.md +66 -7
- package/docs/sui-period-range/README.md +65 -6
- package/docs/sui-popover/README.md +73 -7
- package/docs/sui-product-card/README.md +76 -8
- package/docs/sui-progress-bar/README.md +72 -8
- package/docs/sui-progress-bar-label/README.md +69 -12
- package/docs/sui-radio/README.md +83 -6
- package/docs/sui-radio-card/README.md +58 -4
- package/docs/sui-radio-label/README.md +86 -19
- package/docs/sui-rating/README.md +81 -14
- package/docs/sui-rich-editor/README.md +45 -0
- package/docs/sui-segmented-control/README.md +83 -14
- package/docs/sui-select/README.md +72 -3
- package/docs/sui-sidebar/README.md +64 -9
- package/docs/sui-slider/README.md +68 -1
- package/docs/sui-social-button/README.md +63 -3
- package/docs/sui-status-badge/README.md +64 -6
- package/docs/sui-stepper/README.md +57 -0
- package/docs/sui-store-card/README.md +71 -8
- package/docs/sui-switch/README.md +80 -9
- package/docs/sui-switch-card/README.md +70 -6
- package/docs/sui-switch-label/README.md +90 -13
- package/docs/sui-tab-chips/README.md +79 -9
- package/docs/sui-tab-menu-horizontal/README.md +62 -1
- package/docs/sui-tab-menu-vertical/README.md +56 -3
- package/docs/sui-table/README.md +68 -7
- package/docs/sui-tag/README.md +75 -4
- package/docs/sui-tag-input/README.md +71 -7
- package/docs/sui-textarea/README.md +78 -11
- package/docs/sui-time-picker/README.md +70 -7
- package/docs/sui-toast/README.md +65 -5
- package/docs/sui-tooltip/README.md +61 -4
- package/docs/sui-topbar/README.md +57 -3
- package/docs/sui-topbar-button/README.md +57 -3
- package/docs/sui-topbar-item/README.md +61 -0
- package/docs/sui-topbar-user/README.md +56 -0
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +19 -19
|
@@ -69,6 +69,21 @@ El ícono no se toca: si la fila abre el archivo, la fila da los 44 px. `medium`
|
|
|
69
69
|
grande que tiene y `xsmall` es chico (D16), así que va igual en las dos: es la excepción a P1 b
|
|
70
70
|
(«un paso más grande en el celular»), porque no hay un paso más.
|
|
71
71
|
|
|
72
|
+
### Por dispositivo (D16)
|
|
73
|
+
|
|
74
|
+
No se toca; la fila de `file-icon` de la tabla D16 manda (canon, dueño, 05-10-2026, D16).
|
|
75
|
+
|
|
76
|
+
| dispositivo | size | nota |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| celular chico (< 380 px) | `medium` (40) | |
|
|
79
|
+
| celular (380–767 px) | `medium` (40) | es el más grande que tiene: no hay un paso más para subir (P1 b) |
|
|
80
|
+
| tablet táctil (`pointer: coarse`) | `medium` (40) | si la fila abre el archivo, los 44 los da la fila |
|
|
81
|
+
| computadora (`pointer: fine`) | `medium` (40) | también en filas densas y tablas; `xsmall` no se usa |
|
|
82
|
+
|
|
83
|
+
Ultrawide (≥ 1920 px): igual, `medium`.
|
|
84
|
+
|
|
85
|
+
En master-pedidos: `size="medium"` fijo, o se omite (es el default). No hay helper ni hace falta `bp`.
|
|
86
|
+
|
|
72
87
|
## «No usar»: por qué no hoy y cuándo sí
|
|
73
88
|
|
|
74
89
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -98,9 +113,49 @@ Outputs: ninguno.
|
|
|
98
113
|
- El nombre para el lector de pantalla es «Archivo PDF» (en español desde el 04-10-2026) y no se puede cambiar.
|
|
99
114
|
- `size` es `xsmall` o `medium`: no hay `small` ni `large`.
|
|
100
115
|
|
|
116
|
+
## Bien y mal
|
|
117
|
+
|
|
118
|
+
**Un archivo en una tabla**
|
|
119
|
+
|
|
120
|
+
```html
|
|
121
|
+
<!-- ❌ mal: xsmall es chico (D16). La vitrina (master-preview/_guia-atomos/identidad.ts:422)
|
|
122
|
+
todavía lo ofrece para «filas densas, tablas» -->
|
|
123
|
+
<sui-file-icon [filename]="doc.nombre" size="xsmall" />
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```html
|
|
127
|
+
<!-- ✅ bien -->
|
|
128
|
+
<sui-file-icon [filename]="doc.nombre" size="medium" />
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**El color del tipo**
|
|
132
|
+
|
|
133
|
+
```html
|
|
134
|
+
<!-- ❌ mal: forzar el color miente; un CSV en rojo parece PDF (vitrina identidad.ts:424) -->
|
|
135
|
+
<sui-file-icon filename="ventas.csv" color="red" />
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```html
|
|
139
|
+
<!-- ✅ bien: el color sale solo de la extensión (CSV en verde) -->
|
|
140
|
+
<sui-file-icon filename="ventas.csv" />
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Un archivo que se está subiendo**
|
|
144
|
+
|
|
145
|
+
```html
|
|
146
|
+
<!-- ❌ mal: el ícono solo no dice cómo va la subida («Cuándo no») -->
|
|
147
|
+
<sui-file-icon filename="carta-octubre.pdf" />
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```html
|
|
151
|
+
<!-- ✅ bien: la card ya trae el ícono, la barra y el estado -->
|
|
152
|
+
<sui-file-upload-card file="carta-octubre.pdf" state="in-progress" [progress]="45"
|
|
153
|
+
description="1.2 MB de 2.6 MB" />
|
|
154
|
+
```
|
|
155
|
+
|
|
101
156
|
## Ejemplo
|
|
102
157
|
|
|
103
158
|
```html
|
|
104
159
|
<sui-file-icon filename="comprobante-yape.pdf" />
|
|
105
|
-
<sui-file-icon filename="ventas-setiembre.csv" size="
|
|
160
|
+
<sui-file-icon filename="ventas-setiembre.csv" size="medium" />
|
|
106
161
|
```
|
|
@@ -31,7 +31,9 @@ elegido → file-upload-card.**
|
|
|
31
31
|
> («Elige un archivo o arrástralo aquí»), una línea con **formatos y tamaño máximo** («JPEG, PNG,
|
|
32
32
|
> PDF y MP4, hasta 50 MB») y el botón **«Buscar archivo»**. Trae aparte el ícono por tipo de
|
|
33
33
|
> archivo (en SUI, `sui-file-icon`). No dice cuándo usar cada tamaño. Lo de abajo marcado canon
|
|
34
|
-
> está aprobado;
|
|
34
|
+
> está aprobado; el `small` en mobile sigue en propuesta: lo cubre **P13, pendiente**. D16 en
|
|
35
|
+
> general no usa `small`, pero la hoja de decisiones (05-10-2026) dejó estas filas esperando la
|
|
36
|
+
> respuesta a P13.
|
|
35
37
|
>
|
|
36
38
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos**. Hoy todo lo que se sube es
|
|
37
39
|
> imagen y va con `sui-image-upload` (13) o con un `<input type="file">` a mano (3: `renewal-modal`,
|
|
@@ -57,8 +59,8 @@ elegido → file-upload-card.**
|
|
|
57
59
|
|
|
58
60
|
| valor | padding | cuándo | fuente |
|
|
59
61
|
|---|---|---|---|
|
|
60
|
-
| `small` | 24 |
|
|
61
|
-
| `medium` (default) | 32 | En web, en una página o un modal ancho. | guía (es el único tamaño que muestra) |
|
|
62
|
+
| `small` | 24 | Propuesta: en mobile y dentro de un modal o una card. Pendiente (P13): la opción recomendada es que no (en mobile `medium` o `large`, por D8), y D16 en general no usa `small`, pero el dueño todavía no respondió. | pendiente (P13) |
|
|
63
|
+
| `medium` (default) | 32 | En web, en una página o un modal ancho. En mobile: pendiente (P13). | guía (es el único tamaño que muestra) |
|
|
62
64
|
| `large` | 40 | Cuando subir el archivo es lo único de la pantalla (importar la carta). | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
63
65
|
| `xlarge` | 48 | No usar: más aire no ayuda a soltar el archivo. | no usar |
|
|
64
66
|
|
|
@@ -74,17 +76,17 @@ Usos de hoy que rompen la regla: **0** (no hay file-upload).
|
|
|
74
76
|
## Tamaño en mobile y en web
|
|
75
77
|
|
|
76
78
|
En mobile se toca con el dedo: lo que se toca mide **44 px o más**. Aquí **toda el área se toca**
|
|
77
|
-
(abre el selector), así que pasa en cualquier tamaño
|
|
78
|
-
|
|
79
|
-
`services/breakpoints.service.ts`).
|
|
79
|
+
(abre el selector), así que pasa en cualquier tamaño. En pantallas de los dos, con el servicio
|
|
80
|
+
de breakpoints de la app (`bp`, en `services/breakpoints.service.ts`).
|
|
80
81
|
|
|
81
82
|
| uso | mobile | web | fuente |
|
|
82
83
|
|---|---|---|---|
|
|
83
|
-
| subir un documento en un formulario o modal |
|
|
84
|
-
| subir es lo único de la pantalla | `medium` | `large` | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
84
|
+
| subir un documento en un formulario o modal | pendiente (P13) | `medium` | mobile: pendiente (P13; la propuesta era `small`) · web: guía |
|
|
85
|
+
| subir es lo único de la pantalla | `medium` | `large` | canon (aprobado por el dueño, 05-10-2026, bloque B1) · va al revés de D16: ver abajo |
|
|
85
86
|
|
|
86
87
|
```html
|
|
87
|
-
|
|
88
|
+
<!-- en web, en un formulario o modal; el size en mobile espera P13 -->
|
|
89
|
+
<sui-file-upload size="medium"
|
|
88
90
|
title="Sube tu carta en PDF" subtitle="PDF, hasta 10 MB"
|
|
89
91
|
accept=".pdf" [maxSize]="10 * 1024 * 1024" (filesSelected)="subir($event)" />
|
|
90
92
|
```
|
|
@@ -93,6 +95,20 @@ Llena el ancho del contenedor (antes 400 fijo; extensión SUI, 03-10-2026). El b
|
|
|
93
95
|
archivo» mide 32 px (`xsmall`) en todos los tamaños: solo, en mobile **no
|
|
94
96
|
llegaría**; pasa porque el área entera también abre el selector.
|
|
95
97
|
|
|
98
|
+
### Por dispositivo (D16)
|
|
99
|
+
|
|
100
|
+
**Pendiente (P13).** `file-upload` no está en la tabla por componente de D16, y la hoja de
|
|
101
|
+
decisiones (05-10-2026, «Lo que esta hoja no cierra») deja sus dos filas de tamaño esperando P13.
|
|
102
|
+
Se toca, así que la regla general de D16 sería «lo que se toca»: grande en el celular y en la
|
|
103
|
+
tablet, `medium` en la computadora (y en ultrawide). Eso choca con la fila de B1 («subir es lo
|
|
104
|
+
único de la pantalla»: `medium` en mobile y `large` en web), que va en la dirección contraria, y
|
|
105
|
+
D16 dice que reemplaza el tamaño por plataforma. Cuál manda no está decidido: se resuelve con P13.
|
|
106
|
+
|
|
107
|
+
Hasta entonces, lo cerrado es: `medium` en la computadora en un formulario o modal (guía) y
|
|
108
|
+
`xlarge` no se usa. Si P13 cierra con la regla general de D16, en master-pedidos quedaría
|
|
109
|
+
`[size]="bp.tactil() ? 'large' : 'medium'"` (no hay helper propio; `sizeControl()` es de
|
|
110
|
+
botón, input, select y textarea).
|
|
111
|
+
|
|
96
112
|
## «No usar»: por qué no hoy y cuándo sí
|
|
97
113
|
|
|
98
114
|
Nada se borra del DS. Lo marcado «no usar» no tiene caso en la app de hoy; si un flujo nuevo cae
|
|
@@ -148,6 +164,50 @@ en la columna de la derecha, se usa (aprobado por el dueño, 03-10-2026).
|
|
|
148
164
|
hace quien lo usa.
|
|
149
165
|
- El atributo `title` del host se borra solo (no sale el tooltip gris del navegador).
|
|
150
166
|
|
|
167
|
+
## Bien y mal
|
|
168
|
+
|
|
169
|
+
**El error que se pasa a mano**
|
|
170
|
+
|
|
171
|
+
```html
|
|
172
|
+
<!-- ❌ mal: el componente ya muestra solo el aviso de tamaño debajo del área (y lo emite por errorEvent); este errorMessage lo tapa con otro texto -->
|
|
173
|
+
<sui-file-upload accept=".pdf" [maxSize]="10 * 1024 * 1024"
|
|
174
|
+
title="Sube tu carta en PDF" subtitle="PDF, hasta 10 MB"
|
|
175
|
+
[error]="pesaDeMas()" errorMessage="El archivo pesa más de 10 MB" />
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```html
|
|
179
|
+
<!-- ✅ bien: errorMessage solo para lo que rechaza el servidor después de subirlo -->
|
|
180
|
+
<sui-file-upload accept=".pdf" [maxSize]="10 * 1024 * 1024"
|
|
181
|
+
title="Sube tu carta en PDF" subtitle="PDF, hasta 10 MB"
|
|
182
|
+
[error]="rechazado()" errorMessage="El PDF está protegido con clave" />
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**El límite de tamaño**
|
|
186
|
+
|
|
187
|
+
```html
|
|
188
|
+
<!-- ❌ mal: maxSize va en bytes (10 = 10 bytes) y el subtitle no dice formatos ni tamaño (Trampas) -->
|
|
189
|
+
<sui-file-upload accept=".pdf" [maxSize]="10" title="Sube tu carta" />
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
```html
|
|
193
|
+
<!-- ✅ bien: el mismo límite en el filtro y en el texto -->
|
|
194
|
+
<sui-file-upload accept=".pdf" [maxSize]="10 * 1024 * 1024"
|
|
195
|
+
title="Sube tu carta en PDF" subtitle="PDF, hasta 10 MB" />
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**El filtro y el texto**
|
|
199
|
+
|
|
200
|
+
```html
|
|
201
|
+
<!-- ❌ mal: el subtitle promete Excel y accept lo rechaza: la persona elige un archivo que no entra -->
|
|
202
|
+
<sui-file-upload accept=".pdf" title="Sube tu carta" subtitle="PDF o Excel, hasta 10 MB" />
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
```html
|
|
206
|
+
<!-- ✅ bien: lo que promete el subtitle es lo que dejan pasar accept y maxSize -->
|
|
207
|
+
<sui-file-upload accept=".pdf,.xlsx" [maxSize]="10 * 1024 * 1024"
|
|
208
|
+
title="Sube tu carta" subtitle="PDF o Excel, hasta 10 MB" />
|
|
209
|
+
```
|
|
210
|
+
|
|
151
211
|
## Ejemplo
|
|
152
212
|
|
|
153
213
|
```html
|
|
@@ -65,10 +65,18 @@ reintente.
|
|
|
65
65
|
| «Reintentar» | link de 20 px — **no llega** | link | medido |
|
|
66
66
|
|
|
67
67
|
```html
|
|
68
|
-
<sui-file-upload-card [file]="a.nombre" [state]="a.estado" [progress]="a.pct"
|
|
69
|
-
|
|
68
|
+
<sui-file-upload-card [file]="a.nombre" [state]="a.estado" [progress]="a.pct" [description]="a.peso"
|
|
69
|
+
(actionClicked)="a.estado === 'in-progress' ? cancelar(a) : quitar(a)"
|
|
70
|
+
(retryClicked)="reintentar(a)" />
|
|
70
71
|
```
|
|
71
72
|
|
|
73
|
+
### Por dispositivo (D16)
|
|
74
|
+
|
|
75
|
+
No aplica: **no tiene input `size`** y nada en ella cambia por dispositivo (la fila llena el ancho y
|
|
76
|
+
la X o el tacho mide 32 en el celular, la tablet y la computadora). Que esa X y «Reintentar» lleguen
|
|
77
|
+
a 44 en lo táctil es trabajo pendiente del DS, no un `size` que se elija. En master-pedidos: sin
|
|
78
|
+
`[size]` ni `bp`.
|
|
79
|
+
|
|
72
80
|
## «No usar»: por qué no hoy y cuándo sí
|
|
73
81
|
|
|
74
82
|
Nada se borra del DS. Lo marcado «no usar» no tiene caso en la app de hoy; si un flujo nuevo cae
|
|
@@ -120,6 +128,49 @@ interface SuiFileUploadCardFile { filename: string; extension?: string; }
|
|
|
120
128
|
- La barra de progreso es azul, no naranja.
|
|
121
129
|
- No sube nada: refleja el estado que le pasan.
|
|
122
130
|
|
|
131
|
+
## Bien y mal
|
|
132
|
+
|
|
133
|
+
**El peso del archivo**
|
|
134
|
+
|
|
135
|
+
```html
|
|
136
|
+
<!-- ❌ mal: coma decimal; el canon es punto, como el «10.0 MB» de sui-file-upload
|
|
137
|
+
(vitrina master-preview/_guia-moleculas/fechas.ts:182) -->
|
|
138
|
+
<sui-file-upload-card file="carta-octubre.pdf" state="in-progress" [progress]="45"
|
|
139
|
+
description="1,2 MB de 2,6 MB" />
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
```html
|
|
143
|
+
<!-- ✅ bien -->
|
|
144
|
+
<sui-file-upload-card file="carta-octubre.pdf" state="in-progress" [progress]="45"
|
|
145
|
+
description="1.2 MB de 2.6 MB" />
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Los textos de fábrica**
|
|
149
|
+
|
|
150
|
+
```html
|
|
151
|
+
<!-- ❌ mal: sin description sale «0 KB de 120 KB», y sin progress la barra arranca en 10 -->
|
|
152
|
+
<sui-file-upload-card [file]="a.nombre" state="in-progress" />
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
```html
|
|
156
|
+
<!-- ✅ bien -->
|
|
157
|
+
<sui-file-upload-card [file]="a.nombre" state="in-progress" [progress]="a.pct" [description]="a.peso" />
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**La X de la derecha**
|
|
161
|
+
|
|
162
|
+
```html
|
|
163
|
+
<!-- ❌ mal: mientras sube, la X cancela; tratarla siempre como «quitar» (Trampas) -->
|
|
164
|
+
<sui-file-upload-card [file]="a.nombre" [state]="a.estado" [description]="a.peso"
|
|
165
|
+
(actionClicked)="quitar(a)" />
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
```html
|
|
169
|
+
<!-- ✅ bien -->
|
|
170
|
+
<sui-file-upload-card [file]="a.nombre" [state]="a.estado" [description]="a.peso"
|
|
171
|
+
(actionClicked)="a.estado === 'in-progress' ? cancelar(a) : quitar(a)" />
|
|
172
|
+
```
|
|
173
|
+
|
|
123
174
|
## Ejemplo
|
|
124
175
|
|
|
125
176
|
```html
|
|
@@ -40,7 +40,7 @@ panel (header + items + footer) · un filtro suelto → compact-select.**
|
|
|
40
40
|
|
|
41
41
|
> **La guía del DS no tiene página de filtros**: estas piezas salen solo del Figma del DS
|
|
42
42
|
> («Filters»: HorizontalFilter y VerticalFilter). Las reglas marcadas canon están aprobadas; lo
|
|
43
|
-
> que sigue
|
|
43
|
+
> que sigue **pendiente** (el área de 44 de `sui-filter-item` en mobile, P19) espera decisión.
|
|
44
44
|
>
|
|
45
45
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-dropdown-menu`):
|
|
46
46
|
> **0 usos**. Solo aparecen en la vitrina `master-preview`.
|
|
@@ -72,20 +72,42 @@ Ninguna pieza cambia sola en mobile, salvo la barra, que apila sus dos lados por
|
|
|
72
72
|
|
|
73
73
|
| pieza | mobile | web | fuente |
|
|
74
74
|
|---|---|---|---|
|
|
75
|
-
| `sui-filter-bar` | sin tamaño; los controles adentro van `large` (48) | sin tamaño; los controles `medium` (40) |
|
|
76
|
-
| `sui-filter-item` | 36 de alto, no se puede cambiar: debajo de los 44 del dedo | 36 |
|
|
75
|
+
| `sui-filter-bar` | sin tamaño; los controles adentro van `large` (48) | sin tamaño; los controles `medium` (40) | canon (D16, dueño 05-10-2026) |
|
|
76
|
+
| `sui-filter-item` | 36 de alto, no se puede cambiar: debajo de los 44 del dedo | 36 | pendiente (P19: área invisible de 44 o no usarlo en mobile) |
|
|
77
77
|
| `sui-filter-panel-footer` | `medium` (40) es lo más grande que tiene; en mobile, mejor `sui-modal-footer` (48) dentro de un `sui-modal-sheet` | `medium` (40) | canon para el 48 de mobile (CLAUDE.md: footer de modal `large`); web `medium` (40): canon (dueño, 05-10-2026, D16), reemplaza el `small` del bloque B1 (`small` es el default del componente: hay que pasarlo) |
|
|
78
78
|
| `sui-filter-panel-header` | sin tamaño | sin tamaño | — |
|
|
79
79
|
|
|
80
80
|
```html
|
|
81
81
|
<sui-filter-bar>
|
|
82
|
-
<sui-segmented-control slot="start" … />
|
|
82
|
+
<sui-segmented-control slot="start" [size]="bp.tactil() ? '2xlarge' : 'medium'" … />
|
|
83
83
|
<div slot="end">
|
|
84
|
-
<sui-input type="search" [size]="bp.
|
|
84
|
+
<sui-input type="search" [size]="bp.sizeControl()" placeholder="Buscar pedido…" … />
|
|
85
85
|
</div>
|
|
86
86
|
</sui-filter-bar>
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
+
### Por dispositivo (D16)
|
|
90
|
+
|
|
91
|
+
Las piezas no tienen un `size` propio (salvo el pie): lo que cambia por dispositivo son los
|
|
92
|
+
controles que se proyectan en la barra. Fuente: D16, dueño 05-10-2026 (fila `filter`).
|
|
93
|
+
|
|
94
|
+
| dispositivo | size | nota |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| celular chico (< 380) | sin regla en la tabla (`—`) | la fila `filter` de D16 no lo define; `bp.sizeControl()` da `large`, igual que en el celular, mientras el DS no estire a 44 el área de los `medium` |
|
|
97
|
+
| celular (380–767) | controles `large` · segmented `2xlarge` | el panel va en un `sui-modal-sheet` con `sui-modal-footer` (48), no con este pie; el área de 44 de `sui-filter-item` está pendiente (P19) |
|
|
98
|
+
| tablet táctil (`pointer: coarse`) | controles `large` · segmented `2xlarge` | se toca como un celular: el panel lleva `sui-modal-footer` (48) en vez de este pie, que llega solo a `medium` (40). D16 no fija el pie en la tablet; esto sigue la columna «mobile» de arriba. El área de 44 de `sui-filter-item` está pendiente (P19), igual que en el celular |
|
|
99
|
+
| computadora (`pointer: fine`) | controles `medium` · `sui-filter-panel-footer` `medium` | el default del pie es `small`: hay que pasarlo |
|
|
100
|
+
|
|
101
|
+
En el ultrawide, igual que en la computadora: el espacio extra va al ancho de la tabla, no a
|
|
102
|
+
controles más grandes.
|
|
103
|
+
|
|
104
|
+
En master-pedidos: `[size]="bp.sizeControl()"` en el `sui-input`, `sui-select` o
|
|
105
|
+
`sui-compact-select` de la barra, `[size]="bp.tactil() ? '2xlarge' : 'medium'"` en el
|
|
106
|
+
`sui-segmented-control` (no tiene helper) y `size="medium"` fijo en `sui-filter-panel-footer`,
|
|
107
|
+
que solo se usa en la computadora (solo tiene `small` y `medium`: `bp.sizeControl()` le pasaría un
|
|
108
|
+
`large` que no existe); con `bp.tactil()` el panel lleva `sui-modal-footer` en su lugar. No uses
|
|
109
|
+
`bp.isMobile() ? 'large' : 'medium'`: deja la tablet táctil en `medium`.
|
|
110
|
+
|
|
89
111
|
## API
|
|
90
112
|
|
|
91
113
|
<!-- api:inicio -->
|
|
@@ -159,6 +181,53 @@ de `sui-drawer-footer`).
|
|
|
159
181
|
- El footer no llega a `large`: en mobile queda más chico que el footer de cualquier modal.
|
|
160
182
|
- `disabled` del item usa opacidad (no está en el Figma).
|
|
161
183
|
|
|
184
|
+
## Bien y mal
|
|
185
|
+
|
|
186
|
+
> Hoy no hay usos de estas piezas fuera de la vitrina `master-preview`: los pares salen de las
|
|
187
|
+
> trampas de este README.
|
|
188
|
+
|
|
189
|
+
Pie del panel en la computadora
|
|
190
|
+
|
|
191
|
+
```html
|
|
192
|
+
<!-- ❌ mal: sin size queda en small (36), y D16 no usa small -->
|
|
193
|
+
<sui-filter-panel-footer (clear)="limpiar()" (apply)="aplicar()" />
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
```html
|
|
197
|
+
<!-- ✅ bien -->
|
|
198
|
+
<sui-filter-panel-footer size="medium" (clear)="limpiar()" (apply)="aplicar()" />
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
«Limpiar» en dos lugares
|
|
202
|
+
|
|
203
|
+
```html
|
|
204
|
+
<!-- ❌ mal: «Limpiar» en la cabecera y en el pie; se elige uno -->
|
|
205
|
+
<sui-filter-panel-header label="Filtros" [clear]="true" (clearClick)="limpiar()" />
|
|
206
|
+
<sui-filter-panel-footer size="medium" (clear)="limpiar()" (apply)="aplicar()" />
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
```html
|
|
210
|
+
<!-- ✅ bien -->
|
|
211
|
+
<sui-filter-panel-header label="Filtros" leftIcon="equalizer-line" />
|
|
212
|
+
<sui-filter-panel-footer size="medium" (clear)="limpiar()" (apply)="aplicar()" />
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Buscador de la barra
|
|
216
|
+
|
|
217
|
+
```html
|
|
218
|
+
<!-- ❌ mal: isMobile deja la tablet táctil en medium (40), debajo de los 44 -->
|
|
219
|
+
<sui-filter-bar>
|
|
220
|
+
<sui-input slot="end" type="search" [size]="bp.isMobile() ? 'large' : 'medium'" />
|
|
221
|
+
</sui-filter-bar>
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```html
|
|
225
|
+
<!-- ✅ bien -->
|
|
226
|
+
<sui-filter-bar>
|
|
227
|
+
<sui-input slot="end" type="search" [size]="bp.sizeControl()" placeholder="Buscar pedido…" />
|
|
228
|
+
</sui-filter-bar>
|
|
229
|
+
```
|
|
230
|
+
|
|
162
231
|
## Ejemplo
|
|
163
232
|
|
|
164
233
|
```html
|
package/docs/sui-flag/README.md
CHANGED
|
@@ -63,11 +63,31 @@ se migra todo ahora, no solo al tocar cada pantalla.
|
|
|
63
63
|
| fila de una lista | `md` (24) | `sm` (20) |
|
|
64
64
|
|
|
65
65
|
```html
|
|
66
|
-
<sui-flag name="peru" [size]="bp.
|
|
66
|
+
<sui-flag name="peru" [size]="bp.celular() ? 'sm' : 'xs'" ariaLabel="Perú" />
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
La bandera no se toca: el área táctil es la del select que la contiene.
|
|
70
70
|
|
|
71
|
+
### Por dispositivo (D16)
|
|
72
|
+
|
|
73
|
+
La bandera no se toca: sube un paso **solo en el celular de 380 px o más**. Fuente: D16, dueño
|
|
74
|
+
05-10-2026 (P1 b).
|
|
75
|
+
|
|
76
|
+
| dispositivo | size | nota |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| celular chico (< 380) | valor «web» (`xs` en el prefijo, `sm` en una fila) | no se toca: no sube aunque sea un celular |
|
|
79
|
+
| celular (380–767) | valor «mobile» (`sm` en el prefijo, `md` en una fila) | un paso más que en la computadora |
|
|
80
|
+
| tablet táctil (`pointer: coarse`) | valor «web» (`xs` / `sm`) | no se toca: el puntero no cambia nada |
|
|
81
|
+
| computadora (`pointer: fine`) | valor «web» (`xs` / `sm`) | |
|
|
82
|
+
|
|
83
|
+
En el ultrawide, igual que en la computadora: el espacio extra va a más columnas, no a banderas
|
|
84
|
+
más grandes.
|
|
85
|
+
|
|
86
|
+
En master-pedidos no hay helper: `[size]="bp.celular() ? 'sm' : 'xs'"` en el prefijo y
|
|
87
|
+
`[size]="bp.celular() ? 'md' : 'sm'"` en una fila. No uses `bp.isMobile()`: incluye el celular
|
|
88
|
+
chico, que va con el valor de web. Dentro de un select o un compact-select no se pasa nada: el
|
|
89
|
+
componente elige el tamaño de su bandera.
|
|
90
|
+
|
|
71
91
|
## «No usar»: por qué no hoy y cuándo sí
|
|
72
92
|
|
|
73
93
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -97,6 +117,47 @@ Outputs: ninguno.
|
|
|
97
117
|
- **El nombre va en inglés** y con las grafías del set (`slovania`, `mauritus`, `taijikistan`):
|
|
98
118
|
copia el slug de `SUI_FLAG_NAMES`, no lo escribas de memoria.
|
|
99
119
|
|
|
120
|
+
## Bien y mal
|
|
121
|
+
|
|
122
|
+
> Hoy no hay usos directos fuera de la vitrina `master-preview`: los pares salen de las reglas
|
|
123
|
+
> de este README.
|
|
124
|
+
|
|
125
|
+
Bandera de adorno
|
|
126
|
+
|
|
127
|
+
```html
|
|
128
|
+
<!-- ❌ mal: la app es solo Perú; la bandera no le dice nada a nadie -->
|
|
129
|
+
<p><sui-flag name="peru" size="sm" /> Delivery en todo el Perú</p>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```html
|
|
133
|
+
<!-- ✅ bien -->
|
|
134
|
+
<p>Delivery en todo el Perú</p>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
País sin nombre al lado
|
|
138
|
+
|
|
139
|
+
```html
|
|
140
|
+
<!-- ❌ mal: sin ariaLabel es decorativa y el lector de pantalla no dice el país -->
|
|
141
|
+
<sui-flag name="venezuela" [size]="bp.celular() ? 'md' : 'sm'" />
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
```html
|
|
145
|
+
<!-- ✅ bien -->
|
|
146
|
+
<sui-flag name="venezuela" [size]="bp.celular() ? 'md' : 'sm'" ariaLabel="Venezuela" />
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Tamaño por dispositivo
|
|
150
|
+
|
|
151
|
+
```html
|
|
152
|
+
<!-- ❌ mal: isMobile sube la bandera también en el celular chico (< 380), que va con el valor de web -->
|
|
153
|
+
<sui-flag name="peru" [size]="bp.isMobile() ? 'sm' : 'xs'" ariaLabel="Perú" />
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```html
|
|
157
|
+
<!-- ✅ bien -->
|
|
158
|
+
<sui-flag name="peru" [size]="bp.celular() ? 'sm' : 'xs'" ariaLabel="Perú" />
|
|
159
|
+
```
|
|
160
|
+
|
|
100
161
|
## Ejemplo
|
|
101
162
|
|
|
102
163
|
```html
|
|
@@ -32,7 +32,7 @@ Regla corta: **ayuda o error de un control sin hint propio → form-hint · camp
|
|
|
32
32
|
> y opcional. No da reglas de largo ni de copy.
|
|
33
33
|
>
|
|
34
34
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-badge`; las cifras
|
|
35
|
-
> siguen iguales el 04-10-2026, las líneas de abajo
|
|
35
|
+
> siguen iguales el 04-10-2026, las líneas de abajo se revisaron el 06-10-2026):
|
|
36
36
|
> **36 usos en 18 archivos**: 11 `error`, 25 `neutral` (24 por default y 1 explícito), 0
|
|
37
37
|
> `disabled`; 2 con `icon` propio (`information-line`). Hay además **al menos 14 hints escritos a
|
|
38
38
|
> mano** con clases propias (`__form-hint`, `__hint`).
|
|
@@ -65,11 +65,11 @@ Regla corta: **ayuda o error de un control sin hint propio → form-hint · camp
|
|
|
65
65
|
(«Pausa tu sucursal…», bajo el título de la card), `:61`, `pages/drivers/drivers.html:29`,
|
|
66
66
|
`pages/driver/driver-schedule/driver-schedule.html:92`.
|
|
67
67
|
- **12 de más de 8 palabras** (4 son los subtítulos de arriba) → acortar, o `sui-alert` si de
|
|
68
|
-
verdad hace falta todo: `pages/super-admin/master-users/master-users.html:
|
|
69
|
-
`pages/orders/orders.html:
|
|
70
|
-
`pages/envios/envios.html:
|
|
68
|
+
verdad hace falta todo: `pages/super-admin/master-users/master-users.html:68` (26 palabras),
|
|
69
|
+
`pages/orders/orders.html:590` (23), `pages/driver/driver-order-detail/driver-order-detail.html:898` (23),
|
|
70
|
+
`pages/envios/envios.html:402` (15).
|
|
71
71
|
- **Al menos 14 hints a mano** con clases propias. Ejemplos: `pages/discounts/discounts.html:205`
|
|
72
|
-
(`discounts__form-hint`), `components/settings-panel/settings-panel.html:
|
|
72
|
+
(`discounts__form-hint`), `components/settings-panel/settings-panel.html:95`,
|
|
73
73
|
`pages/promociones/promociones.html:181`.
|
|
74
74
|
|
|
75
75
|
## Tamaño en mobile y en web
|
|
@@ -80,6 +80,12 @@ Regla corta: **ayuda o error de un control sin hint propio → form-hint · camp
|
|
|
80
80
|
|
|
81
81
|
Es texto que no se toca: el mismo tamaño en las dos plataformas está bien.
|
|
82
82
|
|
|
83
|
+
### Por dispositivo (D16)
|
|
84
|
+
|
|
85
|
+
No aplica: no tiene `size` (la letra es fija de 12/16 px y no se toca), así que es la misma en el
|
|
86
|
+
celular chico, el celular, la tablet táctil, la computadora y el ultrawide. En master-pedidos no
|
|
87
|
+
lleva `bp`.
|
|
88
|
+
|
|
83
89
|
## «No usar»: por qué no hoy y cuándo sí
|
|
84
90
|
|
|
85
91
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -115,6 +121,49 @@ Outputs: ninguno.
|
|
|
115
121
|
(04-10-2026). Para enlazarlo a un control propio, pon `id` en el host y apúntalo con
|
|
116
122
|
`aria-describedby`; los campos del DS ya lo hacen solos.
|
|
117
123
|
|
|
124
|
+
## Bien y mal
|
|
125
|
+
|
|
126
|
+
Ayuda debajo de un campo de texto
|
|
127
|
+
|
|
128
|
+
```html
|
|
129
|
+
<!-- ❌ mal: sui-input ya trae su hint (pages/driver-onboarding/step-info/step-info.html:50) -->
|
|
130
|
+
<sui-input [size]="bp.sizeControl()" [errorMessage]="nameError() || null" … />
|
|
131
|
+
@if (!nameError()) { <sui-form-hint message="Como aparece en tu DNI." /> }
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
```html
|
|
135
|
+
<!-- ✅ bien -->
|
|
136
|
+
<sui-input [size]="bp.sizeControl()" hint="Como aparece en tu DNI"
|
|
137
|
+
[error]="!!nameError()" [errorMessage]="nameError() || null" … />
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Subtítulo de una card
|
|
141
|
+
|
|
142
|
+
```html
|
|
143
|
+
<!-- ❌ mal: no es ayuda de un campo, es el texto de la sección (pages/schedule/schedule.html:17) -->
|
|
144
|
+
<h2 class="schedule__card-title">Estado de la sucursal</h2>
|
|
145
|
+
<sui-form-hint message="Pausa tu sucursal sin perder el horario que ya configuraste." />
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```html
|
|
149
|
+
<!-- ✅ bien -->
|
|
150
|
+
<h2 class="schedule__card-title">Estado de la sucursal</h2>
|
|
151
|
+
<p class="schedule__card-subtitle">Pausa tu sucursal sin perder el horario que ya configuraste.</p>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Explicación de dos oraciones
|
|
155
|
+
|
|
156
|
+
```html
|
|
157
|
+
<!-- ❌ mal: 23 palabras; pasa las 8 del hint (pages/orders/orders.html:590) -->
|
|
158
|
+
<sui-form-hint message="Si eliges un motivo de la lista, el cliente lo verá. Si escribes uno propio, verá “El local no pudo preparar tu pedido”." />
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
```html
|
|
162
|
+
<!-- ✅ bien -->
|
|
163
|
+
<sui-alert variant="info"
|
|
164
|
+
description="Si eliges un motivo de la lista, el cliente lo verá. Si escribes uno propio, verá «El local no pudo preparar tu pedido»." />
|
|
165
|
+
```
|
|
166
|
+
|
|
118
167
|
## Ejemplo
|
|
119
168
|
|
|
120
169
|
```html
|
|
@@ -78,7 +78,7 @@ tipografía, no área táctil.
|
|
|
78
78
|
- **1 encima de un `sui-textarea`**, que ya trae su `[label]`: `pages/promociones/promociones.html:201`
|
|
79
79
|
(«Descripción»).
|
|
80
80
|
- **3 con un switch armado a mano al lado → `sui-switch-label`:** `pages/discounts/discounts.html:204`,
|
|
81
|
-
`:316`; `components/add-product-modal/add-product-modal.html:
|
|
81
|
+
`:316`; `components/add-product-modal/add-product-modal.html:206`.
|
|
82
82
|
|
|
83
83
|
## Tamaño en mobile y en web
|
|
84
84
|
|
|
@@ -91,6 +91,13 @@ No necesita `bp`: es texto, no se toca. Lo único tocable es el `link` («Cambia
|
|
|
91
91
|
`sui-link-button` de 12 px **sin tamaño para mobile**: su área táctil es la del texto. Si en
|
|
92
92
|
mobile esa acción importa, conviene un botón aparte.
|
|
93
93
|
|
|
94
|
+
### Por dispositivo (D16)
|
|
95
|
+
|
|
96
|
+
No aplica: el `size` es tipografía, no área táctil, y no depende del dispositivo. Va `medium`
|
|
97
|
+
(14 px) en el celular chico, el celular, la tablet táctil, la computadora y el ultrawide;
|
|
98
|
+
`small` dibuja igual y `xsmall` no se usa (D16, dueño 05-10-2026: nada en `small`/`xsmall`).
|
|
99
|
+
En master-pedidos: sin `[size]` (el default `medium` ya es el correcto) y sin `bp`.
|
|
100
|
+
|
|
94
101
|
## «No usar»: por qué no hoy y cuándo sí
|
|
95
102
|
|
|
96
103
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -131,6 +138,51 @@ mobile esa acción importa, conviene un botón aparte.
|
|
|
131
138
|
`rel="noopener noreferrer"`). Se pinta en gris, empujado a la derecha.
|
|
132
139
|
- El ícono de info es gris muy claro a propósito (baja jerarquía); se oscurece al pasar el mouse.
|
|
133
140
|
|
|
141
|
+
## Bien y mal
|
|
142
|
+
|
|
143
|
+
Campo de texto con su rótulo
|
|
144
|
+
|
|
145
|
+
```html
|
|
146
|
+
<!-- ❌ mal: sui-input ya dibuja su label y su asterisco (pages/driver-onboarding/step-info/step-info.html:37) -->
|
|
147
|
+
<sui-form-label label="Nombre completo" [required]="true" for="ob-name" />
|
|
148
|
+
<sui-input [size]="bp.sizeControl()" type="text" [(value)]="nombre" />
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```html
|
|
152
|
+
<!-- ✅ bien -->
|
|
153
|
+
<sui-input [size]="bp.sizeControl()" type="text" label="Nombre completo" [required]="true" [(value)]="nombre" />
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Título de una sección
|
|
157
|
+
|
|
158
|
+
```html
|
|
159
|
+
<!-- ❌ mal: «Datos personales» titula la sección, no un campo (pages/customer/checkout/checkout.html:187) -->
|
|
160
|
+
<section class="checkout__section">
|
|
161
|
+
<sui-form-label label="Datos personales" size="medium" />
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
```html
|
|
165
|
+
<!-- ✅ bien -->
|
|
166
|
+
<section class="checkout__section">
|
|
167
|
+
<h2 class="checkout__section-title">Datos personales</h2>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Rótulo de un switch
|
|
171
|
+
|
|
172
|
+
```html
|
|
173
|
+
<!-- ❌ mal: label, ayuda y switch armados a mano (pages/discounts/discounts.html:204) -->
|
|
174
|
+
<sui-form-label label="Un uso por cliente" />
|
|
175
|
+
<span class="discounts__form-hint">Si activas esto, cada cliente solo podrá usar el cupón…</span>
|
|
176
|
+
<sui-switch [size]="bp.controlSize()" [checked]="unUso()" (checkedChange)="unUso.set($event)" />
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```html
|
|
180
|
+
<!-- ✅ bien -->
|
|
181
|
+
<sui-switch-label [size]="bp.controlSize()" label="Un uso por cliente"
|
|
182
|
+
description="Cada cliente usa el cupón una sola vez"
|
|
183
|
+
[active]="unUso()" (activeChange)="unUso.set($event)" />
|
|
184
|
+
```
|
|
185
|
+
|
|
134
186
|
## Ejemplo
|
|
135
187
|
|
|
136
188
|
```html
|