@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
|
@@ -30,7 +30,7 @@ Regla corta: **el campo cambia según una elección corta pegada a él → este
|
|
|
30
30
|
>
|
|
31
31
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos**. Candidato: el gasto del super
|
|
32
32
|
> admin pone «Monto» (`type="number"`) y «Moneda» (PEN/USD) como dos campos separados,
|
|
33
|
-
> `pages/super-admin/master-gastos/master-gastos.html:
|
|
33
|
+
> `pages/super-admin/master-gastos/master-gastos.html:197` y `:206` (medido el 06-10-2026).
|
|
34
34
|
|
|
35
35
|
| prop | cuándo | fuente |
|
|
36
36
|
|---|---|---|
|
|
@@ -57,7 +57,7 @@ en 16/24, igual que el valor del `sui-input` large; el alto no cambia (46 dentro
|
|
|
57
57
|
| size del input y del selector | campo | fuente |
|
|
58
58
|
|---|---|---|
|
|
59
59
|
| `large` | 48 | canon (aprobado por el dueño, 03-10-2026), extensión SUI |
|
|
60
|
-
| `medium` (default) · `small` · `xsmall` | 40 · 36 · 32 | según la guía del DS |
|
|
60
|
+
| `medium` (default) · `small` · `xsmall` | 40 · 36 · 32 | según la guía del DS · `small` y `xsmall` no se usan: D16, dueño 05-10-2026 |
|
|
61
61
|
|
|
62
62
|
| uso | mobile | web | fuente |
|
|
63
63
|
|---|---|---|---|
|
|
@@ -66,11 +66,28 @@ en 16/24, igual que el valor del `sui-input` large; el alto no cambia (46 dentro
|
|
|
66
66
|
Arreglo del 03-10-2026: antes el selector medía 40/36/32 y empujaba el campo a 42/38/34 (el padding
|
|
67
67
|
de la guía no descontaba el borde del input). Ahora el campo mide exacto.
|
|
68
68
|
|
|
69
|
+
### Por dispositivo (D16)
|
|
70
|
+
|
|
71
|
+
Comparte fila con `input` y `select` en la tabla de D16 (dueño, 05-10-2026). El size lo decide el
|
|
72
|
+
`sui-input` que lo contiene: el selector lleva **el mismo**.
|
|
73
|
+
|
|
74
|
+
| dispositivo | size (input y selector) | nota |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| celular chico (< 380 px) | `large` (48) | interino: D16 pide `medium` con área tocable de 44, pero el DS todavía no la estira en `medium` (40); hasta que lo haga, el mismo que el celular |
|
|
77
|
+
| celular (380–767 px) | `large` (48) | el selector toca de arriba a abajo (46) |
|
|
78
|
+
| tablet táctil (`pointer: coarse`) | `large` (48) | también se toca; las opciones de un `medium` solo suben a 44 hasta 767 px |
|
|
79
|
+
| computadora (`pointer: fine`) | `medium` (40) | `small` y `xsmall` no se usan |
|
|
80
|
+
|
|
81
|
+
Ultrawide (≥ 1920 px): igual que la computadora.
|
|
82
|
+
|
|
83
|
+
En master-pedidos: `[size]="bp.sizeControl()"` **en el `sui-input` y en el selector**, los dos con el
|
|
84
|
+
mismo helper.
|
|
85
|
+
|
|
69
86
|
## «No usar»: por qué no hoy y cuándo sí
|
|
70
87
|
|
|
71
88
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
72
89
|
|---|---|---|
|
|
73
|
-
| el componente entero (0 usos) | todo es en soles y con +51 | la moneda de un gasto (`master-gastos.html:
|
|
90
|
+
| el componente entero (0 usos) | todo es en soles y con +51 | la moneda de un gasto (`master-gastos.html:197`) o teléfonos de otro país |
|
|
74
91
|
| `country` con bandera | solo hay teléfonos de Perú | repartidores o clientes con número extranjero |
|
|
75
92
|
|
|
76
93
|
## API
|
|
@@ -110,11 +127,58 @@ Implementa `ControlValueAccessor`.
|
|
|
110
127
|
movió el clic a un div interno. Aquí sigue en el host. Probar en un iPhone antes del primer uso.
|
|
111
128
|
- No mezclar `[(selected)]` con `formControlName`.
|
|
112
129
|
|
|
130
|
+
## Bien y mal
|
|
131
|
+
|
|
132
|
+
**El tamaño del selector y del campo**
|
|
133
|
+
|
|
134
|
+
```html
|
|
135
|
+
<!-- ❌ mal: el selector en medium dentro de un input large; no cubre el campo (vitrina: master-preview/_guia-moleculas/campos.ts:247) -->
|
|
136
|
+
<sui-input size="large" type="amount" label="Monto" [leadingControl]="true">
|
|
137
|
+
<sui-compact-select-for-input data-slot="start" size="medium" [country]="false" [items]="monedas" />
|
|
138
|
+
</sui-input>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
```html
|
|
142
|
+
<!-- ✅ bien -->
|
|
143
|
+
<sui-input [size]="bp.sizeControl()" type="amount" label="Monto" [leadingControl]="true">
|
|
144
|
+
<sui-compact-select-for-input data-slot="start" [size]="bp.sizeControl()" [country]="false" [items]="monedas" />
|
|
145
|
+
</sui-input>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Dónde se proyecta**
|
|
149
|
+
|
|
150
|
+
```html
|
|
151
|
+
<!-- ❌ mal: slot="prefix" no proyecta y, sin leadingControl, el input no dibuja el divisor -->
|
|
152
|
+
<sui-input [size]="bp.sizeControl()" type="amount" label="Monto">
|
|
153
|
+
<sui-compact-select-for-input slot="prefix" [size]="bp.sizeControl()" [country]="false" [items]="monedas" />
|
|
154
|
+
</sui-input>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
```html
|
|
158
|
+
<!-- ✅ bien -->
|
|
159
|
+
<sui-input [size]="bp.sizeControl()" type="amount" label="Monto" [leadingControl]="true">
|
|
160
|
+
<sui-compact-select-for-input data-slot="start" [size]="bp.sizeControl()" [country]="false" [items]="monedas" />
|
|
161
|
+
</sui-input>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Una moneda**
|
|
165
|
+
|
|
166
|
+
```html
|
|
167
|
+
<!-- ❌ mal: country arranca en true; una moneda no lleva bandera -->
|
|
168
|
+
<sui-compact-select-for-input data-slot="start" [size]="bp.sizeControl()" [items]="monedas" [(selected)]="moneda" />
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
```html
|
|
172
|
+
<!-- ✅ bien -->
|
|
173
|
+
<sui-compact-select-for-input data-slot="start" [size]="bp.sizeControl()" [country]="false"
|
|
174
|
+
[items]="monedas" [(selected)]="moneda" />
|
|
175
|
+
```
|
|
176
|
+
|
|
113
177
|
## Ejemplo
|
|
114
178
|
|
|
115
179
|
```html
|
|
116
|
-
<sui-input label="Monto" type="amount" placeholder="0.00" [leadingControl]="true" [(value)]="monto">
|
|
117
|
-
<sui-compact-select-for-input data-slot="start" size="
|
|
180
|
+
<sui-input label="Monto" type="amount" placeholder="0.00" [size]="bp.sizeControl()" [leadingControl]="true" [(value)]="monto">
|
|
181
|
+
<sui-compact-select-for-input data-slot="start" [size]="bp.sizeControl()" [country]="false"
|
|
118
182
|
[items]="monedas" [(selected)]="moneda" />
|
|
119
183
|
</sui-input>
|
|
120
184
|
```
|
|
@@ -82,9 +82,27 @@ táctil de `large` es de **44** (desde el 04-10-2026; 40 en web).
|
|
|
82
82
|
| X para quitar | `large` (32, área 44) | `medium` (20) | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · web: canon (aprobado por el dueño, 05-10-2026, bloque B1) (el tamaño `large` es extensión SUI aprobada el 03-10-2026) |
|
|
83
83
|
|
|
84
84
|
```html
|
|
85
|
-
<sui-content-card … [size]="bp.
|
|
85
|
+
<sui-content-card … [size]="bp.tactil() ? 'large' : 'medium'" (dismiss)="quitar(item)" />
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
+
### Por dispositivo (D16)
|
|
89
|
+
|
|
90
|
+
No está en la tabla por componente de D16 (dueño, 05-10-2026). La fila no cambia; el `size` solo
|
|
91
|
+
mueve la X, que **se toca**, así que va como «lo que se toca».
|
|
92
|
+
|
|
93
|
+
| dispositivo | size | nota |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| celular chico (< 380 px) | `large` (32, área 44) | interino: D16 pide `medium` con área de 44, pero la X `medium` tiene área de 20; hasta que el DS la estire, el mismo que el celular |
|
|
96
|
+
| celular (380–767 px) | `large` (32, área 44) | |
|
|
97
|
+
| tablet táctil (`pointer: coarse`) | `large` (32, área 40) | también se toca. Ojo: el área de 44 del `::before` está bajo `@media (max-width: 767px)` (`sui-content-card.scss:118`), así que en la tablet se queda en 40 hasta que el DS la prenda con `pointer: coarse` |
|
|
98
|
+
| computadora (`pointer: fine`) | `medium` (20) | |
|
|
99
|
+
|
|
100
|
+
Ultrawide (≥ 1920 px): igual que la computadora. Con `[dismissible]="false"` (los 4 usos de hoy) el
|
|
101
|
+
`size` no cambia nada y no hace falta pasarlo. El badge de adentro **no se toca**: su `size` va
|
|
102
|
+
dentro del objeto `badge` con `bp.sizeBadge()` (como `master-overview.html:335`).
|
|
103
|
+
|
|
104
|
+
En master-pedidos: `[size]="bp.tactil() ? 'large' : 'medium'"` (no hay helper propio).
|
|
105
|
+
|
|
88
106
|
## «No usar»: por qué no hoy y cuándo sí
|
|
89
107
|
|
|
90
108
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -135,6 +153,49 @@ táctil de `large` es de **44** (desde el 04-10-2026; 40 en web).
|
|
|
135
153
|
- No tiene `interactive` ni output de toque: la fila no se puede tocar entera.
|
|
136
154
|
- El host borra el atributo `title` del DOM y lleva `role="group"` con `aria-label` = `title`.
|
|
137
155
|
|
|
156
|
+
## Bien y mal
|
|
157
|
+
|
|
158
|
+
**La nota como badge**
|
|
159
|
+
|
|
160
|
+
```html
|
|
161
|
+
<!-- ❌ mal: badge en string sale naranja lighter small, en MAYÚSCULAS (prototipo: master-prototipos.html:146) -->
|
|
162
|
+
<sui-content-card type="avatar" [avatar]="{ initials: yo.iniciales, color: 'orange' }" [title]="yo.nombre"
|
|
163
|
+
badge="★ 5.0" [dismissible]="false" />
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
```html
|
|
167
|
+
<!-- ✅ bien -->
|
|
168
|
+
<sui-content-card type="avatar" [avatar]="{ initials: yo.iniciales, color: 'orange' }" [title]="yo.nombre"
|
|
169
|
+
[badge]="{ label: '5.0 ★', color: 'orange', variant: 'lighter', size: bp.sizeBadge() }"
|
|
170
|
+
[dismissible]="false" />
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Una fila que no se quita**
|
|
174
|
+
|
|
175
|
+
```html
|
|
176
|
+
<!-- ❌ mal: dismissible arranca en true; sale una X que no hace nada -->
|
|
177
|
+
<sui-content-card type="avatar" [avatar]="avatarDe(c, 'blue')" [title]="c.nombre" [subtitle]="c.detalle" />
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
```html
|
|
181
|
+
<!-- ✅ bien -->
|
|
182
|
+
<sui-content-card type="avatar" [avatar]="avatarDe(c, 'blue')" [title]="c.nombre" [subtitle]="c.detalle"
|
|
183
|
+
[dismissible]="false" />
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Una fila que sí se quita**
|
|
187
|
+
|
|
188
|
+
```html
|
|
189
|
+
<!-- ❌ mal: la X en medium mide 20 en el celular y se anuncia como «Descartar» -->
|
|
190
|
+
<sui-content-card type="avatar" [avatar]="m.avatar" [title]="m.nombre" (dismiss)="quitar(m)" />
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```html
|
|
194
|
+
<!-- ✅ bien -->
|
|
195
|
+
<sui-content-card type="avatar" [avatar]="m.avatar" [title]="m.nombre" [size]="bp.tactil() ? 'large' : 'medium'"
|
|
196
|
+
[dismissAriaLabel]="'Quitar a ' + m.nombre + ' del equipo'" (dismiss)="quitar(m)" />
|
|
197
|
+
```
|
|
198
|
+
|
|
138
199
|
## Ejemplo
|
|
139
200
|
|
|
140
201
|
```html
|
|
@@ -143,6 +204,6 @@ táctil de `large` es de **44** (desde el 04-10-2026; 40 en web).
|
|
|
143
204
|
[avatar]="{ src: local.logo, initials: 'SA', color: 'orange' }"
|
|
144
205
|
[title]="local.nombre"
|
|
145
206
|
[subtitle]="local.pedidos + ' pedidos este mes'"
|
|
146
|
-
[badge]="{ label: '4.6 ★', color: 'orange', variant: 'lighter', size:
|
|
207
|
+
[badge]="{ label: '4.6 ★', color: 'orange', variant: 'lighter', size: bp.sizeBadge() }"
|
|
147
208
|
[dismissible]="false" />
|
|
148
209
|
```
|
|
@@ -82,6 +82,15 @@ computadora (`pointer: fine`) y, en lo que no se toca, también la tablet. En el
|
|
|
82
82
|
los botones (`icon-button`, `text-button`, grupos) quedan debajo de los 44 px del dedo; es otra
|
|
83
83
|
razón para no usarlos hoy. Si un flujo nuevo los necesita en mobile, se pide al DS un tamaño grande.
|
|
84
84
|
|
|
85
|
+
### Por dispositivo (D16)
|
|
86
|
+
|
|
87
|
+
No aplica: **no tiene `size`** (texto de 11–12 y botones de 32 en todos los dispositivos, del
|
|
88
|
+
celular chico al ultrawide). Con D16 los botones de 32 quedan bajo los 44 también en la tablet
|
|
89
|
+
táctil (`pointer: coarse`), no solo en el celular: una razón más para no usar los tipos con botón
|
|
90
|
+
hasta que el DS tenga un tamaño grande.
|
|
91
|
+
|
|
92
|
+
En master-pedidos: no hay helper ni `[size]`; solo `type` y `text`.
|
|
93
|
+
|
|
85
94
|
## API
|
|
86
95
|
|
|
87
96
|
<!-- api:inicio -->
|
|
@@ -107,13 +116,52 @@ Outputs: `(buttonClick)` en `icon-button` y `text-button`; `(itemClick)` con
|
|
|
107
116
|
|
|
108
117
|
## Trampas
|
|
109
118
|
|
|
110
|
-
- **
|
|
119
|
+
- **El texto de `text-line`, `text` y `solid-text` sale en MAYÚSCULAS** por CSS: escribirlo normal.
|
|
120
|
+
Los botones (`text-button`, `text-button-group`) no van en mayúsculas.
|
|
111
121
|
- **`text` y `solid-text` alinean a la izquierda**, no al centro (así está en el Figma).
|
|
112
122
|
- `text-line` usa 11 px; `text` y `solid-text`, 12 px.
|
|
113
123
|
- Sin `ariaLabel`, el `icon-button` se anuncia como «Acción» y los ítems de grupo como
|
|
114
124
|
«Acción 0», «Acción 1».
|
|
115
125
|
- `line` y `line-spacing` existen, pero la línea sola es `sui-divider`.
|
|
116
126
|
|
|
127
|
+
## Bien y mal
|
|
128
|
+
|
|
129
|
+
**El «o» entre Google y el correo**
|
|
130
|
+
|
|
131
|
+
```html
|
|
132
|
+
<!-- ❌ mal: el «o» armado a mano, como estaba en login.html:61 y register.html:97 hasta el 03-10-2026 -->
|
|
133
|
+
<div class="auth-page__divider"><span>o</span></div>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
```html
|
|
137
|
+
<!-- ✅ bien -->
|
|
138
|
+
<sui-content-divider type="text-line" text="o" />
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Cabecera de grupo en MAYÚSCULAS a mano**
|
|
142
|
+
|
|
143
|
+
```html
|
|
144
|
+
<!-- ❌ mal: el componente ya lo pasa a MAYÚSCULAS; el texto va en sentence case (CANON-SUI §5.1) -->
|
|
145
|
+
<sui-content-divider type="solid-text" text="CON POCOS PEDIDOS" />
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```html
|
|
149
|
+
<!-- ✅ bien -->
|
|
150
|
+
<sui-content-divider type="solid-text" text="Con pocos pedidos" />
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Una línea sola entre dos bloques**
|
|
154
|
+
|
|
155
|
+
```html
|
|
156
|
+
<!-- ❌ mal: `line` no dice nada; la línea sola es `sui-divider`, que pesa menos -->
|
|
157
|
+
<sui-content-divider type="line" />
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
```html
|
|
161
|
+
<!-- ✅ bien -->
|
|
162
|
+
<sui-divider />
|
|
163
|
+
```
|
|
164
|
+
|
|
117
165
|
## Ejemplo
|
|
118
166
|
|
|
119
167
|
```html
|
|
@@ -64,29 +64,61 @@ content-card · ajuste → switch-label.**
|
|
|
64
64
|
| `toggle` / `toggleChecked` | Ver «No usar». | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
65
65
|
| `disabled` | Ver «No usar». | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
66
66
|
|
|
67
|
-
**Usos de hoy que rompen las reglas:** 0.
|
|
67
|
+
**Usos de hoy que rompen las reglas:** 0 en tipo y piezas. **Con D16 (medido el 06-10-2026)
|
|
68
|
+
rompen el `size` 5**: `pages/driver/driver-dashboard/driver-dashboard.html:1236` (`medium` fijo en
|
|
69
|
+
una fila de dato), los 3 de `step-complete.html:48`–`:58` (sin `size`, fila de dato) y
|
|
70
|
+
`step-complete.html:80` (sin `size`, fila que se toca: queda en `medium` en el celular y la tablet,
|
|
71
|
+
donde la fila de D16 pide `large`). Ojo: en ese último el área táctil está bien (el `<a>` que lo
|
|
72
|
+
envuelve mide 66); lo que rompe es el tamaño de lectura, no el dedo. A mirar: los 3 badges de
|
|
68
73
|
`pages/driver-onboarding/step-complete/step-complete.html:48`–`:58` dicen estados de ciclo
|
|
69
74
|
(«Completados», «Esperando vinculación»); el README de `sui-badge` deja esos en
|
|
70
75
|
`sui-status-badge`, pero el content-label solo recibe la config del badge.
|
|
71
76
|
|
|
72
77
|
## Tamaño en mobile y en web
|
|
73
78
|
|
|
74
|
-
No se toca, así que no tiene que llegar a 44. El `size` es de lectura, no de dedo
|
|
79
|
+
No se toca, así que no tiene que llegar a 44. El `size` es de lectura, no de dedo: cuando la fila
|
|
80
|
+
entera se toca, el área de 44 la pone lo que la envuelve (un `<a>` o un botón), no el `size`.
|
|
75
81
|
|
|
76
82
|
| uso | mobile | web | fuente |
|
|
77
83
|
|---|---|---|---|
|
|
78
84
|
| consejos y pasos | `large` | `large` | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
79
85
|
| filas de dato | `large` | `medium` | canon (dueño, 05-10-2026, D16): grande en el celular; `medium` en la computadora, la tablet y el celular chico (no se toca) |
|
|
80
|
-
| fila que se toca (soporte) | `large
|
|
86
|
+
| fila que se toca (soporte) | `large` (celular y tablet táctil) | `medium` (computadora y celular chico) | canon (aprobado por el dueño, 05-10-2026, bloque B1; dispositivos por D16). Además, lo que la envuelve mide 44 o más de alto |
|
|
81
87
|
|
|
82
88
|
Alto de la fila, medido: `medium` 40 (máx. entre el leading de 40 y el texto 20 + 4 + 16) y
|
|
83
89
|
`large` 48 (máx. entre 48 y 24 + 4 + 20). Lo que se toca es lo que la envuelve: «Contactar soporte»
|
|
84
90
|
va dentro de un `<a>` con padding 12 y borde 1, que da 66.
|
|
85
91
|
|
|
86
92
|
```html
|
|
87
|
-
<sui-content-label [size]="bp.
|
|
93
|
+
<sui-content-label [size]="bp.celular() ? 'large' : 'medium'" … /> <!-- filas de dato (D16) -->
|
|
94
|
+
<sui-content-label [size]="bp.tactil() && !bp.celularChico() ? 'large' : 'medium'" … /> <!-- fila que se toca (D16) -->
|
|
88
95
|
```
|
|
89
96
|
|
|
97
|
+
### Por dispositivo (D16)
|
|
98
|
+
|
|
99
|
+
Fila de D16 para `content-label` (dueño, 05-10-2026). Es de lectura: sube un paso solo en el
|
|
100
|
+
celular, salvo que la fila entera se toque, que entonces sube también en la tablet táctil. En el
|
|
101
|
+
celular chico queda `medium` en los dos casos: la fila de D16 no lleva el «+ área 44» de lo que se
|
|
102
|
+
toca, porque el área la da lo que envuelve a la fila.
|
|
103
|
+
|
|
104
|
+
| dispositivo | size | nota |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| celular chico (< 380) | `medium` | también si la fila se toca: el área de 44 la pone el `<a>` que la envuelve («Contactar soporte» mide 66) |
|
|
107
|
+
| celular (380–767) | `large` | lo que no se toca sube un paso en el celular (P1 b) |
|
|
108
|
+
| tablet táctil (`pointer: coarse`) | `medium` · `large` si la fila se toca | |
|
|
109
|
+
| computadora (`pointer: fine`) | `medium` | |
|
|
110
|
+
|
|
111
|
+
Ultrawide: igual que la computadora; el espacio extra va al ancho de la lista, no a la fila.
|
|
112
|
+
|
|
113
|
+
Los **consejos y pasos** quedan en `large` en todos los dispositivos (tabla de arriba, bloque B1):
|
|
114
|
+
el `size` ahí es por la descripción larga, no por el dispositivo.
|
|
115
|
+
|
|
116
|
+
En master-pedidos: no hay helper propio. Filas de dato `[size]="bp.celular() ? 'large' : 'medium'"`
|
|
117
|
+
(da lo mismo que `bp.sizeBadge()`); fila que se toca
|
|
118
|
+
`[size]="bp.tactil() && !bp.celularChico() ? 'large' : 'medium'"` (`bp.tactil()` solo daría `large`
|
|
119
|
+
también en el celular chico, que la fila de D16 deja en `medium`);
|
|
120
|
+
consejos `size="large"`.
|
|
121
|
+
|
|
90
122
|
## «No usar»: por qué no hoy y cuándo sí
|
|
91
123
|
|
|
92
124
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -137,6 +169,53 @@ va dentro de un `<a>` con padding 12 y borde 1, que da 66.
|
|
|
137
169
|
- El host lleva `role="group"` y `aria-label` = `label`. El `toggle` toma su nombre del `label`
|
|
138
170
|
(y su descripción de `description`) con `aria-labelledby` (revisión 04-10-2026).
|
|
139
171
|
|
|
172
|
+
## Bien y mal
|
|
173
|
+
|
|
174
|
+
**Fila de dato con el tamaño fijo**
|
|
175
|
+
|
|
176
|
+
```html
|
|
177
|
+
<!-- ❌ mal: `medium` también en el celular, donde D16 pide `large` (driver-dashboard.html:1236; sin size en step-complete.html:48–58) -->
|
|
178
|
+
<sui-content-label type="avatar" size="medium" [avatar]="n.avatar"
|
|
179
|
+
[label]="n.tenantName" [badge]="n.badge" badgePlacement="title" />
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
```html
|
|
183
|
+
<!-- ✅ bien -->
|
|
184
|
+
<sui-content-label type="avatar" [size]="bp.celular() ? 'large' : 'medium'" [avatar]="n.avatar"
|
|
185
|
+
[label]="n.tenantName" [badge]="n.badge" badgePlacement="title" />
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Fila que se toca sin `size`**
|
|
189
|
+
|
|
190
|
+
```html
|
|
191
|
+
<!-- ❌ mal: queda en `medium` en el celular y la tablet táctil, donde D16 pide `large`; el área ya está bien, el `<a>` mide 66 (step-complete.html:80) -->
|
|
192
|
+
<a class="complete__quick-action" [href]="whatsappUrl">
|
|
193
|
+
<sui-content-label type="left-icon" icon="whatsapp-line" label="Contactar soporte" />
|
|
194
|
+
</a>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
```html
|
|
198
|
+
<!-- ✅ bien -->
|
|
199
|
+
<a class="complete__quick-action" [href]="whatsappUrl">
|
|
200
|
+
<sui-content-label type="left-icon" icon="whatsapp-line" label="Contactar soporte"
|
|
201
|
+
[size]="bp.tactil() && !bp.celularChico() ? 'large' : 'medium'" />
|
|
202
|
+
</a>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Un ajuste que se prende o apaga**
|
|
206
|
+
|
|
207
|
+
```html
|
|
208
|
+
<!-- ❌ mal: el `toggle` es un switch `medium` fijo y la fila no se toca entera («No usar») -->
|
|
209
|
+
<sui-content-label label="Sonidos de la app" description="Avisos al confirmar pedidos"
|
|
210
|
+
[toggle]="true" [(toggleChecked)]="sonidos" />
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
```html
|
|
214
|
+
<!-- ✅ bien -->
|
|
215
|
+
<sui-switch-label [flip]="true" label="Sonidos de la app" description="Avisos al confirmar pedidos"
|
|
216
|
+
[size]="bp.controlSize()" [(active)]="sonidos" />
|
|
217
|
+
```
|
|
218
|
+
|
|
140
219
|
## Ejemplo
|
|
141
220
|
|
|
142
221
|
```html
|
|
@@ -48,8 +48,16 @@ Regla corta: **se ajusta de a uno y tiene tope → counter · se tipea → input
|
|
|
48
48
|
| `error` + `errorMessage` | No usar hoy: el contador no deja salir del rango. | — |
|
|
49
49
|
| `required` · `sublabel` · `tooltip` | No usar hoy: una cantidad siempre tiene valor. | — |
|
|
50
50
|
|
|
51
|
-
**Usos de hoy que rompen la regla:**
|
|
52
|
-
|
|
51
|
+
**Usos de hoy que rompen la regla:** los 4, por el `size` (medido el 06-10-2026, D16): en el
|
|
52
|
+
teléfono van en `large`, con botones de 40, por debajo del piso de 44.
|
|
53
|
+
`pages/customer/restaurant-menu/restaurant-menu.html:479` y
|
|
54
|
+
`components/cambiar-pasajeros/cambiar-pasajeros.html:8` llevan `size="large"` fijo, pero no les
|
|
55
|
+
toca lo mismo: el de restaurant-menu va junto al CTA (`bp.tactil() ? 'xlarge' : 'large'`) y el de
|
|
56
|
+
cambiar-pasajeros es un campo de formulario dentro de un modal, con `label` y `hint`, que va como
|
|
57
|
+
una fila (`bp.tactil() ? 'xlarge' : 'medium'`). `pages/customer/cart/cart.html:77` y
|
|
58
|
+
`pages/customer/viaje/viaje.html:182` llevan `bp.isMobile() ? 'large' : 'medium'` (además la tablet
|
|
59
|
+
queda en `medium`); les toca `bp.tactil() ? 'xlarge' : 'medium'`. Los 2 sin nombre para el
|
|
60
|
+
lector y los 2 en `medium` fijo en el teléfono ya se habían corregido el 03-10-2026 (`f96cf735`).
|
|
53
61
|
|
|
54
62
|
## Tamaño en mobile y en web
|
|
55
63
|
|
|
@@ -75,18 +83,37 @@ en 40, por debajo del piso; no hace falta un size nuevo porque `xlarge` ya llega
|
|
|
75
83
|
| uso | mobile | web | fuente |
|
|
76
84
|
|---|---|---|---|
|
|
77
85
|
| cantidad junto al CTA (detalle del producto) | `xlarge` (52, botones de 44) | `large` | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · web: canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
78
|
-
| cantidad en una fila (carrito, pasajeros) | `xlarge` (52, botones de 44) | `medium` (40) | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · web: canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
86
|
+
| cantidad en una fila o campo de un formulario (carrito, pasajeros) | `xlarge` (52, botones de 44) | `medium` (40) | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono · web: canon (aprobado por el dueño, 05-10-2026, bloque B1) |
|
|
79
87
|
|
|
80
88
|
```html
|
|
81
|
-
<sui-counter-input [size]="bp.
|
|
89
|
+
<sui-counter-input [size]="bp.tactil() ? 'xlarge' : 'medium'" … /> <!-- en una fila · bp = BreakpointsService -->
|
|
90
|
+
<sui-counter-input [size]="bp.tactil() ? 'xlarge' : 'large'" … /> <!-- junto al CTA -->
|
|
82
91
|
```
|
|
83
92
|
|
|
93
|
+
### Por dispositivo (D16)
|
|
94
|
+
|
|
95
|
+
Fila de D16 para `counter-input` (dueño, 05-10-2026). Se toca: donde hay dedo va `xlarge`, el
|
|
96
|
+
único size con botones de 44.
|
|
97
|
+
|
|
98
|
+
| dispositivo | size | nota |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| celular chico (< 380) | `xlarge` | no hay un `medium` con botones de 44, así que no baja como el resto de lo que se toca |
|
|
101
|
+
| celular (380–767) | `xlarge` | campo de 52, botones de 44 |
|
|
102
|
+
| tablet táctil (`pointer: coarse`) | `xlarge` | Apple pide 44 pt también en iPad |
|
|
103
|
+
| computadora (`pointer: fine`) | `large` junto al CTA · `medium` en una fila o en un formulario | con mouse no hace falta llegar a 44 |
|
|
104
|
+
|
|
105
|
+
Ultrawide: igual que la computadora.
|
|
106
|
+
|
|
107
|
+
En master-pedidos: no hay helper (`bp.sizeControl()` da `large`/`medium` y no llega a `xlarge`).
|
|
108
|
+
En una fila o en un formulario `[size]="bp.tactil() ? 'xlarge' : 'medium'"`; junto al CTA
|
|
109
|
+
`[size]="bp.tactil() ? 'xlarge' : 'large'"`.
|
|
110
|
+
|
|
84
111
|
## «No usar»: por qué no hoy y cuándo sí
|
|
85
112
|
|
|
86
113
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
87
114
|
|---|---|---|
|
|
88
115
|
| `size` `2xsmall`, `xsmall`, `small` | en la app la cantidad se toca con el dedo, y son chicos (D16, 05-10-2026) | nunca: una tabla del panel donde se ajusta el stock también va `medium` |
|
|
89
|
-
| `size="xlarge"` |
|
|
116
|
+
| `size="xlarge"` en la computadora | con mouse no hace falta llegar a 44: junto al CTA va `large` y en una fila `medium` (D16, dueño 05-10-2026). En celular y tablet sí va `xlarge` | — |
|
|
90
117
|
| `step` distinto de 1 | no hay productos que se vendan de a varios | huevos por media docena, gaseosas por pack de 6 |
|
|
91
118
|
| `error` | el contador no deja salir del rango | el stock bajó con el carrito abierto y la cantidad ya no alcanza |
|
|
92
119
|
| `tooltip` · `sublabel` · `required` | una cantidad siempre tiene valor | — |
|
|
@@ -136,14 +163,71 @@ en 40, por debajo del piso; no hace falta un size nuevo porque `xlarge` ya llega
|
|
|
136
163
|
mínimo/máximo, si están definidos) desde el 04-10-2026; antes solo se operaba con − y +.
|
|
137
164
|
- El campo es una píldora (radio completo), decisión de SUI; el Figma de origen usa 10/8 px.
|
|
138
165
|
|
|
166
|
+
## Bien y mal
|
|
167
|
+
|
|
168
|
+
**Cantidad junto al CTA del detalle**
|
|
169
|
+
|
|
170
|
+
```html
|
|
171
|
+
<!-- ❌ mal: `large` fijo deja los botones en 40 en el teléfono (restaurant-menu.html:479) -->
|
|
172
|
+
<sui-counter-input size="large" ariaLabel="Cantidad" [min]="1" [max]="pdv.topeCantidad()"
|
|
173
|
+
[value]="pdv.qty()" (valueChange)="pdv.setQty($event)" />
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
```html
|
|
177
|
+
<!-- ✅ bien -->
|
|
178
|
+
<sui-counter-input [size]="bp.tactil() ? 'xlarge' : 'large'" ariaLabel="Cantidad" [min]="1"
|
|
179
|
+
[max]="pdv.topeCantidad()" [value]="pdv.qty()" (valueChange)="pdv.setQty($event)" />
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Cantidad en una fila del carrito**
|
|
183
|
+
|
|
184
|
+
```html
|
|
185
|
+
<!-- ❌ mal: `large` en el teléfono (botones de 40) y `medium` en la tablet (cart.html:77, viaje.html:182) -->
|
|
186
|
+
<sui-counter-input [size]="bp.isMobile() ? 'large' : 'medium'" [ariaLabel]="'Cantidad de ' + item.name"
|
|
187
|
+
[value]="item.quantity" [min]="1" [max]="99" (valueChange)="setQuantity(item.lineKey, $event)" />
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
```html
|
|
191
|
+
<!-- ✅ bien -->
|
|
192
|
+
<sui-counter-input [size]="bp.tactil() ? 'xlarge' : 'medium'" [ariaLabel]="'Cantidad de ' + item.name"
|
|
193
|
+
[value]="item.quantity" [min]="1" [max]="99" (valueChange)="setQuantity(item.lineKey, $event)" />
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Campo de formulario con `large` fijo**
|
|
197
|
+
|
|
198
|
+
```html
|
|
199
|
+
<!-- ❌ mal: `large` fijo deja los botones en 40 en el teléfono, y en la computadora no va junto a un CTA (cambiar-pasajeros.html:8) -->
|
|
200
|
+
<sui-counter-input size="large" label="Pasajeros" [hint]="cupoTexto()" [min]="1" [max]="cupo()"
|
|
201
|
+
[value]="pasajeros()" (valueChange)="pasajeros.set($event)" />
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
```html
|
|
205
|
+
<!-- ✅ bien: es un campo, va como una fila -->
|
|
206
|
+
<sui-counter-input [size]="bp.tactil() ? 'xlarge' : 'medium'" label="Pasajeros" [hint]="cupoTexto()"
|
|
207
|
+
[min]="1" [max]="cupo()" [value]="pasajeros()" (valueChange)="pasajeros.set($event)" />
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Sin tope y sin `valueChange`**
|
|
211
|
+
|
|
212
|
+
```html
|
|
213
|
+
<!-- ❌ mal: es controlado, el número no se mueve; y sin `min` baja a negativos (Trampas) -->
|
|
214
|
+
<sui-counter-input ariaLabel="Cantidad" [value]="cantidad()" />
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
```html
|
|
218
|
+
<!-- ✅ bien -->
|
|
219
|
+
<sui-counter-input ariaLabel="Cantidad" [min]="1" [max]="99"
|
|
220
|
+
[value]="cantidad()" (valueChange)="cantidad.set($event)" />
|
|
221
|
+
```
|
|
222
|
+
|
|
139
223
|
## Ejemplo
|
|
140
224
|
|
|
141
225
|
```html
|
|
142
226
|
<!-- En el detalle del producto, al lado del CTA -->
|
|
143
|
-
<sui-counter-input size="large" [min]="1" [max]="pdv.topeCantidad()"
|
|
227
|
+
<sui-counter-input [size]="bp.tactil() ? 'xlarge' : 'large'" [min]="1" [max]="pdv.topeCantidad()"
|
|
144
228
|
ariaLabel="Cantidad" [value]="pdv.qty()" (valueChange)="pdv.setQty($event)" />
|
|
145
229
|
|
|
146
230
|
<!-- Campo de formulario -->
|
|
147
231
|
<sui-counter-input label="Pasajeros" hint="Hasta 4 pasajeros" [min]="1" [max]="4"
|
|
148
|
-
[size]="bp.
|
|
232
|
+
[size]="bp.tactil() ? 'xlarge' : 'medium'" [(value)]="pasajeros" />
|
|
149
233
|
```
|
|
@@ -53,13 +53,30 @@ Tiene `size`: **`medium`** (default, 288 × 36, flechas `sui-compact-button` de
|
|
|
53
53
|
| `medium` (default) | 36 | 24 × 24 | 14/20 | web | medido (Figma 442:192) |
|
|
54
54
|
|
|
55
55
|
```html
|
|
56
|
-
<sui-date-selector [size]="bp.
|
|
56
|
+
<sui-date-selector [size]="bp.tactil() ? 'large' : 'medium'" label="Octubre 2026"
|
|
57
57
|
[rightIcon]="!esMesActual()" (prev)="mesAnterior()" (next)="mesSiguiente()" />
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
Dentro del `sui-datepicker` `large` (y en mobile con `small`–`large`) el datepicker agranda las
|
|
61
61
|
flechas a 40 por su cuenta; con `xlarge` usa este `size="large"` (44).
|
|
62
62
|
|
|
63
|
+
### Por dispositivo (D16)
|
|
64
|
+
|
|
65
|
+
No está en la tabla por componente de D16; las flechas se tocan, así que va como **lo que se
|
|
66
|
+
toca** (dueño, 05-10-2026). `large` es el único size con flechas de 44.
|
|
67
|
+
|
|
68
|
+
| dispositivo | size | nota |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| celular chico (< 380) | `medium` + área 44 | interino: hoy `large`, porque el DS todavía no estira a 44 el área de las flechas de 24 del `medium` |
|
|
71
|
+
| celular (380–767) | `large` | barra de 52, flechas de 44 |
|
|
72
|
+
| tablet táctil (`pointer: coarse`) | `large` | Apple pide 44 pt también en iPad |
|
|
73
|
+
| computadora (`pointer: fine`) | `medium` | barra de 36, flechas de 24 |
|
|
74
|
+
|
|
75
|
+
Ultrawide: igual que la computadora; el ancho sigue fijo en 288.
|
|
76
|
+
|
|
77
|
+
En master-pedidos: `[size]="bp.tactil() ? 'large' : 'medium'"` (son los mismos literales que
|
|
78
|
+
devuelve `bp.sizeControl()`, que también sirve).
|
|
79
|
+
|
|
63
80
|
## «No usar»: por qué no hoy y cuándo sí
|
|
64
81
|
|
|
65
82
|
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
@@ -90,13 +107,54 @@ flechas a 40 por su cuenta; con `xlarge` usa este `size="large"` (44).
|
|
|
90
107
|
|
|
91
108
|
- **`leftIcon` y `rightIcon` son booleanos**, no nombres de ícono: prenden o apagan las flechas.
|
|
92
109
|
- **Ancho fijo de 288 px** (`max-width` incluido): no se estira con el contenedor.
|
|
93
|
-
- Con una flecha apagada queda un hueco de 24 px
|
|
110
|
+
- Con una flecha apagada queda un hueco del ancho de la flecha (24 px en `medium`, 44 en `large`)
|
|
111
|
+
para que el texto siga centrado.
|
|
94
112
|
- El componente **no sabe de fechas**: el texto lo arma quien lo usa y las flechas solo emiten.
|
|
95
113
|
- Los `aria-label` de las flechas dicen «Mes anterior» y «Mes siguiente» aunque el período sea
|
|
96
114
|
una semana.
|
|
97
115
|
|
|
98
|
-
##
|
|
116
|
+
## Bien y mal
|
|
117
|
+
|
|
118
|
+
**Las flechas en el teléfono**
|
|
119
|
+
|
|
120
|
+
```html
|
|
121
|
+
<!-- ❌ mal: `medium` deja las flechas en 24 en el celular y la tablet -->
|
|
122
|
+
<sui-date-selector label="Octubre 2026" (prev)="mesAnterior()" (next)="mesSiguiente()" />
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```html
|
|
126
|
+
<!-- ✅ bien -->
|
|
127
|
+
<sui-date-selector [size]="bp.tactil() ? 'large' : 'medium'" label="Octubre 2026"
|
|
128
|
+
(prev)="mesAnterior()" (next)="mesSiguiente()" />
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Ya se está en el mes actual**
|
|
99
132
|
|
|
100
133
|
```html
|
|
134
|
+
<!-- ❌ mal: los dos en `false` es un título con fondo; y abrevia el mes («Qué variante usar») -->
|
|
135
|
+
<sui-date-selector label="Oct. 2026" [leftIcon]="false" [rightIcon]="false" />
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```html
|
|
139
|
+
<!-- ✅ bien: se apaga solo la flecha que no lleva a nada -->
|
|
101
140
|
<sui-date-selector label="Octubre 2026" [rightIcon]="false" (prev)="mesAnterior()" />
|
|
102
141
|
```
|
|
142
|
+
|
|
143
|
+
**Períodos fijos**
|
|
144
|
+
|
|
145
|
+
```html
|
|
146
|
+
<!-- ❌ mal: «Hoy», «Esta semana», «Este mes» no se recorren con flechas («Cuándo no») -->
|
|
147
|
+
<sui-date-selector [label]="periodo()" (prev)="periodoAnterior()" (next)="periodoSiguiente()" />
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```html
|
|
151
|
+
<!-- ✅ bien -->
|
|
152
|
+
<sui-segmented-control [tabs]="periodos" [(active)]="periodo" ariaLabel="Período" />
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Ejemplo
|
|
156
|
+
|
|
157
|
+
```html
|
|
158
|
+
<sui-date-selector [size]="bp.tactil() ? 'large' : 'medium'" label="Octubre 2026"
|
|
159
|
+
[rightIcon]="false" (prev)="mesAnterior()" />
|
|
160
|
+
```
|