orbital-ds 0.2.0 → 0.4.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.
package/AGENTS.md ADDED
@@ -0,0 +1,60 @@
1
+ # orbital-ds — guía para agentes de IA
2
+
3
+ Sistema de diseño: **estructura común + temas + componentes** sobre Base UI y Tailwind v4.
4
+ Todo está pensado para que un agente pueda usarlo, ampliarlo y comprobar su trabajo sin
5
+ adivinar. Lee antes: `README.md`, `docs/CONTRACT.md`, `contract.json` y
6
+ `components.manifest.json` (qué componentes hay, cómo se importan y qué `data-slot` exponen).
7
+
8
+ ## Reglas (obligatorias)
9
+
10
+ 1. **Solo variables.** Un componente no escribe colores, medidas, sombras, z-index ni
11
+ duraciones: pide un hueco a una variable (`--ds-*` o las de color de shadcn). Si falta el
12
+ hueco, **añade el token** con un valor que deje el aspecto como estaba y úsalo.
13
+ 2. **Añadir, nunca sustituir.** Un componente nuevo es un fichero nuevo en `src/ui/`. No se
14
+ reescribe ni se renombra uno existente para otro fin. No uses `--overwrite` de la CLI de
15
+ shadcn sin aprobación expresa. Quitar o renombrar algo público = versión **mayor**.
16
+ 3. **Nombres en inglés.** Tokens, props y valores de variantes. Variables propias con el
17
+ prefijo `--ds-`; las que Tailwind convierte en utilidades (`--color-*`, `--radius-*`,
18
+ `--shadow-*`) siguen su convención. Las privadas de un tema llevan el prefijo del tema
19
+ (`--zy-*`).
20
+ 4. **Un solo motor: Base UI.** Nada de Radix. `asChild` no existe: se usa `render`.
21
+ 5. **«Sin sombra» es `0 0 #0000`**, nunca `none` (invalida todo el `box-shadow`, anillo de
22
+ foco incluido).
23
+ 6. **Un tema cumple el contrato completo** (`contract.json`) y define en `:root` todo
24
+ `--ds-*` que defina el tema base.
25
+ 7. **La marca de una app vive en SU `brand.css`**, no en el tema del paquete. Para
26
+ personalizar una app (color, radio, fuentes) edita ese fichero; nunca `node_modules` ni
27
+ los temas. `pnpm exec orbital-ds-init` lo crea sin sobrescribir.
28
+
29
+ ## Cómo cambiar el aspecto
30
+
31
+ - **Valores** (color, forma, fuentes, escala, sombras, espaciado, materiales, sidebar):
32
+ variables del tema en `src/themes/<tema>.css`.
33
+ - **Personalidad de un elemento** (por ejemplo, botones en píldora con degradado): reglas en
34
+ la sección «PERSONALIDAD» del tema, dirigidas a los ganchos del DOM —`data-slot`,
35
+ `data-variant`, `data-size`, `data-active`, `data-state`— y escritas solo con variables. Van
36
+ **sin capa** para ganar a las utilidades; define también hover y active.
37
+ - **Estructura** distinta de un componente (otro layout): variante del componente, no tema.
38
+
39
+ ## Cómo comprobar tu trabajo
40
+
41
+ ```bash
42
+ pnpm check:ds # contrato de tema, repetidos, sombras, fugas, valores fijos y API pública
43
+ pnpm verify # doctor + typecheck + build
44
+ pnpm manifest # regenera components.manifest.json tras añadir componentes
45
+ ```
46
+
47
+ Si `pnpm check:ds` falla, **corrige la causa**; no lo desactives ni lo rodees.
48
+
49
+ ## Añadir un componente
50
+
51
+ 1. Fichero en `src/ui/<nombre>.tsx` (un componente = un fichero; sin barril).
52
+ 2. `data-slot="<nombre>"` en su raíz y en las partes relevantes.
53
+ 3. Solo tokens. Importa `cn` de `../lib/utils`; los demás componentes, de `./<otro>`.
54
+ 4. Dependencias de terceros: opcionales (`peerDependenciesMeta`), nunca obligatorias.
55
+ 5. `pnpm manifest`, `pnpm verify`; versión **menor** (añadido compatible).
56
+
57
+ ## Crear un tema
58
+
59
+ Copia `themes/qratia.css` (o `zyro.css`), cambia valores, no quites ninguno, añade
60
+ `<tema>.fonts.css` con el `@import url()` de sus fuentes y ejecuta `pnpm check:ds`.
package/README.md CHANGED
@@ -1,49 +1,63 @@
1
1
  # orbital-ds
2
2
 
3
- Sistema de diseño genérico. **Estructura común + temas intercambiables + primitivos**
4
- sobre [Base UI](https://base-ui.com) y Tailwind v4.
3
+ Sistema de diseño genérico: **estructura común + temas intercambiables + ~60 componentes**
4
+ sobre [Base UI](https://base-ui.com) y Tailwind v4 (los de shadcn en su versión Base UI).
5
5
 
6
6
  - `styles.css` — la ESTRUCTURA: mapea variables de tema a utilidades de Tailwind y define los
7
- tokens semánticos (radios, alturas de control, sombras, capas, movimiento, foco) y la capa base.
8
- No lleva colores ni fuentes.
7
+ tokens semánticos (radios, alturas, sombras, espaciado, capas, movimiento, foco, materiales)
8
+ y la capa base. No lleva colores ni fuentes.
9
9
  - `themes/<tema>.css` — un TEMA: paleta (claro/oscuro), radio base y tipografía.
10
- Hoy: `qratia`. Añadir otro = añadir otro fichero.
11
- - `ui/*` — primitivos (`orbital-ds/ui/button`, …), uno por fichero: quien no usa gráficos no
12
- necesita `recharts`, quien no usa toasts no necesita `sonner`.
10
+ Hoy: `qratia` y `zyro` (cristal). Añadir otro = añadir otro fichero.
11
+ - `themes/<tema>.fonts.css` — las fuentes del tema (un `@import url()`; va el primero).
12
+ - `ui/*` — componentes, uno por fichero (`orbital-ds/ui/button`, …): quien no usa gráficos
13
+ no necesita `recharts`, quien no usa el calendario no necesita `react-day-picker`.
14
+ - `contract.json` + `pnpm check:ds` — el contrato de tema y su comprobación.
13
15
 
14
16
  ## Uso en una app (Tailwind v4)
15
17
 
16
18
  ```css
19
+ @import 'orbital-ds/themes/qratia.fonts.css'; /* fuentes: lo primero */
17
20
  @import 'tailwindcss';
18
21
  @plugin '@tailwindcss/typography';
19
22
  @import 'tw-animate-css';
20
- @import 'orbital-ds/themes/qratia.css'; /* un tema */
21
- @import 'orbital-ds/styles.css'; /* la estructura */
22
- @source '../node_modules/orbital-ds/dist'; /* que Tailwind vea las clases del paquete */
23
+ @import 'orbital-ds/styles.css'; /* estructura */
24
+ @import 'orbital-ds/themes/qratia.css'; /* tema (después de la estructura) */
25
+ @source '../node_modules/orbital-ds/dist'; /* que Tailwind vea las clases del paquete */
23
26
  ```
24
27
 
25
28
  ```tsx
26
29
  import { Button } from 'orbital-ds/ui/button';
27
30
  ```
28
31
 
32
+ Cambiar de identidad = cambiar `qratia` por `zyro` en esas dos líneas de tema/fuentes.
33
+ Detalle del contrato, tokens y reglas de nombres en [`docs/CONTRACT.md`](docs/CONTRACT.md).
34
+
35
+ ## Marca de una app
36
+
37
+ Lo propio de cada app (color principal, acento, radio, fuentes) va en **su** `src/brand.css`,
38
+ importado después del tema. Ninguna actualización de orbital-ds lo toca. `pnpm exec orbital-ds-init`
39
+ lo crea la primera vez. Detalle en [`docs/CONTRACT.md`](docs/CONTRACT.md).
40
+
29
41
  ## Regla
30
42
 
31
43
  Ningún componente lleva valores propios (colores, medidas, sombras, z-index, duraciones):
32
44
  pide un hueco a una variable. Para cambiar el aspecto se cambia el tema, no el componente.
33
45
  Si un componente necesita un hueco nuevo, se AÑADE el token con un valor que deje el aspecto
34
- como estaba.
46
+ como estaba. `pnpm check:ds` lo comprueba.
35
47
 
36
48
  ## Desarrollo
37
49
 
38
50
  ```bash
39
51
  pnpm install
40
- pnpm verify # typecheck + build
41
- pnpm dev # recompila al guardar (para consumirlo con `link:` desde una app)
52
+ pnpm verify # doctor + typecheck + build
53
+ pnpm check:ds # solo el contrato de tema y los valores fijos
42
54
  ```
43
55
 
44
56
  Peers obligatorios: `react`, `react-dom`, `@base-ui/react`, `tailwindcss`, `tailwind-merge`,
45
57
  `class-variance-authority`, `clsx`, `lucide-react`, `tw-animate-css`.
46
- Opcionales (solo si usas ese primitivo): `recharts` (chart), `sonner` (sonner), `next-themes` (sonner).
58
+ Opcionales (solo si usas ese componente): `recharts`, `sonner`, `next-themes`, `cmdk`,
59
+ `date-fns` + `react-day-picker`, `embla-carousel-react`, `input-otp`,
60
+ `react-resizable-panels`, `@shadcn/react`.
47
61
 
48
62
  ## Licencia
49
63