kaizen-lib 0.2.3 → 0.2.5

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/README.md CHANGED
@@ -14,6 +14,26 @@ styled-components con `moduleResolution: "bundler"`, así que lo transpilan ello
14
14
  | `kaizen-lib/tokens.css` | Valores por defecto, tema oscuro y claro | listo |
15
15
  | `kaizen-lib/ui` | Componentes (`IconButton`, `ReactionButton`, `Medidor`, `Relieve`, `LangSelector`) | en curso |
16
16
 
17
+ ## ¿Qué uso para qué?
18
+
19
+ Antes de escribir un `styled.button` a mano o un ciclador de idioma propio, revisá esta
20
+ tabla. Si tu caso está acá, es un defecto reconstruirlo local — usá esto, y si no
21
+ alcanza, extendé el componente en vez de bypassearlo (ver `implement.md` del harness:
22
+ "un duplicado local de algo que ya existe compartido se reemplaza por el compartido").
23
+
24
+ | Necesito... | Uso | No es... |
25
+ |---|---|---|
26
+ | Un botón redondo de sólo ícono en una topbar (notificaciones, perfil, cerrar) | `IconButton` | — |
27
+ | Que ese botón tenga fondo teñido cuando está seleccionado (la página actual, un filtro aplicado) | `IconButton` con `active` | `ReactionButton` (ver abajo, distinción a propósito) |
28
+ | Un ícono que cambia de color al reaccionar (me gusta, guardar, favorito) — **sin** fondo teñido | `ReactionButton` | `IconButton` con `active` |
29
+ | El relieve neumórfico (círculo con sombra, sin relleno) alrededor de un `IconButton` | `Relieve` envolviendo el `IconButton` | una prop de `IconButton` — ver por qué en su docblock |
30
+ | Un ciclador de idioma con banderas en la topbar | `LangSelector` | reconstruir el ciclado a mano — ya lo resuelve, con `Relieve` incluido |
31
+ | Un arco/medidor que muestra cuánto de un total está ocupado | `Medidor` | un `<progress>` o una barra propia |
32
+ | Espaciado, radios, color, tipografía, sombra | `kaizen-lib/tokens` (`space`, `radius`, `fg`, `accent`, `font`, `shadow`, `relief`...) | un valor a mano — cada uno es una referencia `var(--kz-*)` |
33
+
34
+ Ningún componente trae íconos ni banderas: los recibe como `children`/`icono`, y el
35
+ producto elige de dónde salen (`react-icons`, `react-country-flag`, SVG propio).
36
+
17
37
  ## Instalación
18
38
 
19
39
  ```bash
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kaizen-lib",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Tokens y componentes compartidos entre los fronts de Kaizen.",
5
5
  "license": "MIT",
6
6
  "author": "Nicolás Sandobal",
@@ -55,11 +55,11 @@ const Raiz = styled.button<{ $size: IconButtonSize; $tone: ReactionTone; $active
55
55
  padding: 0 8px;
56
56
  background: transparent;
57
57
  --kz-icon-on: ${({ $tone }) => TONO_ENCENDIDO[$tone]};
58
+ --kz-icon-glow: ${({ $glow }) => ($glow ? '0 0 8px color-mix(in srgb, currentColor 65%, transparent)' : 'none')};
58
59
  color: ${({ $active }) => ($active ? 'var(--kz-icon-on)' : fg.muted)};
59
60
 
60
61
  svg {
61
- filter: ${({ $active, $glow }) =>
62
- $active && $glow ? 'drop-shadow(0 0 8px color-mix(in srgb, currentColor 65%, transparent))' : 'none'};
62
+ filter: ${({ $active }) => ($active ? 'drop-shadow(var(--kz-icon-glow))' : 'none')};
63
63
  transition: filter ${motion.fast} ${motion.ease};
64
64
  }
65
65
 
@@ -94,14 +94,19 @@ const Cuenta = styled.span`
94
94
  * ```
95
95
  *
96
96
  * Un color que los seis tonos no cubren (la marca de un producto, no una
97
- * categoría semántica) se pisa con `style`, ya que `--kz-icon-on` es una
98
- * variable CSS común y un estilo en línea le gana a la de acá:
97
+ * categoría semántica), o una intensidad de resplandor propia y no la
98
+ * genérica de `glow`, se pisan con `style`: `--kz-icon-on` y `--kz-icon-glow`
99
+ * son variables CSS comunes, y un estilo en línea le gana a la de acá por
100
+ * origen, no por especificidad — no hace falta tocar la librería por un
101
+ * color o un resplandor que ningún otro consumidor va a repetir.
99
102
  *
100
103
  * ```tsx
101
104
  * <ReactionButton
102
105
  * active={guardado}
103
- * glow
104
- * style={{ '--kz-icon-on': 'var(--mi-color-de-marca)' } as React.CSSProperties}
106
+ * style={{
107
+ * '--kz-icon-on': 'var(--mi-color-de-marca)',
108
+ * '--kz-icon-glow': '0 0 8px rgba(255, 77, 109, 0.75)',
109
+ * } as React.CSSProperties}
105
110
  * label="Guardar"
106
111
  * >
107
112
  * <IconoMarcador />