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

snk-data-grid

v1.1.5

Published

`snk-data-grid` es un componente de grid (tabla de datos) potente, reactivo y altamente personalizable para aplicaciones Angular. Ofrece funcionalidades avanzadas como filtrado tipo checklist (incluso en columnas agrupadas), ordenamiento, agrupación por a

Readme

snk-data-grid

snk-data-grid es un componente de grid (tabla de datos) potente, reactivo y altamente personalizable para aplicaciones Angular. Ofrece funcionalidades avanzadas como filtrado tipo checklist (incluso en columnas agrupadas), ordenamiento, agrupación por arrastrar y soltar (Drag & Drop), edición en línea, exportación de datos (Excel, CSV, JSON), subtotales y totales generales automáticos, y plantillas personalizadas para celdas.


Características Principales

  • Filtro Checklist (Tipo Excel): Filtrado interactivo mediante selección múltiple de valores únicos. Si no hay selección, muestra todos los registros; al seleccionar uno o más, filtra por los valores elegidos. Cuenta con buscador interno integrado.
  • Filtro de Texto por Columna: Permite buscar y filtrar registros escribiendo texto en un campo de entrada posicionado debajo de las cabeceras. Se puede activar de forma global o individual por columna.
  • Agrupación Dinámica: Agrupa filas por múltiples columnas arrastrando cabeceras a la zona superior de agrupación o configurándolas por defecto.
  • Ordenación (Sorting): Ordenamiento ascendente y descendente por columnas configurables.
  • Edición en Línea: Edición directa en celda con doble clic, compatible con inputs de texto, números y fechas, y emisión de eventos de actualización.
  • Reordenamiento de Filas: Arrastrar y soltar filas para cambiar su orden mediante Drag & Drop.
  • Agregados y Totales: Cálculo automático de sumas y conteos para subtotales de grupo y total general.
  • Exportación: Descarga de datos en formato Excel (conservando la estructura del árbol de grupos), CSV y JSON.
  • Plantillas Personalizables: Renderizado de contenido a medida usando directivas Angular mediante ng-template.

Instalación e Importación

Asegúrate de importar el componente y la directiva de plantilla en tu componente standalone:

import { Component } from '@angular/core';
import { SnkDataGrid, SnkDataGridTemplateDirective, SnkGridColumnDef, RowReorderEvent } from 'snk-data-grid';

@Component({
  selector: 'app-mi-tabla',
  standalone: true,
  imports: [SnkDataGrid, SnkDataGridTemplateDirective],
  templateUrl: './mi-tabla.component.html'
})
export class MiTablaComponent {
  // Lógica del componente...
}

Ejemplo Completo de Implementación

1. Definición en TypeScript (component.ts)

Define la configuración de las columnas y la señal con los datos.

import { Component, signal } from '@angular/core';
import { SnkGridColumnDef, RowReorderEvent } from 'snk-data-grid';

@Component({
  selector: 'app-directorio-empleados',
  templateUrl: './directorio-empleados.component.html'
})
export class DirectorioEmpleadosComponent {

  // 1. Configuración de Columnas
  columnas = signal<SnkGridColumnDef[]>([
    { field: 'id', header: 'ID', type: 'number', width: '80px', sortable: true },
    { field: 'nombre', header: 'Nombre Completo', type: 'string', filterable: true, sortable: true, editable: true, showTextFilter: true },
    { field: 'departamento', header: 'Departamento', type: 'string', filterable: true, groupable: true, defaultGroupOrder: 1 },
    { field: 'cargo', header: 'Cargo', type: 'string', filterable: true },
    { field: 'salario', header: 'Salario', type: 'number', aggregate: 'sum', width: '120px' },
    { field: 'estado', header: 'Estado', type: 'string', templateName: 'estadoTpl', width: '120px', filterable: true }
  ]);

  // 2. Datos
  empleados = signal<any[]>([
    { id: 1, nombre: 'Ana García', departamento: 'Tecnología', cargo: 'Desarrolladora Frontend', salario: 4500, estado: 'Activo' },
    { id: 2, nombre: 'Carlos López', departamento: 'Tecnología', cargo: 'Desarrollador Backend', salario: 5200, estado: 'Activo' },
    { id: 3, nombre: 'María Rodríguez', departamento: 'Ventas', cargo: 'Ejecutiva de Cuentas', salario: 3100, estado: 'Inactivo' },
    { id: 4, nombre: 'Juan Pérez', departamento: 'Ventas', cargo: 'Director Comercial', salario: 7500, estado: 'Activo' },
    { id: 5, nombre: 'Laura Gómez', departamento: 'Recursos Humanos', cargo: 'Analista de Selección', salario: 2800, estado: 'Activo' }
  ]);

  // 3. Manejadores de Eventos
  onCeldaEditada(evento: { item: any; field: string; value: any }) {
    console.log('Valor actualizado:', evento);
    this.empleados.update(emps => emps.map(emp =>
      emp.id === evento.item.id ? { ...emp, [evento.field]: evento.value } : emp
    ));
  }

  onFilaReordenada(evento: RowReorderEvent) {
    console.log('Fila movida:', evento.draggedItem);
    console.log('Soltada sobre:', evento.dropTargetItem);
  }

  editarEmpleado(empleado: any) {
    alert(`Editando a: ${empleado.nombre}`);
  }
}

2. Plantilla HTML (component.html)

Invoca al componente snk-data-grid y define las plantillas personalizadas.

<div style="padding: 20px; max-width: 1200px; margin: 0 auto;">
  <h2>Directorio de Empleados</h2>

  <snk-data-grid
    [columns]="columnas()"
    [data]="empleados()"
    [actionTemplate]="accionesTabla"
    [actionColumnWidth]="'150px'"
    [showColumnButton]="true"
    [showJsonButton]="true"
    [showExcelButton]="true"
    [showCsvButton]="true"
    [allowRowReordering]="true"
    [defaultPageSize]="5"
    (cellEdit)="onCeldaEditada($event)"
    (rowReorder)="onFilaReordenada($event)">

    <!-- Plantilla personalizada para la celda "Estado" -->
    <ng-template [snkDataGridTemplate]="'estadoTpl'" let-empleado>
      <span 
        style="padding: 4px 8px; border-radius: 12px; font-size: 11px; font-weight: bold; display: inline-block; text-align: center;"
        [style.background-color]="empleado.estado === 'Activo' ? '#d1e7dd' : '#f8d7da'"
        [style.color]="empleado.estado === 'Activo' ? '#0f5132' : '#842029'">
        {{ empleado.estado | uppercase }}
      </span>
    </ng-template>

    <!-- Plantilla para la columna de acciones CRUD -->
    <ng-template #accionesTabla let-empleado>
      <div style="display: flex; gap: 8px; justify-content: center;">
        <button 
          (click)="editarEmpleado(empleado)"
          style="padding: 4px 8px; background: #eff6ff; color: #0d6efd; border: 1px solid #0d6efd; border-radius: 4px; cursor: pointer; font-size: 12px;">
          Editar
        </button>
      </div>
    </ng-template>

  </snk-data-grid>
</div>

Referencia de API

Inputs (Propiedades de Entrada)

| Propiedad | Tipo | Por Defecto | Descripción | | :--- | :--- | :--- | :--- | | [columns] | SnkGridColumnDef[] | (Requerido) | Configuración de las columnas de la tabla. | | [data] | any[] | (Requerido) | Arreglo de datos a mostrar. | | [actionTemplate] | TemplateRef<any> | undefined | Plantilla para renderizar acciones de fila. | | [actionColumnWidth] | string | '120px' | Ancho de la columna de acciones. | | [defaultPageSize] | number | 10 | Tamaño de página por defecto. | | [pageSizeOptions] | number[] | [5, 10, 20] | Opciones de tamaño de página disponibles. | | [showColumnButton] | boolean | false | Muestra un botón para mostrar/ocultar columnas. | | [showJsonButton] | boolean | false | Habilita botón para exportar a JSON. | | [showCsvButton] | boolean | false | Habilita botón para exportar a CSV. | | [showExcelButton] | boolean | false | Habilita botón para exportar a Excel. | | [allowRowReordering] | boolean | false | Habilita el reordenamiento de filas mediante Drag & Drop. | | [showTextFilters] | boolean | false | Habilita la fila de filtros de texto para todas las columnas de forma global. | | [showToolbar] | boolean | true | Determina si se muestra o se oculta la barra de herramientas superior (toolbar). |

Outputs (Eventos de Salida)

| Evento | Tipo | Descripción | | :--- | :--- | :--- | | (cellEdit) | { item: any; field: string; value: any } | Se emite cuando se edita y confirma un nuevo valor en una celda. | | (rowReorder) | RowReorderEvent | Se emite cuando una fila se arrastra y se suelta sobre otra fila para reordenar. |


Configuración de Columnas (SnkGridColumnDef)

La interfaz SnkGridColumnDef acepta las siguientes propiedades para configurar cada columna de manera individual:

  • field: Nombre de la propiedad del objeto de datos.
  • header: Título a mostrar en la cabecera.
  • type: Tipo de datos ('string' \| 'number' \| 'date' \| 'boolean').
  • editable: Habilita doble clic para editar la celda.
  • filterable: Habilita el filtro de selección múltiple (checklist) con buscador integrado.
  • showTextFilter: Habilita el filtro de texto para esta columna en específico.
  • sortable: Habilita ordenar la columna.
  • groupable: Permite agrupar por esta columna.
  • defaultGroupOrder: Orden numérico de agrupación por defecto al cargar el grid (e.g. 1).
  • aggregate: Tipo de cálculo agregado para subtotales ('sum' \| 'count').
  • templateName: Nombre de la plantilla snkDataGridTemplate usada para renderizar esta celda de forma personalizada.
  • width: Ancho de columna específico (e.g. '120px').

Comandos Útiles para Desarrollo

Construir la Biblioteca

ng build snk-data-grid

Publicar la Biblioteca

cd dist/snk-data-grid
npm publish