@hiscovega/grisso 1.0.5 → 1.0.7
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 +149 -53
- package/dist/grisso.css +1 -1
- package/lib/build.d.ts +2 -0
- package/lib/build.js +15 -2
- package/lib/cli.js +67 -1
- package/lib/defaults.js +8 -0
- package/lib/generators.d.ts +7 -7
- package/lib/generators.js +46 -6
- package/lib/partials/backgrounds.js +8 -8
- package/lib/partials/borders.js +19 -19
- package/lib/partials/effects.js +4 -4
- package/lib/partials/flex-and-grid.js +46 -46
- package/lib/partials/icons.js +2 -2
- package/lib/partials/layout.js +23 -23
- package/lib/partials/sizing.js +9 -9
- package/lib/partials/spacing.js +15 -15
- package/lib/partials/typography.js +17 -17
- package/lib/purge.js +1 -1
- package/lib/resolve-config.d.ts +0 -1
- package/lib/resolve-config.js +5 -2
- package/lib/tokens.d.ts +14 -0
- package/lib/tokens.js +133 -0
- package/lib/types.d.ts +5 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# Grisso
|
|
2
2
|
|
|
3
|
-
> Librería de utility CSS de Griddo
|
|
3
|
+
> Librería de utility CSS de Griddo con variantes responsive y de estado, basada en CSS custom properties (design tokens).
|
|
4
|
+
|
|
5
|
+
> [!WARNING]
|
|
6
|
+
> En la versión estable 2.0, el paquete se moverá a `@griddo/grisso`. El nombre actual `@hiscovega/grisso` dejará de recibir actualizaciones a partir de ese momento.
|
|
4
7
|
|
|
5
8
|
## Instalación
|
|
6
9
|
|
|
@@ -10,24 +13,9 @@ npm install @hiscovega/grisso
|
|
|
10
13
|
|
|
11
14
|
## Uso
|
|
12
15
|
|
|
13
|
-
###
|
|
14
|
-
|
|
15
|
-
Importa el CSS pre-compilado directamente. Útil para desarrollo.
|
|
16
|
-
|
|
17
|
-
```css
|
|
18
|
-
/* En tu CSS global */
|
|
19
|
-
@import "@hiscovega/grisso";
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
O en HTML:
|
|
23
|
-
|
|
24
|
-
```html
|
|
25
|
-
<link rel="stylesheet" href="node_modules/@hiscovega/grisso/dist/grisso.css" />
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### Opción B: CLI
|
|
16
|
+
### CLI
|
|
29
17
|
|
|
30
|
-
Genera CSS desde la terminal.
|
|
18
|
+
Genera CSS desde la terminal. Forma recomendada de usar Grisso, ideal para scripts de build y CI/CD.
|
|
31
19
|
|
|
32
20
|
```bash
|
|
33
21
|
# CSS completo a stdout
|
|
@@ -42,6 +30,9 @@ npx grisso build --config grisso.config.mjs --output dist/grisso.css
|
|
|
42
30
|
# Tree-shaking (solo clases usadas)
|
|
43
31
|
npx grisso build --content "src/**/*.tsx" --content "src/**/*.css" --output dist/grisso.css
|
|
44
32
|
|
|
33
|
+
# Proteger clases del tree-shaking
|
|
34
|
+
npx grisso build --content "src/**/*.tsx" --safelist "^p-" --safelist "^m-" --output dist/grisso.css
|
|
35
|
+
|
|
45
36
|
# Sin minificar (útil para depuración)
|
|
46
37
|
npx grisso build --no-minify --output dist/grisso.css
|
|
47
38
|
|
|
@@ -51,17 +42,61 @@ npx grisso build | pbcopy
|
|
|
51
42
|
|
|
52
43
|
**Flags de `grisso build`:**
|
|
53
44
|
|
|
54
|
-
| Flag
|
|
55
|
-
|
|
56
|
-
| `--config <ruta>`
|
|
57
|
-
| `--content <glob>`
|
|
58
|
-
| `--
|
|
59
|
-
| `--
|
|
60
|
-
| `--
|
|
45
|
+
| Flag | Descripción |
|
|
46
|
+
| -------------------- | ------------------------------------------- |
|
|
47
|
+
| `--config <ruta>` | Ruta a `grisso.config.mjs` |
|
|
48
|
+
| `--content <glob>` | Globs para tree-shaking (repetible) |
|
|
49
|
+
| `--safelist <regex>` | Patrones de clases a preservar (repetible) |
|
|
50
|
+
| `--output <ruta>` | Archivo de salida (sin `--output` → stdout) |
|
|
51
|
+
| `--no-minify` | Deshabilitar minificación |
|
|
52
|
+
| `--help, -h` | Ayuda del comando |
|
|
61
53
|
|
|
62
54
|
Sin `--output`, el CSS va a stdout y los mensajes de estado a stderr, siguiendo la convención Unix.
|
|
63
55
|
|
|
64
|
-
|
|
56
|
+
#### `grisso tokens`
|
|
57
|
+
|
|
58
|
+
Genera un scaffold con todas las CSS custom properties (design tokens) que necesitas definir. Extrae dinámicamente los tokens de la config resuelta.
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Scaffold CSS a stdout
|
|
62
|
+
npx grisso tokens
|
|
63
|
+
|
|
64
|
+
# Escribir a archivo
|
|
65
|
+
npx grisso tokens --output tokens.css
|
|
66
|
+
|
|
67
|
+
# Con config personalizada (refleja extends/overrides)
|
|
68
|
+
npx grisso tokens --config grisso.config.mjs --output tokens.css
|
|
69
|
+
|
|
70
|
+
# Config resuelta como JSON
|
|
71
|
+
npx grisso tokens --format json
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Flags de `grisso tokens`:**
|
|
75
|
+
|
|
76
|
+
| Flag | Descripción |
|
|
77
|
+
| ----------------- | ------------------------------------------------- |
|
|
78
|
+
| `--config <ruta>` | Ruta a `grisso.config.mjs` |
|
|
79
|
+
| `--format <fmt>` | Formato de salida: `css` (default) o `json` |
|
|
80
|
+
| `--output <ruta>` | Archivo de salida (sin `--output` → stdout) |
|
|
81
|
+
| `--help, -h` | Ayuda del comando |
|
|
82
|
+
|
|
83
|
+
El scaffold CSS genera un `:root { }` con todas las properties vacías, agrupadas por sección, listo para rellenar:
|
|
84
|
+
|
|
85
|
+
```css
|
|
86
|
+
:root {
|
|
87
|
+
/* ─── Spacing ─── */
|
|
88
|
+
--spc-4xs: ;
|
|
89
|
+
--spc-3xs: ;
|
|
90
|
+
/* ... */
|
|
91
|
+
|
|
92
|
+
/* ─── Colors: marca ─── */
|
|
93
|
+
--brand-1: ;
|
|
94
|
+
--brand-2: ;
|
|
95
|
+
/* ... */
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### API programática
|
|
65
100
|
|
|
66
101
|
Usa `buildCSS()` directamente desde Node.js. Genera, purga y optimiza CSS — ideal para scripts de build, herramientas custom o integración con cualquier bundler.
|
|
67
102
|
|
|
@@ -74,11 +109,12 @@ const css = await buildCSS();
|
|
|
74
109
|
|
|
75
110
|
**Opciones de `buildCSS()`:**
|
|
76
111
|
|
|
77
|
-
| Opción
|
|
78
|
-
|
|
79
|
-
| `config`
|
|
80
|
-
| `content`
|
|
81
|
-
| `
|
|
112
|
+
| Opción | Tipo | Default | Descripción |
|
|
113
|
+
| ---------- | ---------------------- | ------- | ---------------------------------------------------------------- |
|
|
114
|
+
| `config` | `string` | — | Ruta a `grisso.config.mjs` personalizado |
|
|
115
|
+
| `content` | `string[]` | — | Globs de archivos a escanear para tree-shaking |
|
|
116
|
+
| `safelist` | `(string \| RegExp)[]` | — | Patrones de clases a preservar (se mergea con `config.safelist`) |
|
|
117
|
+
| `minify` | `boolean` | `true` | Minificar el CSS de salida |
|
|
82
118
|
|
|
83
119
|
Sin `content`, se incluye todo el CSS. Con `content`, se eliminan las clases no usadas via PurgeCSS.
|
|
84
120
|
|
|
@@ -144,6 +180,30 @@ export default {
|
|
|
144
180
|
};
|
|
145
181
|
```
|
|
146
182
|
|
|
183
|
+
#### `extractTokens()` — scaffold de tokens
|
|
184
|
+
|
|
185
|
+
Usa `extractTokens()` para generar programáticamente el scaffold de custom properties (o JSON) desde la config resuelta.
|
|
186
|
+
|
|
187
|
+
```js
|
|
188
|
+
import { extractTokens } from "@hiscovega/grisso/tokens";
|
|
189
|
+
|
|
190
|
+
// Scaffold CSS con todas las custom properties
|
|
191
|
+
const css = await extractTokens();
|
|
192
|
+
|
|
193
|
+
// JSON con los token maps resueltos
|
|
194
|
+
const json = await extractTokens({
|
|
195
|
+
format: "json",
|
|
196
|
+
config: "./grisso.config.mjs",
|
|
197
|
+
});
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Opciones de `extractTokens()`:**
|
|
201
|
+
|
|
202
|
+
| Opción | Tipo | Default | Descripción |
|
|
203
|
+
| -------- | ---------------- | ------- | ----------------------------------------- |
|
|
204
|
+
| `config` | `string` | — | Ruta a `grisso.config.mjs` personalizado |
|
|
205
|
+
| `format` | `"css" \| "json"` | `"css"` | Formato de salida |
|
|
206
|
+
|
|
147
207
|
**Servidor de desarrollo** — generar CSS on-the-fly:
|
|
148
208
|
|
|
149
209
|
```js
|
|
@@ -161,7 +221,7 @@ app.get("/grisso.css", async (req, res) => {
|
|
|
161
221
|
|
|
162
222
|
## Configuración personalizada
|
|
163
223
|
|
|
164
|
-
Crea un `grisso.config.mjs` en la raíz de tu proyecto para extender o reemplazar los tokens por defecto.
|
|
224
|
+
Crea un `grisso.config.mjs` en la raíz de tu proyecto para extender o reemplazar los tokens por defecto.
|
|
165
225
|
|
|
166
226
|
```js
|
|
167
227
|
// grisso.config.mjs
|
|
@@ -173,7 +233,14 @@ export default {
|
|
|
173
233
|
lg: "24px",
|
|
174
234
|
},
|
|
175
235
|
|
|
176
|
-
//
|
|
236
|
+
// States: reemplaza los 5 defaults (hover, focus, focus-visible, active, disabled)
|
|
237
|
+
// Solo genera variantes para los estados listados
|
|
238
|
+
states: {
|
|
239
|
+
hover: ":hover",
|
|
240
|
+
focus: ":focus",
|
|
241
|
+
},
|
|
242
|
+
|
|
243
|
+
// `extend` MERGEA con los defaults (arrays se concatenan)
|
|
177
244
|
extend: {
|
|
178
245
|
foregroundColors: {
|
|
179
246
|
5: "var(--text-5)",
|
|
@@ -181,17 +248,30 @@ export default {
|
|
|
181
248
|
shadows: {
|
|
182
249
|
"2xl": "var(--box-shadow-2xl)",
|
|
183
250
|
},
|
|
251
|
+
// Se concatena con el default []
|
|
252
|
+
safelist: [/^p-/],
|
|
184
253
|
},
|
|
185
254
|
};
|
|
186
255
|
```
|
|
187
256
|
|
|
257
|
+
La `safelist` controla qué clases se protegen del tree-shaking. Por defecto está vacía. En top-level reemplaza, en `extend` se concatena. Acepta `RegExp` y `string`.
|
|
258
|
+
|
|
259
|
+
Los `states` controlan qué variantes de estado se generan. Cada entrada es `nombre: pseudo-clase`. Top-level reemplaza completamente; `extend.states` mergea con los defaults.
|
|
260
|
+
|
|
188
261
|
Si no se pasa `config` a `buildCSS()`, busca automáticamente `grisso.config.mjs` en el directorio de trabajo. Si no existe, usa los defaults.
|
|
189
262
|
|
|
190
263
|
Los defaults se pueden consultar importando `@hiscovega/grisso/config`.
|
|
191
264
|
|
|
192
265
|
## Design Tokens (CSS custom properties)
|
|
193
266
|
|
|
194
|
-
Grisso usa CSS custom properties para todos los valores.
|
|
267
|
+
Grisso usa CSS custom properties para todos los valores. Genera un scaffold con todas las properties que necesitas definir:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# Genera scaffold dinámico desde tu config resuelta
|
|
271
|
+
npx grisso tokens --output src/tokens.css
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Alternativamente, copia el ejemplo estático:
|
|
195
275
|
|
|
196
276
|
```bash
|
|
197
277
|
cp node_modules/@hiscovega/grisso/tokens-example.css src/tokens.css
|
|
@@ -220,10 +300,10 @@ Importa los tokens antes que Grisso en tu CSS global:
|
|
|
220
300
|
### Nomenclatura
|
|
221
301
|
|
|
222
302
|
```
|
|
223
|
-
{breakpoint}-{propiedad}-{escala}
|
|
303
|
+
{breakpoint}-{state}-{propiedad}-{escala}
|
|
224
304
|
```
|
|
225
305
|
|
|
226
|
-
Ejemplos: `flex`, `tablet-flex`, `p-md`, `
|
|
306
|
+
Ejemplos: `flex`, `tablet-flex`, `p-md`, `hover-bg-1`, `focus-border-1`, `tablet-hover-p-sm`, `desktop-mt-lg`, `w-1/2`
|
|
227
307
|
|
|
228
308
|
### Breakpoints (mobile-first)
|
|
229
309
|
|
|
@@ -234,24 +314,40 @@ Ejemplos: `flex`, `tablet-flex`, `p-md`, `desktop-mt-lg`, `text-center`, `w-1/2`
|
|
|
234
314
|
| `desktop-` | 1024px+ |
|
|
235
315
|
| `ultrawide-` | 1680px+ |
|
|
236
316
|
|
|
317
|
+
### State variants
|
|
318
|
+
|
|
319
|
+
Todas las utilidades generan variantes de estado automáticamente. El tree-shaking elimina las no usadas.
|
|
320
|
+
|
|
321
|
+
| Prefijo | Pseudo-clase |
|
|
322
|
+
| ------------------ | ---------------- |
|
|
323
|
+
| `hover-` | `:hover` |
|
|
324
|
+
| `focus-` | `:focus` |
|
|
325
|
+
| `focus-visible-` | `:focus-visible` |
|
|
326
|
+
| `active-` | `:active` |
|
|
327
|
+
| `disabled-` | `:disabled` |
|
|
328
|
+
|
|
329
|
+
Se combinan con breakpoints: `tablet-hover-bg-1`, `desktop-focus-p-sm`.
|
|
330
|
+
|
|
331
|
+
Orden del cascade: base → state → responsive → responsive+state.
|
|
332
|
+
|
|
237
333
|
### Categorías
|
|
238
334
|
|
|
239
|
-
| Categoría | Ejemplos
|
|
240
|
-
| -------------- |
|
|
335
|
+
| Categoría | Ejemplos |
|
|
336
|
+
| -------------- | ----------------------------------------------------------------------------------------------------- |
|
|
241
337
|
| **Layout** | `flex`, `block`, `hidden`, `relative`, `absolute`, `overflow-hidden`, `inset-0`, `inset-x-sm`, `z-10` |
|
|
242
|
-
| **Flex/Grid** | `flex-col`, `flex-wrap`, `items-center`, `justify-between`, `gap-md`
|
|
243
|
-
| **Spacing** | `p-sm`, `pt-lg`, `mx-auto`, `mt-xs`, `mb-md`
|
|
244
|
-
| **Sizing** | `w-full`, `h-full`, `w-1/2`, `w-2/3`, `h-1/4`, `max-w-full`
|
|
245
|
-
| **Tipografía** | `text-1`, `text-center`, `font-bold`, `font-light`, `leading-snug`, `tracking-tight`
|
|
246
|
-
| **Fondos** | `bg-1`, `bg-ui`, `bg-cover`, `bg-center`
|
|
247
|
-
| **Bordes** | `border-sm`, `border-1`, `border-t-sm`, `divide-x`, `outline-none`
|
|
248
|
-
| **Efectos** | `shadow-md`, `opacity-3`, `overlay-2`
|
|
249
|
-
| **Iconos** | `icon-1`, `icon-3`
|
|
338
|
+
| **Flex/Grid** | `flex-col`, `flex-wrap`, `items-center`, `justify-between`, `gap-md` |
|
|
339
|
+
| **Spacing** | `p-sm`, `pt-lg`, `mx-auto`, `mt-xs`, `mb-md` |
|
|
340
|
+
| **Sizing** | `w-full`, `h-full`, `w-1/2`, `w-2/3`, `h-1/4`, `max-w-full` |
|
|
341
|
+
| **Tipografía** | `text-1`, `text-center`, `font-bold`, `font-light`, `leading-snug`, `tracking-tight` |
|
|
342
|
+
| **Fondos** | `bg-1`, `bg-ui`, `bg-cover`, `bg-center` |
|
|
343
|
+
| **Bordes** | `border-sm`, `border-1`, `border-t-sm`, `divide-x`, `outline-none` |
|
|
344
|
+
| **Efectos** | `shadow-md`, `opacity-3`, `overlay-2` |
|
|
345
|
+
| **Iconos** | `icon-1`, `icon-3` |
|
|
250
346
|
|
|
251
347
|
## Build
|
|
252
348
|
|
|
253
349
|
```bash
|
|
254
|
-
npm run build # Compila TS + genera dist/grisso.css (~
|
|
350
|
+
npm run build # Compila TS + genera dist/grisso.css (~800 KB)
|
|
255
351
|
npm run typecheck # Type-check sin emitir (tsc --noEmit)
|
|
256
352
|
npm run lint # Lint con Biome
|
|
257
353
|
npm test # Tests con Vitest
|
|
@@ -261,9 +357,9 @@ npm run playground # Build + tree-shake + abre playground/index.html
|
|
|
261
357
|
|
|
262
358
|
### CLI
|
|
263
359
|
|
|
264
|
-
El CLI se usa internamente y está disponible para consumidores via `npx grisso build`. Ver [
|
|
360
|
+
El CLI se usa internamente y está disponible para consumidores via `npx grisso build`. Ver [CLI](#cli) para detalles completos.
|
|
265
361
|
|
|
266
|
-
Con `--content`, se usa PurgeCSS para eliminar clases no usadas (~
|
|
362
|
+
Con `--content`, se usa PurgeCSS para eliminar clases no usadas (~800 KB → ~4 KB en el playground).
|
|
267
363
|
|
|
268
364
|
## Desarrollo: Añadir nuevas utilities
|
|
269
365
|
|
|
@@ -275,11 +371,11 @@ Con `--content`, se usa PurgeCSS para eliminar clases no usadas (~154 KB → ~4
|
|
|
275
371
|
// src/partials/layout.ts
|
|
276
372
|
import { simpleClass, complexClass } from "../generators.js";
|
|
277
373
|
|
|
278
|
-
// Clase simple — genera .flex + variantes responsive
|
|
279
|
-
simpleClass("flex", "display", "flex", breakpoints);
|
|
374
|
+
// Clase simple — genera .flex + variantes de estado y responsive
|
|
375
|
+
simpleClass("flex", "display", "flex", breakpoints, states);
|
|
280
376
|
|
|
281
|
-
// Clase basada en tokens — genera .p-xs, .p-
|
|
282
|
-
complexClass("p-", "padding", spacing, breakpoints);
|
|
377
|
+
// Clase basada en tokens — genera .p-xs, .hover-p-xs:hover, .tablet-p-xs, etc.
|
|
378
|
+
complexClass("p-", "padding", spacing, breakpoints, states);
|
|
283
379
|
```
|
|
284
380
|
|
|
285
381
|
## Publicación (release)
|