@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.
Files changed (120) hide show
  1. package/docs/sui-accordion/README.md +85 -11
  2. package/docs/sui-activity-feed/README.md +65 -11
  3. package/docs/sui-activity-filter/README.md +54 -5
  4. package/docs/sui-alert/README.md +54 -0
  5. package/docs/sui-app-store-badge/README.md +64 -10
  6. package/docs/sui-avatar/README.md +92 -29
  7. package/docs/sui-avatar-group/README.md +75 -9
  8. package/docs/sui-badge/README.md +85 -17
  9. package/docs/sui-banner/README.md +85 -20
  10. package/docs/sui-brand-logo/README.md +95 -31
  11. package/docs/sui-breadcrumb-item/README.md +54 -3
  12. package/docs/sui-breadcrumbs/README.md +54 -6
  13. package/docs/sui-button/README.md +76 -12
  14. package/docs/sui-button-group/README.md +91 -23
  15. package/docs/sui-button-group-item/README.md +81 -14
  16. package/docs/sui-card/README.md +105 -18
  17. package/docs/sui-chart-legend/README.md +63 -10
  18. package/docs/sui-chart-legend-dot/README.md +59 -10
  19. package/docs/sui-checkbox/README.md +109 -29
  20. package/docs/sui-checkbox-card/README.md +70 -14
  21. package/docs/sui-checkbox-label/README.md +92 -26
  22. package/docs/sui-circular-progress-bar/README.md +80 -19
  23. package/docs/sui-color-dot/README.md +72 -12
  24. package/docs/sui-color-picker/README.md +71 -13
  25. package/docs/sui-command-menu-footer/README.md +50 -1
  26. package/docs/sui-command-menu-item/README.md +74 -14
  27. package/docs/sui-command-menu-search/README.md +58 -3
  28. package/docs/sui-compact-avatar-group/README.md +73 -13
  29. package/docs/sui-compact-button/README.md +123 -34
  30. package/docs/sui-compact-select/README.md +61 -7
  31. package/docs/sui-compact-select-for-input/README.md +70 -6
  32. package/docs/sui-content-card/README.md +75 -14
  33. package/docs/sui-content-divider/README.md +67 -16
  34. package/docs/sui-content-label/README.md +99 -20
  35. package/docs/sui-counter-input/README.md +102 -18
  36. package/docs/sui-date-selector/README.md +69 -11
  37. package/docs/sui-datepicker/README.md +85 -18
  38. package/docs/sui-day-cell/README.md +75 -17
  39. package/docs/sui-day-label/README.md +56 -7
  40. package/docs/sui-divider/README.md +64 -9
  41. package/docs/sui-drawer-footer/README.md +63 -2
  42. package/docs/sui-drawer-header/README.md +69 -12
  43. package/docs/sui-dropdown-caption/README.md +58 -6
  44. package/docs/sui-dropdown-item/README.md +75 -9
  45. package/docs/sui-dropdown-menu/README.md +83 -14
  46. package/docs/sui-dropdown-search/README.md +60 -4
  47. package/docs/sui-emoji/README.md +94 -30
  48. package/docs/sui-empty-state/README.md +71 -7
  49. package/docs/sui-fancy-button/README.md +74 -14
  50. package/docs/sui-file-icon/README.md +70 -12
  51. package/docs/sui-file-upload/README.md +77 -17
  52. package/docs/sui-file-upload-card/README.md +64 -12
  53. package/docs/sui-filter/README.md +83 -14
  54. package/docs/sui-flag/README.md +73 -8
  55. package/docs/sui-form-hint/README.md +56 -7
  56. package/docs/sui-form-label/README.md +57 -5
  57. package/docs/sui-href/README.md +47 -0
  58. package/docs/sui-icon/README.md +86 -18
  59. package/docs/sui-image-upload/README.md +90 -22
  60. package/docs/sui-image-upload-profile/README.md +70 -11
  61. package/docs/sui-img-retry/README.md +50 -1
  62. package/docs/sui-inline-input/README.md +67 -9
  63. package/docs/sui-inline-select/README.md +62 -2
  64. package/docs/sui-input/README.md +90 -27
  65. package/docs/sui-integration-switch/README.md +84 -17
  66. package/docs/sui-kbd/README.md +73 -9
  67. package/docs/sui-key-icon/README.md +85 -23
  68. package/docs/sui-link-button/README.md +96 -27
  69. package/docs/sui-logo/README.md +93 -22
  70. package/docs/sui-modal/README.md +72 -13
  71. package/docs/sui-modal-footer/README.md +86 -12
  72. package/docs/sui-modal-header/README.md +57 -1
  73. package/docs/sui-modal-sheet/README.md +74 -12
  74. package/docs/sui-notification/README.md +81 -11
  75. package/docs/sui-notification-footer/README.md +55 -5
  76. package/docs/sui-notification-tab-menu/README.md +61 -5
  77. package/docs/sui-otp-input/README.md +70 -9
  78. package/docs/sui-page-header/README.md +89 -19
  79. package/docs/sui-pagination/README.md +73 -13
  80. package/docs/sui-password-strength/README.md +50 -1
  81. package/docs/sui-payment-icon/README.md +80 -18
  82. package/docs/sui-period-range/README.md +70 -11
  83. package/docs/sui-popover/README.md +81 -15
  84. package/docs/sui-product-card/README.md +89 -21
  85. package/docs/sui-progress-bar/README.md +82 -15
  86. package/docs/sui-progress-bar-label/README.md +79 -18
  87. package/docs/sui-radio/README.md +84 -7
  88. package/docs/sui-radio-card/README.md +70 -16
  89. package/docs/sui-radio-label/README.md +89 -22
  90. package/docs/sui-rating/README.md +101 -31
  91. package/docs/sui-rich-editor/README.md +47 -2
  92. package/docs/sui-segmented-control/README.md +90 -21
  93. package/docs/sui-select/README.md +80 -11
  94. package/docs/sui-sidebar/README.md +71 -16
  95. package/docs/sui-slider/README.md +75 -8
  96. package/docs/sui-social-button/README.md +71 -11
  97. package/docs/sui-status-badge/README.md +75 -14
  98. package/docs/sui-stepper/README.md +75 -18
  99. package/docs/sui-store-card/README.md +85 -22
  100. package/docs/sui-switch/README.md +82 -11
  101. package/docs/sui-switch-card/README.md +80 -16
  102. package/docs/sui-switch-label/README.md +91 -14
  103. package/docs/sui-tab-chips/README.md +93 -21
  104. package/docs/sui-tab-menu-horizontal/README.md +68 -7
  105. package/docs/sui-tab-menu-vertical/README.md +64 -11
  106. package/docs/sui-table/README.md +77 -16
  107. package/docs/sui-tag/README.md +86 -12
  108. package/docs/sui-tag-input/README.md +77 -13
  109. package/docs/sui-textarea/README.md +84 -17
  110. package/docs/sui-time-picker/README.md +96 -33
  111. package/docs/sui-toast/README.md +81 -20
  112. package/docs/sui-tooltip/README.md +80 -22
  113. package/docs/sui-topbar/README.md +64 -10
  114. package/docs/sui-topbar-button/README.md +61 -7
  115. package/docs/sui-topbar-item/README.md +68 -7
  116. package/docs/sui-topbar-user/README.md +61 -5
  117. package/fesm2022/ajuarezso-sui-design-system.mjs +15 -10
  118. package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
  119. package/package.json +1 -1
  120. package/types/ajuarezso-sui-design-system.d.ts +7 -3
@@ -22,8 +22,8 @@ modal, el resultado de una acción («Cuenta bloqueada», «Gracias por califica
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 están
26
+ > aprobadas (05-10-2026); los tamaños quedaron en canon el 05-10-2026 (P1 b).
27
27
  >
28
28
  > Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos directos**. Lo usan por dentro
29
29
  > `sui-content-label` y `sui-payment-icon`.
@@ -32,8 +32,8 @@ modal, el resultado de una acción («Cuenta bloqueada», «Gracias por califica
32
32
 
33
33
  | valor | cuándo | fuente |
34
34
  |---|---|---|
35
- | `lighter` | El ícono dice un estado: el color del fondo **es** el significado («Cuenta bloqueada» en rojo, «Calificación enviada» en verde). | propuesta |
36
- | `stroke` (default) | Ícono neutro al inicio de una fila, sobre fondo blanco. **Siempre con `color="gray"`.** | propuesta |
35
+ | `lighter` | El ícono dice un estado: el color del fondo **es** el significado («Cuenta bloqueada» en rojo, «Calificación enviada» en verde). | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
36
+ | `stroke` (default) | Ícono neutro al inicio de una fila, sobre fondo blanco. **Siempre con `color="gray"`.** | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
37
37
 
38
38
  ### `color` — mismo significado que el badge, salvo `teal`
39
39
 
@@ -43,25 +43,25 @@ ni un color para stable.
43
43
 
44
44
  | valor | estado de la paleta | cuándo | fuente |
45
45
  |---|---|---|---|
46
- | `gray` (default) | faded | Neutro. El único color para `stroke`. | propuesta |
47
- | `blue` | information | Información. | propuesta |
48
- | `orange` | warning | Pendiente, pide atención. | propuesta |
49
- | `red` | error | Error, bloqueado, rechazado. | propuesta |
50
- | `green` | success | Bien, listo, aprobado. | propuesta |
51
- | `yellow` | away | En pausa. | propuesta |
52
- | `purple` | feature | Novedad. | propuesta |
53
- | `pink` | highlighted | Destacado. | propuesta |
54
- | `teal` | verified | Verificado. | propuesta |
46
+ | `gray` (default) | faded | Neutro. El único color para `stroke`. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
47
+ | `blue` | information | Información. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
48
+ | `orange` | warning | Pendiente, pide atención. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
49
+ | `red` | error | Error, bloqueado, rechazado. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
50
+ | `green` | success | Bien, listo, aprobado. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
51
+ | `yellow` | away | En pausa. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
52
+ | `purple` | feature | Novedad. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
53
+ | `pink` | highlighted | Destacado. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
54
+ | `teal` | verified | Verificado. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
55
55
 
56
56
  ### `size`
57
57
 
58
58
  | valor | ícono | cuándo | fuente |
59
59
  |---|---|---|---|
60
- | `32` | 20 | Filas densas. | propuesta |
61
- | `40` (default) | 20 | Filas de una lista. | propuesta |
62
- | `48` | 24 | Cards. | propuesta |
63
- | `56` | 28 | Cabecera de un modal. | propuesta |
64
- | `64` | 32 | El resultado de un modal: cuenta bloqueada, calificación enviada. | propuesta |
60
+ | `32` | 20 | Filas densas. | canon (dueño, 05-10-2026, P1 b) |
61
+ | `40` (default) | 20 | Filas de una lista. | canon (dueño, 05-10-2026, P1 b) |
62
+ | `48` | 24 | Cards. | canon (dueño, 05-10-2026, P1 b) |
63
+ | `56` | 28 | Cabecera de un modal. | canon (dueño, 05-10-2026, P1 b) |
64
+ | `64` | 32 | El resultado de un modal: cuenta bloqueada, calificación enviada. | canon (dueño, 05-10-2026, P1 b) |
65
65
 
66
66
  **Usos de hoy que romperían la propuesta: 7 círculos con ícono hechos a mano.** Dos son un
67
67
  `sui-key-icon` `lighter` exacto: `components/cuenta-bloqueada/cuenta-bloqueada.html:4` (64 px,
@@ -74,10 +74,12 @@ Se encontraron buscando reglas `*icon*` con `border-radius: 50%`, fondo y 32–6
74
74
 
75
75
  ## Tamaño en mobile y en web
76
76
 
77
- En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. En las
78
- pantallas que se usan en los dos (panel del local, super admin) se elige con el servicio de
79
- breakpoints de la app (`bp`, en `services/breakpoints.service.ts`); en las que solo existen en
80
- el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propuesta**.
77
+ En mobile se lee con el celular en la mano, así que va más grande; en web, más chico. Se elige
78
+ con el servicio de breakpoints de la app (`bp`, en `services/breakpoints.service.ts`) también en
79
+ las pantallas que solo existen en el celular (cliente, repartidor): no se toca, así que la tablet
80
+ va con el valor de web, y el celular chico (< 380 px) también (D16, dueño 05-10-2026).
81
+ Es **canon (dueño, 05-10-2026, P1 b)**: un paso más grande en el celular que en computadora, y
82
+ se migra todo ahora, no solo al tocar cada pantalla.
81
83
 
82
84
  | uso | mobile | web |
83
85
  |---|---|---|
@@ -86,9 +88,28 @@ el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propue
86
88
  | resultado de un modal | `64` | `56` |
87
89
 
88
90
  ```html
89
- <sui-key-icon name="lock-line" styleVariant="lighter" color="red" [size]="bp.isMobile() ? 64 : 56" />
91
+ <sui-key-icon name="lock-line" styleVariant="lighter" color="red" [size]="bp.celular() ? 64 : 56" />
90
92
  ```
91
93
 
94
+ ### Por dispositivo (D16)
95
+
96
+ La key-icon no se toca: sube un paso **solo en el celular de 380 px o más**. Fuente: D16, dueño
97
+ 05-10-2026 (P1 b).
98
+
99
+ | dispositivo | size | nota |
100
+ |---|---|---|
101
+ | celular chico (< 380) | valor «web» (`32` fila · `40` card · `56` modal) | no se toca: no sube aunque sea un celular |
102
+ | celular (380–767) | valor «mobile» (`40` fila · `48` card · `64` modal) | un paso más que en la computadora |
103
+ | tablet táctil (`pointer: coarse`) | valor «web» (`32` · `40` · `56`) | no se toca: el puntero no cambia nada |
104
+ | computadora (`pointer: fine`) | valor «web» (`32` · `40` · `56`) | |
105
+
106
+ En el ultrawide, igual que en la computadora: el espacio extra va a más columnas, no a círculos
107
+ más grandes.
108
+
109
+ En master-pedidos no hay helper: `[size]="bp.celular() ? 40 : 32"` (fila),
110
+ `[size]="bp.celular() ? 48 : 40"` (card) o `[size]="bp.celular() ? 64 : 56"` (resultado de un
111
+ modal). No uses `bp.isMobile()`: incluye el celular chico, que va con el valor de web.
112
+
92
113
  ## «No usar»: por qué no hoy y cuándo sí
93
114
 
94
115
  | qué | por qué no hoy | cuándo sí, en un flujo nuevo |
@@ -118,6 +139,47 @@ Outputs: ninguno.
118
139
  - **El default es `stroke` `gray`**: si quieres el círculo de color, pide `lighter` explícito.
119
140
  - `name` va sin `ri-`, como en `sui-icon`.
120
141
 
142
+ ## Bien y mal
143
+
144
+ Resultado de un modal: cuenta bloqueada
145
+
146
+ ```html
147
+ <!-- ❌ mal: círculo hecho a mano, 64 fijo y un ícono de 30 fuera de la escala (components/cuenta-bloqueada/cuenta-bloqueada.html:4) -->
148
+ <span class="cb__icono"><sui-icon name="lock-line" [size]="30" /></span>
149
+ ```
150
+
151
+ ```html
152
+ <!-- ✅ bien -->
153
+ <sui-key-icon name="lock-line" styleVariant="lighter" color="red" [size]="bp.celular() ? 64 : 56" />
154
+ ```
155
+
156
+ Resultado de un modal: calificación enviada
157
+
158
+ ```html
159
+ <!-- ❌ mal: el mismo círculo a mano, con los colores del estado en el SCSS (components/driver-rate-modal/driver-rate-modal.html:17) -->
160
+ <div class="drm__exito-icono" [class.drm__exito-icono--tibio]="!fueBueno()" aria-hidden="true">
161
+ <sui-icon [name]="fueBueno() ? 'check-line' : 'heart-3-line'" [size]="32" />
162
+ </div>
163
+ ```
164
+
165
+ ```html
166
+ <!-- ✅ bien -->
167
+ <sui-key-icon [name]="fueBueno() ? 'check-line' : 'heart-3-line'" styleVariant="lighter"
168
+ [color]="fueBueno() ? 'green' : 'blue'" [size]="bp.celular() ? 64 : 56" />
169
+ ```
170
+
171
+ Tamaño por dispositivo
172
+
173
+ ```html
174
+ <!-- ❌ mal: isMobile incluye el celular chico, que va con el valor de web (D16) -->
175
+ <sui-key-icon name="store-2-line" [size]="bp.isMobile() ? 40 : 32" />
176
+ ```
177
+
178
+ ```html
179
+ <!-- ✅ bien -->
180
+ <sui-key-icon name="store-2-line" [size]="bp.celular() ? 40 : 32" />
181
+ ```
182
+
121
183
  ## Ejemplo
122
184
 
123
185
  ```html
@@ -60,11 +60,11 @@ Es el reemplazo del `sui-button` `ghost` `primary`.
60
60
  **Usos de hoy que rompen la regla:**
61
61
 
62
62
  - **4 `error` que abren una destructiva grande → `sui-button` `stroke` `error`:**
63
- `pages/super-admin/master-orders/master-orders.html:425` («Cancelar pedido»),
63
+ `pages/super-admin/master-orders/master-orders.html:467` («Cancelar pedido»),
64
64
  `pages/orders/orders.html:233` («Rechazar pedido»), `pages/central/central-gastos/central-gastos.html:101`
65
- («Anular gasto») y `pages/driver/driver-order-detail/driver-order-detail.html:745` («Cancelar» el
65
+ («Anular gasto») y `pages/driver/driver-order-detail/driver-order-detail.html:774` («Cancelar» el
66
66
  pedido, en `large`; nuevo, medido el 04-10-2026).
67
- - A discutir: `pages/super-admin/master-orders/master-orders.html:430` («Liberar» en `gray`): es una
67
+ - A discutir: `pages/super-admin/master-orders/master-orders.html:472` («Liberar» en `gray`): es una
68
68
  acción de operación, no una salida de baja jerarquía.
69
69
 
70
70
  ### `size`
@@ -73,7 +73,7 @@ Es el reemplazo del `sui-button` `ghost` `primary`.
73
73
  |---|---|---|
74
74
  | `large` (24 px, texto 16, ícono 20) | Mobile, donde se lee y se toca con el dedo: el link suelto de una pantalla de teléfono. | propuesta: el tamaño es extensión SUI aprobada (03-10-2026); el «cuándo» falta aprobarlo |
75
75
  | `medium` (20 px, default) | Lo normal: cabeceras de sección, párrafos, acciones sueltas. | default según la guía del DS; el «cuándo» es canon (aprobado por el dueño, 03-10-2026) |
76
- | `small` (16 px) | Junto a un dato en una fila: «Cambiar», «Mi billetera», «Cambiar mi calificación». | canon (aprobado por el dueño, 03-10-2026) |
76
+ | `small` (16 px) | No usar: es chico. Junto a un dato en una fila («Cambiar», «Mi billetera») va `medium` en web. | canon (dueño, 05-10-2026, D16), reemplaza la regla del 03-10-2026 |
77
77
 
78
78
  ### `underline`
79
79
 
@@ -87,8 +87,8 @@ Es el reemplazo del `sui-button` `ghost` `primary`.
87
87
  | prop | cuándo | fuente |
88
88
  |---|---|---|
89
89
  | `rightIcon` (`arrow-right-s-line`) | Cuando el link lleva a otra pantalla: «Ver la carta», «Mi billetera». | canon (aprobado por el dueño, 03-10-2026) |
90
- | `leftIcon` | Cuando el ícono dice la acción: descargar, editar, agregar, ver. «Descargar la app», «Agregar nota para el conductor». | propuesta |
91
- | los dos a la vez | No: con dos íconos el link deja de leerse como texto. | propuesta |
90
+ | `leftIcon` | Cuando el ícono dice la acción: descargar, editar, agregar, ver. «Descargar la app», «Agregar nota para el conductor». | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
91
+ | los dos a la vez | No: con dos íconos el link deja de leerse como texto. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
92
92
 
93
93
  Los íconos son nombres RemixIcon sin el prefijo `ri-`. Miden 20 px en `large` y `medium`, y 16 px en `small`.
94
94
 
@@ -96,27 +96,30 @@ Los íconos son nombres RemixIcon sin el prefijo `ri-`. Miden 20 px en `large` y
96
96
 
97
97
  | disabled | cuándo | fuente |
98
98
  |---|---|---|
99
- | `true` | La acción existe pero ahora no se puede: mientras se guarda, mientras se procesa otra acción. Mejor que esconderla si la persona la espera en ese lugar. | cómo se ve: según la guía del DS · cuándo: propuesta |
99
+ | `true` | La acción existe pero ahora no se puede: mientras se guarda, mientras se procesa otra acción. Mejor que esconderla si la persona la espera en ese lugar. | cómo se ve: según la guía del DS · cuándo: canon (aprobado por el dueño, 05-10-2026, bloque B8) |
100
100
 
101
- Ejemplos: `components/add-product-modal/add-product-modal.html:339` («Vista previa» mientras guarda),
101
+ Ejemplos: `components/add-product-modal/add-product-modal.html:341` («Vista previa» mientras guarda),
102
102
  `pages/orders/orders.html:233`.
103
103
 
104
104
  ### `href`, `target`, `rel`, `type`, `ariaLabel`
105
105
 
106
106
  | prop | cuándo | fuente |
107
107
  |---|---|---|
108
- | `href` | Navegar, sin otra acción: el componente pinta un `<a>` real. Las rutas internas (`/cliente/…`) navegan con el Router, sin recargar. | propuesta |
109
- | `target="_blank"` | Solo para destinos externos: la descarga, un documento, WhatsApp. **Pon también `rel="noopener noreferrer"`**: aquí el default de `rel` es `null`. | propuesta |
110
- | `type="submit"` | Solo dentro de un `<form>`. El resto, `button` (default). | propuesta (mismo criterio que `sui-button`) |
111
- | `ariaLabel` | Cuando el texto visible no basta fuera de contexto: «Descargar la app» → «Descargar la app de Master Pedidos». | propuesta |
108
+ | `href` | Navegar, sin otra acción: el componente pinta un `<a>` real. Las rutas internas (`/cliente/…`) navegan con el Router, sin recargar. | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
109
+ | `target="_blank"` | Solo para destinos externos: la descarga, un documento, WhatsApp. **Pon también `rel="noopener noreferrer"`**: aquí el default de `rel` es `null`. | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
110
+ | `type="submit"` | Solo dentro de un `<form>`. El resto, `button` (default). | canon (aprobado por el dueño, 05-10-2026, bloque B10) (mismo criterio que `sui-button`) |
111
+ | `ariaLabel` | Cuando el texto visible no basta fuera de contexto: «Descargar la app» → «Descargar la app de Master Pedidos». | canon (aprobado por el dueño, 05-10-2026, bloque B10) |
112
112
 
113
113
  ## Tamaño en mobile y en web
114
114
 
115
- En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más**. En web, con mouse,
116
- va un tamaño más chico. La app ya lo resuelve con `BreakpointsService`
117
- (`src/app/services/breakpoints.service.ts`, mobile = hasta 767 px):
118
- `[size]="bp.isMobile() ? 'large' : 'small'"`. Medido el 04-10-2026 en `master-pedidos`: 166 `[size]`
119
- con `bp` (142 `large`/`medium`, 22 `large`/`small`, 2 `medium`/`xsmall`). Regla del dueño, 03-10-2026.
115
+ En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más**. En el celular y en
116
+ la tablet (`pointer: coarse`) el size está **pendiente (P8)**, porque ningún size del link llega a
117
+ 44; en la computadora (`pointer: fine`), `medium`; en el celular chico (< 380 px), `medium`.
118
+ Nada en `small` ni `xsmall` (canon, dueño, 05-10-2026, D16; reemplaza al «tamaño por plataforma» del
119
+ 03-10-2026, que bajaba la web a `small`). Hoy la app lo resuelve con `BreakpointsService`
120
+ (`src/app/services/breakpoints.service.ts`, mobile = hasta 767 px): `[size]="bp.isMobile() ? 'large' : 'medium'"`,
121
+ que es la propuesta sin aprobar de P8 (ver «Por dispositivo (D16)» abajo). Medido el 04-10-2026 en `master-pedidos`: 166 `[size]`
122
+ con `bp` (142 `large`/`medium`, 22 `large`/`small`, 2 `medium`/`xsmall`); los 24 que bajan de `medium` se migran.
120
123
 
121
124
  | size | alto | texto | ícono |
122
125
  |---|---|---|---|
@@ -130,23 +133,42 @@ con `bp` (142 `large`/`medium`, 22 `large`/`small`, 2 `medium`/`xsmall`). Regla
130
133
  | uso | mobile | web | fuente |
131
134
  |---|---|---|---|
132
135
  | link suelto (cabecera de sección, «Omitir», «Ver todas») | `large` (24) | `medium` (20) | web: canon (aprobado por el dueño, 03-10-2026) · mobile `large`: propuesta: el tamaño es extensión SUI aprobada (03-10-2026); el «cuándo» falta aprobarlo (antes era `medium`) |
133
- | junto a un dato en una fila («Cambiar», «Mi billetera») | `medium` (20) | `small` (16) | canon (aprobado por el dueño, 03-10-2026) |
134
- | dentro de un párrafo | el del texto que lo rodea | el del texto que lo rodea | propuesta |
136
+ | junto a un dato en una fila («Cambiar», «Mi billetera») | `medium` (20) | `medium` (20) | web: canon (dueño, 05-10-2026, D16), antes `small` · mobile `medium`: canon (aprobado por el dueño, 03-10-2026); D16 lo llevaría a `large`, pero el tamaño del link en el teléfono espera P8 |
137
+ | dentro de un párrafo | el del texto que lo rodea | el del texto que lo rodea | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
135
138
 
136
139
  ```html
137
140
  <sui-link-button variant="primary" [size]="bp.isMobile() ? 'large' : 'medium'" rightIcon="arrow-right-s-line">Ver todas</sui-link-button>
138
- <sui-link-button variant="gray" [size]="bp.isMobile() ? 'medium' : 'small'" rightIcon="arrow-right-s-line">Mi billetera</sui-link-button>
141
+ <sui-link-button variant="gray" size="medium" rightIcon="arrow-right-s-line">Mi billetera</sui-link-button>
139
142
  ```
140
143
 
141
144
  **Ningún tamaño llega a 44 px**: el link mide 16–24 de alto y no tiene padding. En mobile el área
142
145
  táctil la pone el contenedor: la fila o el bloque donde vive tiene que medir 44 px o más de alto, o
143
- dejar aire alrededor del link. `small` (16) no va en mobile. Medido el 04-10-2026: los 4 de
146
+ dejar aire alrededor del link. `small` (16) no va en ningún lado (D16, 05-10-2026). Medido el 04-10-2026: los 4 de
144
147
  repartidor y cliente ya usan `[size]="bp.isMobile() ? 'medium' : 'small'"`
145
148
  (`pages/driver/driver-profile/driver-profile.html:258` y `:264`,
146
- `pages/driver/driver-dashboard/driver-dashboard.html:1092`,
149
+ `pages/driver/driver-dashboard/driver-dashboard.html:1210`,
147
150
  `pages/customer/order-history/order-history.html:412`). Quedan 2 `small` fijos, los dos del panel
148
- de la empresa: `pages/mi-negocio/mi-negocio.html:474` y
149
- `components/add-product-modal/add-product-modal.html:339`.
151
+ de la empresa: `pages/mi-negocio/mi-negocio.html:473` y
152
+ `components/add-product-modal/add-product-modal.html:341`.
153
+
154
+ ### Por dispositivo (D16)
155
+
156
+ Fila `link-button` de la tabla D16 (dueño, 05-10-2026). Se toca, pero ningún size llega a 44, así
157
+ que el tamaño en las pantallas táctiles espera P8.
158
+
159
+ | dispositivo | size | nota |
160
+ |---|---|---|
161
+ | celular chico (< 380) | `medium` | |
162
+ | celular (380–767) | pendiente (P8) | a) el contenedor (fila o card) llega a 44 y el link va `medium` (recomendada) · b) `large` (24) por legibilidad |
163
+ | tablet táctil (`pointer: coarse`) | pendiente (P8) | la misma pregunta: también se toca con el dedo |
164
+ | computadora (`pointer: fine`) | `medium` | también en filas y cabeceras; `small` no se usa |
165
+
166
+ En el ultrawide, igual que en la computadora. Dentro de un párrafo, el size del texto que lo rodea.
167
+
168
+ En master-pedidos no hay helper hasta que se decida P8: `size="medium"` en la computadora y en el
169
+ celular chico. No uses `bp.sizeControl()` (sería elegir la b) ni bajes a `small`. El
170
+ `[size]="bp.isMobile() ? 'large' : 'medium'"` que hoy lleva el link suelto es la propuesta sin
171
+ aprobar, y además deja el celular chico en `large`.
150
172
 
151
173
  ## «No usar»: por qué no hoy y cuándo sí
152
174
 
@@ -183,9 +205,10 @@ Slots: `<ng-content>` (el texto).
183
205
  ## Trampas
184
206
 
185
207
  - **El output es `(clicked)`**, no `(click)` como en `sui-button`. `(click)` sobre el host igual
186
- funciona porque el clic burbujea, pero hoy hay 6 usos así (`components/subscription-banner/subscription-banner.html:10`,
208
+ funciona porque el clic burbujea, pero hoy hay 8 usos así (`components/subscription-banner/subscription-banner.html:10`,
187
209
  `pages/super-admin/master-approvals/master-approvals.html:89`, `pages/central/central-gastos/central-gastos.html:101`,
188
- `pages/account-suspended/account-suspended.html:66` y `:70`, `pages/customer/viaje/viaje.html:216`).
210
+ `pages/account-suspended/account-suspended.html:66` y `:70`, `pages/customer/viaje/viaje.html:211`,
211
+ `pages/super-admin/master-solicitudes/master-solicitudes.html:47` y `:50`; medido el 06-10-2026).
189
212
  Usa `(clicked)`, que ya respeta `disabled`.
190
213
  - **`rel` arranca en `null`**, a diferencia de compact, fancy y social, que traen
191
214
  `'noopener noreferrer'`. Con `target="_blank"` hay que ponerlo a mano.
@@ -201,6 +224,52 @@ Slots: `<ng-content>` (el texto).
201
224
  toast local). No es la del paquete: un arreglo en el DS no le llega.
202
225
  - Ya trae el arreglo de iOS para el `:active` pegado: no lo agregues.
203
226
 
227
+ ## Bien y mal
228
+
229
+ Cancelar un pedido
230
+
231
+ ```html
232
+ <!-- ❌ mal: error en link es para quitar algo menor; cancelar el pedido es una destructiva grande (pages/driver/driver-order-detail/driver-order-detail.html:774) -->
233
+ <sui-link-button variant="error" size="large" (clicked)="showCancelModal.set(true)">
234
+ Cancelar {{ comoSeLlama }}
235
+ </sui-link-button>
236
+ ```
237
+
238
+ ```html
239
+ <!-- ✅ bien -->
240
+ <sui-button variant="stroke" color="error" [size]="bp.sizeControl()" (click)="showCancelModal.set(true)">
241
+ Cancelar {{ comoSeLlama }}
242
+ </sui-button>
243
+ ```
244
+
245
+ Link al pie de una sección del panel
246
+
247
+ ```html
248
+ <!-- ❌ mal: small no se usa en ningún lado (D16); igual order-history.html:412 con 'medium' : 'small' (pages/mi-negocio/mi-negocio.html:473) -->
249
+ <sui-link-button variant="gray" size="small" rightIcon="arrow-right-s-line"
250
+ (clicked)="goToProducts()">Ir a Productos</sui-link-button>
251
+ ```
252
+
253
+ ```html
254
+ <!-- ✅ bien -->
255
+ <sui-link-button variant="gray" size="medium" rightIcon="arrow-right-s-line"
256
+ (clicked)="goToProducts()">Ir a Productos</sui-link-button>
257
+ ```
258
+
259
+ Acción que se deshabilita mientras procesa
260
+
261
+ ```html
262
+ <!-- ❌ mal: (click) escucha el host, no el output; (clicked) es el que respeta disabled (pages/super-admin/master-solicitudes/master-solicitudes.html:47) -->
263
+ <sui-link-button variant="gray" size="medium" [disabled]="ocupada() === f.id"
264
+ (click)="cambiar(f, 'nueva')">Reabrir</sui-link-button>
265
+ ```
266
+
267
+ ```html
268
+ <!-- ✅ bien -->
269
+ <sui-link-button variant="gray" size="medium" [disabled]="ocupada() === f.id"
270
+ (clicked)="cambiar(f, 'nueva')">Reabrir</sui-link-button>
271
+ ```
272
+
204
273
  ## Ejemplo
205
274
 
206
275
  ```html
@@ -208,7 +277,7 @@ Slots: `<ng-content>` (el texto).
208
277
  <sui-link-button variant="primary" (clicked)="verTodas()">Ver todas</sui-link-button>
209
278
 
210
279
  <!-- Junto a un dato, lleva a otra pantalla -->
211
- <sui-link-button variant="gray" size="small" rightIcon="arrow-right-s-line" (clicked)="irABilletera()">
280
+ <sui-link-button variant="gray" rightIcon="arrow-right-s-line" (clicked)="irABilletera()">
212
281
  Mi billetera
213
282
  </sui-link-button>
214
283
 
@@ -27,7 +27,8 @@ uno solo.
27
27
  ## Qué variante usar
28
28
 
29
29
  > **La guía del DS no tiene este componente**: es propio de SUI, porque es la marca de la app.
30
- > Todo lo de abajo es **propuesta, falta aprobación**; los ejemplos salen de cómo se usa hoy.
30
+ > Todo lo de abajo es **canon** (aprobado por el dueño el 05-10-2026, o la decisión que cita cada fila); los ejemplos salen
31
+ > de cómo se usa hoy.
31
32
  >
32
33
  > Uso medido el 03-10-2026 en `master-pedidos/src/app`: 10 logos en 8 archivos, sin contar
33
34
  > prototipos ni vitrinas. 4 `horizontal`, 3 `stacked`, 3 `markOnly`; 7 con `[height]` y 3 con `size`.
@@ -36,9 +37,9 @@ uno solo.
36
37
 
37
38
  | valor | cuándo | ejemplo real de la app | fuente |
38
39
  |---|---|---|---|
39
- | `horizontal` (default) | Barras y cabeceras: la M a la izquierda y la palabra en dos líneas. | `layouts/public/public-layout.html:4` · `pages/public/pedido-en-vivo/pedido-en-vivo.html:72` · `pages/role-selector/role-selector.html:10` | propuesta |
40
- | `stacked` | Pantallas de marca centradas: la M arriba y la palabra abajo. | `pages/empresa/about/about.html:12` · `components/ota-update/ota-update.html:118` | propuesta |
41
- | `[markOnly]="true"` | Donde la palabra no entra o ya está escrita al lado: nav mobile, login. | `layouts/public/public-layout.html:6` · `pages/auth/login/login.html:3` | propuesta |
40
+ | `horizontal` (default) | Barras y cabeceras: la M a la izquierda y la palabra en dos líneas. | `layouts/public/public-layout.html:4` · `pages/public/pedido-en-vivo/pedido-en-vivo.html:72` · `pages/role-selector/role-selector.html:10` | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
41
+ | `stacked` | Pantallas de marca centradas: la M arriba y la palabra abajo. | `pages/empresa/about/about.html:12` · `components/ota-update/ota-update.html:118` | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
42
+ | `[markOnly]="true"` | Donde la palabra no entra o ya está escrita al lado: nav mobile, login. | `layouts/public/public-layout.html:6` · `pages/auth/login/login.html:3` | canon (aprobado por el dueño, 05-10-2026, bloque B2) |
42
43
 
43
44
  No existe la versión de una sola línea («Master Pedidos» en un renglón): es otro dibujo.
44
45
 
@@ -48,14 +49,14 @@ No existe la versión de una sola línea («Master Pedidos» en un renglón): es
48
49
 
49
50
  | valor | alto | cuándo | fuente |
50
51
  |---|---|---|---|
51
- | `xs` / `sm` | 16 / 20 | No usar hoy: la palabra no se lee (con `markOnly` sí sirve). | propuesta |
52
- | `md` (default) | 24 | Barra de una página pública. | propuesta |
53
- | `lg` | 32 | Nav pública, login. | propuesta |
54
- | `xl` | 40 | Pantalla de actualización. | propuesta |
55
- | `2xl` | 48 | Selector de rol. | propuesta |
56
- | `height` | libre | **Solo para más de 48 px**: el apilado de 120 en «Acerca de» y en la actualización. | propuesta |
57
-
58
- **Usos de hoy que romperían la propuesta: 4 `[height]` que van a la escala.**
52
+ | `xs` / `sm` | 16 / 20 | No usar hoy: la palabra no se lee (con `markOnly` sí sirve). | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
53
+ | `md` (default) | 24 | Barra de una página pública. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
54
+ | `lg` | 32 | Nav pública, login. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
55
+ | `xl` | 40 | Pantalla de actualización. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
56
+ | `2xl` | 48 | Selector de rol. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
57
+ | `height` | libre | **Solo para más de 48 px**: el apilado de 120 en «Acerca de» y en la actualización. | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
58
+
59
+ **Usos de hoy que romperían la regla: 4 `[height]` que van a la escala.**
59
60
  `components/ota-update/ota-update.html:17` (`40` → `size="xl"`),
60
61
  `pages/public/pedido-en-vivo/pedido-en-vivo.html:72` (`22` → `md`),
61
62
  `layouts/public/public-layout.html:6` (`28` → `lg`), `pages/customer/about/about.html:19` (`44` → `xl` o `2xl`).
@@ -64,10 +65,10 @@ No existe la versión de una sola línea («Master Pedidos» en un renglón): es
64
65
 
65
66
  | combinación | cuándo | fuente |
66
67
  |---|---|---|
67
- | de marca (default): M `--sui-primary-base` + palabra `--sui-text-strong-950` | Sobre fondo claro. **No hace falta pasar los colores**: ya son el default. | propuesta |
68
- | monocromo: todo `--sui-text-strong-950` | Login y nav pública, donde el naranja ya está en el botón principal. | propuesta |
69
- | blanco: todo `--sui-static-white` | Sobre naranja o sobre foto. `static-white` no cambia con el tema. | propuesta |
70
- | cualquier otro color | No usar. | propuesta |
68
+ | de marca (default): M `--sui-primary-base` + palabra `--sui-text-strong-950` | Sobre fondo claro. **No hace falta pasar los colores**: ya son el default. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
69
+ | monocromo: todo `--sui-text-strong-950` | Login y nav pública, donde el naranja ya está en el botón principal. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
70
+ | blanco: todo `--sui-static-white` | Sobre naranja o sobre foto. `static-white` no cambia con el tema. | canon (decisión del dueño, regla de tres blancos del modo oscuro: `static-white` sobre fondo fijo) |
71
+ | cualquier otro color | No usar. | canon (aprobado por el dueño, 05-10-2026, bloque B3) |
71
72
 
72
73
  **Usos de hoy redundantes: 6** pasan a mano los colores que ya son el default (no rompen nada,
73
74
  sobran): `components/ota-update/ota-update.html:17`, `pages/role-selector/role-selector.html:10`,
@@ -80,15 +81,18 @@ sobran): `components/ota-update/ota-update.html:17`, `pages/role-selector/role-s
80
81
 
81
82
  | input | cuándo | fuente |
82
83
  |---|---|---|
83
- | `[decorative]="true"` | Cuando al lado ya está escrito «Master Pedidos» (el título de «Acerca de»): así el lector de pantalla no lo dice dos veces. | propuesta |
84
- | `ariaLabel` | No tocar: ya dice «Master Pedidos». | propuesta |
84
+ | `[decorative]="true"` | Cuando al lado ya está escrito «Master Pedidos» (el título de «Acerca de»): así el lector de pantalla no lo dice dos veces. | canon (aprobado por el dueño, 05-10-2026, bloque B5) |
85
+ | `ariaLabel` | No tocar: ya dice «Master Pedidos». | canon (aprobado por el dueño, 05-10-2026, bloque B5) |
85
86
 
86
87
  ## Tamaño en mobile y en web
87
88
 
88
- En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. En las
89
- pantallas que se usan en los dos (panel del local, super admin) se elige con el servicio de
90
- breakpoints de la app (`bp`, en `services/breakpoints.service.ts`); en las que solo existen en
91
- el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propuesta**.
89
+ En el celular va un paso más grande que en la computadora: el logo no se toca, así que sigue la
90
+ regla de «lo que no se toca» (P1 b). Se elige siempre con el servicio de breakpoints de la app
91
+ (`bp`, en `services/breakpoints.service.ts`), **también en las pantallas que solo existen en el
92
+ celular** (cliente, repartidor): con D16 el celular chico (< 380) lleva el valor de web en la
93
+ pantalla de entrada, así que «mobile» ya no es un valor fijo para ellas (ver «Por dispositivo»).
94
+ En la tabla, «mobile» es el celular de 380 a 767 px y «web» la computadora. Es **canon (aprobado
95
+ por el dueño, 05-10-2026, bloque B1 y D16)**.
92
96
 
93
97
  | uso | mobile | web |
94
98
  |---|---|---|
@@ -103,6 +107,34 @@ el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propue
103
107
  En la barra no cambia el alto, cambia la forma: en mobile no entra la palabra. Es lo que ya hace
104
108
  `layouts/public/public-layout.html:4`–`:6`, con dos logos y CSS.
105
109
 
110
+ ### Por dispositivo (D16)
111
+
112
+ El logo **no se toca**, así que va como «lo que no se toca» de D16 (la misma fila que
113
+ `brand-logo`): sube un paso solo en el celular de 380 px o más; el celular chico, la tablet y la
114
+ computadora llevan el valor de web (con el matiz de la tablet de 600 a 767, abajo). En la
115
+ práctica solo cambia la pantalla de entrada: la barra cambia de forma por ancho (no de tamaño) y
116
+ la pantalla de marca va a 120 en todos.
117
+
118
+ La app distingue el celular **por ancho, no por puntero**: `bp.celular()` y `bp.isMobile()` son
119
+ `max-width: 767px`. Por eso la tablet táctil de 600 a 767 px (una Android chica en vertical) cae
120
+ del lado del celular, igual que con `bp.sizeBadge()`; la tablet «de web» empieza en 768.
121
+
122
+ | dispositivo | size | nota |
123
+ |---|---|---|
124
+ | celular chico (< 380) | entrada `xl` · barra `[markOnly]="true"` `lg` | valor de web en el tamaño; la palabra tampoco entra en la barra |
125
+ | celular (380–767) | entrada `2xl` · barra `[markOnly]="true"` `lg` | sube un paso (P1 b) |
126
+ | tablet táctil, 600–767 | entrada `2xl` · barra `[markOnly]="true"` `lg` | se lee como celular: la app separa por ancho, no por puntero |
127
+ | tablet táctil, 768–1024 | entrada `xl` · barra `horizontal` `lg` | no se toca: valor de web; desde 768 la palabra ya entra |
128
+ | computadora | entrada `xl` · barra `horizontal` `lg` | |
129
+
130
+ Ultrawide: igual que la computadora; el espacio extra no agranda el logo. La pantalla de marca
131
+ («Acerca de», actualización) es `stacked` `[height]="120"` en los cinco. Fuente: D16, dueño
132
+ 05-10-2026.
133
+
134
+ En master-pedidos: no hay helper. Entrada `[size]="bp.celular() ? '2xl' : 'xl'"`; barra
135
+ `size="lg" [markOnly]="bp.isMobile()"`. Se usa `bp.celular()` y no `bp.tactil()`: el logo no
136
+ se toca, la tablet desde 768 no sube.
137
+
106
138
  ## «No usar»: por qué no hoy y cuándo sí
107
139
 
108
140
  | qué | por qué no hoy | cuándo sí, en un flujo nuevo |
@@ -138,6 +170,45 @@ Outputs: ninguno.
138
170
  - **No trae padding**: el `viewBox` es justo el dibujo. El aire lo pone quien lo usa.
139
171
  - **No es `sui-brand-logo`**: ese sirve logos de otras marcas como imágenes que no se pueden teñir.
140
172
 
173
+ ## Bien y mal
174
+
175
+ Un tamaño de la escala, no un alto a mano
176
+
177
+ ```html
178
+ <!-- ❌ mal: alto libre por debajo de 48 (components/ota-update/ota-update.html:17) -->
179
+ <sui-logo orientation="horizontal" [height]="40" />
180
+ ```
181
+
182
+ ```html
183
+ <!-- ✅ bien -->
184
+ <sui-logo size="xl" />
185
+ ```
186
+
187
+ El logo en el pie de la landing
188
+
189
+ ```html
190
+ <!-- ❌ mal: PNG suelto, no sigue al dibujo ni al tema (components/landing-footer/landing-footer.html:7) -->
191
+ <img src="assets/landing/logo-blanco.png" alt="Master Pedidos" width="150" height="53" />
192
+ ```
193
+
194
+ ```html
195
+ <!-- ✅ bien -->
196
+ <sui-logo size="2xl" markColor="var(--sui-static-white)" textColor="var(--sui-static-white)" />
197
+ ```
198
+
199
+ Selector de rol en el celular y en la computadora
200
+
201
+ ```html
202
+ <!-- ❌ mal: 2xl fijo y los colores que ya son el default (pages/role-selector/role-selector.html:10) -->
203
+ <sui-logo orientation="horizontal" size="2xl"
204
+ markColor="var(--sui-primary-base)" textColor="var(--sui-text-strong-950)" />
205
+ ```
206
+
207
+ ```html
208
+ <!-- ✅ bien -->
209
+ <sui-logo [size]="bp.celular() ? '2xl' : 'xl'" />
210
+ ```
211
+
141
212
  ## Ejemplo
142
213
 
143
214
  ```html