{"id":16298985,"url":"https://github.com/ghiscoding/slickgrid-universal","last_synced_at":"2026-04-02T21:49:06.697Z","repository":{"id":37057166,"uuid":"246931260","full_name":"ghiscoding/slickgrid-universal","owner":"ghiscoding","description":"Slickgrid-Universal is a monorepo which includes all Editors, Filters, Extensions, Services related to SlickGrid usage and is also Framework Agnostic","archived":false,"fork":false,"pushed_at":"2024-10-28T20:18:18.000Z","size":287628,"stargazers_count":88,"open_issues_count":2,"forks_count":28,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-10-30T05:27:25.243Z","etag":null,"topics":["csv-export","datagrid","datatable","excel-export","graphql","grid","javascript","monorepo","odata","rxjs","slickgrid","typescript"],"latest_commit_sha":null,"homepage":"https://ghiscoding.github.io/slickgrid-universal/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ghiscoding.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"ghiscoding","patreon":null,"open_collective":null,"ko_fi":"ghiscoding","tidelift":null,"custom":null}},"created_at":"2020-03-12T21:08:33.000Z","updated_at":"2024-10-28T20:18:21.000Z","dependencies_parsed_at":"2024-01-03T00:06:02.352Z","dependency_job_id":"650e3ec6-d9c3-4940-8709-6c3f46462e7f","html_url":"https://github.com/ghiscoding/slickgrid-universal","commit_stats":{"total_commits":3120,"total_committers":24,"mean_commits":130.0,"dds":0.3121794871794872,"last_synced_commit":"0c97ed6c5211c213b3b612850a7cf2335b443c8a"},"previous_names":[],"tags_count":243,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghiscoding%2Fslickgrid-universal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghiscoding%2Fslickgrid-universal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghiscoding%2Fslickgrid-universal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghiscoding%2Fslickgrid-universal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ghiscoding","download_url":"https://codeload.github.com/ghiscoding/slickgrid-universal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247838443,"owners_count":21004580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csv-export","datagrid","datatable","excel-export","graphql","grid","javascript","monorepo","odata","rxjs","slickgrid","typescript"],"created_at":"2024-10-10T20:46:11.950Z","updated_at":"2026-04-02T21:49:06.690Z","avatar_url":"https://github.com/ghiscoding.png","language":"TypeScript","readme":"# Slickgrid-Universal\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/)\n[![lerna--lite](https://img.shields.io/badge/maintained%20with-lerna--lite-e137ff)](https://github.com/lerna-lite/lerna-lite)\n[![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/common.svg)](https://www.npmjs.com/package/@slickgrid-universal/common)\n[![npm](https://img.shields.io/npm/v/@slickgrid-universal/common.svg?logo=npm\u0026logoColor=fff\u0026label=npm)](https://www.npmjs.com/package/@slickgrid-universal/common)\n\n[![Actions Status](https://github.com/ghiscoding/slickgrid-universal/actions/workflows/main.yml/badge.svg)](https://github.com/ghiscoding/slickgrid-universal/actions)\n[![Cypress](https://img.shields.io/endpoint?url=https://cloud.cypress.io/badge/simple/p5zxx6\u0026style=flat\u0026logo=cypress\u0026label=Cypress%20(E2E))](https://cloud.cypress.io/projects/p5zxx6/runs)\n[![Vitest](https://img.shields.io/badge/tested%20with-vitest-fcc72b.svg?logo=vitest)](https://vitest.dev/)\n[![codecov](https://codecov.io/gh/ghiscoding/slickgrid-universal/branch/master/graph/badge.svg)](https://codecov.io/gh/ghiscoding/slickgrid-universal)\n\n### Documentation\n📘 [Documentation](https://ghiscoding.gitbook.io/slickgrid-universal/) website powered by GitBook for version 4.0+ (_or use the [Wikis](https://github.com/ghiscoding/slickgrid-universal/wiki) docs for older versions_)\n\n### Live Demo\n[Live Demo](https://ghiscoding.github.io/slickgrid-universal/) website OR take a look at the [Available Framework Wrappers](#available-framework-wrappers) table below for more demos.\n\nStackblitz links are also available for all supported frameworks (see [table](https://github.com/ghiscoding/slickgrid-universal?tab=readme-ov-file#available-framework-wrappers) below)\n\n### Description\nOne of the best JavaScript data grid named \"SlickGrid\", which was originally developed by `@mleibman`, beats most other data grids in terms of features, customizability \u0026 performance (running smoothly with even a million rows).\n\nThis is a monorepo project (using [pnpm workspaces](https://pnpm.io/workspaces) and [Lerna-Lite](https://github.com/lerna-lite/lerna-lite)) which is regrouping a few packages under a single repository. It was originally requiring `@6pac/SlickGrid` as an external dependency, but that was dropped in v4.0, and it has been a standalone library ever since. The main goal of this project is to create a common repo that includes all Editors, Filters, Extensions and Services that could be used by any frameworks (the core project in itself is framework agnostic).\n\n### What's the difference with the original SlickGrid (now [`@6pac/SlickGrid`](https://github.com/6pac/SlickGrid)) project?\nIf you've used the original SlickGrid in the past, you might be wondering, should I use the [`@6pac/SlickGrid`](https://github.com/6pac/SlickGrid) or Slickgrid-Universal? The main difference is that the original SlickGrid is like an unassembled IKEA product where it's very bare bone and unassembled, but on the other hand Slickgrid-Universal is an all-assembled product with batteries included. What that means is that Slickgrid-Universal comes with many built-in features like Formatters, Editors, Filters, Tree Data, ... which are not directly available in the original SlickGrid. So in the end SlickGrid (`@6pac/SlickGrid`) project is much smaller in size because it's very bare bone but you will have to implement many things yourself (Sorting/Filtering/Editing/...), and if you're looking at creating very basic grids with the smallest footprint possible, then SlickGrid might just work for you, otherwise Slickgrid-Universal has a more complete set of features out of the box with a bit larger download and installation size. Side note, I am (`@ghiscoding`) a maintainer in both projects (Slickgrid-Universal and [`@6pac/SlickGrid`](https://github.com/6pac/SlickGrid))\n\n### Why create this monorepo?\nBelow is a list of reasons as to why this project was created and why it is built as a monorepo project:\n1. avoids duplicate code by creating common packages available in Slickgrid-Universal and used by all frameworks\n2. many of the services are decoupled because no project will ever require all the available services all at once\n   - OData, GraphQL, Export to (CSV, Excel or PDF), Composite Editor, RxJS, ...\n4. and finally it is framework agnostic\n   - you can reuse the same grids and logic in many different frameworks, it's easily transportable\n   - you can use it in plain JavaScript (ES6) or TypeScript, for example we use it ourselves as plain JS (ES6) in our Salesforce environment with LWC (Lightning Web Component)\n\n## Latest News \u0026 Releases\nCheck out the [Releases](https://github.com/ghiscoding/slickgrid-universal/releases) section for all the latest News \u0026 Releases.\n\n### Like my work?\nIf you use and like the project, please give it a star ⭐ and/or support me with caffeine via GitHub [sponsorship](https://github.com/sponsors/ghiscoding) or the Ko-Fi button below would be much appreciated. Thanks in advance.\n\n\u003ca href='https://ko-fi.com/ghiscoding' target='_blank'\u003e\u003cimg height='36' width='140' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi3.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /\u003e\u003c/a\u003e\n\n## Live Demos \u0026 Available Framework Wrappers\nThe Slickgrid-Universal [live demo](https://ghiscoding.github.io/slickgrid-universal) shows 2 different UI themes (Material Design / Salesforce) and you can also see the Bootstrap theme demoed in all other frameworks with links available in the table shown below. Also please note that even if all the demos are built with [Bootstrap](https://getbootstrap.com/) or [Bulma](https://bulma.io/), you could use any other UI libraries (like Google Material, Ms Fluent UI or anything else). The project tries to be agnostic as much as possible and it does so by providing a large set of CSS/SASS variables which are available to customize the UI however you want.\n\nMultiple Themes are available:\n- default (`slickgrid-theme-default.[s]css`)\n- Bootstrap (`slickgrid-theme-bootstrap.[s]css`)\n- Material (`slickgrid-theme-material.[s]css`)\n- Salesforce (`slickgrid-theme-salesforce.[s]css`)\n- Fluent UI (`slickgrid-theme-fluent.[s]css`)\n\n### Available Framework Wrappers\n\n\u003e There's no **SolidJS** or **Svelte** wrappers, but if you are willing to help then let's talk and open a new [Discussion](https://github.com/ghiscoding/slickgrid-universal/discussions)\n\n| Platform | Project Repos | Live Demo | Stackblitz | Downloads | Details |\n| :------: | ------------- | --------- | ---------- | :-------: | ------- |\n| \u003ca href=\"https://angular.io/\" rel=\"nofollow\"\u003e\u003cimg alt=\"Angular\" src=\"https://ghiscoding.github.io/angular-slickgrid-demos/assets/angular-logo2.png\" width=\"40\"\u003e\u003c/a\u003e | [Angular-Slickgrid](https://github.com/ghiscoding/slickgrid-universal/tree/master/frameworks/angular-slickgrid) / \u003cbr\u003e [Angular-Slickgrid-Demos](https://github.com/ghiscoding/angular-slickgrid-demos)  | [demo](https://ghiscoding.github.io/angular-slickgrid-demos) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/ghiscoding/angular-slickgrid-demos) | [![NPM downloads](https://img.shields.io/npm/dy/angular-slickgrid)](https://npmjs.org/package/angular-slickgrid) | [docs](https://ghiscoding.gitbook.io/angular-slickgrid/getting-started/quick-start) / \u003cbr\u003e [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks/angular-slickgrid/CHANGELOG.md) |\n| \u003ca href=\"https://aurelia.io/\" rel=\"nofollow\"\u003e\u003cimg alt=\"Aurelia\" src=\"https://ghiscoding.github.io/aurelia-slickgrid-demos/assets/aurelia-logo-9YSzF-gF.png\" width=\"45\"\u003e\u003c/a\u003e | [Aurelia-Slickgrid](https://github.com/ghiscoding/slickgrid-universal/tree/master/frameworks/aurelia-slickgrid) / \u003cbr\u003e [Aurelia-Slickgrid-Demos](https://github.com/ghiscoding/aurelia-slickgrid-demos) | [demo](https://ghiscoding.github.io/aurelia-slickgrid-demos) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/ghiscoding/aurelia-slickgrid-demos) | [![NPM downloads](https://img.shields.io/npm/dy/aurelia-slickgrid)](https://npmjs.org/package/aurelia-slickgrid) | [docs](https://ghiscoding.gitbook.io/aurelia-slickgrid/getting-started/quick-start) / \u003cbr\u003e [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks/aurelia-slickgrid/CHANGELOG.md) |\n| \u003ca href=\"https://react.dev/\" rel=\"nofollow\"\u003e\u003cimg alt=\"React\" src=\"https://ghiscoding.github.io/slickgrid-react-demos/assets/react-logo-DuD1bc7a.png\" width=\"55\"\u003e\u003c/a\u003e | [Slickgrid-React](https://github.com/ghiscoding/slickgrid-universal/tree/master/frameworks/slickgrid-react/) / \u003cbr\u003e [Slickgrid-React-Demos](https://github.com/ghiscoding/slickgrid-react-demos) | [demo](https://ghiscoding.github.io/slickgrid-react-demos) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/ghiscoding/slickgrid-react-demos/) | [![NPM downloads](https://img.shields.io/npm/dy/slickgrid-react)](https://npmjs.org/package/slickgrid-react) | [docs](https://ghiscoding.gitbook.io/slickgrid-react/getting-started/quick-start) / \u003cbr\u003e [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks/slickgrid-react/CHANGELOG.md) |\n| \u003ca href=\"https://vuejs.org/\"\u003e\u003cimg src=\"https://play.vuejs.org/logo.svg\" height=\"38\" alt=\"VueJS\"/\u003e\u003c/a\u003e | [Slickgrid-Vue](https://github.com/ghiscoding/slickgrid-universal/tree/master/frameworks/slickgrid-vue) / \u003cbr\u003e [Slickgrid-Vue-Demos](https://github.com/ghiscoding/slickgrid-vue-demos) | [demo](https://ghiscoding.github.io/slickgrid-vue-demos) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/ghiscoding/slickgrid-vue-demos) | [![NPM downloads](https://img.shields.io/npm/dy/slickgrid-vue)](https://npmjs.org/package/slickgrid-vue) | [docs](https://ghiscoding.gitbook.io/slickgrid-vue/getting-started/quick-start) / \u003cbr\u003e [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks/slickgrid-vue/CHANGELOG.md) |\n| \u003ca href=\"https://webpack.js.org/\"\u003e\u003cimg src=\"https://webpack.js.org/icon-square-small.9e8aff7a67a5dd20.svg\" height=\"50\" alt=\"WebPack\"/\u003e\u003c/a\u003e | [Slickgrid-Universal-WebPack-Demo](https://github.com/ghiscoding/slickgrid-universal-webpack-demo) | [demo](https://ghiscoding.github.io/slickgrid-universal-webpack-demo) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/ghiscoding/slickgrid-universal-webpack-demo) | | [docs](https://ghiscoding.gitbook.io/slickgrid-universal/) |\n| \u003ca href=\"https://vite.dev/\" rel=\"nofollow\"\u003e\u003cimg alt=\"ViteJS\" src=\"https://ghiscoding.github.io/slickgrid-universal-vite-demo/assets/favicon-C49brna2.svg\" width=\"45\"\u003e\u003c/a\u003e | [Slickgrid-Universal-Vite-Demo](https://github.com/ghiscoding/slickgrid-universal-vite-demo) | [demo](https://ghiscoding.github.io/slickgrid-universal-vite-demo) | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/ghiscoding/slickgrid-universal-vite-demo) | | [docs](https://ghiscoding.gitbook.io/slickgrid-universal/)\n| \u003ca href=\"https://lwc.dev/\" rel=\"nofollow\"\u003e\u003cimg alt=\"Salesforce (LWC)\" src=\"https://login.salesforce.com/img/logo214.svg\" width=\"52\"\u003e\u003c/a\u003e | [Slickgrid-Universal/vanilla-force-bundle](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/vanilla-force-bundle) | n/a | | [zip](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/vanilla-force-bundle/dist-grid-bundle-zip) file | [docs](https://ghiscoding.gitbook.io/slickgrid-universal/getting-started/installation-salesforce) |\n| \u003ca href=\"https://streamlit.io/\" rel=\"nofollow\"\u003e\u003cimg alt=\"Streamlit\" src=\"https://docs.streamlit.io/logo.svg\" width=\"45\"\u003e\u003c/a\u003e | [streamlit-slickgrid](https://github.com/streamlit/streamlit-slickgrid/) | [demo](https://slickgrid.streamlit.app/) | | | Community Python wrapper |\n\nThe Slickgrid-Universal [live demo](https://ghiscoding.github.io/slickgrid-universal) is a Vanilla Implementation (which is not associated to any framework) built with [ViteJS](https://vitejs.dev/) and is also being used to run all E2E tests with [Cypress](https://www.cypress.io/) for testing every UI functionalities. The [Vanilla-force-bundle](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/vanilla-force-bundle), which extends the [vanilla-bundle](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/vanilla-bundle) package, is what we use in our SalesForce LWC (Lightning Web Component) implementation and this Zip file can also be used as a Standalone script (see [zip](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/vanilla-force-bundle/dist-grid-bundle-zip) file). These were all the original reasons to create the library under a monorepo structure, but above all, it was mainly to avoid code duplication.\n\nDark Mode is also shown in some of the examples (not all), see [Dark Mode](https://ghiscoding.gitbook.io/slickgrid-universal/styling/dark-mode) documentation for more infos.\n\n### Fully Tested with [Vitest](https://vitest.dev/) (Unit Tests) - [Cypress](https://www.cypress.io/) (E2E Tests)\nSlickgrid-Universal has **100%** Unit Test Coverage, 5000+ Vitest unit tests and 1000+ Cypress E2E tests to cover **all** [Examples](https://ghiscoding.github.io/slickgrid-universal/) and most UI functionalities (each framework implementation also includes roughly the same amount of E2E tests), the goal is to offer peace of mind that pretty much all the code, features and PR changes are fully tested before releasing anything new. Every time a new Pull Request (PR) is created, it runs all unit tests and all Cypress E2E tests for all frameworks and they all run in parallel for a complete test suite.\n\n### Available Public Packages\n\n| Package Name | Version | Downloads | Changes | Optional |\n| -------------| ------- | --------: | ------- | :------: |\n| [@slickgrid-universal/common](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/common) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/common.svg)](https://www.npmjs.com/package/@slickgrid-universal/common) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/common.svg)](https://www.npmjs.com/package/@slickgrid-universal/common) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/common/CHANGELOG.md) | |\n| [@slickgrid-universal/binding](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/binding) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/binding.svg)](https://www.npmjs.com/package/@slickgrid-universal/binding) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/binding.svg)](https://www.npmjs.com/package/@slickgrid-universal/binding) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/binding/CHANGELOG.md) | |\n| [@slickgrid-universal/event-pub-sub](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/event-pub-sub) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/event-pub-sub.svg)](https://www.npmjs.com/package/@slickgrid-universal/event-pub-sub) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/event-pub-sub.svg)](https://www.npmjs.com/package/@slickgrid-universal/event-pub-sub) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/event-pub-sub/CHANGELOG.md) | |\n| [@slickgrid-universal/composite-editor-component](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/composite-editor-component) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/composite-editor-component.svg)](https://www.npmjs.com/package/@slickgrid-universal/composite-editor-component) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/composite-editor-component.svg)](https://www.npmjs.com/package/@slickgrid-universal/composite-editor-component) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/composite-editor-component/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/custom-footer-component](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/custom-footer-component) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/custom-footer-component.svg)](https://www.npmjs.com/package/@slickgrid-universal/custom-footer-component) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/custom-footer-component.svg)](https://www.npmjs.com/package/@slickgrid-universal/custom-footer-component) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/custom-footer-component/CHANGELOG.md) | |\n| [@slickgrid-universal/custom-tooltip-plugin](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/custom-tooltip-plugin) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/custom-tooltip-plugin.svg)](https://www.npmjs.com/package/@slickgrid-universal/custom-tooltip-plugin) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/custom-tooltip-plugin.svg)](https://www.npmjs.com/package/@slickgrid-universal/custom-tooltip-plugin) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/custom-tooltip-plugin/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/empty-warning-component](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/empty-warning-component) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/empty-warning-component.svg)](https://www.npmjs.com/package/@slickgrid-universal/empty-warning-component) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/empty-warning-component.svg)](https://www.npmjs.com/package/@slickgrid-universal/empty-warning-component) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/empty-warning-component/CHANGELOG.md) | |\n| [@slickgrid-universal/pagination-component](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/pagination-component) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/pagination-component.svg)](https://www.npmjs.com/package/@slickgrid-universal/pagination-component) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/pagination-component.svg)](https://www.npmjs.com/package/@slickgrid-universal/pagination-component) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/pagination-component/CHANGELOG.md) | |\n| [@slickgrid-universal/excel-export](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/excel-export) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/excel-export.svg)](https://www.npmjs.com/package/@slickgrid-universal/excel-export) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/excel-export.svg)](https://www.npmjs.com/package/@slickgrid-universal/excel-export) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/excel-export/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/pdf-export](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/pdf-export) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/pdf-export.svg)](https://www.npmjs.com/package/@slickgrid-universal/pdf-export) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/pdf-export.svg)](https://www.npmjs.com/package/@slickgrid-universal/pdf-export) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/pdf-export/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/text-export](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/text-export) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/text-export.svg)](https://www.npmjs.com/package/@slickgrid-universal/text-export) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/text-export.svg)](https://www.npmjs.com/package/@slickgrid-universal/text-export) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/text-export/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/graphql](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/graphql) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/graphql.svg)](https://www.npmjs.com/package/@slickgrid-universal/graphql) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/graphql.svg)](https://www.npmjs.com/package/@slickgrid-universal/graphql) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/graphql/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/odata](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/odata) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/odata.svg)](https://www.npmjs.com/package/@slickgrid-universal/odata) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/odata.svg)](https://www.npmjs.com/package/@slickgrid-universal/odata) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/odata/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/sql](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/sql) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/sql.svg)](https://www.npmjs.com/package/@slickgrid-universal/sql) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/sql.svg)](https://www.npmjs.com/package/@slickgrid-universal/sql) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/sql/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/row-detail-view-plugin](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/row-detail-view-plugin) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/row-detail-view-plugin.svg)](https://www.npmjs.com/package/@slickgrid-universal/row-detail-view-plugin) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/row-detail-view-plugin.svg)](https://www.npmjs.com/package/@slickgrid-universal/row-detail-view-plugin) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/row-detail-view-plugin/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/rxjs-observable](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/rxjs-observable) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/rxjs-observable.svg)](https://www.npmjs.com/package/@slickgrid-universal/rxjs-observable) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/rxjs-observable.svg)](https://www.npmjs.com/package/@slickgrid-universal/rxjs-observable) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/rxjs-observable/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/utils](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/utils) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/utils.svg)](https://www.npmjs.com/package/@slickgrid-universal/utils) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/utils.svg)](https://www.npmjs.com/package/@slickgrid-universal/utils) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/utils/CHANGELOG.md)\n| [@slickgrid-universal/vanilla-bundle](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/vanilla-bundle) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/vanilla-bundle.svg)](https://www.npmjs.com/package/@slickgrid-universal/vanilla-bundle) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/vanilla-bundle.svg)](https://www.npmjs.com/package/@slickgrid-universal/vanilla-bundle) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/vanilla-bundle/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/vanilla-force-bundle](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/vanilla-force-bundle) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/vanilla-force-bundle.svg)](https://www.npmjs.com/package/@slickgrid-universal/vanilla-force-bundle) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/vanilla-force-bundle.svg)](https://www.npmjs.com/package/@slickgrid-universal/vanilla-force-bundle) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/packages/vanilla-force-bundle/CHANGELOG.md) | ✓ |\n| ... | ... |  |  |\n| [@slickgrid-universal/angular-row-detail-plugin](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks-plugins/angular-row-detail-plugin) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/angular-row-detail-plugin.svg)](https://www.npmjs.com/package/@slickgrid-universal/angular-row-detail-plugin) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/angular-row-detail-plugin.svg)](https://www.npmjs.com/package/\"@slickgrid-universal/angular-row-detail-plugin) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks-plugins/angular-row-detail-plugin/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/aurelia-row-detail-plugin](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks-plugins/aurelia-row-detail-plugin) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/aurelia-row-detail-plugin.svg)](https://www.npmjs.com/package/@slickgrid-universal/aurelia-row-detail-plugin) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/aurelia-row-detail-plugin.svg)](https://www.npmjs.com/package/\"@slickgrid-universal/aurelia-row-detail-plugin) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks-plugins/aurelia-row-detail-plugin/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/react-row-detail-plugin](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks-plugins/react-row-detail-plugin) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/react-row-detail-plugin.svg)](https://www.npmjs.com/package/@slickgrid-universal/react-row-detail-plugin) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/react-row-detail-plugin.svg)](https://www.npmjs.com/package/\"@slickgrid-universal/react-row-detail-plugin) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks-plugins/react-row-detail-plugin/CHANGELOG.md) | ✓ |\n| [@slickgrid-universal/vue-row-detail-plugin](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks-plugins/vue-row-detail-plugin) | [![npm](https://img.shields.io/npm/v/@slickgrid-universal/vue-row-detail-plugin.svg)](https://www.npmjs.com/package/@slickgrid-universal/vue-row-detail-plugin) | [![NPM downloads](https://img.shields.io/npm/dy/@slickgrid-universal/vue-row-detail-plugin.svg)](https://www.npmjs.com/package/\"@slickgrid-universal/vue-row-detail-plugin) | [changelog](https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks-plugins/vue-row-detail-plugin/CHANGELOG.md) | ✓ |\n\n## Installation\n\n**NOTE:** the installation instructions below are **only** required if you want to contribute to this project, if you just want a quick Slickgrid-Universal demo, then I would suggest to try the following repos [Slickgrid-Universal Vite Demo](https://github.com/ghiscoding/slickgrid-universal-vite-demo) or [Slickgrid-Universal WebPack Demo](https://github.com/ghiscoding/slickgrid-universal-webpack-demo) and/or take a look at all the [available framework wrappers](https://github.com/ghiscoding/slickgrid-universal?tab=readme-ov-file#available-framework-wrappers) that you can clone and get started.\n\nTo get started with development in this monorepo, you will need to clone the repo and follow the steps shown below. Note that you must be at the root of the project in order to run the following commands, this project also requires `pnpm`.\n\n1. pnpm installation\n\nThis project uses [pnpm workspaces](https://pnpm.io/workspaces), you can install pnpm by choosing 1 of these 2 choices:\n\na. following their [installation](https://pnpm.io/installation)\n\nb. or install pnpm via Node [corepack](https://nodejs.org/api/corepack.html)\n\n```sh\ncorepack enable\n\n# optionally update pnpm to latest\ncorepack prepare pnpm@latest --activate\n```\n\n#### Specific Framework install\nFor a more targeted install, you could optionally install a specific framework (which avoids installing all frameworks).\nYou should only do that if you're only interested in contributing something specific to a framework wrapper, see commands below:\n\n```sh\n# install all framework wrappers\npnpm install\n\n# or install only a single framework wrapper\n# choose the command from list below depending on the framework\npnpm angular:install\npnpm aurelia:install\npnpm react:install\npnpm vue:install\n```\n\n2. Run Dev (Vanilla Implementation)\n\nThere is a Vanilla flavour implementation of this monorepo, vanilla means that it is not associated to any framework\nand is written in plain TypeScript without being bound to any framework. The implementation is very similar to Angular and Aurelia.\nIt could be used as a guideline to implement it for other framework wrappers.\n\n```bash\n# dev vanilla (default)\npnpm run dev\n\n# dev for Angular, Aurelia, React or Vue\npnpm run dev:angular\npnpm run dev:aurelia\npnpm run dev:react\npnpm run dev:vue\n```\n\n\n3. Build\n\nYou also need to run a full build in order to run the Vitest unit tests\n\n```bash\n# full build (all universal \u0026 all frameworks)\npnpm run build\n\n# or only Slickgrid-Universal packages (excludes all frameworks)\npnpm run build:universal\n```\n\n### Tests\nYou must go through Installation Steps 1-3 prior to running the Vitest unit tests OR steps 1-2 for Cypress E2E tests.\n\n#### [Vitest](https://vitest.dev/) Unit Tests\nTo run all unit tests (with Vitest), you can run one of the following commands (make sure that steps 1-3 were executed prior to running this command)\n\n```bash\npnpm run test\n```\n\n#### [Cypress](https://cypress.io/) E2E Tests\nTo run all E2E tests (with Cypress), you can run one of the following commands (make sure that steps 1-2 were executed prior to running this command)\n\n```bash\n# will open the Cypress GUI\npnpm run cypress\n\n# or run it in the shell (like a CI/CD would)\npnpm run cypress:ci\n```\n\n## Sponsors\n\nThanks to all my Sponsors\n\n\u003cdiv\u003e\n  \u003cspan\u003e\n    \u003ca href=\"https://github.com/wundergraph\" class=\"Link\" title=\"Wundergraph\" target=\"_blank\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/64281914\" width=\"50\" height=\"50\" valign=\"middle\" /\u003e\u003c/a\u003e\n  \u003c/span\u003e\n  \u0026nbsp;\n  \u003cspan\u003e\n    \u003ca href=\"https://github.com/johnsoncodehk\" class=\"Link\" title=\"johnsoncodehk (Volar)\" target=\"_blank\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/16279759\" width=\"50\" height=\"50\" valign=\"middle\" /\u003e\u003c/a\u003e\n  \u003c/span\u003e\n   \u0026nbsp;\n  \u003cspan\u003e\n    \u003ca href=\"https://github.com/kevinburkett\" class=\"Link\" title=\"kevinburkett\" target=\"_blank\"\u003e\u003cimg class=\"circle avatar-user\" src=\"https://avatars.githubusercontent.com/u/48218815?s=52\u0026amp;v=4\" width=\"45\" height=\"45\" valign=\"middle\" /\u003e\u003c/a\u003e\n  \u003c/span\u003e\n  \u0026nbsp;\n  \u003cspan\u003e\n    \u003ca href=\"https://github.com/anton-gustafsson\" class=\"Link\" title=\"anton-gustafsson\" target=\"_blank\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/22906905?s=52\u0026v=4\" width=\"50\" height=\"50\" valign=\"middle\" /\u003e\u003c/a\u003e\n  \u003c/span\u003e\n  \u0026nbsp;\n  \u003cspan\u003e\n    \u003ca href=\"https://github.com/gibson552\" class=\"Link\" title=\"gibson552\" target=\"_blank\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/84058359?s=52\u0026v=4\" width=\"50\" height=\"50\" valign=\"middle\" /\u003e\u003c/a\u003e\n  \u003c/span\u003e\n\u003c/div\u003e\n\n","funding_links":["https://github.com/sponsors/ghiscoding","https://ko-fi.com/ghiscoding","https://ko-fi.com/ghiscoding'"],"categories":["Third Party Components"],"sub_categories":["Data Grids"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghiscoding%2Fslickgrid-universal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fghiscoding%2Fslickgrid-universal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghiscoding%2Fslickgrid-universal/lists"}