@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
|
@@ -56,30 +56,32 @@ marketing: brillo arriba, borde interior claro y un anillo del color del botón.
|
|
|
56
56
|
| size | cuándo | fuente |
|
|
57
57
|
|---|---|---|
|
|
58
58
|
| `large` (48) | El CTA en el teléfono. Texto 16. | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono; extensión de SUI, la guía no lo tiene |
|
|
59
|
-
| `medium` (40, default) | El CTA de la landing en
|
|
60
|
-
| `small` (36) |
|
|
61
|
-
| `xsmall` (32) | Sin caso: en una landing el CTA nunca es tan chico. | escala según la guía del DS · cuándo:
|
|
59
|
+
| `medium` (40, default) | El CTA de la landing en la computadora, también dentro de la card de un plan. | escala y default según la guía del DS · cuándo: canon (aprobado por el dueño, 05-10-2026, bloque B1) · la card de un plan: canon (dueño, 05-10-2026, D16) |
|
|
60
|
+
| `small` (36) | No usar: es chico. El CTA dentro de la card de un plan va `medium`. | escala según la guía del DS · no usarlo: canon (dueño, 05-10-2026, D16), reemplaza el «cuándo» del bloque B1 |
|
|
61
|
+
| `xsmall` (32) | Sin caso: en una landing el CTA nunca es tan chico. | escala según la guía del DS · cuándo: canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
62
62
|
|
|
63
63
|
### Íconos y `disabled`
|
|
64
64
|
|
|
65
65
|
| prop | cuándo | fuente |
|
|
66
66
|
|---|---|---|
|
|
67
|
-
| `rightIcon` (`arrow-right-line`) | El CTA lleva a otra página: «Empieza gratis →». |
|
|
68
|
-
| `leftIcon` | El ícono dice la acción (descargar, WhatsApp). |
|
|
69
|
-
| `disabled` | Casi nunca: un CTA de marketing no se deshabilita, se esconde. | cómo se ve: según la guía del DS · cuándo:
|
|
70
|
-
| `href` | El CTA navega (lo normal en una landing): pinta un `<a>`; `rel` ya viene en `'noopener noreferrer'`. |
|
|
67
|
+
| `rightIcon` (`arrow-right-line`) | El CTA lleva a otra página: «Empieza gratis →». | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
68
|
+
| `leftIcon` | El ícono dice la acción (descargar, WhatsApp). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
69
|
+
| `disabled` | Casi nunca: un CTA de marketing no se deshabilita, se esconde. | cómo se ve: según la guía del DS · cuándo: canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
70
|
+
| `href` | El CTA navega (lo normal en una landing): pinta un `<a>`; `rel` ya viene en `'noopener noreferrer'`. | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
|
|
71
71
|
|
|
72
72
|
## Tamaño en mobile y en web
|
|
73
73
|
|
|
74
|
-
En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más** (canon (dueño, 04-10-2026): piso táctil 44 en el teléfono). En
|
|
75
|
-
|
|
76
|
-
(`
|
|
74
|
+
En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más** (canon (dueño, 04-10-2026): piso táctil 44 en el teléfono). En la tablet
|
|
75
|
+
(`pointer: coarse`) va igual que en el celular; en la computadora (`pointer: fine`), `medium`; en el celular
|
|
76
|
+
chico (< 380 px), `medium` a la vista sin bajar el área de 44. Nada en `small` ni `xsmall` (canon, dueño,
|
|
77
|
+
05-10-2026, D16). Hoy la app lo resuelve con `BreakpointsService` (`src/app/services/breakpoints.service.ts`,
|
|
78
|
+
mobile = hasta 767 px).
|
|
77
79
|
|
|
78
80
|
| size | alto | texto | cuándo | fuente |
|
|
79
81
|
|---|---|---|---|---|
|
|
80
82
|
| `large` | 48 | 16 (Label/Medium) | CTA en el teléfono | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono. Size nuevo del 04-10-2026 |
|
|
81
83
|
| `medium` (default) | 40 | 14 | CTA en web | Figma |
|
|
82
|
-
| `small` | 36 | 14 |
|
|
84
|
+
| `small` | 36 | 14 | — (no se usa: D16) | Figma |
|
|
83
85
|
| `xsmall` | 32 | 14 | — | Figma |
|
|
84
86
|
|
|
85
87
|
**Por qué `large` = 48 y no 44**: el fancy es «el mismo botón con otro acabado» que `sui-button` y su
|
|
@@ -89,15 +91,33 @@ que va al lado. El texto sube a 16 (regla de tamaños del 03-10-2026); los ícon
|
|
|
89
91
|
|
|
90
92
|
| uso | mobile | web | fuente |
|
|
91
93
|
|---|---|---|---|
|
|
92
|
-
| CTA principal de una landing | `large` (48) | `medium` (40) |
|
|
93
|
-
| CTA dentro de la card de un plan | `large` (48) | `
|
|
94
|
+
| CTA principal de una landing | `large` (48) | `medium` (40) | mobile: canon (decisión del dueño 04-10-2026, piso táctil 44) · web: canon (dueño, 05-10-2026, D16) |
|
|
95
|
+
| CTA dentro de la card de un plan | `large` (48) | `medium` (40) | mobile: canon (decisión del dueño 04-10-2026, piso táctil 44) · web: canon (dueño, 05-10-2026, D16) |
|
|
94
96
|
|
|
95
97
|
```html
|
|
96
|
-
<sui-fancy-button type="primary" [size]="bp.
|
|
98
|
+
<sui-fancy-button type="primary" [size]="bp.sizeControl()">Empieza gratis</sui-fancy-button>
|
|
97
99
|
```
|
|
98
100
|
|
|
99
101
|
Hoy no hay usos (todo el componente está en «no usar»).
|
|
100
102
|
|
|
103
|
+
### Por dispositivo (D16)
|
|
104
|
+
|
|
105
|
+
Se toca, así que va como «lo que se toca»; la fila de `fancy-button` de la tabla D16 manda
|
|
106
|
+
(canon, dueño, 05-10-2026, D16).
|
|
107
|
+
|
|
108
|
+
| dispositivo | size | nota |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| celular chico (< 380 px) | `medium` + área de 44 ¹ | ¹ el DS todavía no estira a 44 el área del `medium` (40): hasta que lo haga, va `large`, que es lo que ya da el helper |
|
|
111
|
+
| celular (380–767 px) | `large` (48) | del mismo alto que el `large` de `sui-button` que va al lado |
|
|
112
|
+
| tablet táctil (`pointer: coarse`) | `large` (48) | Apple pide 44 pt también en el iPad; `bp.isMobile()` sola la deja en `medium` |
|
|
113
|
+
| computadora (`pointer: fine`) | `medium` (40) | también dentro de la card de un plan; `small` y `xsmall` no se usan |
|
|
114
|
+
|
|
115
|
+
Ultrawide (≥ 1920 px): igual que la computadora, `medium`. El espacio extra va al ancho de la
|
|
116
|
+
sección, no a un CTA más grande.
|
|
117
|
+
|
|
118
|
+
En master-pedidos: `[size]="bp.sizeControl()"` (`large` en el celular y en toda pantalla táctil,
|
|
119
|
+
`medium` en la computadora).
|
|
120
|
+
|
|
101
121
|
## «No usar»: por qué no hoy y cuándo sí
|
|
102
122
|
|
|
103
123
|
Nada se borra del DS. Lo marcado «no usar» no tiene caso en la app de hoy; si un flujo nuevo cae
|
|
@@ -144,6 +164,46 @@ El clic se escucha con `(clicked)`. Slots: `<ng-content>` (el texto).
|
|
|
144
164
|
- El anillo del `neutral` es un hex crudo (`#242628`): no hay token para ese gris.
|
|
145
165
|
- Ya trae el arreglo de iOS para el `:active` pegado: no lo agregues.
|
|
146
166
|
|
|
167
|
+
## Bien y mal
|
|
168
|
+
|
|
169
|
+
**El CTA en el teléfono y en la computadora**
|
|
170
|
+
|
|
171
|
+
```html
|
|
172
|
+
<!-- ❌ mal: dos componentes para el mismo CTA. La vitrina (master-preview/_guia-atomos/botones.ts:138)
|
|
173
|
+
todavía pone sui-button large en mobile «porque el fancy mide 40»; desde el 04-10 tiene large (48) -->
|
|
174
|
+
<sui-button size="large">Empieza gratis</sui-button>
|
|
175
|
+
<sui-fancy-button type="primary" size="medium">Empieza gratis</sui-fancy-button>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```html
|
|
179
|
+
<!-- ✅ bien -->
|
|
180
|
+
<sui-fancy-button type="primary" [size]="bp.sizeControl()">Empieza gratis</sui-fancy-button>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Un formulario que se envía**
|
|
184
|
+
|
|
185
|
+
```html
|
|
186
|
+
<!-- ❌ mal: `type` es el relleno, no el type HTML; no compila y no hace submit (Trampas) -->
|
|
187
|
+
<sui-fancy-button type="submit">Crear cuenta</sui-fancy-button>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
```html
|
|
191
|
+
<!-- ✅ bien -->
|
|
192
|
+
<sui-fancy-button type="primary" htmlType="submit" [size]="bp.sizeControl()">Crear cuenta</sui-fancy-button>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Una acción destructiva**
|
|
196
|
+
|
|
197
|
+
```html
|
|
198
|
+
<!-- ❌ mal: una destructiva no es marketing («No usar»), y el brillo la vuelve llamativa -->
|
|
199
|
+
<sui-fancy-button type="destructive">Eliminar cuenta</sui-fancy-button>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
```html
|
|
203
|
+
<!-- ✅ bien -->
|
|
204
|
+
<sui-button variant="filled" color="error" [size]="bp.sizeControl()">Eliminar cuenta</sui-button>
|
|
205
|
+
```
|
|
206
|
+
|
|
147
207
|
## Ejemplo
|
|
148
208
|
|
|
149
209
|
```html
|
|
@@ -22,8 +22,8 @@ descargar. La etiqueta con la extensión le dice a la persona qué va a abrir.
|
|
|
22
22
|
|
|
23
23
|
## Qué variante usar
|
|
24
24
|
|
|
25
|
-
> **La guía del DS no tiene página para este componente.**
|
|
26
|
-
>
|
|
25
|
+
> **La guía del DS no tiene página para este componente.** Las reglas marcadas canon
|
|
26
|
+
> están aprobadas; la tabla de mobile y web quedó en canon el 05-10-2026 (P1 b y D16).
|
|
27
27
|
>
|
|
28
28
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos directos**. Lo usa por dentro
|
|
29
29
|
> `sui-file-upload-card`.
|
|
@@ -32,9 +32,9 @@ descargar. La etiqueta con la extensión le dice a la persona qué va a abrir.
|
|
|
32
32
|
|
|
33
33
|
| input | cuándo | fuente |
|
|
34
34
|
|---|---|---|
|
|
35
|
-
| `filename` | Siempre que haya nombre: saca la extensión y el color solo (`comprobante.pdf` → PDF en rojo). |
|
|
36
|
-
| `extension` | Solo si el nombre no la trae (un archivo de Storage sin extensión). |
|
|
37
|
-
| `color` | No usar: el color dice el tipo y forzarlo miente (un CSV en rojo parece PDF). |
|
|
35
|
+
| `filename` | Siempre que haya nombre: saca la extensión y el color solo (`comprobante.pdf` → PDF en rojo). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
36
|
+
| `extension` | Solo si el nombre no la trae (un archivo de Storage sin extensión). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
37
|
+
| `color` | No usar: el color dice el tipo y forzarlo miente (un CSV en rojo parece PDF). | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
|
|
38
38
|
|
|
39
39
|
Colores automáticos: PDF rojo · Word y texto azul · Excel y CSV verde · PowerPoint naranja ·
|
|
40
40
|
imágenes rosa · video morado · audio celeste · comprimidos amarillo · el resto gris.
|
|
@@ -43,8 +43,8 @@ imágenes rosa · video morado · audio celeste · comprimidos amarillo · el re
|
|
|
43
43
|
|
|
44
44
|
| valor | px | cuándo | fuente |
|
|
45
45
|
|---|---|---|---|
|
|
46
|
-
| `medium` (default) | 40 |
|
|
47
|
-
| `xsmall` | 32 |
|
|
46
|
+
| `medium` (default) | 40 | Siempre: listas de documentos, filas y tablas, en el celular, la tablet y la computadora. | canon (aprobado por el dueño, 05-10-2026, bloque B1) · también filas y tablas: canon (dueño, 05-10-2026, D16) |
|
|
47
|
+
| `xsmall` | 32 | No usar: es chico. Las filas densas y las tablas van en `medium`. | canon (dueño, 05-10-2026, D16); reemplaza el «filas densas, tablas» del bloque B1 |
|
|
48
48
|
|
|
49
49
|
Usos de hoy que rompen la regla: **0**.
|
|
50
50
|
|
|
@@ -53,18 +53,36 @@ Usos de hoy que rompen la regla: **0**.
|
|
|
53
53
|
En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. En las
|
|
54
54
|
pantallas que se usan en los dos (panel del local, super admin) se elige con el servicio de
|
|
55
55
|
breakpoints de la app (`bp`, en `services/breakpoints.service.ts`); en las que solo existen en
|
|
56
|
-
el celular (cliente, repartidor) va directo el valor de mobile.
|
|
56
|
+
el celular (cliente, repartidor) va directo el valor de mobile. No se toca, así que la tablet va
|
|
57
|
+
con el valor de web, y el celular chico (< 380 px) también (D16).
|
|
58
|
+
Es **canon (dueño, 05-10-2026, P1 b y D16)**.
|
|
57
59
|
|
|
58
60
|
| uso | mobile | web |
|
|
59
61
|
|---|---|---|
|
|
60
|
-
| fila de una lista | `medium` (40) | `
|
|
62
|
+
| fila de una lista | `medium` (40) | `medium` (40) |
|
|
61
63
|
|
|
62
64
|
```html
|
|
63
|
-
<sui-file-icon [filename]="doc.nombre"
|
|
65
|
+
<sui-file-icon [filename]="doc.nombre" size="medium" />
|
|
64
66
|
```
|
|
65
67
|
|
|
66
68
|
El ícono no se toca: si la fila abre el archivo, la fila da los 44 px. `medium` es el tamaño más
|
|
67
|
-
grande que tiene
|
|
69
|
+
grande que tiene y `xsmall` es chico (D16), así que va igual en las dos: es la excepción a P1 b
|
|
70
|
+
(«un paso más grande en el celular»), porque no hay un paso más.
|
|
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`.
|
|
68
86
|
|
|
69
87
|
## «No usar»: por qué no hoy y cuándo sí
|
|
70
88
|
|
|
@@ -95,9 +113,49 @@ Outputs: ninguno.
|
|
|
95
113
|
- El nombre para el lector de pantalla es «Archivo PDF» (en español desde el 04-10-2026) y no se puede cambiar.
|
|
96
114
|
- `size` es `xsmall` o `medium`: no hay `small` ni `large`.
|
|
97
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
|
+
|
|
98
156
|
## Ejemplo
|
|
99
157
|
|
|
100
158
|
```html
|
|
101
159
|
<sui-file-icon filename="comprobante-yape.pdf" />
|
|
102
|
-
<sui-file-icon filename="ventas-setiembre.csv" size="
|
|
160
|
+
<sui-file-icon filename="ventas-setiembre.csv" size="medium" />
|
|
103
161
|
```
|
|
@@ -30,8 +30,10 @@ elegido → file-upload-card.**
|
|
|
30
30
|
> buscar en el equipo**, para subir un archivo. Su ejemplo arma el texto así: una línea que invita
|
|
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
|
-
> archivo (en SUI, `sui-file-icon`). No dice cuándo usar cada tamaño.
|
|
34
|
-
>
|
|
33
|
+
> archivo (en SUI, `sui-file-icon`). No dice cuándo usar cada tamaño. Lo de abajo marcado canon
|
|
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`,
|
|
@@ -43,48 +45,48 @@ elegido → file-upload-card.**
|
|
|
43
45
|
|---|---|---|
|
|
44
46
|
| `title` | Qué se sube, en la voz de la persona: «Sube tu carta en PDF», «Arrastra tu Excel aquí». Si se omite, sale «Arrastra y suelta el archivo aquí». | guía (línea que invita) |
|
|
45
47
|
| `subtitle` | **Formatos y tamaño máximo**, siempre: «PDF o Excel, hasta 10 MB». El default «o haz clic para seleccionar» no dice nada que el área no diga. | guía (formatos y tamaño) |
|
|
46
|
-
| `browseLabel` | El default ya es «Buscar archivo»; se pasa solo para otro texto («Elegir foto»). | guía (el botón) · el texto
|
|
48
|
+
| `browseLabel` | El default ya es «Buscar archivo»; se pasa solo para otro texto («Elegir foto»). | guía (el botón) · el texto, canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
47
49
|
|
|
48
50
|
### `accept`, `multiple`, `maxSize`
|
|
49
51
|
|
|
50
52
|
| input | cuándo | fuente |
|
|
51
53
|
|---|---|---|
|
|
52
|
-
| `accept` | Siempre, con lo mismo que dice el `subtitle`: `".pdf,.xlsx,.csv"`. Si el texto y el filtro no coinciden, la persona elige un archivo que se rechaza. |
|
|
53
|
-
| `multiple` | Varios archivos del mismo tipo (las boletas del mes). Con `multiple` cada archivo va en su `sui-file-upload-card`. |
|
|
54
|
-
| `maxSize` | Siempre, en **bytes** (`10 * 1024 * 1024`), y el mismo número en el `subtitle`. |
|
|
54
|
+
| `accept` | Siempre, con lo mismo que dice el `subtitle`: `".pdf,.xlsx,.csv"`. Si el texto y el filtro no coinciden, la persona elige un archivo que se rechaza. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
55
|
+
| `multiple` | Varios archivos del mismo tipo (las boletas del mes). Con `multiple` cada archivo va en su `sui-file-upload-card`. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
56
|
+
| `maxSize` | Siempre, en **bytes** (`10 * 1024 * 1024`), y el mismo número en el `subtitle`. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
55
57
|
|
|
56
58
|
### `size`
|
|
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
|
-
| `large` | 40 | Cuando subir el archivo es lo único de la pantalla (importar la carta). |
|
|
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) |
|
|
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
|
|
|
65
67
|
### Estados: `error`, `errorMessage`, `disabled`
|
|
66
68
|
|
|
67
69
|
| input | cuándo | fuente |
|
|
68
70
|
|---|---|---|
|
|
69
|
-
| `error` + `errorMessage` | El archivo se subió y el servidor lo rechazó («El PDF está protegido con clave»). Lo de tamaño y tipo ya lo avisa solo. |
|
|
70
|
-
| `disabled` | Mientras se sube, o si ya se llegó al máximo de archivos. |
|
|
71
|
+
| `error` + `errorMessage` | El archivo se subió y el servidor lo rechazó («El PDF está protegido con clave»). Lo de tamaño y tipo ya lo avisa solo. | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
72
|
+
| `disabled` | Mientras se sube, o si ya se llegó al máximo de archivos. | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
|
|
71
73
|
|
|
72
74
|
Usos de hoy que rompen la regla: **0** (no hay file-upload).
|
|
73
75
|
|
|
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` |
|
|
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
|
|
@@ -23,7 +23,8 @@ subiendo con su barra, listo, o falló con «Reintentar».
|
|
|
23
23
|
## Qué variante usar
|
|
24
24
|
|
|
25
25
|
> **La guía del DS no tiene página para este componente** (su página del file upload solo muestra
|
|
26
|
-
> el área y el ícono por tipo).
|
|
26
|
+
> el área y el ícono por tipo). Las reglas marcadas canon están aprobadas y las de «según el
|
|
27
|
+
> código» describen lo que el componente ya hace.
|
|
27
28
|
>
|
|
28
29
|
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos**. Las subidas de hoy son de
|
|
29
30
|
> imágenes y avisan con el `subtitle` del image-upload («Procesando…») o lo deshabilitan.
|
|
@@ -32,20 +33,20 @@ subiendo con su barra, listo, o falló con «Reintentar».
|
|
|
32
33
|
|
|
33
34
|
| valor | cuándo | qué muestra | fuente |
|
|
34
35
|
|---|---|---|---|
|
|
35
|
-
| `in-progress` (default) | Mientras sube. Va con `progress`. | barra azul, ícono de carga, X para cancelar |
|
|
36
|
-
| `success` | Subió. | check verde, tacho para quitar |
|
|
37
|
-
| `error` | Falló. Va con `statusText` que diga por qué. | ícono rojo, «Reintentar», tacho |
|
|
36
|
+
| `in-progress` (default) | Mientras sube. Va con `progress`. | barra azul, ícono de carga, X para cancelar | según el código |
|
|
37
|
+
| `success` | Subió. | check verde, tacho para quitar | según el código |
|
|
38
|
+
| `error` | Falló. Va con `statusText` que diga por qué. | ícono rojo, «Reintentar», tacho | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
38
39
|
|
|
39
40
|
### Textos y datos
|
|
40
41
|
|
|
41
42
|
| input | cuándo | fuente |
|
|
42
43
|
|---|---|---|
|
|
43
|
-
| `file` | El nombre real del archivo (`'carta-octubre.pdf'`). La extensión da el ícono y el color. |
|
|
44
|
-
| `description` | **Siempre** se pasa: el default es un texto de ejemplo («0 KB de 120 KB»). Subiendo: «1.2 MB de 3.4 MB»; listo: «3.4 MB» (punto decimal, como el «10.0 MB» que arma `sui-file-upload`). |
|
|
45
|
-
| `progress` | 0–100, solo en `in-progress`. |
|
|
46
|
-
| `statusText` | Los defaults ya están en español («Subiendo…», «Completado», «Falló»); en error, mejor el motivo: «Se cortó la conexión». |
|
|
47
|
-
| `showStatus=false` | Solo en `success`, cuando el check sobra porque la lista ya dice «Archivos subidos». |
|
|
48
|
-
| `retryLabel` | El default ya es «Reintentar». |
|
|
44
|
+
| `file` | El nombre real del archivo (`'carta-octubre.pdf'`). La extensión da el ícono y el color. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
45
|
+
| `description` | **Siempre** se pasa: el default es un texto de ejemplo («0 KB de 120 KB»). Subiendo: «1.2 MB de 3.4 MB»; listo: «3.4 MB» (punto decimal, como el «10.0 MB» que arma `sui-file-upload`). | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
46
|
+
| `progress` | 0–100, solo en `in-progress`. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
47
|
+
| `statusText` | Los defaults ya están en español («Subiendo…», «Completado», «Falló»); en error, mejor el motivo: «Se cortó la conexión». | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
|
|
48
|
+
| `showStatus=false` | Solo en `success`, cuando el check sobra porque la lista ya dice «Archivos subidos». | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
|
|
49
|
+
| `retryLabel` | El default ya es «Reintentar». | canon (CANON-SUI §5.3 y §6.4: «Reintentar» es copy de acción canon) |
|
|
49
50
|
|
|
50
51
|
Usos de hoy que rompen la regla: **0**.
|
|
51
52
|
|
|
@@ -64,10 +65,18 @@ reintente.
|
|
|
64
65
|
| «Reintentar» | link de 20 px — **no llega** | link | medido |
|
|
65
66
|
|
|
66
67
|
```html
|
|
67
|
-
<sui-file-upload-card [file]="a.nombre" [state]="a.estado" [progress]="a.pct"
|
|
68
|
-
|
|
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)" />
|
|
69
71
|
```
|
|
70
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
|
+
|
|
71
80
|
## «No usar»: por qué no hoy y cuándo sí
|
|
72
81
|
|
|
73
82
|
Nada se borra del DS. Lo marcado «no usar» no tiene caso en la app de hoy; si un flujo nuevo cae
|
|
@@ -119,6 +128,49 @@ interface SuiFileUploadCardFile { filename: string; extension?: string; }
|
|
|
119
128
|
- La barra de progreso es azul, no naranja.
|
|
120
129
|
- No sube nada: refleja el estado que le pasan.
|
|
121
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
|
+
|
|
122
174
|
## Ejemplo
|
|
123
175
|
|
|
124
176
|
```html
|