npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@achsux/ds-backoffice

v1.3.1

Published

Design system para productos back office de ACHS

Readme

@darcy-achs/ds-backoffice

Design system para productos back office de ACHS. Sistema independiente de @achsux/ui, orientado a interfaces de gestión interna con alta densidad de información.

Versión estable: ver package.json — librería en GitHub Packages (@darcy-achs/ds-backoffice).

Instalación

Copiá .npmrc.example a .npmrc del proyecto:

@darcy-achs:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}

Token: PAT de GitHub con scope read:packages (y acceso al repo del paquete). En local: export GITHUB_TOKEN=ghp_...

Importante: en GitHub Packages, público significa visible en la web de GitHub, pero npm/pnpm siempre piden autenticación para descargar. No está en registry.npmjs.org.

npm install @darcy-achs/ds-backoffice tailwindcss-animate
# o
pnpm add @darcy-achs/ds-backoffice tailwindcss-animate

Requisitos: React ≥18, Tailwind CSS ≥4, tailwindcss-animate ≥1.0

Uso rápido

1. Importar los tokens CSS

En el entry point de tu app (ej. main.tsx o styles.css):

import "@darcy-achs/ds-backoffice/tokens";

Esto agrega todas las CSS custom properties al :root. A partir de ahí podés usar los tokens en tus componentes:

.mi-card {
  background: var(--card);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-card);
  padding: var(--space-card);
}

2. Tokens individuales

Si solo necesitás un subconjunto:

import "@darcy-achs/ds-backoffice/tokens/colors";
import "@darcy-achs/ds-backoffice/tokens/typography";

3. Utilidades

import { cn } from "@darcy-achs/ds-backoffice";

// Combina clases Tailwind sin conflictos
const className = cn("px-4 py-2", isActive && "bg-primary");

Tokens disponibles

Colores (/tokens/colors)

| Token | Uso | | --------------------------------------------------- | ----------------------------------------- | | --background | Canvas de la página (blanco) | | --foreground | Texto principal | | --card / --cream | Superficie de cards (blanco) | | --ink | Texto oscuro, CTAs primarios | | --primary / --primary-foreground | Acción principal | | --mint | Verde ACHS marca (#085F21), énfasis, foco | | --success / --warning / --info / --critical | Estados semánticos | | --border / --input / --ring | Bordes y foco | | --sidebar-* | Tokens específicos de sidebar | | --chart-1..5 | Serie de datos en gráficos | | --chip-*-bg/fg/border | Colores de chips por estado |

Tipografía (/tokens/typography)

| Token | Valor | Uso | | ------------------- | --------- | -------------------------- | | --text-2xs | 10px | Etiquetas uppercase | | --text-xs | 11px | Captions, hints | | --text-sm | 12px | Badges, texto secundario | | --text-md | 13px | Label estándar back office | | --text-base | 14px | Body | | --text-3xl | 26px | H1 de página | | --text-4xl | 30px | Valores KPI | | --type-page-title | compuesto | font shorthand para h1 | | --type-kpi-value | compuesto | font shorthand para KPIs | | --type-label | compuesto | font shorthand para labels |

Espaciado (/tokens/spacing)

Escala --space-0 a --space-24 (base 4px) + alias semánticos: --space-card, --space-page-x, --space-table-cell-x, etc.

Sombras (/tokens/shadows)

| Token | Uso | | ------------------ | --------------------------- | | --shadow-card | Card flotante sobre canvas | | --shadow-raised | Botones, elementos elevados | | --shadow-overlay | Dropdowns, popovers | | --shadow-modal | Modales, drawers | | --shadow-focus | Ring de foco accesible |

Capas (/tokens/layers)

| Token | Uso | | ------------- | ------------------------ | | --z-overlay | Backdrop de modales | | --z-modal | Diálogos, CommandPalette | | --z-toast | Notificaciones |

Motion (/tokens/motion)

| Token | Valor | Uso | | --------------------- | ------------ | ----------------------- | | --duration-fast | 140ms | Hover, toggles | | --duration-base | 200ms | Modales, dropdowns | | --duration-slow | 300ms | Drawers, sidebar | | --ease-default | spring suave | Mayoría de transiciones | | --transition-colors | shorthand | Color/background/border |

Configuración con Tailwind v4

Setup en 3 líneas (cualquier framework)

En el CSS principal de tu app:

@import "tailwindcss";
@plugin "tailwindcss-animate";
@import "@darcy-achs/ds-backoffice/setup"; /* escaneo automático de clases */
@import "@darcy-achs/ds-backoffice/tokens"; /* tokens CSS custom properties */

El archivo ./setup le indica a Tailwind v4 dónde encontrar las clases del DS — sin configurar nada más. Sin él los componentes renderizan sin estilos (botones sin color, layouts sin espaciado) y no hay error en consola.


Exponer tokens como utilidades Tailwind (opcional)

Si querés usar bg-primary, text-mint, etc. como clases de Tailwind:

@theme inline {
  --color-background: var(--background);
  --color-foreground: var(--foreground);
  --color-primary: var(--primary);
  --color-card: var(--card);
  --color-success: var(--success);
  --color-warning: var(--warning);
  --color-critical: var(--critical);
  --color-info: var(--info);
  --color-mint: var(--mint);
  --color-ink: var(--ink);
  --color-sidebar: var(--sidebar);
}

Por qué se necesita tailwindcss-animate

Los overlays (Combobox, DatePicker, ConfirmDialog, Sheet, Toast) usan clases como animate-in, fade-in-0, zoom-in-95 que pertenecen a este plugin. Sin él, las animaciones no funcionan.


Modo oscuro con Tailwind

Para activar el modo oscuro vía clase en el <html>:

/* En tu styles.css, después del @import de Tailwind */
@custom-variant dark (&:is(.dark *));
// En tu app, donde quieras togglear
document.documentElement.classList.toggle("dark");

Roadmap

  • [x] v0.0.1 — Tokens: colores, tipografía, espaciado, sombras, motion, layers
  • [x] v0.1.0 — Primitivos, formularios, DataTable, overlays base
  • [x] v0.2.0 — Layout: Shell, Page, PageHeader, FilterBar, Breadcrumb
  • [x] v0.3.0 — Datos: KPICard, ProgressBar, PillTabs, Sparkline, Stepper, Timeline
  • [x] v0.4.0 — Feedback: EmptyState, ErrorPage, ErrorBoundary, LoadingPage, ConfirmDialog
  • [x] v1.0.0 — Primera versión estable como librería npm reutilizable
  • [x] Docs visuales — Ladle / catálogo interactivo (pnpm ladle)

Documentación

| Recurso | Contenido | | -------------------------------------------- | -------------------------------------- | | docs/COMPONENTS.md | Catálogo de exports | | MIGRATION.md | Adoptar el DS en un producto existente | | docs/PUBLISHING.md | Versionado y publicación | | CHANGELOG.md | Historial de versiones |

Contribuir

Ver CONTRIBUTING.md para el proceso completo: setup del entorno, convenciones de código, cómo agregar un componente y el proceso de PR.

Los cambios de API requieren un changeset: pnpm changeset.

Catálogo visual (Ladle)

Documentación interactiva del design system — foundations, componentes, patterns y landing.

pnpm ladle          # servidor de desarrollo (http://localhost:61000)
pnpm ladle:build    # build estático en build/
pnpm ladle:preview  # previsualizar el build

El catálogo vive en ladle/ y consume los tokens de src/tokens/. Para regenerar desde ejemplo ladle/:

node scripts/convert-ladle.mjs

Publicar en Vercel

El catálogo se despliega como sitio estático. La config está en vercel.json.

Primera vez (conectar GitHub → Vercel):

  1. Sube el repo a GitHub (achs-cl/achs-ds-backoffice o tu fork).
  2. En vercel.com/newImport Git Repository → elige el repo.
  3. Vercel lee vercel.json automáticamente. No cambies build ni output salvo que sepas por qué:
    • Build command: pnpm ladle:build
    • Output directory: build
    • Install command: pnpm install --frozen-lockfile
  4. Deploy. Cada push a la rama de producción (p. ej. main) redeploya el catálogo.

URL del catálogo: la que asigne Vercel (*.vercel.app) o tu dominio custom. El story por defecto es el catálogo completo; también puedes usar ?story=catalog--catalog.

Nota: el paquete npm (pnpm builddist/) es independiente del catálogo. Vercel solo publica Ladle; no publica el paquete a GitHub Packages.

Release (Changesets)

El workflow .github/workflows/release.yml abre un PR de versión cuando hay archivos en .changeset/. Si falla con:

GitHub Actions is not permitted to create or approve pull requests

activa en el repo Settings → Actions → General → Workflow permissions:

  1. Read and write permissions
  2. Marca Allow GitHub Actions to create and approve pull requests

Luego re-ejecuta el workflow desde la pestaña Actions (o haz un push que toque .changeset/).

Si aún no publicas el paquete npm, puedes ignorar ese workflow: no afecta el CI ni el deploy de Vercel.