@netzi/tokens 0.1.0-beta.8 → 0.1.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @netzi/tokens
2
2
 
3
+ ## 0.1.0-beta.9
4
+
5
+ ### Patch Changes
6
+
7
+ - 9819de5: **El indicador de foco llega a 3:1 en todos los presets y temas** (#76). Se pintaba con
8
+ `--netzi-primary`, que en claro se quedaba en 2.7:1 con azul, 1.6 con verde, 2.2 con
9
+ naranja y 2.4 con cian, por debajo de WCAG 1.4.11; y varios controles solo tenían un
10
+ halo del tinte, de 1.1:1.
11
+ - Nuevo token `--netzi-focus-ring`, apoyado en `--netzi-primary-text` y declarado en la
12
+ raíz y en cada elemento con `data-theme` o `data-preset`.
13
+ - Lo usan los contornos y bordes de foco de todo el kit (chip, cron-picker, icon-picker,
14
+ el enlace «ir al contenido», timeline y los campos de formulario) y la imagen
15
+ seleccionada del editor.
16
+ - Checkbox, radio, toggle, rating y segmented pasan del halo o del borde a un contorno de
17
+ 2px, que se distingue igual marcado que sin marcar; el pulgar de los sliders, a un
18
+ doble anillo; y el editor de texto enriquecido marca el foco en su recuadro.
19
+
20
+ - 749ad6b: **El hover del botón primario cumple 4.5:1** (#68). Pintaba `--netzi-primary-dark`
21
+ debajo de la tinta oscura `--netzi-on-primary`: 3.93:1 en azul y 4.0:1 en rojo, por
22
+ debajo de WCAG 2.1 AA para un texto de 15px. Nuevo token `--netzi-primary-hover`,
23
+ calibrado por preset y tema (el peor queda en 4.98:1, en rojo), que usan
24
+ `netzi-button` primario y el botón de reintentar de `netzi-connection-guard`.
25
+ `--netzi-primary-dark` sigue siendo el fondo de lo que lleva blanco encima.
26
+ - 03e4440: **La instalación ya no fija el canal `@beta`**: `pnpm add @netzi/ui @netzi/tokens`.
27
+ Mientras un paquete solo tenga versiones beta en npm, cada versión nueva se publica en
28
+ `latest`, que es lo que se instala por defecto. El dist-tag `beta` deja de mantenerse.
29
+
3
30
  ## 0.1.0-beta.8
4
31
 
5
32
  ### Patch Changes
package/README.md CHANGED
@@ -11,10 +11,11 @@ se construyen `@netzi/ui` y cualquier app de Netzi Tech.
11
11
  ## Instalación
12
12
 
13
13
  En el **npm público**, bajo el scope `@netzi` de Netzi Tech: sin registry especial ni
14
- token. Mientras el kit esté en beta, fija el canal:
14
+ token. Mientras el kit esté en beta, cada versión nueva es una beta y es la que se
15
+ instala por defecto:
15
16
 
16
17
  ```bash
17
- pnpm add @netzi/tokens@beta
18
+ pnpm add @netzi/tokens
18
19
  ```
19
20
 
20
21
  Licencia de uso libre con código privado: ver `LICENSE.md` dentro del paquete. Las
@@ -234,6 +235,31 @@ sobre fondo claro (`--netzi-blue` da 2.9:1; `--netzi-primary-dark`, 4.3:1). Si s
234
235
  lee, va `--netzi-primary-text` o el `-text` del color, que están calibrados por
235
236
  tema y por preset. Es lo que le pasó al botón `soft` (#56).
236
237
 
238
+ Y un relleno del primario tiene **dos fondos oscuros** según lo que lleve encima.
239
+ `--netzi-primary-hover` es el del estado hover de un botón relleno: su tinta es la
240
+ misma `--netzi-on-primary` del reposo, y cada preset lo calibra para que no baje de
241
+ 4.5:1 (5.4:1 en azul). `--netzi-primary-dark` es el fondo de lo que lleva **blanco**
242
+ (`--netzi-on-primary-dark`): la pista de un interruptor encendido, la marca de un
243
+ checkbox. Si se cruzan, la tinta oscura sobre el azul oscuro se queda en 3.9:1 (#68).
244
+
245
+ ### El foco va con `--netzi-focus-ring`, no con el primario
246
+
247
+ Un indicador de foco, contorno o borde, tiene que llegar a **3:1** sobre el fondo (WCAG
248
+ 1.4.11). El primario no llega en claro con azul (2.7:1), verde (1.6), naranja (2.2) ni cian
249
+ (2.4). `--netzi-focus-ring` se apoya en `--netzi-primary-text`, que cada preset y cada tema
250
+ calibran a 4.5:1 sobre las superficies, también en alto contraste. Se declara en la raíz y
251
+ en cada elemento con `data-theme` o `data-preset`, así que una sección oscura dentro de una
252
+ página clara tiene su propio anillo.
253
+
254
+ Todo `:focus`, `:focus-visible` y `:focus-within` del kit lo usa como contorno o borde (los
255
+ halos del tinte no cuentan: dan 1.1:1). Dos guardianes de `tokens-contrast.spec.ts` impiden
256
+ volver al primario y quitar el contorno sin poner otro indicador (#76).
257
+
258
+ Sobre una capa de **cristal** el anillo se ve contra lo que haya detrás: sobre el fondo del
259
+ kit cumple, pero con una imagen muy oscura (en claro) o muy clara (en oscuro) debajo puede
260
+ bajar de 3:1. Si la app pone cristal sobre fondos así, conviene darle a esa capa un tinte
261
+ más opaco.
262
+
237
263
  ## Los tres niveles de texto
238
264
 
239
265
  Tienen **papeles distintos**, no son tres grados de gris intercambiables. El ratio
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netzi/tokens",
3
- "version": "0.1.0-beta.8",
3
+ "version": "0.1.0-beta.9",
4
4
  "description": "Design tokens de Netzi (CSS custom properties): marca, tema claro/oscuro, tipografía, radios, sombras. Agnóstico de framework.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://ui.netzi.tech",
package/styles/tokens.css CHANGED
@@ -68,6 +68,12 @@
68
68
  /* --- Color PRIMARIO (themeable por preset; default = azul) --- */
69
69
  --netzi-primary: var(--netzi-blue);
70
70
  --netzi-primary-dark: var(--netzi-blue-dark);
71
+ /* El relleno del primario al pasar el puntero, con la MISMA tinta encima
72
+ (`--netzi-on-primary`). No es `--netzi-primary-dark`: ese es el fondo de lo que
73
+ lleva blanco (pulgar, marca del checkbox), y la tinta oscura sobre él se quedaba
74
+ en 3.93:1 en azul y 4.0:1 en rojo (#68). Cada preset declara el suyo: más oscuro
75
+ que su primario, pero sin bajar de 4.5:1 con su tinta. */
76
+ --netzi-primary-hover: #0a8fdd;
71
77
  /* La TINTA sobre el relleno del primario. Cada preset usa la que cumple sobre
72
78
  SU color, no una fija: el blanco sobre el azul da 2.68:1 y la tinta oscura
73
79
  7.05:1. Verde, naranja y cyan ya venían así; el azul y el rojo se suman. */
@@ -305,6 +311,7 @@
305
311
  [data-preset='green'] {
306
312
  --netzi-primary: #0ae972;
307
313
  --netzi-primary-dark: #07a352;
314
+ --netzi-primary-hover: #07a352;
308
315
  --netzi-on-primary: #04121f;
309
316
  --netzi-primary-text: #05793b;
310
317
  }
@@ -313,28 +320,45 @@
313
320
  [data-preset='purple'] {
314
321
  --netzi-primary: #8c4cff;
315
322
  --netzi-primary-dark: #6a2fd6;
323
+ --netzi-primary-hover: #6a2fd6;
316
324
  --netzi-on-primary: #ffffff;
317
325
  --netzi-primary-text: #7841db;
318
326
  }
319
327
  [data-preset='orange'] {
320
328
  --netzi-primary: #f0a020;
321
329
  --netzi-primary-dark: #c97e0a;
330
+ --netzi-primary-hover: #c97e0a;
322
331
  --netzi-on-primary: #04121f;
323
332
  --netzi-primary-text: #8e5e13;
324
333
  }
325
334
  [data-preset='red'] {
326
335
  --netzi-primary: #ff5630;
327
336
  --netzi-primary-dark: #d63916;
337
+ --netzi-primary-hover: #eb4a25;
328
338
  --netzi-on-primary: #04121f;
329
339
  --netzi-primary-text: #b53d22;
330
340
  }
331
341
  [data-preset='cyan'] {
332
342
  --netzi-primary: #00b8d9;
333
343
  --netzi-primary-dark: #0892ab;
344
+ --netzi-primary-hover: #0892ab;
334
345
  --netzi-on-primary: #04121f;
335
346
  --netzi-primary-text: #007287;
336
347
  }
337
348
 
349
+ /* El indicador de FOCO: contorno o borde que marca el control enfocado. Tiene que
350
+ llegar a 3:1 sobre el fondo (WCAG 1.4.11) y el primario no llega en claro con azul,
351
+ verde, naranja ni cian (2.7, 1.6, 2.2 y 2.4:1; #76). Se apoya en el primario para
352
+ texto, que cada preset y cada tema ya calibran a 4.5:1 sobre las superficies. Se
353
+ declara también en cada elemento con tema o preset propios: una variable que usa
354
+ otra se resuelve donde se declara, y una sección oscura dentro de una página clara
355
+ heredaría el anillo claro. */
356
+ :root,
357
+ [data-theme],
358
+ [data-preset] {
359
+ --netzi-focus-ring: var(--netzi-primary-text);
360
+ }
361
+
338
362
  /* El primario para TEXTO en oscuro: los saturados ya sirven, salvo dos. */
339
363
  [data-theme='dark'][data-preset='green'] {
340
364
  --netzi-primary-text: #0ae972;
@@ -344,6 +368,7 @@
344
368
  /* El morado oscuro de claro (#6a2fd6) se hunde en el fondo oscuro (2.7:1): un
345
369
  interruptor encendido apenas se distinguía de la tarjeta. */
346
370
  --netzi-primary-dark: #7d48f2;
371
+ --netzi-primary-hover: #7d48f2;
347
372
  }
348
373
  [data-theme='dark'][data-preset='orange'] {
349
374
  --netzi-primary-text: #f0a020;