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

@enelar-esp/ui

v0.1.49

Published

Biblioteca oficial de componentes UI, plantillas y sistemas corporativos de diseño para **Enelar S.A.S.** Esta librería provee una suite completa de componentes interactivos, accesibles y consistentes bajo los lineamientos corporativos.

Readme

🎨 @enelar-esp/ui

Biblioteca oficial de componentes UI, plantillas y sistemas corporativos de diseño para Enelar S.A.S. Esta librería provee una suite completa de componentes interactivos, accesibles y consistentes bajo los lineamientos corporativos.

Todos los componentes son Standalone y compatibles con Angular 17+ (Angular 21 recomendado).


✨ Características Clave

  • Diseño Atómico (Atomic Design): Estructura jerárquica clara que divide la interfaz en Átomos, Moléculas, Organismos y Páginas.
  • Design Tokens Core: Variables semánticas HSL de color, tipografía, espaciado y bordes regulados de forma centralizada.
  • Agnóstico a utilidades CSS (Zero-Tailwind Dependency): Compilado usando Vanilla CSS puro. El proyecto que instala esta librería no requiere Tailwind CSS para que los componentes se rendericen y funcionen correctamente.
  • Soporte de Temas (Claro / Oscuro): Inyección de temas semánticos nativos y reactivos controlados por CSS custom properties.
  • Páginas Dinámicas y Componentes Complejos: Contiene asistentes avanzados como DynamicForm (formularios reactivos basados en esquemas JSON), DynamicTable (ordenación y paginación reactiva) y DynamicCrud (operaciones CRUD completas listas para conectar a APIs).

🚀 Instalación y Configuración

1. Instalar la librería vía NPM

Ejecuta el siguiente comando en la raíz de tu proyecto Angular:

npm install @enelar-esp/ui

2. Configurar los Estilos Globales

Para inyectar los Design Tokens, la tipografía corporativa y el soporte de temas claro/oscuro en tu aplicación, importa la hoja de estilos en tu archivo global styles.scss:

/* En tu styles.scss */
@import "@enelar-esp/ui/src/lib/themes/_theme.scss";

O si utilizas la configuración de tu archivo angular.json:

"styles": [
  "src/styles.scss",
  "node_modules/@enelar-esp/ui/src/lib/themes/_theme.scss"
]

3. Integración con Tailwind CSS (Opcional)

Si tu proyecto destino utiliza Tailwind CSS y deseas consumir componentes avanzados (como DynamicForm, LoginPanel o DashboardPage), debes indicarle a Tailwind que escanee los archivos compilados de la librería agregando la ruta del paquete al arreglo content de tu archivo tailwind.config.js:

module.exports = {
  content: [
    "./src/**/*.{html,ts}",
    "./node_modules/@enelar-esp/ui/**/*.{html,ts,mjs}" // <-- Agregar esta línea
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

💻 Ejemplo de Uso de Componentes

Dado que todos los componentes de @enelar-esp/ui son Standalone, debes importarlos individualmente en el componente donde los vayas a usar:

Código de Componente (app.component.ts)

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { 
  EnlButtonComponent, 
  EnlBadgeComponent, 
  EnlSkeletonComponent 
} from '@enelar-esp/ui';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [
    CommonModule, 
    EnlButtonComponent, 
    EnlBadgeComponent, 
    EnlSkeletonComponent
  ],
  templateUrl: './app.component.html'
})
export class AppComponent {
  isLoading = false;
  
  ejecutarAccion() {
    this.isLoading = true;
    setTimeout(() => this.isLoading = false, 2000);
  }
}

Código de Plantilla (app.component.html)

<div style="padding: 24px; display: flex; flex-direction: column; gap: 16px;">
  <!-- Botón Modular -->
  <enl-button 
    variant="primary" 
    size="md" 
    [loading]="isLoading" 
    (click)="ejecutarAccion()">
    Guardar Cambios
  </enl-button>

  <!-- Distintivo/Badge Corporativo -->
  <enl-badge variant="success" size="md">
    Servicio Activo
  </enl-badge>

  <!-- Marcadores de Carga (Skeletons) -->
  @if (isLoading) {
    <div style="display: flex; flex-direction: column; gap: 8px;">
      <enl-skeleton shape="line" width="60%" height="16px"></enl-skeleton>
      <enl-skeleton shape="rectangle" width="100%" height="40px"></enl-skeleton>
    </div>
  }
</div>

🛠️ Catálogo de Componentes Disponibles

🧬 Átomos (Atoms)

  • enl-typography: Control de jerarquías de texto tipográfico.
  • enl-button: Botón interactivo con variantes primary, secondary, success, warning, error, ghost y estados de carga.
  • enl-spinner: Indicador circular de carga.
  • enl-avatar: Círculo de representación de perfil mediante iniciales o imagen.
  • enl-badge: Etiquetas de estados semánticos.
  • enl-input, enl-input-number, enl-input-otp, enl-textarea: Inputs para captura de datos tipados y numéricos.
  • enl-checkbox, enl-radio, enl-toggle-switch: Selectores de estado binarios y múltiples.
  • enl-skeleton: Bloques shimmer animados para simular estados de carga inicial de componentes.

🧪 Moléculas (Molecules)

  • enl-form-field: Envoltura estructural con etiquetas de campo y control de errores integrados.
  • enl-search-input: Barra de búsqueda reactiva con limpieza y debounce.
  • enl-date-picker: Calendario modal para selección de fechas de alta precisión.
  • enl-icon-field: Campos de entrada enriquecidos con prefijos/sufijos de iconos interactivos.
  • enl-multi-select: Selector dropdown multiselección con filtrado inteligente.
  • enl-page-header: Cabecera de página con títulos dinámicos y descripciones semánticas.
  • enl-stat-card: Tarjeta compacta para métricas clave de sistema y reportes.
  • enl-skeleton-card: Tarjeta estructurada con shimmer animado prefabricado para perfiles u objetos.

🏢 Organismos (Organisms)

  • enl-navbar: Barra superior global de navegación del sistema.
  • enl-sidebar: Barra de navegación colapsable y responsiva con perfiles embebidos.
  • enl-dynamic-form: Generador reactivo de formularios completos mediante esquemas de configuración JSON.
  • enl-dynamic-table: Tabla inteligente con ordenamiento, templates por columna y paginación.
  • enl-dynamic-crud: Tablero de administración de recursos dinámico con búsqueda, creación, edición y eliminación de datos automática.
  • enl-confirm-dialog: Diálogo modal de confirmación crítica de flujos.
  • enl-toast-container / EnlToastService: Notificaciones toast de estados semánticos no bloqueantes.

📖 Licencia

Uso exclusivo y propietario de Enelar S.A.S. Prohibida su distribución no autorizada.