diff --git a/.changeset/devtools-utils-preact-11-unmount.md b/.changeset/devtools-utils-preact-11-unmount.md new file mode 100644 index 000000000..48f12e4f4 --- /dev/null +++ b/.changeset/devtools-utils-preact-11-unmount.md @@ -0,0 +1,5 @@ +--- +'@tanstack/devtools-utils': patch +--- + +Unmount the devtools core when a Preact panel unmounts on Preact 11. Preact 11 clears refs before effect cleanups run, so the panel skipped `unmount()`. diff --git a/.changeset/preact-devtools-plugin-context.md b/.changeset/preact-devtools-plugin-context.md new file mode 100644 index 000000000..9068459cc --- /dev/null +++ b/.changeset/preact-devtools-plugin-context.md @@ -0,0 +1,5 @@ +--- +'@tanstack/preact-devtools': patch +--- + +Plugins, titles and custom triggers now see the context of the app that renders ``, so a plugin like `` finds its `QueryClientProvider`. They used to render in a separate root with no context. diff --git a/e2e/apps/preact/package.json b/e2e/apps/preact/package.json index 6f4569acf..29a7931b4 100644 --- a/e2e/apps/preact/package.json +++ b/e2e/apps/preact/package.json @@ -12,7 +12,7 @@ "dependencies": { "@tanstack/devtools-e2e": "workspace:*", "@tanstack/preact-devtools": "workspace:*", - "preact": "^10.28.0" + "preact": "^11.0.1" }, "devDependencies": { "@playwright/test": "^1.49.0", diff --git a/examples/preact/basic/package.json b/examples/preact/basic/package.json index ba578a9b9..8d6a1fd7d 100644 --- a/examples/preact/basic/package.json +++ b/examples/preact/basic/package.json @@ -12,7 +12,7 @@ "@tanstack/devtools-client": "0.0.8", "@tanstack/devtools-event-client": "0.5.0", "@tanstack/preact-devtools": "workspace:*", - "preact": "^10.28.0", + "preact": "^11.0.1", "zod": "^4.3.5" }, "devDependencies": { diff --git a/examples/preact/basic/src/package-json-panel.tsx b/examples/preact/basic/src/package-json-panel.tsx index ed61e10e0..bc5c7c7cd 100644 --- a/examples/preact/basic/src/package-json-panel.tsx +++ b/examples/preact/basic/src/package-json-panel.tsx @@ -92,9 +92,9 @@ export const PackageJsonPanel = () => { style={{ background: color, color: '#fff', - borderRadius: 4, + borderRadius: '4px', padding: '1px 4px', - fontSize: 11, + fontSize: '11px', }} > {text} @@ -109,13 +109,13 @@ export const PackageJsonPanel = () => { onClick={onClick} style={{ padding: '2px 6px', - borderRadius: 5, + borderRadius: '5px', border: variant === 'primary' ? '1px solid #6d28d9' : '1px solid transparent', cursor: 'pointer', background: variant === 'primary' ? '#7c3aed' : 'transparent', color: variant === 'primary' ? '#fff' : '#7c3aed', - fontSize: 12, + fontSize: '12px', }} > {label} @@ -141,11 +141,11 @@ export const PackageJsonPanel = () => { const latest = info?.latest const dt = info ? diffType(current, latest) : null return ( -
+
{current} {dt && latest ? ( → {badge(`latest ${latest}`, diffColor[dt])} @@ -166,7 +166,7 @@ export const PackageJsonPanel = () => { | undefined if (!info) return null return ( -
+
{btn('Wanted', () => (devtoolsEventClient as any).emit('upgrade-dependency', { name, @@ -205,7 +205,7 @@ export const PackageJsonPanel = () => { const { wantedList, latestList } = makeLists(names) if (wantedList.length === 0 && latestList.length === 0) return null return ( -
+
{btn('All → wanted', () => (devtoolsEventClient as any).emit('upgrade-dependencies-bulk', { list: wantedList, @@ -234,7 +234,7 @@ export const PackageJsonPanel = () => { display: 'flex', alignItems: 'center', justifyContent: 'space-between', - gap: 6, + gap: '6px', }} >

{title}

@@ -285,9 +285,9 @@ export const PackageJsonPanel = () => { return (
-

Package.json

+

Package.json

{packageJson ? ( -
+

Package info diff --git a/examples/preact/custom-devtools/package.json b/examples/preact/custom-devtools/package.json index 97321c257..503c38ba7 100644 --- a/examples/preact/custom-devtools/package.json +++ b/examples/preact/custom-devtools/package.json @@ -11,7 +11,7 @@ "dependencies": { "@tanstack/devtools-event-client": "0.5.0", "@tanstack/preact-devtools": "workspace:*", - "preact": "^10.28.0" + "preact": "^11.0.1" }, "devDependencies": { "@preact/preset-vite": "^2.10.3", diff --git a/packages/devtools-a11y/package.json b/packages/devtools-a11y/package.json index 11944c33d..4ebb22157 100644 --- a/packages/devtools-a11y/package.json +++ b/packages/devtools-a11y/package.json @@ -102,6 +102,7 @@ "goober": "^2.1.16" }, "devDependencies": { + "preact": "^11.0.1", "vite-plugin-solid": "^2.11.11" }, "peerDependencies": { diff --git a/packages/devtools-utils/package.json b/packages/devtools-utils/package.json index f815d686e..ec29710f3 100644 --- a/packages/devtools-utils/package.json +++ b/packages/devtools-utils/package.json @@ -90,6 +90,7 @@ "devDependencies": { "@sveltejs/vite-plugin-svelte": "^6.0.0", "@tanstack/devtools": "workspace:^", + "preact": "^11.0.1", "svelte": "^5.0.0", "tsup": "^8.5.0", "tsup-preset-solid": "^2.2.0", diff --git a/packages/devtools-utils/src/preact/panel.test.ts b/packages/devtools-utils/src/preact/panel.test.ts new file mode 100644 index 000000000..1668f450f --- /dev/null +++ b/packages/devtools-utils/src/preact/panel.test.ts @@ -0,0 +1,24 @@ +import { h, render } from 'preact' +import { act } from 'preact/test-utils' +import { describe, expect, it, vi } from 'vitest' +import { createPreactPanel } from './panel' + +describe('createPreactPanel', () => { + it('unmounts the core devtools when the panel unmounts', () => { + const mount = vi.fn() + const unmount = vi.fn() + const [Panel] = createPreactPanel( + class { + mount = mount + unmount = unmount + }, + ) + const host = document.createElement('div') + + act(() => render(h(Panel, { theme: 'dark', devtoolsOpen: true }), host)) + expect(mount).toHaveBeenCalledOnce() + + act(() => render(null, host)) + expect(unmount).toHaveBeenCalledOnce() + }) +}) diff --git a/packages/devtools-utils/src/preact/panel.tsx b/packages/devtools-utils/src/preact/panel.tsx index 5c8fcd604..289acc679 100644 --- a/packages/devtools-utils/src/preact/panel.tsx +++ b/packages/devtools-utils/src/preact/panel.tsx @@ -35,13 +35,15 @@ export function createPreactPanel< useEffect(() => { if (devtools.current) return devtools.current = new CoreClass() + // Preact 11 clears the ref before this effect's cleanup runs. + const el = devToolRef.current - if (devToolRef.current) { - devtools.current.mount(devToolRef.current, props) + if (el) { + devtools.current.mount(el, props) } return () => { - if (devToolRef.current) { + if (el) { devtools.current?.unmount() devtools.current = null } diff --git a/packages/preact-devtools/package.json b/packages/preact-devtools/package.json index 635a445c7..e34b9e054 100644 --- a/packages/preact-devtools/package.json +++ b/packages/preact-devtools/package.json @@ -56,7 +56,7 @@ "devDependencies": { "@preact/preset-vite": "^2.10.3", "eslint-plugin-react-hooks": "^7.0.1", - "preact": "^10.28.0" + "preact": "^11.0.1" }, "peerDependencies": { "preact": ">=10.0.0" diff --git a/packages/preact-devtools/src/devtools.tsx b/packages/preact-devtools/src/devtools.tsx index 514f1ef99..ac3bce173 100644 --- a/packages/preact-devtools/src/devtools.tsx +++ b/packages/preact-devtools/src/devtools.tsx @@ -1,7 +1,7 @@ import { useEffect, useMemo, useRef, useState } from 'preact/hooks' import { render } from 'preact' import { TanStackDevtoolsCore } from '@tanstack/devtools' -import type { JSX } from 'preact' +import type { ComponentChildren, JSX } from 'preact' import type { ClientEventBusConfig, TanStackDevtoolsConfig, @@ -116,20 +116,38 @@ export interface TanStackDevtoolsPreactInit { eventBusConfig?: ClientEventBusConfig } -// Simple portal component for Preact -function Portal({ - children, - container, -}: { - children: JSX.Element - container: HTMLElement -}) { +// Hands the portal's context to the separate root, so plugins can read the app's providers. +function ContextProvider( + this: { getChildContext?: () => object }, + props: { context: object; children: ComponentChildren }, +) { + this.getChildContext = () => props.context + return props.children +} + +// Core `createPortal` only exists in Preact 11, and `preact/compat` patches global options. +function Portal( + { + children, + container, + }: { + children: JSX.Element + container: HTMLElement + }, + context: object, +) { + useEffect(() => { + render( + {children}, + container, + ) + }) + useEffect(() => { - render(children, container) return () => { render(null, container) } - }, [children, container]) + }, [container]) return null } diff --git a/packages/preact-devtools/tests/devtools.test.tsx b/packages/preact-devtools/tests/devtools.test.tsx new file mode 100644 index 000000000..0d48a8502 --- /dev/null +++ b/packages/preact-devtools/tests/devtools.test.tsx @@ -0,0 +1,81 @@ +import { createContext, render } from 'preact' +import { useContext, useState } from 'preact/hooks' +import { act } from 'preact/test-utils' +import { afterEach, describe, expect, it, vi } from 'vitest' +import { TanStackDevtoolsCore } from '@tanstack/devtools' +import { TanStackDevtools } from '../src/devtools' +import type { TanStackDevtoolsPlugin } from '@tanstack/devtools' + +// The real core does a full Solid mount. The adapter only needs these methods. +vi.mock('@tanstack/devtools', () => ({ + TanStackDevtoolsCore: vi.fn( + class { + mount = vi.fn() + unmount = vi.fn() + setConfig = vi.fn() + }, + ), +})) + +const CoreMock = vi.mocked(TanStackDevtoolsCore) + +const AppContext = createContext('default') + +function Consumer() { + return {useContext(AppContext)} +} + +describe('TanStackDevtools (Preact adapter)', () => { + const host = document.createElement('div') + + afterEach(() => { + act(() => { + render(null, host) + }) + document.body.innerHTML = '' + CoreMock.mockClear() + }) + + it('renders plugins with the context of the app', () => { + let setValue: (value: string) => void = () => {} + + function App() { + const [value, set] = useState('from app') + setValue = set + return ( + + }]} + /> + + ) + } + + act(() => { + render(, host) + }) + + const { plugins } = CoreMock.mock.calls[0]![0] as { + plugins: Array + } + // The adapter only portals into containers it can find by id. + const container = document.createElement('div') + container.id = 'p' + document.body.appendChild(container) + + act(() => { + plugins[0]!.render(container, { theme: 'dark', devtoolsOpen: true }) + }) + expect(container.textContent).toBe('from app') + + act(() => { + setValue('updated') + }) + expect(container.textContent).toBe('updated') + + act(() => { + render(null, host) + }) + expect(container.textContent).toBe('') + }) +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8fb71a2c..b52f243fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -145,15 +145,15 @@ importers: specifier: workspace:* version: link:../../../packages/preact-devtools preact: - specifier: ^10.28.0 - version: 10.29.1 + specifier: ^11.0.1 + version: 11.0.1 devDependencies: '@playwright/test': specifier: ^1.49.0 version: 1.61.0 '@preact/preset-vite': specifier: ^2.10.3 - version: 2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.10.5(@babel/core@7.29.0)(preact@11.0.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/devtools-vite': specifier: workspace:* version: link:../../../packages/devtools-vite @@ -672,15 +672,15 @@ importers: specifier: workspace:* version: link:../../../packages/preact-devtools preact: - specifier: ^10.28.0 - version: 10.29.1 + specifier: ^11.0.1 + version: 11.0.1 zod: specifier: ^4.3.5 version: 4.4.3 devDependencies: '@preact/preset-vite': specifier: ^2.10.3 - version: 2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.10.5(@babel/core@7.29.0)(preact@11.0.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/devtools-ui': specifier: 0.7.1 version: link:../../../packages/devtools-ui @@ -706,12 +706,12 @@ importers: specifier: workspace:* version: link:../../../packages/preact-devtools preact: - specifier: ^10.28.0 - version: 10.29.1 + specifier: ^11.0.1 + version: 11.0.1 devDependencies: '@preact/preset-vite': specifier: ^2.10.3 - version: 2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.10.5(@babel/core@7.29.0)(preact@11.0.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: ^8.0.0 version: 8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) @@ -882,7 +882,7 @@ importers: version: 0.8.2(@tanstack/ai@0.16.0)(@types/react@19.2.14)(react@19.2.6) '@tanstack/react-ai-devtools': specifier: latest - version: 0.2.31(@types/react@19.2.14)(csstype@3.2.3)(preact@10.29.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3)) + version: 0.2.31(@types/react@19.2.14)(csstype@3.2.3)(preact@11.0.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3)) '@tanstack/react-devtools': specifier: latest version: link:../../../packages/react-devtools @@ -1584,9 +1584,6 @@ importers: goober: specifier: ^2.1.16 version: 2.1.18(csstype@3.2.3) - preact: - specifier: '>=10.0.0' - version: 10.29.1 react: specifier: '>=17.0.0' version: 19.2.6 @@ -1597,6 +1594,9 @@ importers: specifier: '>=3.2.0' version: 3.5.34(typescript@5.9.3) devDependencies: + preact: + specifier: ^11.0.1 + version: 11.0.1 vite-plugin-solid: specifier: ^2.11.11 version: 2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -1687,9 +1687,6 @@ importers: '@types/react': specifier: '>=17.0.0' version: 19.2.14 - preact: - specifier: '>=10.0.0' - version: 10.29.1 react: specifier: '>=17.0.0' version: 19.2.6 @@ -1706,6 +1703,9 @@ importers: '@tanstack/devtools': specifier: workspace:^ version: link:../devtools + preact: + specifier: ^11.0.1 + version: 11.0.1 svelte: specifier: ^5.0.0 version: 5.55.1(@typescript-eslint/types@8.58.0) @@ -1770,13 +1770,13 @@ importers: devDependencies: '@preact/preset-vite': specifier: ^2.10.3 - version: 2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.10.5(@babel/core@7.29.0)(preact@11.0.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) eslint-plugin-react-hooks: specifier: ^7.0.1 version: 7.1.1(eslint@9.39.4(jiti@2.7.0)) preact: - specifier: ^10.28.0 - version: 10.29.1 + specifier: ^11.0.1 + version: 11.0.1 packages/react-devtools: dependencies: @@ -10355,8 +10355,13 @@ packages: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} - preact@10.29.1: - resolution: {integrity: sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==} + preact@11.0.1: + resolution: {integrity: sha512-TNNwEq++jYNHy747LziCjPRVgEwnLSOIOAw/oYcjI3Tdnubx2EXtt76I0an8PATvUWtx/DX1kFIg1eFN+O/fkw==} + peerDependencies: + preact-render-to-string: '>=6.7.0' + peerDependenciesMeta: + preact-render-to-string: + optional: true prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -14887,12 +14892,12 @@ snapshots: '@poppinss/exception@1.2.3': {} - '@preact/preset-vite@2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@preact/preset-vite@2.10.5(@babel/core@7.29.0)(preact@11.0.1)(rollup@4.60.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) - '@prefresh/vite': 2.4.12(preact@10.29.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@prefresh/vite': 2.4.12(preact@11.0.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@rollup/pluginutils': 5.3.0(rollup@4.60.1) babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.0) debug: 4.4.3 @@ -14908,20 +14913,20 @@ snapshots: '@prefresh/babel-plugin@0.5.3': {} - '@prefresh/core@1.5.9(preact@10.29.1)': + '@prefresh/core@1.5.9(preact@11.0.1)': dependencies: - preact: 10.29.1 + preact: 11.0.1 '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.12(preact@10.29.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@prefresh/vite@2.4.12(preact@11.0.1)(vite@8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@prefresh/babel-plugin': 0.5.3 - '@prefresh/core': 1.5.9(preact@10.29.1) + '@prefresh/core': 1.5.9(preact@11.0.1) '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 - preact: 10.29.1 + preact: 11.0.1 vite: 8.0.12(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -15803,12 +15808,12 @@ snapshots: transitivePeerDependencies: - '@opentelemetry/api' - '@tanstack/ai-devtools-core@0.3.27(@types/react@19.2.14)(csstype@3.2.3)(preact@10.29.1)(react@19.2.6)(vue@3.5.34(typescript@5.9.3))': + '@tanstack/ai-devtools-core@0.3.27(@types/react@19.2.14)(csstype@3.2.3)(preact@11.0.1)(react@19.2.6)(vue@3.5.34(typescript@5.9.3))': dependencies: '@tanstack/ai': 0.16.0 '@tanstack/ai-event-client': 0.3.0(@tanstack/ai@0.16.0) '@tanstack/devtools-ui': 0.5.1(csstype@3.2.3)(solid-js@1.9.12) - '@tanstack/devtools-utils': 0.4.0(@types/react@19.2.14)(preact@10.29.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3)) + '@tanstack/devtools-utils': 0.4.0(@types/react@19.2.14)(preact@11.0.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3)) goober: 2.1.18(csstype@3.2.3) solid-js: 1.9.12 transitivePeerDependencies: @@ -15890,10 +15895,10 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/devtools-utils@0.4.0(@types/react@19.2.14)(preact@10.29.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3))': + '@tanstack/devtools-utils@0.4.0(@types/react@19.2.14)(preact@11.0.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3))': optionalDependencies: '@types/react': 19.2.14 - preact: 10.29.1 + preact: 11.0.1 react: 19.2.6 solid-js: 1.9.12 vue: 3.5.34(typescript@5.9.3) @@ -15980,10 +15985,10 @@ snapshots: '@tanstack/query-devtools@5.100.9': {} - '@tanstack/react-ai-devtools@0.2.31(@types/react@19.2.14)(csstype@3.2.3)(preact@10.29.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3))': + '@tanstack/react-ai-devtools@0.2.31(@types/react@19.2.14)(csstype@3.2.3)(preact@11.0.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3))': dependencies: - '@tanstack/ai-devtools-core': 0.3.27(@types/react@19.2.14)(csstype@3.2.3)(preact@10.29.1)(react@19.2.6)(vue@3.5.34(typescript@5.9.3)) - '@tanstack/devtools-utils': 0.4.0(@types/react@19.2.14)(preact@10.29.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3)) + '@tanstack/ai-devtools-core': 0.3.27(@types/react@19.2.14)(csstype@3.2.3)(preact@11.0.1)(react@19.2.6)(vue@3.5.34(typescript@5.9.3)) + '@tanstack/devtools-utils': 0.4.0(@types/react@19.2.14)(preact@11.0.1)(react@19.2.6)(solid-js@1.9.12)(vue@3.5.34(typescript@5.9.3)) '@types/react': 19.2.14 react: 19.2.6 transitivePeerDependencies: @@ -21781,7 +21786,7 @@ snapshots: powershell-utils@0.1.0: {} - preact@10.29.1: {} + preact@11.0.1: {} prelude-ls@1.2.1: {}