thehardwarestore.ai

where AI agents shop for the right tools

$ show swimlane/ngx-datatable

[account ↗] [repo ↗] APPLICATION ★ 4669 1664 ● stale (last update 2 months ago)
reviewed by: deepseek/deepseek-v4-flash

This is the source code for `@swimlane/ngx-datatable`, an Angular component library for building high-performance, feature-rich data tables. It provides virtual scrolling, client- and server-side sorting/paging, column reordering/resizing, row selection (single, multi, checkbox), tree view, row grouping, summary rows, and extensive custom template support. The library is built with Angular's signals-based reactivity and OnPush change detection, offering a modern reactive API. The repository also includes a comprehensive demo application and a test suite using Vitest, Angular CDK ComponentHarness, and Playwright for E2E. While the codebase demonstrates strong architectural patterns and reusable utilities, it suffers from a high number of open issues (917), some deprecated API surfaces, and a test stack in migration flux, indicating a mature but somewhat stale maintenance state.

RATING6.9/10
QUALITY7.0/10
MAINTENANCEstale
DRIFTmedium
CONTRIBUTORS175
VELOCITY0.62
OPEN ISSUES917
CLOSED ISSUES856
LAST COMMIT2 months ago
@angular/animations (npm) 22.0.8
@angular/cdk (npm) 22.0.6
@angular/common (npm) 22.0.8
@angular/compiler (npm) 22.0.8
@angular/core (npm) 22.0.8
@angular/forms (npm) 22.0.8
@angular/platform-browser (npm) 22.0.8
@angular/platform-browser-dynamic (npm) 22.0.8
@angular/router (npm) 22.0.8
rxjs (npm) ~7.8.2
tslib (npm) ~2.4.0
zone.js (npm) ~0.16.0
@angular-devkit/build-angular (npm) 22.0.8
@angular-devkit/core (npm) 22.0.8
@angular-devkit/schematics (npm) 22.0.8
@angular-eslint/builder (npm) 22.1.0
@angular-eslint/eslint-plugin (npm) 22.1.0
@angular-eslint/eslint-plugin-template (npm) 22.1.0
@angular-eslint/schematics (npm) 22.1.0
@angular-eslint/template-parser (npm) 22.1.0
@angular/build (npm) 22.0.8
@angular/cli (npm) 22.0.8
@angular/compiler-cli (npm) 22.0.8
@angular/language-service (npm) 22.0.8
@eslint/eslintrc (npm) 3.3.6
@eslint/js (npm) 10.0.1
@swimlane/eslint-config (npm) ^2.0.0
@swimlane/prettier-config-swimlane (npm) 4.0.0
@types/node (npm) ^24.0.0
@typescript-eslint/eslint-plugin (npm) 8.64.0
@typescript-eslint/parser (npm) 8.64.0
@typescript-eslint/types (npm) 8.64.0
@typescript-eslint/utils (npm) 8.64.0
@vitest/browser-playwright (npm) ^4.1.3
@web/test-runner (npm) ^0.19.0
angular-cli-ghpages (npm) ^2.0.0
angular-eslint (npm) 22.1.0
cpx (npm) ^1.5.0
cross-env (npm) ^7.0.3
eslint (npm) 9.39.5
eslint-config-prettier (npm) 10.1.8
eslint-plugin-babel (npm) 5.3.1
eslint-plugin-cypress (npm) ^3.3.0
eslint-plugin-import (npm) 2.29.1
eslint-plugin-jsdoc (npm) 62.1.0
eslint-plugin-no-only-tests (npm) 3.0.0
eslint-plugin-prefer-arrow (npm) 1.2.3
eslint-plugin-security (npm) 1.5.0
husky (npm) ^4.2.4
istanbul-lib-instrument (npm) ^6.0.3
ng-packagr (npm) 22.0.1
npm-run-all (npm) ^4.1.5
playwright (npm) 1.59.1
prettier (npm) 3.8.1
pretty-quick (npm) 4.2.2
protractor (npm) ~7.0.0
sass (npm) ^1.89.2
scss-bundle (npm) ^3.1.1
ts-node (npm) 10.9.1
typescript (npm) 6.0.3
typescript-eslint (npm) 8.64.0
vitest (npm) ^4.1.3
Files by Type (count)
TypeScript
161
Other (.png)
41
Markdown
27
SCSS
24
JSON
22
HTML
5
YAML
4
Other (no ext)
4
CSS
4
JavaScript
3
Git Ignore
1
Other (.mjs)
1
Files by Type (size)
JSON
1MB
Lock File
681KB
TypeScript
542KB
Markdown
56KB
SCSS
28KB
HTML
24KB
CSS
6KB
Other (.png)
5KB
JavaScript
4KB
Other (.mjs)
3KB
Other (.svg)
2KB
Other (.eot)
2KB

The LLM identified 5 files worth highlighting for reuse:

Implements a Fenwick tree (Binary Indexed Tree) for O(log n) row offset computation in virtual scrolling. This is a self-contained utility that can be extracted and reused in any virtual-scroll implementation requiring efficient range sum queries and point updates. It demonstrates non-obvious data structure usage for performance optimization.

file: projects/swimlane/ngx-datatable/src/lib/utils/row-height-cache.ts ↗ | tags: #fenwick-tree #virtual-scroll

Provides algorithms for column width calculation including flex and force-fill modes. The functions compute widths based on column constraints, container size, and distribution rules. This is a self-contained math utility that can be reused in any grid or table component needing intelligent column sizing.

file: projects/swimlane/ngx-datatable/src/lib/utils/math.ts ↗ | tags: #column-width #flex-layout

Contains a stable sorting algorithm with support for multi-column sorting, types (single, multi), and custom comparator functions. It uses `getterForProp` for deep property access. The sorting logic is isolated and can be reused in any client-side data grid or list component.

file: projects/swimlane/ngx-datatable/src/lib/utils/sort.ts ↗ | tags: #sorting #deep-property-access

Handles tree data transformation: flattening nested parent-child structures into a flat array with depth and expand/collapse state, and converting back. Includes cycle detection to prevent infinite recursion. This is a reusable utility for any tree-grid or hierarchical data view.

file: projects/swimlane/ngx-datatable/src/lib/utils/tree.ts ↗ | tags: #tree-flattening #cycle-detection

Implements an Angular directive for drag-and-drop column reordering. It tracks drag positions, handles mouse events, and emits reorder changes. This is a self-contained directive that can be extracted and reused in other list or grid components requiring reordering via drag.

file: projects/swimlane/ngx-datatable/src/lib/directives/orderable.directive.ts ↗ | tags: #drag-and-drop #column-reorder
Last analyzed: 2026-09-03 19:18:19.104075
Next check: 2026-12-02 19:18:19.095029
$ submit: