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

@cmedinavera/design-system

v1.0.6

Published

Enterprise UI Component Library for Acme Corporation, built with Angular 21, PrimeNG 21, and Tailwind CSS v4.

Readme

🎨 @cmedinavera/design-system

npm version License Angular PrimeNG

@cmedinavera/design-system es la biblioteca oficial de componentes UI empresariales de Acme Corporation. Diseñada bajo estándares de excelencia visual, accesibilidad y máxima flexibilidad responsiva, integrando de forma nativa Angular 21, PrimeNG 21 y Tailwind CSS v4.


✨ Características Principales

  • 🧩 Arquitectura Standalone: Todos los componentes son completamente modulares e independientes para minimizar el bundle final.
  • 🌓 Modo Oscuro Integrado: Transición automática y armónica entre temas mediante variables de colores semánticos (text-surface-700, bg-surface-0, etc.).
  • 📱 Rejilla y Flujo Responsivo: Componentes estructurales avanzados como <acme-stack> que adaptan su layout automáticamente a pantallas móviles.
  • Accesibilidad de Nivel WAI-ARIA: Inyección de directivas ARIA nativas, asociación semántica de campos de formulario e interactividad fluida con teclado.
  • 🚀 CVA Compilado: Todos los componentes interactivos de formulario implementan ControlValueAccessor de Angular para una vinculación impecable y reactiva.

🌈 Sistema Cromático (Paleta de Colores)

Nuestra paleta de colores aprovecha la arquitectura HSL dinámica de Tailwind CSS v4 y PrimeNG 21, lo que garantiza transiciones de Modo Claro a Modo Oscuro fluidas y consistentes.

1. Colores Semánticos de Severidad (Estados)

Cada severidad está enlazada automáticamente a un conjunto de tokens CSS que controlan el color de fondo, el borde y el texto según el estado de la UI:

| Severidad | Modo Claro (Fondo / Texto) | Modo Oscuro (Fondo / Texto) | Propósito y Uso | | :--- | :--- | :--- | :--- | | primary | #6366F1 (Indigo-500) | #818CF8 (Indigo-400) | Marca corporativa, acciones principales. | | secondary | #64748B (Slate-500) | #94A3B8 (Slate-400) | Acciones secundarias o auxiliares. | | success | #22C55E (Green-500) | #4ADE80 (Green-400) | Validaciones positivas, estados completados. | | info | #3B82F6 (Blue-500) | #60A5FA (Blue-400) | Textos de ayuda, información neutral. | | warn | #F59E0B (Amber-500) | #FBBF24 (Amber-400) | Advertencias de seguridad o precaución. | | danger | #EF4444 (Red-500) | #F87171 (Red-400) | Errores críticos, acciones destructivas. |


2. Escala de Grises y Superficies (Surfaces)

Para garantizar la consistencia en los fondos y bordes de las tarjetas y modales, utilizamos la escala semántica surface que se adapta de forma armónica al tema actual:

  💡 Modo Claro (Fondo Brillante):
  [Surface 0] ------------> [Surface 100] ------------> [Surface 200] ------------> [Surface 950]
  #FFFFFF (Fondo)           #F1F5F9 (Separadores)       #E2E8F0 (Bordes)           #0F172A (Texto)

  🌙 Modo Oscuro (Fondo Profundo):
  [Surface 950] ----------> [Surface 900] ------------> [Surface 800] ------------> [Surface 50]
  #090D16 (Fondo)           #0F172A (Separadores)       #1E293B (Bordes)           #F8FAFC (Texto)

Clases Semánticas Recomendadas:

  • Fondo de la aplicación: bg-surface-0 dark:bg-surface-950
  • Tarjetas y Paneles: bg-surface-0 dark:bg-surface-900 border border-surface-200 dark:border-surface-800
  • Textos Principales: text-surface-900 dark:text-surface-50
  • Labels y Textos Secundarios: text-surface-700 dark:text-surface-300
  • Subtextos y Ayudas: text-surface-500 dark:text-surface-400

📦 Instalación

Instala el paquete y sus dependencias requeridas ejecutando en tu terminal:

npm install @cmedinavera/design-system primeng primeicons

⚙️ Configuración Global

1. Importación de Estilos y Temas

En el archivo de estilos globales de tu aplicación (e.g., styles.scss), importa las librerías necesarias de PrimeNG y configura la tipografía corporativa Lato:

@import "primeicons/primeicons.css";

@theme {
  --font-family-sans: "Lato", "Inter", sans-serif;
}

/* Configuración de transiciones de color globales y soporte Dark Mode */
html {
  transition: background-color 0.2s ease, border-color 0.2s ease;
  scroll-behavior: smooth;
}

2. Importación de Componentes en Angular

Dado que la biblioteca es totalmente Standalone, puedes importar selectivamente los componentes individuales en tus controladores Angular:

import { Component } from '@angular/core';
import { 
  StackComponent, 
  InputComponent, 
  LabelComponent, 
  ButtonComponent 
} from '@cmedinavera/design-system';

@Component({
  selector: 'app-mi-formulario',
  standalone: true,
  imports: [StackComponent, InputComponent, LabelComponent, ButtonComponent],
  templateUrl: './mi-formulario.html'
})
export class MiFormularioComponent {
  // ...
}

🛠️ Ejemplos Prácticos y Casos de Uso Comunes

Ejemplo 1: Tarjeta Contenedora Responsiva con Soporte para Modo Oscuro

Una tarjeta corporativa que adapta su tipografía, fondos y bordes automáticamente cuando cambia el tema:

<div class="card p-6 rounded-2xl bg-surface-0 dark:bg-surface-900 border border-surface-200 dark:border-surface-800 shadow-sm flex flex-col gap-4">
  <acme-stack direction="row" align="center" gap="1rem" [responsive]="false">
    <acme-avatar image="assets/usuario.png" size="large" shape="circle"></acme-avatar>
    <acme-stack direction="column" gap="0.25rem" [responsive]="false" class="flex-1">
      <h3 class="text-lg font-bold text-surface-900 dark:text-surface-50 m-0">Carlos Medina Vera</h3>
      <span class="text-xs text-surface-500 dark:text-surface-400">[email protected]</span>
    </acme-stack>
    <acme-tag severity="success" value="Administrador"></acme-tag>
  </acme-stack>
  
  <acme-divider></acme-divider>
  
  <p class="text-sm text-surface-700 dark:text-surface-300 leading-relaxed m-0">
    Bienvenido al panel del Sistema de Diseño del HospitalHIS. Utiliza las variables y atómicos corporativos para asegurar consistencia visual en todos tus microfrontends.
  </p>
</div>

Ejemplo 2: Formulario Complejo y Altamente Accesible

Layout de formulario reactivo en cuadrícula responsiva, utilizando textos de ayuda asociados por accesibilidad:

<div class="p-8 bg-surface-0 dark:bg-surface-950 rounded-xl border border-surface-200 dark:border-surface-800 flex flex-col gap-6">
  <div class="text-xl font-bold text-surface-900 dark:text-surface-50">Registro de Paciente</div>
  
  <acme-stack direction="column" gap="1.5rem" [responsive]="false">
    <!-- Fila 1: Nombre y Apellido -->
    <acme-stack direction="row" gap="1.5rem" [responsive]="true">
      <div class="flex-1 flex flex-col gap-2">
        <acme-label for="nombre-input" [required]="true">Nombre(s)</acme-label>
        <acme-input id="nombre-input" [floatLabel]="false" placeholder="Ej. Carlos"></acme-input>
      </div>
      <div class="flex-1 flex flex-col gap-2">
        <acme-label for="apellido-input" [required]="true">Apellido(s)</acme-label>
        <acme-input id="apellido-input" [floatLabel]="false" placeholder="Ej. Medina"></acme-input>
      </div>
    </acme-stack>
    
    <!-- Fila 2: Documento e Interruptor -->
    <acme-stack direction="row" gap="1.5rem" [responsive]="true">
      <div class="flex-1 flex flex-col gap-2">
        <acme-label for="rut-input">Cédula o Identificación</acme-label>
        <acme-input id="rut-input" [floatLabel]="false" placeholder="12345678-9" helpText="Ingrese el documento sin puntos."></acme-input>
      </div>
      <acme-stack direction="row" align="center" gap="1rem" [responsive]="false" class="flex-1 justify-between pt-6">
        <span class="text-sm font-medium text-surface-700 dark:text-surface-300">¿Requiere Asistencia Médica?</span>
        <acme-toggle-switch [(ngModel)]="requiereAsistencia"></acme-toggle-switch>
      </acme-stack>
    </acme-stack>
    
    <!-- Botones de Acción -->
    <acme-stack direction="row" gap="1rem" class="justify-end w-full pt-4" [responsive]="true">
      <acme-button label="Cancelar" severity="secondary" variant="text" class="w-full md:w-auto"></acme-button>
      <acme-button label="Guardar Paciente" icon="pi pi-check" severity="primary" class="w-full md:w-auto"></acme-button>
    </acme-stack>
  </acme-stack>
</div>

Ejemplo 3: Tabla de Datos Avanzada (acme-table)

Componente de visualización modular y paginado con soporte para plantillas personalizadas:

<acme-table [value]="productos" [paginator]="true" [rows]="5" styleClass="p-datatable-striped">
  <ng-template #header>
    <tr>
      <th>Código</th>
      <th>Nombre</th>
      <th>Categoría</th>
      <th>Precio</th>
    </tr>
  </ng-template>
  <ng-template #body let-product>
    <tr>
      <td>{{ product.code }}</td>
      <td>{{ product.name }}</td>
      <td>{{ product.category }}</td>
      <td>{{ product.price | currency }}</td>
    </tr>
  </ng-template>
</acme-table>

Ejemplo 4: Componentes de Superposición y Overlays (acme-dialog, acme-popover, acmeTooltip)

Muestra cómo integrar modales con footer personalizado, popovers reactivos cargados con tablas y la directiva de tooltips sobre botones o inputs de texto:

<!-- Botones para disparar overlays -->
<acme-stack direction="row" gap="1rem" [responsive]="true">
  <acme-button label="Abrir Diálogo de Confirmación" (onClick)="dialogVisible = true" acmeTooltip="Haga clic para abrir la ventana modal"></acme-button>
  <acme-button label="Ver Detalles Rápidos" severity="secondary" (onClick)="pop.toggle($event)" acmeTooltip="Haga clic para ver detalles contextuales"></acme-button>
</acme-stack>

<!-- 1. Diálogo Modal Premium -->
<acme-dialog header="Confirmar Registro de Paciente" [(visible)]="dialogVisible" [modal]="true" [style]="{ width: '450px' }">
  <p class="text-sm text-surface-700 dark:text-surface-300 leading-relaxed m-0">
    ¿Está seguro de que desea guardar los datos ingresados en el expediente de este paciente? Esta acción registrará la fecha y hora actual en la bitácora.
  </p>
  <ng-template #footer>
    <acme-button label="Cancelar" severity="secondary" [text]="true" (onClick)="dialogVisible = false"></acme-button>
    <acme-button label="Confirmar Registro" severity="success" (onClick)="dialogVisible = false"></acme-button>
  </ng-template>
</acme-dialog>

<!-- 2. Popover Ligero Contextual -->
<acme-popover #pop [style]="{ width: '280px' }">
  <div class="p-4 flex flex-col gap-2">
    <h4 class="font-bold text-surface-900 dark:text-surface-50 m-0">Información del Sistema</h4>
    <p class="text-xs text-surface-600 dark:text-surface-400 m-0">
      El estado actual de la red de microfrontends es <strong>Operativo (100%)</strong>. No se registran retrasos en el API gateway.
    </p>
  </div>
</acme-popover>

🧭 Catálogo Completo de Componentes (71 Componentes)

Todos los componentes son de arquitectura Standalone (se importan de forma individual y bajo demanda). Están clasificados en las siguientes 7 categorías estructurales:

1. Layout & Estructura (11 Componentes)

Diseñados para estructurar y segmentar el flujo visual de tus interfaces:

  • <acme-stack>: Flexbox inteligente que gestiona la dirección (fila/columna), espaciado (gap) y alineación, con soporte para reordenamiento responsivo en dispositivos móviles.
  • <acme-panel>: Panel tipo tarjeta colapsable ideal para secciones independientes de información.
  • <acme-accordion>: Acordeón para colapsar y expandir secciones de datos de forma compacta.
  • <acme-tabs>: Sistema de navegación por pestañas superiores.
  • <acme-fieldset>: Recuadro delimitador con título (leyenda) integrado en el borde superior, con soporte opcional de colapso.
  • <acme-toolbar>: Barra de herramientas dividida en secciones para proyectar botones y controles (start, center, end).
  • <acme-divider>: Separador visual responsivo que puede ser vertical u horizontal con contenido centrado.
  • <acme-card>: Contenedor principal de tarjetas con bordes redondeados y transiciones premium.
  • <acme-card-header>: Cabecera estructurada para albergar títulos, iconos o acciones de tarjetas.
  • <acme-card-body>: Cuerpo central para el contenido principal de la tarjeta.
  • <acme-card-footer>: Pie de página autoalineable diseñado para metadatos o contadores de tarjetas.

2. Atómicos & Formularios (19 Componentes)

Controles interactivos de formularios que implementan ControlValueAccessor (CVA) para un enlace de datos reactivo y bidireccional impecable:

  • <acme-input>: Entrada de texto estándar con soporte para placeholders, iconos, etiquetas y textos de ayuda accesibles.
  • <acme-input-number>: Entrada dedicada a números con formato de moneda, porcentajes o decimales específicos.
  • <acme-textarea>: Campo de comentarios de múltiples líneas ajustable.
  • <acme-label>: Etiqueta para asociar controles interactivos con indicador visual de obligatoriedad ([required]="true").
  • <acme-checkbox>: Casilla de confirmación y selección múltiple.
  • <acme-radio>: Selector exclusivo de opciones circulares.
  • <acme-select>: Menú desplegable para selección individual de datos (Combobox).
  • <acme-multiselect>: Menú desplegable para selección múltiple de datos.
  • <acme-datepicker>: Calendario corporativo responsivo para selección de fechas sencillas o rangos de fecha.
  • <acme-calendar>: Selector de fechas y horas avanzado, con soporte para vistas inline, selección de rangos, horas y selección múltiple.
  • <acme-autocomplete>: Entrada de texto predictiva con filtrado interactivo en tiempo real.
  • <acme-toggle-switch>: Interruptor de estado binario deslizante (tipo switch de iOS/Material).
  • <acme-toggle-button>: Botón plano que retiene estados activos/inactivos de manera visual.
  • <acme-select-button>: Grupo de botones planos alineados donde solo uno puede estar seleccionado.
  • <acme-rating>: Calificador en escala de estrellas.
  • <acme-slider>: Barra de selección de rangos numéricos continuos.
  • <acme-colorpicker>: Selector y mezclador interactivo de color.
  • <acme-knob>: Dial giratorio de control numérico circular.
  • <acme-fileupload>: Cargador de archivos con soporte para arrastrar y soltar (drag and drop), validación de tamaños y formatos, y visualización de progreso.

3. Botones & Acciones (3 Componentes)

Componentes diseñados para disparar eventos y controlar flujos:

  • <acme-button>: Botón plano corporativo con severidades semánticas (primary, success, danger, etc.), soporte de carga ([loading]="true") y estilos de borde.
  • <acme-button-group>: Contenedor para alinear y fusionar bordes de múltiples botones en un solo bloque visual.
  • <acme-split-button>: Botón combinado con una acción directa a la izquierda y un disparador de menú dropdown a la derecha.

4. Grillas & Visualización de Datos (11 Componentes)

Componentes de alto rendimiento diseñados para renderizar y estructurar conjuntos complejos de información:

  • <acme-table>: Tabla de datos empresariales con paginador responsivo, plantillas flexibles (#header, #body) y estilos de filas alternas.
  • <acme-dataview>: Visualizador dinámico que transforma listas de objetos en cuadrículas de tarjetas responsivas.
  • <acme-list-item>: Elemento de visualización reutilizable tipo tarjeta o fila para productos, adaptado para listas o grillas con soporte completo para modo claro/oscuro y stock.
  • <acme-tree>: Visualizador modular para explorar estructuras de datos en forma de árbol colapsable.
  • <acme-treetable>: Tabla combinada con jerarquías de árbol que permite colapsar subfilas y subcarpetas en tiempo real.
  • <acme-picklist>: Lista de transferencia dinámica bidireccional para mover elementos entre columnas de origen y destino con controles y drag & drop.
  • <acme-orderlist>: Lista interactiva para ordenar y priorizar colecciones de elementos con botones de desplazamiento integrados.
  • <acme-chart>: Visualizador y estructurador de gráficos estadísticos (barras, líneas, tarta, rosca, radar, área polar) de alto rendimiento basado en Chart.js.
  • <acme-timeline>: Línea de tiempo responsiva para visualizar flujos clínicos u hojas de ruta secuenciales en orden cronológico.
  • <acme-crud>: Plantilla/componente completo de CRUD (Crear, Leer, Actualizar, Borrar) para administración de catálogos y datos.
  • <acme-dashboard>: Dashboard completo responsivo que integra estadísticas, gráficos, tabla de ventas recientes y notificaciones.

5. Visuales, Estados & Feedback (13 Componentes)

Elementos informativos rápidos y componentes para mejorar la experiencia de usuario en carga:

  • <acme-avatar>: Caja circular u cuadrada para renderizar imágenes, iconos o iniciales del perfil del usuario.
  • <acme-avatar-group>: Contenedor para apilar múltiples avatares superpuestos en fila (ideal para equipos colaborativos).
  • <acme-badge>: Pequeñas insignias numéricas de estado de color asociadas a severidades.
  • <acme-overlay-badge>: Insignia especial diseñada para superponerse automáticamente en la esquina de iconos o avatares (muy útil para notificaciones sin leer).
  • <acme-tag>: Píldoras estáticas de estado de severidad (success para Completado, danger para Cancelado, etc.).
  • <acme-chip>: Etiquetas tipo tag interactivas y compactas, ideales para filtros aplicados con soporte opcional de eliminación (removable="true").
  • <acme-progressbar>: Barra de progreso porcentual estática, animada o de carga indeterminada.
  • <acme-skeleton>: Cajas animadas de color gris que simulan la estructura del contenido mientras se cargan los datos reales (Skeleton Screen Loader).
  • <acme-toast>: Contenedor de notificaciones emergentes (Toast) con estilos premium para severidades de éxito, información, advertencias, error, secundario y contraste.
  • <acme-message>: Barra de mensaje estática en línea con el flujo de la UI, con soporte premium para severidades.
  • <acme-carousel>: Carrusel corporativo premium y responsivo para deslizar e interactuar con listas de tarjetas u objetos.
  • <acme-galleria>: Galería interactiva avanzada para visualizar álbumes de fotos o imágenes con miniaturas y controles táctiles.
  • <acme-image>: Visualizador dinámico de imágenes individuales con soporte de carga diferida y modo de zoom flotante (Preview).

6. Navegación & Menús (8 Componentes)

Diseñados para guiar y estructurar el flujo de navegación de los usuarios a través del sistema:

  • <acme-menubar>: Barra de navegación superior responsiva y horizontal con soporte para submenús e iconos.
  • <acme-breadcrumb>: Hilo de Ariadna responsivo para indicar la ubicación jerárquica actual en flujos clínicos.
  • <acme-menu>: Menú estándar vertical de enlaces o acciones, con soporte para renderizarse en línea o como ventana flotante (popup).
  • <acme-tieredmenu>: Menú de niveles anidados con submenús laterales que se despliegan de forma interactiva.
  • <acme-contextmenu>: Menú contextual emergente de alta fidelidad que se activa mediante clic derecho sobre un objetivo definido.
  • <acme-megamenu>: Menú gigante de navegación organizado en una cuadrícula estructurada de múltiples columnas.
  • <acme-panelmenu>: Menú acordeón colapsable vertical, idóneo para barras laterales de control y navegación principal.
  • <acme-stepper>: Indicador y controlador lineal de pasos interactivos (wizard), ideal para guiar procesos secuenciales estructurados.

7. Componentes de Superposición / Overlays (6 Componentes)

Diseñados para desplegar paneles flotantes, notificaciones integradas y ventanas emergentes enriquecidas:

  • <acme-dialog>: Ventana de diálogo modal o no-modal con cabecera, pie de página flexible y redimensionado responsivo.
  • <acme-drawer>: Panel colapsable deslizante (cajón) desde cualquier extremo del viewport (izquierda, derecha, arriba, abajo o pantalla completa).
  • <acme-popover>: Contenedor emergente ligero de posicionamiento contextual absoluto activado al hacer clic.
  • <acme-confirm-popup>: Diálogo flotante simplificado para confirmaciones rápidas en línea (ConfirmPopup).
  • <acme-confirm-dialog>: Diálogo modal simplificado para confirmaciones críticas integradas (ConfirmDialog).
  • acmeTooltip: Directiva premium (Tooltip) que inyecta descripciones flotantes dinámicas en el costado deseado del host.

🚀 Scripts de Desarrollo

Si estás contribuyendo al desarrollo del design system:

  • Compilar la Librería:
    npm run build:lib
  • Ejecutar Storybook en Entorno Local:
    npm run storybook
  • Compilar Storybook Estático:
    npm run build-storybook
  • Aplicar Formato Estándar (Prettier):
    npm run format

📄 Licencia

Este proyecto está bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.