@ajuarezso/sui-design-system 0.25.0 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/docs/sui-accordion/README.md +83 -9
  2. package/docs/sui-activity-feed/README.md +55 -1
  3. package/docs/sui-activity-filter/README.md +50 -1
  4. package/docs/sui-alert/README.md +54 -0
  5. package/docs/sui-app-store-badge/README.md +57 -3
  6. package/docs/sui-avatar/README.md +66 -6
  7. package/docs/sui-avatar-group/README.md +64 -2
  8. package/docs/sui-badge/README.md +79 -11
  9. package/docs/sui-banner/README.md +70 -5
  10. package/docs/sui-brand-logo/README.md +77 -14
  11. package/docs/sui-breadcrumb-item/README.md +51 -0
  12. package/docs/sui-breadcrumbs/README.md +48 -0
  13. package/docs/sui-button/README.md +68 -6
  14. package/docs/sui-button-group/README.md +70 -5
  15. package/docs/sui-button-group-item/README.md +68 -4
  16. package/docs/sui-card/README.md +97 -10
  17. package/docs/sui-chart-legend/README.md +53 -0
  18. package/docs/sui-chart-legend-dot/README.md +49 -0
  19. package/docs/sui-checkbox/README.md +106 -26
  20. package/docs/sui-checkbox-card/README.md +58 -2
  21. package/docs/sui-checkbox-label/README.md +89 -23
  22. package/docs/sui-circular-progress-bar/README.md +63 -5
  23. package/docs/sui-color-dot/README.md +61 -5
  24. package/docs/sui-color-picker/README.md +62 -4
  25. package/docs/sui-command-menu-footer/README.md +49 -0
  26. package/docs/sui-command-menu-item/README.md +63 -4
  27. package/docs/sui-command-menu-search/README.md +58 -4
  28. package/docs/sui-compact-avatar-group/README.md +61 -4
  29. package/docs/sui-compact-button/README.md +112 -28
  30. package/docs/sui-compact-select/README.md +58 -4
  31. package/docs/sui-compact-select-for-input/README.md +69 -5
  32. package/docs/sui-content-card/README.md +63 -2
  33. package/docs/sui-content-divider/README.md +49 -1
  34. package/docs/sui-content-label/README.md +83 -4
  35. package/docs/sui-counter-input/README.md +91 -7
  36. package/docs/sui-date-selector/README.md +61 -3
  37. package/docs/sui-datepicker/README.md +72 -5
  38. package/docs/sui-day-cell/README.md +60 -3
  39. package/docs/sui-day-label/README.md +52 -3
  40. package/docs/sui-divider/README.md +57 -5
  41. package/docs/sui-drawer-footer/README.md +63 -2
  42. package/docs/sui-drawer-header/README.md +60 -3
  43. package/docs/sui-dropdown-caption/README.md +53 -1
  44. package/docs/sui-dropdown-item/README.md +72 -6
  45. package/docs/sui-dropdown-menu/README.md +74 -5
  46. package/docs/sui-dropdown-search/README.md +57 -1
  47. package/docs/sui-emoji/README.md +82 -18
  48. package/docs/sui-empty-state/README.md +68 -4
  49. package/docs/sui-fancy-button/README.md +59 -1
  50. package/docs/sui-file-icon/README.md +56 -1
  51. package/docs/sui-file-upload/README.md +69 -9
  52. package/docs/sui-file-upload-card/README.md +53 -2
  53. package/docs/sui-filter/README.md +74 -5
  54. package/docs/sui-flag/README.md +62 -1
  55. package/docs/sui-form-hint/README.md +54 -5
  56. package/docs/sui-form-label/README.md +53 -1
  57. package/docs/sui-href/README.md +47 -0
  58. package/docs/sui-icon/README.md +69 -4
  59. package/docs/sui-image-upload/README.md +70 -3
  60. package/docs/sui-image-upload-profile/README.md +58 -0
  61. package/docs/sui-img-retry/README.md +49 -0
  62. package/docs/sui-inline-input/README.md +61 -3
  63. package/docs/sui-inline-select/README.md +60 -0
  64. package/docs/sui-input/README.md +77 -14
  65. package/docs/sui-integration-switch/README.md +69 -2
  66. package/docs/sui-kbd/README.md +71 -7
  67. package/docs/sui-key-icon/README.md +65 -6
  68. package/docs/sui-link-button/README.md +79 -13
  69. package/docs/sui-logo/README.md +74 -4
  70. package/docs/sui-modal/README.md +61 -2
  71. package/docs/sui-modal-footer/README.md +83 -9
  72. package/docs/sui-modal-header/README.md +56 -0
  73. package/docs/sui-modal-sheet/README.md +72 -10
  74. package/docs/sui-notification/README.md +71 -1
  75. package/docs/sui-notification-footer/README.md +51 -1
  76. package/docs/sui-notification-tab-menu/README.md +57 -1
  77. package/docs/sui-otp-input/README.md +67 -6
  78. package/docs/sui-page-header/README.md +83 -15
  79. package/docs/sui-pagination/README.md +60 -0
  80. package/docs/sui-password-strength/README.md +50 -1
  81. package/docs/sui-payment-icon/README.md +66 -7
  82. package/docs/sui-period-range/README.md +65 -6
  83. package/docs/sui-popover/README.md +73 -7
  84. package/docs/sui-product-card/README.md +76 -8
  85. package/docs/sui-progress-bar/README.md +72 -8
  86. package/docs/sui-progress-bar-label/README.md +69 -12
  87. package/docs/sui-radio/README.md +83 -6
  88. package/docs/sui-radio-card/README.md +58 -4
  89. package/docs/sui-radio-label/README.md +86 -19
  90. package/docs/sui-rating/README.md +81 -14
  91. package/docs/sui-rich-editor/README.md +45 -0
  92. package/docs/sui-segmented-control/README.md +83 -14
  93. package/docs/sui-select/README.md +72 -3
  94. package/docs/sui-sidebar/README.md +64 -9
  95. package/docs/sui-slider/README.md +68 -1
  96. package/docs/sui-social-button/README.md +63 -3
  97. package/docs/sui-status-badge/README.md +64 -6
  98. package/docs/sui-stepper/README.md +57 -0
  99. package/docs/sui-store-card/README.md +71 -8
  100. package/docs/sui-switch/README.md +80 -9
  101. package/docs/sui-switch-card/README.md +70 -6
  102. package/docs/sui-switch-label/README.md +90 -13
  103. package/docs/sui-tab-chips/README.md +79 -9
  104. package/docs/sui-tab-menu-horizontal/README.md +62 -1
  105. package/docs/sui-tab-menu-vertical/README.md +56 -3
  106. package/docs/sui-table/README.md +68 -7
  107. package/docs/sui-tag/README.md +75 -4
  108. package/docs/sui-tag-input/README.md +71 -7
  109. package/docs/sui-textarea/README.md +78 -11
  110. package/docs/sui-time-picker/README.md +70 -7
  111. package/docs/sui-toast/README.md +65 -5
  112. package/docs/sui-tooltip/README.md +61 -4
  113. package/docs/sui-topbar/README.md +57 -3
  114. package/docs/sui-topbar-button/README.md +57 -3
  115. package/docs/sui-topbar-item/README.md +61 -0
  116. package/docs/sui-topbar-user/README.md +56 -0
  117. package/package.json +1 -1
  118. package/types/ajuarezso-sui-design-system.d.ts +19 -19
@@ -84,9 +84,27 @@ es solo el texto: el `gap` entre pestañas no responde.
84
84
  | 4+ secciones | si no entran a 390 px, se salen sin poder deslizarse (las 4 del panel de repartidores, con sus números, ya no entran a 360): va `sui-tab-chips` | el mismo | según el código |
85
85
 
86
86
  ```html
87
- <sui-tab-menu-horizontal [tabs]="secciones" [(active)]="seccion" [size]="bp.isMobile() ? 'large' : 'medium'" />
87
+ <sui-tab-menu-horizontal [tabs]="secciones" [(active)]="seccion" [size]="bp.tactil() && !bp.celularChico() ? 'large' : 'medium'" />
88
88
  ```
89
89
 
90
+ ### Por dispositivo (D16)
91
+
92
+ Fila de `tab-menu-horizontal` en la tabla de D16 (dueño, 05-10-2026): se toca, pero su `medium`
93
+ ya mide 48 de alto, así que el celular chico no necesita subir.
94
+
95
+ | dispositivo | size | nota |
96
+ |---|---|---|
97
+ | celular chico (< 380 px) | `medium` (48) | ya mide 48: pasa el piso de 44 sin subir |
98
+ | celular (380–767 px) | `large` (52, texto 16) | |
99
+ | tablet táctil (`pointer: coarse`) | `large` (52) | se toca con el dedo, aunque mida más de 767 |
100
+ | computadora (`pointer: fine`) | `medium` (48) | `small` no se usa |
101
+
102
+ Ultrawide (≥ 1920 px): igual que la computadora, `medium`. `xlarge` no sale de ningún dispositivo.
103
+
104
+ En master-pedidos: `[size]="bp.tactil() && !bp.celularChico() ? 'large' : 'medium'"`. No hay
105
+ helper propio, y `bp.sizeControl()` no sirve aunque los valores coincidan: da `large` en el celular
106
+ chico.
107
+
90
108
  ## «No usar»: por qué no hoy y cuándo sí
91
109
 
92
110
  | qué | por qué no hoy | cuándo sí, en un flujo nuevo |
@@ -141,6 +159,49 @@ interface SuiTabMenuHorizontalItem<T = string> {
141
159
  - El ícono de la pestaña activa es `strong-950`, no naranja; en el tab menu vertical es naranja.
142
160
  Es a propósito.
143
161
 
162
+ ## Bien y mal
163
+
164
+ Pestañas del modal del local, que el cliente abre en el teléfono
165
+
166
+ ```html
167
+ <!-- ❌ mal: sin size queda en medium en el teléfono y la tablet (components/store-ratings-modal/store-ratings-modal.html:43) -->
168
+ <sui-tab-menu-horizontal [tabs]="tabs" [active]="tab()" (tabChange)="tab.set($any($event))" />
169
+ ```
170
+
171
+ ```html
172
+ <!-- ✅ bien -->
173
+ <sui-tab-menu-horizontal [tabs]="tabs" [(active)]="tab"
174
+ [size]="bp.tactil() && !bp.celularChico() ? 'large' : 'medium'" />
175
+ ```
176
+
177
+ Flecha en una pestaña
178
+
179
+ ```html
180
+ <!-- ❌ mal: rightIcon dice «te lleva a otra pantalla» y una pestaña no navega -->
181
+ <sui-tab-menu-horizontal [(active)]="tab"
182
+ [tabs]="[{ value: 'opiniones', label: 'Opiniones', rightIcon: true }, { value: 'info', label: 'Información' }]" />
183
+ ```
184
+
185
+ ```html
186
+ <!-- ✅ bien -->
187
+ <sui-tab-menu-horizontal [(active)]="tab"
188
+ [tabs]="[{ value: 'opiniones', label: 'Opiniones' }, { value: 'info', label: 'Información' }]" />
189
+ ```
190
+
191
+ Un total neutro en el círculo rojo
192
+
193
+ ```html
194
+ <!-- ❌ mal: number es para pendientes que piden acción, no para cuántos repartidores hay -->
195
+ <sui-tab-menu-horizontal [(active)]="tab"
196
+ [tabs]="[{ value: 'activos', label: 'Activos', number: 42 }, { value: 'solicitudes', label: 'Solicitudes' }]" />
197
+ ```
198
+
199
+ ```html
200
+ <!-- ✅ bien -->
201
+ <sui-tab-menu-horizontal [(active)]="tab"
202
+ [tabs]="[{ value: 'activos', label: 'Activos' }, { value: 'solicitudes', label: 'Solicitudes', number: 3 }]" />
203
+ ```
204
+
144
205
  ## Ejemplo
145
206
 
146
207
  ```html
@@ -17,8 +17,9 @@ de pago · Repartidores»), el perfil del super admin.
17
17
 
18
18
  **No lo uses** para:
19
19
 
20
- - **Mobile**: el ítem mide 36 px y ocupa el ancho de la pantalla dejando el contenido debajo. En
21
- mobile cada sección es una fila de una lista que abre su propia pantalla.
20
+ - **Mobile y tablet táctil**: el ítem mide 36 px y no llega a los 44 del dedo; en el celular,
21
+ además, ocupa el ancho de la pantalla dejando el contenido debajo. Ahí cada sección es una fila
22
+ de una lista que abre su propia pantalla.
22
23
  - La navegación de toda la app: `sui-sidebar`.
23
24
  - 2 a 4 secciones arriba del contenido: `sui-tab-menu-horizontal`.
24
25
  - Filtros de una lista: `sui-tab-chips`.
@@ -71,11 +72,19 @@ Usos de hoy que rompen las reglas: **0** (no se usa).
71
72
  | secciones de ajustes | no se usa: lista de filas que abren pantalla | `tab-menu-vertical` | «no se usa en mobile»: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono — el ítem mide 36 y no tiene `size` · la lista de filas en mobile y el uso en web: canon (aprobado por el dueño, 05-10-2026, bloque B7) |
72
73
 
73
74
  ```html
74
- @if (!bp.isMobile()) {
75
+ @if (!bp.tactil()) {
75
76
  <sui-tab-menu-vertical [tabs]="secciones" [(active)]="seccion" menuStyle="card" />
76
77
  }
77
78
  ```
78
79
 
80
+ ### Por dispositivo (D16)
81
+
82
+ No tiene `size` (ítem único de 36, sin eje de tamaño en Figma): no hay tabla por dispositivo. Como
83
+ se toca y no llega a 44, la regla general de D16 lo deja fuera de todo lo táctil: celular (chico o
84
+ no) y tablet táctil van con la lista de filas que abren pantalla (B7); computadora y ultrawide, el
85
+ menú tal cual. Fuente: D16, dueño 05-10-2026 (columna «lo que se toca»). En master-pedidos:
86
+ `@if (!bp.tactil()) { <sui-tab-menu-vertical … /> }`.
87
+
79
88
  ## «No usar»: por qué no hoy y cuándo sí
80
89
 
81
90
  | qué | por qué no hoy | cuándo sí, en un flujo nuevo |
@@ -128,6 +137,50 @@ type SuiTabMenuVerticalStyle = 'card' | 'list';
128
137
  - `role="tablist"`: si cada ítem navega a una ruta, el lector de pantalla lo anuncia mal; para
129
138
  navegación entre rutas, `sui-sidebar`.
130
139
 
140
+ ## Bien y mal
141
+
142
+ Menú en el celular
143
+
144
+ ```html
145
+ <!-- ❌ mal: en el celular y la tablet táctil el ítem mide 36 (no llega a 44), y en el celular el contenido queda debajo -->
146
+ <sui-tab-menu-vertical [tabs]="secciones" [(active)]="seccion" />
147
+ ```
148
+
149
+ ```html
150
+ <!-- ✅ bien: en el celular y la tablet táctil, cada sección es una fila que abre su pantalla -->
151
+ @if (!bp.tactil()) {
152
+ <sui-tab-menu-vertical [tabs]="secciones" [(active)]="seccion" />
153
+ }
154
+ ```
155
+
156
+ Ítem activo al entrar
157
+
158
+ ```html
159
+ <!-- ❌ mal: sin active no se marca ningún ítem -->
160
+ <sui-tab-menu-vertical [tabs]="secciones" (tabChange)="mostrar($event)" />
161
+ ```
162
+
163
+ ```html
164
+ <!-- ✅ bien: seccion arranca en la primera sección ('datos') -->
165
+ <sui-tab-menu-vertical [tabs]="secciones" [(active)]="seccion" />
166
+ ```
167
+
168
+ Menú dentro de una card
169
+
170
+ ```html
171
+ <!-- ❌ mal: card dentro de una card, borde y sombra dobles -->
172
+ <sui-card>
173
+ <sui-tab-menu-vertical [tabs]="secciones" [(active)]="seccion" menuStyle="card" />
174
+ </sui-card>
175
+ ```
176
+
177
+ ```html
178
+ <!-- ✅ bien: la columna ya tiene fondo y borde, el menú va plano -->
179
+ <sui-card>
180
+ <sui-tab-menu-vertical [tabs]="secciones" [(active)]="seccion" menuStyle="list" />
181
+ </sui-card>
182
+ ```
183
+
131
184
  ## Ejemplo
132
185
 
133
186
  ```html
@@ -72,8 +72,8 @@ Dentro va un componente SUI, no HTML a mano:
72
72
 
73
73
  | contenido | componente | fuente |
74
74
  |---|---|---|
75
- | estado o categoría | `<sui-badge variant="lighter" size="medium">` | canon (dueño, 05-10-2026, D16); CANON-SUI §0 («Chip de estado») todavía dice `small`: hay que actualizarlo en master-pedidos |
76
- | acciones de la fila | `<sui-button variant="ghost" color="neutral" size="medium" [onlyIcon]="true">` | canon (dueño, 05-10-2026, D16) (README de `sui-button`: en una tabla, `medium`; antes `2xsmall`) |
75
+ | estado o categoría | `<sui-badge variant="lighter" [size]="bp.sizeBadge()">` (`medium` en la computadora, `large` en el celular) | D16, dueño 05-10-2026; CANON-SUI §0 («Chip de estado») todavía dice `small`: hay que actualizarlo en master-pedidos |
76
+ | acciones de la fila | `<sui-button variant="ghost" color="neutral" [size]="bp.sizeControl()" [onlyIcon]="true">` (`medium` en la computadora, `large` donde se toca) | D16, dueño 05-10-2026 (README de `sui-button`: en una tabla, `medium` en la computadora; antes `2xsmall`) |
77
77
  | prender/apagar | `<sui-switch>` | propuesta, falta aprobación |
78
78
  | calificación | `<sui-rating>` de solo lectura | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
79
79
 
@@ -118,11 +118,11 @@ secundaria dentro de un tablero) y 6 sin `size` (o sea `medium`).
118
118
  | uso | mobile | web | fuente |
119
119
  |---|---|---|---|
120
120
  | tabla principal de una pantalla | `medium` | `medium` | práctica de la app |
121
- | tabla secundaria dentro de un tablero | `small` | `small` | práctica de la app (1 uso) |
121
+ | tabla secundaria dentro de un tablero | `medium` | `medium` | D16, dueño 05-10-2026 (antes `small`, práctica de la app: `master-overview.html:126`) |
122
122
  | filas con dos líneas y un badge | `medium` | `medium` | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
123
123
 
124
- El patrón `[size]="bp.isMobile() ? 'large' : 'medium'"` de los botones **no aplica aquí**: la fila
125
- ya mide 64 y el toque es sobre toda la fila. `large`/`xlarge` no tienen uso hoy.
124
+ El patrón por dispositivo de los botones (`bp.sizeControl()`) **no aplica al `size` de la tabla**:
125
+ la fila ya mide 64 y el toque es sobre toda la fila. `large`/`xlarge` no tienen uso hoy.
126
126
 
127
127
  **Qué pasa en mobile (≤ 767 px):** la tabla scrollea en horizontal dentro de sí misma; la
128
128
  cabecera y el cuerpo miden lo mismo y la barra de scroll se oculta. En la app conviven dos
@@ -140,6 +140,19 @@ solo en Android**: pone `touch-action: pan-x` por JS para que el scroll horizont
140
140
  y mueve él mismo la página con el gesto vertical (con inercia). En iOS no hace nada: WebKit delega
141
141
  el vertical solo. Por eso la página **no** agrega `touch-action` ni un wrapper con `overflow-x`.
142
142
 
143
+ ### Por dispositivo (D16)
144
+
145
+ El `size` de la tabla no depende del dispositivo: cambia el alto de la fila (48 a 96), no el área
146
+ que se toca, y la fila entera ya pasa los 44 del dedo. Va `medium` (el default) en el celular
147
+ chico, el celular, la tablet táctil, la computadora y el ultrawide; por eso no hay tabla de D16.
148
+ Lo que sí sigue a D16 es lo que va **dentro** de las celdas: el badge como lo que no se toca y el
149
+ botón de acción como lo que se toca. Fuente: D16, dueño 05-10-2026.
150
+
151
+ En master-pedidos: `<sui-table>` sin `size`, y en las plantillas `[size]="bp.sizeBadge()"` (badge)
152
+ y `[size]="bp.sizeControl()"` (botón). Las tablas de la app que tienen badge o botón en una celda
153
+ ya llevan esos helpers; la que queda fuera es `master-overview.html:126`, que pasa `size="small"` a
154
+ la tabla.
155
+
143
156
  ## Pista de scroll (canon, aprobado por el dueño el 05-10-2026)
144
157
 
145
158
  Desde la **0.24.0**. Cuando la tabla scrollea en horizontal (≤ 767 px, o con una columna `sticky`)
@@ -256,6 +269,54 @@ trabajo de la página.
256
269
  - **El degradado de la pista es `bg-white-0`**, el fondo de la propia tabla. Si la tabla vive
257
270
  sobre otro fondo (no es el caso hoy), se pisa `--sui-pista-de-scroll-fondo` en un contenedor.
258
271
 
272
+ ## Bien y mal
273
+
274
+ Segunda línea en la columna principal
275
+
276
+ ```html
277
+ <!-- ❌ mal: la columna tiene descriptionKey, pero con plantilla la segunda línea no sale (central-gastos.html:49, central-gastos.ts:83) -->
278
+ <ng-template suiTableCell="concepto" let-row>
279
+ <span class="cg__concepto">{{ row.concepto }}</span>
280
+ </ng-template>
281
+ ```
282
+
283
+ ```html
284
+ <!-- ✅ bien: sin plantilla en 'concepto'; leading + descriptionKey pintan las dos líneas (como orders.html:94) -->
285
+ <sui-table [columns]="columnas" [rows]="filas()" emptyMessage="No hay gastos registrados este mes." />
286
+ ```
287
+
288
+ Columnas que no entran
289
+
290
+ ```html
291
+ <!-- ❌ mal: wrapper con overflow-x desde la página (drivers.html:212, drivers.scss:111) -->
292
+ <div class="drivers__table-wrap">
293
+ <sui-table [columns]="tableColumns" [rows]="filteredDrivers()" rowKey="id" />
294
+ </div>
295
+ ```
296
+
297
+ ```html
298
+ <!-- ✅ bien: las columnas entran en el ancho real; con 6+ columnas, tarjetas por debajo de 1350 px -->
299
+ <sui-table [columns]="tableColumns" [rows]="filteredDrivers()" rowKey="id" />
300
+ ```
301
+
302
+ Botón dentro de una fila que abre el detalle
303
+
304
+ ```html
305
+ <!-- ❌ mal: el clic edita y además abre el detalle por rowClicked -->
306
+ <ng-template suiTableCell="acciones" let-row>
307
+ <sui-button variant="ghost" color="neutral" [size]="bp.sizeControl()" [onlyIcon]="true"
308
+ leftIcon="pencil-line" aria-label="Editar" (click)="editar(row)" />
309
+ </ng-template>
310
+ ```
311
+
312
+ ```html
313
+ <!-- ✅ bien -->
314
+ <ng-template suiTableCell="acciones" let-row>
315
+ <sui-button variant="ghost" color="neutral" [size]="bp.sizeControl()" [onlyIcon]="true"
316
+ leftIcon="pencil-line" aria-label="Editar" (click)="$event.stopPropagation(); editar(row)" />
317
+ </ng-template>
318
+ ```
319
+
259
320
  ## Ejemplo
260
321
 
261
322
  ```html
@@ -268,12 +329,12 @@ trabajo de la página.
268
329
  emptyMessage="Sin pedidos en este estado."
269
330
  (rowClicked)="abrirDetalle($event)">
270
331
  <ng-template suiTableCell="estado" let-row>
271
- <sui-badge [color]="row.color" variant="lighter" size="medium">{{ row.estadoLabel }}</sui-badge>
332
+ <sui-badge [color]="row.color" variant="lighter" [size]="bp.sizeBadge()">{{ row.estadoLabel }}</sui-badge>
272
333
  </ng-template>
273
334
  </sui-table>
274
335
 
275
336
  @if (hayMas()) {
276
- <sui-button variant="stroke" color="neutral" [size]="bp.isMobile() ? 'large' : 'medium'"
337
+ <sui-button variant="stroke" color="neutral" [size]="bp.sizeControl()"
277
338
  [disabled]="cargandoMas()" (click)="cargarMas()">Cargar más</sui-button>
278
339
  }
279
340
  </sui-card>
@@ -72,8 +72,9 @@ Criterio de la app: **D16, tamaño por dispositivo** (canon, dueño, 05-10-2026)
72
72
  380 px o más y, en lo que se toca, también la tablet (`pointer: coarse`). La columna «web» es la
73
73
  computadora (`pointer: fine`) y, en lo que no se toca, también la tablet. En el celular chico
74
74
  (< 380 px) va `medium` a la vista, sin achicar el área de 44 de lo que se toca. **Nada en `small` ni
75
- `xsmall`**, salvo lo que el componente solo tiene en chico. Hoy la app corta con
76
- `BreakpointsService.isMobile()` (≤ 767 px), que todavía no mira el puntero ni los 380 px.
75
+ `xsmall`**, salvo lo que el componente solo tiene en chico. `BreakpointsService` ya mira el puntero
76
+ y los 380 px (`bp.toque()`, `bp.celularChico()`, `bp.celular()`, `bp.tactil()`), pero no tiene un
77
+ helper para el tag: se usa la expresión de «Por dispositivo (D16)».
77
78
 
78
79
  | size | alto | texto | leading | X de quitar (área táctil) |
79
80
  |---|---|---|---|---|
@@ -97,17 +98,42 @@ máximo se sigue cortando, y la X queda siempre visible.
97
98
 
98
99
  | uso | mobile | web | fuente |
99
100
  |---|---|---|---|
100
- | Tag con X (filtro aplicado, elegido que se quita) | `xlarge` (40) | `medium` (24) | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono — solo la X de `xlarge` llega a 44 · web: canon (dueño, 05-10-2026, D16) (`medium` es el más chico que tiene) |
101
+ | Tag con X (filtro aplicado, elegido que se quita) | `xlarge` (40) | `medium` (24) | mobile: canon (dueño, 04-10-2026): piso táctil 44 en el teléfono — solo la X de `xlarge` llega a 44 (en la tablet de más de 767 px, 40: ver «Por dispositivo») · web: canon (dueño, 05-10-2026, D16) (`medium` es el más chico que tiene) |
101
102
  | Tag de solo lectura (sin X) | `large` (32) | `medium` (24) | canon (dueño, 05-10-2026, P1 b); el tamaño es extensión SUI aprobada (03-10-2026) |
102
103
  | Separación entre tags | 8 px | 4–6 px | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
103
104
 
104
105
  ```html
105
- <sui-tag [size]="bp.isMobile() ? 'xlarge' : 'medium'" [dismissible]="true" (dismiss)="quitar(f)">{{ f.nombre }}</sui-tag>
106
+ <sui-tag [size]="bp.tactil() ? 'xlarge' : 'medium'" [dismissible]="true" (dismiss)="quitar(f)">{{ f.nombre }}</sui-tag>
106
107
  ```
107
108
 
108
109
  El leading proyectado (ícono, avatar, bandera) se escala solo a la caja de 20 en los grandes; un
109
110
  `<i class="ri-…">` necesita además su `font-size` en 20.
110
111
 
112
+ ### Por dispositivo (D16)
113
+
114
+ Fila `tag` de la tabla D16 (dueño, 05-10-2026). El tag con X se toca (la X); el de solo lectura no:
115
+
116
+ | dispositivo | size | nota |
117
+ |---|---|---|
118
+ | celular chico (< 380) | con X `xlarge` · solo lectura `medium` | la X solo llega a 44 en `xlarge` (el área de 44 se prende con `max-width: 767px`) |
119
+ | celular (380–767) | con X `xlarge` · solo lectura `large` | lo que no se toca sube un paso en el celular (P1 b) |
120
+ | tablet táctil (`pointer: coarse`) | con X `xlarge` · solo lectura `medium` | la X se toca con el dedo (Apple pide 44 también en el iPad), pero en la tablet de más de 767 px hoy se toca en **40×40**, no en 44: ver abajo |
121
+ | computadora (`pointer: fine`) | `medium` | `medium` es el más chico que tiene |
122
+
123
+ Ultrawide (≥ 1920 px): igual que la computadora, `medium`.
124
+
125
+ **La X en la tablet queda en 40×40.** El área de 44 de la X de `xlarge` se prende con
126
+ `@media (max-width: 767px)` (`sui-tag.scss`, `inset` −10); en una tablet de más de 767 px de ancho
127
+ (casi todos los iPad, y cualquiera en horizontal) la X se toca en 40×40 (`inset` −8). `xlarge`
128
+ sigue siendo lo correcto en la tablet (es el más grande que tiene); llega a 44 cuando el DS cambie
129
+ ese media query por el mixin `sui-tactil` (`max-width: 767px` o `pointer: coarse`), que está
130
+ propuesto en el doc de D16 y todavía no se hizo.
131
+
132
+ En master-pedidos (no hay helper para el tag):
133
+
134
+ - con X: `[size]="bp.tactil() ? 'xlarge' : 'medium'"`
135
+ - solo lectura: `[size]="bp.celular() ? 'large' : 'medium'"`
136
+
111
137
  ## API
112
138
 
113
139
  <!-- api:inicio -->
@@ -146,6 +172,51 @@ Slots: `[data-slot=start]` (avatar, logo, bandera o ícono de 16 px) y `<ng-cont
146
172
  - `sui-avatar` no tiene 16 px: el `xs` (20) se escala por CSS dentro del slot.
147
173
  - Radio de 6 px, 24 px de alto en `medium`, sin mayúsculas: no es un badge (radio completo).
148
174
 
175
+ ## Bien y mal
176
+
177
+ Dato de solo lectura
178
+
179
+ ```html
180
+ <!-- ❌ mal: solo se lee y no lleva nada a la izquierda, eso es un badge -->
181
+ <sui-tag tagStyle="gray" sublabel="3 días">Frecuencia</sui-tag>
182
+ ```
183
+
184
+ ```html
185
+ <!-- ✅ bien -->
186
+ <sui-badge color="gray" [size]="bp.sizeBadge()">Frecuencia: 3 días</sui-badge>
187
+ ```
188
+
189
+ Filtro aplicado que se quita
190
+
191
+ ```html
192
+ <!-- ❌ mal: sin size la X mide 16 en el celular, y el lector de pantalla solo oye «Quitar» -->
193
+ <sui-tag [dismissible]="true" (dismiss)="quitarFiltro('abierto')">Abierto ahora</sui-tag>
194
+ ```
195
+
196
+ ```html
197
+ <!-- ✅ bien -->
198
+ <sui-tag [size]="bp.tactil() ? 'xlarge' : 'medium'" [dismissible]="true"
199
+ dismissLabel="Quitar Abierto ahora" (dismiss)="quitarFiltro('abierto')">Abierto ahora</sui-tag>
200
+ ```
201
+
202
+ Logo a la izquierda
203
+
204
+ ```html
205
+ <!-- ❌ mal: con algo en [data-slot=start] y sin [leading]="true", el padding queda mal -->
206
+ <sui-tag [size]="bp.celular() ? 'large' : 'medium'">
207
+ <sui-avatar data-slot="start" size="xs" [src]="local.imageUrl" [initials]="'B'" />
208
+ Burger House
209
+ </sui-tag>
210
+ ```
211
+
212
+ ```html
213
+ <!-- ✅ bien -->
214
+ <sui-tag [size]="bp.celular() ? 'large' : 'medium'" [leading]="true">
215
+ <sui-avatar data-slot="start" size="xs" [src]="local.imageUrl" [initials]="'B'" />
216
+ Burger House
217
+ </sui-tag>
218
+ ```
219
+
149
220
  ## Ejemplo
150
221
 
151
222
  ```html
@@ -28,9 +28,10 @@ Regla corta: **varios valores libres → tag-input · varias opciones fijas →
28
28
  > **En la guía del DS es un ejemplo de su página del input** («With Tags»: un campo con los chips
29
29
  > Berlin, London, Paris debajo). No dice cuándo usarlo.
30
30
  >
31
- > Uso medido el 04-10-2026 en `master-pedidos/src/app`: **0 usos**. Candidato: «Rubros que entran»
32
- > en `pages/super-admin/master-settings/master-settings.html:136`, un `sui-input` donde se escriben
33
- > palabras separadas por coma («ferreteria, ferretería, construcción») y la pantalla las parte a mano.
31
+ > Uso medido el 06-10-2026 en `master-pedidos/src/app`: **1 uso**, «Rubros que entran» de una
32
+ > categoría propia del home (`pages/super-admin/master-categorias/master-categorias.html:179`), con
33
+ > `commaSeparator` y `addOnBlur`. Antes eran palabras separadas por coma en un `sui-input` que la
34
+ > pantalla partía a mano.
34
35
 
35
36
  | prop / evento | cuándo | fuente |
36
37
  |---|---|---|
@@ -65,17 +66,38 @@ en web; el alto sigue en 48/52.
65
66
 
66
67
  | uso | mobile | web | fuente |
67
68
  |---|---|---|---|
68
- | campo de formulario | `xlarge` (52, chips de 40 con X tocable en 44) | `medium` (40) | canon (dueño, 04-10-2026): piso táctil 44 en el teléfono (el 44 lo da la X del chip `xlarge`) |
69
+ | campo de formulario | `large` (48, chips de 32 con X tocable en 32) | `medium` (40) | D16, dueño 05-10-2026 (fila `input`/`tag-input`); reemplaza el `xlarge` del 04-10-2026 · la X de 32 no llega a 44: ver «Por dispositivo» |
69
70
 
70
71
  ```html
71
- <sui-tag-input [size]="bp.isMobile() ? 'xlarge' : 'medium'" … /> <!-- bp = BreakpointsService -->
72
+ <sui-tag-input [size]="bp.sizeControl()" … /> <!-- bp = BreakpointsService -->
72
73
  ```
73
74
 
75
+ ### Por dispositivo (D16)
76
+
77
+ Fila `input`/`tag-input` de la tabla D16 (dueño, 05-10-2026). Se toca, así que va por tipo de
78
+ puntero además del ancho:
79
+
80
+ | dispositivo | size | nota |
81
+ |---|---|---|
82
+ | celular chico (< 380) | `large` (48) | D16 pide `medium` con área tocable de 44; mientras el DS no estire el área de los `medium`, va `large` (interino) |
83
+ | celular (380–767) | `large` (48) | los chips salen en `large`: la X mide 20 con área de 32, no llega a 44 |
84
+ | tablet táctil (`pointer: coarse`) | `large` (48) | igual que el celular |
85
+ | computadora (`pointer: fine`) | `medium` (40) | también en filtros del panel; `xsmall` y `small` no se usan |
86
+
87
+ Ultrawide (≥ 1920 px): igual que la computadora, `medium`.
88
+
89
+ **Choque entre dos filas de D16 (a confirmar con el dueño):** con el campo en `large` la X del
90
+ chip queda en 32, y la fila `tag` dice que la X solo llega a 44 en `xlarge`. Hasta el 04-10-2026 el
91
+ campo iba `xlarge` en el teléfono justo por eso. Mientras no se diga otra cosa, manda la fila
92
+ `tag-input` (`large`).
93
+
94
+ En master-pedidos: `[size]="bp.sizeControl()"`.
95
+
74
96
  ## «No usar»: por qué no hoy y cuándo sí
75
97
 
76
98
  | qué | por qué no hoy | cuándo sí, en un flujo nuevo |
77
99
  |---|---|---|
78
- | el componente entero (0 usos) | nadie carga listas de palabras | «Rubros que entran» de una categoría del home (`master-settings.html:136`), o sinónimos de un producto para el buscador |
100
+ | otros usos (hoy solo los rubros de una categoría) | nadie más carga listas de palabras | sinónimos de un producto para el buscador |
79
101
  | `rightIcon` | el hint explica mejor | — |
80
102
  | `maxTags` | no hay topes | un máximo de 5 palabras clave por producto |
81
103
  | `allowDuplicates` | repetir no sirve | — |
@@ -124,10 +146,52 @@ no es parte del valor. Slot `[slot=right]` para un contenido propio a la derecha
124
146
  - **Accesibilidad (04-10-2026)**: el control trae su `id`; el `label` interno apunta a él con `for`,
125
147
  el hint o el error se enlazan con `aria-describedby` y `error` pone `aria-invalid`.
126
148
 
127
- ## Ejemplo
149
+ ## Bien y mal
150
+
151
+ Tamaño en el celular
152
+
153
+ ```html
154
+ <!-- ❌ mal: sin size queda en medium en el celular y la X de los chips mide 16 (master-categorias.html:179) -->
155
+ <sui-tag-input label="Rubros que entran" [commaSeparator]="true" [addOnBlur]="true"
156
+ [value]="e.match" (valueChange)="editar('match', $event)" />
157
+ ```
158
+
159
+ ```html
160
+ <!-- ✅ bien -->
161
+ <sui-tag-input [size]="bp.sizeControl()" label="Rubros que entran" [commaSeparator]="true"
162
+ [addOnBlur]="true" [value]="e.match" (valueChange)="editar('match', $event)" />
163
+ ```
164
+
165
+ Placeholder y hint
128
166
 
129
167
  ```html
168
+ <!-- ❌ mal: el placeholder dice cómo se agrega, no qué se agrega (master-categorias.html:179) -->
169
+ <sui-tag-input label="Rubros que entran" placeholder="Escribe y pulsa coma"
170
+ hint="Un local entra si su rubro contiene alguna de estas palabras" />
171
+ ```
172
+
173
+ ```html
174
+ <!-- ✅ bien: el placeholder dice qué; el hint, cómo -->
130
175
  <sui-tag-input label="Rubros que entran" placeholder="Agrega una palabra…"
176
+ hint="Separa con coma. Un local entra si su rubro contiene alguna" />
177
+ ```
178
+
179
+ Salir del campo sin Enter
180
+
181
+ ```html
182
+ <!-- ❌ mal: sin addOnBlur, lo escrito y no confirmado se pierde al salir -->
183
+ <sui-tag-input label="Sinónimos" [commaSeparator]="true" [(value)]="sinonimos" />
184
+ ```
185
+
186
+ ```html
187
+ <!-- ✅ bien -->
188
+ <sui-tag-input label="Sinónimos" [commaSeparator]="true" [addOnBlur]="true" [(value)]="sinonimos" />
189
+ ```
190
+
191
+ ## Ejemplo
192
+
193
+ ```html
194
+ <sui-tag-input [size]="bp.sizeControl()" label="Rubros que entran" placeholder="Agrega una palabra…"
131
195
  hint="Un local entra si su rubro contiene alguna" [commaSeparator]="true"
132
196
  [addOnBlur]="true" [(value)]="rubros" />
133
197
  ```
@@ -18,8 +18,8 @@ comentario al calificar.
18
18
  **No lo uses** para:
19
19
 
20
20
  - Un dato de una línea (nombre, referencia corta, URL, un slug): `sui-input`. Hoy hay 4 así:
21
- «Personaliza tu url» en `pages/mi-negocio/mi-negocio.html:713` (a propósito, para que envuelva en
22
- mobile, según su comentario) y 3 URL de imagen: `pages/mi-negocio/mi-negocio.html:534`, `:588` y
21
+ «Personaliza tu url» en `pages/mi-negocio/mi-negocio.html:714` (a propósito, para que envuelva en
22
+ mobile, según su comentario) y 3 URL de imagen: `pages/mi-negocio/mi-negocio.html:533`, `:588` y
23
23
  `components/add-product-modal/add-product-modal.html:72`.
24
24
  - Un motivo que se puede elegir de una lista cerrada: radios o `sui-select`, y la opción «Otro»
25
25
  abre el textarea (como ya hace `pages/envios/envios.html:822`, con `[maxLength]="200"`; el
@@ -50,7 +50,7 @@ Regla corta: **se redacta y puede pasar de una línea → textarea · una línea
50
50
  | `maxLength` | **Siempre que otro lo va a leer** (cliente, repartidor, local) o se guarda en la base: muestra «n/200» y corta el exceso. 200 para motivos y notas; 500 para descripciones. | según la guía del DS (su ejemplo principal lleva contador); los topes: canon (aprobado por el dueño, 05-10-2026, bloque B9) |
51
51
  | `size` | El mismo de los inputs del formulario: `large` en mobile, `medium` en web. Ver «Tamaño en mobile y en web». | canon (aprobado por el dueño, 03-10-2026), extensión SUI; el «cuándo»: canon (aprobado por el dueño, 05-10-2026, bloque B1) |
52
52
  | `rows` | `3` para motivos y notas (el default del componente es `4`). `2` para una nota corta en un formulario largo. `4` o más solo para una descripción larga. | canon (aprobado por el dueño, 05-10-2026, bloque B9) |
53
- | `resizable` | `true` en web. En mobile **`false`**: la manija no se puede arrastrar con el dedo y parece un adorno. | según la guía del DS (versión con y sin manija); el «cuándo»: canon (aprobado por el dueño, 05-10-2026, bloque B8) |
53
+ | `resizable` | `true` en web. En mobile y en la tablet táctil **`false`** (`!bp.tactil()`, D16): la manija no se puede arrastrar con el dedo y parece un adorno. | según la guía del DS (versión con y sin manija); el «cuándo»: canon (aprobado por el dueño, 05-10-2026, bloque B8) |
54
54
  | `readonly` | Mostrar un texto ya enviado con la misma forma del campo (copiar un mensaje). | canon (aprobado por el dueño, 05-10-2026, bloque B8) |
55
55
  | `disabled` | Mientras se envía. | según la guía del DS |
56
56
  | `autocomplete` | No hace falta: ningún texto libre se autocompleta. | canon (aprobado por el dueño, 05-10-2026, bloque B6) |
@@ -61,9 +61,12 @@ Regla corta: **se redacta y puede pasar de una línea → textarea · una línea
61
61
 
62
62
  - **7 sin `maxLength`**: 4 son las URL de una línea de arriba y 1 es de solo lectura
63
63
  (`components/copy-text-dialog/copy-text-dialog.html:9`); quedan 2 «Notas» que se guardan en la base:
64
- `pages/super-admin/super-admin.html:334`, `pages/super-admin/master-gastos/master-gastos.html:228`.
65
- - **Ninguno lleva `size`**: los 50 quedan en `medium` también en el teléfono, aunque los inputs del
66
- mismo formulario ya vayan en `large`.
64
+ `pages/super-admin/super-admin.html:339`, `pages/super-admin/master-gastos/master-gastos.html:235`.
65
+ - **`size` ya cumple** (medido de nuevo el 06-10-2026, tras la migración a D16): los 51 usos de la
66
+ app (sin vitrinas) van con `bp.sizeControl()`.
67
+ - **49 de 51 sin `resizable`**: la manija sale también en el celular y la tablet, donde no se puede
68
+ arrastrar con el dedo (p. ej. «Nota para el repartidor», `pages/envios/envios.html:422`). Solo
69
+ `copy-text-dialog.html:9` y `mi-negocio.html:714` la apagan, y fijo, también en la computadora.
67
70
 
68
71
  ## Tamaño en mobile y en web
69
72
 
@@ -90,14 +93,34 @@ también en web, así que cada fila mide 24 en las dos plataformas.
90
93
 
91
94
  | uso | mobile | web | fuente |
92
95
  |---|---|---|---|
93
- | motivo, nota | el `size` del formulario (`large` si los inputs van en `large`), `rows=3`, `[resizable]="false"` | `medium`, `rows=3`, manija | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
96
+ | motivo, nota | el `size` del formulario (`large` si los inputs van en `large`), `rows=3`, sin manija | `medium`, `rows=3`, manija | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
94
97
  | descripción larga | igual, `rows=4` | `medium`, `rows=4` | canon (aprobado por el dueño, 05-10-2026, bloque B1) |
95
98
 
99
+ «Mobile» aquí incluye la tablet táctil (D16): la manija se apaga con `[resizable]="!bp.tactil()"`,
100
+ no con `[resizable]="false"` ni por ancho, para que tampoco salga en una tablet ancha.
101
+
96
102
  ```html
97
- <sui-textarea [size]="bp.isMobile() ? 'large' : 'medium'" [rows]="3"
98
- [resizable]="!bp.isMobile()" … /> <!-- bp = BreakpointsService -->
103
+ <sui-textarea [size]="bp.sizeControl()" [rows]="3"
104
+ [resizable]="!bp.tactil()" … /> <!-- bp = BreakpointsService -->
99
105
  ```
100
106
 
107
+ ### Por dispositivo (D16)
108
+
109
+ Fila `textarea` de la tabla D16 (dueño, 05-10-2026), la misma de `sui-input`: se toca, así que va
110
+ por tipo de puntero además del ancho, y mide lo mismo que los campos y el botón del formulario.
111
+
112
+ | dispositivo | size | nota |
113
+ |---|---|---|
114
+ | celular chico (< 380 px) | `large` | D16 pide `medium` con área tocable de 44; mientras el DS no estire el área de los `medium`, va `large` (interino). Sin manija |
115
+ | celular (380–767 px) | `large` | el mismo padding que el `sui-input` `large` de arriba. Sin manija |
116
+ | tablet táctil (`pointer: coarse`) | `large` | también se toca con el dedo: `large` y sin manija, igual que el celular |
117
+ | computadora (`pointer: fine`) | `medium` | con manija; `small` y `xsmall` no se usan |
118
+
119
+ Ultrawide (≥ 1920 px): igual que la computadora, `medium`; el espacio extra va al ancho del
120
+ formulario, no a un campo más alto. El alto lo siguen poniendo las `rows` en todos los dispositivos.
121
+
122
+ En master-pedidos: `[size]="bp.sizeControl()"` + `[resizable]="!bp.tactil()"`.
123
+
101
124
  ## «No usar»: por qué no hoy y cuándo sí
102
125
 
103
126
  | qué | por qué no hoy | cuándo sí, en un flujo nuevo |
@@ -147,12 +170,56 @@ Outputs: ninguno.
147
170
  - **Accesibilidad (04-10-2026)**: el control trae su `id`; el `label` interno apunta a él con `for`,
148
171
  el hint o el error se enlazan con `aria-describedby` y `error` pone `aria-invalid`.
149
172
 
173
+ ## Bien y mal
174
+
175
+ URL de una imagen
176
+
177
+ ```html
178
+ <!-- ❌ mal: una URL es un dato de una línea, y sin maxLength (pages/mi-negocio/mi-negocio.html:533, components/add-product-modal/add-product-modal.html:72) -->
179
+ <sui-textarea [size]="bp.sizeControl()" [rows]="2" placeholder="https://ejemplo.com/logo.png"
180
+ [value]="logoUrlInput()" (valueChange)="logoUrlInput.set($event)" />
181
+ ```
182
+
183
+ ```html
184
+ <!-- ✅ bien -->
185
+ <sui-input type="url" [size]="bp.sizeControl()" placeholder="https://ejemplo.com/logo.png"
186
+ [value]="logoUrlInput()" (valueChange)="logoUrlInput.set($event)" />
187
+ ```
188
+
189
+ Nota que se guarda en la base
190
+
191
+ ```html
192
+ <!-- ❌ mal: sin maxLength no hay contador ni tope, y la nota se guarda (pages/super-admin/super-admin.html:339) -->
193
+ <sui-textarea [size]="bp.sizeControl()" label="Notas" sublabel="(Opcional)" [rows]="3"
194
+ [ngModel]="subNotes()" (ngModelChange)="subNotes.set($event)" />
195
+ ```
196
+
197
+ ```html
198
+ <!-- ✅ bien -->
199
+ <sui-textarea [size]="bp.sizeControl()" label="Notas" sublabel="(Opcional)" [rows]="3" [maxLength]="200"
200
+ [resizable]="!bp.tactil()" [ngModel]="subNotes()" (ngModelChange)="subNotes.set($event)" />
201
+ ```
202
+
203
+ Nota para el repartidor en el celular
204
+
205
+ ```html
206
+ <!-- ❌ mal: sin resizable, la manija sale en el celular y la tablet, donde no se arrastra con el dedo; y el tope de una nota es 200 (pages/envios/envios.html:422) -->
207
+ <sui-textarea [size]="bp.sizeControl()" [maxLength]="300" label="Nota para el repartidor"
208
+ placeholder="Ej. frágil, tocar el timbre, entregar en recepción" [rows]="3" [(value)]="nota" />
209
+ ```
210
+
211
+ ```html
212
+ <!-- ✅ bien -->
213
+ <sui-textarea [size]="bp.sizeControl()" [maxLength]="200" label="Nota para el repartidor" [resizable]="!bp.tactil()"
214
+ placeholder="Ej. frágil, tocar el timbre, entregar en recepción" [rows]="3" [(value)]="nota" />
215
+ ```
216
+
150
217
  ## Ejemplo
151
218
 
152
219
  ```html
153
220
  <sui-textarea label="Nota para el repartidor" sublabel="(Opcional)" [rows]="3" [maxLength]="200"
154
- [size]="bp.isMobile() ? 'large' : 'medium'" placeholder="Ej. frágil, tocar el timbre, entregar en recepción"
155
- [resizable]="!bp.isMobile()" [(value)]="nota" />
221
+ [size]="bp.sizeControl()" placeholder="Ej. frágil, tocar el timbre, entregar en recepción"
222
+ [resizable]="!bp.tactil()" [(value)]="nota" />
156
223
 
157
224
  <sui-textarea label="Motivo del rechazo" [required]="true" [rows]="3" [maxLength]="200"
158
225
  hint="Lo va a leer el local" [error]="intentado() && !motivo()"