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

destiny-kit-ui

v0.1.1

Published

Librería de Web Components del Design System, construida con Stencil.

Readme

destiny-kit-ui

Librería de Web Components del Design System, construida con Stencil. Los componentes son estándar (custom elements), por lo que funcionan en Astro, React, Angular, Vue, HTML plano o cualquier entorno interno.

Scripts

| Comando | Descripción | | ----------------- | ---------------------------------------------------- | | pnpm build | Compila la librería (dist/, loader/) | | pnpm dev | Build en watch + playground local (src/index.html) | | pnpm test | Pruebas unitarias (spec) con el runner de Stencil | | pnpm test:watch | Pruebas en modo watch | | pnpm lint | ESLint + Stylelint | | pnpm typecheck | Verificación de tipos con tsc |

Consumo desde una aplicación

// 1. Carga los estilos globales (incluyen los tokens, una sola vez)
import 'destiny-kit-ui/destiny-kit-ui.css';

// 2a. Registro global con lazy loading (recomendado para apps)
import { defineCustomElements } from 'destiny-kit-ui/loader';
defineCustomElements();

// 2b. O import individual tree-shakeable (bundlers modernos)
import 'destiny-kit-ui/components/ds-button';
<ds-button variant="primary" size="md">Guardar</ds-button>

Componentes

| Tag | Descripción | | ------------ | -------------------------------------------------------------------------- | | ds-button | Botón base, asociado a formularios (formAssociated). | | ds-link | Enlace o botón-enlace según reciba href. | | ds-alert | Retroalimentación no-modal de un estado del sistema. | | ds-gallery | Galería de imágenes: mosaico, diálogo con filtros y visor a pantalla completa. |

La API de cada uno vive en el readme.md de su carpeta, generado por Stencil a partir del código.

Crear un componente nuevo

  1. Crea la carpeta src/components/ds-<nombre>/ con:
    • ds-<nombre>.tsx — lógica y template (decorador @Component, styleUrl a SCSS, shadow: true).
    • ds-<nombre>.scss — estilos consumiendo tokens vía var(--ds-*) y mixins de src/styles/.
    • ds-<nombre>.spec.ts — pruebas unitarias con newSpecPage.
    • ds-<nombre>.stories.ts — documentación y casos de uso en Storybook.
  2. Exporta el componente en src/index.ts.
  3. pnpm build regenera src/components.d.ts y el readme.md del componente.

Componentes compuestos

Cuando una pieza de UI tiene varias capas que siempre viajan juntas (como ds-gallery: mosaico + diálogo + visor), no se parte en varios custom elements: se mantiene un solo tag y por dentro se modulariza con componentes funcionales — funciones que devuelven JSX y se renderizan en el shadow root del componente, sin registrar un elemento propio.

ds-gallery/
├─ ds-gallery.tsx          # el único @Component: estado y orquestación
├─ ds-gallery.scss         # :host y sus custom properties locales
├─ parts/
│  ├─ gallery-mosaic.tsx   # componente funcional + su hoja de estilos
│  ├─ gallery-mosaic.scss
│  └─ …
├─ gallery.types.ts        # contratos de datos compartidos
├─ gallery.utils.ts        # helpers puros (parseo, foco, scroll)
├─ ds-gallery.spec.ts
└─ ds-gallery.stories.ts

Las hojas de cada pieza se declaran juntas en styleUrls, y Stencil las concatena en el mismo shadow root:

@Component({
  tag: 'ds-gallery',
  styleUrls: ['ds-gallery.scss', 'parts/gallery-mosaic.scss', 'parts/gallery-dialog.scss'],
  shadow: true,
})

Así el consumidor instala, versiona y tematiza una sola unidad, y el estado compartido (foco, teclado, bloqueo de scroll) se resuelve en un solo lugar.

Convenciones

  • Prefijo de tag: ds-.
  • Clases internas: BEM (ds-button__label, ds-button--primary).
  • Nada de colores/espaciados hardcodeados: siempre var(--ds-*) de los tokens internos.
  • Un componente = una carpeta con código, estilos, pruebas y stories colocalizados.
  • Los archivos de un componente compuesto (parts/, *.types.ts, *.utils.ts) viven en esa misma carpeta.