@ajuarezso/sui-design-system 0.24.1 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/docs/sui-accordion/README.md +4 -4
  2. package/docs/sui-activity-feed/README.md +11 -11
  3. package/docs/sui-activity-filter/README.md +5 -5
  4. package/docs/sui-app-store-badge/README.md +7 -7
  5. package/docs/sui-avatar/README.md +26 -23
  6. package/docs/sui-avatar-group/README.md +11 -7
  7. package/docs/sui-badge/README.md +7 -7
  8. package/docs/sui-banner/README.md +15 -15
  9. package/docs/sui-brand-logo/README.md +24 -23
  10. package/docs/sui-breadcrumb-item/README.md +3 -3
  11. package/docs/sui-breadcrumbs/README.md +6 -6
  12. package/docs/sui-button/README.md +9 -7
  13. package/docs/sui-button-group/README.md +25 -22
  14. package/docs/sui-button-group-item/README.md +16 -13
  15. package/docs/sui-card/README.md +8 -8
  16. package/docs/sui-chart-legend/README.md +10 -10
  17. package/docs/sui-chart-legend-dot/README.md +10 -10
  18. package/docs/sui-checkbox/README.md +4 -4
  19. package/docs/sui-checkbox-card/README.md +12 -12
  20. package/docs/sui-checkbox-label/README.md +3 -3
  21. package/docs/sui-circular-progress-bar/README.md +19 -16
  22. package/docs/sui-color-dot/README.md +13 -9
  23. package/docs/sui-color-picker/README.md +9 -9
  24. package/docs/sui-command-menu-footer/README.md +1 -1
  25. package/docs/sui-command-menu-item/README.md +13 -12
  26. package/docs/sui-command-menu-search/README.md +3 -2
  27. package/docs/sui-compact-avatar-group/README.md +14 -11
  28. package/docs/sui-compact-button/README.md +16 -11
  29. package/docs/sui-compact-select/README.md +5 -5
  30. package/docs/sui-compact-select-for-input/README.md +1 -1
  31. package/docs/sui-content-card/README.md +12 -12
  32. package/docs/sui-content-divider/README.md +18 -15
  33. package/docs/sui-content-label/README.md +17 -17
  34. package/docs/sui-counter-input/README.md +12 -12
  35. package/docs/sui-date-selector/README.md +8 -8
  36. package/docs/sui-datepicker/README.md +14 -14
  37. package/docs/sui-day-cell/README.md +15 -14
  38. package/docs/sui-day-label/README.md +4 -4
  39. package/docs/sui-divider/README.md +9 -6
  40. package/docs/sui-drawer-header/README.md +9 -9
  41. package/docs/sui-dropdown-caption/README.md +5 -5
  42. package/docs/sui-dropdown-item/README.md +5 -5
  43. package/docs/sui-dropdown-menu/README.md +10 -10
  44. package/docs/sui-dropdown-search/README.md +3 -3
  45. package/docs/sui-emoji/README.md +13 -13
  46. package/docs/sui-empty-state/README.md +4 -4
  47. package/docs/sui-fancy-button/README.md +15 -13
  48. package/docs/sui-file-icon/README.md +14 -11
  49. package/docs/sui-file-upload/README.md +10 -10
  50. package/docs/sui-file-upload-card/README.md +11 -10
  51. package/docs/sui-filter/README.md +12 -12
  52. package/docs/sui-flag/README.md +11 -7
  53. package/docs/sui-form-hint/README.md +2 -2
  54. package/docs/sui-form-label/README.md +4 -4
  55. package/docs/sui-icon/README.md +19 -16
  56. package/docs/sui-image-upload/README.md +20 -19
  57. package/docs/sui-image-upload-profile/README.md +12 -11
  58. package/docs/sui-img-retry/README.md +1 -1
  59. package/docs/sui-inline-input/README.md +6 -6
  60. package/docs/sui-inline-select/README.md +2 -2
  61. package/docs/sui-input/README.md +14 -14
  62. package/docs/sui-integration-switch/README.md +15 -15
  63. package/docs/sui-kbd/README.md +3 -3
  64. package/docs/sui-key-icon/README.md +22 -19
  65. package/docs/sui-link-button/README.md +21 -18
  66. package/docs/sui-logo/README.md +20 -19
  67. package/docs/sui-modal/README.md +11 -11
  68. package/docs/sui-modal-footer/README.md +3 -3
  69. package/docs/sui-modal-header/README.md +1 -1
  70. package/docs/sui-modal-sheet/README.md +4 -4
  71. package/docs/sui-notification/README.md +11 -11
  72. package/docs/sui-notification-footer/README.md +4 -4
  73. package/docs/sui-notification-tab-menu/README.md +4 -4
  74. package/docs/sui-otp-input/README.md +5 -5
  75. package/docs/sui-page-header/README.md +14 -12
  76. package/docs/sui-pagination/README.md +13 -13
  77. package/docs/sui-payment-icon/README.md +16 -13
  78. package/docs/sui-period-range/README.md +5 -5
  79. package/docs/sui-popover/README.md +10 -10
  80. package/docs/sui-product-card/README.md +15 -15
  81. package/docs/sui-progress-bar/README.md +12 -9
  82. package/docs/sui-progress-bar-label/README.md +14 -10
  83. package/docs/sui-radio/README.md +2 -2
  84. package/docs/sui-radio-card/README.md +12 -12
  85. package/docs/sui-radio-label/README.md +3 -3
  86. package/docs/sui-rating/README.md +22 -19
  87. package/docs/sui-rich-editor/README.md +2 -2
  88. package/docs/sui-segmented-control/README.md +9 -9
  89. package/docs/sui-select/README.md +9 -9
  90. package/docs/sui-sidebar/README.md +7 -7
  91. package/docs/sui-slider/README.md +7 -7
  92. package/docs/sui-social-button/README.md +8 -8
  93. package/docs/sui-status-badge/README.md +13 -10
  94. package/docs/sui-stepper/README.md +18 -18
  95. package/docs/sui-store-card/README.md +16 -16
  96. package/docs/sui-switch/README.md +2 -2
  97. package/docs/sui-switch-card/README.md +10 -10
  98. package/docs/sui-switch-label/README.md +1 -1
  99. package/docs/sui-tab-chips/README.md +17 -15
  100. package/docs/sui-tab-menu-horizontal/README.md +6 -6
  101. package/docs/sui-tab-menu-vertical/README.md +8 -8
  102. package/docs/sui-table/README.md +13 -13
  103. package/docs/sui-tag/README.md +14 -11
  104. package/docs/sui-tag-input/README.md +6 -6
  105. package/docs/sui-textarea/README.md +8 -8
  106. package/docs/sui-time-picker/README.md +25 -25
  107. package/docs/sui-toast/README.md +16 -15
  108. package/docs/sui-tooltip/README.md +19 -18
  109. package/docs/sui-topbar/README.md +7 -7
  110. package/docs/sui-topbar-button/README.md +4 -4
  111. package/docs/sui-topbar-item/README.md +7 -7
  112. package/docs/sui-topbar-user/README.md +5 -5
  113. package/fesm2022/ajuarezso-sui-design-system.mjs +15 -10
  114. package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
  115. package/package.json +1 -1
  116. package/types/ajuarezso-sui-design-system.d.ts +26 -22
@@ -22,8 +22,9 @@ de la semana con los días de turno del repartidor, o un mes con los días que e
22
22
 
23
23
  ## Qué variante usar
24
24
 
25
- > **La guía del DS no tiene página para este componente** (vive dentro del datepicker). Todo es
26
- > **propuesta, falta aprobación**.
25
+ > **La guía del DS no tiene página para este componente** (vive dentro del datepicker). Las
26
+ > filas que describen lo que el componente ya hace van «según el código»; las reglas marcadas canon
27
+ > están aprobadas.
27
28
  >
28
29
  > Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos directos**. Lo usa por dentro
29
30
  > `sui-datepicker`.
@@ -32,23 +33,23 @@ de la semana con los días de turno del repartidor, o un mes con los días que e
32
33
 
33
34
  | valor | cuándo | fuente |
34
35
  |---|---|---|
35
- | `type="basic"` (default) | Calendario de una fecha. | propuesta |
36
- | `type="range"` | Calendario de rango. Va con `rangePosition`. | propuesta |
37
- | `rangePosition="start"` | Primer día del rango (fondo naranja, esquina izquierda). | propuesta |
38
- | `rangePosition="end"` | Último día (fondo naranja, esquina derecha). | propuesta |
39
- | `rangePosition="in"` | Días del medio (texto naranja, sin fondo propio: la banda la pinta la fila). | propuesta |
40
- | `rangePosition=null` | Fuera del rango. | propuesta |
36
+ | `type="basic"` (default) | Calendario de una fecha. | según el código |
37
+ | `type="range"` | Calendario de rango. Va con `rangePosition`. | según el código |
38
+ | `rangePosition="start"` | Primer día del rango (fondo naranja, esquina izquierda). | según el código |
39
+ | `rangePosition="end"` | Último día (fondo naranja, esquina derecha). | según el código |
40
+ | `rangePosition="in"` | Días del medio (texto naranja, sin fondo propio: la banda la pinta la fila). | según el código |
41
+ | `rangePosition=null` | Fuera del rango. | según el código |
41
42
 
42
43
  ### Estados
43
44
 
44
45
  | input | cuándo | fuente |
45
46
  |---|---|---|
46
- | `selected` | El día elegido (fondo naranja). Uno solo en `basic`. | propuesta |
47
- | `today` | Hoy: un punto debajo del número. Siempre, para que la persona se ubique. | propuesta |
48
- | `marked` | El día tiene algo (pedidos, un turno). Si además es hoy, gana el punto de hoy. | propuesta |
49
- | `disabled` | Fuera de `min`/`max` o no se puede elegir (local cerrado ese día). | propuesta |
50
- | `outOfMonth` | Días del mes anterior o siguiente que completan la grilla: se ven apagados. | propuesta |
51
- | `ariaLabel` | Siempre que el número solo no alcance: «Martes 7 de octubre, con pedidos». El default dice «Día 7». | propuesta |
47
+ | `selected` | El día elegido (fondo naranja). Uno solo en `basic`. | según el código |
48
+ | `today` | Hoy: un punto debajo del número. Siempre, para que la persona se ubique. | según el código |
49
+ | `marked` | El día tiene algo (pedidos, un turno). Si además es hoy, gana el punto de hoy. | según el código |
50
+ | `disabled` | Fuera de `min`/`max` o no se puede elegir (local cerrado ese día). | según el código |
51
+ | `outOfMonth` | Días del mes anterior o siguiente que completan la grilla: se ven apagados. | según el código |
52
+ | `ariaLabel` | Siempre que el número solo no alcance: «Martes 7 de octubre, con pedidos». El default dice «Día 7». | canon (aprobado por el dueño, 05-10-2026, bloque B5) |
52
53
 
53
54
  Usos de hoy que rompen la regla: **0**.
54
55
 
@@ -22,8 +22,8 @@ Story: [Molecules/Date & Time/Day Label](https://sui-design-system.web.app/?path
22
22
 
23
23
  ## Qué variante usar
24
24
 
25
- > **La guía del DS no tiene página para este componente** (vive dentro del datepicker). Todo es
26
- > **propuesta, falta aprobación**.
25
+ > **La guía del DS no tiene página para este componente** (vive dentro del datepicker). Las
26
+ > reglas marcadas canon están aprobadas; lo que sigue en propuesta espera decisión.
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-datepicker`.
@@ -31,8 +31,8 @@ Story: [Molecules/Date & Time/Day Label](https://sui-design-system.web.app/?path
31
31
  | input | valor | cuándo | fuente |
32
32
  |---|---|---|---|
33
33
  | `label` | dos letras en mayúsculas | Lo normal, igual que el datepicker: `LU MA MI JU VI SÁ DO`. La semana arranca el lunes. | propuesta |
34
- | `label` | una letra | No usar: «M» es martes y miércoles a la vez. | propuesta |
35
- | `label` | tres letras o más | No usar: «MIÉ» entra justo en 40 px, pero rompe el formato de dos letras del datepicker; «LUNES» ya no entra. | propuesta |
34
+ | `label` | una letra | No usar: «M» es martes y miércoles a la vez. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
35
+ | `label` | tres letras o más | No usar: «MIÉ» entra justo en 40 px, pero rompe el formato de dos letras del datepicker; «LUNES» ya no entra. | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
36
36
 
37
37
  Usos de hoy que rompen la regla: **0**.
38
38
 
@@ -33,7 +33,7 @@ Story: [Atoms/Divider/Divider](https://sui-design-system.web.app/?path=/docs/ato
33
33
  > espacio, línea con texto, texto, texto con fondo y contenido al centro). Su variante «Line»
34
34
  > («una línea horizontal simple», la default) es este componente. La guía no trae la vertical ni
35
35
  > dice cuándo separar con línea y cuándo con espacio. Lo marcado «según la guía del DS» sale de
36
- > ahí; el resto es **propuesta, falta aprobación**.
36
+ > ahí; el resto quedó aprobado por el dueño (canon, 05-10-2026).
37
37
  >
38
38
  > Uso medido el 04-10-2026 en `master-pedidos/src/app`: **39 dividers en 14 archivos** (los 13 de
39
39
  > antes + las 26 líneas a mano que se pasaron el 03-10-2026), todos horizontales, sin contar prototipos ni vitrinas (`master-preview`, `master-prototipos`,
@@ -43,7 +43,7 @@ Story: [Atoms/Divider/Divider](https://sui-design-system.web.app/?path=/docs/ato
43
43
  | orientation | cuándo | ejemplo real | fuente |
44
44
  |---|---|---|---|
45
45
  | `horizontal` (default) | Separa bloques o filas. El espacio arriba y abajo lo pone el `gap` del padre, no el divider. | `pages/driver/driver-dashboard/driver-dashboard.html:1127` (entre filas, `@if (!last)`) | según la guía del DS («Line») |
46
- | `vertical` | Separa datos cortos en una sola fila. El padre necesita alto (si no, mide 16 px). | — (sin usos) | propuesta, falta aprobación |
46
+ | `vertical` | Separa datos cortos en una sola fila. El padre necesita alto (si no, mide 16 px). | — (sin usos) | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
47
47
 
48
48
  **Corregido el 03-10-2026:** las 26 líneas hechas a mano (mi-negocio, checkout, carrito, billetera y movimientos) ya son `sui-divider`. Seis conservan un `margin` propio porque sus vecinos se separan con margen y no con el `gap` del padre; pasarlo al `gap` es un cambio aparte.
49
49
 
@@ -56,10 +56,13 @@ Nada: las dos orientaciones tienen caso. La vertical no tiene usos hoy, pero el
56
56
 
57
57
  ## Tamaño en mobile y en web
58
58
 
59
- Criterio de la app: **en mobile se lee y se toca con el dedo, así que va más grande; en web
60
- (desktop), más chico.** Mobile es `≤ 767 px`, el mismo corte de `BreakpointsService.isMobile()`
61
- en master-pedidos. Fuente: canon del dueño (03-10-2026), el mismo patrón que ya usan 27 controles
62
- de la app.
59
+ Criterio de la app: **D16, tamaño por dispositivo** (canon, dueño, 05-10-2026), que reemplaza al
60
+ «tamaño por plataforma» del 03-10-2026 (mobile grande, web chico). La columna «mobile» es el celular de
61
+ 380 px o más y, en lo que se toca, también la tablet (`pointer: coarse`). La columna «web» es la
62
+ computadora (`pointer: fine`) y, en lo que no se toca, también la tablet. En el celular chico
63
+ (< 380 px) va `medium` a la vista, sin achicar el área de 44 de lo que se toca. **Nada en `small` ni
64
+ `xsmall`**, salvo lo que el componente solo tiene en chico. Hoy la app corta con
65
+ `BreakpointsService.isMobile()` (≤ 767 px), que todavía no mira el puntero ni los 380 px.
63
66
 
64
67
  **No aplica**: es 1 px en las dos plataformas. Lo que cambia por plataforma es el `gap` del padre,
65
68
  que separa los bloques (la regla de spacing de la app: 20/16/12 según el breakpoint).
@@ -37,27 +37,27 @@ Regla corta: **modal o sheet → sui-modal con title · panel lateral de web →
37
37
 
38
38
  | type | cuándo | fuente |
39
39
  |---|---|---|
40
- | `basic` (default) | Lo normal: título y cerrar. | propuesta, falta aprobación |
41
- | `left-icon` | El ícono dice de qué es el panel antes de leer («history-line» en el historial). En `small` va suelto (24); en `large`/`xlarge`, en un círculo con borde. | propuesta, falta aprobación |
40
+ | `basic` (default) | Lo normal: título y cerrar. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
41
+ | `left-icon` | El ícono dice de qué es el panel antes de leer («history-line» en el historial). En `small` va suelto (24); en `large`/`xlarge`, en un círculo con borde. | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
42
42
 
43
43
  ### `size`
44
44
 
45
45
  | size | qué cambia | cuándo | fuente |
46
46
  |---|---|---|---|
47
- | `small` (default) | 64 px, todo en una línea; **no muestra `description`** | Panel con título que se explica solo. Es el único que admite `link`. | propuesta, falta aprobación |
48
- | `large` | 88 px, título arriba y `description` debajo | Panel que necesita una línea de contexto («Últimos 30 días»). | propuesta, falta aprobación |
49
- | `xlarge` | padding 24, título 20, descripción 16 | No: extensión de SUI sin caso; en web no hace falta letra más grande. | propuesta, falta aprobación |
47
+ | `small` (default) | 64 px, todo en una línea; **no muestra `description`** | Panel con título que se explica solo. Es el único que admite `link`. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
48
+ | `large` | 88 px, título arriba y `description` debajo | Panel que necesita una línea de contexto («Últimos 30 días»). | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
49
+ | `xlarge` | padding 24, título 20, descripción 16 | No: extensión de SUI sin caso; en web no hace falta letra más grande. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
50
50
 
51
51
  ### Lo demás
52
52
 
53
53
  | input | valor | cuándo | fuente |
54
54
  |---|---|---|---|
55
55
  | `showDismiss` | `true` (default) | Siempre. | según la guía del DS (cerrar visible por default) |
56
- | `showDismiss` | `false` | Solo si el panel no se puede cerrar sin decidir (y entonces es un modal, no un drawer). | propuesta, falta aprobación |
57
- | `showDivider` | `true` | Cuando el cuerpo scrollea por debajo de la cabecera. | propuesta, falta aprobación |
56
+ | `showDismiss` | `false` | Solo si el panel no se puede cerrar sin decidir (y entonces es un modal, no un drawer). | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
57
+ | `showDivider` | `true` | Cuando el cuerpo scrollea por debajo de la cabecera. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
58
58
  | `badge` | número | Pendientes dentro del panel (círculo rojo). | propuesta, falta aprobación |
59
59
  | `badge` | texto o `SuiBadgeConfig` | Un estado o etiqueta al lado del título. Pasa `variant: 'lighter'`: el default de aquí es `light` (ver Trampas). | canon (README de `sui-badge`: `lighter` en cabeceras) |
60
- | `link` | texto | Una acción menor en la cabecera («Ver todo»). Solo en `small`. | propuesta, falta aprobación |
60
+ | `link` | texto | Una acción menor en la cabecera («Ver todo»). Solo en `small`. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
61
61
  | `dismissAriaLabel` | «Cerrar» (default) | Ya está en español. | según el código |
62
62
 
63
63
  Usos de hoy que rompen las reglas: **0** (no se usa).
@@ -69,7 +69,7 @@ los 40-44 del dedo. Es una pieza de web.
69
69
 
70
70
  | uso | mobile | web | fuente |
71
71
  |---|---|---|---|
72
- | cabecera de panel | no se usa: `sui-modal` fullscreen con `title` | `small` o `large` | propuesta, falta aprobación |
72
+ | cabecera de panel | no se usa: `sui-modal` fullscreen con `title` | `small` o `large` | canon (aprobado por el dueño, 05-10-2026, bloque B7) |
73
73
 
74
74
  ```html
75
75
  @if (!bp.isMobile()) {
@@ -32,8 +32,8 @@ form-hint.**
32
32
  ## Qué variante usar
33
33
 
34
34
  > **La guía del DS no tiene una pieza «caption»** en su dropdown: tiene etiqueta de grupo y
35
- > separador. La caption sale del Figma del DS («Dropdown Misc Items»). Todo lo de abajo es
36
- > **propuesta, falta aprobación**.
35
+ > separador. La caption sale del Figma del DS («Dropdown Misc Items»). Todas las reglas de abajo
36
+ > son **canon**: lo que estaba en propuesta lo aprobó el dueño el 05-10-2026.
37
37
  >
38
38
  > Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-dropdown-menu`):
39
39
  > **0 usos**.
@@ -42,9 +42,9 @@ No tiene variantes. Lo único que se decide es el texto:
42
42
 
43
43
  | qué | regla | fuente |
44
44
  |---|---|---|
45
- | largo | Una línea; si no entra, corta palabra y salta de línea (`word-break: break-word`). | propuesta |
45
+ | largo | Una línea; si no entra, corta palabra y salta de línea (`word-break: break-word`). | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
46
46
  | copy | Sentence case, con punto solo si son dos frases. Tuteo: «Presiona Enter para agregar». | canon (CANON-SUI §5, `docs/VOZ-Y-ESCRITURA.md`) |
47
- | posición | Al final del panel, después del último item. | propuesta |
47
+ | posición | Al final del panel, después del último item. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
48
48
 
49
49
  **Candidatos de hoy:** las cabeceras de grupo a mano del switcher del sidebar
50
50
  (`components/sidebar/sidebar.html:67`, `:88`, `:104`) **no** son caption: son cabeceras de grupo y van
@@ -57,7 +57,7 @@ de 44 px del dedo.
57
57
 
58
58
  | uso | mobile | web | fuente |
59
59
  |---|---|---|---|
60
- | pie de un menú | igual (14/20) | igual (14/20) | propuesta |
60
+ | pie de un menú | igual (14/20) | igual (14/20) | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
61
61
 
62
62
  ## API
63
63
 
@@ -46,7 +46,7 @@ dropdown, select y command menu en el README de `sui-dropdown-menu`.
46
46
 
47
47
  | mode | cuándo | ejemplo real de la app | fuente |
48
48
  |---|---|---|---|
49
- | `menuitem` (default) | La fila **hace algo**: editar, archivar, ir a otra pantalla. `selected` no pinta nada. | `option-sections-manager.html:40` («Editar») | propuesta |
49
+ | `menuitem` (default) | La fila **hace algo**: editar, archivar, ir a otra pantalla. `selected` no pinta nada. | `option-sections-manager.html:40` («Editar») | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
50
50
  | `option` | La fila **es un valor** y el elegido queda marcado (fondo `primary-alpha-10` + check a la derecha). El contenedor lleva `role="listbox"`. | `sidebar.html:69` (el negocio actual) | propuesta (ya es práctica) |
51
51
 
52
52
  ### `size`
@@ -54,7 +54,7 @@ dropdown, select y command menu en el README de `sui-dropdown-menu`.
54
54
  | size | alto | cuándo | fuente |
55
55
  |---|---|---|---|
56
56
  | `small` (default) | 36 | Menú de acciones en web, una línea (label + `sublabel` en la misma línea). | según la guía del DS (Figma: Small 36) |
57
- | `large` | 56 | Toda fila en mobile; en web, cuando hay segunda línea (`description`) o el ícono va enmarcado. | según la guía del DS (Figma: Large 56); el cuándo es propuesta |
57
+ | `large` | 56 | Toda fila en mobile; en web, cuando hay segunda línea (`description`) o el ícono va enmarcado. | según la guía del DS (Figma: Large 56) · toda fila en mobile: canon (decisión del dueño 04-10-2026, piso táctil 44); es el primer size ≥ 44, no hay 44 · el cuándo en web: propuesta |
58
58
  | `xlarge` | 76 | Extensión SUI. Sin uso hoy. | — |
59
59
 
60
60
  ### Las piezas
@@ -68,7 +68,7 @@ dropdown, select y command menu en el README de `sui-dropdown-menu`.
68
68
  | `shortcut` | Solo web (en mobile no hay teclado físico, ver README de `sui-kbd`). | canon (README de `sui-kbd`) |
69
69
  | `slot="trailing"` | Badge primero, después el atajo (lo pone el componente), al final un switch o botón. | según la guía del DS (orden del Figma) |
70
70
  | `disabled` | Existe pero hoy no se puede: queda gris claro y no recibe toques. | según la guía del DS |
71
- | `highlighted` | Lo usa el select para la navegación con flechas. A mano no hace falta. | propuesta |
71
+ | `highlighted` | Lo usa el select para la navegación con flechas. A mano no hace falta. | según el código |
72
72
 
73
73
  **Usos de hoy que romperían la propuesta:**
74
74
 
@@ -90,8 +90,8 @@ celular: queda debajo de los 44 del dedo.
90
90
 
91
91
  | uso | mobile | web | fuente |
92
92
  |---|---|---|---|
93
- | menú de acciones (⋮) | `large` (56) | `small` (36) | propuesta, falta aprobación |
94
- | switcher con segunda línea (negocio + dirección) | `large` (56) | `large` (56) | propuesta (ya es práctica en el sidebar) |
93
+ | menú de acciones (⋮) | `large` (56) | `small` (36) | mobile: canon (decisión del dueño 04-10-2026, piso táctil 44); `large` es el primer size ≥ 44, no hay 44 · web: propuesta, falta aprobación |
94
+ | switcher con segunda línea (negocio + dirección) | `large` (56) | `large` (56) | mobile: canon (decisión del dueño 04-10-2026, piso táctil 44) · web: propuesta (ya es práctica en el sidebar) |
95
95
  | opciones de un select | las pone el select (44) | las pone el select (36–48) | canon (README de `sui-select`, aprobado 03-10-2026) |
96
96
 
97
97
  ```html
@@ -55,8 +55,8 @@ trigger no se dibuja.
55
55
 
56
56
  > **La guía del DS lo define como el menú de acciones que abre un botón** y lo arma por partes:
57
57
  > item con ícono, grupo con su etiqueta, separador, items con casilla o radio y submenús. No trae
58
- > variantes ni do/don't; el panel arranca en 300 px de ancho y 8 px separado del trigger. Lo
59
- > demás es **propuesta, falta aprobación**, salvo lo marcado canon.
58
+ > variantes ni do/don't; el panel arranca en 300 px de ancho y 8 px separado del trigger. Las
59
+ > reglas marcadas canon están aprobadas; lo que sigue en propuesta espera decisión.
60
60
  >
61
61
  > Uso medido el 03-10-2026 en `master-pedidos/src/app` (sin `master-preview`, `master-prototipos`,
62
62
  > `mockup-sheets-*`, `dx/*`, `master-rutina`, `master-medico`, `master-ejercicios`, `dev-index` ni las
@@ -77,15 +77,15 @@ trigger no se dibuja.
77
77
 
78
78
  | prop | cuándo | fuente |
79
79
  |---|---|---|
80
- | sin props (default) | El caso normal: un ⋮ o un botón con 2 a 5 acciones. El panel se ajusta al contenido. | propuesta |
81
- | `matchWidth` | El panel debe medir lo mismo que el trigger (un botón ancho que abre opciones). | propuesta |
80
+ | sin props (default) | El caso normal: un ⋮ o un botón con 2 a 5 acciones. El panel se ajusta al contenido. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
81
+ | `matchWidth` | El panel debe medir lo mismo que el trigger (un botón ancho que abre opciones). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
82
82
  | `minWidth` | El trigger es un ícono chico y el panel quedaría angosto: 200 a 240 px. | propuesta |
83
- | `position="above"` | El trigger vive pegado al borde de abajo (una barra inferior). Con `auto` ya cae arriba si no entra. | propuesta |
83
+ | `position="above"` | El trigger vive pegado al borde de abajo (una barra inferior). Con `auto` ya cae arriba si no entra. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
84
84
  | `popupRole="listbox"` | **Solo** si los items son `mode="option"`. El rol tiene que coincidir con el de los items. | según ARIA (documentado en el `.ts`) |
85
- | `popupRole="true"` | El panel no es un menú: un campo, un formulario chico (`option-image.ts:52`). | propuesta (ya es práctica) |
86
- | `origin` | El trigger lo maneja el padre (los selects del DS). En la app no hace falta. | propuesta |
85
+ | `popupRole="true"` | El panel no es un menú: un campo, un formulario chico (`option-image.ts:52`). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
86
+ | `origin` | El trigger lo maneja el padre (los selects del DS). En la app no hace falta. | según el código |
87
87
  | `push` | No usar: un panel empujado queda fijo y **se despega del trigger al scrollear**. | canon (comentario del `.ts`, bug real del color picker 21-07-2026) |
88
- | `flexibleDimensions=false` | Solo paneles de tamaño fijo que no pueden encogerse (el color picker). | propuesta |
88
+ | `flexibleDimensions=false` | Solo paneles de tamaño fijo que no pueden encogerse (el color picker). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
89
89
 
90
90
  **Usos de hoy que rompen la propuesta:**
91
91
 
@@ -103,8 +103,8 @@ El menú **no tiene `size`**: el alto lo ponen los items. El panel mide lo que s
103
103
 
104
104
  | uso | mobile | web | fuente |
105
105
  |---|---|---|---|
106
- | items de un menú de acciones | `sui-dropdown-item size="large"` (56) | `size="small"` (36) | propuesta; hoy los 3 items del ⋮ van en `large` en las dos |
107
- | trigger ⋮ | `sui-compact-button` de 40 o más | `sui-compact-button` `large` | propuesta (ver README de `sui-compact-button`) |
106
+ | items de un menú de acciones | `sui-dropdown-item size="large"` (56) | `size="small"` (36) | mobile: canon (decisión del dueño 04-10-2026, piso táctil 44); `large` es el primer size ≥ 44, no hay 44 · web: propuesta; hoy los 3 items del ⋮ van en `large` en las dos |
107
+ | trigger ⋮ | `sui-compact-button` `5xlarge` (44) | `sui-compact-button` `large` | canon (aprobado por el dueño, 05-10-2026, bloque B13) (ver README de `sui-compact-button`) |
108
108
  | más de 5 acciones, o alguna destructiva que pide confirmar | `sui-modal-sheet` | `sui-dropdown-menu` | propuesta, falta aprobación |
109
109
 
110
110
  ```html
@@ -36,8 +36,8 @@ aprobación.
36
36
  ## Qué variante usar
37
37
 
38
38
  > **La guía del DS no tiene buscador en su dropdown**; el buscador de lista vive en su command
39
- > menu. Este sale del Figma del DS («Dropdown Misc Items», estados Default / Hover / Active). Todo lo
40
- > de abajo es **propuesta, falta aprobación**, salvo lo marcado canon.
39
+ > menu. Este sale del Figma del DS («Dropdown Misc Items», estados Default / Hover / Active). Las
40
+ > reglas marcadas canon están aprobadas; lo que sigue en propuesta espera decisión.
41
41
  >
42
42
  > Uso medido el 03-10-2026 en `master-pedidos/src/app` (misma exclusión que `sui-dropdown-menu`):
43
43
  > **0 usos**.
@@ -61,7 +61,7 @@ No tiene tamaños: 36 px de alto (8 + 20 + 8), texto 14/20, en los dos.
61
61
 
62
62
  En mobile tiene dos problemas que el componente no resuelve (ver «Trampas»): el texto de 14 px hace
63
63
  que iOS haga zoom al enfocarlo, y el teclado no muestra la lupa. Para buscar en una lista larga en
64
- mobile, mejor un `sui-modal-sheet` con `sui-input type="search"` arriba. Propuesta, falta aprobación.
64
+ mobile, mejor un `sui-modal-sheet` con `sui-input type="search"` arriba. Canon (aprobado por el dueño, 05-10-2026, bloque B7).
65
65
 
66
66
  ## API
67
67
 
@@ -22,8 +22,8 @@ confirmado», los pasos de una landing, la barra de calificación.
22
22
 
23
23
  ## Qué variante usar
24
24
 
25
- > **La guía del DS no tiene este componente**: es propio de SUI. Lo marcado «canon» ya es regla
26
- > del proyecto; el resto es **propuesta, falta aprobación**.
25
+ > **La guía del DS no tiene este componente**: es propio de SUI. Las reglas marcadas canon están
26
+ > aprobadas; lo que sigue en propuesta espera decisión.
27
27
  >
28
28
  > Uso medido el 03-10-2026 en `master-pedidos/src/app`: 10 emojis en 3 archivos, sin contar
29
29
  > prototipos ni vitrinas. El catálogo tiene 59.
@@ -33,29 +33,29 @@ confirmado», los pasos de una landing, la barra de calificación.
33
33
  | caso | cómo | fuente |
34
34
  |---|---|---|
35
35
  | Estados vacíos y celebraciones | Emoji animado, uno solo, en `xl`. Nada de íconos genéricos en un estado vacío. | canon (CANON-SUI §5.6) para los estados vacíos · propuesta, falta aprobación para celebraciones y el `xl` |
36
- | Pasos de una landing | `lg`, uno por paso. | propuesta |
37
- | Junto a un título o dentro de un texto | `md` o `sm`, como acento. | propuesta |
38
- | Como ícono de un botón | No: el botón lleva `leftIcon`. | derivado de CANON-SUI §5.7 (emojis solo en contenido escrito por un usuario; botones con `leftIcon`), falta confirmación |
36
+ | Pasos de una landing | `lg`, uno por paso. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
37
+ | Junto a un título o dentro de un texto | `md` o `sm`, como acento. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
38
+ | Como ícono de un botón | No: el botón lleva `leftIcon`. | canon (CANON-SUI §5.7: emojis solo en contenido escrito por un usuario; en un botón, `leftIcon` con `sui-icon`) |
39
39
 
40
40
  ### `size`
41
41
 
42
42
  | valor | px | cuándo | fuente |
43
43
  |---|---|---|---|
44
44
  | `xl` | 48 | Estado vacío, celebración. | propuesta |
45
- | `lg` | 32 | Pasos de una landing, la barra de calificación. | propuesta |
46
- | `md` (default) | 24 | Acompaña un título. | propuesta |
47
- | `sm` | 20 | Dentro de una línea de texto. | propuesta |
48
- | `xs` | 16 | No usar hoy. | propuesta |
49
- | `full` | 100 % | Llena su caja: lo usa `sui-empty-state`. | propuesta |
45
+ | `lg` | 32 | Pasos de una landing, la barra de calificación. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
46
+ | `md` (default) | 24 | Acompaña un título. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
47
+ | `sm` | 20 | Dentro de una línea de texto. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
48
+ | `xs` | 16 | No usar hoy. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
49
+ | `full` | 100 % | Llena su caja: lo usa `sui-empty-state`. | según el código |
50
50
 
51
51
  ### `animated`, `src`, `name`, `ariaLabel`
52
52
 
53
53
  | input | cuándo | fuente |
54
54
  |---|---|---|
55
55
  | `animated` (default `true`) | Uno solo → animado. **Varios a la vez → `false`.** Ojo: solo las 5 caritas de la calificación (`pensive-face` … `grinning-face-smiling-eyes`) tienen copia estática; para el resto, `false` no cambia nada. | propuesta (la regla ya está escrita en `sui-emoji.ts`) |
56
- | `name` | Uno del catálogo. Si no está, se agrega al catálogo del DS. | propuesta |
57
- | `src` | Un emoji que no está en el catálogo, mientras se agrega. **Nunca** un `<img>` suelto con la URL del emoji. | propuesta |
58
- | `ariaLabel` | Solo si el emoji dice algo que el texto no dice. Si no, queda decorativo (`aria-hidden`). | propuesta |
56
+ | `name` | Uno del catálogo. Si no está, se agrega al catálogo del DS. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
57
+ | `src` | Un emoji que no está en el catálogo, mientras se agrega. **Nunca** un `<img>` suelto con la URL del emoji. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
58
+ | `ariaLabel` | Solo si el emoji dice algo que el texto no dice. Si no, queda decorativo (`aria-hidden`). | canon (aprobado por el dueño, 05-10-2026, bloque B5) |
59
59
 
60
60
  **Usos de hoy que romperían la propuesta:**
61
61
 
@@ -44,9 +44,9 @@ algo que avisar → alert.**
44
44
  | `title` (obligatorio) | Qué pasa, sin punto y en 2 a 4 palabras, con uno de tres patrones: «Todavía no hay <cosa>», «Sin <cosa>», «Tu <cosa> está vacío» («Tu carrito está vacío», «Sin pedidos aún»). En una búsqueda, repetir lo buscado («Nada con “pollo broaster”») queda fuera de esos patrones. | canon (CANON-SUI §5.6) · lo de la búsqueda: propuesta, falta aprobación |
45
45
  | `subtitle` | Una oración con punto, en futuro tranquilizador: «Cuando hagas tu primer pedido, aparecerá aquí.» | canon (CANON-SUI §5.6) |
46
46
  | `action` como string + `(actionClicked)` | La salida es algo de esta misma pantalla: «Reintentar», «Ver todo el catálogo», «Activar captura». | propuesta |
47
- | `action` como `{ label, route }` | La salida es otra pantalla: «Ver negocios» → `/cliente/inicio`. | propuesta |
48
- | sin `action` | No hay un paso obvio, o la pantalla ya tiene el botón para llenarla (el «Nuevo local» de arriba). | propuesta |
49
- | error de carga | Siempre con `action="Reintentar"`. Excepción: la pantalla reintenta sola y lo dice («Seguimos intentando»). | propuesta |
47
+ | `action` como `{ label, route }` | La salida es otra pantalla: «Ver negocios» → `/cliente/inicio`. | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
48
+ | sin `action` | No hay un paso obvio, o la pantalla ya tiene el botón para llenarla (el «Nuevo local» de arriba). | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
49
+ | error de carga | Siempre con `action="Reintentar"`. Excepción: la pantalla reintenta sola y lo dice («Seguimos intentando»). | canon (aprobado por el dueño, 05-10-2026, bloque B4) |
50
50
 
51
51
  **Usos de hoy que rompen las reglas:** 0. Los 29 `icon="…"` (que no es un input), las 22 URL del
52
52
  zorro pegadas a mano y los 4 errores de carga sin «Reintentar» se corrigieron el 03-10-2026 (commit
@@ -66,7 +66,7 @@ abajo (media query `bp.medium` del componente). El `size` solo cambia **el botó
66
66
  | uso | mobile | web | fuente |
67
67
  |---|---|---|---|
68
68
  | ilustración + texto | lo resuelve el componente | lo resuelve el componente | lo que hay en el DS |
69
- | botón de la acción | `large` (48) | `medium` (40) | propuesta: el tamaño es extensión SUI aprobada (03-10-2026); el «cuándo» falta aprobarlo |
69
+ | botón de la acción | `large` (48) | `medium` (40) | el tamaño es extensión SUI aprobada (03-10-2026) · mobile: canon (decisión del dueño 04-10-2026, piso táctil 44) · web: propuesta, falta aprobación |
70
70
 
71
71
  ```html
72
72
  <sui-empty-state
@@ -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 desktop. | escala y default según la guía del DS · cuándo: propuesta |
60
- | `small` (36) | Un CTA dentro de una card de la landing (la card de un plan). | escala según la guía del DS · cuándo: propuesta |
61
- | `xsmall` (32) | Sin caso: en una landing el CTA nunca es tan chico. | escala según la guía del DS · cuándo: propuesta |
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 →». | propuesta |
68
- | `leftIcon` | El ícono dice la acción (descargar, WhatsApp). | propuesta |
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: propuesta |
70
- | `href` | El CTA navega (lo normal en una landing): pinta un `<a>`; `rel` ya viene en `'noopener noreferrer'`. | propuesta |
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 web,
75
- con mouse, va un tamaño más chico. La app ya lo resuelve con `BreakpointsService`
76
- (`src/app/services/breakpoints.service.ts`, mobile = hasta 767 px).
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 | CTA dentro de una card en web | Figma |
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,8 +91,8 @@ 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) | propuesta |
93
- | CTA dentro de la card de un plan | `large` (48) | `small` (36) | propuesta |
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
98
  <sui-fancy-button type="primary" [size]="bp.isMobile() ? 'large' : 'medium'">Empieza gratis</sui-fancy-button>
@@ -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.** Todo es **propuesta, falta
26
- > aprobación**.
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). | propuesta |
36
- | `extension` | Solo si el nombre no la trae (un archivo de Storage sin extensión). | propuesta |
37
- | `color` | No usar: el color dice el tipo y forzarlo miente (un CSV en rojo parece PDF). | propuesta |
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 | Lista de documentos. | propuesta |
47
- | `xsmall` | 32 | Filas densas, tablas. | propuesta |
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,21 @@ 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. Todo es **propuesta**.
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) | `xsmall` (32) |
62
+ | fila de una lista | `medium` (40) | `medium` (40) |
61
63
 
62
64
  ```html
63
- <sui-file-icon [filename]="doc.nombre" [size]="bp.isMobile() ? 'medium' : 'xsmall'" />
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.
68
71
 
69
72
  ## «No usar»: por qué no hoy y cuándo sí
70
73
 
@@ -30,8 +30,8 @@ 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. El resto es **propuesta,
34
- > falta aprobación**.
33
+ > archivo (en SUI, `sui-file-icon`). No dice cuándo usar cada tamaño. Lo de abajo marcado canon
34
+ > está aprobado; lo que sigue en **propuesta** (el `small` en mobile) espera decisión.
35
35
  >
36
36
  > Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos**. Hoy todo lo que se sube es
37
37
  > imagen y va con `sui-image-upload` (13) o con un `<input type="file">` a mano (3: `renewal-modal`,
@@ -43,15 +43,15 @@ elegido → file-upload-card.**
43
43
  |---|---|---|
44
44
  | `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
45
  | `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 es propuesta |
46
+ | `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
47
 
48
48
  ### `accept`, `multiple`, `maxSize`
49
49
 
50
50
  | input | cuándo | fuente |
51
51
  |---|---|---|
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. | propuesta |
53
- | `multiple` | Varios archivos del mismo tipo (las boletas del mes). Con `multiple` cada archivo va en su `sui-file-upload-card`. | propuesta |
54
- | `maxSize` | Siempre, en **bytes** (`10 * 1024 * 1024`), y el mismo número en el `subtitle`. | propuesta |
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. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
53
+ | `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) |
54
+ | `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
55
 
56
56
  ### `size`
57
57
 
@@ -59,15 +59,15 @@ elegido → file-upload-card.**
59
59
  |---|---|---|---|
60
60
  | `small` | 24 | En mobile y dentro de un modal o una card. | propuesta |
61
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). | propuesta |
62
+ | `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
63
  | `xlarge` | 48 | No usar: más aire no ayuda a soltar el archivo. | no usar |
64
64
 
65
65
  ### Estados: `error`, `errorMessage`, `disabled`
66
66
 
67
67
  | input | cuándo | fuente |
68
68
  |---|---|---|
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. | propuesta |
70
- | `disabled` | Mientras se sube, o si ya se llegó al máximo de archivos. | propuesta |
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. | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
70
+ | `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
71
 
72
72
  Usos de hoy que rompen la regla: **0** (no hay file-upload).
73
73
 
@@ -81,7 +81,7 @@ más compacta. En pantallas de los dos, con el servicio de breakpoints de la app
81
81
  | uso | mobile | web | fuente |
82
82
  |---|---|---|---|
83
83
  | subir un documento en un formulario o modal | `small` | `medium` | propuesta |
84
- | subir es lo único de la pantalla | `medium` | `large` | propuesta |
84
+ | subir es lo único de la pantalla | `medium` | `large` | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
85
85
 
86
86
  ```html
87
87
  <sui-file-upload [size]="bp.isMobile() ? 'small' : 'medium'"
@@ -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). Todo es **propuesta, falta aprobación**.
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 | propuesta |
36
- | `success` | Subió. | check verde, tacho para quitar | propuesta |
37
- | `error` | Falló. Va con `statusText` que diga por qué. | ícono rojo, «Reintentar», tacho | propuesta |
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. | propuesta |
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`). | propuesta |
45
- | `progress` | 0–100, solo en `in-progress`. | propuesta |
46
- | `statusText` | Los defaults ya están en español («Subiendo…», «Completado», «Falló»); en error, mejor el motivo: «Se cortó la conexión». | propuesta |
47
- | `showStatus=false` | Solo en `success`, cuando el check sobra porque la lista ya dice «Archivos subidos». | propuesta |
48
- | `retryLabel` | El default ya es «Reintentar». | propuesta |
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