Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
76 changes: 76 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# GitHub Copilot Instructions for slickgrid-universal

## Repository Overview
This is a monorepo for SlickGrid Universal containing:
- Core packages in `packages/` (common, plugins, exports, etc.)
- Framework wrappers in `frameworks/` (Angular, React, Vue, Aurelia)
- Demo applications in `demos/` for each framework
- except Angular demos which are located in `frameworks/angular-slickgrid/src/demos`
- Shared test utilities in `test/`

## Code Standards

### Testing
- Use **Vitest** for unit tests (`.spec.ts` files)
- Use **Cypress** for E2E tests (`.cy.ts` files in `test/cypress/e2e/`)
- Aim for 100% statement coverage on core functionality
- Test files are usually in `__tests__/` subdirectory (or same folder if only 1-2 test files)
- Unit tests exist in 2 implementations:
- Native/vanilla implementation: all under `packages/`
- Angular-specific tests: under `frameworks/angular-slickgrid/`

### TypeScript Patterns
- Use strict TypeScript with proper typing
- Prefer `interface` over `type` for object shapes
- Use `protected` for class methods that may be extended
- Follow existing naming conventions: `_privateField`, `publicMethod`

### Code Formatting & Linting
- **OXLint** is used for linting TypeScript/JavaScript code
- **Prettier** handles code formatting automatically
- Code should be formatted before committing
- Run `pnpm lint:fix` to auto-fix linting issues
- Run `pnpm prettier:write` to format code
- Ensure no linting errors before creating pull requests

### Plugin Development
- All plugins extend SlickGrid and use `SlickEventHandler`
- Use `BindingEventService` for DOM event binding/cleanup
- Always implement `init()`, `dispose()`, and `getOptions()`/`setOptions()`
- Plugins should support both grid options and column definition options

### Framework Support
When making changes to demos or documentation:
- Update **all 4 frameworks**: Angular, React, Vue, Aurelia
- Maintain consistency across framework implementations
- Check for framework-specific syntax (e.g., Vue's template vs React's JSX)

### Documentation
- Update corresponding docs in `docs/` AND framework-specific `frameworks/*/docs/`
- Use markdown with proper linking: `[file.ts](path/to/file.ts)`
- Include code examples that work across frameworks

## Common Commands
- `pnpm build` - Build all packages
- aka "Build Everything" task, which builds all packages and frameworks in the monorepo
- `pnpm lint` - Run linter (OXLint) on all files
- `pnpm lint:fix` - Auto-fix linting issues
- `pnpm prettier:check` - Check code formatting
- `pnpm prettier:write` - Format code with Prettier
- `pnpm test` - Run Vitest unit tests
- `pnpm test:coverage` - Run tests with coverage
- `pnpm dev` - Start vanilla demo
- `pnpm dev:[framework]` - Start framework-specific demos
- e.g.: `dev:angular`, `dev:react`, `dev:vue`, `dev:aurelia`

## Monorepo Structure
- Changes to `packages/*` affect all frameworks
- Framework wrappers depend on core packages
- Use relative imports within packages
- Avoid circular dependencies

## Code Review Focus
- Maintain backward compatibility
- Consider impact across all 4 framework implementations
- Verify tests pass and coverage remains high
- Check that examples work in all framework demos
14 changes: 0 additions & 14 deletions .github/renovate.json5
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,6 @@
enabled: false,
},
},
{
description: 'Prevent major updates for Vite 6 catalog',
matchDepTypes: ['pnpm.catalog.vite6'],
major: {
enabled: false,
},
},
{
description: 'Ignore Analog packages',
matchPackagePatterns: ['^@analogjs/'],
groupName: 'Analog packages',
allowedVersions: '2.2.2',
enabled: false, // This will completely disable updates for Analog packages
},
],
ignoreDeps: ['lee-dohm/no-response', 'node', 'pnpm', 'typescript'],
schedule: ['every 4 weeks on friday'],
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pkg-pr-new.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ jobs:
run: pnpm build

- name: Publish
run: pnpm dlx pkg-pr-new publish --no-template --pnpm './packages/*' './frameworks/*'
run: pnpm dlx pkg-pr-new publish --no-template --pnpm './packages/*' './frameworks/*' './frameworks-plugins/*'
49 changes: 34 additions & 15 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ on:
dryrun:
type: boolean
description: Dry-Run
graduate:
type: boolean
description: Force Conventional Graduate
tag:
type: choice
default: latest
Expand Down Expand Up @@ -73,20 +70,19 @@ jobs:
- name: Lerna Version (build query)
shell: bash
run: |
if ${{inputs.dryrun == true && inputs.graduate != true}}
if ${{inputs.dryrun == true && (inputs.tag == 'alpha' || inputs.tag == 'beta' || inputs.tag == 'next')}}
then
echo "LERNA_VERSION_TYPE=🧪 Dry-Run w/Prerelease" >> $GITHUB_ENV
echo "LERNA_VERSION_QUERY=lerna version --yes --conventional-prerelease --preid ${{ inputs.tag }} --dry-run" >> $GITHUB_ENV
elif ${{inputs.dryrun == true}}
then
echo "LERNA_VERSION_TYPE=🧪 Dry-Run" >> $GITHUB_ENV
echo "LERNA_VERSION_QUERY=lerna version --yes --dry-run" >> $GITHUB_ENV
elif ${{inputs.dryrun == true && inputs.graduate == true}}
then
echo "LERNA_VERSION_TYPE=🧪 Dry-Run w/Graduate" >> $GITHUB_ENV
echo "LERNA_VERSION_QUERY=lerna version --yes --dry-run --conventional-graduate" >> $GITHUB_ENV
elif ${{inputs.dryrun != true && inputs.graduate == true}}
then
echo "LERNA_VERSION_TYPE=🚀 Prod Version w/Graduate" >> $GITHUB_ENV
echo "LERNA_VERSION_QUERY=lerna version --yes --conventional-graduate" >> $GITHUB_ENV
elif ${{inputs.dryrun != true && inputs.graduate != true}}
elif ${{inputs.tag == 'alpha' || inputs.tag == 'beta' || inputs.tag == 'next'}}
then
echo "LERNA_VERSION_TYPE=🚀 Prod Version w/Prerelease" >> $GITHUB_ENV
echo "LERNA_VERSION_QUERY=lerna version --yes --conventional-prerelease --preid ${{ inputs.tag }}" >> $GITHUB_ENV
else
echo "LERNA_VERSION_TYPE=🚀 Prod Version" >> $GITHUB_ENV
echo "LERNA_VERSION_QUERY=lerna version --yes" >> $GITHUB_ENV
fi
Expand All @@ -104,13 +100,36 @@ jobs:
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
pnpm exec ${{ env.LERNA_VERSION_QUERY }}

- name: Lerna Publish (build query)
shell: bash
run: |
if ${{inputs.dryrun == true && (inputs.tag == 'alpha' || inputs.tag == 'beta' || inputs.tag == 'next')}}
then
echo "LERNA_PUBLISH_TYPE=🧪 Dry-Run w/Prerelease" >> $GITHUB_ENV
echo "LERNA_PUBLISH_QUERY=lerna publish from-package --force-publish --yes --pre-dist-tag ${{ inputs.tag }} --dry-run" >> $GITHUB_ENV
elif ${{inputs.dryrun == true}}
then
echo "LERNA_PUBLISH_TYPE=🧪 Dry-Run" >> $GITHUB_ENV
echo "LERNA_PUBLISH_QUERY=lerna publish from-package --force-publish --yes --dist-tag latest --dry-run" >> $GITHUB_ENV
elif [[ "${{ inputs.tag }}" == "alpha" || "${{ inputs.tag }}" == "beta" || "${{ inputs.tag }}" == "next" ]]
then
echo "LERNA_PUBLISH_TYPE=📦 Publish w/Prerelease" >> $GITHUB_ENV
echo "LERNA_PUBLISH_QUERY=lerna publish from-package --force-publish --yes --pre-dist-tag ${{ inputs.tag }}" >> $GITHUB_ENV
else
echo "LERNA_PUBLISH_TYPE=📦 Publish Latest" >> $GITHUB_ENV
echo "LERNA_PUBLISH_QUERY=lerna publish from-package --force-publish --yes --dist-tag latest" >> $GITHUB_ENV
fi

- name: Final publish type → ${{ env.LERNA_PUBLISH_TYPE }}
shell: bash
run: echo "${{ env.LERNA_PUBLISH_QUERY }}"

- name: Lerna Publish 📦
if: ${{ inputs.dryrun != true }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
id: lerna-publish
run: pnpm exec lerna publish from-package --force-publish --yes --dist-tag ${{ inputs.tag || 'latest' }}
run: pnpm exec ${{ env.LERNA_PUBLISH_QUERY }}

- name: Website Dev Build
run: pnpm build:dev
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/test-angular.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ jobs:
- name: Angular-Slickgrid Framework Build
run: pnpm angular:build:framework

- name: Angular-Slickgrid Framework-Plugins Build
run: pnpm angular:build:framework-plugins

- name: Website Dev Build (served for Cypress)
run: pnpm angular:build:demo

Expand All @@ -80,7 +83,7 @@ jobs:
run: pnpm angular:serve &

- name: Run Cypress E2E tests
uses: cypress-io/github-action@v6
uses: cypress-io/github-action@v7
with:
install: false
package-manager-cache: false
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/test-aurelia.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ jobs:
- name: Aurelia-Slickgrid Framework Build
run: pnpm aurelia:build:framework

- name: Aurelia-Slickgrid Framework-Plugins Build
run: pnpm aurelia:build:framework-plugins

- name: Website Dev Build (served for Cypress)
run: pnpm aurelia:build:demo

Expand All @@ -65,7 +68,7 @@ jobs:
run: pnpm aurelia:serve &

- name: Run Cypress E2E tests
uses: cypress-io/github-action@v6
uses: cypress-io/github-action@v7
with:
install: false
package-manager-cache: false
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/test-react.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ jobs:
- name: Slickgrid-React Framework Build
run: pnpm react:build:framework

- name: Slickgrid-React Framework-Plugins Build
run: pnpm react:build:framework-plugins

- name: Website Dev Build (served for Cypress)
run: pnpm react:build:demo

Expand All @@ -65,7 +68,7 @@ jobs:
run: pnpm react:serve &

- name: Run Cypress E2E tests
uses: cypress-io/github-action@v6
uses: cypress-io/github-action@v7
with:
install: false
package-manager-cache: false
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-vanilla.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
run: pnpm vanilla:serve:demo &

- name: Run Cypress E2E tests
uses: cypress-io/github-action@v6
uses: cypress-io/github-action@v7
with:
install: false
package-manager-cache: false
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/test-vue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ jobs:
- name: Slickgrid-Vue Framework Build
run: pnpm vue:build:framework

- name: Slickgrid-Vue Framework-Plugins Build
run: pnpm vue:build:framework-plugins

- name: Website Dev Build (served for Cypress)
run: pnpm vue:build:demo

Expand All @@ -65,7 +68,7 @@ jobs:
run: pnpm vue:serve &

- name: Run Cypress E2E tests
uses: cypress-io/github-action@v6
uses: cypress-io/github-action@v7
with:
install: false
package-manager-cache: false
Expand Down
4 changes: 3 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
_variables.scss
_variables-theme-material.scss
_variables-theme-salesforce.scss
**/test/vitest-coverage/*.*
**/test/vitest-coverage/*.*
demos/vue/src/router/index.ts
demos/react/src/examples/slickgrid/App.tsx
4 changes: 3 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
],
"typescript.format.semicolons": "insert",
"vitest.rootConfig": "./test/vitest.config.mts",
"typescript.tsdk": "node_modules\\typescript\\lib"
"typescript.tsdk": "node_modules\\typescript\\lib",
"prettier.prettierPath": "node_modules/prettier/index.cjs",
"prettier.configPath": ".prettierrc"
}
52 changes: 52 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,58 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [10.0.0-beta.0](https://github.com/ghiscoding/slickgrid-universal/compare/v9.12.0...v10.0.0-beta.0) (2026-02-14)

### ⚠ BREAKING CHANGES

* **angular:** migrate Angular-Slickgrid to Zoneless (#2341)
* **angular:** migrate Angular-Slickgrid to Standalone Component (#2339)
* upgrade to Angular 21 (#2338)
* migrate Row/Hybrid Selection flag into a single `enableSelection` flag (#2331)
* drop Cell/Row Selection Models & keep only HybridSelectionModel (#2330)
* remove all Deprecated code (#2302)
* drop OperatorType enums and keep only type literal (#2301)
* replacing multiple TypeScript `enum` with `type` to decrease build size (#2300)
* drop FieldType enums and keep only field type literal (#2299)
* rename `v-model:data` to `v-model:dataset` (#2298)
* make Row Detail plugin as optional in all framework wrappers (#2291)
* rewrite Grid Menu using CSS flexbox instead of width and calc() (#2282)
* switch to column `hidden` property and always keep all columns (#2281)

### Features

* add custom menu slot renderers ([#2375](https://github.com/ghiscoding/slickgrid-universal/issues/2375)) ([7ebbda5](https://github.com/ghiscoding/slickgrid-universal/commit/7ebbda58233bb5ce94b81b5b2b578af0ea6a068d)) - by @ghiscoding
* **angular:** migrate Angular-Slickgrid to Standalone Component ([#2339](https://github.com/ghiscoding/slickgrid-universal/issues/2339)) ([89e8e26](https://github.com/ghiscoding/slickgrid-universal/commit/89e8e261af4a747b9bfd274d3df0953b231edb97)) - by @ghiscoding
* **angular:** migrate Angular-Slickgrid to Zoneless ([#2341](https://github.com/ghiscoding/slickgrid-universal/issues/2341)) ([f55cbe2](https://github.com/ghiscoding/slickgrid-universal/commit/f55cbe28ce6999fb3933bc55372c22a84df99a15)) - by @ghiscoding
* auto-enabled external resources with their associated flags ([#2362](https://github.com/ghiscoding/slickgrid-universal/issues/2362)) ([16dd8a7](https://github.com/ghiscoding/slickgrid-universal/commit/16dd8a77dd5d136a5a99321f0fc4c50571fdb0c0)) - by @ghiscoding
* bind css classes to slickgrid container ([#2369](https://github.com/ghiscoding/slickgrid-universal/issues/2369)) ([a7cd4aa](https://github.com/ghiscoding/slickgrid-universal/commit/a7cd4aa6af3688ebf1ec09140856ea451a6789da)) - by @zewa666
* drop Cell/Row Selection Models & keep only HybridSelectionModel ([#2330](https://github.com/ghiscoding/slickgrid-universal/issues/2330)) ([4398cf4](https://github.com/ghiscoding/slickgrid-universal/commit/4398cf42e03f6971b81db8cea4ed11138c0aa452)) - by @ghiscoding
* F2 activates cell editor, closes [#2351](https://github.com/ghiscoding/slickgrid-universal/issues/2351) ([#2370](https://github.com/ghiscoding/slickgrid-universal/issues/2370)) ([6e06f9d](https://github.com/ghiscoding/slickgrid-universal/commit/6e06f9dd3e0ff78650683b0641191b94f2a2aa96)) - by @zewa666
* make Row Detail plugin as optional in all framework wrappers ([#2291](https://github.com/ghiscoding/slickgrid-universal/issues/2291)) ([fa1a14c](https://github.com/ghiscoding/slickgrid-universal/commit/fa1a14c16c987bfaf7725c46e8114b20ea5a505d)) - by @ghiscoding
* migrate Row/Hybrid Selection flag into a single `enableSelection` flag ([#2331](https://github.com/ghiscoding/slickgrid-universal/issues/2331)) ([5be5e6a](https://github.com/ghiscoding/slickgrid-universal/commit/5be5e6a862ecd024cf43d404769d65c6c1dd335e)) - by @ghiscoding
* rename `v-model:data` to `v-model:dataset` ([#2298](https://github.com/ghiscoding/slickgrid-universal/issues/2298)) ([34f42f2](https://github.com/ghiscoding/slickgrid-universal/commit/34f42f2d14c9a1b39a2695c8a885ff2bee53d0b5)) - by @ghiscoding
* **SlickCompositeEditor:** migrate modal from div to dialog ([#2283](https://github.com/ghiscoding/slickgrid-universal/issues/2283)) ([371c2c6](https://github.com/ghiscoding/slickgrid-universal/commit/371c2c675728f51785485280237572ef5a584eeb)) - by @ghiscoding
* switch to column `hidden` property and always keep all columns ([#2281](https://github.com/ghiscoding/slickgrid-universal/issues/2281)) ([075c649](https://github.com/ghiscoding/slickgrid-universal/commit/075c64961cb7400500df46b792866d39fba2d9e0)) - by @ghiscoding
* **tooltip:** add global tooltip observation for non-grid elements ([#2371](https://github.com/ghiscoding/slickgrid-universal/issues/2371)) ([1bbc8de](https://github.com/ghiscoding/slickgrid-universal/commit/1bbc8de895e370843286eadd08574efc552ad8fd)) - by @ghiscoding
* upgrade to Angular 21 ([#2338](https://github.com/ghiscoding/slickgrid-universal/issues/2338)) ([012def2](https://github.com/ghiscoding/slickgrid-universal/commit/012def265a4e5cb0738ea211d073df129a2eecd9)) - by @ghiscoding

### Bug Fixes

* **deps:** update all non-major dependencies ([#2292](https://github.com/ghiscoding/slickgrid-universal/issues/2292)) ([21da957](https://github.com/ghiscoding/slickgrid-universal/commit/21da95702f44739a9f1b226e305c18a1fa64000f)) - by @renovate-bot
* **filters:** prevent tooltip triggers on Slider programmatic updates ([#2372](https://github.com/ghiscoding/slickgrid-universal/issues/2372)) ([5734d59](https://github.com/ghiscoding/slickgrid-universal/commit/5734d59a4acfd5c32571ee2f0839561966b1ee2c)) - by @ghiscoding
* HybridSelectionModelOption should all be optional ([#2293](https://github.com/ghiscoding/slickgrid-universal/issues/2293)) ([1b8f760](https://github.com/ghiscoding/slickgrid-universal/commit/1b8f76060493c43a62e956fb9bf5e0e2feaf4a1f)) - by @ghiscoding
* **plugin:** SlickCustomTooltip should work with parent+child tooltips ([#2374](https://github.com/ghiscoding/slickgrid-universal/issues/2374)) ([8af7f45](https://github.com/ghiscoding/slickgrid-universal/commit/8af7f45eb19f0a00da2f3de7c729504be7d043eb)) - by @ghiscoding
* pre-set value for editor validation on paste ([#2368](https://github.com/ghiscoding/slickgrid-universal/issues/2368)) ([2df5cc5](https://github.com/ghiscoding/slickgrid-universal/commit/2df5cc5d529bff41513b05ecb322efc64d234d64)) - by @zewa666
* remove all Deprecated code ([#2302](https://github.com/ghiscoding/slickgrid-universal/issues/2302)) ([f42c46c](https://github.com/ghiscoding/slickgrid-universal/commit/f42c46cd1f05b5c72c62f552f124b5bfe776f8b0)) - by @ghiscoding
* **styling:** add missing row highlight assignment for Dark Mode ([6ae55de](https://github.com/ghiscoding/slickgrid-universal/commit/6ae55de071325e37123a4eb32bd57a0d00581a17)) - by @ghiscoding

### Code Refactoring

* drop FieldType enums and keep only field type literal ([#2299](https://github.com/ghiscoding/slickgrid-universal/issues/2299)) ([3858ed0](https://github.com/ghiscoding/slickgrid-universal/commit/3858ed06a9496ddfa94d769ce1d415b68e18c993)) - by @ghiscoding
* drop OperatorType enums and keep only type literal ([#2301](https://github.com/ghiscoding/slickgrid-universal/issues/2301)) ([5dd0807](https://github.com/ghiscoding/slickgrid-universal/commit/5dd08079460dc9af798ab29527997a6d4b31abdd)) - by @ghiscoding
* replacing multiple TypeScript `enum` with `type` to decrease build size ([#2300](https://github.com/ghiscoding/slickgrid-universal/issues/2300)) ([ea79395](https://github.com/ghiscoding/slickgrid-universal/commit/ea79395cf663b3abce8e43cf27ba6ffea7cfe113)) - by @ghiscoding
* rewrite Grid Menu using CSS flexbox instead of width and calc() ([#2282](https://github.com/ghiscoding/slickgrid-universal/issues/2282)) ([2f5141a](https://github.com/ghiscoding/slickgrid-universal/commit/2f5141a12a765510e30a7155a7bf714e3462cfc1)) - by @ghiscoding

## [9.13.0](https://github.com/ghiscoding/slickgrid-universal/compare/v9.12.0...v9.13.0) (2026-01-30)

### Features
Expand Down
Loading
Loading