diff --git a/docs/config.json b/docs/config.json
index 135cbab733..d70dfd8833 100644
--- a/docs/config.json
+++ b/docs/config.json
@@ -442,6 +442,10 @@
{
"to": "framework/angular/examples/editable",
"label": "Editable data"
+ },
+ {
+ "to": "framework/angular/examples/row-dnd",
+ "label": "Row DnD"
}
]
},
diff --git a/examples/angular/editable/package.json b/examples/angular/editable/package.json
index a8f70e6cf3..b01d3ffe33 100644
--- a/examples/angular/editable/package.json
+++ b/examples/angular/editable/package.json
@@ -1,5 +1,5 @@
{
- "name": "tanstack-table-example-angular-basic",
+ "name": "tanstack-table-example-angular-editable",
"version": "0.0.0",
"scripts": {
"ng": "ng",
diff --git a/examples/angular/row-dnd/.devcontainer/devcontainer.json b/examples/angular/row-dnd/.devcontainer/devcontainer.json
new file mode 100644
index 0000000000..36f47d8762
--- /dev/null
+++ b/examples/angular/row-dnd/.devcontainer/devcontainer.json
@@ -0,0 +1,4 @@
+{
+ "name": "Node.js",
+ "image": "mcr.microsoft.com/devcontainers/javascript-node:18"
+}
diff --git a/examples/angular/row-dnd/.editorconfig b/examples/angular/row-dnd/.editorconfig
new file mode 100644
index 0000000000..59d9a3a3e7
--- /dev/null
+++ b/examples/angular/row-dnd/.editorconfig
@@ -0,0 +1,16 @@
+# Editor configuration, see https://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.ts]
+quote_type = single
+
+[*.md]
+max_line_length = off
+trim_trailing_whitespace = false
diff --git a/examples/angular/row-dnd/.gitignore b/examples/angular/row-dnd/.gitignore
new file mode 100644
index 0000000000..0711527ef9
--- /dev/null
+++ b/examples/angular/row-dnd/.gitignore
@@ -0,0 +1,42 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# Compiled output
+/dist
+/tmp
+/out-tsc
+/bazel-out
+
+# Node
+/node_modules
+npm-debug.log
+yarn-error.log
+
+# IDEs and editors
+.idea/
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# Visual Studio Code
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+.history/*
+
+# Miscellaneous
+/.angular/cache
+.sass-cache/
+/connect.lock
+/coverage
+/libpeerconnection.log
+testem.log
+/typings
+
+# System files
+.DS_Store
+Thumbs.db
diff --git a/examples/angular/row-dnd/README.md b/examples/angular/row-dnd/README.md
new file mode 100644
index 0000000000..8494f725e3
--- /dev/null
+++ b/examples/angular/row-dnd/README.md
@@ -0,0 +1,27 @@
+# Row Dnd
+
+This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.1.2.
+
+## Development server
+
+Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
+
+## Code scaffolding
+
+Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
+
+## Build
+
+Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
+
+## Running unit tests
+
+Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
+
+## Running end-to-end tests
+
+Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
+
+## Further help
+
+To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
diff --git a/examples/angular/row-dnd/angular.json b/examples/angular/row-dnd/angular.json
new file mode 100644
index 0000000000..9d3e074954
--- /dev/null
+++ b/examples/angular/row-dnd/angular.json
@@ -0,0 +1,94 @@
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "version": 1,
+ "newProjectRoot": "projects",
+ "projects": {
+ "editable": {
+ "cli": {
+ "cache": {
+ "enabled": false
+ }
+ },
+ "projectType": "application",
+ "schematics": {
+ "@schematics/angular:component": {
+ "style": "scss"
+ }
+ },
+ "root": "",
+ "sourceRoot": "src",
+ "prefix": "app",
+ "architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:application",
+ "options": {
+ "outputPath": "dist/editable",
+ "index": "src/index.html",
+ "browser": "src/main.ts",
+ "polyfills": ["zone.js"],
+ "tsConfig": "tsconfig.app.json",
+ "inlineStyleLanguage": "scss",
+ "assets": ["src/favicon.ico", "src/assets"],
+ "styles": ["src/styles.scss"],
+ "scripts": []
+ },
+ "configurations": {
+ "production": {
+ "budgets": [
+ {
+ "type": "initial",
+ "maximumWarning": "500kb",
+ "maximumError": "1mb"
+ },
+ {
+ "type": "anyComponentStyle",
+ "maximumWarning": "2kb",
+ "maximumError": "4kb"
+ }
+ ],
+ "outputHashing": "all"
+ },
+ "development": {
+ "optimization": false,
+ "extractLicenses": false,
+ "sourceMap": true
+ }
+ },
+ "defaultConfiguration": "production"
+ },
+ "serve": {
+ "builder": "@angular-devkit/build-angular:dev-server",
+ "configurations": {
+ "production": {
+ "buildTarget": "editable:build:production"
+ },
+ "development": {
+ "buildTarget": "editable:build:development"
+ }
+ },
+ "defaultConfiguration": "development"
+ },
+ "extract-i18n": {
+ "builder": "@angular-devkit/build-angular:extract-i18n",
+ "options": {
+ "buildTarget": "editable:build"
+ }
+ },
+ "test": {
+ "builder": "@angular-devkit/build-angular:karma",
+ "options": {
+ "polyfills": ["zone.js", "zone.js/testing"],
+ "tsConfig": "tsconfig.spec.json",
+ "inlineStyleLanguage": "scss",
+ "assets": ["src/favicon.ico", "src/assets"],
+ "styles": ["src/styles.scss"],
+ "scripts": []
+ }
+ }
+ }
+ }
+ },
+ "cli": {
+ "analytics": false
+ }
+}
diff --git a/examples/angular/row-dnd/package.json b/examples/angular/row-dnd/package.json
new file mode 100644
index 0000000000..af045e7d7a
--- /dev/null
+++ b/examples/angular/row-dnd/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "tanstack-table-example-angular-row-dnd",
+ "version": "0.0.0",
+ "scripts": {
+ "ng": "ng",
+ "start": "ng serve",
+ "build": "ng build",
+ "watch": "ng build --watch --configuration development",
+ "test": "ng test"
+ },
+ "private": true,
+ "dependencies": {
+ "@angular/animations": "^17.3.9",
+ "@angular/common": "^17.3.9",
+ "@angular/compiler": "^17.3.9",
+ "@angular/cdk": "^17.3.10",
+ "@angular/core": "^17.3.9",
+ "@angular/forms": "^17.3.9",
+ "@angular/platform-browser": "^17.3.9",
+ "@angular/platform-browser-dynamic": "^17.3.9",
+ "@angular/router": "^17.3.9",
+ "@tanstack/angular-table": "^8.21.0",
+ "rxjs": "~7.8.1",
+ "zone.js": "~0.14.4"
+ },
+ "devDependencies": {
+ "@angular-devkit/build-angular": "^17.3.8",
+ "@angular/cli": "^17.3.8",
+ "@angular/compiler-cli": "^17.3.9",
+ "@types/jasmine": "~5.1.4",
+ "jasmine-core": "~5.1.2",
+ "karma": "~6.4.3",
+ "karma-chrome-launcher": "~3.2.0",
+ "karma-coverage": "~2.2.1",
+ "karma-jasmine": "~5.1.0",
+ "karma-jasmine-html-reporter": "~2.1.0",
+ "tslib": "^2.6.2",
+ "typescript": "5.4.5"
+ }
+}
diff --git a/examples/angular/row-dnd/src/app/app.component.css b/examples/angular/row-dnd/src/app/app.component.css
new file mode 100644
index 0000000000..762f4acff7
--- /dev/null
+++ b/examples/angular/row-dnd/src/app/app.component.css
@@ -0,0 +1,22 @@
+.cdk-drag-preview {
+ box-sizing: border-box;
+ box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
+ 0 8px 10px 1px rgba(0, 0, 0, 0.14),
+ 0 3px 14px 2px rgba(0, 0, 0, 0.12);
+}
+
+.cdk-drag-placeholder {
+ transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
+}
+
+.cdk-drag-placeholder > td {
+ background: #ccc;
+}
+
+.cdk-drag-animating {
+ transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
+}
+
+.cdk-drop-list-dragging tr[cdkdrag]:not(.cdk-drag-placeholder) {
+ transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
+}
diff --git a/examples/angular/row-dnd/src/app/app.component.html b/examples/angular/row-dnd/src/app/app.component.html
new file mode 100644
index 0000000000..b680eaf212
--- /dev/null
+++ b/examples/angular/row-dnd/src/app/app.component.html
@@ -0,0 +1,55 @@
+
+
+
+ @for (headerGroup of table.getHeaderGroups(); track headerGroup.id) {
+
+ @for (header of headerGroup.headers; track header.id) {
+ @if (!header.isPlaceholder) {
+
+
+
+
+ |
+ }
+ }
+
+ }
+
+
+ @for (row of table.getRowModel().rows; track row.id) {
+
+ @for (cell of row.getVisibleCells(); track cell.id) {
+
+
+
+
+ |
+ }
+
+ }
+
+
+
+
{{ sortedIds() | json }}
+
diff --git a/examples/angular/row-dnd/src/app/app.component.ts b/examples/angular/row-dnd/src/app/app.component.ts
new file mode 100644
index 0000000000..e28c236f08
--- /dev/null
+++ b/examples/angular/row-dnd/src/app/app.component.ts
@@ -0,0 +1,93 @@
+import {
+ ChangeDetectionStrategy,
+ Component,
+ computed,
+ signal,
+} from '@angular/core'
+import {
+ ColumnDef,
+ createAngularTable,
+ flexRenderComponent,
+ FlexRenderDirective,
+ getCoreRowModel,
+ getFilteredRowModel,
+ getPaginationRowModel,
+} from '@tanstack/angular-table'
+import { DragHandleCell } from './drag-handle-cell'
+import { makeData, type Person } from './makeData'
+import {
+ CdkDrag,
+ type CdkDragDrop,
+ CdkDropList,
+ moveItemInArray,
+} from '@angular/cdk/drag-drop'
+import { JsonPipe } from '@angular/common'
+
+const defaultColumns: ColumnDef[] = [
+ {
+ id: 'drag-handle',
+ header: 'Move',
+ cell: () => flexRenderComponent(DragHandleCell),
+ size: 60,
+ },
+ {
+ accessorKey: 'firstName',
+ cell: info => info.getValue(),
+ },
+ {
+ accessorFn: row => row.lastName,
+ id: 'lastName',
+ cell: info => info.getValue(),
+ header: () => `Last Name`,
+ },
+ {
+ accessorKey: 'age',
+ header: () => 'Age',
+ },
+ {
+ accessorKey: 'visits',
+ header: () => `Visits`,
+ },
+ {
+ accessorKey: 'status',
+ header: 'Status',
+ },
+ {
+ accessorKey: 'progress',
+ header: 'Profile Progress',
+ },
+]
+
+@Component({
+ selector: 'app-root',
+ standalone: true,
+ imports: [FlexRenderDirective, CdkDropList, CdkDrag, JsonPipe],
+ templateUrl: './app.component.html',
+ styleUrl: './app.component.css',
+ changeDetection: ChangeDetectionStrategy.OnPush,
+})
+export class AppComponent {
+ readonly data = signal(makeData(20))
+
+ readonly table = createAngularTable(() => {
+ return {
+ data: this.data(),
+ columns: defaultColumns,
+ getRowId: row => row.userId, //required because row indexes will change
+ debugTable: true,
+ debugHeaders: true,
+ debugColumns: true,
+ getCoreRowModel: getCoreRowModel(),
+ getFilteredRowModel: getFilteredRowModel(),
+ getPaginationRowModel: getPaginationRowModel(),
+ }
+ })
+
+ readonly sortedIds = computed(() => this.data().map(data => data.userId))
+
+ drop(event: CdkDragDrop) {
+ const data = [...this.data()]
+ moveItemInArray(data, event.previousIndex, event.currentIndex)
+ this.data.set(data)
+ }
+}
diff --git a/examples/angular/row-dnd/src/app/app.config.ts b/examples/angular/row-dnd/src/app/app.config.ts
new file mode 100644
index 0000000000..f27099f33c
--- /dev/null
+++ b/examples/angular/row-dnd/src/app/app.config.ts
@@ -0,0 +1,5 @@
+import { ApplicationConfig } from '@angular/core'
+
+export const appConfig: ApplicationConfig = {
+ providers: [],
+}
diff --git a/examples/angular/row-dnd/src/app/drag-handle-cell.ts b/examples/angular/row-dnd/src/app/drag-handle-cell.ts
new file mode 100644
index 0000000000..00320e706e
--- /dev/null
+++ b/examples/angular/row-dnd/src/app/drag-handle-cell.ts
@@ -0,0 +1,20 @@
+import {
+ ChangeDetectionStrategy,
+ Component,
+ effect,
+ input,
+ output,
+ signal,
+ untracked,
+} from '@angular/core'
+import { FormsModule } from '@angular/forms'
+import { CdkDragHandle } from '@angular/cdk/drag-drop'
+
+@Component({
+ selector: 'editable-cell',
+ template: ` `,
+ standalone: true,
+ imports: [CdkDragHandle],
+ changeDetection: ChangeDetectionStrategy.OnPush,
+})
+export class DragHandleCell {}
diff --git a/examples/angular/row-dnd/src/app/makeData.ts b/examples/angular/row-dnd/src/app/makeData.ts
new file mode 100644
index 0000000000..26b666d2ae
--- /dev/null
+++ b/examples/angular/row-dnd/src/app/makeData.ts
@@ -0,0 +1,50 @@
+import { faker } from '@faker-js/faker'
+
+export type Person = {
+ userId: string
+ firstName: string
+ lastName: string
+ age: number
+ visits: number
+ progress: number
+ status: 'relationship' | 'complicated' | 'single'
+ subRows?: Person[]
+}
+
+const range = (len: number) => {
+ const arr: number[] = []
+ for (let i = 0; i < len; i++) {
+ arr.push(i)
+ }
+ return arr
+}
+
+const newPerson = (): Person => {
+ return {
+ userId: faker.string.uuid(),
+ firstName: faker.person.firstName(),
+ lastName: faker.person.lastName(),
+ age: faker.number.int(40),
+ visits: faker.number.int(1000),
+ progress: faker.number.int(100),
+ status: faker.helpers.shuffle([
+ 'relationship',
+ 'complicated',
+ 'single',
+ ])[0]!,
+ }
+}
+
+export function makeData(...lens: number[]) {
+ const makeDataLevel = (depth = 0): Person[] => {
+ const len = lens[depth]!
+ return range(len).map((_d): Person => {
+ return {
+ ...newPerson(),
+ subRows: lens[depth + 1] ? makeDataLevel(depth + 1) : undefined,
+ }
+ })
+ }
+
+ return makeDataLevel()
+}
diff --git a/examples/angular/row-dnd/src/assets/.gitkeep b/examples/angular/row-dnd/src/assets/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/examples/angular/row-dnd/src/favicon.ico b/examples/angular/row-dnd/src/favicon.ico
new file mode 100644
index 0000000000..57614f9c96
Binary files /dev/null and b/examples/angular/row-dnd/src/favicon.ico differ
diff --git a/examples/angular/row-dnd/src/index.html b/examples/angular/row-dnd/src/index.html
new file mode 100644
index 0000000000..adc28921f9
--- /dev/null
+++ b/examples/angular/row-dnd/src/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+ Row Drag and drop
+
+
+
+
+
+
+
+
+
diff --git a/examples/angular/row-dnd/src/main.ts b/examples/angular/row-dnd/src/main.ts
new file mode 100644
index 0000000000..0c3b92057c
--- /dev/null
+++ b/examples/angular/row-dnd/src/main.ts
@@ -0,0 +1,5 @@
+import { bootstrapApplication } from '@angular/platform-browser'
+import { appConfig } from './app/app.config'
+import { AppComponent } from './app/app.component'
+
+bootstrapApplication(AppComponent, appConfig).catch(err => console.error(err))
diff --git a/examples/angular/row-dnd/src/styles.scss b/examples/angular/row-dnd/src/styles.scss
new file mode 100644
index 0000000000..bcafc9601e
--- /dev/null
+++ b/examples/angular/row-dnd/src/styles.scss
@@ -0,0 +1,41 @@
+html {
+ font-family: sans-serif;
+ font-size: 14px;
+}
+
+table {
+ border: 1px solid lightgray;
+}
+
+tbody {
+ border-bottom: 1px solid lightgray;
+}
+
+th {
+ border-bottom: 1px solid lightgray;
+ border-right: 1px solid lightgray;
+ padding: 2px 4px;
+}
+
+td {
+ border-right: 1px solid lightgray;
+ padding: 4px 4px;
+ background-color: white;
+}
+
+td button {
+ padding: 1px 1rem;
+ cursor: grab;
+}
+
+td:last-child {
+ border-right: 0;
+}
+
+tfoot {
+ color: gray;
+}
+
+tfoot th {
+ font-weight: normal;
+}
diff --git a/examples/angular/row-dnd/tsconfig.app.json b/examples/angular/row-dnd/tsconfig.app.json
new file mode 100644
index 0000000000..84f1f992d2
--- /dev/null
+++ b/examples/angular/row-dnd/tsconfig.app.json
@@ -0,0 +1,10 @@
+/* To learn more about this file see: https://angular.io/config/tsconfig. */
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "./out-tsc/app",
+ "types": []
+ },
+ "files": ["src/main.ts"],
+ "include": ["src/**/*.d.ts"]
+}
diff --git a/examples/angular/row-dnd/tsconfig.json b/examples/angular/row-dnd/tsconfig.json
new file mode 100644
index 0000000000..b58d3efc71
--- /dev/null
+++ b/examples/angular/row-dnd/tsconfig.json
@@ -0,0 +1,31 @@
+/* To learn more about this file see: https://angular.io/config/tsconfig. */
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "baseUrl": "src",
+ "outDir": "./dist/out-tsc",
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "sourceMap": true,
+ "declaration": false,
+ "experimentalDecorators": true,
+ "moduleResolution": "node",
+ "importHelpers": true,
+ "target": "ES2022",
+ "module": "ES2022",
+ "useDefineForClassFields": false,
+ "lib": ["ES2022", "dom"]
+ },
+ "angularCompilerOptions": {
+ "enableI18nLegacyMessageIdFormat": false,
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ }
+}
diff --git a/examples/angular/row-dnd/tsconfig.spec.json b/examples/angular/row-dnd/tsconfig.spec.json
new file mode 100644
index 0000000000..47e3dd7551
--- /dev/null
+++ b/examples/angular/row-dnd/tsconfig.spec.json
@@ -0,0 +1,9 @@
+/* To learn more about this file see: https://angular.io/config/tsconfig. */
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "./out-tsc/spec",
+ "types": ["jasmine"]
+ },
+ "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index cc25df9e6d..5bff1607f7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -680,6 +680,82 @@ importers:
specifier: 5.4.5
version: 5.4.5
+ examples/angular/row-dnd:
+ dependencies:
+ '@angular/animations':
+ specifier: ^17.3.9
+ version: 17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))
+ '@angular/cdk':
+ specifier: ^17.3.10
+ version: 17.3.10(@angular/common@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1))(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1)
+ '@angular/common':
+ specifier: ^17.3.9
+ version: 17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1)
+ '@angular/compiler':
+ specifier: ^17.3.9
+ version: 17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))
+ '@angular/core':
+ specifier: ^17.3.9
+ version: 17.3.11(rxjs@7.8.1)(zone.js@0.14.7)
+ '@angular/forms':
+ specifier: ^17.3.9
+ version: 17.3.11(@angular/common@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1))(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(@angular/platform-browser@17.3.11(@angular/animations@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(@angular/common@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1))(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(rxjs@7.8.1)
+ '@angular/platform-browser':
+ specifier: ^17.3.9
+ version: 17.3.11(@angular/animations@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(@angular/common@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1))(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))
+ '@angular/platform-browser-dynamic':
+ specifier: ^17.3.9
+ version: 17.3.11(@angular/common@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1))(@angular/compiler@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(@angular/platform-browser@17.3.11(@angular/animations@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(@angular/common@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1))(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))
+ '@angular/router':
+ specifier: ^17.3.9
+ version: 17.3.11(@angular/common@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1))(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(@angular/platform-browser@17.3.11(@angular/animations@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(@angular/common@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1))(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(rxjs@7.8.1)
+ '@tanstack/angular-table':
+ specifier: ^8.21.0
+ version: link:../../../packages/angular-table
+ rxjs:
+ specifier: ~7.8.1
+ version: 7.8.1
+ zone.js:
+ specifier: ~0.14.4
+ version: 0.14.7
+ devDependencies:
+ '@angular-devkit/build-angular':
+ specifier: ^17.3.8
+ version: 17.3.8(@angular/compiler-cli@17.3.11(@angular/compiler@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.4.5))(@types/express@4.17.21)(@types/node@20.14.9)(chokidar@3.6.0)(karma@6.4.3)(ng-packagr@17.3.0(@angular/compiler-cli@17.3.11(@angular/compiler@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.4.5))(tslib@2.6.3)(typescript@5.4.5))(typescript@5.4.5)
+ '@angular/cli':
+ specifier: ^17.3.8
+ version: 17.3.8(chokidar@3.6.0)
+ '@angular/compiler-cli':
+ specifier: ^17.3.9
+ version: 17.3.11(@angular/compiler@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.4.5)
+ '@types/jasmine':
+ specifier: ~5.1.4
+ version: 5.1.4
+ jasmine-core:
+ specifier: ~5.1.2
+ version: 5.1.2
+ karma:
+ specifier: ~6.4.3
+ version: 6.4.3
+ karma-chrome-launcher:
+ specifier: ~3.2.0
+ version: 3.2.0
+ karma-coverage:
+ specifier: ~2.2.1
+ version: 2.2.1
+ karma-jasmine:
+ specifier: ~5.1.0
+ version: 5.1.0(karma@6.4.3)
+ karma-jasmine-html-reporter:
+ specifier: ~2.1.0
+ version: 2.1.0(jasmine-core@5.1.2)(karma-jasmine@5.1.0(karma@6.4.3))(karma@6.4.3)
+ tslib:
+ specifier: ^2.6.2
+ version: 2.6.3
+ typescript:
+ specifier: 5.4.5
+ version: 5.4.5
+
examples/angular/row-selection:
dependencies:
'@angular/animations':
@@ -3260,6 +3336,13 @@ packages:
peerDependencies:
'@angular/core': 17.3.11
+ '@angular/cdk@17.3.10':
+ resolution: {integrity: sha512-b1qktT2c1TTTe5nTji/kFAVW92fULK0YhYAvJ+BjZTPKu2FniZNe8o4qqQ0pUuvtMu+ZQxp/QqFYoidIVCjScg==}
+ peerDependencies:
+ '@angular/common': ^17.0.0 || ^18.0.0
+ '@angular/core': ^17.0.0 || ^18.0.0
+ rxjs: ^6.5.3 || ^7.4.0
+
'@angular/cli@17.3.8':
resolution: {integrity: sha512-X5ZOQ6ZTKVHjhIsfl32ZRqbs+FUoeHLbT7x4fh2Os/8ObDDwrUcCJPqxe2b2RB5E2d0vepYigknHeLE7gwzlNQ==}
engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
@@ -10581,7 +10664,7 @@ snapshots:
undici: 6.11.1
vite: 5.1.7(@types/node@20.14.9)(less@4.2.0)(sass@1.71.1)(terser@5.29.1)
watchpack: 2.4.0
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
webpack-dev-middleware: 6.1.2(webpack@5.90.3(esbuild@0.20.1))
webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.20.1))
webpack-merge: 5.10.0
@@ -10613,7 +10696,7 @@ snapshots:
dependencies:
'@angular-devkit/architect': 0.1703.8(chokidar@3.6.0)
rxjs: 7.8.1
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.20.1))
transitivePeerDependencies:
- chokidar
@@ -10644,6 +10727,15 @@ snapshots:
'@angular/core': 17.3.11(rxjs@7.8.1)(zone.js@0.14.7)
tslib: 2.6.3
+ '@angular/cdk@17.3.10(@angular/common@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1))(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1)':
+ dependencies:
+ '@angular/common': 17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7))(rxjs@7.8.1)
+ '@angular/core': 17.3.11(rxjs@7.8.1)(zone.js@0.14.7)
+ rxjs: 7.8.1
+ tslib: 2.6.3
+ optionalDependencies:
+ parse5: 7.1.2
+
'@angular/cli@17.3.8(chokidar@3.6.0)':
dependencies:
'@angular-devkit/architect': 0.1703.8(chokidar@3.6.0)
@@ -13010,7 +13102,7 @@ snapshots:
dependencies:
'@angular/compiler-cli': 17.3.11(@angular/compiler@17.3.11(@angular/core@17.3.11(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.4.5)
typescript: 5.4.5
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
'@nodelib/fs.scandir@2.1.5':
dependencies:
@@ -14500,7 +14592,7 @@ snapshots:
'@babel/core': 7.24.0
find-cache-dir: 4.0.0
schema-utils: 4.2.0
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
babel-plugin-add-module-exports@0.2.1: {}
@@ -14938,7 +15030,7 @@ snapshots:
normalize-path: 3.0.0
schema-utils: 4.2.0
serialize-javascript: 6.0.2
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
core-js-compat@3.37.1:
dependencies:
@@ -15001,7 +15093,7 @@ snapshots:
postcss-value-parser: 4.2.0
semver: 7.6.3
optionalDependencies:
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
css-select@5.1.0:
dependencies:
@@ -16474,7 +16566,7 @@ snapshots:
dependencies:
klona: 2.0.6
less: 4.2.0
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
less@4.2.0:
dependencies:
@@ -16499,7 +16591,7 @@ snapshots:
dependencies:
webpack-sources: 3.2.3
optionalDependencies:
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
liftoff@5.0.0:
dependencies:
@@ -16727,7 +16819,7 @@ snapshots:
dependencies:
schema-utils: 4.2.0
tapable: 2.2.1
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
minimalistic-assert@1.0.1: {}
@@ -17316,7 +17408,7 @@ snapshots:
postcss: 8.4.35
semver: 7.6.3
optionalDependencies:
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
transitivePeerDependencies:
- typescript
@@ -17783,7 +17875,7 @@ snapshots:
neo-async: 2.6.2
optionalDependencies:
sass: 1.71.1
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
sass@1.71.1:
dependencies:
@@ -18133,7 +18225,7 @@ snapshots:
dependencies:
iconv-lite: 0.6.3
source-map-js: 1.2.1
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
source-map-support@0.5.21:
dependencies:
@@ -18372,16 +18464,16 @@ snapshots:
mkdirp: 1.0.4
yallist: 4.0.0
- terser-webpack-plugin@5.3.10(esbuild@0.20.1)(webpack@5.90.3(esbuild@0.20.1)):
+ terser-webpack-plugin@5.3.10(esbuild@0.21.5)(webpack@5.90.3(esbuild@0.20.1)):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.2
terser: 5.31.1
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
optionalDependencies:
- esbuild: 0.20.1
+ esbuild: 0.21.5
terser@5.29.1:
dependencies:
@@ -18874,7 +18966,7 @@ snapshots:
mime-types: 2.1.35
range-parser: 1.2.1
schema-utils: 4.2.0
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
webpack-dev-middleware@6.1.2(webpack@5.90.3(esbuild@0.20.1)):
dependencies:
@@ -18884,7 +18976,7 @@ snapshots:
range-parser: 1.2.1
schema-utils: 4.2.0
optionalDependencies:
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.20.1)):
dependencies:
@@ -18919,7 +19011,7 @@ snapshots:
webpack-dev-middleware: 5.3.4(webpack@5.90.3(esbuild@0.20.1))
ws: 8.17.1
optionalDependencies:
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
transitivePeerDependencies:
- bufferutil
- debug
@@ -18937,11 +19029,11 @@ snapshots:
webpack-subresource-integrity@5.1.0(webpack@5.90.3(esbuild@0.20.1)):
dependencies:
typed-assert: 1.0.9
- webpack: 5.90.3(esbuild@0.20.1)
+ webpack: 5.90.3(esbuild@0.21.5)
webpack-virtual-modules@0.6.2: {}
- webpack@5.90.3(esbuild@0.20.1):
+ webpack@5.90.3(esbuild@0.21.5):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.6
@@ -18964,7 +19056,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.10(esbuild@0.20.1)(webpack@5.90.3(esbuild@0.20.1))
+ terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.90.3(esbuild@0.20.1))
watchpack: 2.4.0
webpack-sources: 3.2.3
transitivePeerDependencies: