@ajuarezso/sui-design-system 0.23.1 → 0.24.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.
@@ -27,6 +27,19 @@ está en modo de prueba. Va pegado arriba, a todo el ancho, y se queda mientras
27
27
  Regla corta (canon, la misma del alert): **contexto → alert · toda la app → banner · efímero →
28
28
  toast · bandeja → notification.**
29
29
 
30
+ ## Ancho: siempre todo el de su contenedor (regla del dueño, 04-10-2026)
31
+
32
+ El banner **ocupa siempre el ancho disponible de su contenedor**, de borde a borde. No se mete
33
+ dentro de una columna centrada ni de una card, ni se le pone `border-radius` o márgenes laterales
34
+ para que «encaje» con el contenido: si se ve como un rectángulo flotando entre cards, está mal
35
+ puesto.
36
+
37
+ - Va **fuera** de la columna con `max-width` de la página, como primer hijo del host.
38
+ - Si el host tiene padding lateral (p. ej. `customer-page-base`: 32px en desktop y 16px en
39
+ mobile), el banner se come ese padding con margen negativo para llegar al borde.
40
+ - Ejemplo real: el aviso de app cerrada en la bandeja del repartidor
41
+ (`driver-dashboard.html`, clase `.cerrada`).
42
+
30
43
  ## Qué variante usar
31
44
 
32
45
  > La guía del DS dice **para qué** es el banner, pero no cuándo va cada relleno ni cada tipo. Lo
@@ -131,6 +131,26 @@ contador mide 11 px en `small` y `medium`, y 12 px (pastilla de 20) en `large` y
131
131
  <sui-tab-chips [chips]="filtros" [(value)]="filtro" [size]="bp.isMobile() ? 'xlarge' : 'medium'" />
132
132
  ```
133
133
 
134
+ ## Pista de scroll (canon, aprobado por el dueño el 05-10-2026)
135
+
136
+ Desde la **0.24.0**. La barra de scroll está oculta, así que con chips que no entran no se notaba
137
+ que había más; en escritorio con mouse solo se llegaba con Shift+rueda. El componente lo avisa
138
+ solo:
139
+
140
+ | parte | qué hace | dónde |
141
+ |---|---|---|
142
+ | degradado | 40 px del color de fondo en el borde que tiene chips ocultos: `bg-white-0` (la página) y `bg-weak-50` cuando está pegado (`sticky`). Funciona en modo oscuro. Se va cuando ya no hay más de ese lado. | siempre |
143
+ | flechas | botón redondo de 32 px con `arrow-left-s-line` / `arrow-right-s-line`, centrado en la fila. Desplaza ~80 % del ancho visible con scroll suave (sin animación con `prefers-reduced-motion`). | solo con mouse o trackpad (`hover: hover` y `pointer: fine`) |
144
+
145
+ - En táctil no hay flechas: se desliza con el dedo y el degradado basta.
146
+ - No cambia `autoScroll`: el chip elegido se sigue centrando, y la pista se actualiza con ese
147
+ scroll.
148
+ - Las flechas tienen `aria-label` («Ver más a la derecha» / «Ver más a la izquierda») y
149
+ `tabindex="-1"`: los chips ya se recorren con ← →.
150
+ - El estado sale del `scroll` del propio `<nav>` y de un `ResizeObserver`; sin listeners
151
+ globales. Es la misma implementación de `sui-table` (`core/pista-de-scroll`).
152
+ - `[pistaDeScroll]="false"` la apaga (default prendida). Hoy no hay un caso para apagarla.
153
+
134
154
  ## «No usar»: por qué no hoy y cuándo sí
135
155
 
136
156
  | qué | por qué no hoy | cuándo sí, en un flujo nuevo |
@@ -151,6 +171,7 @@ contador mide 11 px en `small` y `medium`, y 12 px (pastilla de 20) en `large` y
151
171
  | `sticky` | `boolean` | `false` |
152
172
  | `size` | `'small' \| 'medium' \| 'large' \| 'xlarge'` | `'medium'` |
153
173
  | `autoScroll` | `boolean` | `true` |
174
+ | `pistaDeScroll` | `boolean` | `true` |
154
175
 
155
176
  Outputs: ninguno.
156
177
  <!-- api:fin -->
@@ -161,7 +182,7 @@ interface SuiTabChipItem {
161
182
  label: string;
162
183
  count?: number; // 0 o undefined no se dibuja
163
184
  }
164
- type SuiTabChipsSize = 'small' | 'medium' | 'large';
185
+ type SuiTabChipsSize = 'small' | 'medium' | 'large' | 'xlarge';
165
186
  ```
166
187
 
167
188
  ## Trampas
@@ -182,6 +203,12 @@ type SuiTabChipsSize = 'small' | 'medium' | 'large';
182
203
  - **No tiene padding lateral propio**: lo pone la pantalla. Sí trae 12 px arriba y abajo.
183
204
  - **`sticky` cambia el host a `display: contents`**: las clases que le pongas al host dejan de
184
205
  pintar caja (márgenes, anchos). Pon el estilo en un contenedor.
206
+ - **Desde la 0.24.0 el `<nav class="sui-tab-chips">` va dentro de `<sui-pista-de-scroll>`**, y en
207
+ modo `sticky` el que se pega es ese contenedor (no el nav). Los estilos de página que pisan
208
+ `.sui-tab-chips` (padding) siguen funcionando: el nav conserva la clase y sigue siendo el que
209
+ scrollea.
210
+ - **El degradado asume fondo blanco** (`bg-white-0`) fuera del modo pegado. Sobre un fondo gris se
211
+ ve una mancha: pisa `--sui-pista-de-scroll-fondo` en un contenedor con el token del fondo real.
185
212
  - **Pegado, el fondo es `bg-weak-50`**: sobre una página blanca se nota la franja gris.
186
213
  Con `sticky` el sentinel agrega 16 px arriba.
187
214
  - **`count` en 0 no se dibuja**: no sirve para decir «0 pendientes».
@@ -140,6 +140,28 @@ 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
+ ## Pista de scroll (canon, aprobado por el dueño el 05-10-2026)
144
+
145
+ Desde la **0.24.0**. Cuando la tabla scrollea en horizontal (≤ 767 px, o con una columna `sticky`)
146
+ la barra está oculta: en el teléfono se ve 1 de 5 columnas y parece completa. La tabla lo avisa
147
+ sola, sin nada en la página:
148
+
149
+ | parte | qué hace | dónde |
150
+ |---|---|---|
151
+ | degradado | 40 px del color de fondo de la tabla (`bg-white-0`, oscuro en modo oscuro) en el borde que tiene columnas ocultas. Se va cuando ya no hay más de ese lado. | siempre |
152
+ | flechas | botón redondo de 28 px con `arrow-left-s-line` / `arrow-right-s-line`, **a la altura de la cabecera** (en una tabla larga el centro queda fuera de la pantalla). Desplaza ~80 % del ancho visible con scroll suave (sin animación con `prefers-reduced-motion`). | solo con mouse o trackpad (`hover: hover` y `pointer: fine`) |
153
+
154
+ - En táctil no hay flechas: se desliza con el dedo y el degradado basta.
155
+ - **Con una columna `sticky` no hay pista a la izquierda**: la columna pegada ya avisa, y el
156
+ degradado o la flecha se pintarían encima de ella. La derecha sí.
157
+ - En escritorio sin `sticky` el contenedor es `overflow: hidden` (recorta, no scrollea): ahí no
158
+ hay pista aunque algo desborde. Ver Trampas.
159
+ - Las flechas tienen `aria-label` («Ver más a la derecha» / «Ver más a la izquierda») y
160
+ `tabindex="-1"`: no son una parada de teclado.
161
+ - El estado sale del `scroll` del propio contenedor y de un `ResizeObserver`; sin listeners
162
+ globales. Es la misma implementación de `sui-tab-chips` (`core/pista-de-scroll`).
163
+ - `[pistaDeScroll]="false"` la apaga (default prendida). Hoy no hay un caso para apagarla.
164
+
143
165
  ## «No usar»: por qué no hoy y cuándo sí
144
166
 
145
167
  | qué | por qué no hoy | cuándo sí, en un flujo nuevo |
@@ -167,6 +189,7 @@ el vertical solo. Por eso la página **no** agrega `touch-action` ni un wrapper
167
189
  | `striped` | `boolean` | `false` |
168
190
  | `selectable` | `boolean` | `false` |
169
191
  | `rowKey` | `keyof T \| ((row: T) => any)` | `undefined` |
192
+ | `pistaDeScroll` | `boolean` | `true` |
170
193
  | `selectedRows` · model, `[(selectedRows)]` | `Set<any>` | `new Set()` |
171
194
  | `sortKey` · model, `[(sortKey)]` | `string \| null` | `null` |
172
195
  | `sortDir` · model, `[(sortDir)]` | `'asc' \| 'desc' \| null` | `null` |
@@ -230,6 +253,8 @@ trabajo de la página.
230
253
  - La fila esqueleto son siempre 5, sin importar el tamaño de página.
231
254
  - No le pongas `touch-action` ni `overflow-x` desde la página: el componente ya maneja el gesto en
232
255
  Android y lo romperías.
256
+ - **El degradado de la pista es `bg-white-0`**, el fondo de la propia tabla. Si la tabla vive
257
+ sobre otro fondo (no es el caso hoy), se pisa `--sui-pista-de-scroll-fondo` en un contenedor.
233
258
 
234
259
  ## Ejemplo
235
260