From 493ed182996428fd4816f944fa3b02c5fa79c906 Mon Sep 17 00:00:00 2001 From: Damian Osipiuk Date: Tue, 21 Oct 2025 22:44:02 +0200 Subject: [PATCH 1/6] feat: vue devtools --- .changeset/gold-readers-create.md | 6 + examples/vue/basic/.gitignore | 9 + examples/vue/basic/README.md | 6 + examples/vue/basic/eslint.config.js | 17 ++ examples/vue/basic/index.html | 12 + examples/vue/basic/package.json | 22 ++ examples/vue/basic/src/App.vue | 52 ++++ examples/vue/basic/src/Post.vue | 51 ++++ examples/vue/basic/src/Posts.vue | 55 ++++ examples/vue/basic/src/main.ts | 6 + examples/vue/basic/src/shims-vue.d.ts | 6 + examples/vue/basic/src/types.d.ts | 6 + examples/vue/basic/tsconfig.json | 24 ++ examples/vue/basic/vite.config.ts | 9 + package.json | 4 +- .../devtools/src/context/devtools-context.tsx | 2 + .../src/context/use-devtools-context.ts | 8 + packages/vue-devtools/CHANGELOG.md | 7 + packages/vue-devtools/README.md | 46 +++ packages/vue-devtools/eslint.config.js | 17 ++ packages/vue-devtools/package.json | 58 ++++ packages/vue-devtools/src/index.ts | 8 + packages/vue-devtools/src/shims-vue.d.ts | 6 + packages/vue-devtools/src/types.ts | 46 +++ packages/vue-devtools/src/vue-devtools.vue | 88 ++++++ packages/vue-devtools/tsconfig.docs.json | 9 + packages/vue-devtools/tsconfig.json | 5 + packages/vue-devtools/vite.config.ts | 26 ++ pnpm-lock.yaml | 287 ++++++++++++++++++ 29 files changed, 896 insertions(+), 2 deletions(-) create mode 100644 .changeset/gold-readers-create.md create mode 100644 examples/vue/basic/.gitignore create mode 100644 examples/vue/basic/README.md create mode 100644 examples/vue/basic/eslint.config.js create mode 100644 examples/vue/basic/index.html create mode 100644 examples/vue/basic/package.json create mode 100644 examples/vue/basic/src/App.vue create mode 100644 examples/vue/basic/src/Post.vue create mode 100644 examples/vue/basic/src/Posts.vue create mode 100644 examples/vue/basic/src/main.ts create mode 100644 examples/vue/basic/src/shims-vue.d.ts create mode 100644 examples/vue/basic/src/types.d.ts create mode 100644 examples/vue/basic/tsconfig.json create mode 100644 examples/vue/basic/vite.config.ts create mode 100644 packages/vue-devtools/CHANGELOG.md create mode 100644 packages/vue-devtools/README.md create mode 100644 packages/vue-devtools/eslint.config.js create mode 100644 packages/vue-devtools/package.json create mode 100644 packages/vue-devtools/src/index.ts create mode 100644 packages/vue-devtools/src/shims-vue.d.ts create mode 100644 packages/vue-devtools/src/types.ts create mode 100644 packages/vue-devtools/src/vue-devtools.vue create mode 100644 packages/vue-devtools/tsconfig.docs.json create mode 100644 packages/vue-devtools/tsconfig.json create mode 100644 packages/vue-devtools/vite.config.ts diff --git a/.changeset/gold-readers-create.md b/.changeset/gold-readers-create.md new file mode 100644 index 00000000..58021320 --- /dev/null +++ b/.changeset/gold-readers-create.md @@ -0,0 +1,6 @@ +--- +'@tanstack/vue-devtools': minor +'@tanstack/devtools': patch +--- + +feat: vue devtools diff --git a/examples/vue/basic/.gitignore b/examples/vue/basic/.gitignore new file mode 100644 index 00000000..449e8098 --- /dev/null +++ b/examples/vue/basic/.gitignore @@ -0,0 +1,9 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local + +package-lock.json +yarn.lock +pnpm-lock.yaml diff --git a/examples/vue/basic/README.md b/examples/vue/basic/README.md new file mode 100644 index 00000000..a9aad379 --- /dev/null +++ b/examples/vue/basic/README.md @@ -0,0 +1,6 @@ +# Basic example + +To run this example: + +- `npm install` or `yarn` or `pnpm i` or `bun i` +- `npm run dev` or `yarn dev` or `pnpm dev` or `bun dev` diff --git a/examples/vue/basic/eslint.config.js b/examples/vue/basic/eslint.config.js new file mode 100644 index 00000000..798ef69f --- /dev/null +++ b/examples/vue/basic/eslint.config.js @@ -0,0 +1,17 @@ +// @ts-check + +import pluginVue from 'eslint-plugin-vue' +import rootConfig from '../../eslint.config.js' + +export default [ + ...rootConfig, + ...pluginVue.configs['flat/recommended'], + { + files: ['*.vue', '**/*.vue'], + languageOptions: { + parserOptions: { + parser: '@typescript-eslint/parser', + }, + }, + }, +] diff --git a/examples/vue/basic/index.html b/examples/vue/basic/index.html new file mode 100644 index 00000000..ed941ab1 --- /dev/null +++ b/examples/vue/basic/index.html @@ -0,0 +1,12 @@ + + + + + + Vue Query Example + + +
+ + + diff --git a/examples/vue/basic/package.json b/examples/vue/basic/package.json new file mode 100644 index 00000000..da81ca67 --- /dev/null +++ b/examples/vue/basic/package.json @@ -0,0 +1,22 @@ +{ + "name": "@tanstack/query-example-vue-basic", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@tanstack/devtools": "workspace:*", + "@tanstack/vue-devtools": "workspace:*", + "@tanstack/vue-query": "^5.90.5", + "@tanstack/vue-query-devtools": "^5.91.0", + "vue": "^3.5.22" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.1", + "typescript": "~5.9.2", + "vite": "^7.1.7" + } +} \ No newline at end of file diff --git a/examples/vue/basic/src/App.vue b/examples/vue/basic/src/App.vue new file mode 100644 index 00000000..cbd4090d --- /dev/null +++ b/examples/vue/basic/src/App.vue @@ -0,0 +1,52 @@ + + + diff --git a/examples/vue/basic/src/Post.vue b/examples/vue/basic/src/Post.vue new file mode 100644 index 00000000..003cf2a6 --- /dev/null +++ b/examples/vue/basic/src/Post.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/examples/vue/basic/src/Posts.vue b/examples/vue/basic/src/Posts.vue new file mode 100644 index 00000000..be192a10 --- /dev/null +++ b/examples/vue/basic/src/Posts.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/examples/vue/basic/src/main.ts b/examples/vue/basic/src/main.ts new file mode 100644 index 00000000..e8ac89a8 --- /dev/null +++ b/examples/vue/basic/src/main.ts @@ -0,0 +1,6 @@ +import { createApp } from 'vue' +import { VueQueryPlugin } from '@tanstack/vue-query' + +import App from './App.vue' + +createApp(App).use(VueQueryPlugin).mount('#app') diff --git a/examples/vue/basic/src/shims-vue.d.ts b/examples/vue/basic/src/shims-vue.d.ts new file mode 100644 index 00000000..b07a0596 --- /dev/null +++ b/examples/vue/basic/src/shims-vue.d.ts @@ -0,0 +1,6 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/examples/vue/basic/src/types.d.ts b/examples/vue/basic/src/types.d.ts new file mode 100644 index 00000000..4851e810 --- /dev/null +++ b/examples/vue/basic/src/types.d.ts @@ -0,0 +1,6 @@ +export interface Post { + userId: number + id: number + title: string + body: string +} diff --git a/examples/vue/basic/tsconfig.json b/examples/vue/basic/tsconfig.json new file mode 100644 index 00000000..62eb2b16 --- /dev/null +++ b/examples/vue/basic/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue"] +} diff --git a/examples/vue/basic/vite.config.ts b/examples/vue/basic/vite.config.ts new file mode 100644 index 00000000..b5974119 --- /dev/null +++ b/examples/vue/basic/vite.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue()], + optimizeDeps: { + exclude: ['@tanstack/vue-query', 'vue-demi'], + }, +}) diff --git a/package.json b/package.json index bc949e0d..f0470184 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "test:lib": "nx affected --targets=test:lib --exclude=examples/**", "test:lib:dev": "pnpm test:lib && nx watch --all -- pnpm test:lib", "test:pr": "nx affected --targets=test:format,test:eslint,test:sherif,test:knip,test:lib,test:types,test:build,build", - "test:sherif": "sherif", + "test:sherif": "sherif -p @tanstack/query-example-vue-basic", "test:types": "nx affected --targets=test:types --exclude=examples/**", "watch": "pnpm run build:all && nx watch --all -- pnpm run build:all" }, @@ -85,4 +85,4 @@ "@tanstack/solid-devtools": "workspace:*", "@tanstack/devtools-vite": "workspace:*" } -} +} \ No newline at end of file diff --git a/packages/devtools/src/context/devtools-context.tsx b/packages/devtools/src/context/devtools-context.tsx index fff9a3ac..d92855df 100644 --- a/packages/devtools/src/context/devtools-context.tsx +++ b/packages/devtools/src/context/devtools-context.tsx @@ -73,6 +73,8 @@ export interface TanStackDevtoolsPlugin { el: HTMLDivElement, theme: DevtoolsStore['settings']['theme'], ) => void + + destroy?: (pluginId: string) => void } export const DevtoolsContext = createContext<{ store: DevtoolsStore diff --git a/packages/devtools/src/context/use-devtools-context.ts b/packages/devtools/src/context/use-devtools-context.ts index 217c3d6b..a8b94786 100644 --- a/packages/devtools/src/context/use-devtools-context.ts +++ b/packages/devtools/src/context/use-devtools-context.ts @@ -48,6 +48,14 @@ export const usePlugins = () => { setStore((prev) => { const isActive = prev.state.activePlugins.includes(pluginId) + const currentPlugin = store.plugins?.find( + (plugin) => plugin.id === pluginId, + ) + + if (currentPlugin?.destroy && isActive) { + currentPlugin.destroy(pluginId) + } + const updatedPlugins = isActive ? prev.state.activePlugins.filter((id) => id !== pluginId) : [...prev.state.activePlugins, pluginId] diff --git a/packages/vue-devtools/CHANGELOG.md b/packages/vue-devtools/CHANGELOG.md new file mode 100644 index 00000000..911e8117 --- /dev/null +++ b/packages/vue-devtools/CHANGELOG.md @@ -0,0 +1,7 @@ +# @tanstack/vue-devtools + +## 0.1.0 + +### Minor Changes + +- Initial release of @tanstack/vue-devtools diff --git a/packages/vue-devtools/README.md b/packages/vue-devtools/README.md new file mode 100644 index 00000000..32aa525a --- /dev/null +++ b/packages/vue-devtools/README.md @@ -0,0 +1,46 @@ +# @tanstack/vue-devtools + +This package is still under active development and might have breaking changes in the future. Please use it with caution. + +## Usage + +```vue + + + +``` + +## Creating plugins + +In order to create a plugin for TanStack Devtools, you can use the `plugins` prop of the `TanStackDevtools` component. Here's an example of how to create a simple plugin: + +```vue + + + +``` diff --git a/packages/vue-devtools/eslint.config.js b/packages/vue-devtools/eslint.config.js new file mode 100644 index 00000000..798ef69f --- /dev/null +++ b/packages/vue-devtools/eslint.config.js @@ -0,0 +1,17 @@ +// @ts-check + +import pluginVue from 'eslint-plugin-vue' +import rootConfig from '../../eslint.config.js' + +export default [ + ...rootConfig, + ...pluginVue.configs['flat/recommended'], + { + files: ['*.vue', '**/*.vue'], + languageOptions: { + parserOptions: { + parser: '@typescript-eslint/parser', + }, + }, + }, +] diff --git a/packages/vue-devtools/package.json b/packages/vue-devtools/package.json new file mode 100644 index 00000000..6ca89533 --- /dev/null +++ b/packages/vue-devtools/package.json @@ -0,0 +1,58 @@ +{ + "name": "@tanstack/vue-devtools", + "version": "0.0.1", + "description": "TanStack Devtools is a set of tools for building advanced devtools for your Vue application.", + "author": "Damian Osipiuk", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/TanStack/devtools.git", + "directory": "packages/vue-devtools" + }, + "homepage": "https://tanstack.com/devtools", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "keywords": [ + "vue", + "devtools" + ], + "type": "module", + "types": "dist/esm/index.d.ts", + "module": "dist/esm/index.js", + "exports": { + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + } + }, + "./package.json": "./package.json" + }, + "sideEffects": false, + "engines": { + "node": ">=18" + }, + "files": [ + "dist", + "src" + ], + "scripts": { + "clean": "premove ./build ./dist", + "test:eslint": "eslint ./src", + "test:lib": "vitest --passWithNoTests", + "test:lib:dev": "pnpm test:lib --watch", + "test:types": "tsc", + "test:build": "publint --strict", + "build": "vite build" + }, + "dependencies": { + "@tanstack/devtools": "workspace:*" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.1", + "eslint-plugin-vue": "^10.5.1", + "vue": "^3.5.22" + } +} \ No newline at end of file diff --git a/packages/vue-devtools/src/index.ts b/packages/vue-devtools/src/index.ts new file mode 100644 index 00000000..9f26f747 --- /dev/null +++ b/packages/vue-devtools/src/index.ts @@ -0,0 +1,8 @@ +import Devtools from './vue-devtools.vue' + +export const TanStackDevtools = Devtools + +export type { + TanStackDevtoolsVuePlugin, + TanStackDevtoolsVueInit, +} from './types' diff --git a/packages/vue-devtools/src/shims-vue.d.ts b/packages/vue-devtools/src/shims-vue.d.ts new file mode 100644 index 00000000..b07a0596 --- /dev/null +++ b/packages/vue-devtools/src/shims-vue.d.ts @@ -0,0 +1,6 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/packages/vue-devtools/src/types.ts b/packages/vue-devtools/src/types.ts new file mode 100644 index 00000000..c4bafaaf --- /dev/null +++ b/packages/vue-devtools/src/types.ts @@ -0,0 +1,46 @@ +import type { Component } from 'vue' +import type { + ClientEventBusConfig, + TanStackDevtoolsConfig, + TanStackDevtoolsPlugin, +} from '@tanstack/devtools' + +export type TanStackDevtoolsVuePlugin = Omit< + TanStackDevtoolsPlugin, + 'render' | 'name' +> & { + component: Component + name: string | Component + props?: Record +} + +export interface TanStackDevtoolsVueInit { + /** + * Array of plugins to be used in the devtools. + * Each plugin should have a `render` function that returns a Vue component + * + * Example: + * ```vue + * , + * } + * ]} + * /> + * ``` + */ + plugins?: Array + /** + * Configuration for the devtools shell. These configuration options are used to set the + * initial state of the devtools when it is started for the first time. Afterwards, + * the settings are persisted in local storage and changed through the settings panel. + */ + config?: Partial + /** + * Configuration for the TanStack Devtools client event bus. + */ + eventBusConfig?: ClientEventBusConfig +} diff --git a/packages/vue-devtools/src/vue-devtools.vue b/packages/vue-devtools/src/vue-devtools.vue new file mode 100644 index 00000000..fda3abf4 --- /dev/null +++ b/packages/vue-devtools/src/vue-devtools.vue @@ -0,0 +1,88 @@ + + + diff --git a/packages/vue-devtools/tsconfig.docs.json b/packages/vue-devtools/tsconfig.docs.json new file mode 100644 index 00000000..0a7802de --- /dev/null +++ b/packages/vue-devtools/tsconfig.docs.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/devtools": ["../devtools/src"] + } + }, + "include": ["src"] +} diff --git a/packages/vue-devtools/tsconfig.json b/packages/vue-devtools/tsconfig.json new file mode 100644 index 00000000..3acd44a0 --- /dev/null +++ b/packages/vue-devtools/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": {}, + "include": ["src", "eslint.config.js", "vite.config.ts", "tests"] +} diff --git a/packages/vue-devtools/vite.config.ts b/packages/vue-devtools/vite.config.ts new file mode 100644 index 00000000..dae5da82 --- /dev/null +++ b/packages/vue-devtools/vite.config.ts @@ -0,0 +1,26 @@ +import { defineConfig, mergeConfig } from 'vitest/config' +import { tanstackViteConfig } from '@tanstack/config/vite' +import vue from '@vitejs/plugin-vue' +import packageJson from './package.json' + +const config = defineConfig({ + plugins: [vue()], + test: { + name: packageJson.name, + dir: './tests', + watch: false, + environment: 'jsdom', + // setupFiles: ['./tests/test-setup.ts'], + globals: true, + }, +}) + +export default mergeConfig( + config, + tanstackViteConfig({ + entry: ['./src/index.ts'], + srcDir: './src', + externalDeps: ['vue'], + cjs: false, + }), +) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57373ee6..1628d87a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -483,6 +483,34 @@ importers: specifier: ^0.5.8 version: 0.5.8(@netlify/blobs@9.1.2)(@types/node@22.15.2)(db0@0.3.2(drizzle-orm@0.44.7(@opentelemetry/api@1.9.0)(@prisma/client@6.18.0(prisma@6.18.0(magicast@0.3.5)(typescript@5.9.3))(typescript@5.9.3))(pg@8.16.3)(prisma@6.18.0(magicast@0.3.5)(typescript@5.9.3))))(drizzle-orm@0.44.7(@opentelemetry/api@1.9.0)(@prisma/client@6.18.0(prisma@6.18.0(magicast@0.3.5)(typescript@5.9.3))(typescript@5.9.3))(pg@8.16.3)(prisma@6.18.0(magicast@0.3.5)(typescript@5.9.3)))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(lightningcss@1.30.2)(rolldown@1.0.0-beta.32)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1) + examples/vue/basic: + dependencies: + '@tanstack/devtools': + specifier: workspace:* + version: link:../../../packages/devtools + '@tanstack/vue-devtools': + specifier: workspace:* + version: link:../../../packages/vue-devtools + '@tanstack/vue-query': + specifier: ^5.90.5 + version: 5.91.2(vue@3.5.25(typescript@5.9.3)) + '@tanstack/vue-query-devtools': + specifier: ^5.91.0 + version: 5.91.0(@tanstack/vue-query@5.91.2(vue@3.5.25(typescript@5.9.3)))(vue@3.5.25(typescript@5.9.3)) + vue: + specifier: ^3.5.22 + version: 3.5.25(typescript@5.9.3) + devDependencies: + '@vitejs/plugin-vue': + specifier: ^6.0.1 + version: 6.0.2(vite@7.1.12(@types/node@22.15.2)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) + typescript: + specifier: ~5.9.2 + version: 5.9.3 + vite: + specifier: ^7.1.7 + version: 7.1.12(@types/node@22.15.2)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1) + packages/devtools: dependencies: '@solid-primitives/event-listener': @@ -685,6 +713,22 @@ importers: specifier: ^2.11.8 version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@7.1.12(@types/node@22.15.2)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1)) + packages/vue-devtools: + dependencies: + '@tanstack/devtools': + specifier: workspace:* + version: link:../devtools + devDependencies: + '@vitejs/plugin-vue': + specifier: ^6.0.1 + version: 6.0.2(vite@7.1.12(@types/node@22.15.2)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) + eslint-plugin-vue: + specifier: ^10.5.1 + version: 10.6.0(@stylistic/eslint-plugin@5.4.0(eslint@9.39.0(jiti@2.6.1)))(@typescript-eslint/parser@8.44.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.0(jiti@2.6.1))) + vue: + specifier: ^3.5.22 + version: 3.5.25(typescript@5.9.3) + packages: '@acemir/cssom@0.9.19': @@ -2306,6 +2350,9 @@ packages: '@rolldown/pluginutils@1.0.0-beta.40': resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==} + '@rolldown/pluginutils@1.0.0-beta.50': + resolution: {integrity: sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -2792,6 +2839,10 @@ packages: resolution: {integrity: sha512-B7+x7eP2FFvi3fgd3rNH9o/Eixt+pp0zCIdGhnQbAJjFrlwIKGjGnwyJjhWJ5fMQlGks/E2LdDTqEV4W9Plx7g==} engines: {node: '>=12'} + '@tanstack/match-sorter-utils@8.19.4': + resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==} + engines: {node: '>=12'} + '@tanstack/pacer@0.15.4': resolution: {integrity: sha512-vGY+CWsFZeac3dELgB6UZ4c7OacwsLb8hvL2gLS6hTgy8Fl0Bm/aLokHaeDIP+q9F9HUZTnp360z9uv78eg8pg==} engines: {node: '>=18'} @@ -2800,6 +2851,9 @@ packages: resolution: {integrity: sha512-URVXmXwlZXL75AFyvyOORef1tv2f16dEaFntwLYnBHoKLQMxyWYRzQrnXooxO1xf+GidJuDSZSC6Rc9UX1aK7g==} engines: {node: '>=18'} + '@tanstack/query-core@5.90.10': + resolution: {integrity: sha512-EhZVFu9rl7GfRNuJLJ3Y7wtbTnENsvzp+YpcAV7kCYiXni1v8qZh++lpw4ch4rrwC0u/EZRnBHIehzCGzwXDSQ==} + '@tanstack/query-core@5.90.5': resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==} @@ -3096,6 +3150,21 @@ packages: resolution: {integrity: sha512-werDRwJSqzY28fbOBQ+wP7pQ6jl6Y+EJ8mA/dABOJEq2iBbGLXAzGPywRji7x4zULhjBDS3chQrR3nE7NVcoDw==} engines: {node: '>=18'} + '@tanstack/vue-query-devtools@5.91.0': + resolution: {integrity: sha512-Kn6p5ffEKUj+YGEP+BapoPI8kUiPtNnFDyzjTvUx6GHbyfzfefQPhYoRtFiWeyrGHjUB/Mvtnr7Rosbzs/ngVg==} + peerDependencies: + '@tanstack/vue-query': ^5.90.5 + vue: ^3.3.0 + + '@tanstack/vue-query@5.91.2': + resolution: {integrity: sha512-ReppmGrVLtiWhwHnhmGJftBbVMf0BrLWtfOk6rQs0qWrhgCei1oUiLsqTCyES/zeZVqaUTmAuUpBrLwQ4DmQTQ==} + peerDependencies: + '@vue/composition-api': ^1.1.2 + vue: ^2.6.0 || ^3.3.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} @@ -3420,6 +3489,13 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@vitejs/plugin-vue@6.0.2': + resolution: {integrity: sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + vue: ^3.2.25 + '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -3461,18 +3537,33 @@ packages: '@vue/compiler-core@3.5.18': resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} + '@vue/compiler-core@3.5.25': + resolution: {integrity: sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==} + '@vue/compiler-dom@3.5.18': resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} + '@vue/compiler-dom@3.5.25': + resolution: {integrity: sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==} + '@vue/compiler-sfc@3.5.18': resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} + '@vue/compiler-sfc@3.5.25': + resolution: {integrity: sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==} + '@vue/compiler-ssr@3.5.18': resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} + '@vue/compiler-ssr@3.5.25': + resolution: {integrity: sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==} + '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + '@vue/language-core@2.1.6': resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} peerDependencies: @@ -3481,9 +3572,26 @@ packages: typescript: optional: true + '@vue/reactivity@3.5.25': + resolution: {integrity: sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==} + + '@vue/runtime-core@3.5.25': + resolution: {integrity: sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==} + + '@vue/runtime-dom@3.5.25': + resolution: {integrity: sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==} + + '@vue/server-renderer@3.5.25': + resolution: {integrity: sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==} + peerDependencies: + vue: 3.5.25 + '@vue/shared@3.5.18': resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} + '@vue/shared@3.5.25': + resolution: {integrity: sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==} + '@whatwg-node/disposablestack@0.0.6': resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} engines: {node: '>=18.0.0'} @@ -4087,6 +4195,11 @@ packages: css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + cssstyle@5.3.2: resolution: {integrity: sha512-zDMqXh8Vs1CdRYZQ2M633m/SFgcjlu8RB8b/1h82i+6vpArF507NSYIWJHGlJaTWoS+imcnctmEz43txhbVkOw==} engines: {node: '>=20'} @@ -4727,6 +4840,20 @@ packages: '@typescript-eslint/eslint-plugin': optional: true + eslint-plugin-vue@10.6.0: + resolution: {integrity: sha512-TsoFluWxOpsJlE/l2jJygLQLWBPJ3Qdkesv7tBIunICbTcG0dS1/NBw/Ol4tJw5kHWlAVds4lUmC29/vlPUcEQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + '@typescript-eslint/parser': ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + vue-eslint-parser: ^10.0.0 + peerDependenciesMeta: + '@stylistic/eslint-plugin': + optional: true + '@typescript-eslint/parser': + optional: true + eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5712,6 +5839,9 @@ packages: magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.2.11: resolution: {integrity: sha512-6saXbRDA1HMkqbsvHOU6HBjCVgZT460qheRkLhJQHWAbhXoWESI3Kn/dGGXyKs15FFKR85jsUqFx2sMK0wy/5g==} @@ -6293,6 +6423,10 @@ packages: yaml: optional: true + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + postcss-values-parser@6.0.2: resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} engines: {node: '>=10'} @@ -6528,6 +6662,9 @@ packages: regex@5.1.1: resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} + remove-accents@0.5.0: + resolution: {integrity: sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==} + remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} @@ -7651,12 +7788,31 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue-eslint-parser@10.2.0: resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + vue@3.5.25: + resolution: {integrity: sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -7776,6 +7932,10 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -9536,6 +9696,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.40': optional: true + '@rolldown/pluginutils@1.0.0-beta.50': {} + '@rollup/plugin-alias@5.1.1(rollup@4.46.2)': optionalDependencies: rollup: 4.46.2 @@ -10074,6 +10236,10 @@ snapshots: '@tanstack/history@1.133.28': {} + '@tanstack/match-sorter-utils@8.19.4': + dependencies: + remove-accents: 0.5.0 + '@tanstack/pacer@0.15.4': dependencies: '@tanstack/devtools-event-client': 0.3.4 @@ -10088,6 +10254,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@tanstack/query-core@5.90.10': {} + '@tanstack/query-core@5.90.5': {} '@tanstack/query-devtools@5.90.1': {} @@ -10664,6 +10832,20 @@ snapshots: - typescript - vite + '@tanstack/vue-query-devtools@5.91.0(@tanstack/vue-query@5.91.2(vue@3.5.25(typescript@5.9.3)))(vue@3.5.25(typescript@5.9.3))': + dependencies: + '@tanstack/query-devtools': 5.90.1 + '@tanstack/vue-query': 5.91.2(vue@3.5.25(typescript@5.9.3)) + vue: 3.5.25(typescript@5.9.3) + + '@tanstack/vue-query@5.91.2(vue@3.5.25(typescript@5.9.3))': + dependencies: + '@tanstack/match-sorter-utils': 8.19.4 + '@tanstack/query-core': 5.90.10 + '@vue/devtools-api': 6.6.4 + vue: 3.5.25(typescript@5.9.3) + vue-demi: 0.14.10(vue@3.5.25(typescript@5.9.3)) + '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.27.1 @@ -11049,6 +11231,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-vue@6.0.2(vite@7.1.12(@types/node@22.15.2)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.50 + vite: 7.1.12(@types/node@22.15.2)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1) + vue: 3.5.25(typescript@5.9.3) + '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.2 @@ -11111,11 +11299,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@3.5.25': + dependencies: + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.25 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.18': dependencies: '@vue/compiler-core': 3.5.18 '@vue/shared': 3.5.18 + '@vue/compiler-dom@3.5.25': + dependencies: + '@vue/compiler-core': 3.5.25 + '@vue/shared': 3.5.25 + '@vue/compiler-sfc@3.5.18': dependencies: '@babel/parser': 7.28.5 @@ -11128,16 +11329,35 @@ snapshots: postcss: 8.5.6 source-map-js: 1.2.1 + '@vue/compiler-sfc@3.5.25': + dependencies: + '@babel/parser': 7.28.5 + '@vue/compiler-core': 3.5.25 + '@vue/compiler-dom': 3.5.25 + '@vue/compiler-ssr': 3.5.25 + '@vue/shared': 3.5.25 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.6 + source-map-js: 1.2.1 + '@vue/compiler-ssr@3.5.18': dependencies: '@vue/compiler-dom': 3.5.18 '@vue/shared': 3.5.18 + '@vue/compiler-ssr@3.5.25': + dependencies: + '@vue/compiler-dom': 3.5.25 + '@vue/shared': 3.5.25 + '@vue/compiler-vue2@2.7.16': dependencies: de-indent: 1.0.2 he: 1.2.0 + '@vue/devtools-api@6.6.4': {} + '@vue/language-core@2.1.6(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.13 @@ -11151,8 +11371,32 @@ snapshots: optionalDependencies: typescript: 5.9.3 + '@vue/reactivity@3.5.25': + dependencies: + '@vue/shared': 3.5.25 + + '@vue/runtime-core@3.5.25': + dependencies: + '@vue/reactivity': 3.5.25 + '@vue/shared': 3.5.25 + + '@vue/runtime-dom@3.5.25': + dependencies: + '@vue/reactivity': 3.5.25 + '@vue/runtime-core': 3.5.25 + '@vue/shared': 3.5.25 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.25(vue@3.5.25(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.25 + '@vue/shared': 3.5.25 + vue: 3.5.25(typescript@5.9.3) + '@vue/shared@3.5.18': {} + '@vue/shared@3.5.25': {} + '@whatwg-node/disposablestack@0.0.6': dependencies: '@whatwg-node/promise-helpers': 1.3.2 @@ -11787,6 +12031,8 @@ snapshots: css.escape@1.5.1: {} + cssesc@3.0.0: {} + cssstyle@5.3.2(postcss@8.5.6): dependencies: '@asamuzakjp/css-color': 4.0.4 @@ -12430,6 +12676,20 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-vue@10.6.0(@stylistic/eslint-plugin@5.4.0(eslint@9.39.0(jiti@2.6.1)))(@typescript-eslint/parser@8.44.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.0(jiti@2.6.1))): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) + eslint: 9.39.0(jiti@2.6.1) + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 7.1.0 + semver: 7.7.2 + vue-eslint-parser: 10.2.0(eslint@9.39.0(jiti@2.6.1)) + xml-name-validator: 4.0.0 + optionalDependencies: + '@stylistic/eslint-plugin': 5.4.0(eslint@9.39.0(jiti@2.6.1)) + '@typescript-eslint/parser': 8.44.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -13419,6 +13679,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.2.11: dependencies: '@babel/parser': 7.28.5 @@ -14108,6 +14372,11 @@ snapshots: tsx: 4.20.3 yaml: 2.8.1 + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-values-parser@6.0.2(postcss@8.5.6): dependencies: color-name: 1.1.4 @@ -14357,6 +14626,8 @@ snapshots: dependencies: regex-utilities: 2.3.0 + remove-accents@0.5.0: {} + remove-trailing-separator@1.1.0: {} require-directory@2.1.1: {} @@ -15619,6 +15890,10 @@ snapshots: vscode-uri@3.1.0: {} + vue-demi@0.14.10(vue@3.5.25(typescript@5.9.3)): + dependencies: + vue: 3.5.25(typescript@5.9.3) + vue-eslint-parser@10.2.0(eslint@9.39.0(jiti@2.6.1)): dependencies: debug: 4.4.3 @@ -15631,6 +15906,16 @@ snapshots: transitivePeerDependencies: - supports-color + vue@3.5.25(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.25 + '@vue/compiler-sfc': 3.5.25 + '@vue/runtime-dom': 3.5.25 + '@vue/server-renderer': 3.5.25(vue@3.5.25(typescript@5.9.3)) + '@vue/shared': 3.5.25 + optionalDependencies: + typescript: 5.9.3 + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 @@ -15747,6 +16032,8 @@ snapshots: dependencies: is-wsl: 3.1.0 + xml-name-validator@4.0.0: {} + xml-name-validator@5.0.0: {} xmlbuilder2@3.1.1: From c118090aedefadcb2f1cd79463973e609eb951a5 Mon Sep 17 00:00:00 2001 From: Damian Osipiuk Date: Fri, 24 Oct 2025 23:28:44 +0200 Subject: [PATCH 2/6] fix(vue-devtools): fix jsdoc, bump sherif --- examples/vue/basic/package.json | 6 ++-- package.json | 6 ++-- packages/vue-devtools/package.json | 2 +- packages/vue-devtools/src/types.ts | 24 +++++++------ pnpm-lock.yaml | 57 +++++++++++++++++++++++++++--- 5 files changed, 73 insertions(+), 22 deletions(-) diff --git a/examples/vue/basic/package.json b/examples/vue/basic/package.json index da81ca67..76728ee9 100644 --- a/examples/vue/basic/package.json +++ b/examples/vue/basic/package.json @@ -8,8 +8,8 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/devtools": "workspace:*", - "@tanstack/vue-devtools": "workspace:*", + "@tanstack/devtools": "^0.6.22", + "@tanstack/vue-devtools": "^0.1.0", "@tanstack/vue-query": "^5.90.5", "@tanstack/vue-query-devtools": "^5.91.0", "vue": "^3.5.22" @@ -19,4 +19,4 @@ "typescript": "~5.9.2", "vite": "^7.1.7" } -} \ No newline at end of file +} diff --git a/package.json b/package.json index f0470184..c74510b7 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "test:lib": "nx affected --targets=test:lib --exclude=examples/**", "test:lib:dev": "pnpm test:lib && nx watch --all -- pnpm test:lib", "test:pr": "nx affected --targets=test:format,test:eslint,test:sherif,test:knip,test:lib,test:types,test:build,build", - "test:sherif": "sherif -p @tanstack/query-example-vue-basic", + "test:sherif": "sherif", "test:types": "nx affected --targets=test:types --exclude=examples/**", "watch": "pnpm run build:all && nx watch --all -- pnpm run build:all" }, @@ -72,7 +72,7 @@ "prettier": "^3.6.2", "prettier-plugin-svelte": "^3.4.0", "publint": "^0.3.13", - "sherif": "^1.6.1", + "sherif": "^1.7.0", "size-limit": "^11.2.0", "tinyglobby": "^0.2.15", "typescript": "~5.9.2", @@ -85,4 +85,4 @@ "@tanstack/solid-devtools": "workspace:*", "@tanstack/devtools-vite": "workspace:*" } -} \ No newline at end of file +} diff --git a/packages/vue-devtools/package.json b/packages/vue-devtools/package.json index 6ca89533..cd205631 100644 --- a/packages/vue-devtools/package.json +++ b/packages/vue-devtools/package.json @@ -55,4 +55,4 @@ "eslint-plugin-vue": "^10.5.1", "vue": "^3.5.22" } -} \ No newline at end of file +} diff --git a/packages/vue-devtools/src/types.ts b/packages/vue-devtools/src/types.ts index c4bafaaf..f70d8088 100644 --- a/packages/vue-devtools/src/types.ts +++ b/packages/vue-devtools/src/types.ts @@ -17,19 +17,23 @@ export type TanStackDevtoolsVuePlugin = Omit< export interface TanStackDevtoolsVueInit { /** * Array of plugins to be used in the devtools. - * Each plugin should have a `render` function that returns a Vue component + * Each plugin should have a `render` prop that returns a Vue component * * Example: * ```vue - * , - * } - * ]} - * /> + * + * + * * ``` */ plugins?: Array diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1628d87a..1cf5db22 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,7 +57,7 @@ importers: specifier: ^0.3.13 version: 0.3.15 sherif: - specifier: ^1.6.1 + specifier: ^1.7.0 version: 1.8.0 size-limit: specifier: ^11.2.0 @@ -486,10 +486,10 @@ importers: examples/vue/basic: dependencies: '@tanstack/devtools': - specifier: workspace:* - version: link:../../../packages/devtools + specifier: ^0.6.22 + version: 0.6.24(csstype@3.1.3)(solid-js@1.9.10) '@tanstack/vue-devtools': - specifier: workspace:* + specifier: ^0.1.0 version: link:../../../packages/vue-devtools '@tanstack/vue-query': specifier: ^5.90.5 @@ -2791,16 +2791,34 @@ packages: resolution: {integrity: sha512-CWVv5kK7QdfnrAyvUo31spmqZjn+zpxKRqsyJDhGY7I4QweJeCbRJrlhzH3trv18ZyW3thRvtiHWfX1MdUr2VA==} engines: {node: '>=18'} + '@tanstack/devtools-client@0.0.3': + resolution: {integrity: sha512-kl0r6N5iIL3t9gGDRAv55VRM3UIyMKVH83esRGq7xBjYsRLe/BeCIN2HqrlJkObUXQMKhy7i8ejuGOn+bDqDBw==} + engines: {node: '>=18'} + + '@tanstack/devtools-event-bus@0.3.3': + resolution: {integrity: sha512-lWl88uLAz7ZhwNdLH6A3tBOSEuBCrvnY9Fzr5JPdzJRFdM5ZFdyNWz1Bf5l/F3GU57VodrN0KCFi9OA26H5Kpg==} + engines: {node: '>=18'} + '@tanstack/devtools-event-client@0.3.4': resolution: {integrity: sha512-eq+PpuutUyubXu+ycC1GIiVwBs86NF/8yYJJAKSpPcJLWl6R/761F1H4F/9ziX6zKezltFUH1ah3Cz8Ah+KJrw==} engines: {node: '>=18'} + '@tanstack/devtools-event-client@0.3.5': + resolution: {integrity: sha512-RL1f5ZlfZMpghrCIdzl6mLOFLTuhqmPNblZgBaeKfdtk5rfbjykurv+VfYydOFXj0vxVIoA2d/zT7xfD7Ph8fw==} + engines: {node: '>=18'} + '@tanstack/devtools-ui@0.4.4': resolution: {integrity: sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg==} engines: {node: '>=18'} peerDependencies: solid-js: '>=1.9.7' + '@tanstack/devtools@0.6.24': + resolution: {integrity: sha512-z3J7k1EQ8yoUuUiEP3PtOcGBMz4bl16vFjoDIQ2izicu1yF332qVzth4wswzp7q91mj+RLetKglak7DZGi5ZKw==} + engines: {node: '>=18'} + peerDependencies: + solid-js: '>=1.9.7' + '@tanstack/directive-functions-plugin@1.121.21': resolution: {integrity: sha512-B9z/HbF7gJBaRHieyX7f2uQ4LpLLAVAEutBZipH6w+CYD6RHRJvSVPzECGHF7icFhNWTiJQL2QR6K07s59yzEw==} engines: {node: '>=12'} @@ -10148,8 +10166,21 @@ snapshots: - typescript - vite + '@tanstack/devtools-client@0.0.3': + dependencies: + '@tanstack/devtools-event-client': 0.3.5 + + '@tanstack/devtools-event-bus@0.3.3': + dependencies: + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@tanstack/devtools-event-client@0.3.4': {} + '@tanstack/devtools-event-client@0.3.5': {} + '@tanstack/devtools-ui@0.4.4(csstype@3.1.3)(solid-js@1.9.10)': dependencies: clsx: 2.1.1 @@ -10158,6 +10189,22 @@ snapshots: transitivePeerDependencies: - csstype + '@tanstack/devtools@0.6.24(csstype@3.1.3)(solid-js@1.9.10)': + dependencies: + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.10) + '@solid-primitives/keyboard': 1.3.3(solid-js@1.9.10) + '@solid-primitives/resize-observer': 2.1.3(solid-js@1.9.10) + '@tanstack/devtools-client': 0.0.3 + '@tanstack/devtools-event-bus': 0.3.3 + '@tanstack/devtools-ui': 0.4.4(csstype@3.1.3)(solid-js@1.9.10) + clsx: 2.1.1 + goober: 2.1.18(csstype@3.1.3) + solid-js: 1.9.10 + transitivePeerDependencies: + - bufferutil + - csstype + - utf-8-validate + '@tanstack/directive-functions-plugin@1.121.21(vite@7.1.12(@types/node@22.15.2)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.26.2 @@ -15157,7 +15204,7 @@ snapshots: esrap: 1.4.6 is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.19 + magic-string: 0.30.21 zimmerframe: 1.1.2 swr@2.3.6(react@19.1.1): From e93746e2b41a7fa0f54147af0381257edc576099 Mon Sep 17 00:00:00 2001 From: Damian Osipiuk Date: Sat, 25 Oct 2025 00:21:43 +0200 Subject: [PATCH 3/6] fix: pass props to plugin component --- examples/vue/basic/src/App.vue | 12 ++++++++++-- packages/vue-devtools/src/types.ts | 7 ++----- packages/vue-devtools/src/vue-devtools.vue | 8 +++++--- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/examples/vue/basic/src/App.vue b/examples/vue/basic/src/App.vue index cbd4090d..6db82508 100644 --- a/examples/vue/basic/src/App.vue +++ b/examples/vue/basic/src/App.vue @@ -1,6 +1,9 @@