Skip to content
Closed

Next #2378

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
075c649
feat!: switch to column `hidden` property and always keep all columns…
ghiscoding Dec 30, 2025
2f5141a
refactor!: rewrite Grid Menu using CSS flexbox instead of width and c…
ghiscoding Dec 30, 2025
371c2c6
feat(SlickCompositeEditor): migrate modal from div to dialog (#2283)
ghiscoding Dec 30, 2025
fa1a14c
feat!: make Row Detail plugin as optional in all framework wrappers (…
ghiscoding Dec 30, 2025
4ce9d62
chore: rename all row detail wrappers with plugin suffix (#2297)
ghiscoding Jan 4, 2026
b1ce9f3
chore: replace tinyglobby code usage with native node:fs
ghiscoding Jan 4, 2026
2190808
docs: add all framework Migration Guides v10
ghiscoding Jan 4, 2026
5012294
docs: remove Flatpickr date editor docs
ghiscoding Jan 4, 2026
34f42f2
feat!: rename `v-model:data` to `v-model:dataset` (#2298)
ghiscoding Jan 4, 2026
7b1c743
docs: add version compatibility for upcoming v10
ghiscoding Jan 6, 2026
3d5b13a
Merge branch 'next' of https://github.com/ghiscoding/slickgrid-univer…
ghiscoding Jan 6, 2026
2fe7c66
chore: merge branch 'master' into next
ghiscoding Jan 6, 2026
3858ed0
refactor!: drop FieldType enums and keep only field type literal (#2299)
ghiscoding Jan 7, 2026
ea79395
refactor!: replacing multiple TypeScript `enum` with `type` to decrea…
ghiscoding Jan 7, 2026
5dd0807
refactor!: drop OperatorType enums and keep only type literal (#2301)
ghiscoding Jan 8, 2026
f42c46c
fix!: remove all Deprecated code (#2302)
ghiscoding Jan 8, 2026
54731fb
docs: add Renovate labels
ghiscoding Jan 8, 2026
a75f13a
docs: add Renovate labels
ghiscoding Jan 8, 2026
7a544aa
docs: add Renovate labels
ghiscoding Jan 8, 2026
04e6f10
chore: update oxlint requires "import/extensions" rule config changes…
ghiscoding Jan 8, 2026
06810e3
chore: update pnpm lock file
ghiscoding Jan 9, 2026
f061e50
chore: merge branch 'master' into next
ghiscoding Jan 9, 2026
43c8201
chore: rename double type filenames (#2304)
ghiscoding Jan 9, 2026
0ca5fa2
chore: merge latest changes from master branch (#2323)
ghiscoding Jan 21, 2026
245791a
chore: merge master branch into next (#2328)
ghiscoding Jan 22, 2026
4398cf4
feat!: drop Cell/Row Selection Models & keep only HybridSelectionMode…
ghiscoding Jan 24, 2026
5be5e6a
feat!: migrate Row/Hybrid Selection flag into a single `enableSelecti…
ghiscoding Jan 25, 2026
2c1149f
chore: merge latest master branch changes (#2334)
ghiscoding Jan 25, 2026
fc52634
chore(deps): update `remove-glob`/`native-copyfiles` to new major (#2…
ghiscoding Jan 27, 2026
458ba2a
docs: update migration guide 10.x
ghiscoding Jan 28, 2026
2442f79
chore(deps): upgrade to Angular 20 (#2337)
ghiscoding Jan 28, 2026
012def2
feat!: upgrade to Angular 21 (#2338)
ghiscoding Jan 29, 2026
aaa2fe0
chore(deps): remove AnalogJS and use an experimental Vitest setup (#2…
ghiscoding Jan 30, 2026
a34168b
chore(build): use TypeScript `moduleResolution: bundler` and enable `…
ghiscoding Jan 31, 2026
b044e7f
chore(deps): merge branch 'master' into next (#2348)
ghiscoding Jan 31, 2026
8f81368
refactor: add CompositeEditor `domElementType` fallback for Salesforc…
ghiscoding Feb 2, 2026
15b4ab5
chore: deprecate `ExtensionName` enum to be replaced by string type (…
ghiscoding Feb 2, 2026
344e927
chore: fix Cypress test failing when running Sunday 1st day of month …
ghiscoding Feb 2, 2026
e13994d
docs: improve migration guides 10.0
ghiscoding Feb 2, 2026
fc5fb3e
docs: improve migration guides 10.0
ghiscoding Feb 2, 2026
2a35e48
chore(deps): update `multiple-select-vanilla` to v5.0 (#2357)
ghiscoding Feb 4, 2026
89e8e26
feat(angular)!: migrate Angular-Slickgrid to Standalone Component (#2…
ghiscoding Feb 4, 2026
f55cbe2
feat(angular)!: migrate Angular-Slickgrid to Zoneless (#2341)
ghiscoding Feb 5, 2026
36d02fd
chore: merge branch 'master' into next branch & update dependencies (…
ghiscoding Feb 5, 2026
2e19b7a
chore: replace [ngClass] with [class]
ghiscoding Feb 5, 2026
91be422
chore: spread GlobalGridOptions from common to all frameworks (#2360)
ghiscoding Feb 5, 2026
103d3e9
chore: check frameworks/plugins build before running framework watch …
ghiscoding Feb 5, 2026
04cf372
chore: disable all pnpm script install & reduce lerna-lite logs
ghiscoding Feb 5, 2026
6c1f807
chore(deps): update excel-builder-vanilla to v5.0.0
ghiscoding Feb 5, 2026
53bdf23
chore: remove common styles folder before running SASS build
ghiscoding Feb 5, 2026
e0c1951
ci(release): add conventional-prerelease and dry-run support
ghiscoding Feb 5, 2026
16dd8a7
feat: auto-enabled external resources with their associated flags (#2…
ghiscoding Feb 7, 2026
527ee2d
docs: update invalid links
ghiscoding Feb 9, 2026
460d9d5
refactor(presets): merge duplicate column preset loading logic (#2364)
ghiscoding Feb 9, 2026
b06e901
chore(deps): update all dependencies in next branch & use more catalo…
ghiscoding Feb 9, 2026
56148e2
chore(build): pre-create dist/css folder for SASS to avoid flaky buil…
ghiscoding Feb 9, 2026
2df5cc5
fix: pre-set value for editor validation on paste (#2368)
zewa666 Feb 10, 2026
6ae55de
fix(styling): add missing row highlight assignment for Dark Mode
ghiscoding Feb 11, 2026
6d9729d
docs: improve migration guides
ghiscoding Feb 11, 2026
8fb9b1e
docs: improve migration guides
ghiscoding Feb 11, 2026
a7cd4aa
feat: bind css classes to slickgrid container (#2369)
zewa666 Feb 11, 2026
5734d59
fix(filters): prevent tooltip triggers on Slider programmatic updates…
ghiscoding Feb 12, 2026
6e06f9d
feat: F2 activates cell editor, closes #2351 (#2370)
zewa666 Feb 12, 2026
1bbc8de
feat(tooltip): add global tooltip observation for non-grid elements (…
ghiscoding Feb 12, 2026
63435b7
docs: add GitHub Copilot instructions for repository
ghiscoding Feb 12, 2026
8af7f45
fix(plugin): SlickCustomTooltip should work with parent+child tooltip…
ghiscoding Feb 13, 2026
7ebbda5
feat: add custom menu slot renderers (#2375)
ghiscoding Feb 14, 2026
2b83128
chore(deps): update all dependencies & remove Nx (#2377)
ghiscoding Feb 14, 2026
9ee3b4c
chore(release): publish new version v10.0.0-beta.0
ghiscoding Feb 14, 2026
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
7 changes: 0 additions & 7 deletions .github/renovate.json5
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,6 @@
enabled: false,
},
},
{
description: 'Prevent major updates for Vite 6 catalog',
matchDepTypes: ['pnpm.catalog.vite6'],
major: {
enabled: false,
},
},
],
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
14 changes: 5 additions & 9 deletions .github/workflows/test-angular.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,27 +70,23 @@ 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

- name: Cache Cypress binary
uses: actions/cache@v5
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-cypress-

- name: Ensure Cypress binary is installed
run: pnpm exec cypress install

- name: Start HTTP Server
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
working-directory: frameworks/angular-slickgrid
# start: pnpm angular:serve
wait-on: 'http://localhost:4300'
Expand Down
14 changes: 5 additions & 9 deletions .github/workflows/test-aurelia.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,27 +55,23 @@ 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

- name: Cache Cypress binary
uses: actions/cache@v5
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-cypress-

- name: Ensure Cypress binary is installed
run: pnpm exec cypress install

- name: Start HTTP Server
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
working-directory: demos/aurelia
# start: pnpm aurelia:serve
wait-on: 'http://localhost:7900'
Expand Down
14 changes: 5 additions & 9 deletions .github/workflows/test-react.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,27 +55,23 @@ 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

- name: Cache Cypress binary
uses: actions/cache@v5
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-cypress-

- name: Ensure Cypress binary is installed
run: pnpm exec cypress install

- name: Start HTTP Server
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
working-directory: demos/react
wait-on: 'http://localhost:8000'
config-file: test/cypress.config.ts
Expand Down
11 changes: 2 additions & 9 deletions .github/workflows/test-vanilla.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,24 +55,17 @@ jobs:
- name: Website Dev Build (served for Cypress)
run: pnpm build:dev

- name: Cache Cypress binary
uses: actions/cache@v5
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-cypress-

- name: Ensure Cypress binary is installed
run: pnpm exec cypress install

- name: Start HTTP Server
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
# working-directory: packages/dnd
# start: pnpm vanilla:serve:demo
# start: pnpm serve:vite
Expand Down
14 changes: 5 additions & 9 deletions .github/workflows/test-vue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,27 +55,23 @@ 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

- name: Cache Cypress binary
uses: actions/cache@v5
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-cypress-

- name: Ensure Cypress binary is installed
run: pnpm exec cypress install

- name: Start HTTP Server
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
working-directory: demos/vue
# start: pnpm vue:serve
wait-on: 'http://localhost:7000'
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"
}
Loading