Cada proyecto reinventa
- Padding de botones inventado en cada componente
- Focus rings invisibles o ausentes
- Dark mode con
if (theme === 'dark')esparcido - Colores hex hardcodeados
- Sin garantía WCAG 2.2
13 componentes Astro tokenizados. Dark mode nativo. Focus rings consistentes. Target size 24×24. Cero JavaScript a menos que lo pidas explícitamente.
Botones con tamaños inconsistentes. Focus invisibles. Dark mode hackeado a último minuto. Espaciados ad-hoc. Tres clientes, tres design systems improvisados.
if (theme === 'dark') esparcido<ThemeToggle />Configura el registro privado, instala dos paquetes, importa los tokens. Eso es todo.
DIL UI vive en GitHub Packages. Configura tu .npmrc con tu token.
echo "@diegoiprg:registry=https://npm.pkg.github.com" >> .npmrc
echo "//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}" >> .npmrc Tokens + componentes. Astro como peer dependency.
npm install @diegoiprg/dil-tokens @diegoiprg/dil-ui Una sola línea en tu Layout.astro. Listo para usar componentes.
---
import "@diegoiprg/dil-tokens/tokens.css";
import Button from "@diegoiprg/dil-ui/components/Button.astro";
import ThemeToggle from "@diegoiprg/dil-ui/components/ThemeToggle.astro";
---
<html>
<body>
<ThemeToggle />
<Button variant="primary">Hola mundo</Button>
</body>
</html> Cada componente con código copy-paste vivo, ejemplos de uso y notas de accesibilidad.
Button
CTA con 3 variantes, 3 tamaños y WCAG 2.2 garantizado.
Input
Campos con focus ring 3:1 y aria-invalid.
Card
Default, elevated y glass con backdrop-filter.
Badge
Etiquetas info / éxito / atención / error.
Hero
Header con eyebrow, slots actions y visual.
BentoGrid
Grid 2/3/4 columnas con span por celda.
Footer
Cierre con navegación y derechos.
Stack
Flex direccional con gap tokenizado.
ThemeToggle
Light/dark con persistencia local sin flash.
NavBar
Sticky con backdrop-blur y menú móvil.
Tabs
ARIA tabs con teclado y panel toggling.
Accordion
<details> nativo con FAQPage schema opcional.
Code
Snippet con copia al portapapeles.
Usa el toggle de arriba a la derecha. Toda la página responde. Cero flash, cero librería, cero if-else en tu código.
Override de --color-surface-*, --color-text-*, --color-border-* via [data-theme="dark"].
Fallback automático a prefers-color-scheme. Si el usuario no eligió, respeta su SO.
El toggle hidrata inline antes del primer paint. Nunca verás un flash blanco en sitios oscuros.
DIL UI corre en sitios reales con tráfico real.
W3C Design Tokens generan CSS variables, preset de Tailwind y tipos TypeScript. Cero magic numbers.
Overlay [data-theme="dark"] + prefers-color-scheme. Sin librerías.
WCAG 2.2 AA garantizado: target size, focus 3:1, soporte de teclado.
Astro server-render. Componentes interactivos usan is:inline, no frameworks.
Playwright + axe-core + helpers de Core Web Vitals (TBT, LCP, CLS) listos para tu CI.
@diegoiprg/dil-eslint-config rechaza colores hex, spacing inventado, font-size hardcodeado.
@diegoiprg/dil-tokens) son CSS variables planas y funcionan en cualquier framework: Next.js, Remix, SvelteKit, HTML puro.<ThemeToggle /> en tu layout. Lee localStorage, fallback a prefers-color-scheme, escribe data-theme en <html>. Cero librerías, cero flash, cero JS framework.@diegoiprg/dil-tokens/tailwind exporta un preset con todos los tokens listos para theme.extend.ui.dilware.net) también está construido con DIL UI.30 segundos de setup. 13 componentes accesibles. Dark mode incluido.