diff --git a/examples/angular/composable-tables/package.json b/examples/angular/composable-tables/package.json index 5cbcbe056a..3d44129054 100644 --- a/examples/angular/composable-tables/package.json +++ b/examples/angular/composable-tables/package.json @@ -18,7 +18,9 @@ "@angular/platform-browser": "^21.2.11", "@angular/router": "^21.2.11", "@faker-js/faker": "^10.4.0", + "@tanstack/angular-devtools": "https://pkg.pr.new/TanStack/devtools/@tanstack/angular-devtools@368", "@tanstack/angular-table": "^9.0.0-alpha.45", + "@tanstack/angular-table-devtools": "^9.0.0-alpha.43", "rxjs": "~7.8.2", "tslib": "^2.8.1" }, diff --git a/examples/angular/composable-tables/src/app/app.config.ts b/examples/angular/composable-tables/src/app/app.config.ts index cbb47d366c..00db520fb7 100644 --- a/examples/angular/composable-tables/src/app/app.config.ts +++ b/examples/angular/composable-tables/src/app/app.config.ts @@ -1,6 +1,22 @@ -import { provideBrowserGlobalErrorListeners } from '@angular/core' +import { isDevMode, provideBrowserGlobalErrorListeners } from '@angular/core' +import { provideTanStackDevtools } from '@tanstack/angular-devtools/provider' import type { ApplicationConfig } from '@angular/core' export const appConfig: ApplicationConfig = { - providers: [provideBrowserGlobalErrorListeners()], + providers: [ + provideBrowserGlobalErrorListeners(), + isDevMode() + ? provideTanStackDevtools(() => ({ + plugins: [ + { + name: 'TanStack Table', + render: () => + import('@tanstack/angular-table-devtools').then((m) => + m.TableDevtoolsPanel(), + ), + }, + ], + })) + : [], + ], } diff --git a/examples/angular/composable-tables/src/app/app.ts b/examples/angular/composable-tables/src/app/app.ts index 02e8765d9c..23384d11ac 100644 --- a/examples/angular/composable-tables/src/app/app.ts +++ b/examples/angular/composable-tables/src/app/app.ts @@ -1,6 +1,8 @@ import { ChangeDetectionStrategy, Component } from '@angular/core' +import { tableDevtoolsPlugin } from '@tanstack/angular-table-devtools' import { UsersTable } from './components/users-table/users-table' import { ProductsTable } from './components/products-table/products-table' +import type { TanStackDevtoolsAngularPlugin } from '@tanstack/angular-devtools' @Component({ selector: 'app-root', @@ -24,4 +26,11 @@ import { ProductsTable } from './components/products-table/products-table' `, changeDetection: ChangeDetectionStrategy.OnPush, }) -export class App {} +export class App { + readonly plugins: Array = [ + tableDevtoolsPlugin(() => ({ + theme: 'dark', + devtoolsOpen: true, + })), + ] +} diff --git a/examples/angular/composable-tables/src/app/components/products-table/products-table.ts b/examples/angular/composable-tables/src/app/components/products-table/products-table.ts index b1808695a8..d0995282b0 100644 --- a/examples/angular/composable-tables/src/app/components/products-table/products-table.ts +++ b/examples/angular/composable-tables/src/app/components/products-table/products-table.ts @@ -6,6 +6,7 @@ import { TanStackTableCell, TanStackTableHeader, } from '@tanstack/angular-table' +import { injectTanStackTableDevtools } from '@tanstack/angular-table-devtools' import { makeProductData } from '../../makeData' import { createAppColumnHelper, injectAppTable } from '../../table' import type { Product } from '../../makeData' @@ -68,4 +69,8 @@ export class ProductsTable { refreshData = () => this.data.set(makeProductData(1_000)) stressTest = () => this.data.set(makeProductData(200_000)) + + constructor() { + injectTanStackTableDevtools(() => this.table, 'products-table') + } } diff --git a/examples/angular/composable-tables/src/app/components/users-table/users-table.ts b/examples/angular/composable-tables/src/app/components/users-table/users-table.ts index b0a150513a..7b88376d36 100644 --- a/examples/angular/composable-tables/src/app/components/users-table/users-table.ts +++ b/examples/angular/composable-tables/src/app/components/users-table/users-table.ts @@ -7,6 +7,7 @@ import { TanStackTableHeader, flexRenderComponent, } from '@tanstack/angular-table' +import { injectTanStackTableDevtools } from '@tanstack/angular-table-devtools' import { makeData } from '../../makeData' import { createAppColumnHelper, injectAppTable } from '../../table' import type { Person } from '../../makeData' @@ -79,4 +80,8 @@ export class UsersTable { refreshData = () => this.data.set(makeData(1_000)) stressTest = () => this.data.set(makeData(200_000)) + + constructor() { + injectTanStackTableDevtools(() => this.table, 'users-table') + } } diff --git a/packages/angular-table-devtools/eslint.config.js b/packages/angular-table-devtools/eslint.config.js new file mode 100644 index 0000000000..892f5314df --- /dev/null +++ b/packages/angular-table-devtools/eslint.config.js @@ -0,0 +1,8 @@ +// @ts-check + +import rootConfig from '../../eslint.config.js' + +/** @type {any} */ +const config = [...rootConfig] + +export default config diff --git a/packages/angular-table-devtools/package.json b/packages/angular-table-devtools/package.json new file mode 100644 index 0000000000..72cab1c052 --- /dev/null +++ b/packages/angular-table-devtools/package.json @@ -0,0 +1,54 @@ +{ + "name": "@tanstack/angular-table-devtools", + "version": "9.0.0-alpha.43", + "description": "Angular devtools for TanStack Table.", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/TanStack/table.git", + "directory": "packages/angular-table-devtools" + }, + "homepage": "https://tanstack.com/table", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "keywords": [ + "angular", + "tanstack", + "table", + "devtools" + ], + "scripts": { + "clean": "rimraf ./build && rimraf ./dist", + "test:eslint": "eslint ./src", + "test:lib": "vitest --passWithNoTests", + "test:lib:dev": "pnpm test:lib --watch", + "test:types": "tsc", + "test:build": "publint --strict", + "build": "tsdown" + }, + "type": "module", + "types": "dist/index.d.ts", + "exports": { + ".": "./dist/index.js", + "./production": "./dist/production.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "engines": { + "node": ">=20" + }, + "files": [ + "dist", + "src" + ], + "dependencies": { + "@tanstack/devtools-utils": "https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-utils@368", + "@tanstack/table-core": "workspace:*", + "@tanstack/table-devtools": "workspace:*" + }, + "peerDependencies": { + "@angular/core": ">=21.0.0" + } +} diff --git a/packages/angular-table-devtools/src/TableDevtools.ts b/packages/angular-table-devtools/src/TableDevtools.ts new file mode 100644 index 0000000000..f8c9ff90d7 --- /dev/null +++ b/packages/angular-table-devtools/src/TableDevtools.ts @@ -0,0 +1,34 @@ +import { TableDevtoolsCore } from '@tanstack/table-devtools' +import { createAngularPanel } from '@tanstack/devtools-utils/angular' +import type { DevtoolsPanelProps } from '@tanstack/devtools-utils/angular' + +export interface TableDevtoolsAngularInit extends Partial {} + +const [TableDevtoolsPanelBase, TableDevtoolsPanelNoOpBase] = + createAngularPanel(TableDevtoolsCore) + +function resolvePanelProps( + props?: TableDevtoolsAngularInit, +): DevtoolsPanelProps { + return { + theme: props?.theme ?? 'dark', + devtoolsOpen: props?.devtoolsOpen ?? false, + } +} + +type TableDevtoolsPanelComponent = () => ( + inputs: () => TableDevtoolsAngularInit, + hostElement: HTMLElement, +) => () => void + +export const TableDevtoolsPanel: TableDevtoolsPanelComponent = + () => (props, host) => { + const panel = TableDevtoolsPanelBase() + return panel(() => resolvePanelProps(props()), host) + } + +export const TableDevtoolsPanelNoOp: TableDevtoolsPanelComponent = + () => (props, host) => { + const panel = TableDevtoolsPanelNoOpBase() + return () => panel + } diff --git a/packages/angular-table-devtools/src/index.ts b/packages/angular-table-devtools/src/index.ts new file mode 100644 index 0000000000..224ae9fee8 --- /dev/null +++ b/packages/angular-table-devtools/src/index.ts @@ -0,0 +1,20 @@ +import { isDevMode } from '@angular/core' +import * as plugin from './plugin' +import * as Devtools from './TableDevtools' +import * as inject from './injectTanStackTableDevtools' + +export const TableDevtoolsPanel = isDevMode() + ? Devtools.TableDevtoolsPanel + : Devtools.TableDevtoolsPanelNoOp + +export const tableDevtoolsPlugin = isDevMode() + ? plugin.tableDevtoolsPlugin + : plugin.tableDevtoolsNoOpPlugin + +export type { TableDevtoolsAngularInit } from './TableDevtools' + +export type { InjectTanStackTableDevtoolsOptions } from './injectTanStackTableDevtools' + +export const injectTanStackTableDevtools = isDevMode() + ? inject.injectTanStackTableDevtools + : inject.injectTanStackTableDevtoolsNoOp diff --git a/packages/angular-table-devtools/src/injectTanStackTableDevtools.ts b/packages/angular-table-devtools/src/injectTanStackTableDevtools.ts new file mode 100644 index 0000000000..e769ae3bcb --- /dev/null +++ b/packages/angular-table-devtools/src/injectTanStackTableDevtools.ts @@ -0,0 +1,77 @@ +import { + removeTableDevtoolsTarget, + upsertTableDevtoolsTarget, +} from '@tanstack/table-devtools' +import { + APP_ID, + DestroyRef, + Injectable, + Injector, + assertInInjectionContext, + effect, + inject, +} from '@angular/core' +import type { RowData, Table, TableFeatures } from '@tanstack/table-core' + +export interface InjectTanStackTableDevtoolsOptions { + enabled?: () => boolean + injector?: Injector +} + +function normalizeName(name?: string) { + const trimmedName = name?.trim() + return trimmedName ? trimmedName : undefined +} + +let autoId = 0 +function generateId(): string { + const appId = inject(APP_ID) + return `tanstacktable-${appId}_${autoId++}${Date.now().toString(36)}` +} + +export function injectTanStackTableDevtools< + TFeatures extends TableFeatures = TableFeatures, + TData extends RowData = RowData, +>( + table: () => Table | undefined, + name?: string, + options?: InjectTanStackTableDevtoolsOptions, +): void { + const registrationId = generateId() + const enabled = () => options?.enabled?.() ?? true + assertInInjectionContext(injectTanStackTableDevtools) + const injector = options?.injector ?? inject(Injector) + const destroyRef = inject(DestroyRef) + + effect( + (onCleanup) => { + const enabledValue = enabled() + const tableValue = table() + if (!enabledValue || !tableValue) { + removeTableDevtoolsTarget(registrationId) + } + upsertTableDevtoolsTarget({ + id: registrationId, + table: tableValue, + name: normalizeName(name), + }) + onCleanup(() => { + removeTableDevtoolsTarget(registrationId) + }) + }, + { injector }, + ) + + destroyRef.onDestroy(() => { + removeTableDevtoolsTarget(registrationId) + }) +} + +export function injectTanStackTableDevtoolsNoOp< + TFeatures extends TableFeatures = TableFeatures, + TData extends RowData = RowData, +>( + _table: Table | undefined, + _name?: string, + _options?: InjectTanStackTableDevtoolsOptions, +): void {} diff --git a/packages/angular-table-devtools/src/plugin.ts b/packages/angular-table-devtools/src/plugin.ts new file mode 100644 index 0000000000..4db67c28b9 --- /dev/null +++ b/packages/angular-table-devtools/src/plugin.ts @@ -0,0 +1,13 @@ +import { createAngularPlugin } from '@tanstack/devtools-utils/angular' +import { TableDevtoolsPanel } from './TableDevtools' + +type TableDevtoolsPluginFactory = ReturnType[0] + +const plugins = createAngularPlugin({ + name: 'TanStack Table', + render: TableDevtoolsPanel, +}) + +export const tableDevtoolsPlugin: TableDevtoolsPluginFactory = plugins[0] +export const tableDevtoolsNoOpPlugin: TableDevtoolsPluginFactory = + plugins[1] as any diff --git a/packages/angular-table-devtools/src/production.ts b/packages/angular-table-devtools/src/production.ts new file mode 100644 index 0000000000..f3e96534ef --- /dev/null +++ b/packages/angular-table-devtools/src/production.ts @@ -0,0 +1,5 @@ +export { TableDevtoolsPanel } from './TableDevtools' +export type { TableDevtoolsAngularInit } from './TableDevtools' +export { tableDevtoolsPlugin } from './plugin' +export { injectTanStackTableDevtools } from './injectTanStackTableDevtools' +export type { InjectTanStackTableDevtoolsOptions } from './injectTanStackTableDevtools' diff --git a/packages/angular-table-devtools/tsconfig.json b/packages/angular-table-devtools/tsconfig.json new file mode 100644 index 0000000000..7cd68e0598 --- /dev/null +++ b/packages/angular-table-devtools/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "useDefineForClassFields": false, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "include": [ + "src", + "tests", + "eslint.config.js", + "vite.config.ts", + "tsdown.config.ts" + ] +} diff --git a/packages/angular-table-devtools/tsdown.config.ts b/packages/angular-table-devtools/tsdown.config.ts new file mode 100644 index 0000000000..63b0b0bd20 --- /dev/null +++ b/packages/angular-table-devtools/tsdown.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from 'tsdown' + +export default defineConfig({ + plugins: [], + entry: ['./src/index.ts', './src/production.ts'], + format: ['esm'], + unbundle: true, + dts: true, + sourcemap: true, + clean: true, + minify: false, + fixedExtension: false, + exports: true, + publint: { + strict: true, + }, +}) diff --git a/packages/angular-table-devtools/vite.config.ts b/packages/angular-table-devtools/vite.config.ts new file mode 100644 index 0000000000..8feed8cff3 --- /dev/null +++ b/packages/angular-table-devtools/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig, mergeConfig } from 'vitest/config' +import packageJson from './package.json' + +const config = defineConfig({ + plugins: [], + test: { + name: packageJson.name, + dir: './', + watch: false, + environment: 'jsdom', + globals: true, + }, +}) + +export default config diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4fdd2a925d..48699bf1ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,7 +110,7 @@ importers: devDependencies: '@angular/build': specifier: ^21.2.9 - version: 21.2.9(6a2f58140be4273149186b6a398c3ebb) + version: 21.2.9(33498570aa5415a5ce971787cc122c36) '@angular/cli': specifier: ^21.2.9 version: 21.2.9(@types/node@25.6.0)(chokidar@5.0.0) @@ -156,7 +156,7 @@ importers: devDependencies: '@angular/build': specifier: ^21.2.9 - version: 21.2.9(33498570aa5415a5ce971787cc122c36) + version: 21.2.9(6a2f58140be4273149186b6a398c3ebb) '@angular/cli': specifier: ^21.2.9 version: 21.2.9(@types/node@25.6.0)(chokidar@5.0.0) @@ -420,9 +420,15 @@ importers: '@faker-js/faker': specifier: ^10.4.0 version: 10.4.0 + '@tanstack/angular-devtools': + specifier: https://pkg.pr.new/TanStack/devtools/@tanstack/angular-devtools@368 + version: https://pkg.pr.new/TanStack/devtools/@tanstack/angular-devtools@368(@angular/core@21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2))(csstype@3.2.3)(solid-js@1.9.12) '@tanstack/angular-table': specifier: ^9.0.0-alpha.45 version: link:../../../packages/angular-table + '@tanstack/angular-table-devtools': + specifier: ^9.0.0-alpha.43 + version: link:../../../packages/angular-table-devtools rxjs: specifier: ~7.8.2 version: 7.8.2 @@ -7433,6 +7439,21 @@ importers: specifier: 6.0.3 version: 6.0.3 + packages/angular-table-devtools: + dependencies: + '@angular/core': + specifier: '>=21.0.0' + version: 21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2) + '@tanstack/devtools-utils': + specifier: https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-utils@368 + version: https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-utils@368(@angular/core@21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2))(@types/react@19.2.14)(preact@10.29.1)(react@19.2.5)(solid-js@1.9.12)(vue@3.5.33(typescript@6.0.3)) + '@tanstack/table-core': + specifier: workspace:* + version: link:../table-core + '@tanstack/table-devtools': + specifier: workspace:* + version: link:../table-devtools + packages/lit-table: dependencies: '@tanstack/store': @@ -12247,6 +12268,13 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 + '@tanstack/angular-devtools@https://pkg.pr.new/TanStack/devtools/@tanstack/angular-devtools@368': + resolution: {integrity: sha512-W4NuGcMqJUvQrg+yAqgfebnsffC8choTWO4APJqnGL534T0vf0UzdQ3iCuKL2N0q3efAZbPiCyM6KTjQ89c6PQ==, tarball: https://pkg.pr.new/TanStack/devtools/@tanstack/angular-devtools@368} + version: 0.0.1 + engines: {node: '>=18'} + peerDependencies: + '@angular/core': '>=21.0.0' + '@tanstack/angular-store@0.11.0': resolution: {integrity: sha512-MZXax5LbzrmX8SERXv3GlzURkqJ+EW7tMTn3Hw7dFmOBxknNpMUbbzHUgpco7W1dNavnrQVdYJ1Sz5JcQ00qvg==} peerDependencies: @@ -12257,21 +12285,44 @@ packages: resolution: {integrity: sha512-f85ZJXJnDIFOoykG/BFIixuAevJovCvJF391LPs6YjBAPhGYC50NWlx1y4iF/UmK5/cCMx+/JqI5SBOz7FanQQ==} engines: {node: '>=18'} + '@tanstack/devtools-client@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-client@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c': + resolution: {tarball: https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-client@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c} + version: 0.0.6 + engines: {node: '>=18'} + '@tanstack/devtools-event-bus@0.4.1': resolution: {integrity: sha512-cNnJ89Q021Zf883rlbBTfsaxTfi2r73/qejGtyTa7ksErF3hyDyAq1aTbo5crK9dAL7zSHh9viKY1BtMls1QOA==} engines: {node: '>=18'} + '@tanstack/devtools-event-bus@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-event-bus@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c': + resolution: {tarball: https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-event-bus@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c} + version: 0.4.1 + engines: {node: '>=18'} + '@tanstack/devtools-event-client@0.4.3': resolution: {integrity: sha512-OZI6QyULw0FI0wjgmeYzCIfbgPsOEzwJtCpa69XrfLMtNXLGnz3d/dIabk7frg0TmHo+Ah49w5I4KC7Tufwsvw==} engines: {node: '>=18'} hasBin: true + '@tanstack/devtools-event-client@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-event-client@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c': + resolution: {tarball: https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-event-client@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c} + version: 0.4.3 + engines: {node: '>=18'} + hasBin: true + '@tanstack/devtools-ui@0.5.1': resolution: {integrity: sha512-T9JjAdqMSnxsVO6AQykD5vhxPF4iFLKtbYxee/bU3OLlk446F5C1220GdCmhDSz7y4lx+m8AvIS0bq6zzvdDUA==} engines: {node: '>=18'} peerDependencies: solid-js: '>=1.9.7' + '@tanstack/devtools-ui@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-ui@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c': + resolution: {tarball: https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-ui@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c} + version: 0.5.1 + engines: {node: '>=18'} + peerDependencies: + solid-js: '>=1.9.7' + '@tanstack/devtools-utils@0.4.0': resolution: {integrity: sha512-KsGzYhA8L/fCNgyyMyoUy+TKtx+DjNbzWwqH6wXL48Llzo7kvV9RynYJlaO8Qkzwm+NdHXSgsljQNjQ3CKPpZA==} engines: {node: '>=18'} @@ -12294,6 +12345,32 @@ packages: vue: optional: true + '@tanstack/devtools-utils@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-utils@368': + resolution: {tarball: https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-utils@368} + version: 0.4.0 + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@angular/core': '>=19.0.0' + '@types/react': '>=17.0.0' + preact: '>=10.0.0' + react: '>=17.0.0' + solid-js: '>=1.9.7' + vue: '>=3.2.0' + peerDependenciesMeta: + '@angular/core': + optional: true + '@types/react': + optional: true + preact: + optional: true + react: + optional: true + solid-js: + optional: true + vue: + optional: true + '@tanstack/devtools@0.11.2': resolution: {integrity: sha512-K8+tsBx+ptTLqqd4dOF10B6laj1g+XYImqYZL9n0jBINGaT+sOf17PKV9pbBt8kdbZeIGsHaJ5OZWCyZoHqN4A==} engines: {node: '>=18'} @@ -12301,6 +12378,14 @@ packages: peerDependencies: solid-js: '>=1.9.7' + '@tanstack/devtools@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c': + resolution: {tarball: https://pkg.pr.new/TanStack/devtools/@tanstack/devtools@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c} + version: 0.11.2 + engines: {node: '>=18'} + hasBin: true + peerDependencies: + solid-js: '>=1.9.7' + '@tanstack/eslint-config@0.4.0': resolution: {integrity: sha512-V+Cd81W/f65dqKJKpytbwTGx9R+IwxKAHsG/uJ3nSLYEh36hlAr54lRpstUhggQB8nf/cP733cIw8DuD2dzQUg==} engines: {node: '>=18'} @@ -22003,6 +22088,17 @@ snapshots: tailwindcss: 4.2.4 vite: 8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(sugarss@5.0.1(postcss@8.5.13))(terser@5.46.0)(yaml@2.8.3) + '@tanstack/angular-devtools@https://pkg.pr.new/TanStack/devtools/@tanstack/angular-devtools@368(@angular/core@21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2))(csstype@3.2.3)(solid-js@1.9.12)': + dependencies: + '@angular/core': 21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2) + '@tanstack/devtools': https://pkg.pr.new/TanStack/devtools/@tanstack/devtools@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c(csstype@3.2.3)(solid-js@1.9.12) + tslib: 2.8.1 + transitivePeerDependencies: + - bufferutil + - csstype + - solid-js + - utf-8-validate + '@tanstack/angular-store@0.11.0(@angular/common@21.2.11(@angular/core@21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2))': dependencies: '@angular/common': 21.2.11(@angular/core@21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2))(rxjs@7.8.2) @@ -22013,6 +22109,10 @@ snapshots: dependencies: '@tanstack/devtools-event-client': 0.4.3 + '@tanstack/devtools-client@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-client@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c': + dependencies: + '@tanstack/devtools-event-client': https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-event-client@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c + '@tanstack/devtools-event-bus@0.4.1': dependencies: ws: 8.20.0 @@ -22020,8 +22120,17 @@ snapshots: - bufferutil - utf-8-validate + '@tanstack/devtools-event-bus@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-event-bus@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c': + dependencies: + ws: 8.20.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@tanstack/devtools-event-client@0.4.3': {} + '@tanstack/devtools-event-client@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-event-client@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c': {} + '@tanstack/devtools-ui@0.5.1(csstype@3.2.3)(solid-js@1.9.12)': dependencies: clsx: 2.1.1 @@ -22031,6 +22140,15 @@ snapshots: transitivePeerDependencies: - csstype + '@tanstack/devtools-ui@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-ui@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c(csstype@3.2.3)(solid-js@1.9.12)': + dependencies: + clsx: 2.1.1 + dayjs: 1.11.20 + goober: 2.1.18(csstype@3.2.3) + solid-js: 1.9.12 + transitivePeerDependencies: + - csstype + '@tanstack/devtools-utils@0.4.0(@types/react@19.2.14)(preact@10.29.1)(react@19.2.5)(solid-js@1.9.12)(vue@3.5.33(typescript@6.0.3))': optionalDependencies: '@types/react': 19.2.14 @@ -22039,6 +22157,15 @@ snapshots: solid-js: 1.9.12 vue: 3.5.33(typescript@6.0.3) + '@tanstack/devtools-utils@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-utils@368(@angular/core@21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2))(@types/react@19.2.14)(preact@10.29.1)(react@19.2.5)(solid-js@1.9.12)(vue@3.5.33(typescript@6.0.3))': + optionalDependencies: + '@angular/core': 21.2.11(@angular/compiler@21.2.11)(rxjs@7.8.2) + '@types/react': 19.2.14 + preact: 10.29.1 + react: 19.2.5 + solid-js: 1.9.12 + vue: 3.5.33(typescript@6.0.3) + '@tanstack/devtools@0.11.2(csstype@3.2.3)(solid-js@1.9.12)': dependencies: '@solid-primitives/event-listener': 2.4.5(solid-js@1.9.12) @@ -22055,6 +22182,22 @@ snapshots: - csstype - utf-8-validate + '@tanstack/devtools@https://pkg.pr.new/TanStack/devtools/@tanstack/devtools@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c(csstype@3.2.3)(solid-js@1.9.12)': + dependencies: + '@solid-primitives/event-listener': 2.4.5(solid-js@1.9.12) + '@solid-primitives/keyboard': 1.3.5(solid-js@1.9.12) + '@solid-primitives/resize-observer': 2.1.5(solid-js@1.9.12) + '@tanstack/devtools-client': https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-client@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c + '@tanstack/devtools-event-bus': https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-event-bus@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c + '@tanstack/devtools-ui': https://pkg.pr.new/TanStack/devtools/@tanstack/devtools-ui@05f0d4adaf5570ca3b7fc424b1a44119d63aea6c(csstype@3.2.3)(solid-js@1.9.12) + clsx: 2.1.1 + goober: 2.1.18(csstype@3.2.3) + solid-js: 1.9.12 + transitivePeerDependencies: + - bufferutil + - csstype + - utf-8-validate + '@tanstack/eslint-config@0.4.0(@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint/js': 10.0.1(eslint@10.3.0(jiti@2.6.1))