{"_id":"@chandreshgamdha/gsc-angular-grid","_rev":"9-11249d2f92ebe219cb514b3b585eb134","name":"@chandreshgamdha/gsc-angular-grid","dist-tags":{"latest":"1.0.8"},"versions":{"1.0.0":{"name":"@chandreshgamdha/gsc-angular-grid","version":"1.0.0","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","syncfusion-alternative"],"author":{"name":"Chandresh Gamdha"},"license":"MIT","_id":"@chandreshgamdha/gsc-angular-grid@1.0.0","maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"dist":{"shasum":"8ac76836b4f47f368b0e563a8f0f8f304a22f3e0","tarball":"https://registry.npmjs.org/@chandreshgamdha/gsc-angular-grid/-/gsc-angular-grid-1.0.0.tgz","fileCount":5,"integrity":"sha512-GC5D+wQcOISIFvttdQuIcAKsPQnXZGWiIDgDSQpZa6s7fHo8UU3UVxcTaXK+4mUJMKEqWILsXtkoZDT2+Ua/kw==","signatures":[{"sig":"MEUCIQCst1oRyQvK75xH+ak7D3/Iy+iLndH++wxHVeUXAuui2gIgRc7fPeNfmNHghN5ljrNnlaSLKz7dpe/keYV3mH29Wfg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":801288},"module":"fesm2022/chandreshgamdha-gsc-angular-grid.mjs","exports":{".":{"types":"./index.d.ts","default":"./fesm2022/chandreshgamdha-gsc-angular-grid.mjs"},"./package.json":{"default":"./package.json"}},"typings":"index.d.ts","_npmUser":{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"},"_npmVersion":"11.6.2","description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^20.0.0","@angular/core":"^20.0.0","@angular/common":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gsc-angular-grid_1.0.0_1785485107601_0.2795113132657312","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@chandreshgamdha/gsc-angular-grid","version":"1.0.1","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","syncfusion-alternative"],"author":{"name":"Chandresh Gamdha"},"license":"MIT","_id":"@chandreshgamdha/gsc-angular-grid@1.0.1","maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"dist":{"shasum":"3f80661cff512f74b77c8715ad6a4dd6424a2ea7","tarball":"https://registry.npmjs.org/@chandreshgamdha/gsc-angular-grid/-/gsc-angular-grid-1.0.1.tgz","fileCount":5,"integrity":"sha512-/LGY4I6KzLk11DEZTFsSIYCnlKrRyWNMGjSJqg5IulVQVcPvduq0iVLFTTHdZ0UN91Dn+ABIPb24IeGUF9Apbg==","signatures":[{"sig":"MEYCIQDPT79rVVB+iZjRN5yL+xup74O66RTMrc6cZ1WQgT1jSwIhAIzje6dHh0RekYgLWJZfwgxRkErMTjKvMnFj/r4g+vvO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":838043},"module":"fesm2022/chandreshgamdha-gsc-angular-grid.mjs","exports":{".":{"types":"./index.d.ts","default":"./fesm2022/chandreshgamdha-gsc-angular-grid.mjs"},"./package.json":{"default":"./package.json"}},"typings":"index.d.ts","_npmUser":{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"},"_npmVersion":"11.6.2","description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^20.0.0","@angular/core":"^20.0.0","@angular/common":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gsc-angular-grid_1.0.1_1785729257689_0.6738526732065002","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@chandreshgamdha/gsc-angular-grid","version":"1.0.2","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","syncfusion-alternative"],"author":{"name":"Chandresh Gamdha"},"license":"MIT","_id":"@chandreshgamdha/gsc-angular-grid@1.0.2","maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"dist":{"shasum":"016c0525fc6baf055b0ce5c117c7b48d864fd910","tarball":"https://registry.npmjs.org/@chandreshgamdha/gsc-angular-grid/-/gsc-angular-grid-1.0.2.tgz","fileCount":5,"integrity":"sha512-8W4MAdtE/cyfwqi58K+GnvgaU217dnWrHRb/3PeIFStCS/9jpQU2bcikymub7bJ08+JYYuYIMc8q+skhMvbE9g==","signatures":[{"sig":"MEUCIQCxRdJHegpP+E6THXU4JAC4qaALs02q2mAULLmNLb17vQIgV+2vuwsqb9v9bc+lay8tLWDE1Tqy7CveR3z57dRGudw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":884713},"module":"fesm2022/chandreshgamdha-gsc-angular-grid.mjs","exports":{".":{"types":"./index.d.ts","default":"./fesm2022/chandreshgamdha-gsc-angular-grid.mjs"},"./package.json":{"default":"./package.json"}},"typings":"index.d.ts","_npmUser":{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"},"_npmVersion":"11.6.2","description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^20.0.0","@angular/core":"^20.0.0","@angular/common":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gsc-angular-grid_1.0.2_1785731409904_0.6195259346877733","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@chandreshgamdha/gsc-angular-grid","version":"1.0.3","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","syncfusion-alternative"],"author":{"name":"Chandresh Gamdha"},"license":"MIT","_id":"@chandreshgamdha/gsc-angular-grid@1.0.3","maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"dist":{"shasum":"dba8c03efbfc0875a6d854e667108e38d5274164","tarball":"https://registry.npmjs.org/@chandreshgamdha/gsc-angular-grid/-/gsc-angular-grid-1.0.3.tgz","fileCount":5,"integrity":"sha512-54qemqaVdQ5YG3h8BKGsisQR6jQzQJd/YXPgRO2hS5WUo0wLcivsSURVuFaQ4r5k9e5cukvBpaaHUFx4DwbDPQ==","signatures":[{"sig":"MEQCID8GF1P5rR+5b43UaQp5R2DoJGK9f1dp9XsDd9EPhf1iAiBv7TYnDXfIXQ95/dXbIpTsxvtXhC88IfITQfL4D2hWVg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":923776},"module":"fesm2022/chandreshgamdha-gsc-angular-grid.mjs","exports":{".":{"types":"./index.d.ts","default":"./fesm2022/chandreshgamdha-gsc-angular-grid.mjs"},"./package.json":{"default":"./package.json"}},"typings":"index.d.ts","_npmUser":{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"},"_npmVersion":"11.6.2","description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^20.0.0","@angular/core":"^20.0.0","@angular/common":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gsc-angular-grid_1.0.3_1785732587783_0.2380080836834053","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@chandreshgamdha/gsc-angular-grid","version":"1.0.4","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","syncfusion-alternative"],"author":{"name":"Chandresh Gamdha"},"license":"MIT","_id":"@chandreshgamdha/gsc-angular-grid@1.0.4","maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"dist":{"shasum":"a98ccc328beab53184e2c50efedff8c34b4b79e8","tarball":"https://registry.npmjs.org/@chandreshgamdha/gsc-angular-grid/-/gsc-angular-grid-1.0.4.tgz","fileCount":11,"integrity":"sha512-ceCMSsaq3LUqHTKL3mUewLIrJlNqEVIWbUP2zfdT6NogbFUFAmfifBiKx+jBDocNMVwU/p3311jyGrGMHSP2aw==","signatures":[{"sig":"MEUCIQDFkH5hm8Gx4u1FjiyrPF8JQgscZWGMck5UnMVaNlGUEgIgfJByNsOxJmVhhIluHiXIqnH1IpZBf71HKeMw/e969rQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":945534},"module":"fesm2022/chandreshgamdha-gsc-angular-grid.mjs","exports":{".":{"types":"./index.d.ts","default":"./fesm2022/chandreshgamdha-gsc-angular-grid.mjs"},"./package.json":{"default":"./package.json"}},"typings":"index.d.ts","_npmUser":{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"},"_npmVersion":"11.6.2","description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^20.0.0","@angular/core":"^20.0.0","@angular/common":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gsc-angular-grid_1.0.4_1785737849399_0.23284581929547077","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@chandreshgamdha/gsc-angular-grid","version":"1.0.5","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","syncfusion-alternative"],"author":{"name":"Chandresh Gamdha"},"license":"MIT","_id":"@chandreshgamdha/gsc-angular-grid@1.0.5","maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"dist":{"shasum":"3d20bcd0094219cfc1ad18f9158e5d576c1a97a5","tarball":"https://registry.npmjs.org/@chandreshgamdha/gsc-angular-grid/-/gsc-angular-grid-1.0.5.tgz","fileCount":11,"integrity":"sha512-yAfK2NzgZ6eO4qwDjtez7yMKPb47R6Bo3omQSXDZFFPhmJrQo59t2mcfHoWte1jUI+qJSRQb3PezilbqaY5uCQ==","signatures":[{"sig":"MEQCIEArfVmnsU87b59GIYqNjUtVJZxWNbQI26MQJvpovkrfAiBSJYCvkOwHE7dN6JTZQjp4i7LR/bjwkamqcfUUZO55Yw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":945550},"module":"fesm2022/chandreshgamdha-gsc-angular-grid.mjs","exports":{".":{"types":"./index.d.ts","default":"./fesm2022/chandreshgamdha-gsc-angular-grid.mjs"},"./package.json":{"default":"./package.json"}},"typings":"index.d.ts","_npmUser":{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"},"_npmVersion":"11.6.2","description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^20.0.0","@angular/core":"^20.0.0","@angular/common":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gsc-angular-grid_1.0.5_1785738993142_0.9013916122658283","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@chandreshgamdha/gsc-angular-grid","version":"1.0.6","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","CLI-alternative"],"author":{"name":"Chandresh Gamdha"},"license":"MIT","_id":"@chandreshgamdha/gsc-angular-grid@1.0.6","maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"dist":{"shasum":"940cc2331873c1b60ca90598cf7810289dbb24bc","tarball":"https://registry.npmjs.org/@chandreshgamdha/gsc-angular-grid/-/gsc-angular-grid-1.0.6.tgz","fileCount":11,"integrity":"sha512-sXzuVrtkym9UGDXxpZTEInSKwhCZavlEBEEMBIrSxarIH3mc+4Fa8rI0kOp0/l0O6SQpZZkMBxMWqyLpHw4gbw==","signatures":[{"sig":"MEUCIDh71/dw/At3Tp0p6HlHVfWkMCZLgdWTKpkW+IZIAFRqAiEAoDu4xCG04KvcGVYidKP2wiSdKhdEbDzy0stGwT2xE4w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":960452},"module":"fesm2022/chandreshgamdha-gsc-angular-grid.mjs","exports":{".":{"types":"./index.d.ts","default":"./fesm2022/chandreshgamdha-gsc-angular-grid.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"e6b3e7b4984038a3d12051fb7a3a3e14fb07097d","typings":"index.d.ts","_npmUser":{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"},"_npmVersion":"11.6.2","description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^20.0.0","@angular/core":"^20.0.0","@angular/common":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gsc-angular-grid_1.0.6_1785840533566_0.18263121867954002","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@chandreshgamdha/gsc-angular-grid","version":"1.0.7","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","CLI-alternative"],"author":{"name":"Chandresh Gamdha"},"license":"MIT","_id":"@chandreshgamdha/gsc-angular-grid@1.0.7","maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"dist":{"shasum":"b04fdce3dfbb4d224e2970c1411d41839bcdc48b","tarball":"https://registry.npmjs.org/@chandreshgamdha/gsc-angular-grid/-/gsc-angular-grid-1.0.7.tgz","fileCount":11,"integrity":"sha512-84c9/X0C9iVviVz/8BDGFKl5dGZZu44NZD+z6CKEOk/r3Iao9lkG2a2ZpLltgUOc2K5bwIL8fLeUPYlXic77Lg==","signatures":[{"sig":"MEYCIQD7hs5pgzGsy2ZialvN6Te0hltUM0TMfmC/2bnvB/GtaAIhALE8ecOzH+i9jY8OzSHACGJO71zlb6RGstxxMx310CPh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":967101},"module":"fesm2022/chandreshgamdha-gsc-angular-grid.mjs","exports":{".":{"types":"./index.d.ts","default":"./fesm2022/chandreshgamdha-gsc-angular-grid.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"e6b3e7b4984038a3d12051fb7a3a3e14fb07097d","typings":"index.d.ts","_npmUser":{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"},"_npmVersion":"11.6.2","description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^20.0.0","@angular/core":"^20.0.0","@angular/common":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/gsc-angular-grid_1.0.7_1785843159739_0.12437192517332063","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@chandreshgamdha/gsc-angular-grid","version":"1.0.8","publishConfig":{"access":"public"},"description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","author":{"name":"Chandresh Gamdha"},"license":"MIT","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","CLI-alternative"],"peerDependencies":{"@angular/common":"^20.0.0","@angular/core":"^20.0.0","@angular/cdk":"^20.0.0"},"dependencies":{"tslib":"^2.3.0"},"sideEffects":false,"module":"fesm2022/chandreshgamdha-gsc-angular-grid.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","default":"./fesm2022/chandreshgamdha-gsc-angular-grid.mjs"}},"gitHead":"7f437af6815c0d7a5a4eff53e9bad9cb8a2e2ed3","_id":"@chandreshgamdha/gsc-angular-grid@1.0.8","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-maNNJqWDg97AswYtgsf6Lzr954Hiuwm7tTzxPtGbA7j5b4gHMpaGtPPP/4m1RJWY2R36DAejCy6FK2X2kM6lsA==","shasum":"65405c1327b7b798b0dacaf51c37c5e2e2c554f6","tarball":"https://registry.npmjs.org/@chandreshgamdha/gsc-angular-grid/-/gsc-angular-grid-1.0.8.tgz","fileCount":11,"unpackedSize":976418,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDrZiwn1HXhogvKZ+VbBrCWl4zceYL0qFrAnxVtLUntAAIhAJOWKRSNjdtmiU8NvLS5v4C0WM6HOfLXbn7O32TnhE/I"}]},"_npmUser":{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"},"directories":{},"maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gsc-angular-grid_1.0.8_1785916609218_0.5067663866988488"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-31T08:05:07.470Z","modified":"2026-08-05T07:56:49.712Z","1.0.0":"2026-07-31T08:05:07.756Z","1.0.1":"2026-08-03T03:54:17.862Z","1.0.2":"2026-08-03T04:30:10.060Z","1.0.3":"2026-08-03T04:49:47.950Z","1.0.4":"2026-08-03T06:17:29.591Z","1.0.5":"2026-08-03T06:36:33.321Z","1.0.6":"2026-08-04T10:48:53.728Z","1.0.7":"2026-08-04T11:32:39.886Z","1.0.8":"2026-08-05T07:56:49.440Z"},"author":{"name":"Chandresh Gamdha"},"license":"MIT","keywords":["angular","angular-20","grid","datagrid","virtual-scroll","enterprise","signals","data-grid","CLI-alternative"],"description":"Enterprise-grade Angular 20 Data Grid package with 1,000,000+ row virtualization, Signal reactive state engine, and tree-shakable feature plugins.","maintainers":[{"name":"chandreshgamdha","email":"chandresh.gamdha@clinvigilant.com"}],"readme":"# Enterprise Angular 20 Grid (`@chandreshgamdha/gsc-angular-grid`)\n\n`@chandreshgamdha/gsc-angular-grid` is a high-performance, enterprise-grade Angular 20 Data Grid package built from scratch. Designed for modern Angular Zone-less & Signal architectures, it supports seamless virtualization for **1,000,000+ rows** at 60 FPS while offering an intuitive declarative API mimicking industry standards.\n\n---\n\n## Table of Contents\n- [Key Features](#key-features)\n- [Installation](#installation)\n- [Getting Started](#getting-started)\n- [Defining Columns & Templates](#defining-columns--templates)\n- [Core Features](#core-features)\n  - [Paging, Sorting & Filtering](#paging-sorting--filtering)\n  - [Virtualization (1M+ Rows)](#virtualization-1m-rows)\n  - [Grouping & Row Drag-and-Drop](#grouping--row-drag-and-drop)\n  - [Aggregates (Footer Summary)](#aggregates-footer-summary)\n- [Advanced Features](#advanced-features)\n  - [Editing & CRUD Operations](#editing--crud-operations)\n  - [Toolbar & Column Chooser](#toolbar--column-chooser)\n  - [Context Menu](#context-menu)\n  - [Excel, PDF & CSV Export](#excel-pdf--csv-export)\n- [Programmatic API](#programmatic-api)\n- [Theming & CSS Variables](#theming--css-variables)\n- [API Reference](#api-reference)\n- [License](#license)\n\n---\n\n## Key Features\n\n- ⚡ **1,000,000+ Row Virtualization**: High-frequency row and column viewport sliding windows with zero dropped frames.\n- 🚦 **Angular 20 Signal-Driven**: State management powered entirely by Angular Signals.\n- 🌲 **Tree-Shakable Architecture**: Every feature (Sorting, Filtering, Paging, Selection) is highly optimized.\n- 🔒 **Sticky & Frozen Columns**: Pin columns to the left or right boundaries seamlessly.\n- 🎨 **Multi-Theme Engine**: Built-in themes for Light, Dark, Material, Bootstrap, Tailwind, and Fluent.\n- 📥 **Export Engine**: Instant client-side CSV, Excel, and PDF generation.\n- 📊 **Aggregates & Summary Footer**: Built-in Sum, Avg, Min, Max, Count, and Custom aggregates.\n- ✍️ **Declarative Syntax**: Build grids easily with clean HTML tags like `<gsc-grid>`, `<gsc-columns>`, and `<gsc-column>`.\n\n---\n\n## Installation\n\n```bash\nnpm install @chandreshgamdha/gsc-angular-grid @angular/cdk\n```\n\n---\n\n## Getting Started\n\n### 1. Import the Module \n\nImport `GridModule` into your standalone component or `AppModule`.\n\n```typescript\nimport { Component, signal } from '@angular/core';\nimport { GridModule } from '@chandreshgamdha/gsc-angular-grid';\n\n@Component({\n  selector: 'app-demo',\n  standalone: true,\n  imports: [GridModule],\n  templateUrl: './app.component.html'\n})\nexport class DemoComponent {\n  employees = signal([\n    { id: 101, name: 'John Doe', department: 'Engineering', status: 'Active', salary: 95000 },\n    { id: 102, name: 'Jane Smith', department: 'Product', status: 'On Leave', salary: 105000 }\n  ]);\n}\n```\n\n### 2. Basic Grid Template\n\nDefine your grid structure completely in HTML using `<gsc-columns>`.\n\n```html\n<gsc-grid [dataSource]=\"employees()\" [height]=\"'400px'\">\n  <gsc-columns>\n    <gsc-column field=\"id\" headerText=\"ID\" [isPrimaryKey]=\"true\" [width]=\"100\"></gsc-column>\n    <gsc-column field=\"name\" headerText=\"Employee Name\" [width]=\"200\"></gsc-column>\n    <gsc-column field=\"department\" headerText=\"Department\" [width]=\"150\"></gsc-column>\n    <gsc-column field=\"salary\" headerText=\"Salary\" type=\"currency\" [width]=\"140\"></gsc-column>\n  </gsc-columns>\n</gsc-grid>\n```\n\n---\n\n## Defining Columns & Templates\n\n### Column Properties\n- `field`: Property name in the data source.\n- `headerText`: Title displayed in the column header.\n- `width`: Fixed width of the column.\n- `textAlign`: `'left' | 'center' | 'right'`.\n- `type`: `'string' | 'number' | 'date' | 'boolean' | 'currency'`.\n- `freeze`: `'left' | 'right'` (Pins column to a side).\n- `isPrimaryKey`: Identifies the column as the unique identifier for data operations.\n\n### Custom Templates\n\nUse Angular `<ng-template>` directives to override standard rendering.\n- `#template`: Custom cell rendering.\n- `#headerTemplate`: Custom header rendering.\n\n```html\n<gsc-column field=\"status\" headerText=\"Employee Status\" textAlign=\"center\" [width]=\"150\">\n  <ng-template #headerTemplate let-column=\"column\">\n    <span class=\"custom-header\">👑 {{ column.headerText }}</span>\n  </ng-template>\n\n  <ng-template #template let-data>\n    <span class=\"badge\" [class.active]=\"data.status === 'Active'\">\n      {{ data.status }}\n    </span>\n  </ng-template>\n</gsc-column>\n```\n\n---\n\n## Core Features\n\n### Paging, Sorting & Filtering\nEasily enable pagination, sorting, and filtering via properties.\n```html\n<gsc-grid \n  [dataSource]=\"employees()\" \n  [allowPaging]=\"true\"\n  [allowSorting]=\"true\"\n  [allowFiltering]=\"true\"\n  [pageSettings]=\"{ pageSize: 15, pageCount: 5 }\">\n```\n\n### Virtualization (1M+ Rows)\nFor massive datasets, rely on the built-in DOM Virtualization to prevent browser freezing.\n```html\n<gsc-grid [dataSource]=\"hugeDataset()\" [enableVirtualization]=\"true\" [height]=\"'600px'\">\n```\n\n### Grouping & Row Drag-and-Drop\nEnable users to drag-and-drop columns to group data, and reorder rows manually.\n```html\n<gsc-grid [allowGrouping]=\"true\" [allowRowDragAndDrop]=\"true\">\n```\n\n### Aggregates (Footer Summary)\nAutomatically calculate metrics (Sum, Average, Min, Max, Count) in the footer.\n```html\n<gsc-grid [showFooter]=\"true\">\n  <!-- ... -->\n  <gsc-aggregates>\n    <gsc-aggregate>\n      <gsc-columns>\n        <gsc-column field=\"salary\" type=\"Sum\" format=\"C2\"></gsc-column>\n        <gsc-column field=\"salary\" type=\"Average\" format=\"C2\"></gsc-column>\n        <gsc-column field=\"id\" type=\"Count\"></gsc-column>\n      </gsc-columns>\n    </gsc-aggregate>\n  </gsc-aggregates>\n</gsc-grid>\n```\n\n---\n\n## Advanced Features\n\n### Editing & CRUD Operations\nEnable Add, Edit, and Delete operations using the built-in dialog or inline editing UI.\n```html\n<gsc-grid \n  [allowEditing]=\"true\"\n  [editSettings]=\"{ allowEditing: true, allowAdding: true, allowDeleting: true, mode: 'Dialog' }\">\n```\n\n### Toolbar & Column Chooser\nAdd a top toolbar for quick actions like Export, Search, and opening the Column Chooser (which allows users to hide/show columns dynamically).\n```html\n<gsc-grid \n  [toolbar]=\"['Add', 'Edit', 'Delete', 'Search', 'ColumnChooser', 'ExcelExport']\"\n  [showColumnChooser]=\"true\">\n```\n\n### Context Menu\nRight-click on any row to open a context menu with standard or custom actions.\n```html\n<gsc-grid \n  [contextMenuItems]=\"['AutoFit', 'SortAscending', 'SortDescending', 'Copy', 'Edit', 'Delete']\">\n```\n\n### Excel, PDF & CSV Export\nAllow users to export the grid contents to external files.\n```html\n<gsc-grid [allowExcelExport]=\"true\" [allowPdfExport]=\"true\">\n```\n\n---\n\n## Programmatic API\n\nYou can trigger grid functions directly from your component class using the `#grid` reference.\n\n```html\n<gsc-grid #myGrid [dataSource]=\"employees()\"></gsc-grid>\n<button (click)=\"exportData()\">Export Excel</button>\n<button (click)=\"search()\">Search \"Manager\"</button>\n```\n\n```typescript\nimport { ViewChild } from '@angular/core';\nimport { GridComponent } from '@chandreshgamdha/gsc-angular-grid';\n\nexport class DemoComponent {\n  @ViewChild('myGrid') grid!: GridComponent<any>;\n\n  exportData() {\n    this.grid.excelExport(); // Or pdfExport(), csvExport()\n  }\n\n  search() {\n    this.grid.search('Manager'); \n  }\n\n  autofit() {\n    this.grid.autoFitColumns();\n  }\n}\n```\n\n---\n\n## Theming & CSS Variables\n\nThe grid supports dynamic theming (`light`, `dark`, `material`, `bootstrap`, `tailwind`, `fluent`).\n\n```html\n<gsc-grid [theme]=\"'dark'\">\n```\n\nYou can fully customize the colors by overriding CSS variables in your `styles.css`:\n```css\n:root {\n  --gsc-primary-color: #6366f1;\n  --gsc-bg-color: #ffffff;\n  --gsc-text-color: #333333;\n  --gsc-header-bg: #f8fafc;\n  --gsc-border-color: #e2e8f0;\n  --gsc-hover-bg: #f1f5f9;\n  --gsc-selected-bg: #e0e7ff;\n}\n```\n\n---\n\n## API Reference\n\n### Grid Properties (Inputs)\n\n| Property | Type | Default | Description |\n|---|---|---|---|\n| `dataSource` | `any[]` | `[]` | The array of objects to display in the grid. |\n| `allowPaging` | `boolean` | `false` | Enables grid pagination. |\n| `allowSorting` | `boolean` | `false` | Enables sorting on columns. |\n| `allowFiltering` | `boolean` | `false` | Enables filtering on columns. |\n| `allowGrouping` | `boolean` | `false` | Enables drag-and-drop column grouping. |\n| `allowResizing` | `boolean` | `false` | Enables column width resizing. |\n| `allowSelection` | `boolean` | `true` | Enables row selection. |\n| `enableVirtualization`| `boolean` | `true` | Enables DOM virtualization for large datasets. |\n| `enableAltRow` | `boolean` | `true` | Alternates background color on odd/even rows. |\n| `editSettings` | `EditSettings` | `{}` | Configures CRUD options and edit modes. |\n| `gridLines` | `'Both' \\| 'Horizontal' \\| 'Vertical' \\| 'None'` | `'Both'` | Controls the display of cell borders. |\n| `height` / `width` | `string \\| number` | `'auto'` | Dimensions of the grid container. |\n\n### Grid Events (Outputs)\n\n| Event | Payload | Description |\n|---|---|---|\n| `rowClick` | `{ rowData: T, rowIndex: number, event: MouseEvent }` | Emitted when a row is clicked. |\n| `cellClick` | `{ currentCell: any, data: T }` | Emitted when a specific cell is clicked. |\n| `sortChange` | `SortDescriptor[]` | Emitted when the sorting configuration changes. |\n| `filterChange` | `FilterDescriptor[]` | Emitted when filters are applied or cleared. |\n| `pageChange` | `PageSettings` | Emitted when page navigation occurs. |\n| `selectionChange` | `any[]` | Emitted when selected rows change. |\n| `actionBegin` | `GridActionEvent` | Emitted before a data action (edit/delete) begins. |\n| `actionComplete`| `GridActionEvent` | Emitted after a data action is completed successfully. |\n\n---\n\n## License\n\nMIT © GSC Enterprise\n","readmeFilename":"README.md"}