From ecf7916f99da9d432833705d104859f185d6677f Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Mon, 17 Aug 2026 18:07:03 +0200 Subject: [PATCH 1/5] feat: add React Scan plugin for TanStack Devtools --- .changeset/react-scan-devtools.md | 6 + docs/config.json | 4 + docs/plugins/react-scan.md | 95 + examples/react/basic/index.html | 1 - examples/react/basic/package.json | 1 + examples/react/basic/src/setup.tsx | 2 + package.json | 3 +- packages/devtools/src/tabs/plugin-registry.ts | 19 + packages/react-scan-devtools/CHANGELOG.md | 1 + packages/react-scan-devtools/README.md | 18 + packages/react-scan-devtools/eslint.config.js | 10 + packages/react-scan-devtools/package.json | 91 + .../src/core/components/RenderList.tsx | 189 ++ .../src/core/components/Settings.tsx | 64 + .../src/core/components/Shell.tsx | 70 + .../src/core/components/index.tsx | 13 + .../react-scan-devtools/src/core/index.ts | 7 + packages/react-scan-devtools/src/core/scan.ts | 102 + .../react-scan-devtools/src/core/store.ts | 68 + .../src/core/styles/styles.ts | 201 ++ .../react-scan-devtools/src/core/types.ts | 40 + packages/react-scan-devtools/src/index.ts | 16 + packages/react-scan-devtools/src/panel.ts | 8 + packages/react-scan-devtools/src/plugin.ts | 21 + .../react-scan-devtools/src/production.ts | 5 + .../src/production/panel.ts | 6 + .../src/production/plugin.ts | 15 + .../react-scan-devtools/tests/plugin.test.ts | 67 + .../react-scan-devtools/tests/scan.test.ts | 170 ++ .../react-scan-devtools/tests/store.test.ts | 122 + .../react-scan-devtools/tests/test-setup.ts | 1 + packages/react-scan-devtools/tsconfig.json | 8 + packages/react-scan-devtools/vite.config.ts | 41 + pnpm-lock.yaml | 2187 ++++++++++++++--- 34 files changed, 3301 insertions(+), 371 deletions(-) create mode 100644 .changeset/react-scan-devtools.md create mode 100644 docs/plugins/react-scan.md create mode 100644 packages/react-scan-devtools/CHANGELOG.md create mode 100644 packages/react-scan-devtools/README.md create mode 100644 packages/react-scan-devtools/eslint.config.js create mode 100644 packages/react-scan-devtools/package.json create mode 100644 packages/react-scan-devtools/src/core/components/RenderList.tsx create mode 100644 packages/react-scan-devtools/src/core/components/Settings.tsx create mode 100644 packages/react-scan-devtools/src/core/components/Shell.tsx create mode 100644 packages/react-scan-devtools/src/core/components/index.tsx create mode 100644 packages/react-scan-devtools/src/core/index.ts create mode 100644 packages/react-scan-devtools/src/core/scan.ts create mode 100644 packages/react-scan-devtools/src/core/store.ts create mode 100644 packages/react-scan-devtools/src/core/styles/styles.ts create mode 100644 packages/react-scan-devtools/src/core/types.ts create mode 100644 packages/react-scan-devtools/src/index.ts create mode 100644 packages/react-scan-devtools/src/panel.ts create mode 100644 packages/react-scan-devtools/src/plugin.ts create mode 100644 packages/react-scan-devtools/src/production.ts create mode 100644 packages/react-scan-devtools/src/production/panel.ts create mode 100644 packages/react-scan-devtools/src/production/plugin.ts create mode 100644 packages/react-scan-devtools/tests/plugin.test.ts create mode 100644 packages/react-scan-devtools/tests/scan.test.ts create mode 100644 packages/react-scan-devtools/tests/store.test.ts create mode 100644 packages/react-scan-devtools/tests/test-setup.ts create mode 100644 packages/react-scan-devtools/tsconfig.json create mode 100644 packages/react-scan-devtools/vite.config.ts diff --git a/.changeset/react-scan-devtools.md b/.changeset/react-scan-devtools.md new file mode 100644 index 000000000..75129a1b3 --- /dev/null +++ b/.changeset/react-scan-devtools.md @@ -0,0 +1,6 @@ +--- +'@tanstack/react-scan-devtools': minor +'@tanstack/devtools': patch +--- + +Add `@tanstack/react-scan-devtools`, a React Scan plugin for TanStack Devtools. The plugin starts `react-scan`, shows live render diagnostics, and hides the floating toolbar. diff --git a/docs/config.json b/docs/config.json index 875de2227..ddd99d720 100644 --- a/docs/config.json +++ b/docs/config.json @@ -206,6 +206,10 @@ { "label": "a11y", "to": "framework/react/examples/a11y-devtools" + }, + { + "label": "React Scan", + "to": "plugins/react-scan" } ] }, diff --git a/docs/plugins/react-scan.md b/docs/plugins/react-scan.md new file mode 100644 index 000000000..63b12db19 --- /dev/null +++ b/docs/plugins/react-scan.md @@ -0,0 +1,95 @@ +--- +title: React Scan Plugin +id: react-scan-plugin +--- + +You want React render problems inside TanStack Devtools, not a second floating toolbar on the page. The React Scan plugin starts [react-scan](https://github.com/aidenybai/react-scan), keeps outlines on the page, and shows a live render list in the TanStack tab. + +## Installation + +```bash +npm install @tanstack/react-scan-devtools react-scan +# or +pnpm add @tanstack/react-scan-devtools react-scan +# or +yarn add @tanstack/react-scan-devtools react-scan +``` + +## Quick Start + +```tsx +import { createRoot } from 'react-dom/client' +import { TanStackDevtools } from '@tanstack/react-devtools' +import { reactScanDevtoolsPlugin } from '@tanstack/react-scan-devtools' + +createRoot(document.getElementById('root')!).render( + <> + + + , +) +``` + +`scan()` starts when you call `reactScanDevtoolsPlugin()`. You do not need a script tag. + +The `react-scan` toolbar stays hidden. Outlines still paint on the page. + +Do not also load `react-scan/dist/auto.global.js`. Two scanners will run at the same time. + +## Panel + +The tab shows one row per component: + +- Name +- Render count +- Time in milliseconds +- Unnecessary render count +- Last FPS + +Search by name. Sort by renders, time, or name. Filter to unnecessary renders only. + +Click a row to expand it. If `react-scan` sent prop, state, or context changes, they appear there. Current `react-scan` 0.5.x often sends an empty change list, so the row may show `No change details`. + +**Clear** empties the list. It does not stop scanning. + +## Settings + +Open **Settings** to change: + +- Enabled: turn page outlines on or off +- Log renders: write renders to the console +- Animation speed: `slow`, `fast`, or `off` + +## Options + +```tsx +reactScanDevtoolsPlugin({ + enabled: true, + log: false, + animationSpeed: 'fast', + onRender: (fiber, renders) => { + // optional + }, +}) +``` + +| Option | Default | Meaning | +| --- | --- | --- | +| `enabled` | `true` | Start scanning when the factory runs | +| `log` | `false` | Log renders to the console | +| `animationSpeed` | `'fast'` | Outline animation speed | +| `onRender` | none | Called after the plugin store updates | + +`showToolbar` is not a public option. The plugin always hides the `react-scan` toolbar. + +If you call the factory twice, `scan()` still runs once. The first `onRender` you pass is the one that stays. + +## Production + +The root import is a no-op when `process.env.NODE_ENV` is not `'development'`. It does not call `scan()`. + +If you want the real plugin in every environment, import `@tanstack/react-scan-devtools/production`. That import tells `react-scan` to run even when React is a production build. + +## Example + +See `examples/react/basic`. Click **Increment count** and open the React Scan tab. diff --git a/examples/react/basic/index.html b/examples/react/basic/index.html index b63b73f62..576594fe6 100644 --- a/examples/react/basic/index.html +++ b/examples/react/basic/index.html @@ -26,7 +26,6 @@ content="A basic example of using TanStack Devtools with React and loading up the social previews" /> - Basic Example - TanStack Devtools = { tags: ['TanStack', 'a11y'], }, + // React Scan + '@tanstack/react-scan-devtools': { + packageName: '@tanstack/react-scan-devtools', + title: 'React Scan', + description: + 'Find React render problems. Live render counts, unnecessary renders, and scan settings.', + pluginImport: { + importName: 'reactScanDevtoolsPlugin', + type: 'function', + }, + pluginId: 'react-scan', + docsUrl: 'https://tanstack.com/devtools/latest/docs/plugins/react-scan', + repoUrl: 'https://github.com/aidenybai/react-scan', + author: 'TanStack', + framework: 'react', + isNew: true, + tags: ['React', 'performance', 'renders'], + }, + // TanStack AI '@tanstack/react-ai-devtools': { packageName: '@tanstack/react-ai-devtools', diff --git a/packages/react-scan-devtools/CHANGELOG.md b/packages/react-scan-devtools/CHANGELOG.md new file mode 100644 index 000000000..caf33c519 --- /dev/null +++ b/packages/react-scan-devtools/CHANGELOG.md @@ -0,0 +1 @@ +# @tanstack/react-scan-devtools diff --git a/packages/react-scan-devtools/README.md b/packages/react-scan-devtools/README.md new file mode 100644 index 000000000..d9a9e5cb3 --- /dev/null +++ b/packages/react-scan-devtools/README.md @@ -0,0 +1,18 @@ +# @tanstack/react-scan-devtools + +React Scan plugin for TanStack Devtools. + +```bash +npm install @tanstack/react-scan-devtools react-scan +``` + +```tsx +import { TanStackDevtools } from '@tanstack/react-devtools' +import { reactScanDevtoolsPlugin } from '@tanstack/react-scan-devtools' + +; +``` + +`scan()` starts when the factory runs. The `react-scan` toolbar stays hidden. Outlines stay on the page. The TanStack tab shows live render diagnostics and settings. + +Docs: https://tanstack.com/devtools/latest/docs/plugins/react-scan diff --git a/packages/react-scan-devtools/eslint.config.js b/packages/react-scan-devtools/eslint.config.js new file mode 100644 index 000000000..e472c69e7 --- /dev/null +++ b/packages/react-scan-devtools/eslint.config.js @@ -0,0 +1,10 @@ +// @ts-check + +import rootConfig from '../../eslint.config.js' + +export default [ + ...rootConfig, + { + rules: {}, + }, +] diff --git a/packages/react-scan-devtools/package.json b/packages/react-scan-devtools/package.json new file mode 100644 index 000000000..40441d60e --- /dev/null +++ b/packages/react-scan-devtools/package.json @@ -0,0 +1,91 @@ +{ + "name": "@tanstack/react-scan-devtools", + "version": "0.0.1", + "description": "React Scan plugin for TanStack Devtools", + "author": "TanStack", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/TanStack/devtools.git", + "directory": "packages/react-scan-devtools" + }, + "homepage": "https://tanstack.com/devtools", + "bugs": { + "url": "https://github.com/TanStack/devtools/issues" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "keywords": [ + "devtools", + "react", + "react-scan", + "performance", + "renders" + ], + "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" + } + }, + "./production": { + "import": { + "types": "./dist/esm/production.d.ts", + "default": "./dist/esm/production.js" + } + }, + "./package.json": "./package.json" + }, + "sideEffects": false, + "engines": { + "node": ">=18" + }, + "files": [ + "dist", + "src" + ], + "scripts": { + "clean": "premove ./build ./dist", + "lint:fix": "eslint ./src --fix", + "test:eslint": "eslint ./src", + "test:lib": "vitest", + "test:lib:dev": "pnpm test:lib --watch", + "test:types": "tsc", + "test:build": "publint --strict", + "build": "vite build" + }, + "dependencies": { + "@tanstack/devtools-ui": "workspace:*", + "@tanstack/devtools-utils": "workspace:^", + "goober": "^2.1.16", + "react-scan": "^0.5.7", + "solid-js": "^1.9.9" + }, + "devDependencies": { + "@types/react": "^19.2.0", + "@types/react-dom": "^19.2.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "vite-plugin-solid": "^2.11.11" + }, + "peerDependencies": { + "@types/react": ">=17.0.0", + "@types/react-dom": ">=17.0.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } +} diff --git a/packages/react-scan-devtools/src/core/components/RenderList.tsx b/packages/react-scan-devtools/src/core/components/RenderList.tsx new file mode 100644 index 000000000..6516144c0 --- /dev/null +++ b/packages/react-scan-devtools/src/core/components/RenderList.tsx @@ -0,0 +1,189 @@ +/** @jsxImportSource solid-js */ + +import { + For, + Show, + createMemo, + createSignal, + onCleanup, + onMount, +} from 'solid-js' +import { Input, Select } from '@tanstack/devtools-ui' +import { getRenderSnapshot, subscribeToRenderStore } from '../store' +import { createStyles } from '../styles/styles' +import type { Change, ComponentRenderStats } from '../types' + +type SortKey = 'renders' | 'time' | 'name' +type FilterKey = 'all' | 'unnecessary' + +function formatValue(value: unknown): string { + if (typeof value === 'string') { + return value + } + try { + return JSON.stringify(value) + } catch { + return String(value) + } +} + +function changeKindLabel(change: Change): string { + switch (change.type) { + case 1: + return 'prop' + case 2: + case 3: + return 'state' + case 4: + return 'context' + default: + return String(change.type) + } +} + +function sortRows( + rows: Array, + sort: SortKey, +): Array { + const copy = [...rows] + copy.sort((left, right) => { + if (sort === 'name') { + return left.name.localeCompare(right.name) + } + if (sort === 'time') { + return right.timeMs - left.timeMs + } + return right.renders - left.renders + }) + return copy +} + +export function RenderList() { + const styles = createStyles() + const [rows, setRows] = createSignal(getRenderSnapshot()) + const [query, setQuery] = createSignal('') + const [sort, setSort] = createSignal('renders') + const [filter, setFilter] = createSignal('all') + const [selected, setSelected] = createSignal('') + + onMount(() => { + const stop = subscribeToRenderStore(setRows) + onCleanup(stop) + }) + + const visibleRows = createMemo(() => { + const needle = query().trim().toLowerCase() + const filtered = rows().filter((row) => { + if (filter() === 'unnecessary' && row.unnecessary === 0) { + return false + } + if (needle && !row.name.toLowerCase().includes(needle)) { + return false + } + return true + }) + return sortRows(filtered, sort()) + }) + + return ( + <> +
+
+ +
+ + label="Sort" + value={sort()} + options={[ + { value: 'renders', label: 'Renders' }, + { value: 'time', label: 'Time' }, + { value: 'name', label: 'Name' }, + ]} + onChange={(value: SortKey) => setSort(value)} + /> + + label="Filter" + value={filter()} + options={[ + { value: 'all', label: 'All' }, + { value: 'unnecessary', label: 'Unnecessary only' }, + ]} + onChange={(value: FilterKey) => setFilter(value)} + /> +
+
+ 0} + fallback={ +
+

+ No renders recorded yet. Interact with the app. +

+
+ } + > + + {(row) => { + const isSelected = () => selected() === row.name + return ( + + ) + }} + +
+
+ + ) +} diff --git a/packages/react-scan-devtools/src/core/components/Settings.tsx b/packages/react-scan-devtools/src/core/components/Settings.tsx new file mode 100644 index 000000000..272e2b309 --- /dev/null +++ b/packages/react-scan-devtools/src/core/components/Settings.tsx @@ -0,0 +1,64 @@ +/** @jsxImportSource solid-js */ + +import { createSignal } from 'solid-js' +import { Button, Checkbox, Select } from '@tanstack/devtools-ui' +import { getReactScanPluginOptions, updateReactScanOptions } from '../scan' +import { createStyles } from '../styles/styles' +import type { AnimationSpeed } from '../types' + +interface SettingsProps { + onClose: () => void +} + +export function SettingsOverlay(props: SettingsProps) { + const styles = createStyles() + const initial = getReactScanPluginOptions() + const [enabled, setEnabled] = createSignal(initial.enabled) + const [log, setLog] = createSignal(initial.log) + const [animationSpeed, setAnimationSpeed] = createSignal( + initial.animationSpeed, + ) + return ( +
+
+

Settings

+ +
+
+ { + setEnabled(checked) + updateReactScanOptions({ enabled: checked }) + }} + /> + { + setLog(checked) + updateReactScanOptions({ log: checked }) + }} + /> + + label="Animation speed" + value={animationSpeed()} + options={[ + { value: 'slow', label: 'Slow' }, + { value: 'fast', label: 'Fast' }, + { value: 'off', label: 'Off' }, + ]} + onChange={(value: AnimationSpeed) => { + setAnimationSpeed(value) + updateReactScanOptions({ animationSpeed: value }) + }} + /> +
+
+ ) +} diff --git a/packages/react-scan-devtools/src/core/components/Shell.tsx b/packages/react-scan-devtools/src/core/components/Shell.tsx new file mode 100644 index 000000000..449953421 --- /dev/null +++ b/packages/react-scan-devtools/src/core/components/Shell.tsx @@ -0,0 +1,70 @@ +/** @jsxImportSource solid-js */ + +import { Show, createMemo, createSignal, onCleanup, onMount } from 'solid-js' +import { Button, Header, MainPanel } from '@tanstack/devtools-ui' +import { + clearRenderStore, + getRenderSnapshot, + subscribeToRenderStore, +} from '../store' +import { createStyles } from '../styles/styles' +import { RenderList } from './RenderList' +import { SettingsOverlay } from './Settings' + +export function Shell() { + const styles = createStyles() + const [rows, setRows] = createSignal(getRenderSnapshot()) + const [showSettings, setShowSettings] = createSignal(false) + + onMount(() => { + const stop = subscribeToRenderStore(setRows) + onCleanup(stop) + }) + + const summary = createMemo(() => { + const current = rows() + const renders = current.reduce((total, row) => total + row.renders, 0) + const unnecessary = current.reduce( + (total, row) => total + row.unnecessary, + 0, + ) + return { + components: current.length, + renders, + unnecessary, + } + }) + + return ( + +
+
+

React Scan

+ + {`${summary().components} components · ${summary().renders} renders · ${summary().unnecessary} unnecessary`} + +
+
+ + +
+
+ + + setShowSettings(false)} /> + +
+ ) +} diff --git a/packages/react-scan-devtools/src/core/components/index.tsx b/packages/react-scan-devtools/src/core/components/index.tsx new file mode 100644 index 000000000..bf561db5d --- /dev/null +++ b/packages/react-scan-devtools/src/core/components/index.tsx @@ -0,0 +1,13 @@ +/** @jsxImportSource solid-js */ + +import { ThemeContextProvider } from '@tanstack/devtools-ui' +import { Shell } from './Shell' +import type { TanStackDevtoolsTheme } from '@tanstack/devtools-ui' + +export default function Devtools(props: { theme: TanStackDevtoolsTheme }) { + return ( + + + + ) +} diff --git a/packages/react-scan-devtools/src/core/index.ts b/packages/react-scan-devtools/src/core/index.ts new file mode 100644 index 000000000..beaee4377 --- /dev/null +++ b/packages/react-scan-devtools/src/core/index.ts @@ -0,0 +1,7 @@ +/** @jsxImportSource solid-js */ + +import { constructCoreClass } from '@tanstack/devtools-utils/solid' + +const [ReactScanDevtoolsCore] = constructCoreClass(() => import('./components')) + +export { ReactScanDevtoolsCore } diff --git a/packages/react-scan-devtools/src/core/scan.ts b/packages/react-scan-devtools/src/core/scan.ts new file mode 100644 index 000000000..df9bcf616 --- /dev/null +++ b/packages/react-scan-devtools/src/core/scan.ts @@ -0,0 +1,102 @@ +import { scan, setOptions } from 'react-scan' +import { applyRenders } from './store' +import { DEFAULT_PLUGIN_SETTINGS } from './types' +import type { Options } from 'react-scan' +import type { ReactScanDevtoolsOptions, ReactScanPluginSettings } from './types' + +const REACT_SCAN_OPTIONS_KEY = 'react-scan-options' + +let started = false +let userOnRender: Options['onRender'] +let currentSettings: ReactScanPluginSettings = { ...DEFAULT_PLUGIN_SETTINGS } + +interface ReactScanRuntimeOptions { + forceRunInProduction?: boolean +} + +function composedOnRender( + fiber: Parameters>[0], + renders: Parameters>[1], +) { + applyRenders(renders) + userOnRender?.(fiber, renders) +} + +function persistReactScanOptions(settings: ReactScanPluginSettings) { + if (typeof localStorage === 'undefined') { + return + } + try { + let existing: Record = {} + const raw = localStorage.getItem(REACT_SCAN_OPTIONS_KEY) + if (raw) { + const parsed: unknown = JSON.parse(raw) + if (parsed && typeof parsed === 'object') { + existing = parsed as Record + } + } + localStorage.setItem( + REACT_SCAN_OPTIONS_KEY, + JSON.stringify({ + ...existing, + enabled: settings.enabled, + log: settings.log, + animationSpeed: settings.animationSpeed, + showToolbar: false, + }), + ) + } catch { + // Private mode and quota errors must not stop the plugin. + } +} + +export function getReactScanPluginOptions(): ReactScanPluginSettings { + return { ...currentSettings } +} + +export function startReactScan( + options: ReactScanDevtoolsOptions = {}, + runtime: ReactScanRuntimeOptions = {}, +) { + if (started) { + return + } + started = true + userOnRender = options.onRender + currentSettings = { + enabled: options.enabled ?? DEFAULT_PLUGIN_SETTINGS.enabled, + log: options.log ?? DEFAULT_PLUGIN_SETTINGS.log, + animationSpeed: + options.animationSpeed ?? DEFAULT_PLUGIN_SETTINGS.animationSpeed, + } + persistReactScanOptions(currentSettings) + // react-scan skips start() when enabled is false and the toolbar is hidden. + // Always start, then pause if the user asked for enabled: false. + scan({ + enabled: true, + log: currentSettings.log, + animationSpeed: currentSettings.animationSpeed, + showToolbar: false, + onRender: composedOnRender, + ...(runtime.forceRunInProduction + ? { dangerouslyForceRunInProduction: true } + : {}), + }) + if (!currentSettings.enabled) { + setOptions({ enabled: false, showToolbar: false }) + } +} + +export function updateReactScanOptions( + options: Omit, +) { + currentSettings = { + ...currentSettings, + ...options, + } + persistReactScanOptions(currentSettings) + setOptions({ + ...options, + showToolbar: false, + }) +} diff --git a/packages/react-scan-devtools/src/core/store.ts b/packages/react-scan-devtools/src/core/store.ts new file mode 100644 index 000000000..638cb01a4 --- /dev/null +++ b/packages/react-scan-devtools/src/core/store.ts @@ -0,0 +1,68 @@ +import { MAX_RENDERS_PER_COMPONENT, UNKNOWN_COMPONENT_NAME } from './types' +import type { Change, ComponentRenderStats, Render } from './types' + +const statsByName = new Map() +const listeners = new Set<(rows: Array) => void>() + +function snapshot(): Array { + return Array.from(statsByName.values()).map((row) => ({ + ...row, + lastChanges: [...row.lastChanges], + lastRenders: [...row.lastRenders], + })) +} + +function emit() { + const rows = snapshot() + for (const listener of listeners) { + listener(rows) + } +} + +export function getRenderSnapshot(): Array { + return snapshot() +} + +export function subscribeToRenderStore( + listener: (rows: Array) => void, +): () => void { + listeners.add(listener) + return () => { + listeners.delete(listener) + } +} + +export function clearRenderStore() { + statsByName.clear() + emit() +} + +export function applyRenders(renders: Array) { + for (const item of renders) { + const name = item.componentName ?? UNKNOWN_COMPONENT_NAME + const current = statsByName.get(name) ?? { + name, + renders: 0, + timeMs: 0, + unnecessary: 0, + lastFps: null, + lastChanges: [] as Array, + lastRenders: [] as Array, + } + + const lastRenders = [...current.lastRenders, item].slice( + -MAX_RENDERS_PER_COMPONENT, + ) + + statsByName.set(name, { + name, + renders: current.renders + item.count, + timeMs: current.timeMs + (item.time ?? 0), + unnecessary: current.unnecessary + (item.unnecessary === true ? 1 : 0), + lastFps: item.fps, + lastChanges: item.changes, + lastRenders, + }) + } + emit() +} diff --git a/packages/react-scan-devtools/src/core/styles/styles.ts b/packages/react-scan-devtools/src/core/styles/styles.ts new file mode 100644 index 000000000..a3317905a --- /dev/null +++ b/packages/react-scan-devtools/src/core/styles/styles.ts @@ -0,0 +1,201 @@ +import * as goober from 'goober' +import { createTheme } from '@tanstack/devtools-ui' +import { createMemo } from 'solid-js' +import { resolveSemanticTheme } from '@tanstack/devtools-ui/internal' + +const css = goober.css + +function createReactScanPanelStyles(themeName: 'light' | 'dark') { + const theme = resolveSemanticTheme(themeName) + const { color, font, gap, radius, shadow, space, type } = theme + + return { + root: css` + height: 100%; + display: flex; + flex-direction: column; + overflow: hidden; + position: relative; + background: ${color.surface.workspace}; + color: ${color.text.primary}; + font-family: ${font.body}; + font-weight: 300; + `, + header: css` + padding: ${space[3]} ${space[4]}; + border-bottom: 1px solid ${color.border.decorative}; + display: flex; + justify-content: space-between; + align-items: center; + gap: ${gap.section}; + flex-shrink: 0; + background: ${color.surface.brand}; + `, + headerTitleRow: css` + display: flex; + align-items: center; + gap: ${gap.control}; + min-width: 0; + flex-wrap: wrap; + `, + headerTitle: css` + margin: 0; + font-family: ${font.display}; + font-size: ${type.headingPane.size}; + line-height: ${type.headingPane.lineHeight}; + font-weight: ${type.headingPane.weight}; + `, + headerSub: css` + font-size: ${type.bodyXs.size}; + line-height: ${type.bodyXs.lineHeight}; + color: ${color.text.mutedOnBrand}; + white-space: nowrap; + `, + headerActions: css` + display: flex; + gap: ${gap.control}; + align-items: center; + flex-wrap: wrap; + justify-content: flex-end; + `, + toolbar: css` + display: flex; + gap: ${gap.control}; + align-items: flex-end; + flex-wrap: wrap; + padding: ${space[3]} ${space[4]} 0; + flex-shrink: 0; + `, + toolbarField: css` + flex: 1; + min-width: 160px; + `, + content: css` + flex: 1; + overflow-y: auto; + padding: ${space[4]}; + background: ${color.surface.workspace}; + `, + emptyState: css` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + text-align: center; + color: ${color.text.muted}; + `, + emptyPrimary: css` + font-size: ${type.bodySm.size}; + line-height: ${type.bodySm.lineHeight}; + margin: 0; + color: ${color.text.primary}; + `, + row: css` + padding: ${space[3]}; + margin-bottom: ${space[2]}; + border: 1px solid ${color.border.decorative}; + border-radius: ${radius.group}; + cursor: pointer; + background: ${color.surface.elevated}; + box-shadow: ${shadow.xs}; + width: 100%; + text-align: left; + color: inherit; + font: inherit; + &:hover { + background: ${color.state.hover}; + } + &:focus-visible { + outline: 2px solid ${color.border.focus}; + outline-offset: 2px; + } + `, + rowSelected: css` + background: ${color.state.selectionFill}; + color: ${color.state.selectionText}; + border-color: ${color.border.focus}; + `, + rowMain: css` + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: ${gap.section}; + `, + rowName: css` + font-weight: 600; + font-size: ${type.bodySm.size}; + line-height: ${type.bodySm.lineHeight}; + word-break: break-word; + `, + rowMeta: css` + display: flex; + flex-wrap: wrap; + gap: ${gap.tight}; + font-size: ${type.bodyXs.size}; + line-height: ${type.bodyXs.lineHeight}; + color: ${color.text.muted}; + justify-content: flex-end; + `, + details: css` + margin-top: ${space[3]}; + padding-top: ${space[3]}; + border-top: 1px solid ${color.border.decorative}; + display: grid; + gap: ${space[1]}; + font-size: ${type.bodyXs.size}; + line-height: ${type.bodyXs.lineHeight}; + `, + detailsEmpty: css` + color: ${color.text.muted}; + margin: 0; + `, + changeRow: css` + display: grid; + gap: 2px; + `, + changeKind: css` + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + font-size: ${type.labelSm.size}; + `, + settingsOverlay: css` + position: absolute; + inset: 0; + background: ${color.surface.workspace}; + display: flex; + flex-direction: column; + z-index: 10; + `, + settingsHeader: css` + padding: ${space[3]} ${space[4]}; + border-bottom: 1px solid ${color.border.decorative}; + display: flex; + justify-content: space-between; + align-items: center; + flex-shrink: 0; + background: ${color.surface.brand}; + `, + settingsTitle: css` + margin: 0; + font-family: ${font.display}; + font-size: ${type.headingPane.size}; + line-height: ${type.headingPane.lineHeight}; + font-weight: 700; + `, + settingsContent: css` + flex: 1; + overflow-y: auto; + padding: ${space[4]}; + display: grid; + gap: ${gap.section}; + align-content: start; + `, + } +} + +export function createStyles() { + const { theme } = createTheme() + return createMemo(() => createReactScanPanelStyles(theme())) +} diff --git a/packages/react-scan-devtools/src/core/types.ts b/packages/react-scan-devtools/src/core/types.ts new file mode 100644 index 000000000..1ec6e1454 --- /dev/null +++ b/packages/react-scan-devtools/src/core/types.ts @@ -0,0 +1,40 @@ +import type { Change, Options } from 'react-scan' + +export type { Change, Options } + +type OnRender = NonNullable +export type Render = Parameters[1][number] + +export type AnimationSpeed = NonNullable + +export interface ReactScanDevtoolsOptions { + enabled?: boolean + log?: boolean + animationSpeed?: AnimationSpeed + onRender?: Options['onRender'] +} + +export interface ReactScanPluginSettings { + enabled: boolean + log: boolean + animationSpeed: AnimationSpeed +} + +export interface ComponentRenderStats { + name: string + renders: number + timeMs: number + unnecessary: number + lastFps: number | null + lastChanges: Array + lastRenders: Array +} + +export const UNKNOWN_COMPONENT_NAME = '(unknown)' +export const MAX_RENDERS_PER_COMPONENT = 50 + +export const DEFAULT_PLUGIN_SETTINGS: ReactScanPluginSettings = { + enabled: true, + log: false, + animationSpeed: 'fast', +} diff --git a/packages/react-scan-devtools/src/index.ts b/packages/react-scan-devtools/src/index.ts new file mode 100644 index 000000000..cdb0c6c5b --- /dev/null +++ b/packages/react-scan-devtools/src/index.ts @@ -0,0 +1,16 @@ +'use client' + +import * as Devtools from './panel' +import * as plugin from './plugin' + +export const ReactScanDevtoolsPanel = + process.env.NODE_ENV !== 'development' + ? Devtools.ReactScanDevtoolsPanelNoOp + : Devtools.ReactScanDevtoolsPanel + +export const reactScanDevtoolsPlugin = + process.env.NODE_ENV !== 'development' + ? plugin.reactScanDevtoolsNoOpPlugin + : plugin.reactScanDevtoolsPlugin + +export type { ReactScanDevtoolsOptions } from './core/types' diff --git a/packages/react-scan-devtools/src/panel.ts b/packages/react-scan-devtools/src/panel.ts new file mode 100644 index 000000000..24b7fb80e --- /dev/null +++ b/packages/react-scan-devtools/src/panel.ts @@ -0,0 +1,8 @@ +import { createReactPanel } from '@tanstack/devtools-utils/react' +import { ReactScanDevtoolsCore } from './core' + +const [ReactScanDevtoolsPanel, ReactScanDevtoolsPanelNoOp] = createReactPanel( + ReactScanDevtoolsCore, +) + +export { ReactScanDevtoolsPanel, ReactScanDevtoolsPanelNoOp } diff --git a/packages/react-scan-devtools/src/plugin.ts b/packages/react-scan-devtools/src/plugin.ts new file mode 100644 index 000000000..1c8a906c2 --- /dev/null +++ b/packages/react-scan-devtools/src/plugin.ts @@ -0,0 +1,21 @@ +import { createReactPlugin } from '@tanstack/devtools-utils/react' +import { startReactScan } from './core/scan' +import { ReactScanDevtoolsPanel } from './panel' +import type { ReactScanDevtoolsOptions } from './core/types' + +const [createPlugin, createNoOpPlugin] = createReactPlugin({ + name: 'React Scan', + id: 'react-scan', + Component: ReactScanDevtoolsPanel, +}) + +export function reactScanDevtoolsPlugin(options?: ReactScanDevtoolsOptions) { + startReactScan(options) + return createPlugin() +} + +export function reactScanDevtoolsNoOpPlugin( + _options?: ReactScanDevtoolsOptions, +) { + return createNoOpPlugin() +} diff --git a/packages/react-scan-devtools/src/production.ts b/packages/react-scan-devtools/src/production.ts new file mode 100644 index 000000000..36afb2d78 --- /dev/null +++ b/packages/react-scan-devtools/src/production.ts @@ -0,0 +1,5 @@ +'use client' + +export { ReactScanDevtoolsPanel } from './production/panel' +export { reactScanDevtoolsPlugin } from './production/plugin' +export type { ReactScanDevtoolsOptions } from './core/types' diff --git a/packages/react-scan-devtools/src/production/panel.ts b/packages/react-scan-devtools/src/production/panel.ts new file mode 100644 index 000000000..e87f6558c --- /dev/null +++ b/packages/react-scan-devtools/src/production/panel.ts @@ -0,0 +1,6 @@ +import { createReactPanel } from '@tanstack/devtools-utils/react' +import { ReactScanDevtoolsCore } from '../core' + +const [ReactScanDevtoolsPanel] = createReactPanel(ReactScanDevtoolsCore) + +export { ReactScanDevtoolsPanel } diff --git a/packages/react-scan-devtools/src/production/plugin.ts b/packages/react-scan-devtools/src/production/plugin.ts new file mode 100644 index 000000000..b2f2cb67a --- /dev/null +++ b/packages/react-scan-devtools/src/production/plugin.ts @@ -0,0 +1,15 @@ +import { createReactPlugin } from '@tanstack/devtools-utils/react' +import { startReactScan } from '../core/scan' +import { ReactScanDevtoolsPanel } from './panel' +import type { ReactScanDevtoolsOptions } from '../core/types' + +const [createPlugin] = createReactPlugin({ + name: 'React Scan', + id: 'react-scan', + Component: ReactScanDevtoolsPanel, +}) + +export function reactScanDevtoolsPlugin(options?: ReactScanDevtoolsOptions) { + startReactScan(options, { forceRunInProduction: true }) + return createPlugin() +} diff --git a/packages/react-scan-devtools/tests/plugin.test.ts b/packages/react-scan-devtools/tests/plugin.test.ts new file mode 100644 index 000000000..19a1bf41a --- /dev/null +++ b/packages/react-scan-devtools/tests/plugin.test.ts @@ -0,0 +1,67 @@ +import { afterEach, expect, it, vi } from 'vitest' + +const scan = vi.fn() + +vi.mock('react-scan', () => ({ + scan: (...args: Array) => scan(...args), + setOptions: vi.fn(), +})) + +vi.mock('@tanstack/devtools-utils/react', () => ({ + createReactPanel: () => [() => null, () => null], + createReactPlugin: ({ name, id }: { name: string; id?: string }) => [ + () => ({ + name, + id, + render: () => ({ type: Symbol.for('development') }), + }), + () => ({ + name, + id, + render: () => ({ type: Symbol.for('react.fragment') }), + }), + ], +})) + +afterEach(() => { + vi.unstubAllEnvs() + vi.resetModules() + scan.mockReset() +}) + +it('returns React Scan metadata and starts scan in development', async () => { + vi.stubEnv('NODE_ENV', 'development') + vi.resetModules() + const { reactScanDevtoolsPlugin } = await import('../src/index') + const definition = reactScanDevtoolsPlugin() + expect(definition.name).toBe('React Scan') + expect(definition.id).toBe('react-scan') + expect(scan).toHaveBeenCalledTimes(1) + expect(scan).toHaveBeenCalledWith( + expect.objectContaining({ showToolbar: false }), + ) +}) + +it('does not start scan twice when the factory is called twice', async () => { + vi.stubEnv('NODE_ENV', 'development') + vi.resetModules() + const { reactScanDevtoolsPlugin } = await import('../src/index') + reactScanDevtoolsPlugin() + reactScanDevtoolsPlugin() + expect(scan).toHaveBeenCalledTimes(1) +}) + +it('keeps the React Scan plugin a no-op in production', async () => { + vi.stubEnv('NODE_ENV', 'production') + vi.resetModules() + const { reactScanDevtoolsPlugin } = await import('../src/index') + const definition = reactScanDevtoolsPlugin() + expect(definition.name).toBe('React Scan') + expect(definition.id).toBe('react-scan') + const rendered = definition.render(document.createElement('div'), { + theme: 'dark', + devtoolsOpen: true, + }) + expect(rendered).toMatchObject({ type: Symbol.for('react.fragment') }) + expect(scan).not.toHaveBeenCalled() +}) diff --git a/packages/react-scan-devtools/tests/scan.test.ts b/packages/react-scan-devtools/tests/scan.test.ts new file mode 100644 index 000000000..0571c47d7 --- /dev/null +++ b/packages/react-scan-devtools/tests/scan.test.ts @@ -0,0 +1,170 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + +const scan = vi.fn() +const setOptions = vi.fn() + +vi.mock('react-scan', () => ({ + scan: (...args: Array) => scan(...args), + setOptions: (...args: Array) => setOptions(...args), +})) + +beforeEach(() => { + vi.resetModules() + scan.mockReset() + setOptions.mockReset() + localStorage.clear() +}) + +afterEach(() => { + vi.resetModules() +}) + +describe('startReactScan', () => { + it('calls scan once with showToolbar false', async () => { + const { startReactScan } = await import('../src/core/scan') + startReactScan({ enabled: true, log: true }) + expect(scan).toHaveBeenCalledTimes(1) + expect(scan).toHaveBeenCalledWith( + expect.objectContaining({ + enabled: true, + log: true, + showToolbar: false, + onRender: expect.any(Function), + }), + ) + expect(scan.mock.calls[0]?.[0]).not.toHaveProperty( + 'dangerouslyForceRunInProduction', + ) + }) + + it('still starts scan when the factory asks for enabled false', async () => { + const { startReactScan } = await import('../src/core/scan') + startReactScan({ enabled: false }) + expect(scan).toHaveBeenCalledWith( + expect.objectContaining({ + enabled: true, + showToolbar: false, + }), + ) + expect(setOptions).toHaveBeenCalledWith({ + enabled: false, + showToolbar: false, + }) + }) + + it('writes react-scan-options so storage cannot override the factory', async () => { + localStorage.setItem( + 'react-scan-options', + JSON.stringify({ enabled: false, showToolbar: true }), + ) + const { startReactScan } = await import('../src/core/scan') + startReactScan({ enabled: true }) + expect( + JSON.parse(localStorage.getItem('react-scan-options') || '{}'), + ).toEqual( + expect.objectContaining({ + enabled: true, + showToolbar: false, + }), + ) + }) + + it('passes forceRunInProduction only when asked', async () => { + const { startReactScan } = await import('../src/core/scan') + startReactScan({}, { forceRunInProduction: true }) + expect(scan).toHaveBeenCalledWith( + expect.objectContaining({ + dangerouslyForceRunInProduction: true, + showToolbar: false, + }), + ) + }) + + it('does not call scan a second time', async () => { + const { startReactScan } = await import('../src/core/scan') + startReactScan() + startReactScan({ log: true }) + expect(scan).toHaveBeenCalledTimes(1) + }) + + it('calls the user onRender after the store update', async () => { + const userOnRender = vi.fn() + const { startReactScan } = await import('../src/core/scan') + const { clearRenderStore, getRenderSnapshot } = + await import('../src/core/store') + clearRenderStore() + startReactScan({ onRender: userOnRender }) + const onRender = scan.mock.calls[0]?.[0]?.onRender as ( + fiber: unknown, + renders: Array<{ + componentName: string + time: number + count: number + forget: boolean + changes: Array + unnecessary: boolean + didCommit: boolean + fps: number + phase: number + }>, + ) => void + const renders = [ + { + phase: 2, + componentName: 'Box', + time: 1, + count: 1, + forget: false, + changes: [], + unnecessary: false, + didCommit: true, + fps: 60, + }, + ] + onRender({}, renders) + expect(getRenderSnapshot()[0]?.name).toBe('Box') + expect(userOnRender).toHaveBeenCalledWith({}, renders) + }) + + it('keeps the first user onRender on a later start call', async () => { + const first = vi.fn() + const second = vi.fn() + const { startReactScan } = await import('../src/core/scan') + startReactScan({ onRender: first }) + startReactScan({ onRender: second }) + const onRender = scan.mock.calls[0]?.[0]?.onRender as ( + fiber: unknown, + renders: Array, + ) => void + onRender({}, []) + expect(first).toHaveBeenCalledTimes(1) + expect(second).not.toHaveBeenCalled() + }) + + it('forces showToolbar false on setOptions', async () => { + const { startReactScan, updateReactScanOptions } = + await import('../src/core/scan') + startReactScan() + updateReactScanOptions({ enabled: false }) + expect(setOptions).toHaveBeenCalledWith({ + enabled: false, + showToolbar: false, + }) + }) + + it('exposes the last applied settings', async () => { + const { + startReactScan, + getReactScanPluginOptions, + updateReactScanOptions, + } = await import('../src/core/scan') + startReactScan({ enabled: false, log: true }) + expect(getReactScanPluginOptions()).toEqual({ + enabled: false, + log: true, + animationSpeed: 'fast', + }) + updateReactScanOptions({ animationSpeed: 'off' }) + expect(getReactScanPluginOptions().animationSpeed).toBe('off') + }) +}) diff --git a/packages/react-scan-devtools/tests/store.test.ts b/packages/react-scan-devtools/tests/store.test.ts new file mode 100644 index 000000000..a18b0b097 --- /dev/null +++ b/packages/react-scan-devtools/tests/store.test.ts @@ -0,0 +1,122 @@ +import { describe, expect, it } from 'vitest' +import { + applyRenders, + clearRenderStore, + getRenderSnapshot, + subscribeToRenderStore, +} from '../src/core/store' +import { + MAX_RENDERS_PER_COMPONENT, + UNKNOWN_COMPONENT_NAME, +} from '../src/core/types' +import type { Render } from '../src/core/types' + +function render( + partial: Partial & Pick, +): Render { + return { + phase: 2, + time: 1, + count: 1, + forget: false, + changes: [], + unnecessary: false, + didCommit: true, + fps: 60, + ...partial, + } +} + +describe('render store', () => { + it('aggregates count, time, unnecessary, and last fps by name', () => { + clearRenderStore() + applyRenders([ + render({ + componentName: 'Counter', + count: 2, + time: 3, + unnecessary: true, + fps: 55, + }), + render({ + componentName: 'Counter', + count: 1, + time: 4, + unnecessary: false, + fps: 50, + changes: [ + { + type: 1, + name: 'value', + value: 2, + prevValue: 1, + }, + ], + }), + ]) + + expect(getRenderSnapshot()).toEqual([ + { + name: 'Counter', + renders: 3, + timeMs: 7, + unnecessary: 1, + lastFps: 50, + lastChanges: [ + { + type: 1, + name: 'value', + value: 2, + prevValue: 1, + }, + ], + lastRenders: expect.any(Array), + }, + ]) + expect(getRenderSnapshot()[0]?.lastRenders).toHaveLength(2) + }) + + it('uses (unknown) when componentName is null', () => { + clearRenderStore() + applyRenders([render({ componentName: null })]) + expect(getRenderSnapshot()[0]?.name).toBe(UNKNOWN_COMPONENT_NAME) + }) + + it('does not add null time to timeMs', () => { + clearRenderStore() + applyRenders([render({ componentName: 'A', time: null, count: 1 })]) + expect(getRenderSnapshot()[0]?.timeMs).toBe(0) + }) + + it('clears the snapshot', () => { + clearRenderStore() + applyRenders([render({ componentName: 'A' })]) + clearRenderStore() + expect(getRenderSnapshot()).toEqual([]) + }) + + it('keeps at most 50 last renders per name', () => { + clearRenderStore() + applyRenders( + Array.from({ length: MAX_RENDERS_PER_COMPONENT + 5 }, () => + render({ componentName: 'Busy', count: 1 }), + ), + ) + expect(getRenderSnapshot()[0]?.lastRenders).toHaveLength( + MAX_RENDERS_PER_COMPONENT, + ) + expect(getRenderSnapshot()[0]?.renders).toBe(MAX_RENDERS_PER_COMPONENT + 5) + }) + + it('notifies subscribers and unsubscribes', () => { + clearRenderStore() + const calls: Array = [] + const stop = subscribeToRenderStore((rows) => { + calls.push(rows.length) + }) + applyRenders([render({ componentName: 'A' })]) + stop() + applyRenders([render({ componentName: 'B' })]) + expect(calls).toEqual([1]) + }) +}) diff --git a/packages/react-scan-devtools/tests/test-setup.ts b/packages/react-scan-devtools/tests/test-setup.ts new file mode 100644 index 000000000..a9d0dd31a --- /dev/null +++ b/packages/react-scan-devtools/tests/test-setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom/vitest' diff --git a/packages/react-scan-devtools/tsconfig.json b/packages/react-scan-devtools/tsconfig.json new file mode 100644 index 000000000..bf61a1a91 --- /dev/null +++ b/packages/react-scan-devtools/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "jsx": "preserve", + "jsxImportSource": "solid-js" + }, + "include": ["src", "tests", "eslint.config.js", "vite.config.ts"] +} diff --git a/packages/react-scan-devtools/vite.config.ts b/packages/react-scan-devtools/vite.config.ts new file mode 100644 index 000000000..f0163145f --- /dev/null +++ b/packages/react-scan-devtools/vite.config.ts @@ -0,0 +1,41 @@ +import { defineConfig, mergeConfig } from 'vitest/config' +import { fileURLToPath } from 'node:url' +import { tanstackViteConfig } from '@tanstack/vite-config' +import solid from 'vite-plugin-solid' +import packageJson from './package.json' +import type { Plugin } from 'vite' + +const config = defineConfig({ + plugins: [ + solid({ + ssr: process.env.VITEST !== 'true', + }) as any satisfies Plugin, + ], + test: { + name: packageJson.name, + dir: './', + watch: false, + environment: 'jsdom', + setupFiles: ['./tests/test-setup.ts'], + globals: true, + alias: { + '@tanstack/devtools-utils/react': fileURLToPath( + new URL('../devtools-utils/src/react/index.ts', import.meta.url), + ), + '@tanstack/devtools-utils/solid': fileURLToPath( + new URL('../devtools-utils/src/solid/index.ts', import.meta.url), + ), + }, + }, +}) + +export default mergeConfig( + config, + tanstackViteConfig({ + entry: ['./src/index.ts', './src/production.ts'], + srcDir: './src', + tsconfigPath: './tsconfig.json', + outDir: './dist', + cjs: false, + }), +) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1777116b0..3062c5b36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,7 +31,7 @@ importers: version: 0.3.3(typescript@5.9.3) '@tanstack/vite-config': specifier: 0.4.3 - version: 0.4.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(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: 0.4.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(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.9.0)) '@testing-library/jest-dom': specifier: ^6.8.0 version: 6.9.1 @@ -49,7 +49,7 @@ importers: version: 27.4.0 knip: specifier: ^5.64.0 - version: 5.88.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.15)(typescript@5.9.3) + version: 5.88.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@22.19.15)(typescript@5.9.3) markdown-link-extractor: specifier: ^4.0.2 version: 4.0.3 @@ -64,7 +64,7 @@ importers: version: 3.8.3 prettier-plugin-svelte: specifier: ^3.4.1 - version: 3.5.1(prettier@3.8.3)(svelte@5.55.1(@typescript-eslint/types@8.58.0)) + version: 3.5.1(prettier@3.8.3)(svelte@5.55.1(@typescript-eslint/types@8.67.0)) publint: specifier: ^0.3.13 version: 0.3.20 @@ -82,10 +82,10 @@ importers: version: 5.9.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) + 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.9.0) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) e2e/apps/angular: dependencies: @@ -119,7 +119,7 @@ importers: devDependencies: '@angular/build': specifier: ^21.2.0 - version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.0 version: 21.2.10(@types/node@22.19.15)(chokidar@5.0.0) @@ -153,7 +153,7 @@ importers: 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@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.9.0)) '@tanstack/devtools-vite': specifier: workspace:* version: link:../../../packages/devtools-vite @@ -162,7 +162,7 @@ importers: version: 5.9.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) + 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.9.0) e2e/apps/react-cloudflare: dependencies: @@ -180,10 +180,10 @@ importers: version: 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/router-plugin': specifier: ^1.132.0 - version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0)) react: specifier: ^19.2.0 version: 19.2.6 @@ -192,11 +192,11 @@ importers: version: 19.2.6(react@19.2.6) vite-tsconfig-paths: specifier: ^6.0.2 - version: 6.1.1(typescript@5.9.3)(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: 6.1.1(typescript@5.9.3)(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.9.0)) devDependencies: '@cloudflare/vite-plugin': specifier: ^1.13.8 - version: 1.36.3(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))(workerd@1.20260507.1)(wrangler@4.90.0) + version: 1.36.3(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.9.0))(workerd@1.20260507.1)(wrangler@4.90.0) '@playwright/test': specifier: ^1.49.0 version: 1.61.0 @@ -214,13 +214,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) typescript: specifier: ~5.9.2 version: 5.9.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) + 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.9.0) wrangler: specifier: ^4.40.3 version: 4.90.0 @@ -241,13 +241,13 @@ importers: version: 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/router-plugin': specifier: ^1.132.0 - version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0)) nitro: specifier: latest - version: 3.0.260610-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(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))(wrangler@4.90.0) + version: 3.0.260610-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(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.9.0))(wrangler@4.90.0) react: specifier: ^19.2.0 version: 19.2.6 @@ -256,7 +256,7 @@ importers: version: 19.2.6(react@19.2.6) vite-tsconfig-paths: specifier: ^6.0.2 - version: 6.1.1(typescript@5.9.3)(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: 6.1.1(typescript@5.9.3)(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.9.0)) devDependencies: '@playwright/test': specifier: ^1.49.0 @@ -275,13 +275,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) typescript: specifier: ~5.9.2 version: 5.9.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) + 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.9.0) e2e/apps/react-start: dependencies: @@ -299,13 +299,13 @@ importers: version: 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/router-plugin': specifier: ^1.132.0 - version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0)) nitro: specifier: latest - version: 3.0.260610-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(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))(wrangler@4.90.0) + version: 3.0.260610-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(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.9.0))(wrangler@4.90.0) react: specifier: ^19.2.0 version: 19.2.6 @@ -314,7 +314,7 @@ importers: version: 19.2.6(react@19.2.6) vite-tsconfig-paths: specifier: ^6.0.2 - version: 6.1.1(typescript@5.9.3)(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: 6.1.1(typescript@5.9.3)(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.9.0)) devDependencies: '@playwright/test': specifier: ^1.49.0 @@ -333,13 +333,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) typescript: specifier: ~5.9.2 version: 5.9.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) + 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.9.0) e2e/apps/react-vite: dependencies: @@ -370,13 +370,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) typescript: specifier: ~5.9.2 version: 5.9.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) + 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.9.0) e2e/apps/solid: dependencies: @@ -401,10 +401,10 @@ importers: version: 5.9.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) + 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.9.0) 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)) + 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.9.0)) e2e/apps/vue: dependencies: @@ -423,13 +423,13 @@ importers: version: 1.61.0 '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.6(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))(vue@3.5.34(typescript@5.9.3)) + version: 6.0.6(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.9.0))(vue@3.5.34(typescript@5.9.3)) typescript: specifier: ~5.9.2 version: 5.9.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) + 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.9.0) e2e/helpers: dependencies: @@ -488,7 +488,7 @@ importers: devDependencies: '@angular/build': specifier: ^21.2.0 - version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.0 version: 21.2.10(@types/node@22.19.15)(chokidar@5.0.0) @@ -537,7 +537,7 @@ importers: devDependencies: '@angular/build': specifier: ^21.2.0 - version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.0 version: 21.2.10(@types/node@22.19.15)(chokidar@5.0.0) @@ -592,7 +592,7 @@ importers: devDependencies: '@angular/build': specifier: ^21.2.0 - version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.0 version: 21.2.10(@types/node@22.19.15)(chokidar@5.0.0) @@ -646,7 +646,7 @@ importers: devDependencies: '@angular/build': specifier: ^21.2.0 - version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + version: 21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) '@angular/cli': specifier: ^21.2.0 version: 21.2.10(@types/node@22.19.15)(chokidar@5.0.0) @@ -680,7 +680,7 @@ 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@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.9.0)) '@tanstack/devtools-ui': specifier: 0.7.0 version: link:../../../packages/devtools-ui @@ -692,10 +692,10 @@ importers: version: 0.9.0 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) + 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.9.0) vite-plugin-inspect: specifier: 11.3.3 - version: 11.3.3(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: 11.3.3(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.9.0)) examples/preact/custom-devtools: dependencies: @@ -711,10 +711,10 @@ 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@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.9.0)) 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) + 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.9.0) examples/react-rspack: dependencies: @@ -776,10 +776,10 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) 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) + 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.9.0) examples/react/basic: dependencies: @@ -810,6 +810,9 @@ importers: '@tanstack/react-router-devtools': specifier: ^1.132.0 version: 1.166.13(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@tanstack/router-core@1.169.2)(csstype@3.2.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@tanstack/react-scan-devtools': + specifier: workspace:* + version: link:../../../packages/react-scan-devtools react: specifier: ^19.2.0 version: 19.2.6 @@ -837,49 +840,49 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) sonda: specifier: 0.9.0 version: 0.9.0 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) + 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.9.0) vite-plugin-inspect: specifier: 11.3.3 - version: 11.3.3(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: 11.3.3(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.9.0)) examples/react/bundling-repro: dependencies: '@cloudflare/vite-plugin': specifier: ^1.13.8 - version: 1.36.3(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))(workerd@1.20260507.1)(wrangler@4.90.0) + version: 1.36.3(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.9.0))(workerd@1.20260507.1)(wrangler@4.90.0) '@tailwindcss/vite': specifier: ^4.0.6 - version: 4.3.0(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: 4.3.0(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.9.0)) '@tanstack/ai': specifier: latest - version: 0.16.0 + version: 0.16.0(@opentelemetry/api@1.9.1) '@tanstack/ai-anthropic': specifier: latest - version: 0.8.6(@tanstack/ai@0.16.0)(zod@4.4.3) + version: 0.8.6(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))(zod@4.4.3) '@tanstack/ai-client': specifier: latest - version: 0.9.1 + version: 0.9.1(@opentelemetry/api@1.9.1) '@tanstack/ai-gemini': specifier: latest - version: 0.10.3(@modelcontextprotocol/sdk@1.26.0(zod@4.4.3))(@tanstack/ai@0.16.0) + version: 0.10.3(@modelcontextprotocol/sdk@1.26.0(zod@4.4.3))(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1)) '@tanstack/ai-ollama': specifier: latest - version: 0.6.13(@tanstack/ai@0.16.0) + version: 0.6.13(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1)) '@tanstack/ai-openai': specifier: latest - version: 0.8.5(@tanstack/ai-client@0.9.1)(@tanstack/ai@0.16.0)(ws@8.20.0)(zod@4.4.3) + version: 0.8.5(@tanstack/ai-client@0.9.1(@opentelemetry/api@1.9.1))(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))(ws@8.20.0)(zod@4.4.3) '@tanstack/ai-react': specifier: latest - version: 0.8.2(@tanstack/ai@0.16.0)(@types/react@19.2.14)(react@19.2.6) + version: 0.8.2(@opentelemetry/api@1.9.1)(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))(@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(@opentelemetry/api@1.9.1)(@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-devtools': specifier: latest version: link:../../../packages/react-devtools @@ -900,13 +903,13 @@ importers: version: 1.166.12(@tanstack/query-core@5.100.9)(@tanstack/react-query@5.100.9(react@19.2.6))(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@tanstack/router-core@1.169.2)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/react-store': specifier: ^0.9.0 version: 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/router-plugin': specifier: ^1.132.0 - version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/store': specifier: ^0.9.0 version: 0.9.3 @@ -942,7 +945,7 @@ importers: version: 1.4.0 vite-tsconfig-paths: specifier: ^6.0.2 - version: 6.1.1(typescript@5.9.3)(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: 6.1.1(typescript@5.9.3)(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.9.0)) zod: specifier: ^4.3.5 version: 4.4.3 @@ -973,7 +976,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) babel-plugin-react-compiler: specifier: ^1.0.0 version: 1.0.0 @@ -985,10 +988,10 @@ importers: version: 5.9.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) + 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.9.0) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) web-vitals: specifier: ^5.1.0 version: 5.2.0 @@ -1019,10 +1022,10 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) 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) + 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.9.0) examples/react/drizzle: dependencies: @@ -1037,7 +1040,7 @@ importers: version: 1.166.13(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@tanstack/router-core@1.169.2)(csstype@3.2.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) react: specifier: ^19.2.0 version: 19.2.6 @@ -1062,7 +1065,7 @@ importers: version: 0.31.10 drizzle-orm: specifier: ^0.45.0 - version: 0.45.2(pg@8.20.0) + version: 0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0) pg: specifier: ^8.16.3 version: 8.20.0 @@ -1071,10 +1074,10 @@ importers: version: 5.9.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) + 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.9.0) vite-plugin-inspect: specifier: 11.3.3 - version: 11.3.3(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: 11.3.3(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.9.0)) examples/react/https: dependencies: @@ -1120,22 +1123,22 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) 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) + 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.9.0) vite-plugin-inspect: specifier: 11.3.3 - version: 11.3.3(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: 11.3.3(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.9.0)) vite-plugin-mkcert: specifier: ^1.17.8 - version: 1.17.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)) + version: 1.17.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.9.0)) examples/react/start: dependencies: '@tailwindcss/vite': specifier: ^4.0.6 - version: 4.3.0(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: 4.3.0(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.9.0)) '@tanstack/devtools-event-client': specifier: workspace:* version: link:../../../packages/event-bus-client @@ -1153,16 +1156,16 @@ importers: version: 1.166.12(@tanstack/query-core@5.100.9)(@tanstack/react-query@5.100.9(react@19.2.6))(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@tanstack/router-core@1.169.2)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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: 1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/router-plugin': specifier: ^1.132.0 - version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0)) lucide-react: specifier: ^0.561.0 version: 0.561.0(react@19.2.6) nitro: specifier: latest - version: 3.0.260429-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(miniflare@4.20260507.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: 3.0.260429-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(miniflare@4.20260507.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.9.0)) react: specifier: ^19.2.0 version: 19.2.6 @@ -1174,7 +1177,7 @@ importers: version: 4.3.0 vite-tsconfig-paths: specifier: ^6.0.2 - version: 6.1.1(typescript@5.9.3)(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: 6.1.1(typescript@5.9.3)(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.9.0)) devDependencies: '@tanstack/devtools-vite': specifier: 0.8.3 @@ -1196,7 +1199,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) jsdom: specifier: ^27.0.0 version: 27.4.0 @@ -1205,10 +1208,10 @@ importers: version: 5.9.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) + 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.9.0) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) web-vitals: specifier: ^5.1.0 version: 5.2.0 @@ -1217,7 +1220,7 @@ importers: dependencies: '@cloudflare/vite-plugin': specifier: ^1.13.8 - version: 1.36.3(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))(workerd@1.20260507.1)(wrangler@4.90.0) + version: 1.36.3(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.9.0))(workerd@1.20260507.1)(wrangler@4.90.0) '@tanstack/devtools-event-client': specifier: workspace:* version: link:../../../packages/event-bus-client @@ -1229,10 +1232,10 @@ importers: version: 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/router-plugin': specifier: ^1.132.0 - version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0)) react: specifier: ^19.2.0 version: 19.2.6 @@ -1241,7 +1244,7 @@ importers: version: 19.2.6(react@19.2.6) vite-tsconfig-paths: specifier: ^6.0.2 - version: 6.1.1(typescript@5.9.3)(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: 6.1.1(typescript@5.9.3)(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.9.0)) devDependencies: '@tanstack/devtools-vite': specifier: workspace:* @@ -1257,13 +1260,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) typescript: specifier: ~5.9.2 version: 5.9.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) + 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.9.0) wrangler: specifier: ^4.40.3 version: 4.90.0 @@ -1281,13 +1284,13 @@ importers: version: 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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: 1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/router-plugin': specifier: ^1.132.0 - version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0)) nitro: specifier: latest - version: 3.0.260610-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(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))(wrangler@4.90.0) + version: 3.0.260610-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(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.9.0))(wrangler@4.90.0) react: specifier: ^19.2.0 version: 19.2.6 @@ -1296,7 +1299,7 @@ importers: version: 19.2.6(react@19.2.6) vite-tsconfig-paths: specifier: ^6.0.2 - version: 6.1.1(typescript@5.9.3)(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: 6.1.1(typescript@5.9.3)(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.9.0)) devDependencies: '@tanstack/devtools-vite': specifier: workspace:* @@ -1312,13 +1315,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) typescript: specifier: ~5.9.2 version: 5.9.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) + 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.9.0) examples/react/time-travel: dependencies: @@ -1361,10 +1364,10 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) 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) + 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.9.0) examples/solid/a11y-devtools: dependencies: @@ -1383,13 +1386,13 @@ importers: version: link:../../../packages/devtools-vite 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) + 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.9.0) vite-plugin-inspect: specifier: 11.3.3 - version: 11.3.3(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: 11.3.3(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.9.0)) 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)) + 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.9.0)) examples/solid/basic: dependencies: @@ -1417,13 +1420,13 @@ importers: version: link:../../../packages/devtools-vite 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) + 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.9.0) vite-plugin-inspect: specifier: 11.3.3 - version: 11.3.3(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: 11.3.3(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.9.0)) 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)) + 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.9.0)) examples/solid/devtools-ui: dependencies: @@ -1442,19 +1445,19 @@ importers: version: link:../../../packages/devtools-vite 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) + 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.9.0) vite-plugin-inspect: specifier: 11.3.3 - version: 11.3.3(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: 11.3.3(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.9.0)) 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)) + 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.9.0)) examples/solid/start: dependencies: '@solidjs/start': specifier: ^1.2.0 - version: 1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(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: 1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))(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.9.0)) '@tanstack/solid-devtools': specifier: ^0.8.10 version: link:../../../packages/solid-devtools @@ -1463,7 +1466,7 @@ importers: version: 1.9.12 vinxi: specifier: ^0.5.8 - version: 0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) examples/vue/basic: dependencies: @@ -1485,13 +1488,13 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.6(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))(vue@3.5.34(typescript@5.9.3)) + version: 6.0.6(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.9.0))(vue@3.5.34(typescript@5.9.3)) typescript: specifier: ~5.9.2 version: 5.9.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) + 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.9.0) packages/angular-devtools: dependencies: @@ -1510,7 +1513,7 @@ importers: version: 21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) packages/devtools: dependencies: @@ -1550,13 +1553,13 @@ importers: version: 0.8.10(solid-js@1.9.12) tsup: specifier: ^8.5.0 - version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)) 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)) + 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.9.0)) packages/devtools-a11y: dependencies: @@ -1593,7 +1596,7 @@ importers: devDependencies: 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)) + 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.9.0)) packages/devtools-bundler-core: dependencies: @@ -1614,7 +1617,7 @@ importers: version: 0.30.21 oxc-parser: specifier: ^0.120.0 - version: 0.120.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + version: 0.120.0(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) picomatch: specifier: ^4.0.3 version: 4.0.4 @@ -1671,7 +1674,7 @@ importers: devDependencies: 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)) + 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.9.0)) packages/devtools-utils: dependencies: @@ -1699,16 +1702,16 @@ importers: version: link:../devtools svelte: specifier: ^5.0.0 - version: 5.55.1(@typescript-eslint/types@8.58.0) + version: 5.55.1(@typescript-eslint/types@8.67.0) tsup: specifier: ^8.5.0 - version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)) 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)) + 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.9.0)) packages/devtools-vite: dependencies: @@ -1726,7 +1729,7 @@ importers: version: 5.6.2 vite: specifier: ^6.0.0 || ^7.0.0 || ^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) + 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.9.0) devDependencies: happy-dom: specifier: ^20.0.0 @@ -1759,7 +1762,7 @@ 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@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.9.0)) eslint-plugin-react-hooks: specifier: ^7.0.1 version: 7.1.1(eslint@9.39.4(jiti@2.7.0)) @@ -1787,7 +1790,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) eslint-plugin-react-compiler: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2(eslint@9.39.4(jiti@2.7.0)) @@ -1801,6 +1804,40 @@ importers: specifier: ^19.2.0 version: 19.2.6(react@19.2.6) + packages/react-scan-devtools: + dependencies: + '@tanstack/devtools-ui': + specifier: workspace:* + version: link:../devtools-ui + '@tanstack/devtools-utils': + specifier: workspace:^ + version: link:../devtools-utils + goober: + specifier: ^2.1.16 + version: 2.1.18(csstype@3.2.3) + react-scan: + specifier: ^0.5.7 + version: 0.5.7(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(esbuild@0.27.4)(eslint@9.39.4(jiti@2.7.0))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(rollup@4.60.1) + solid-js: + specifier: ^1.9.9 + version: 1.9.12 + devDependencies: + '@types/react': + specifier: ^19.2.0 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.0 + version: 19.2.3(@types/react@19.2.14) + react: + specifier: ^19.2.0 + version: 19.2.6 + react-dom: + specifier: ^19.2.0 + version: 19.2.6(react@19.2.6) + 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.9.0)) + packages/solid-devtools: dependencies: '@tanstack/devtools': @@ -1812,7 +1849,7 @@ importers: version: 1.9.12 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)) + 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.9.0)) packages/svelte-devtools: dependencies: @@ -1822,10 +1859,10 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: ^6.0.0 - version: 6.2.4(svelte@5.55.1(@typescript-eslint/types@8.58.0))(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: 6.2.4(svelte@5.55.1(@typescript-eslint/types@8.67.0))(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.9.0)) svelte: specifier: ^5.0.0 - version: 5.55.1(@typescript-eslint/types@8.58.0) + version: 5.55.1(@typescript-eslint/types@8.67.0) packages/vue-devtools: dependencies: @@ -1835,7 +1872,7 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.6(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))(vue@3.5.34(typescript@5.9.3)) + version: 6.0.6(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.9.0))(vue@3.5.34(typescript@5.9.3)) eslint-plugin-vue: specifier: ^10.5.1 version: 10.9.1(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.7.0)))(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.7.0))) @@ -2059,6 +2096,17 @@ packages: zod: optional: true + '@apm-js-collab/code-transformer-bundler-plugins@0.7.4': + resolution: {integrity: sha512-nAfOeZPSUAQvJa1iFT/5oCrTm5YQhMMrfCNthNnaXHZiOQhu1KGuLoIx7HtbAi3wfwaBYLaICPIeenIaEwcXIg==} + engines: {node: '>=18.0.0'} + + '@apm-js-collab/code-transformer@0.18.1': + resolution: {integrity: sha512-u1Hb6bHjWtkSpiprwVP6YaHC1DTN4RAU3zYkUDUe7WMnJwdyU1pwTL9dFKiSJB9IiLue/EQovmyx6xhU7FFtAQ==} + hasBin: true + + '@apm-js-collab/tracing-hooks@0.13.0': + resolution: {integrity: sha512-mTvWz9rnQwx1U3h0XPTHaX7bgfkpipLLTQyjlC2cdhQpQEuoLT0AGzoydeoq2NxfEVv6fWOOETcSbb2nptleyw==} + '@asamuzakjp/css-color@4.1.2': resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} @@ -2068,6 +2116,9 @@ packages: '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} + '@astrojs/compiler@4.0.0': + resolution: {integrity: sha512-eouss7G8ygdZqHuke033VMcVw5HTZUu+PXd/h06DGDUg/jt5btPYPqh66ENWw/mU78rBrf/oeC4oqoBwMtDMNA==} + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -2154,10 +2205,18 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -2171,6 +2230,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.8': + resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-proposal-private-methods@7.18.6': resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} @@ -2236,6 +2300,10 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + '@biomejs/biome@2.2.4': resolution: {integrity: sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==} engines: {node: '>=14.21.3'} @@ -2484,12 +2552,18 @@ packages: '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} @@ -3230,6 +3304,9 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@iarna/toml@2.2.5': + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -3956,6 +4033,13 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + '@neodrag/core@3.0.0-next.11': resolution: {integrity: sha512-3WQWxyrbxiaK9zS5JU2wJsW2gpoQlZBXVghduBh61JpqaeE0T0cte8R0qYK2RuJo3J2TYQYqxO19CpG/C1i5eg==} @@ -4087,48 +4171,132 @@ packages: resolution: {integrity: sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==} engines: {node: '>=20.0'} + '@opentelemetry/api-logs@0.220.0': + resolution: {integrity: sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/core@2.10.0': + resolution: {integrity: sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/instrumentation@0.220.0': + resolution: {integrity: sha512-xQx3E2WxP1mDvKzxLxX+CTCtNLa560YJZ3087qYHerl2YmiKpv7AH+dAy7vmx+eVrZ5BwhfWUAVoKOoxCNHcpw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/resources@2.10.0': + resolution: {integrity: sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.10.0': + resolution: {integrity: sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace@2.10.0': + resolution: {integrity: sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.43.0': + resolution: {integrity: sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==} + engines: {node: '>=14'} + '@oxc-parser/binding-android-arm-eabi@0.120.0': resolution: {integrity: sha512-WU3qtINx802wOl8RxAF1v0VvmC2O4D9M8Sv486nLeQ7iPHVmncYZrtBhB4SYyX+XZxj2PNnCcN+PW21jHgiOxg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] + '@oxc-parser/binding-android-arm-eabi@0.143.0': + resolution: {integrity: sha512-n9uozULWflPqBtdmI8lAabLqGKNgLVNN0ZH8HfgCwpKGNtzRzauB76jTiW/3YLkcA7N1zskpi9GdVnZuu1SAvg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + '@oxc-parser/binding-android-arm64@0.120.0': resolution: {integrity: sha512-SEf80EHdhlbjZEgzeWm0ZA/br4GKMenDW3QB/gtyeTV1gStvvZeFi40ioHDZvds2m4Z9J1bUAUL8yn1/+A6iGg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] + '@oxc-parser/binding-android-arm64@0.143.0': + resolution: {integrity: sha512-9BbdjHETk6O3zH/DDid9IgBtF0GlpLabNKN231uraXpRDSfY+iiZxTP5bk1Z63GBownVdhdINFIeddmMz4MzpQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@oxc-parser/binding-darwin-arm64@0.120.0': resolution: {integrity: sha512-xVrrbCai8R8CUIBu3CjryutQnEYhZqs1maIqDvtUCFZb8vY33H7uh9mHpL3a0JBIKoBUKjPH8+rzyAeXnS2d6A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@oxc-parser/binding-darwin-arm64@0.143.0': + resolution: {integrity: sha512-gh+6ecoHUy4/sUcolBl/1qPXKBbYNxFY0Pk0ujgQvINTMSftJY7o4yb8gOkDJPeZeB8+a+u7xTe6umoP8N5HFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@oxc-parser/binding-darwin-x64@0.120.0': resolution: {integrity: sha512-xyHBbnJ6mydnQUH7MAcafOkkrNzQC6T+LXgDH/3InEq2BWl/g424IMRiJVSpVqGjB+p2bd0h0WRR8iIwzjU7rw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@oxc-parser/binding-darwin-x64@0.143.0': + resolution: {integrity: sha512-qd1hl2d+lXgHv/VQ/M9qm8TrMC5T4RqDBwtOnl+1D0QMjwcz+8AaB4JSg8STgeag0GP6a6L74XEGAsrTSJWNzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@oxc-parser/binding-freebsd-x64@0.120.0': resolution: {integrity: sha512-UMnVRllquXUYTeNfFKmxTTEdZ/ix1nLl0ducDzMSREoWYGVIHnOOxoKMWlCOvRr9Wk/HZqo2rh1jeumbPGPV9A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@oxc-parser/binding-freebsd-x64@0.143.0': + resolution: {integrity: sha512-M5XXcNa7aOqLPKTR41msfghKu2yQ4xWvCm11/gwU0JzOzHNk5sgW//rVEjJ+LO48+VDAMzXTSzurUVxIDKwozw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@oxc-parser/binding-linux-arm-gnueabihf@0.120.0': resolution: {integrity: sha512-tkvn2CQ7QdcsMnpfiX3fd3wA3EFsWKYlcQzq9cFw/xc89Al7W6Y4O0FgLVkVQpo0Tnq/qtE1XfkJOnRRA9S/NA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@oxc-parser/binding-linux-arm-gnueabihf@0.143.0': + resolution: {integrity: sha512-T/GXusuOkPNQhCQCSBbcU/N8j0rAypuDBl1IyFK+lyYT594XsVz80clPC/OtbSSpBGyJxj8uYEfctxVuxVYoww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxc-parser/binding-linux-arm-musleabihf@0.120.0': resolution: {integrity: sha512-WN5y135Ic42gQDk9grbwY9++fDhqf8knN6fnP+0WALlAUh4odY/BDK1nfTJRSfpJD9P3r1BwU0m3pW2DU89whQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@oxc-parser/binding-linux-arm-musleabihf@0.143.0': + resolution: {integrity: sha512-oKu4RcBlXSqo3OC62dp6YTnQaZIurNDpCX3BnAM3+bJxt7s8J2TJKMnC0UYer1qhlRaDCg6wkTaTw+2IlsZ12w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxc-parser/binding-linux-arm64-gnu@0.120.0': resolution: {integrity: sha512-1GgQBCcXvFMw99EPdMy+4NZ3aYyXsxjf9kbUUg8HuAy3ZBXzOry5KfFEzT9nqmgZI1cuetvApkiJBZLAPo8uaw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4136,6 +4304,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-arm64-gnu@0.143.0': + resolution: {integrity: sha512-WJBbD186AZmMGaSIhlktC+rPl8L3peCTXAh88Ih9uEvK0en2mPojGyCGYiL6mHtV1RPV3JyfJW5t6n5hh0lXhA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-arm64-musl@0.120.0': resolution: {integrity: sha512-gmMQ70gsPdDBgpcErvJEoWNBr7bJooSLlvOBVBSGfOzlP5NvJ3bFvnUeZZ9d+dPrqSngtonf7nyzWUTUj/U+lw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4143,6 +4318,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-arm64-musl@0.143.0': + resolution: {integrity: sha512-t1AcYOwEzgceadT4v5e+vaCCb0AncCA3v5AyzfBAz/tMq11qzVccXKzNHtkWdjBsgvTKwRkaUF3QvT4kot8vcQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-ppc64-gnu@0.120.0': resolution: {integrity: sha512-T/kZuU0ajop0xhzVMwH5r3srC9Nqup5HaIo+3uFjIN5uPxa0LvSxC1ZqP4aQGJVW5G0z8/nCkjIfSMS91P/wzw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4150,6 +4332,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-ppc64-gnu@0.143.0': + resolution: {integrity: sha512-RsnO/NoD8376LMJq8JS8TwI0ieNaFRTuNe2GVJntQg6gwZNMENZsEbknHdVwjpOmxdGLGodcwaGSbAeRr5Bgjw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.120.0': resolution: {integrity: sha512-vn21KXLAXzaI3N5CZWlBr1iWeXLl9QFIMor7S1hUjUGTeUuWCoE6JZB040/ZNDwf+JXPX8Ao9KbmJq9FMC2iGw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4157,6 +4346,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.143.0': + resolution: {integrity: sha512-48fSVfR9TZi5CASZFyv0VC6z6BCoeihFsX031mAD/oSH7d9PYsPgIqza7d9mjP7Z2KTEpTFyH6SIu0Ui6R1vdg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-riscv64-musl@0.120.0': resolution: {integrity: sha512-SUbUxlar007LTGmSLGIC5x/WJvwhdX+PwNzFJ9f/nOzZOrCFbOT4ikt7pJIRg1tXVsEfzk5mWpGO1NFiSs4PIw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4164,6 +4360,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-riscv64-musl@0.143.0': + resolution: {integrity: sha512-T8CpdD+SfE01DnIOD4HpVxu0ZJOfMJ/VhCvikKfaXAxkZ+9veyLM/D2hpi7Y2hFUyPmVQO3FNZHmYzV/WlVR4g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-s390x-gnu@0.120.0': resolution: {integrity: sha512-hYiPJTxyfJY2+lMBFk3p2bo0R9GN+TtpPFlRqVchL1qvLG+pznstramHNvJlw9AjaoRUHwp9IKR7UZQnRPGjgQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4171,6 +4374,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-s390x-gnu@0.143.0': + resolution: {integrity: sha512-QLdeMsCcacenPEFsfxnBUDF1y6opyz5+fmOz9bfD5Y7fiGCMupUCuB3KTPQhNwshIG1P9fPqar9MHxuBDd4bwQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.120.0': resolution: {integrity: sha512-q+5jSVZkprJCIy3dzJpApat0InJaoxQLsJuD6DkX8hrUS61z2lHQ1Fe9L2+TYbKHXCLWbL0zXe7ovkIdopBGMQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4178,6 +4388,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.143.0': + resolution: {integrity: sha512-659ujfqLy6k7cuH3sbzhd8b+ztSq+i6E2E9pG78Q0BmHjAExfGIdgc8cGgMdwAozDXeZFHkJ+LXYJdWsaGdgyw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-x64-musl@0.120.0': resolution: {integrity: sha512-D9QDDZNnH24e7X4ftSa6ar/2hCavETfW3uk0zgcMIrZNy459O5deTbWrjGzZiVrSWigGtlQwzs2McBP0QsfV1w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4185,12 +4402,25 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-x64-musl@0.143.0': + resolution: {integrity: sha512-/Mw/9j4TfZcnKphPrzOE6t4MMknXadcAAuVUlDRTF/ETWB5xOgQvOJV2Mh9We/bWxZdoxaGAdc+hy4GuYwQ2yQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-openharmony-arm64@0.120.0': resolution: {integrity: sha512-TBU8ZwOUWAOUWVfmI16CYWbvh4uQb9zHnGBHsw5Cp2JUVG044OIY1CSHODLifqzQIMTXvDvLzcL89GGdUIqNrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@oxc-parser/binding-openharmony-arm64@0.143.0': + resolution: {integrity: sha512-8rIKWR2BFuifbIK/1XB9wTaSdtuJ25dlE7ZQYDnEwj/2xH2vHsxnvIjHT3ZjSVuLLwGGlSslIG/fbOJ8TV8rTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@oxc-parser/binding-wasm32-wasi@0.120.0': resolution: {integrity: sha512-WG/FOZgDJCpJnuF3ToG/K28rcOmSY7FmFmfBKYb2fmLyhDzPpUldFGV7/Fz4ru0Iz/v4KPmf8xVgO8N3lO4KHA==} engines: {node: '>=14.0.0'} @@ -4202,18 +4432,36 @@ packages: cpu: [arm64] os: [win32] + '@oxc-parser/binding-win32-arm64-msvc@0.143.0': + resolution: {integrity: sha512-5U9kQYMfRRI6Zq7KDxgbIP0RMnKrfn3gLepRMgJuRkPSUALTiRCk9d/uyhb4lGDjUdzwK7mBkKqhLgzBPCmLpQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@oxc-parser/binding-win32-ia32-msvc@0.120.0': resolution: {integrity: sha512-L7vfLzbOXsjBXV0rv/6Y3Jd9BRjPeCivINZAqrSyAOZN3moCopDN+Psq9ZrGNZtJzP8946MtlRFZ0Als0wBCOw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] + '@oxc-parser/binding-win32-ia32-msvc@0.143.0': + resolution: {integrity: sha512-25P7AaHk4R88Yv2XH4gToDVmh0cOu+bEURQU10CRrmvgabfRArSGAP5osmwUKeSUHj0VS50upbpbRWWW/m7mHA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.120.0': resolution: {integrity: sha512-ys+upfqNtSu58huAhJMBKl3XCkGzyVFBlMlGPzHeFKgpFF/OdgNs1MMf8oaJIbgMH8ZxgGF7qfue39eJohmKIg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.143.0': + resolution: {integrity: sha512-ORMh3JE1s6V7ySicdRK7vgaDQnn5o+UHg9ct989PlWHbel8O9ARrmWXM6kZjrBMtNucxNayQ8g69G0VfWzhANw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxc-project/types@0.113.0': resolution: {integrity: sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==} @@ -4226,104 +4474,205 @@ packages: '@oxc-project/types@0.137.0': resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} + '@oxc-project/types@0.143.0': + resolution: {integrity: sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==} + '@oxc-resolver/binding-android-arm-eabi@11.19.1': resolution: {integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==} cpu: [arm] os: [android] + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} + cpu: [arm] + os: [android] + '@oxc-resolver/binding-android-arm64@11.19.1': resolution: {integrity: sha512-oolbkRX+m7Pq2LNjr/kKgYeC7bRDMVTWPgxBGMjSpZi/+UskVo4jsMU3MLheZV55jL6c3rNelPl4oD60ggYmqA==} cpu: [arm64] os: [android] + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} + cpu: [arm64] + os: [android] + '@oxc-resolver/binding-darwin-arm64@11.19.1': resolution: {integrity: sha512-nUC6d2i3R5B12sUW4O646qD5cnMXf2oBGPLIIeaRfU9doJRORAbE2SGv4eW6rMqhD+G7nf2Y8TTJTLiiO3Q/dQ==} cpu: [arm64] os: [darwin] + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} + cpu: [arm64] + os: [darwin] + '@oxc-resolver/binding-darwin-x64@11.19.1': resolution: {integrity: sha512-cV50vE5+uAgNcFa3QY1JOeKDSkM/9ReIcc/9wn4TavhW/itkDGrXhw9jaKnkQnGbjJ198Yh5nbX/Gr2mr4Z5jQ==} cpu: [x64] os: [darwin] + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} + cpu: [x64] + os: [darwin] + '@oxc-resolver/binding-freebsd-x64@11.19.1': resolution: {integrity: sha512-xZOQiYGFxtk48PBKff+Zwoym7ScPAIVp4c14lfLxizO2LTTTJe5sx9vQNGrBymrf/vatSPNMD4FgsaaRigPkqw==} cpu: [x64] os: [freebsd] + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} + cpu: [x64] + os: [freebsd] + '@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1': resolution: {integrity: sha512-lXZYWAC6kaGe/ky2su94e9jN9t6M0/6c+GrSlCqL//XO1cxi5lpAhnJYdyrKfm0ZEr/c7RNyAx3P7FSBcBd5+A==} cpu: [arm] os: [linux] + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} + cpu: [arm] + os: [linux] + '@oxc-resolver/binding-linux-arm-musleabihf@11.19.1': resolution: {integrity: sha512-veG1kKsuK5+t2IsO9q0DErYVSw2azvCVvWHnfTOS73WE0STdLLB7Q1bB9WR+yHPQM76ASkFyRbogWo1GR1+WbQ==} cpu: [arm] os: [linux] + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} + cpu: [arm] + os: [linux] + '@oxc-resolver/binding-linux-arm64-gnu@11.19.1': resolution: {integrity: sha512-heV2+jmXyYnUrpUXSPugqWDRpnsQcDm2AX4wzTuvgdlZfoNYO0O3W2AVpJYaDn9AG4JdM6Kxom8+foE7/BcSig==} cpu: [arm64] os: [linux] libc: [glibc] + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@oxc-resolver/binding-linux-arm64-musl@11.19.1': resolution: {integrity: sha512-jvo2Pjs1c9KPxMuMPIeQsgu0mOJF9rEb3y3TdpsrqwxRM+AN6/nDDwv45n5ZrUnQMsdBy5gIabioMKnQfWo9ew==} cpu: [arm64] os: [linux] libc: [musl] + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} + cpu: [arm64] + os: [linux] + libc: [musl] + '@oxc-resolver/binding-linux-ppc64-gnu@11.19.1': resolution: {integrity: sha512-vLmdNxWCdN7Uo5suays6A/+ywBby2PWBBPXctWPg5V0+eVuzsJxgAn6MMB4mPlshskYbppjpN2Zg83ArHze9gQ==} cpu: [ppc64] os: [linux] libc: [glibc] + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@oxc-resolver/binding-linux-riscv64-gnu@11.19.1': resolution: {integrity: sha512-/b+WgR+VTSBxzgOhDO7TlMXC1ufPIMR6Vj1zN+/x+MnyXGW7prTLzU9eW85Aj7Th7CCEG9ArCbTeqxCzFWdg2w==} cpu: [riscv64] os: [linux] libc: [glibc] + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@oxc-resolver/binding-linux-riscv64-musl@11.19.1': resolution: {integrity: sha512-YlRdeWb9j42p29ROh+h4eg/OQ3dTJlpHSa+84pUM9+p6i3djtPz1q55yLJhgW9XfDch7FN1pQ/Vd6YP+xfRIuw==} cpu: [riscv64] os: [linux] libc: [musl] + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} + cpu: [riscv64] + os: [linux] + libc: [musl] + '@oxc-resolver/binding-linux-s390x-gnu@11.19.1': resolution: {integrity: sha512-EDpafVOQWF8/MJynsjOGFThcqhRHy417sRyLfQmeiamJ8qVhSKAn2Dn2VVKUGCjVB9C46VGjhNo7nOPUi1x6uA==} cpu: [s390x] os: [linux] libc: [glibc] + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@oxc-resolver/binding-linux-x64-gnu@11.19.1': resolution: {integrity: sha512-NxjZe+rqWhr+RT8/Ik+5ptA3oz7tUw361Wa5RWQXKnfqwSSHdHyrw6IdcTfYuml9dM856AlKWZIUXDmA9kkiBQ==} cpu: [x64] os: [linux] libc: [glibc] + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} + cpu: [x64] + os: [linux] + libc: [glibc] + '@oxc-resolver/binding-linux-x64-musl@11.19.1': resolution: {integrity: sha512-cM/hQwsO3ReJg5kR+SpI69DMfvNCp+A/eVR4b4YClE5bVZwz8rh2Nh05InhwI5HR/9cArbEkzMjcKgTHS6UaNw==} cpu: [x64] os: [linux] libc: [musl] + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} + cpu: [x64] + os: [linux] + libc: [musl] + '@oxc-resolver/binding-openharmony-arm64@11.19.1': resolution: {integrity: sha512-QF080IowFB0+9Rh6RcD19bdgh49BpQHUW5TajG1qvWHvmrQznTZZjYlgE2ltLXyKY+qs4F/v5xuX1XS7Is+3qA==} cpu: [arm64] os: [openharmony] + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} + cpu: [arm64] + os: [openharmony] + '@oxc-resolver/binding-wasm32-wasi@11.19.1': resolution: {integrity: sha512-w8UCKhX826cP/ZLokXDS6+milN8y4X7zidsAttEdWlVoamTNf6lhBJldaWr3ukTDiye7s4HRcuPEPOXNC432Vg==} engines: {node: '>=14.0.0'} cpu: [wasm32] + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': resolution: {integrity: sha512-nJ4AsUVZrVKwnU/QRdzPCCrO0TrabBqgJ8pJhXITdZGYOV28TIYystV1VFLbQ7DtAcaBHpocT5/ZJnF78YJPtQ==} cpu: [arm64] os: [win32] + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} + cpu: [arm64] + os: [win32] + '@oxc-resolver/binding-win32-ia32-msvc@11.19.1': resolution: {integrity: sha512-EW+ND5q2Tl+a3pH81l1QbfgbF3HmqgwLfDfVithRFheac8OTcnbXt/JxqD2GbDkb7xYEqy1zNaVFRr3oeG8npA==} cpu: [ia32] @@ -4334,6 +4683,133 @@ packages: cpu: [x64] os: [win32] + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.77.0': + resolution: {integrity: sha512-E06sKWS6PiI6HRxS1wyQg22HvApt01hI7fV+T3wUk3OSbaaP4a3hYGY/MIQDmASqCiRjBdpRQYkgMkqH82cWmQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.77.0': + resolution: {integrity: sha512-NvsKz0KZxTp9cYWPLf+FXaSZwB3oO3peAjtukpOMBgse2vhQSoIIVqeO1yR0lEo/UcdZIDL18uq+kL0LzQ0ytA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.77.0': + resolution: {integrity: sha512-bgjTn6nW4bQCFBvSvuHCpDD+sONvmpo4lGI4PxzMt1quBA+xYxhczk6RiCn3GZ9gY8uhaBbwhj9MdKGfu6T9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.77.0': + resolution: {integrity: sha512-aotaIttH1R6j1Rwhx0M0htgeZyGtVQqYNTVEYMN/UcgHPquGA6kmk9OyuDc3a2GKUQBC+3C3GVQCcrRPMYqAFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.77.0': + resolution: {integrity: sha512-nNx/wta7ksRAdYvq+l4AWjXkLxEXHALhENxjj2cYbQAIR4ybaA5L+hCbE63HOmft5czQ6ks+hb8vmEAnn7YGPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.77.0': + resolution: {integrity: sha512-tMLLjM7xXtzXisVCzkOTXNCy9bZVId2wteNwjohlFDR/jY6WagpEDA1c1wu4xRc20Hojaxj+V6DSR7gbKxijWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.77.0': + resolution: {integrity: sha512-MiAFDFaqR0tmHTAyo0YDcZ5hyLREdYw/RQhc2R3cbT+8O3tB+zqPM2th9TTQ+Uo3jn/embS+DO+HyX9ztCPkOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.77.0': + resolution: {integrity: sha512-/xqQ3B16i1T4cyt/9Mn+4CpzhUXoBXp7kVpIwzOXNFLj5JmK1bIjsbSnX296Gg8A/o7oDtKWikFgBx0SLwztkw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.77.0': + resolution: {integrity: sha512-LSbwuRKiNCenPDcbARqAZ5RfBy7gmj7vOvfJRLeCDU3gFtSxWbhv/+VTlaUqzUhNj1gFLHB8h7ALnxa/Az6z6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.77.0': + resolution: {integrity: sha512-QWdcH31mXEUe5Nq1s0CfCpceaKjIo9uZtwDjAuL681g1axf+5x8xrg/eXWaw//4NCxYZ4V4e5Hu5tvdR+pTBlg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.77.0': + resolution: {integrity: sha512-GnOfYgJxbcElOiPZaDFDl406ONddwvOWk2jvAAAEjwAl4GofNoHF+/HHUIBYa6bFCArlcGPi0XjC4cU1pkgF/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.77.0': + resolution: {integrity: sha512-AyEMTUCf0xY+hHF+IxqXFQIX0yQOIR8ykpY0lJNOw9xYqOzUX8dyZfRvlG0RfXwuQn2eonf/8NrMmDSZJjdqsA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.77.0': + resolution: {integrity: sha512-sPLzEcNvxd/oyVQ5oZo92CiHkFkpBeRop13E/P3TPY+hZfXHKCOWKI70TE2RYwMKFJDc20EMjH16L7NZICtKTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.77.0': + resolution: {integrity: sha512-1Oh2ssH2L7lwyvkdSqaMUfsGfwU2Wfvew+obBUYjRVqhpBcUpwnsPSEr1IzVi9XqkuY10geiLsNKecqaZC34Dw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.77.0': + resolution: {integrity: sha512-0j/2wRgNGO+Qj/M1uu/p57h/hFTTWWcfie0ufkbabeus2s5+/QqkCflnMOwLLN5m2GsNeWp4xdl4cPa4n7QCOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.77.0': + resolution: {integrity: sha512-BJ/j54qS0usEnyDkLYURMj2iiD9h5Cyy+ppzeMSXBGRXaGRNWnj1Mw14NqWMR5E/PzdgB30OOCCzLzbRoduafw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.77.0': + resolution: {integrity: sha512-Yh8w+g2Lpx7StrvtYkoz9JJvXjB9wxgFChFNb85nrXm/wj/XTwGWS1hve9+900HL7llrntYB3YP+y32E3tRqzA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.77.0': + resolution: {integrity: sha512-zja5b7+6a7UsRFgAQSrnax5vrzliEyNPLCjfXONu/vTWswaIVZGFajJZptaeRvPE4LghtFdAzVFlexTm7MVTGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.77.0': + resolution: {integrity: sha512-+teyvPDZ2RjUvo+SuCqS/UhaJl1QtdW5fWT5NJTV61V5MIuIS90Db9LixmtEGvXixyttiK62P96MSu3UlpviBw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@package-json/types@0.0.12': resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} @@ -4467,6 +4943,14 @@ packages: '@babel/core': 7.x vite: 2.x || 3.x || 4.x || 5.x || 6.x || 7.x || 8.x + '@preact/signals-core@1.14.4': + resolution: {integrity: sha512-HNB6HYeYKhQbJ1aKl+YRjrS4+QWHLKX6qKoUsfS/m0vqzsVaEBiZiaKbG/e+NKk2ch5ALQr/ihWaMHxiCuuWHA==} + + '@preact/signals@2.11.1': + resolution: {integrity: sha512-uYoD+USkacTNU02kfCBkJEV7xabKTmA78W5pnT2GymsuGEC9n/ZO+UT4S96l0dIL6KLDk77VJyUFuOMBvftVHg==} + peerDependencies: + preact: '>= 10.25.0 || >=11.0.0-0' + '@prefresh/babel-plugin@0.5.3': resolution: {integrity: sha512-57LX2SHs4BX2s1IwCjNzTE2OJeEepRCNf1VTEpbNcUyHfMO68eeOWGDIt4ob9aYlW6PEWZ1SuwNikuoIXANDtQ==} @@ -4518,6 +5002,10 @@ packages: resolution: {integrity: sha512-HDVTWq3H0uTXiU0eeSQntcVUTPP3GamzeXI41+x7uU9J65JgWQh3qWZHblR1i0npXfFtF+mxBiU2nJH8znxWnQ==} engines: {node: '>=18'} + '@react-grab/cli@0.2.0': + resolution: {integrity: sha512-LVfA+j5cFT0Szd958WRD8W/B8ucCtz4ViiveDKWLqAwBkZFW9VRW1ZvwOUhp/M3SmVPtjDaRkW12GvAuTArP+Q==} + hasBin: true + '@rolldown/binding-android-arm64@1.0.0': resolution: {integrity: sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5135,6 +5623,55 @@ packages: resolution: {integrity: sha512-RWoD2iARXfHmMkAzmAsefj5rcyihhVPW4OY7+pdpfFYCHdGPreSbEAhCcTF2dJjJA/71N5qj5bFdSIJhO2aZ1A==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@sentry/conventions@0.16.0': + resolution: {integrity: sha512-fO9PLmHdVURcSPUpWCItWAtgKiMwGdJHbovoSEyLplX5sxs2ugvI4CBPTrkkgqhObnZOD0CnWBKDzSVQYBKEyQ==} + engines: {node: '>=14'} + + '@sentry/core@10.70.0': + resolution: {integrity: sha512-ozhCTDqg89oB4XmWfAwuHshABpvT7AkRpaPnogopPfMAaI61G1t8EKCJ4W7aum8JSBonlfyjPCyW5oYZFm0KvA==} + engines: {node: '>=18'} + + '@sentry/node-core@10.70.0': + resolution: {integrity: sha512-oPOEVVNxv5WHtckx2i06Wi9FLWyvOg/1DUeX732jZ4iqT2nupINaMH4nF4f4kSvUThFnxkFSRQxwqOxgzMKhKA==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1' + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/core': + optional: true + '@opentelemetry/exporter-trace-otlp-http': + optional: true + '@opentelemetry/instrumentation': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + + '@sentry/node@10.70.0': + resolution: {integrity: sha512-SPOOVxmKTVIEtqvOKkQT163e/pOwucjS7OPsCHyRs8sFR4nfBNu0EThplyqnvqd5BWBMTPH6WTBQfo+QWHV+HA==} + engines: {node: '>=18'} + + '@sentry/opentelemetry@10.70.0': + resolution: {integrity: sha512-UNV/2tqypcUK6FDzerAsFJn1Km/c4VZCYkUZDNbnV5S0cwAq2BYKMo4M5vovaLDBQlxA+Wk9ovbxi5wYjjl9fw==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 + + '@sentry/server-utils@10.70.0': + resolution: {integrity: sha512-rzegZjMFFgCp3o+N8+XU13rfSvz4B+f8rU0ijBGrQcHdMNyfsFDTu1UTm262JofmrV2u+s+D0u0vFTnqtOGkbA==} + engines: {node: '>=18'} + + '@shaderfrog/glsl-parser@7.0.1': + resolution: {integrity: sha512-8mpfsoPeRhesY3pOrzNZBL8uG6N5GVX1EHLBYbd4gzKs+c7vaEIqpTNK5VrffU33qQN4cwpP2v3u4aPPBU32sw==} + engines: {node: '>=16'} + '@shikijs/core@1.29.2': resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} @@ -5887,6 +6424,9 @@ packages: '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -6180,6 +6720,10 @@ packages: resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.67.0': + resolution: {integrity: sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.58.0': resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6496,6 +7040,14 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agent-install@0.0.5: + resolution: {integrity: sha512-nHlms9BkP8ZiY79HrwCGiA2DcNaXrAaJrCM/BEqQ7MEsSKyCk+2A76xPGylIfASZSZE0SaU3T0bNSg4rBPIJAQ==} + hasBin: true + + agent-install@0.0.6: + resolution: {integrity: sha512-7NRMZ/ZDz2vHevQTgJsocBFpakB1/Wx5ip19YSJuj4VOXpraWztTerViNtdSyARKZT9e2yVwUUB5JXXCE7mNrA==} + hasBin: true + ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: @@ -6641,6 +7193,9 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + atomically@2.1.1: + resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==} + axe-core@4.11.4: resolution: {integrity: sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA==} engines: {node: '>=4'} @@ -6768,6 +7323,16 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bippy@0.5.43: + resolution: {integrity: sha512-Tvu7b1M7+d8b9/YHaCeODEsi2CgbuoBql+dWSBrNnCuqJ1gMUeY3i0r+319hvjjl5GVBP6FFWxrKnq3fhZER0w==} + peerDependencies: + react: '>=17.0.1' + + bippy@0.6.1: + resolution: {integrity: sha512-ky4m94Y/KfsddjGkKTsV4uFjZqkJjpOjQ2t5gKPdX6XH1MNxMNX5FrVefsxV4lpjemEmEdwe0e0YbzAMNs3oUQ==} + peerDependencies: + react: '>=17.0.1' + birecord@0.1.1: resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==} @@ -6957,6 +7522,9 @@ packages: citty@0.2.1: resolution: {integrity: sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==} + cjs-module-lexer@2.2.1: + resolution: {integrity: sha512-Ca8swihM+/4yKecYHY52kgJd300hi2lADU/a1RxNTRe+RJ9jvqQlESpbz9DnG9mowez8qwXHB8qYdIUw9e+F5Q==} + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -7082,6 +7650,10 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + conf@15.1.0: + resolution: {integrity: sha512-Uy5YN9KEu0WWDaZAVJ5FAmZoaJt9rdK6kH+utItPyGsCqCgaTKkrmZx3zoE0/3q6S3bcp3Ihkk+ZqPxWxFK5og==} + engines: {node: '>=20'} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -7424,6 +7996,10 @@ packages: de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debounce-fn@6.0.0: + resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} + engines: {node: '>=18'} + debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} @@ -7510,6 +8086,9 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + deslop-js@0.9.12: + resolution: {integrity: sha512-Ku6Zngzmu4EISb58WUkRKZytfgWjJ18Cic7lb4wl+/BF0tHWRvpBOLlA0FP35r82mV45Y72AK3RPC1Nw0GLbIw==} + destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} @@ -7757,6 +8336,10 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + env-runner@0.1.14: resolution: {integrity: sha512-qdk5mmgFsd+zPg3r1bkZ+IbvpfUfypyDvNhMGypSMRpz7kOa/kI6SpW8fgyukuEM4Lo24M65r+1Ne0DtT7vFBA==} hasBin: true @@ -7815,6 +8398,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -8694,6 +9280,10 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-in-the-middle@3.3.3: + resolution: {integrity: sha512-AiohS3H80sXO6owEltjGX+glb7qXaDhBoJb9XcQVH4UI207xu/bDLUcadVKp7Qe576reg9yr/PXZjV5qx8gfbA==} + engines: {node: '>=18'} + import-lazy@4.0.0: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} @@ -9028,6 +9618,10 @@ packages: khroma@2.1.0: resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -9082,30 +9676,60 @@ packages: cpu: [arm64] os: [android] + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + lightningcss-darwin-arm64@1.32.0: resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + lightningcss-darwin-x64@1.32.0: resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + lightningcss-freebsd-x64@1.32.0: resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + lightningcss-linux-arm-gnueabihf@1.32.0: resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + lightningcss-linux-arm64-gnu@1.32.0: resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} @@ -9113,6 +9737,13 @@ packages: os: [linux] libc: [glibc] + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} @@ -9120,6 +9751,13 @@ packages: os: [linux] libc: [musl] + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} @@ -9127,6 +9765,13 @@ packages: os: [linux] libc: [glibc] + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} @@ -9134,22 +9779,45 @@ packages: os: [linux] libc: [musl] + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + lightningcss-win32-x64-msvc@1.32.0: resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + lightningcss@1.32.0: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -9278,6 +9946,9 @@ packages: magicast@0.5.2: resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} + magicast@0.5.4: + resolution: {integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -9395,6 +10066,10 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + meriyah@6.1.4: + resolution: {integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==} + engines: {node: '>=18.0.0'} + mermaid@11.13.0: resolution: {integrity: sha512-fEnci+Immw6lKMFI8sqzjlATTyjLkRa6axrEgLV2yHTfv8r+h1wjFbV6xeRtd4rUV1cS4EpR9rwp3Rci7TRWDw==} @@ -9637,6 +10312,9 @@ packages: mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -10029,6 +10707,10 @@ packages: resolution: {integrity: sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==} engines: {node: '>=20'} + ora@9.4.1: + resolution: {integrity: sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==} + engines: {node: '>=20'} + ordered-binary@1.6.1: resolution: {integrity: sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==} @@ -10039,9 +10721,33 @@ packages: resolution: {integrity: sha512-WyPWZlcIm+Fkte63FGfgFB8mAAk33aH9h5N9lphXVOHSXEBFFsmYdOBedVKly363aWABjZdaj/m9lBfEY4wt+w==} engines: {node: ^20.19.0 || >=22.12.0} + oxc-parser@0.143.0: + resolution: {integrity: sha512-ov0NzaDCOInknS7mP1cwKdJERt3utPW8ldjtdUXQ8Ty0GEFD08wk422vCUN0d7pST6kqtV7dxoI9w1Zi0l/9TA==} + engines: {node: ^20.19.0 || >=22.12.0} + oxc-resolver@11.19.1: resolution: {integrity: sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg==} + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} + + oxlint-plugin-react-doctor@0.9.12: + resolution: {integrity: sha512-BplcCUU/tGByFGgY1YIax6evUmjk0K8zOGGrdPs3A3dqamrzjUvVuJdYpM1Ftyt/B5fFx6+VwRrWi3YZbIz4VQ==} + engines: {node: ^20.19.0 || >=22.13.0} + + oxlint@1.77.0: + resolution: {integrity: sha512-qnGh8XJHaQ0dprrDXNQZgS0FgjI6v+V3+X8DwmaV++5Aamy6jGKfDdQ1TUvhUxtmKFAbEf4/WeO5QZX+5WSngg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=7.0.2001' + vite-plus: '*' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + vite-plus: + optional: true + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -10384,6 +11090,10 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -10443,11 +11153,25 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + react-doctor@0.9.12: + resolution: {integrity: sha512-H7RNg13RYKwpQvi3+O3IkSj8pAD1pGTxSetxu7aOwXX3wmF+BydCLDiWxkPT9Pq7bIMHjuJ0taSZLsxEjlNjcA==} + engines: {node: ^20.19.0 || >=22.13.0} + hasBin: true + react-dom@19.2.6: resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} peerDependencies: react: ^19.2.6 + react-grab@0.2.0: + resolution: {integrity: sha512-ohhsfXD4qN0j6cMQd56aaVJBPDF3kUdviF/Od1Eak/rEIXQ3svQ4gjkwTfuTZwTBnxHRL16p9JqdlVQO5nUHqA==} + hasBin: true + peerDependencies: + react: '>=17.0.0' + peerDependenciesMeta: + react: + optional: true + react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -10457,6 +11181,17 @@ packages: react-is@19.2.6: resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==} + react-scan@0.5.7: + resolution: {integrity: sha512-KRlq734yN6q/f2CZmZi9CWHuiqSzoLhPFLtcJOL6XM4lR54myyFcY81pG9QOwj+eBC1hIHm5n+Ntbtqiilu8Rg==} + hasBin: true + peerDependencies: + esbuild: '>=0.18.0' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + esbuild: + optional: true + react@19.2.6: resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} engines: {node: '>=0.10.0'} @@ -10586,6 +11321,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -10751,6 +11490,9 @@ packages: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} + semifies@1.0.0: + resolution: {integrity: sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -10916,6 +11658,9 @@ packages: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + size-limit@11.2.0: resolution: {integrity: sha512-2kpQq2DD/pRpx3Tal/qRW1SYwcIeQ0iq8li5CJHQgOC+FtPn2BVmuDtzUCgNnpCrbgtfEHqh+iWzxK+Tq6C+RQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -11072,6 +11817,10 @@ packages: resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} engines: {node: '>=18'} + stdin-discarder@0.3.2: + resolution: {integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==} + engines: {node: '>=18'} + streamdown@1.6.11: resolution: {integrity: sha512-Y38fwRx5kCKTluwM+Gf27jbbi9q6Qy+WC9YrC1YbCpMkktT3PsRBJHMWiqYeF8y/JzLpB1IzDoeaB6qkQEDnAA==} peerDependencies: @@ -11143,6 +11892,12 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + stubborn-fs@2.0.0: + resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==} + + stubborn-utils@1.0.2: + resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==} + style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -11259,6 +12014,10 @@ packages: resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} + tinyexec@1.3.0: + resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -11467,6 +12226,10 @@ packages: ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} + ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} @@ -12137,6 +12900,9 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + when-exit@2.1.5: + resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -12281,6 +13047,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -12309,6 +13080,9 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} + yoga-layout@3.2.1: + resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} + youch-core@0.3.3: resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} @@ -12499,7 +13273,7 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular/build@21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)': + '@angular/build@21.2.10(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(@angular/compiler@21.2.12)(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(@angular/platform-browser@21.2.12(@angular/common@21.2.12(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2)))(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(ng-packagr@21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(tailwindcss@4.3.0)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.10(chokidar@5.0.0) @@ -12509,7 +13283,7 @@ snapshots: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 '@inquirer/confirm': 5.1.21(@types/node@22.19.15) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) beasties: 0.4.1 browserslist: 4.28.2 esbuild: 0.27.3 @@ -12522,7 +13296,7 @@ snapshots: parse5-html-rewriting-stream: 8.0.0 picomatch: 4.0.4 piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + rolldown: 1.0.0-rc.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) sass: 1.97.3 semver: 7.7.4 source-map-support: 0.5.21 @@ -12530,7 +13304,7 @@ snapshots: tslib: 2.8.1 typescript: 5.9.3 undici: 7.24.4 - vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) watchpack: 2.5.1 optionalDependencies: '@angular/core': 21.2.12(@angular/compiler@21.2.12)(rxjs@7.8.2) @@ -12540,7 +13314,7 @@ snapshots: ng-packagr: 21.2.3(@angular/compiler-cli@21.2.12(@angular/compiler@21.2.12)(typescript@5.9.3))(tailwindcss@4.3.0)(tslib@2.8.1)(typescript@5.9.3) postcss: 8.5.14 tailwindcss: 4.3.0 - vitest: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -12649,6 +13423,30 @@ snapshots: optionalDependencies: zod: 4.4.3 + '@apm-js-collab/code-transformer-bundler-plugins@0.7.4': + dependencies: + '@apm-js-collab/code-transformer': 0.18.1 + es-module-lexer: 2.3.1 + magic-string: 0.30.21 + module-details-from-path: 1.0.4 + + '@apm-js-collab/code-transformer@0.18.1': + dependencies: + '@types/estree': 1.0.9 + astring: 1.9.0 + esquery: 1.7.0 + meriyah: 6.1.4 + semifies: 1.0.0 + source-map: 0.6.1 + + '@apm-js-collab/tracing-hooks@0.13.0': + dependencies: + '@apm-js-collab/code-transformer': 0.18.1 + debug: 4.4.3 + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + '@asamuzakjp/css-color@4.1.2': dependencies: '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) @@ -12667,6 +13465,8 @@ snapshots: '@asamuzakjp/nwsapi@2.3.9': {} + '@astrojs/compiler@4.0.0': {} + '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -12797,8 +13597,12 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helpers@7.29.2': @@ -12810,6 +13614,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.8': + dependencies: + '@babel/types': 7.29.8 + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -12901,6 +13709,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@biomejs/biome@2.2.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 2.2.4 @@ -13123,12 +13936,12 @@ snapshots: optionalDependencies: workerd: 1.20260507.1 - '@cloudflare/vite-plugin@1.36.3(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))(workerd@1.20260507.1)(wrangler@4.90.0)': + '@cloudflare/vite-plugin@1.36.3(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.9.0))(workerd@1.20260507.1)(wrangler@4.90.0)': dependencies: '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260507.1) miniflare: 4.20260507.1 unenv: 2.0.0-rc.24 - 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: 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.9.0) wrangler: 4.90.0 ws: 8.18.0 transitivePeerDependencies: @@ -13201,6 +14014,12 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.11.2': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 @@ -13210,6 +14029,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 @@ -13712,6 +14536,8 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@iarna/toml@2.2.5': {} + '@iconify/types@2.0.0': {} '@iconify/utils@3.1.0': @@ -14409,10 +15235,10 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 '@tybys/wasm-util': 0.10.1 optional: true @@ -14423,6 +15249,13 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 + optional: true + '@neodrag/core@3.0.0-next.11': {} '@neodrag/solid@3.0.0-next.11(@neodrag/core@3.0.0-next.11)(solid-js@1.9.12)': @@ -14547,144 +15380,364 @@ snapshots: '@oozcitak/infra': 2.0.2 '@oozcitak/util': 10.0.0 - '@oozcitak/util@10.0.0': {} + '@oozcitak/util@10.0.0': {} + + '@opentelemetry/api-logs@0.220.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api@1.9.1': {} + + '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.220.0 + import-in-the-middle: 3.3.3 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/semantic-conventions@1.43.0': {} + + '@oxc-parser/binding-android-arm-eabi@0.120.0': + optional: true + + '@oxc-parser/binding-android-arm-eabi@0.143.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.120.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.143.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.120.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.143.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.120.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.143.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.120.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.143.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.120.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.143.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.120.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.143.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.120.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.143.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.120.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.143.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.120.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.120.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.143.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.120.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.143.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.120.0(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.120.0': + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.143.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.120.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.143.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.120.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.143.0': + optional: true + + '@oxc-project/types@0.113.0': {} + + '@oxc-project/types@0.120.0': {} + + '@oxc-project/types@0.129.0': {} + + '@oxc-project/types@0.137.0': {} + + '@oxc-project/types@0.143.0': {} + + '@oxc-resolver/binding-android-arm-eabi@11.19.1': + optional: true + + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + optional: true + + '@oxc-resolver/binding-android-arm64@11.19.1': + optional: true + + '@oxc-resolver/binding-android-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.19.1': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.19.1': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.24.2': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.19.1': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.19.1': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.19.1': + optional: true - '@oxc-parser/binding-android-arm-eabi@0.120.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': optional: true - '@oxc-parser/binding-android-arm64@0.120.0': + '@oxc-resolver/binding-linux-arm64-musl@11.19.1': optional: true - '@oxc-parser/binding-darwin-arm64@0.120.0': + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': optional: true - '@oxc-parser/binding-darwin-x64@0.120.0': + '@oxc-resolver/binding-linux-ppc64-gnu@11.19.1': optional: true - '@oxc-parser/binding-freebsd-x64@0.120.0': + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.120.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.19.1': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.120.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.120.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.19.1': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.120.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.120.0': + '@oxc-resolver/binding-linux-s390x-gnu@11.19.1': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.120.0': + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.120.0': + '@oxc-resolver/binding-linux-x64-gnu@11.19.1': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.120.0': + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.120.0': + '@oxc-resolver/binding-linux-x64-musl@11.19.1': optional: true - '@oxc-parser/binding-linux-x64-musl@0.120.0': + '@oxc-resolver/binding-linux-x64-musl@11.24.2': optional: true - '@oxc-parser/binding-openharmony-arm64@0.120.0': + '@oxc-resolver/binding-openharmony-arm64@11.19.1': optional: true - '@oxc-parser/binding-wasm32-wasi@0.120.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.120.0': + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.120.0': + '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.120.0': + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': optional: true - '@oxc-project/types@0.113.0': {} - - '@oxc-project/types@0.120.0': {} - - '@oxc-project/types@0.129.0': {} + '@oxc-resolver/binding-win32-ia32-msvc@11.19.1': + optional: true - '@oxc-project/types@0.137.0': {} + '@oxc-resolver/binding-win32-x64-msvc@11.19.1': + optional: true - '@oxc-resolver/binding-android-arm-eabi@11.19.1': + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': optional: true - '@oxc-resolver/binding-android-arm64@11.19.1': + '@oxlint/binding-android-arm-eabi@1.77.0': optional: true - '@oxc-resolver/binding-darwin-arm64@11.19.1': + '@oxlint/binding-android-arm64@1.77.0': optional: true - '@oxc-resolver/binding-darwin-x64@11.19.1': + '@oxlint/binding-darwin-arm64@1.77.0': optional: true - '@oxc-resolver/binding-freebsd-x64@11.19.1': + '@oxlint/binding-darwin-x64@1.77.0': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1': + '@oxlint/binding-freebsd-x64@1.77.0': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.19.1': + '@oxlint/binding-linux-arm-gnueabihf@1.77.0': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.19.1': + '@oxlint/binding-linux-arm-musleabihf@1.77.0': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.19.1': + '@oxlint/binding-linux-arm64-gnu@1.77.0': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.19.1': + '@oxlint/binding-linux-arm64-musl@1.77.0': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.19.1': + '@oxlint/binding-linux-ppc64-gnu@1.77.0': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.19.1': + '@oxlint/binding-linux-riscv64-gnu@1.77.0': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.19.1': + '@oxlint/binding-linux-riscv64-musl@1.77.0': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.19.1': + '@oxlint/binding-linux-s390x-gnu@1.77.0': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.19.1': + '@oxlint/binding-linux-x64-gnu@1.77.0': optional: true - '@oxc-resolver/binding-openharmony-arm64@11.19.1': + '@oxlint/binding-linux-x64-musl@1.77.0': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': - dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@oxlint/binding-openharmony-arm64@1.77.0': optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': + '@oxlint/binding-win32-arm64-msvc@1.77.0': optional: true - '@oxc-resolver/binding-win32-ia32-msvc@11.19.1': + '@oxlint/binding-win32-ia32-msvc@1.77.0': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.19.1': + '@oxlint/binding-win32-x64-msvc@1.77.0': optional: true '@package-json/types@0.0.12': {} @@ -14786,25 +15839,32 @@ 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@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.9.0))': 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@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.9.0)) '@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 magic-string: 0.30.21 picocolors: 1.1.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-prerender-plugin: 0.5.13(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: 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.9.0) + vite-prerender-plugin: 0.5.13(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.9.0)) zimmerframe: 1.1.4 transitivePeerDependencies: - preact - rollup - supports-color + '@preact/signals-core@1.14.4': {} + + '@preact/signals@2.11.1(preact@10.29.1)': + dependencies: + '@preact/signals-core': 1.14.4 + preact: 10.29.1 + '@prefresh/babel-plugin@0.5.3': {} '@prefresh/core@1.5.9(preact@10.29.1)': @@ -14813,7 +15873,7 @@ snapshots: '@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@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.9.0))': dependencies: '@babel/core': 7.29.0 '@prefresh/babel-plugin': 0.5.3 @@ -14821,7 +15881,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 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) + 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.9.0) transitivePeerDependencies: - supports-color @@ -14850,6 +15910,17 @@ snapshots: '@publint/pack@0.1.4': {} + '@react-grab/cli@0.2.0': + dependencies: + agent-install: 0.0.6 + commander: 14.0.3 + ignore: 7.0.5 + ora: 9.4.1 + package-manager-detector: 1.6.0 + picocolors: 1.1.1 + prompts: 2.4.2 + tinyexec: 1.3.0 + '@rolldown/binding-android-arm64@1.0.0': optional: true @@ -14959,9 +16030,9 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -15320,6 +16391,60 @@ snapshots: transitivePeerDependencies: - chokidar + '@sentry/conventions@0.16.0': {} + + '@sentry/core@10.70.0': + dependencies: + '@sentry/conventions': 0.16.0 + + '@sentry/node-core@10.70.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))': + dependencies: + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.70.0 + '@sentry/opentelemetry': 10.70.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + import-in-the-middle: 3.3.3 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.220.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + + '@sentry/node@10.70.0(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.220.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.70.0 + '@sentry/node-core': 10.70.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + '@sentry/opentelemetry': 10.70.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + '@sentry/server-utils': 10.70.0 + import-in-the-middle: 3.3.3 + transitivePeerDependencies: + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' + - supports-color + + '@sentry/opentelemetry@10.70.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.70.0 + + '@sentry/server-utils@10.70.0': + dependencies: + '@apm-js-collab/code-transformer-bundler-plugins': 0.7.4 + '@apm-js-collab/tracing-hooks': 0.13.0 + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.70.0 + meriyah: 6.1.4 + transitivePeerDependencies: + - supports-color + + '@shaderfrog/glsl-parser@7.0.1': {} + '@shikijs/core@1.29.2': dependencies: '@shikijs/engine-javascript': 1.29.2 @@ -15543,11 +16668,11 @@ snapshots: dependencies: solid-js: 1.9.12 - '@solidjs/start@1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(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))': + '@solidjs/start@1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))(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.9.0))': dependencies: - '@tanstack/server-functions-plugin': 1.121.21(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)) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/server-functions-plugin': 1.121.21(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.9.0)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) cookie-es: 2.0.0 defu: 6.1.4 error-stack-parser: 2.1.4 @@ -15559,8 +16684,8 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.1.0(solid-js@1.9.12) tinyglobby: 0.2.16 - vinxi: 0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-solid: 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)) + vinxi: 0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) + vite-plugin-solid: 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.9.0)) transitivePeerDependencies: - '@testing-library/jest-dom' - solid-js @@ -15590,22 +16715,22 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.55.1(@typescript-eslint/types@8.58.0))(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)))(svelte@5.55.1(@typescript-eslint/types@8.58.0))(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))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.55.1(@typescript-eslint/types@8.67.0))(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.9.0)))(svelte@5.55.1(@typescript-eslint/types@8.67.0))(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.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.55.1(@typescript-eslint/types@8.58.0))(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)) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.55.1(@typescript-eslint/types@8.67.0))(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.9.0)) obug: 2.1.3 - svelte: 5.55.1(@typescript-eslint/types@8.58.0) - 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) + svelte: 5.55.1(@typescript-eslint/types@8.67.0) + 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.9.0) - '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.55.1(@typescript-eslint/types@8.58.0))(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))': + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.55.1(@typescript-eslint/types@8.67.0))(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.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.55.1(@typescript-eslint/types@8.58.0))(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)))(svelte@5.55.1(@typescript-eslint/types@8.58.0))(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)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.55.1(@typescript-eslint/types@8.67.0))(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.9.0)))(svelte@5.55.1(@typescript-eslint/types@8.67.0))(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.9.0)) deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.3 - svelte: 5.55.1(@typescript-eslint/types@8.58.0) - 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) - vitefu: 1.1.2(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)) + svelte: 5.55.1(@typescript-eslint/types@8.67.0) + 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.9.0) + vitefu: 1.1.2(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.9.0)) '@tailwindcss/node@4.3.0': dependencies: @@ -15668,31 +16793,31 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 - '@tailwindcss/vite@4.3.0(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))': + '@tailwindcss/vite@4.3.0(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.9.0))': dependencies: '@tailwindcss/node': 4.3.0 '@tailwindcss/oxide': 4.3.0 tailwindcss: 4.3.0 - 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: 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.9.0) - '@tanstack/ai-anthropic@0.8.6(@tanstack/ai@0.16.0)(zod@4.4.3)': + '@tanstack/ai-anthropic@0.8.6(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.71.2(zod@4.4.3) - '@tanstack/ai': 0.16.0 + '@tanstack/ai': 0.16.0(@opentelemetry/api@1.9.1) '@tanstack/ai-utils': 0.2.0 zod: 4.4.3 - '@tanstack/ai-client@0.9.1': + '@tanstack/ai-client@0.9.1(@opentelemetry/api@1.9.1)': dependencies: - '@tanstack/ai': 0.16.0 - '@tanstack/ai-event-client': 0.3.0(@tanstack/ai@0.16.0) + '@tanstack/ai': 0.16.0(@opentelemetry/api@1.9.1) + '@tanstack/ai-event-client': 0.3.0(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1)) 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(@opentelemetry/api@1.9.1)(@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))': dependencies: - '@tanstack/ai': 0.16.0 - '@tanstack/ai-event-client': 0.3.0(@tanstack/ai@0.16.0) + '@tanstack/ai': 0.16.0(@opentelemetry/api@1.9.1) + '@tanstack/ai-event-client': 0.3.0(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1)) '@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)) goober: 2.1.18(csstype@3.2.3) @@ -15705,15 +16830,15 @@ snapshots: - react - vue - '@tanstack/ai-event-client@0.3.0(@tanstack/ai@0.16.0)': + '@tanstack/ai-event-client@0.3.0(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))': dependencies: - '@tanstack/ai': 0.16.0 + '@tanstack/ai': 0.16.0(@opentelemetry/api@1.9.1) '@tanstack/devtools-event-client': 0.4.3 - '@tanstack/ai-gemini@0.10.3(@modelcontextprotocol/sdk@1.26.0(zod@4.4.3))(@tanstack/ai@0.16.0)': + '@tanstack/ai-gemini@0.10.3(@modelcontextprotocol/sdk@1.26.0(zod@4.4.3))(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))': dependencies: '@google/genai': 1.47.0(@modelcontextprotocol/sdk@1.26.0(zod@4.4.3)) - '@tanstack/ai': 0.16.0 + '@tanstack/ai': 0.16.0(@opentelemetry/api@1.9.1) '@tanstack/ai-utils': 0.2.0 transitivePeerDependencies: - '@modelcontextprotocol/sdk' @@ -15721,27 +16846,27 @@ snapshots: - supports-color - utf-8-validate - '@tanstack/ai-ollama@0.6.13(@tanstack/ai@0.16.0)': + '@tanstack/ai-ollama@0.6.13(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))': dependencies: - '@tanstack/ai': 0.16.0 + '@tanstack/ai': 0.16.0(@opentelemetry/api@1.9.1) '@tanstack/ai-utils': 0.2.0 ollama: 0.6.3 - '@tanstack/ai-openai@0.8.5(@tanstack/ai-client@0.9.1)(@tanstack/ai@0.16.0)(ws@8.20.0)(zod@4.4.3)': + '@tanstack/ai-openai@0.8.5(@tanstack/ai-client@0.9.1(@opentelemetry/api@1.9.1))(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))(ws@8.20.0)(zod@4.4.3)': dependencies: - '@tanstack/ai': 0.16.0 - '@tanstack/ai-client': 0.9.1 + '@tanstack/ai': 0.16.0(@opentelemetry/api@1.9.1) + '@tanstack/ai-client': 0.9.1(@opentelemetry/api@1.9.1) '@tanstack/ai-utils': 0.2.0 - '@tanstack/openai-base': 0.2.1(@tanstack/ai@0.16.0)(ws@8.20.0)(zod@4.4.3) + '@tanstack/openai-base': 0.2.1(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))(ws@8.20.0)(zod@4.4.3) openai: 6.33.0(ws@8.20.0)(zod@4.4.3) zod: 4.4.3 transitivePeerDependencies: - ws - '@tanstack/ai-react@0.8.2(@tanstack/ai@0.16.0)(@types/react@19.2.14)(react@19.2.6)': + '@tanstack/ai-react@0.8.2(@opentelemetry/api@1.9.1)(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))(@types/react@19.2.14)(react@19.2.6)': dependencies: - '@tanstack/ai': 0.16.0 - '@tanstack/ai-client': 0.9.1 + '@tanstack/ai': 0.16.0(@opentelemetry/api@1.9.1) + '@tanstack/ai-client': 0.9.1(@opentelemetry/api@1.9.1) '@types/react': 19.2.14 react: 19.2.6 transitivePeerDependencies: @@ -15749,11 +16874,13 @@ snapshots: '@tanstack/ai-utils@0.2.0': {} - '@tanstack/ai@0.16.0': + '@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1)': dependencies: '@ag-ui/core': 0.0.49 - '@tanstack/ai-event-client': 0.3.0(@tanstack/ai@0.16.0) + '@tanstack/ai-event-client': 0.3.0(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1)) partial-json: 0.1.7 + optionalDependencies: + '@opentelemetry/api': 1.9.1 '@tanstack/devtools-event-client@0.3.5': {} @@ -15784,7 +16911,7 @@ snapshots: solid-js: 1.9.12 vue: 3.5.34(typescript@5.9.3) - '@tanstack/directive-functions-plugin@1.121.21(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/directive-functions-plugin@1.121.21(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.9.0))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -15793,7 +16920,7 @@ snapshots: '@tanstack/router-utils': 1.161.8 babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 - 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: 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.9.0) transitivePeerDependencies: - supports-color @@ -15846,9 +16973,9 @@ snapshots: dependencies: remove-accents: 0.5.0 - '@tanstack/openai-base@0.2.1(@tanstack/ai@0.16.0)(ws@8.20.0)(zod@4.4.3)': + '@tanstack/openai-base@0.2.1(@tanstack/ai@0.16.0(@opentelemetry/api@1.9.1))(ws@8.20.0)(zod@4.4.3)': dependencies: - '@tanstack/ai': 0.16.0 + '@tanstack/ai': 0.16.0(@opentelemetry/api@1.9.1) '@tanstack/ai-utils': 0.2.0 openai: 6.33.0(ws@8.20.0)(zod@4.4.3) transitivePeerDependencies: @@ -15866,9 +16993,9 @@ 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(@opentelemetry/api@1.9.1)(@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))': 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/ai-devtools-core': 0.3.27(@opentelemetry/api@1.9.1)(@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)) '@types/react': 19.2.14 react: 19.2.6 @@ -15945,7 +17072,7 @@ snapshots: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - '@tanstack/react-start-rsc@0.0.44(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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/react-start-rsc@0.0.44(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0))': dependencies: '@tanstack/react-router': 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start-server': 1.166.52(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -15953,7 +17080,7 @@ snapshots: '@tanstack/router-utils': 1.161.8 '@tanstack/start-client-core': 1.168.2 '@tanstack/start-fn-stubs': 1.161.6 - '@tanstack/start-plugin-core': 1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.5(srvx@0.11.15))(vite-plugin-solid@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)))(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/start-plugin-core': 1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.5(srvx@0.11.15))(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/start-server-core': 1.167.30(crossws@0.4.5(srvx@0.11.15)) '@tanstack/start-storage-context': 1.166.35 pathe: 2.0.3 @@ -15967,7 +17094,7 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/react-start-rsc@0.0.44(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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/react-start-rsc@0.0.44(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0))': dependencies: '@tanstack/react-router': 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start-server': 1.166.52(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -15975,7 +17102,7 @@ snapshots: '@tanstack/router-utils': 1.161.8 '@tanstack/start-client-core': 1.168.2 '@tanstack/start-fn-stubs': 1.161.6 - '@tanstack/start-plugin-core': 1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.6(srvx@0.11.16))(vite-plugin-solid@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)))(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/start-plugin-core': 1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.6(srvx@0.11.16))(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/start-server-core': 1.167.30(crossws@0.4.6(srvx@0.11.16)) '@tanstack/start-storage-context': 1.166.35 pathe: 2.0.3 @@ -16013,21 +17140,21 @@ snapshots: transitivePeerDependencies: - crossws - '@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0))': dependencies: '@tanstack/react-router': 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start-client': 1.166.48(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@tanstack/react-start-rsc': 0.0.44(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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/react-start-rsc': 0.0.44(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/react-start-server': 1.166.52(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/router-utils': 1.161.8 '@tanstack/start-client-core': 1.168.2 - '@tanstack/start-plugin-core': 1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.5(srvx@0.11.15))(vite-plugin-solid@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)))(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/start-plugin-core': 1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.5(srvx@0.11.15))(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/start-server-core': 1.167.30(crossws@0.4.5(srvx@0.11.15)) pathe: 2.0.3 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) optionalDependencies: - 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: 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.9.0) transitivePeerDependencies: - '@rspack/core' - crossws @@ -16036,21 +17163,21 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/react-start@1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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/react-start@1.167.65(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0))': dependencies: '@tanstack/react-router': 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-start-client': 1.166.48(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@tanstack/react-start-rsc': 0.0.44(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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)))(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/react-start-rsc': 0.0.44(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/react-start-server': 1.166.52(crossws@0.4.6(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/router-utils': 1.161.8 '@tanstack/start-client-core': 1.168.2 - '@tanstack/start-plugin-core': 1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.6(srvx@0.11.16))(vite-plugin-solid@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)))(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/start-plugin-core': 1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.6(srvx@0.11.16))(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/start-server-core': 1.167.30(crossws@0.4.6(srvx@0.11.16)) pathe: 2.0.3 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) optionalDependencies: - 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: 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.9.0) transitivePeerDependencies: - '@rspack/core' - crossws @@ -16094,7 +17221,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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/router-plugin@1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -16111,8 +17238,8 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - 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-plugin-solid: 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)) + 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.9.0) + vite-plugin-solid: 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.9.0)) transitivePeerDependencies: - supports-color @@ -16135,7 +17262,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.121.21(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/server-functions-plugin@1.121.21(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.9.0))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -16144,7 +17271,7 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@tanstack/directive-functions-plugin': 1.121.21(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/directive-functions-plugin': 1.121.21(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.9.0)) babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -16191,7 +17318,7 @@ snapshots: '@tanstack/start-fn-stubs@1.161.6': {} - '@tanstack/start-plugin-core@1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.5(srvx@0.11.15))(vite-plugin-solid@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)))(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/start-plugin-core@1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.5(srvx@0.11.15))(vite-plugin-solid@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.9.0)))(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.9.0))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.29.0 @@ -16199,7 +17326,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.169.2 '@tanstack/router-generator': 1.166.42 - '@tanstack/router-plugin': 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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/router-plugin': 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/router-utils': 1.161.8 '@tanstack/start-client-core': 1.168.2 '@tanstack/start-server-core': 1.167.30(crossws@0.4.5(srvx@0.11.15)) @@ -16213,11 +17340,11 @@ snapshots: srvx: 0.11.15 tinyglobby: 0.2.16 ufo: 1.6.3 - vitefu: 1.1.2(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)) + vitefu: 1.1.2(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.9.0)) xmlbuilder2: 4.0.3 zod: 3.25.76 optionalDependencies: - 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: 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.9.0) transitivePeerDependencies: - '@tanstack/react-router' - crossws @@ -16225,7 +17352,7 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/start-plugin-core@1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.6(srvx@0.11.16))(vite-plugin-solid@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)))(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/start-plugin-core@1.169.20(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(crossws@0.4.6(srvx@0.11.16))(vite-plugin-solid@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.9.0)))(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.9.0))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.29.0 @@ -16233,7 +17360,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.169.2 '@tanstack/router-generator': 1.166.42 - '@tanstack/router-plugin': 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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)))(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/router-plugin': 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite-plugin-solid@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.9.0)))(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.9.0)) '@tanstack/router-utils': 1.161.8 '@tanstack/start-client-core': 1.168.2 '@tanstack/start-server-core': 1.167.30(crossws@0.4.6(srvx@0.11.16)) @@ -16247,11 +17374,11 @@ snapshots: srvx: 0.11.15 tinyglobby: 0.2.16 ufo: 1.6.3 - vitefu: 1.1.2(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)) + vitefu: 1.1.2(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.9.0)) xmlbuilder2: 4.0.3 zod: 3.25.76 optionalDependencies: - 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: 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.9.0) transitivePeerDependencies: - '@tanstack/react-router' - crossws @@ -16301,13 +17428,13 @@ snapshots: '@tanstack/virtual-file-routes@1.161.7': {} - '@tanstack/vite-config@0.4.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(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/vite-config@0.4.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(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.9.0))': dependencies: rollup-plugin-preserve-directives: 0.4.0(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-plugin-dts: 4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(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-plugin-externalize-deps: 0.10.0(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-tsconfig-paths: 5.1.4(typescript@5.9.3)(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: 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.9.0) + vite-plugin-dts: 4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(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.9.0)) + vite-plugin-externalize-deps: 0.10.0(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.9.0)) + vite-tsconfig-paths: 5.1.4(typescript@5.9.3)(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.9.0)) transitivePeerDependencies: - '@types/node' - rollup @@ -16375,6 +17502,11 @@ snapshots: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 @@ -16729,6 +17861,8 @@ snapshots: '@typescript-eslint/types@8.58.0': {} + '@typescript-eslint/types@8.67.0': {} + '@typescript-eslint/typescript-estree@8.58.0(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.58.0(typescript@5.9.3) @@ -16865,7 +17999,7 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@babel/parser': 7.29.3 acorn: 8.16.0 @@ -16876,34 +18010,34 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vinxi: 0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) - '@vinxi/server-components@0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vinxi/server-components@0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) acorn: 8.16.0 acorn-loose: 8.5.2 acorn-typescript: 1.4.13(acorn@8.16.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vinxi: 0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))': dependencies: - vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) - '@vitejs/plugin-react@6.0.1(babel-plugin-react-compiler@1.0.0)(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))': + '@vitejs/plugin-react@6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - 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: 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.9.0) optionalDependencies: babel-plugin-react-compiler: 1.0.0 - '@vitejs/plugin-vue@6.0.6(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))(vue@3.5.34(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.6(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.9.0))(vue@3.5.34(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.13 - 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: 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.9.0) vue: 3.5.34(typescript@5.9.3) '@vitest/expect@3.2.4': @@ -16914,13 +18048,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -17087,6 +18221,24 @@ snapshots: agent-base@7.1.4: {} + agent-install@0.0.5: + dependencies: + '@iarna/toml': 2.2.5 + commander: 14.0.3 + jsonc-parser: 3.3.1 + picocolors: 1.1.1 + prompts: 2.4.2 + yaml: 2.9.0 + + agent-install@0.0.6: + dependencies: + '@iarna/toml': 2.2.5 + commander: 14.0.3 + jsonc-parser: 3.3.1 + picocolors: 1.1.1 + prompts: 2.4.2 + yaml: 2.9.0 + ajv-draft-04@1.0.0(ajv@8.13.0): optionalDependencies: ajv: 8.13.0 @@ -17242,6 +18394,11 @@ snapshots: asynckit@0.4.0: {} + atomically@2.1.1: + dependencies: + stubborn-fs: 2.0.0 + when-exit: 2.1.5 + axe-core@4.11.4: {} axios@1.15.0: @@ -17361,6 +18518,14 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 + bippy@0.5.43(react@19.2.6): + dependencies: + react: 19.2.6 + + bippy@0.6.1(react@19.2.6): + dependencies: + react: 19.2.6 + birecord@0.1.1: {} birpc@2.9.0: {} @@ -17618,6 +18783,8 @@ snapshots: citty@0.2.1: {} + cjs-module-lexer@2.2.1: {} + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 @@ -17729,6 +18896,18 @@ snapshots: concat-map@0.0.1: {} + conf@15.1.0: + dependencies: + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + atomically: 2.1.1 + debounce-fn: 6.0.0 + dot-prop: 10.1.0 + env-paths: 3.0.0 + json-schema-typed: 8.0.2 + semver: 7.7.4 + uint8array-extras: 1.5.0 + confbox@0.1.8: {} confbox@0.2.4: {} @@ -18051,12 +19230,16 @@ snapshots: dayjs@1.11.20: {} - db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)): + db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)): optionalDependencies: - drizzle-orm: 0.45.2(pg@8.20.0) + drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0) de-indent@1.0.2: {} + debounce-fn@6.0.0: + dependencies: + mimic-function: 5.0.1 + debounce@1.2.1: {} debug@2.6.9: @@ -18112,6 +19295,15 @@ snapshots: dequal@2.0.3: {} + deslop-js@0.9.12: + dependencies: + '@oxc-project/types': 0.143.0 + fast-glob: 3.3.3 + minimatch: 10.2.5 + oxc-parser: 0.143.0 + oxc-resolver: 11.24.2 + typescript: 5.9.3 + destr@2.0.5: {} destroy@1.2.0: {} @@ -18187,8 +19379,9 @@ snapshots: esbuild: 0.25.12 tsx: 4.21.0 - drizzle-orm@0.45.2(pg@8.20.0): + drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0): optionalDependencies: + '@opentelemetry/api': 1.9.1 pg: 8.20.0 dunder-proto@1.0.1: @@ -18250,6 +19443,8 @@ snapshots: env-paths@2.2.1: {} + env-paths@3.0.0: {} + env-runner@0.1.14(wrangler@4.90.0): dependencies: crossws: 0.4.5(srvx@0.11.16) @@ -18289,6 +19484,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.3.1: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -18728,11 +19925,11 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.7(@typescript-eslint/types@8.58.0): + esrap@2.2.7(@typescript-eslint/types@8.67.0): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 optionalDependencies: - '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/types': 8.67.0 esrecurse@4.3.0: dependencies: @@ -19537,6 +20734,12 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-in-the-middle@3.3.3: + dependencies: + cjs-module-lexer: 2.2.1 + es-module-lexer: 2.3.1 + module-details-from-path: 1.0.4 + import-lazy@4.0.0: {} imurmurhash@0.1.4: {} @@ -19828,11 +21031,13 @@ snapshots: khroma@2.1.0: {} + kleur@3.0.3: {} + kleur@4.1.5: {} klona@2.0.6: {} - knip@5.88.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.15)(typescript@5.9.3): + knip@5.88.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@22.19.15)(typescript@5.9.3): dependencies: '@nodelib/fs.walk': 1.2.8 '@types/node': 22.19.15 @@ -19840,7 +21045,7 @@ snapshots: formatly: 0.3.0 jiti: 2.7.0 minimist: 1.2.8 - oxc-resolver: 11.19.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + oxc-resolver: 11.19.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) picocolors: 1.1.1 picomatch: 4.0.4 smol-toml: 1.6.1 @@ -19899,36 +21104,69 @@ snapshots: lightningcss-android-arm64@1.32.0: optional: true + lightningcss-android-arm64@1.33.0: + optional: true + lightningcss-darwin-arm64@1.32.0: optional: true + lightningcss-darwin-arm64@1.33.0: + optional: true + lightningcss-darwin-x64@1.32.0: optional: true + lightningcss-darwin-x64@1.33.0: + optional: true + lightningcss-freebsd-x64@1.32.0: optional: true + lightningcss-freebsd-x64@1.33.0: + optional: true + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + lightningcss-linux-arm64-gnu@1.32.0: optional: true + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + lightningcss-linux-arm64-musl@1.32.0: optional: true + lightningcss-linux-arm64-musl@1.33.0: + optional: true + lightningcss-linux-x64-gnu@1.32.0: optional: true + lightningcss-linux-x64-gnu@1.33.0: + optional: true + lightningcss-linux-x64-musl@1.32.0: optional: true + lightningcss-linux-x64-musl@1.33.0: + optional: true + lightningcss-win32-arm64-msvc@1.32.0: optional: true + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + lightningcss-win32-x64-msvc@1.32.0: optional: true + lightningcss-win32-x64-msvc@1.33.0: + optional: true + lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 @@ -19945,6 +21183,22 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -20102,6 +21356,12 @@ snapshots: '@babel/types': 7.29.0 source-map-js: 1.2.1 + magicast@0.5.4: + dependencies: + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + source-map-js: 1.2.1 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -20349,6 +21609,8 @@ snapshots: merge2@1.4.1: {} + meriyah@6.1.4: {} + mermaid@11.13.0: dependencies: '@braintree/sanitize-url': 7.1.2 @@ -20720,6 +21982,8 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.3 + module-details-from-path@1.0.4: {} + mri@1.2.0: {} mrmime@2.0.1: {} @@ -20816,11 +22080,11 @@ snapshots: rollup: 4.60.1 tailwindcss: 4.3.0 - nitro@3.0.260429-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(miniflare@4.20260507.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)): + nitro@3.0.260429-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(miniflare@4.20260507.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.9.0)): dependencies: consola: 3.4.2 crossws: 0.4.5(srvx@0.11.15) - db0: 0.3.4(drizzle-orm@0.45.2(pg@8.20.0)) + db0: 0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)) env-runner: 0.1.7(miniflare@4.20260507.1) h3: 2.0.1-rc.20(crossws@0.4.5(srvx@0.11.15)) hookable: 6.1.1 @@ -20831,13 +22095,13 @@ snapshots: rolldown: 1.0.0 srvx: 0.11.15 unenv: 2.0.0-rc.24 - unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(ioredis@5.10.1)(lru-cache@11.2.7)(ofetch@2.0.0-alpha.3) + unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(ioredis@5.10.1)(lru-cache@11.2.7)(ofetch@2.0.0-alpha.3) optionalDependencies: dotenv: 17.3.1 giget: 2.0.0 jiti: 2.7.0 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: 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.9.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -20869,11 +22133,11 @@ snapshots: - sqlite3 - uploadthing - nitro@3.0.260610-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(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))(wrangler@4.90.0): + nitro@3.0.260610-beta(chokidar@5.0.0)(dotenv@17.3.1)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(giget@2.0.0)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.7)(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.9.0))(wrangler@4.90.0): dependencies: consola: 3.4.2 crossws: 0.4.6(srvx@0.11.16) - db0: 0.3.4(drizzle-orm@0.45.2(pg@8.20.0)) + db0: 0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)) env-runner: 0.1.14(wrangler@4.90.0) h3: 2.0.1-rc.22(crossws@0.4.6(srvx@0.11.16)) hookable: 6.1.1 @@ -20884,13 +22148,13 @@ snapshots: rolldown: 1.1.2 srvx: 0.11.16 unenv: 2.0.0-rc.24 - unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(ioredis@5.10.1)(lru-cache@11.2.7)(ofetch@2.0.0-alpha.3) + unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(ioredis@5.10.1)(lru-cache@11.2.7)(ofetch@2.0.0-alpha.3) optionalDependencies: dotenv: 17.3.1 giget: 2.0.0 jiti: 2.7.0 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: 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.9.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -20923,7 +22187,7 @@ snapshots: - uploadthing - wrangler - nitropack@2.13.2(drizzle-orm@0.45.2(pg@8.20.0))(rolldown@1.1.2): + nitropack@2.13.2(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(rolldown@1.1.2): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.60.1) @@ -20944,7 +22208,7 @@ snapshots: cookie-es: 2.0.0 croner: 10.0.1 crossws: 0.3.5 - db0: 0.3.4(drizzle-orm@0.45.2(pg@8.20.0)) + db0: 0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)) defu: 6.1.4 destr: 2.0.5 dot-prop: 10.1.0 @@ -20990,7 +22254,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 6.0.2 unplugin-utils: 0.3.1 - unstorage: 1.17.5(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(ioredis@5.10.1) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -21327,12 +22591,23 @@ snapshots: stdin-discarder: 0.3.1 string-width: 8.2.0 + ora@9.4.1: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.2 + string-width: 8.2.0 + ordered-binary@1.6.1: optional: true outdent@0.5.0: {} - oxc-parser@0.120.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1): + oxc-parser@0.120.0(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2): dependencies: '@oxc-project/types': 0.120.0 optionalDependencies: @@ -21352,7 +22627,7 @@ snapshots: '@oxc-parser/binding-linux-x64-gnu': 0.120.0 '@oxc-parser/binding-linux-x64-musl': 0.120.0 '@oxc-parser/binding-openharmony-arm64': 0.120.0 - '@oxc-parser/binding-wasm32-wasi': 0.120.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@oxc-parser/binding-wasm32-wasi': 0.120.0(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) '@oxc-parser/binding-win32-arm64-msvc': 0.120.0 '@oxc-parser/binding-win32-ia32-msvc': 0.120.0 '@oxc-parser/binding-win32-x64-msvc': 0.120.0 @@ -21360,7 +22635,31 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - oxc-resolver@11.19.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1): + oxc-parser@0.143.0: + dependencies: + '@oxc-project/types': 0.143.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.143.0 + '@oxc-parser/binding-android-arm64': 0.143.0 + '@oxc-parser/binding-darwin-arm64': 0.143.0 + '@oxc-parser/binding-darwin-x64': 0.143.0 + '@oxc-parser/binding-freebsd-x64': 0.143.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.143.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.143.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.143.0 + '@oxc-parser/binding-linux-arm64-musl': 0.143.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.143.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.143.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.143.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.143.0 + '@oxc-parser/binding-linux-x64-gnu': 0.143.0 + '@oxc-parser/binding-linux-x64-musl': 0.143.0 + '@oxc-parser/binding-openharmony-arm64': 0.143.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.143.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.143.0 + '@oxc-parser/binding-win32-x64-msvc': 0.143.0 + + oxc-resolver@11.19.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2): optionalDependencies: '@oxc-resolver/binding-android-arm-eabi': 11.19.1 '@oxc-resolver/binding-android-arm64': 11.19.1 @@ -21378,7 +22677,7 @@ snapshots: '@oxc-resolver/binding-linux-x64-gnu': 11.19.1 '@oxc-resolver/binding-linux-x64-musl': 11.19.1 '@oxc-resolver/binding-openharmony-arm64': 11.19.1 - '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) '@oxc-resolver/binding-win32-arm64-msvc': 11.19.1 '@oxc-resolver/binding-win32-ia32-msvc': 11.19.1 '@oxc-resolver/binding-win32-x64-msvc': 11.19.1 @@ -21386,6 +22685,59 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' + oxc-resolver@11.24.2: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 + + oxlint-plugin-react-doctor@0.9.12: + dependencies: + '@shaderfrog/glsl-parser': 7.0.1 + '@typescript-eslint/types': 8.67.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + lightningcss: 1.33.0 + oxc-parser: 0.143.0 + + oxlint@1.77.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.77.0 + '@oxlint/binding-android-arm64': 1.77.0 + '@oxlint/binding-darwin-arm64': 1.77.0 + '@oxlint/binding-darwin-x64': 1.77.0 + '@oxlint/binding-freebsd-x64': 1.77.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.77.0 + '@oxlint/binding-linux-arm-musleabihf': 1.77.0 + '@oxlint/binding-linux-arm64-gnu': 1.77.0 + '@oxlint/binding-linux-arm64-musl': 1.77.0 + '@oxlint/binding-linux-ppc64-gnu': 1.77.0 + '@oxlint/binding-linux-riscv64-gnu': 1.77.0 + '@oxlint/binding-linux-riscv64-musl': 1.77.0 + '@oxlint/binding-linux-s390x-gnu': 1.77.0 + '@oxlint/binding-linux-x64-gnu': 1.77.0 + '@oxlint/binding-linux-x64-musl': 1.77.0 + '@oxlint/binding-openharmony-arm64': 1.77.0 + '@oxlint/binding-win32-arm64-msvc': 1.77.0 + '@oxlint/binding-win32-ia32-msvc': 1.77.0 + '@oxlint/binding-win32-x64-msvc': 1.77.0 + p-filter@2.1.0: dependencies: p-map: 2.1.0 @@ -21620,14 +22972,14 @@ snapshots: path-data-parser: 0.1.0 points-on-curve: 0.2.0 - postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.7.0 postcss: 8.5.14 tsx: 4.21.0 - yaml: 2.8.3 + yaml: 2.9.0 postcss-media-query-parser@0.2.3: {} @@ -21664,10 +23016,10 @@ snapshots: premove@4.0.0: {} - prettier-plugin-svelte@3.5.1(prettier@3.8.3)(svelte@5.55.1(@typescript-eslint/types@8.58.0)): + prettier-plugin-svelte@3.5.1(prettier@3.8.3)(svelte@5.55.1(@typescript-eslint/types@8.67.0)): dependencies: prettier: 3.8.3 - svelte: 5.55.1(@typescript-eslint/types@8.58.0) + svelte: 5.55.1(@typescript-eslint/types@8.67.0) prettier@2.8.8: {} @@ -21699,6 +23051,11 @@ snapshots: err-code: 2.0.3 retry: 0.12.0 + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + property-information@7.1.0: {} protobufjs@7.5.8: @@ -21768,17 +23125,80 @@ snapshots: defu: 6.1.4 destr: 2.0.5 + react-doctor@0.9.12(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(eslint@9.39.4(jiti@2.7.0)): + dependencies: + '@astrojs/compiler': 4.0.0 + '@sentry/node': 10.70.0(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1)) + agent-install: 0.0.5 + conf: 15.1.0 + confbox: 0.2.4 + deslop-js: 0.9.12 + eslint-plugin-react-hooks: 7.1.1(eslint@9.39.4(jiti@2.7.0)) + jiti: 2.7.0 + magicast: 0.5.4 + oxc-resolver: 11.24.2 + oxlint: 1.77.0 + oxlint-plugin-react-doctor: 0.9.12 + prompts: 2.4.2 + typescript: 5.9.3 + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + yaml: 2.9.0 + yoga-layout: 3.2.1 + transitivePeerDependencies: + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' + - eslint + - oxlint-tsgolint + - supports-color + - vite-plus + react-dom@19.2.6(react@19.2.6): dependencies: react: 19.2.6 scheduler: 0.27.0 + react-grab@0.2.0(react@19.2.6): + dependencies: + '@react-grab/cli': 0.2.0 + bippy: 0.6.1(react@19.2.6) + optionalDependencies: + react: 19.2.6 + react-is@17.0.2: {} react-is@18.3.1: {} react-is@19.2.6: {} + react-scan@0.5.7(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(esbuild@0.27.4)(eslint@9.39.4(jiti@2.7.0))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(rollup@4.60.1): + dependencies: + '@babel/core': 7.29.0 + '@babel/types': 7.29.0 + '@preact/signals': 2.11.1(preact@10.29.1) + '@rollup/pluginutils': 5.3.0(rollup@4.60.1) + bippy: 0.5.43(react@19.2.6) + commander: 14.0.3 + picocolors: 1.1.1 + preact: 10.29.1 + prompts: 2.4.2 + react: 19.2.6 + react-doctor: 0.9.12(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(eslint@9.39.4(jiti@2.7.0)) + react-dom: 19.2.6(react@19.2.6) + react-grab: 0.2.0(react@19.2.6) + optionalDependencies: + esbuild: 0.27.4 + unplugin: 3.0.0 + transitivePeerDependencies: + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' + - eslint + - oxlint-tsgolint + - rollup + - supports-color + - vite-plus + react@19.2.6: {} read-yaml-file@1.1.0: @@ -21960,6 +23380,13 @@ snapshots: require-from-string@2.0.2: {} + require-in-the-middle@8.0.1: + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + requires-port@1.0.0: {} resolve-from@4.0.0: {} @@ -22017,7 +23444,7 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0 '@rolldown/binding-win32-x64-msvc': 1.0.0 - rolldown@1.0.0-rc.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1): + rolldown@1.0.0-rc.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2): dependencies: '@oxc-project/types': 0.113.0 '@rolldown/pluginutils': 1.0.0-rc.4 @@ -22032,7 +23459,7 @@ snapshots: '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.4 '@rolldown/binding-linux-x64-musl': 1.0.0-rc.4 '@rolldown/binding-openharmony-arm64': 1.0.0-rc.4 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.4 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.4 transitivePeerDependencies: @@ -22200,6 +23627,8 @@ snapshots: '@types/node-forge': 1.3.14 node-forge: 1.4.0 + semifies@1.0.0: {} + semver@5.7.2: optional: true @@ -22446,6 +23875,8 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 + sisteransi@1.0.5: {} + size-limit@11.2.0: dependencies: bytes-iec: 3.1.1 @@ -22599,6 +24030,8 @@ snapshots: stdin-discarder@0.3.1: {} + stdin-discarder@0.3.2: {} + streamdown@1.6.11(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.6): dependencies: clsx: 2.1.1 @@ -22704,6 +24137,12 @@ snapshots: dependencies: js-tokens: 9.0.1 + stubborn-fs@2.0.0: + dependencies: + stubborn-utils: 1.0.2 + + stubborn-utils@1.0.2: {} + style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -22736,7 +24175,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte@5.55.1(@typescript-eslint/types@8.58.0): + svelte@5.55.1(@typescript-eslint/types@8.67.0): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 @@ -22749,7 +24188,7 @@ snapshots: clsx: 2.1.1 devalue: 5.8.0 esm-env: 1.2.2 - esrap: 2.2.7(@typescript-eslint/types@8.58.0) + esrap: 2.2.7(@typescript-eslint/types@8.67.0) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -22845,6 +24284,8 @@ snapshots: tinyexec@1.0.4: {} + tinyexec@1.3.0: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -22926,16 +24367,16 @@ snapshots: tslib@2.8.1: {} - tsup-preset-solid@2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)): + tsup-preset-solid@2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)): dependencies: esbuild-plugin-solid: 0.5.0(esbuild@0.27.4)(solid-js@1.9.12) - tsup: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + tsup: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) transitivePeerDependencies: - esbuild - solid-js - supports-color - tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): + tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0): dependencies: bundle-require: 5.1.0(esbuild@0.27.4) cac: 6.7.14 @@ -22946,7 +24387,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.8.3) + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.9.0) resolve-from: 5.0.0 rollup: 4.60.1 source-map: 0.7.6 @@ -23039,6 +24480,8 @@ snapshots: ufo@1.6.3: {} + uint8array-extras@1.5.0: {} + ultrahtml@1.6.0: {} unbash@2.2.0: {} @@ -23180,7 +24623,7 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unstorage@1.17.5(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(ioredis@5.10.1): + unstorage@1.17.5(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(ioredis@5.10.1): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -23191,13 +24634,13 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.3 optionalDependencies: - db0: 0.3.4(drizzle-orm@0.45.2(pg@8.20.0)) + db0: 0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)) ioredis: 5.10.1 - unstorage@2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(ioredis@5.10.1)(lru-cache@11.2.7)(ofetch@2.0.0-alpha.3): + unstorage@2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(ioredis@5.10.1)(lru-cache@11.2.7)(ofetch@2.0.0-alpha.3): optionalDependencies: chokidar: 5.0.0 - db0: 0.3.4(drizzle-orm@0.45.2(pg@8.20.0)) + db0: 0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)) ioredis: 5.10.1 lru-cache: 11.2.7 ofetch: 2.0.0-alpha.3 @@ -23268,7 +24711,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(drizzle-orm@0.45.2(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vinxi@0.5.11(@types/node@22.19.15)(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(rolldown@1.1.2)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0): dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -23289,7 +24732,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.13.2(drizzle-orm@0.45.2(pg@8.20.0))(rolldown@1.1.2) + nitropack: 2.13.2(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0))(rolldown@1.1.2) node-fetch-native: 1.6.7 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -23301,8 +24744,8 @@ snapshots: ufo: 1.6.3 unctx: 2.5.0 unenv: 1.10.0 - unstorage: 1.17.5(db0@0.3.4(drizzle-orm@0.45.2(pg@8.20.0)))(ioredis@5.10.1) - vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + unstorage: 1.17.5(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(pg@8.20.0)))(ioredis@5.10.1) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) zod: 4.4.3 transitivePeerDependencies: - '@azure/app-configuration' @@ -23350,23 +24793,23 @@ snapshots: - xml2js - yaml - vite-dev-rpc@1.1.0(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-dev-rpc@1.1.0(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.9.0)): dependencies: birpc: 2.9.0 - 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-hot-client: 2.1.0(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: 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.9.0) + vite-hot-client: 2.1.0(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.9.0)) - vite-hot-client@2.1.0(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-hot-client@2.1.0(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.9.0)): dependencies: - 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: 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.9.0) - vite-node@3.2.4(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite-node@3.2.4(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - jiti @@ -23381,7 +24824,7 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(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-plugin-dts@4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(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.9.0)): dependencies: '@microsoft/api-extractor': 7.47.7(@types/node@22.19.15) '@rollup/pluginutils': 5.3.0(rollup@4.60.1) @@ -23394,17 +24837,17 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - 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: 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.9.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-externalize-deps@0.10.0(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-plugin-externalize-deps@0.10.0(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.9.0)): dependencies: - 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: 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.9.0) - vite-plugin-inspect@11.3.3(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-plugin-inspect@11.3.3(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.9.0)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -23414,20 +24857,20 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.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-dev-rpc: 1.1.0(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: 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.9.0) + vite-dev-rpc: 1.1.0(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.9.0)) transitivePeerDependencies: - supports-color - vite-plugin-mkcert@1.17.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)): + vite-plugin-mkcert@1.17.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.9.0)): dependencies: debug: 4.4.3 picocolors: 1.1.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: 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.9.0) transitivePeerDependencies: - supports-color - vite-plugin-solid@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)): + vite-plugin-solid@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.9.0)): dependencies: '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 @@ -23435,14 +24878,14 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.12 solid-refresh: 0.6.3(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) - vitefu: 1.1.2(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: 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.9.0) + vitefu: 1.1.2(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.9.0)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.13(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-prerender-plugin@0.5.13(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.9.0)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -23450,30 +24893,30 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - 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: 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.9.0) - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(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-tsconfig-paths@5.1.4(typescript@5.9.3)(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.9.0)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - 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: 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.9.0) transitivePeerDependencies: - supports-color - typescript - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(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-tsconfig-paths@6.1.1(typescript@5.9.3)(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.9.0)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - 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: 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.9.0) transitivePeerDependencies: - supports-color - typescript - vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -23486,13 +24929,13 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 less: 4.6.4 - lightningcss: 1.32.0 + lightningcss: 1.33.0 sass: 1.99.0 terser: 5.46.1 tsx: 4.21.0 - yaml: 2.8.3 + yaml: 2.9.0 - vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0): dependencies: esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.4) @@ -23505,13 +24948,13 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 less: 4.6.4 - lightningcss: 1.32.0 + lightningcss: 1.33.0 sass: 1.97.3 terser: 5.46.1 tsx: 4.21.0 - yaml: 2.8.3 + yaml: 2.9.0 - vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0): dependencies: esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.4) @@ -23524,13 +24967,13 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 less: 4.6.4 - lightningcss: 1.32.0 + lightningcss: 1.33.0 sass: 1.99.0 terser: 5.46.1 tsx: 4.21.0 - yaml: 2.8.3 + yaml: 2.9.0 - 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@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.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -23546,17 +24989,17 @@ snapshots: sass: 1.99.0 terser: 5.46.1 tsx: 4.21.0 - yaml: 2.8.3 + yaml: 2.9.0 - vitefu@1.1.2(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)): + vitefu@1.1.2(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.9.0)): optionalDependencies: - 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: 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.9.0) - vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.15)(happy-dom@20.9.0)(jiti@2.7.0)(jsdom@27.4.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23574,8 +25017,8 @@ snapshots: tinyglobby: 0.2.16 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-node: 3.2.4(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) + vite-node: 3.2.4(@types/node@22.19.15)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.33.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.13 @@ -23769,6 +25212,8 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + when-exit@2.1.5: {} + which@2.0.2: dependencies: isexe: 2.0.0 @@ -23882,6 +25327,8 @@ snapshots: yaml@2.8.3: {} + yaml@2.9.0: {} + yargs-parser@21.1.1: {} yargs-parser@22.0.0: {} @@ -23911,6 +25358,8 @@ snapshots: yoctocolors@2.1.2: {} + yoga-layout@3.2.1: {} + youch-core@0.3.3: dependencies: '@poppinss/exception': 1.2.3 From aaaef8474e789740896cdf4a335b532a742e6f5d Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Mon, 17 Aug 2026 18:58:05 +0200 Subject: [PATCH 2/5] feat: dock native React Scan UI into the TanStack plugin pane --- docs/plugins/react-scan.md | 48 ++--- packages/react-scan-devtools/README.md | 4 +- packages/react-scan-devtools/package.json | 2 - .../src/core/components/RenderList.tsx | 189 ---------------- .../src/core/components/Settings.tsx | 64 ------ .../src/core/components/Shell.tsx | 77 ++----- .../src/core/components/index.tsx | 10 +- .../src/core/host-toolbar.ts | 198 +++++++++++++++++ packages/react-scan-devtools/src/core/scan.ts | 13 +- .../react-scan-devtools/src/core/store.ts | 68 ------ .../src/core/styles/styles.ts | 201 ------------------ .../react-scan-devtools/src/core/types.ts | 20 +- .../tests/host-toolbar.test.ts | 89 ++++++++ .../react-scan-devtools/tests/plugin.test.ts | 2 +- .../react-scan-devtools/tests/scan.test.ts | 51 ++--- .../react-scan-devtools/tests/store.test.ts | 122 ----------- pnpm-lock.yaml | 8 +- 17 files changed, 351 insertions(+), 815 deletions(-) delete mode 100644 packages/react-scan-devtools/src/core/components/RenderList.tsx delete mode 100644 packages/react-scan-devtools/src/core/components/Settings.tsx create mode 100644 packages/react-scan-devtools/src/core/host-toolbar.ts delete mode 100644 packages/react-scan-devtools/src/core/store.ts delete mode 100644 packages/react-scan-devtools/src/core/styles/styles.ts create mode 100644 packages/react-scan-devtools/tests/host-toolbar.test.ts delete mode 100644 packages/react-scan-devtools/tests/store.test.ts diff --git a/docs/plugins/react-scan.md b/docs/plugins/react-scan.md index 63b12db19..b616a099b 100644 --- a/docs/plugins/react-scan.md +++ b/docs/plugins/react-scan.md @@ -3,7 +3,17 @@ title: React Scan Plugin id: react-scan-plugin --- -You want React render problems inside TanStack Devtools, not a second floating toolbar on the page. The React Scan plugin starts [react-scan](https://github.com/aidenybai/react-scan), keeps outlines on the page, and shows a live render list in the TanStack tab. +You want the full [react-scan](https://github.com/aidenybai/react-scan) workbench inside TanStack Devtools, not a second floating toolbar on the page. This plugin starts `react-scan` and docks its native UI into the TanStack tab. + +That native UI includes: + +- Inspect mode to pick a component on the page +- The inspector: What Changed, props, and the component tree +- Slowdown notifications +- Outline toggle for re-renders +- FPS meter + +Page outlines stay on the page. The toolbar sits in the plugin pane. ## Installation @@ -32,33 +42,15 @@ createRoot(document.getElementById('root')!).render( `scan()` starts when you call `reactScanDevtoolsPlugin()`. You do not need a script tag. -The `react-scan` toolbar stays hidden. Outlines still paint on the page. - Do not also load `react-scan/dist/auto.global.js`. Two scanners will run at the same time. -## Panel - -The tab shows one row per component: - -- Name -- Render count -- Time in milliseconds -- Unnecessary render count -- Last FPS +## How to use the tab -Search by name. Sort by renders, time, or name. Filter to unnecessary renders only. - -Click a row to expand it. If `react-scan` sent prop, state, or context changes, they appear there. Current `react-scan` 0.5.x often sends an empty change list, so the row may show `No change details`. - -**Clear** empties the list. It does not stop scanning. - -## Settings - -Open **Settings** to change: - -- Enabled: turn page outlines on or off -- Log renders: write renders to the console -- Animation speed: `slow`, `fast`, or `off` +1. Open the **React Scan** plugin. +2. Click the inspect icon, then click a component in the app. +3. The inspector shows why that component rendered and its tree. +4. Click the bell for slowdown notifications. +5. Use the outline toggle to turn page outlines on or off. ## Options @@ -78,9 +70,7 @@ reactScanDevtoolsPlugin({ | `enabled` | `true` | Start scanning when the factory runs | | `log` | `false` | Log renders to the console | | `animationSpeed` | `'fast'` | Outline animation speed | -| `onRender` | none | Called after the plugin store updates | - -`showToolbar` is not a public option. The plugin always hides the `react-scan` toolbar. +| `onRender` | none | Called for each render batch | If you call the factory twice, `scan()` still runs once. The first `onRender` you pass is the one that stays. @@ -92,4 +82,4 @@ If you want the real plugin in every environment, import `@tanstack/react-scan-d ## Example -See `examples/react/basic`. Click **Increment count** and open the React Scan tab. +See `examples/react/basic`. Open the React Scan tab, click inspect, then click **Increment count**. diff --git a/packages/react-scan-devtools/README.md b/packages/react-scan-devtools/README.md index d9a9e5cb3..2b05e7296 100644 --- a/packages/react-scan-devtools/README.md +++ b/packages/react-scan-devtools/README.md @@ -1,6 +1,6 @@ # @tanstack/react-scan-devtools -React Scan plugin for TanStack Devtools. +React Scan plugin for TanStack Devtools. It starts `react-scan` and docks the native React Scan UI (inspect, What Changed, notifications, FPS) into the TanStack tab. ```bash npm install @tanstack/react-scan-devtools react-scan @@ -13,6 +13,4 @@ import { reactScanDevtoolsPlugin } from '@tanstack/react-scan-devtools' ; ``` -`scan()` starts when the factory runs. The `react-scan` toolbar stays hidden. Outlines stay on the page. The TanStack tab shows live render diagnostics and settings. - Docs: https://tanstack.com/devtools/latest/docs/plugins/react-scan diff --git a/packages/react-scan-devtools/package.json b/packages/react-scan-devtools/package.json index 40441d60e..c51e784ed 100644 --- a/packages/react-scan-devtools/package.json +++ b/packages/react-scan-devtools/package.json @@ -61,9 +61,7 @@ "build": "vite build" }, "dependencies": { - "@tanstack/devtools-ui": "workspace:*", "@tanstack/devtools-utils": "workspace:^", - "goober": "^2.1.16", "react-scan": "^0.5.7", "solid-js": "^1.9.9" }, diff --git a/packages/react-scan-devtools/src/core/components/RenderList.tsx b/packages/react-scan-devtools/src/core/components/RenderList.tsx deleted file mode 100644 index 6516144c0..000000000 --- a/packages/react-scan-devtools/src/core/components/RenderList.tsx +++ /dev/null @@ -1,189 +0,0 @@ -/** @jsxImportSource solid-js */ - -import { - For, - Show, - createMemo, - createSignal, - onCleanup, - onMount, -} from 'solid-js' -import { Input, Select } from '@tanstack/devtools-ui' -import { getRenderSnapshot, subscribeToRenderStore } from '../store' -import { createStyles } from '../styles/styles' -import type { Change, ComponentRenderStats } from '../types' - -type SortKey = 'renders' | 'time' | 'name' -type FilterKey = 'all' | 'unnecessary' - -function formatValue(value: unknown): string { - if (typeof value === 'string') { - return value - } - try { - return JSON.stringify(value) - } catch { - return String(value) - } -} - -function changeKindLabel(change: Change): string { - switch (change.type) { - case 1: - return 'prop' - case 2: - case 3: - return 'state' - case 4: - return 'context' - default: - return String(change.type) - } -} - -function sortRows( - rows: Array, - sort: SortKey, -): Array { - const copy = [...rows] - copy.sort((left, right) => { - if (sort === 'name') { - return left.name.localeCompare(right.name) - } - if (sort === 'time') { - return right.timeMs - left.timeMs - } - return right.renders - left.renders - }) - return copy -} - -export function RenderList() { - const styles = createStyles() - const [rows, setRows] = createSignal(getRenderSnapshot()) - const [query, setQuery] = createSignal('') - const [sort, setSort] = createSignal('renders') - const [filter, setFilter] = createSignal('all') - const [selected, setSelected] = createSignal('') - - onMount(() => { - const stop = subscribeToRenderStore(setRows) - onCleanup(stop) - }) - - const visibleRows = createMemo(() => { - const needle = query().trim().toLowerCase() - const filtered = rows().filter((row) => { - if (filter() === 'unnecessary' && row.unnecessary === 0) { - return false - } - if (needle && !row.name.toLowerCase().includes(needle)) { - return false - } - return true - }) - return sortRows(filtered, sort()) - }) - - return ( - <> -
-
- -
- - label="Sort" - value={sort()} - options={[ - { value: 'renders', label: 'Renders' }, - { value: 'time', label: 'Time' }, - { value: 'name', label: 'Name' }, - ]} - onChange={(value: SortKey) => setSort(value)} - /> - - label="Filter" - value={filter()} - options={[ - { value: 'all', label: 'All' }, - { value: 'unnecessary', label: 'Unnecessary only' }, - ]} - onChange={(value: FilterKey) => setFilter(value)} - /> -
-
- 0} - fallback={ -
-

- No renders recorded yet. Interact with the app. -

-
- } - > - - {(row) => { - const isSelected = () => selected() === row.name - return ( - - ) - }} - -
-
- - ) -} diff --git a/packages/react-scan-devtools/src/core/components/Settings.tsx b/packages/react-scan-devtools/src/core/components/Settings.tsx deleted file mode 100644 index 272e2b309..000000000 --- a/packages/react-scan-devtools/src/core/components/Settings.tsx +++ /dev/null @@ -1,64 +0,0 @@ -/** @jsxImportSource solid-js */ - -import { createSignal } from 'solid-js' -import { Button, Checkbox, Select } from '@tanstack/devtools-ui' -import { getReactScanPluginOptions, updateReactScanOptions } from '../scan' -import { createStyles } from '../styles/styles' -import type { AnimationSpeed } from '../types' - -interface SettingsProps { - onClose: () => void -} - -export function SettingsOverlay(props: SettingsProps) { - const styles = createStyles() - const initial = getReactScanPluginOptions() - const [enabled, setEnabled] = createSignal(initial.enabled) - const [log, setLog] = createSignal(initial.log) - const [animationSpeed, setAnimationSpeed] = createSignal( - initial.animationSpeed, - ) - return ( -
-
-

Settings

- -
-
- { - setEnabled(checked) - updateReactScanOptions({ enabled: checked }) - }} - /> - { - setLog(checked) - updateReactScanOptions({ log: checked }) - }} - /> - - label="Animation speed" - value={animationSpeed()} - options={[ - { value: 'slow', label: 'Slow' }, - { value: 'fast', label: 'Fast' }, - { value: 'off', label: 'Off' }, - ]} - onChange={(value: AnimationSpeed) => { - setAnimationSpeed(value) - updateReactScanOptions({ animationSpeed: value }) - }} - /> -
-
- ) -} diff --git a/packages/react-scan-devtools/src/core/components/Shell.tsx b/packages/react-scan-devtools/src/core/components/Shell.tsx index 449953421..e6449c8d3 100644 --- a/packages/react-scan-devtools/src/core/components/Shell.tsx +++ b/packages/react-scan-devtools/src/core/components/Shell.tsx @@ -1,70 +1,31 @@ /** @jsxImportSource solid-js */ -import { Show, createMemo, createSignal, onCleanup, onMount } from 'solid-js' -import { Button, Header, MainPanel } from '@tanstack/devtools-ui' -import { - clearRenderStore, - getRenderSnapshot, - subscribeToRenderStore, -} from '../store' -import { createStyles } from '../styles/styles' -import { RenderList } from './RenderList' -import { SettingsOverlay } from './Settings' +import { onCleanup, onMount } from 'solid-js' +import { dockReactScanToolbar } from '../host-toolbar' export function Shell() { - const styles = createStyles() - const [rows, setRows] = createSignal(getRenderSnapshot()) - const [showSettings, setShowSettings] = createSignal(false) + let host: HTMLDivElement | undefined onMount(() => { - const stop = subscribeToRenderStore(setRows) - onCleanup(stop) - }) - - const summary = createMemo(() => { - const current = rows() - const renders = current.reduce((total, row) => total + row.renders, 0) - const unnecessary = current.reduce( - (total, row) => total + row.unnecessary, - 0, - ) - return { - components: current.length, - renders, - unnecessary, + if (!host) { + return } + const stop = dockReactScanToolbar(host) + onCleanup(stop) }) return ( - -
-
-

React Scan

- - {`${summary().components} components · ${summary().renders} renders · ${summary().unnecessary} unnecessary`} - -
-
- - -
-
- - - setShowSettings(false)} /> - -
+
) } diff --git a/packages/react-scan-devtools/src/core/components/index.tsx b/packages/react-scan-devtools/src/core/components/index.tsx index bf561db5d..26230a302 100644 --- a/packages/react-scan-devtools/src/core/components/index.tsx +++ b/packages/react-scan-devtools/src/core/components/index.tsx @@ -1,13 +1,7 @@ /** @jsxImportSource solid-js */ -import { ThemeContextProvider } from '@tanstack/devtools-ui' import { Shell } from './Shell' -import type { TanStackDevtoolsTheme } from '@tanstack/devtools-ui' -export default function Devtools(props: { theme: TanStackDevtoolsTheme }) { - return ( - - - - ) +export default function Devtools() { + return } diff --git a/packages/react-scan-devtools/src/core/host-toolbar.ts b/packages/react-scan-devtools/src/core/host-toolbar.ts new file mode 100644 index 000000000..5f52aa573 --- /dev/null +++ b/packages/react-scan-devtools/src/core/host-toolbar.ts @@ -0,0 +1,198 @@ +const REACT_SCAN_ROOT_ID = 'react-scan-root' +const DOCK_STYLE_ID = 'tsd-react-scan-dock-style' +const COLLAPSED_STORAGE_KEY = 'react-scan-widget-collapsed-v1' +const DOCKED_MARKER = 'tsd-react-scan-docked' + +function getShadowRoot(): ShadowRoot | null { + const root = document.getElementById(REACT_SCAN_ROOT_ID) + return root?.shadowRoot ?? null +} + +function boxFor(host: HTMLElement): DOMRect { + const pane = host.closest('[id^="plugin-container-"]') + if (pane instanceof HTMLElement) { + const paneRect = pane.getBoundingClientRect() + if (paneRect.height >= 80) { + return paneRect + } + } + const self = host.getBoundingClientRect() + if (self.height >= 80) { + return self + } + let current: HTMLElement | null = host.parentElement + while (current) { + const rect = current.getBoundingClientRect() + if (rect.height >= 80) { + return rect + } + current = current.parentElement + } + return self +} + +function dockCss(rect: DOMRect): string { + return ` +/* ${DOCKED_MARKER} */ +#react-scan-toolbar { + position: fixed !important; + top: ${rect.top}px !important; + left: ${rect.left}px !important; + width: ${rect.width}px !important; + height: ${rect.height}px !important; + max-width: none !important; + max-height: none !important; + min-width: 0 !important; + min-height: 0 !important; + transform: none !important; + opacity: 1 !important; + border-radius: 0 !important; + box-shadow: none !important; + animation: none !important; + inset: auto !important; +} +#react-scan-toolbar.opacity-0 { + opacity: 1 !important; +} +#react-scan-toolbar .resize-left, +#react-scan-toolbar .resize-right, +#react-scan-toolbar .resize-top, +#react-scan-toolbar .resize-bottom { + display: none !important; +} +` +} + +function ensureDockStyle(shadow: ShadowRoot): HTMLStyleElement { + const existing = shadow.getElementById(DOCK_STYLE_ID) + if (existing instanceof HTMLStyleElement) { + return existing + } + const style = document.createElement('style') + style.id = DOCK_STYLE_ID + shadow.appendChild(style) + return style +} + +function syncDockStyle(host: HTMLElement, style: HTMLStyleElement) { + style.textContent = dockCss(boxFor(host)) +} + +function waitForShadowRoot(timeoutMs: number): Promise { + const existing = getShadowRoot() + if (existing) { + return Promise.resolve(existing) + } + + return new Promise((resolve) => { + const startedAt = Date.now() + const observer = new MutationObserver(() => { + const shadow = getShadowRoot() + if (shadow) { + observer.disconnect() + resolve(shadow) + } + }) + observer.observe(document.documentElement, { + childList: true, + subtree: true, + }) + + const tick = () => { + const shadow = getShadowRoot() + if (shadow) { + observer.disconnect() + resolve(shadow) + return + } + if (Date.now() - startedAt >= timeoutMs) { + observer.disconnect() + resolve(null) + return + } + requestAnimationFrame(tick) + } + requestAnimationFrame(tick) + }) +} + +export function expandReactScanToolbar() { + try { + localStorage.removeItem(COLLAPSED_STORAGE_KEY) + } catch { + // ignore + } +} + +export function hideReactScanToolbar() { + void waitForShadowRoot(8000).then((shadow) => { + if (!shadow) { + return + } + const style = ensureDockStyle(shadow) + if (style.textContent.includes(DOCKED_MARKER)) { + return + } + style.textContent = ` +#react-scan-toolbar { + display: none !important; +} +` + }) +} + +export function dockReactScanToolbar(host: HTMLElement): () => void { + let stopped = false + let style: HTMLStyleElement | null = null + let frame = 0 + const observers: Array = [] + + const sync = () => { + if (stopped || !style) { + return + } + syncDockStyle(host, style) + } + + const attach = (shadow: ShadowRoot) => { + if (stopped) { + return + } + style = ensureDockStyle(shadow) + sync() + + if (typeof ResizeObserver !== 'undefined') { + const resize = new ResizeObserver(sync) + resize.observe(host) + observers.push(resize) + } + + window.addEventListener('resize', sync) + window.addEventListener('scroll', sync, true) + } + + void waitForShadowRoot(8000).then((shadow) => { + if (shadow) { + attach(shadow) + } + }) + + frame = window.setInterval(sync, 250) + + return () => { + stopped = true + window.clearInterval(frame) + window.removeEventListener('resize', sync) + window.removeEventListener('scroll', sync, true) + for (const observer of observers) { + observer.disconnect() + } + if (style) { + style.textContent = ` +#react-scan-toolbar { + display: none !important; +} +` + } + } +} diff --git a/packages/react-scan-devtools/src/core/scan.ts b/packages/react-scan-devtools/src/core/scan.ts index df9bcf616..01ba00a6f 100644 --- a/packages/react-scan-devtools/src/core/scan.ts +++ b/packages/react-scan-devtools/src/core/scan.ts @@ -1,5 +1,5 @@ import { scan, setOptions } from 'react-scan' -import { applyRenders } from './store' +import { expandReactScanToolbar, hideReactScanToolbar } from './host-toolbar' import { DEFAULT_PLUGIN_SETTINGS } from './types' import type { Options } from 'react-scan' import type { ReactScanDevtoolsOptions, ReactScanPluginSettings } from './types' @@ -18,7 +18,6 @@ function composedOnRender( fiber: Parameters>[0], renders: Parameters>[1], ) { - applyRenders(renders) userOnRender?.(fiber, renders) } @@ -42,7 +41,7 @@ function persistReactScanOptions(settings: ReactScanPluginSettings) { enabled: settings.enabled, log: settings.log, animationSpeed: settings.animationSpeed, - showToolbar: false, + showToolbar: true, }), ) } catch { @@ -70,20 +69,22 @@ export function startReactScan( options.animationSpeed ?? DEFAULT_PLUGIN_SETTINGS.animationSpeed, } persistReactScanOptions(currentSettings) + expandReactScanToolbar() + hideReactScanToolbar() // react-scan skips start() when enabled is false and the toolbar is hidden. // Always start, then pause if the user asked for enabled: false. scan({ enabled: true, log: currentSettings.log, animationSpeed: currentSettings.animationSpeed, - showToolbar: false, + showToolbar: true, onRender: composedOnRender, ...(runtime.forceRunInProduction ? { dangerouslyForceRunInProduction: true } : {}), }) if (!currentSettings.enabled) { - setOptions({ enabled: false, showToolbar: false }) + setOptions({ enabled: false, showToolbar: true }) } } @@ -97,6 +98,6 @@ export function updateReactScanOptions( persistReactScanOptions(currentSettings) setOptions({ ...options, - showToolbar: false, + showToolbar: true, }) } diff --git a/packages/react-scan-devtools/src/core/store.ts b/packages/react-scan-devtools/src/core/store.ts deleted file mode 100644 index 638cb01a4..000000000 --- a/packages/react-scan-devtools/src/core/store.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { MAX_RENDERS_PER_COMPONENT, UNKNOWN_COMPONENT_NAME } from './types' -import type { Change, ComponentRenderStats, Render } from './types' - -const statsByName = new Map() -const listeners = new Set<(rows: Array) => void>() - -function snapshot(): Array { - return Array.from(statsByName.values()).map((row) => ({ - ...row, - lastChanges: [...row.lastChanges], - lastRenders: [...row.lastRenders], - })) -} - -function emit() { - const rows = snapshot() - for (const listener of listeners) { - listener(rows) - } -} - -export function getRenderSnapshot(): Array { - return snapshot() -} - -export function subscribeToRenderStore( - listener: (rows: Array) => void, -): () => void { - listeners.add(listener) - return () => { - listeners.delete(listener) - } -} - -export function clearRenderStore() { - statsByName.clear() - emit() -} - -export function applyRenders(renders: Array) { - for (const item of renders) { - const name = item.componentName ?? UNKNOWN_COMPONENT_NAME - const current = statsByName.get(name) ?? { - name, - renders: 0, - timeMs: 0, - unnecessary: 0, - lastFps: null, - lastChanges: [] as Array, - lastRenders: [] as Array, - } - - const lastRenders = [...current.lastRenders, item].slice( - -MAX_RENDERS_PER_COMPONENT, - ) - - statsByName.set(name, { - name, - renders: current.renders + item.count, - timeMs: current.timeMs + (item.time ?? 0), - unnecessary: current.unnecessary + (item.unnecessary === true ? 1 : 0), - lastFps: item.fps, - lastChanges: item.changes, - lastRenders, - }) - } - emit() -} diff --git a/packages/react-scan-devtools/src/core/styles/styles.ts b/packages/react-scan-devtools/src/core/styles/styles.ts deleted file mode 100644 index a3317905a..000000000 --- a/packages/react-scan-devtools/src/core/styles/styles.ts +++ /dev/null @@ -1,201 +0,0 @@ -import * as goober from 'goober' -import { createTheme } from '@tanstack/devtools-ui' -import { createMemo } from 'solid-js' -import { resolveSemanticTheme } from '@tanstack/devtools-ui/internal' - -const css = goober.css - -function createReactScanPanelStyles(themeName: 'light' | 'dark') { - const theme = resolveSemanticTheme(themeName) - const { color, font, gap, radius, shadow, space, type } = theme - - return { - root: css` - height: 100%; - display: flex; - flex-direction: column; - overflow: hidden; - position: relative; - background: ${color.surface.workspace}; - color: ${color.text.primary}; - font-family: ${font.body}; - font-weight: 300; - `, - header: css` - padding: ${space[3]} ${space[4]}; - border-bottom: 1px solid ${color.border.decorative}; - display: flex; - justify-content: space-between; - align-items: center; - gap: ${gap.section}; - flex-shrink: 0; - background: ${color.surface.brand}; - `, - headerTitleRow: css` - display: flex; - align-items: center; - gap: ${gap.control}; - min-width: 0; - flex-wrap: wrap; - `, - headerTitle: css` - margin: 0; - font-family: ${font.display}; - font-size: ${type.headingPane.size}; - line-height: ${type.headingPane.lineHeight}; - font-weight: ${type.headingPane.weight}; - `, - headerSub: css` - font-size: ${type.bodyXs.size}; - line-height: ${type.bodyXs.lineHeight}; - color: ${color.text.mutedOnBrand}; - white-space: nowrap; - `, - headerActions: css` - display: flex; - gap: ${gap.control}; - align-items: center; - flex-wrap: wrap; - justify-content: flex-end; - `, - toolbar: css` - display: flex; - gap: ${gap.control}; - align-items: flex-end; - flex-wrap: wrap; - padding: ${space[3]} ${space[4]} 0; - flex-shrink: 0; - `, - toolbarField: css` - flex: 1; - min-width: 160px; - `, - content: css` - flex: 1; - overflow-y: auto; - padding: ${space[4]}; - background: ${color.surface.workspace}; - `, - emptyState: css` - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 100%; - text-align: center; - color: ${color.text.muted}; - `, - emptyPrimary: css` - font-size: ${type.bodySm.size}; - line-height: ${type.bodySm.lineHeight}; - margin: 0; - color: ${color.text.primary}; - `, - row: css` - padding: ${space[3]}; - margin-bottom: ${space[2]}; - border: 1px solid ${color.border.decorative}; - border-radius: ${radius.group}; - cursor: pointer; - background: ${color.surface.elevated}; - box-shadow: ${shadow.xs}; - width: 100%; - text-align: left; - color: inherit; - font: inherit; - &:hover { - background: ${color.state.hover}; - } - &:focus-visible { - outline: 2px solid ${color.border.focus}; - outline-offset: 2px; - } - `, - rowSelected: css` - background: ${color.state.selectionFill}; - color: ${color.state.selectionText}; - border-color: ${color.border.focus}; - `, - rowMain: css` - display: flex; - justify-content: space-between; - align-items: flex-start; - gap: ${gap.section}; - `, - rowName: css` - font-weight: 600; - font-size: ${type.bodySm.size}; - line-height: ${type.bodySm.lineHeight}; - word-break: break-word; - `, - rowMeta: css` - display: flex; - flex-wrap: wrap; - gap: ${gap.tight}; - font-size: ${type.bodyXs.size}; - line-height: ${type.bodyXs.lineHeight}; - color: ${color.text.muted}; - justify-content: flex-end; - `, - details: css` - margin-top: ${space[3]}; - padding-top: ${space[3]}; - border-top: 1px solid ${color.border.decorative}; - display: grid; - gap: ${space[1]}; - font-size: ${type.bodyXs.size}; - line-height: ${type.bodyXs.lineHeight}; - `, - detailsEmpty: css` - color: ${color.text.muted}; - margin: 0; - `, - changeRow: css` - display: grid; - gap: 2px; - `, - changeKind: css` - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.04em; - font-size: ${type.labelSm.size}; - `, - settingsOverlay: css` - position: absolute; - inset: 0; - background: ${color.surface.workspace}; - display: flex; - flex-direction: column; - z-index: 10; - `, - settingsHeader: css` - padding: ${space[3]} ${space[4]}; - border-bottom: 1px solid ${color.border.decorative}; - display: flex; - justify-content: space-between; - align-items: center; - flex-shrink: 0; - background: ${color.surface.brand}; - `, - settingsTitle: css` - margin: 0; - font-family: ${font.display}; - font-size: ${type.headingPane.size}; - line-height: ${type.headingPane.lineHeight}; - font-weight: 700; - `, - settingsContent: css` - flex: 1; - overflow-y: auto; - padding: ${space[4]}; - display: grid; - gap: ${gap.section}; - align-content: start; - `, - } -} - -export function createStyles() { - const { theme } = createTheme() - return createMemo(() => createReactScanPanelStyles(theme())) -} diff --git a/packages/react-scan-devtools/src/core/types.ts b/packages/react-scan-devtools/src/core/types.ts index 1ec6e1454..c8b7630f4 100644 --- a/packages/react-scan-devtools/src/core/types.ts +++ b/packages/react-scan-devtools/src/core/types.ts @@ -1,9 +1,6 @@ -import type { Change, Options } from 'react-scan' +import type { Options } from 'react-scan' -export type { Change, Options } - -type OnRender = NonNullable -export type Render = Parameters[1][number] +export type { Options } export type AnimationSpeed = NonNullable @@ -20,19 +17,6 @@ export interface ReactScanPluginSettings { animationSpeed: AnimationSpeed } -export interface ComponentRenderStats { - name: string - renders: number - timeMs: number - unnecessary: number - lastFps: number | null - lastChanges: Array - lastRenders: Array -} - -export const UNKNOWN_COMPONENT_NAME = '(unknown)' -export const MAX_RENDERS_PER_COMPONENT = 50 - export const DEFAULT_PLUGIN_SETTINGS: ReactScanPluginSettings = { enabled: true, log: false, diff --git a/packages/react-scan-devtools/tests/host-toolbar.test.ts b/packages/react-scan-devtools/tests/host-toolbar.test.ts new file mode 100644 index 000000000..d9873dca6 --- /dev/null +++ b/packages/react-scan-devtools/tests/host-toolbar.test.ts @@ -0,0 +1,89 @@ +import { afterEach, describe, expect, it } from 'vitest' +import { + dockReactScanToolbar, + hideReactScanToolbar, +} from '../src/core/host-toolbar' + +function mountScanRoot() { + const root = document.createElement('div') + root.id = 'react-scan-root' + const shadow = root.attachShadow({ mode: 'open' }) + const toolbar = document.createElement('div') + toolbar.id = 'react-scan-toolbar' + shadow.appendChild(toolbar) + document.body.appendChild(root) + return { root, shadow, toolbar } +} + +function fakeBox( + top: number, + left: number, + width: number, + height: number, +): () => DOMRect { + return () => + ({ + top, + left, + width, + height, + right: left + width, + bottom: top + height, + x: left, + y: top, + toJSON: () => ({}), + }) as DOMRect +} + +describe('dockReactScanToolbar', () => { + afterEach(() => { + document.getElementById('react-scan-root')?.remove() + }) + + it('injects dock styles that pin the native toolbar to the host box', async () => { + const { shadow } = mountScanRoot() + const host = document.createElement('div') + Object.defineProperty(host, 'getBoundingClientRect', { + value: fakeBox(10, 20, 300, 200), + }) + document.body.appendChild(host) + + const stop = dockReactScanToolbar(host) + await Promise.resolve() + const style = shadow.getElementById('tsd-react-scan-dock-style') + expect(style?.textContent).toContain('top: 10px') + expect(style?.textContent).toContain('height: 200px') + + hideReactScanToolbar() + await Promise.resolve() + expect(style?.textContent).toContain('tsd-react-scan-docked') + expect(style?.textContent).toContain('height: 200px') + + stop() + expect(style?.textContent).toMatch(/display:\s*none/) + host.remove() + }) + + it('uses a parent pane when the host has no height', async () => { + const { shadow } = mountScanRoot() + const shortHost = document.createElement('div') + Object.defineProperty(shortHost, 'getBoundingClientRect', { + value: fakeBox(0, 0, 100, 0), + }) + const tallParent = document.createElement('div') + tallParent.id = 'plugin-container-react-scan' + Object.defineProperty(tallParent, 'getBoundingClientRect', { + value: fakeBox(40, 8, 400, 240), + }) + tallParent.appendChild(shortHost) + document.body.appendChild(tallParent) + + const stop = dockReactScanToolbar(shortHost) + await Promise.resolve() + expect( + shadow.getElementById('tsd-react-scan-dock-style')?.textContent, + ).toContain('height: 240px') + stop() + tallParent.remove() + }) +}) diff --git a/packages/react-scan-devtools/tests/plugin.test.ts b/packages/react-scan-devtools/tests/plugin.test.ts index 19a1bf41a..66e024598 100644 --- a/packages/react-scan-devtools/tests/plugin.test.ts +++ b/packages/react-scan-devtools/tests/plugin.test.ts @@ -38,7 +38,7 @@ it('returns React Scan metadata and starts scan in development', async () => { expect(definition.id).toBe('react-scan') expect(scan).toHaveBeenCalledTimes(1) expect(scan).toHaveBeenCalledWith( - expect.objectContaining({ showToolbar: false }), + expect.objectContaining({ showToolbar: true }), ) }) diff --git a/packages/react-scan-devtools/tests/scan.test.ts b/packages/react-scan-devtools/tests/scan.test.ts index 0571c47d7..e5d32a71b 100644 --- a/packages/react-scan-devtools/tests/scan.test.ts +++ b/packages/react-scan-devtools/tests/scan.test.ts @@ -20,7 +20,7 @@ afterEach(() => { }) describe('startReactScan', () => { - it('calls scan once with showToolbar false', async () => { + it('calls scan once with showToolbar true', async () => { const { startReactScan } = await import('../src/core/scan') startReactScan({ enabled: true, log: true }) expect(scan).toHaveBeenCalledTimes(1) @@ -28,7 +28,7 @@ describe('startReactScan', () => { expect.objectContaining({ enabled: true, log: true, - showToolbar: false, + showToolbar: true, onRender: expect.any(Function), }), ) @@ -43,12 +43,12 @@ describe('startReactScan', () => { expect(scan).toHaveBeenCalledWith( expect.objectContaining({ enabled: true, - showToolbar: false, + showToolbar: true, }), ) expect(setOptions).toHaveBeenCalledWith({ enabled: false, - showToolbar: false, + showToolbar: true, }) }) @@ -64,7 +64,7 @@ describe('startReactScan', () => { ).toEqual( expect.objectContaining({ enabled: true, - showToolbar: false, + showToolbar: true, }), ) }) @@ -75,7 +75,7 @@ describe('startReactScan', () => { expect(scan).toHaveBeenCalledWith( expect.objectContaining({ dangerouslyForceRunInProduction: true, - showToolbar: false, + showToolbar: true, }), ) }) @@ -87,43 +87,16 @@ describe('startReactScan', () => { expect(scan).toHaveBeenCalledTimes(1) }) - it('calls the user onRender after the store update', async () => { + it('calls the user onRender', async () => { const userOnRender = vi.fn() const { startReactScan } = await import('../src/core/scan') - const { clearRenderStore, getRenderSnapshot } = - await import('../src/core/store') - clearRenderStore() startReactScan({ onRender: userOnRender }) const onRender = scan.mock.calls[0]?.[0]?.onRender as ( fiber: unknown, - renders: Array<{ - componentName: string - time: number - count: number - forget: boolean - changes: Array - unnecessary: boolean - didCommit: boolean - fps: number - phase: number - }>, + renders: Array, ) => void - const renders = [ - { - phase: 2, - componentName: 'Box', - time: 1, - count: 1, - forget: false, - changes: [], - unnecessary: false, - didCommit: true, - fps: 60, - }, - ] - onRender({}, renders) - expect(getRenderSnapshot()[0]?.name).toBe('Box') - expect(userOnRender).toHaveBeenCalledWith({}, renders) + onRender({}, []) + expect(userOnRender).toHaveBeenCalledWith({}, []) }) it('keeps the first user onRender on a later start call', async () => { @@ -141,14 +114,14 @@ describe('startReactScan', () => { expect(second).not.toHaveBeenCalled() }) - it('forces showToolbar false on setOptions', async () => { + it('keeps showToolbar true on setOptions', async () => { const { startReactScan, updateReactScanOptions } = await import('../src/core/scan') startReactScan() updateReactScanOptions({ enabled: false }) expect(setOptions).toHaveBeenCalledWith({ enabled: false, - showToolbar: false, + showToolbar: true, }) }) diff --git a/packages/react-scan-devtools/tests/store.test.ts b/packages/react-scan-devtools/tests/store.test.ts deleted file mode 100644 index a18b0b097..000000000 --- a/packages/react-scan-devtools/tests/store.test.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { describe, expect, it } from 'vitest' -import { - applyRenders, - clearRenderStore, - getRenderSnapshot, - subscribeToRenderStore, -} from '../src/core/store' -import { - MAX_RENDERS_PER_COMPONENT, - UNKNOWN_COMPONENT_NAME, -} from '../src/core/types' -import type { Render } from '../src/core/types' - -function render( - partial: Partial & Pick, -): Render { - return { - phase: 2, - time: 1, - count: 1, - forget: false, - changes: [], - unnecessary: false, - didCommit: true, - fps: 60, - ...partial, - } -} - -describe('render store', () => { - it('aggregates count, time, unnecessary, and last fps by name', () => { - clearRenderStore() - applyRenders([ - render({ - componentName: 'Counter', - count: 2, - time: 3, - unnecessary: true, - fps: 55, - }), - render({ - componentName: 'Counter', - count: 1, - time: 4, - unnecessary: false, - fps: 50, - changes: [ - { - type: 1, - name: 'value', - value: 2, - prevValue: 1, - }, - ], - }), - ]) - - expect(getRenderSnapshot()).toEqual([ - { - name: 'Counter', - renders: 3, - timeMs: 7, - unnecessary: 1, - lastFps: 50, - lastChanges: [ - { - type: 1, - name: 'value', - value: 2, - prevValue: 1, - }, - ], - lastRenders: expect.any(Array), - }, - ]) - expect(getRenderSnapshot()[0]?.lastRenders).toHaveLength(2) - }) - - it('uses (unknown) when componentName is null', () => { - clearRenderStore() - applyRenders([render({ componentName: null })]) - expect(getRenderSnapshot()[0]?.name).toBe(UNKNOWN_COMPONENT_NAME) - }) - - it('does not add null time to timeMs', () => { - clearRenderStore() - applyRenders([render({ componentName: 'A', time: null, count: 1 })]) - expect(getRenderSnapshot()[0]?.timeMs).toBe(0) - }) - - it('clears the snapshot', () => { - clearRenderStore() - applyRenders([render({ componentName: 'A' })]) - clearRenderStore() - expect(getRenderSnapshot()).toEqual([]) - }) - - it('keeps at most 50 last renders per name', () => { - clearRenderStore() - applyRenders( - Array.from({ length: MAX_RENDERS_PER_COMPONENT + 5 }, () => - render({ componentName: 'Busy', count: 1 }), - ), - ) - expect(getRenderSnapshot()[0]?.lastRenders).toHaveLength( - MAX_RENDERS_PER_COMPONENT, - ) - expect(getRenderSnapshot()[0]?.renders).toBe(MAX_RENDERS_PER_COMPONENT + 5) - }) - - it('notifies subscribers and unsubscribes', () => { - clearRenderStore() - const calls: Array = [] - const stop = subscribeToRenderStore((rows) => { - calls.push(rows.length) - }) - applyRenders([render({ componentName: 'A' })]) - stop() - applyRenders([render({ componentName: 'B' })]) - expect(calls).toEqual([1]) - }) -}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3062c5b36..10974f45e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1806,15 +1806,9 @@ importers: packages/react-scan-devtools: dependencies: - '@tanstack/devtools-ui': - specifier: workspace:* - version: link:../devtools-ui '@tanstack/devtools-utils': specifier: workspace:^ version: link:../devtools-utils - goober: - specifier: ^2.1.16 - version: 2.1.18(csstype@3.2.3) react-scan: specifier: ^0.5.7 version: 0.5.7(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(esbuild@0.27.4)(eslint@9.39.4(jiti@2.7.0))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(rollup@4.60.1) @@ -22463,7 +22457,7 @@ snapshots: dependencies: citty: 0.2.1 pathe: 2.0.3 - tinyexec: 1.0.4 + tinyexec: 1.3.0 object-assign@4.1.1: {} From f2e9bd5d7f3f20f927903b407ccc2a2cc5868d74 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Mon, 17 Aug 2026 19:02:32 +0200 Subject: [PATCH 3/5] fix: mount native React Scan UI inside the plugin pane --- .../src/core/components/Shell.tsx | 5 +- .../src/core/host-toolbar.ts | 190 +++++++++--------- .../tests/host-toolbar.test.ts | 64 ++---- 3 files changed, 112 insertions(+), 147 deletions(-) diff --git a/packages/react-scan-devtools/src/core/components/Shell.tsx b/packages/react-scan-devtools/src/core/components/Shell.tsx index e6449c8d3..ca20364f7 100644 --- a/packages/react-scan-devtools/src/core/components/Shell.tsx +++ b/packages/react-scan-devtools/src/core/components/Shell.tsx @@ -20,11 +20,10 @@ export function Shell() { data-tsd-surface data-testid="react-scan-host" style={{ - position: 'absolute', - inset: '0', + position: 'relative', height: '100%', width: '100%', - 'min-height': '180px', + 'min-height': '100%', }} /> ) diff --git a/packages/react-scan-devtools/src/core/host-toolbar.ts b/packages/react-scan-devtools/src/core/host-toolbar.ts index 5f52aa573..95523217b 100644 --- a/packages/react-scan-devtools/src/core/host-toolbar.ts +++ b/packages/react-scan-devtools/src/core/host-toolbar.ts @@ -3,43 +3,22 @@ const DOCK_STYLE_ID = 'tsd-react-scan-dock-style' const COLLAPSED_STORAGE_KEY = 'react-scan-widget-collapsed-v1' const DOCKED_MARKER = 'tsd-react-scan-docked' -function getShadowRoot(): ShadowRoot | null { - const root = document.getElementById(REACT_SCAN_ROOT_ID) - return root?.shadowRoot ?? null -} - -function boxFor(host: HTMLElement): DOMRect { - const pane = host.closest('[id^="plugin-container-"]') - if (pane instanceof HTMLElement) { - const paneRect = pane.getBoundingClientRect() - if (paneRect.height >= 80) { - return paneRect - } - } - const self = host.getBoundingClientRect() - if (self.height >= 80) { - return self - } - let current: HTMLElement | null = host.parentElement - while (current) { - const rect = current.getBoundingClientRect() - if (rect.height >= 80) { - return rect - } - current = current.parentElement - } - return self -} - -function dockCss(rect: DOMRect): string { - return ` +const FILL_CSS = ` /* ${DOCKED_MARKER} */ +#react-scan-root { + position: absolute !important; + inset: 0 !important; + width: 100% !important; + height: 100% !important; + pointer-events: none !important; +} #react-scan-toolbar { - position: fixed !important; - top: ${rect.top}px !important; - left: ${rect.left}px !important; - width: ${rect.width}px !important; - height: ${rect.height}px !important; + position: absolute !important; + inset: 0 !important; + top: 0 !important; + left: 0 !important; + width: 100% !important; + height: 100% !important; max-width: none !important; max-height: none !important; min-width: 0 !important; @@ -49,7 +28,7 @@ function dockCss(rect: DOMRect): string { border-radius: 0 !important; box-shadow: none !important; animation: none !important; - inset: auto !important; + pointer-events: auto !important; } #react-scan-toolbar.opacity-0 { opacity: 1 !important; @@ -61,6 +40,18 @@ function dockCss(rect: DOMRect): string { display: none !important; } ` + +function getRoot(): HTMLElement | null { + return document.getElementById(REACT_SCAN_ROOT_ID) +} + +function getShadowRoot(root = getRoot()): ShadowRoot | null { + return root?.shadowRoot ?? null +} + +function paneFor(host: HTMLElement): HTMLElement { + const pane = host.closest('[id^="plugin-container-"]') + return pane instanceof HTMLElement ? pane : host } function ensureDockStyle(shadow: ShadowRoot): HTMLStyleElement { @@ -74,12 +65,36 @@ function ensureDockStyle(shadow: ShadowRoot): HTMLStyleElement { return style } -function syncDockStyle(host: HTMLElement, style: HTMLStyleElement) { - style.textContent = dockCss(boxFor(host)) +function applyFillCss(root: HTMLElement) { + const shadow = getShadowRoot(root) + if (!shadow) { + return + } + ensureDockStyle(shadow).textContent = FILL_CSS +} + +function hideFillCss(root: HTMLElement | null) { + const shadow = getShadowRoot(root ?? undefined) + if (!shadow) { + return + } + const style = ensureDockStyle(shadow) + const dockedInPane = + !!root && + root.parentElement !== document.documentElement && + style.textContent.includes(DOCKED_MARKER) + if (dockedInPane) { + return + } + style.textContent = ` +#react-scan-toolbar { + display: none !important; +} +` } -function waitForShadowRoot(timeoutMs: number): Promise { - const existing = getShadowRoot() +function waitForRoot(timeoutMs: number): Promise { + const existing = getRoot() if (existing) { return Promise.resolve(existing) } @@ -87,10 +102,10 @@ function waitForShadowRoot(timeoutMs: number): Promise { return new Promise((resolve) => { const startedAt = Date.now() const observer = new MutationObserver(() => { - const shadow = getShadowRoot() - if (shadow) { + const root = getRoot() + if (root) { observer.disconnect() - resolve(shadow) + resolve(root) } }) observer.observe(document.documentElement, { @@ -99,10 +114,10 @@ function waitForShadowRoot(timeoutMs: number): Promise { }) const tick = () => { - const shadow = getShadowRoot() - if (shadow) { + const root = getRoot() + if (root) { observer.disconnect() - resolve(shadow) + resolve(root) return } if (Date.now() - startedAt >= timeoutMs) { @@ -125,74 +140,57 @@ export function expandReactScanToolbar() { } export function hideReactScanToolbar() { - void waitForShadowRoot(8000).then((shadow) => { - if (!shadow) { - return - } - const style = ensureDockStyle(shadow) - if (style.textContent.includes(DOCKED_MARKER)) { - return - } - style.textContent = ` -#react-scan-toolbar { - display: none !important; -} -` + void waitForRoot(8000).then((root) => { + hideFillCss(root) }) } export function dockReactScanToolbar(host: HTMLElement): () => void { + const pane = paneFor(host) + const previousParent = document.documentElement let stopped = false - let style: HTMLStyleElement | null = null - let frame = 0 - const observers: Array = [] + let root: HTMLElement | null = null + let observer: MutationObserver | null = null - const sync = () => { - if (stopped || !style) { - return - } - syncDockStyle(host, style) - } - - const attach = (shadow: ShadowRoot) => { + const place = (next: HTMLElement) => { if (stopped) { return } - style = ensureDockStyle(shadow) - sync() - - if (typeof ResizeObserver !== 'undefined') { - const resize = new ResizeObserver(sync) - resize.observe(host) - observers.push(resize) + root = next + if (next.parentElement !== pane) { + pane.appendChild(next) } + pane.style.position = pane.style.position || 'relative' + pane.style.overflow = 'hidden' + applyFillCss(next) + } - window.addEventListener('resize', sync) - window.addEventListener('scroll', sync, true) + const attach = (next: HTMLElement) => { + place(next) + observer = new MutationObserver(() => { + const current = getRoot() + if (current && current.parentElement !== pane && !stopped) { + place(current) + } + }) + observer.observe(document.documentElement, { + childList: true, + subtree: true, + }) } - void waitForShadowRoot(8000).then((shadow) => { - if (shadow) { - attach(shadow) + void waitForRoot(8000).then((next) => { + if (next) { + attach(next) } }) - frame = window.setInterval(sync, 250) - return () => { stopped = true - window.clearInterval(frame) - window.removeEventListener('resize', sync) - window.removeEventListener('scroll', sync, true) - for (const observer of observers) { - observer.disconnect() - } - if (style) { - style.textContent = ` -#react-scan-toolbar { - display: none !important; -} -` + observer?.disconnect() + if (root && root.parentElement === pane) { + previousParent.appendChild(root) } + hideFillCss(root) } } diff --git a/packages/react-scan-devtools/tests/host-toolbar.test.ts b/packages/react-scan-devtools/tests/host-toolbar.test.ts index d9873dca6..83ad619fa 100644 --- a/packages/react-scan-devtools/tests/host-toolbar.test.ts +++ b/packages/react-scan-devtools/tests/host-toolbar.test.ts @@ -11,79 +11,47 @@ function mountScanRoot() { const toolbar = document.createElement('div') toolbar.id = 'react-scan-toolbar' shadow.appendChild(toolbar) - document.body.appendChild(root) + document.documentElement.appendChild(root) return { root, shadow, toolbar } } -function fakeBox( - top: number, - left: number, - width: number, - height: number, -): () => DOMRect { - return () => - ({ - top, - left, - width, - height, - right: left + width, - bottom: top + height, - x: left, - y: top, - toJSON: () => ({}), - }) as DOMRect -} - describe('dockReactScanToolbar', () => { afterEach(() => { document.getElementById('react-scan-root')?.remove() }) - it('injects dock styles that pin the native toolbar to the host box', async () => { - const { shadow } = mountScanRoot() + it('moves the native root into the plugin pane and fills it', async () => { + const { root, shadow } = mountScanRoot() + const pane = document.createElement('div') + pane.id = 'plugin-container-react-scan' const host = document.createElement('div') - Object.defineProperty(host, 'getBoundingClientRect', { - value: fakeBox(10, 20, 300, 200), - }) - document.body.appendChild(host) + pane.appendChild(host) + document.body.appendChild(pane) const stop = dockReactScanToolbar(host) await Promise.resolve() + + expect(root.parentElement).toBe(pane) const style = shadow.getElementById('tsd-react-scan-dock-style') - expect(style?.textContent).toContain('top: 10px') - expect(style?.textContent).toContain('height: 200px') + expect(style?.textContent).toContain('tsd-react-scan-docked') + expect(style?.textContent).toContain('position: absolute') hideReactScanToolbar() await Promise.resolve() expect(style?.textContent).toContain('tsd-react-scan-docked') - expect(style?.textContent).toContain('height: 200px') stop() + expect(root.parentElement).toBe(document.documentElement) expect(style?.textContent).toMatch(/display:\s*none/) - host.remove() + pane.remove() }) - it('uses a parent pane when the host has no height', async () => { + it('hides the toolbar when it is not docked', async () => { const { shadow } = mountScanRoot() - const shortHost = document.createElement('div') - Object.defineProperty(shortHost, 'getBoundingClientRect', { - value: fakeBox(0, 0, 100, 0), - }) - const tallParent = document.createElement('div') - tallParent.id = 'plugin-container-react-scan' - Object.defineProperty(tallParent, 'getBoundingClientRect', { - value: fakeBox(40, 8, 400, 240), - }) - tallParent.appendChild(shortHost) - document.body.appendChild(tallParent) - - const stop = dockReactScanToolbar(shortHost) + hideReactScanToolbar() await Promise.resolve() expect( shadow.getElementById('tsd-react-scan-dock-style')?.textContent, - ).toContain('height: 240px') - stop() - tallParent.remove() + ).toMatch(/display:\s*none/) }) }) From 66cd5d6047bc26bfdb4123ef466bcd61b60563d8 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Mon, 17 Aug 2026 19:56:42 +0200 Subject: [PATCH 4/5] refactor: write the React Scan plugin in React --- docs/plugins/react-scan.md | 13 +- packages/react-scan-devtools/README.md | 2 +- packages/react-scan-devtools/package.json | 7 +- .../src/core/components/Shell.tsx | 24 +- .../src/core/components/index.tsx | 7 - .../src/core/host-toolbar.ts | 312 +++++++++++++----- .../react-scan-devtools/src/core/index.ts | 7 - packages/react-scan-devtools/src/core/scan.ts | 2 +- packages/react-scan-devtools/src/panel.ts | 12 +- .../src/production/panel.ts | 7 +- .../tests/host-toolbar.test.ts | 34 +- .../react-scan-devtools/tests/plugin.test.ts | 1 - packages/react-scan-devtools/tsconfig.json | 3 +- packages/react-scan-devtools/vite.config.ts | 11 +- pnpm-lock.yaml | 13 +- 15 files changed, 296 insertions(+), 159 deletions(-) delete mode 100644 packages/react-scan-devtools/src/core/components/index.tsx delete mode 100644 packages/react-scan-devtools/src/core/index.ts diff --git a/docs/plugins/react-scan.md b/docs/plugins/react-scan.md index b616a099b..b19434932 100644 --- a/docs/plugins/react-scan.md +++ b/docs/plugins/react-scan.md @@ -3,9 +3,9 @@ title: React Scan Plugin id: react-scan-plugin --- -You want the full [react-scan](https://github.com/aidenybai/react-scan) workbench inside TanStack Devtools, not a second floating toolbar on the page. This plugin starts `react-scan` and docks its native UI into the TanStack tab. +You want the official [react-scan](https://github.com/aidenybai/react-scan) panel inside TanStack Devtools, not a second floating toolbar on the page. This plugin starts `scan()` in the app, so app re-renders are scanned. It then locks the native React Scan panel into the TanStack tab. -That native UI includes: +That native panel includes: - Inspect mode to pick a component on the page - The inspector: What Changed, props, and the component tree @@ -13,7 +13,7 @@ That native UI includes: - Outline toggle for re-renders - FPS meter -Page outlines stay on the page. The toolbar sits in the plugin pane. +Page outlines stay on the page. The native panel fills the plugin pane. You cannot drag it and it has no close control. Close the tab from TanStack Devtools. ## Installation @@ -49,8 +49,9 @@ Do not also load `react-scan/dist/auto.global.js`. Two scanners will run at the 1. Open the **React Scan** plugin. 2. Click the inspect icon, then click a component in the app. 3. The inspector shows why that component rendered and its tree. -4. Click the bell for slowdown notifications. -5. Use the outline toggle to turn page outlines on or off. +4. Interact with the app (for example click **Increment count**). What Changed updates for the selected component. +5. Click the bell for slowdown notifications. +6. Use the outline toggle to turn page outlines on or off. ## Options @@ -82,4 +83,4 @@ If you want the real plugin in every environment, import `@tanstack/react-scan-d ## Example -See `examples/react/basic`. Open the React Scan tab, click inspect, then click **Increment count**. +See `examples/react/basic`. Open the React Scan tab, click inspect, click **Increment count**, then click it again to see What Changed. diff --git a/packages/react-scan-devtools/README.md b/packages/react-scan-devtools/README.md index 2b05e7296..7e3113582 100644 --- a/packages/react-scan-devtools/README.md +++ b/packages/react-scan-devtools/README.md @@ -1,6 +1,6 @@ # @tanstack/react-scan-devtools -React Scan plugin for TanStack Devtools. It starts `react-scan` and docks the native React Scan UI (inspect, What Changed, notifications, FPS) into the TanStack tab. +React Scan plugin for TanStack Devtools. It starts `react-scan` in the app and docks the official React Scan panel into the TanStack tab. ```bash npm install @tanstack/react-scan-devtools react-scan diff --git a/packages/react-scan-devtools/package.json b/packages/react-scan-devtools/package.json index c51e784ed..1bfe63e37 100644 --- a/packages/react-scan-devtools/package.json +++ b/packages/react-scan-devtools/package.json @@ -62,15 +62,14 @@ }, "dependencies": { "@tanstack/devtools-utils": "workspace:^", - "react-scan": "^0.5.7", - "solid-js": "^1.9.9" + "react-scan": "^0.5.7" }, "devDependencies": { "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", + "@vitejs/plugin-react": "^6.0.1", "react": "^19.2.0", - "react-dom": "^19.2.0", - "vite-plugin-solid": "^2.11.11" + "react-dom": "^19.2.0" }, "peerDependencies": { "@types/react": ">=17.0.0", diff --git a/packages/react-scan-devtools/src/core/components/Shell.tsx b/packages/react-scan-devtools/src/core/components/Shell.tsx index ca20364f7..d9590ebe2 100644 --- a/packages/react-scan-devtools/src/core/components/Shell.tsx +++ b/packages/react-scan-devtools/src/core/components/Shell.tsx @@ -1,30 +1,32 @@ -/** @jsxImportSource solid-js */ - -import { onCleanup, onMount } from 'solid-js' +import { useEffect, useRef } from 'react' import { dockReactScanToolbar } from '../host-toolbar' -export function Shell() { - let host: HTMLDivElement | undefined +export function ReactScanDevtoolsPanel() { + const hostRef = useRef(null) - onMount(() => { + useEffect(() => { + const host = hostRef.current if (!host) { return } - const stop = dockReactScanToolbar(host) - onCleanup(stop) - }) + return dockReactScanToolbar(host) + }, []) return (
) } + +export function ReactScanDevtoolsPanelNoOp() { + return null +} diff --git a/packages/react-scan-devtools/src/core/components/index.tsx b/packages/react-scan-devtools/src/core/components/index.tsx deleted file mode 100644 index 26230a302..000000000 --- a/packages/react-scan-devtools/src/core/components/index.tsx +++ /dev/null @@ -1,7 +0,0 @@ -/** @jsxImportSource solid-js */ - -import { Shell } from './Shell' - -export default function Devtools() { - return -} diff --git a/packages/react-scan-devtools/src/core/host-toolbar.ts b/packages/react-scan-devtools/src/core/host-toolbar.ts index 95523217b..664a34c9a 100644 --- a/packages/react-scan-devtools/src/core/host-toolbar.ts +++ b/packages/react-scan-devtools/src/core/host-toolbar.ts @@ -1,34 +1,113 @@ const REACT_SCAN_ROOT_ID = 'react-scan-root' const DOCK_STYLE_ID = 'tsd-react-scan-dock-style' +const DOCUMENT_STYLE_ID = 'tsd-react-scan-root-style' const COLLAPSED_STORAGE_KEY = 'react-scan-widget-collapsed-v1' +const WIDGET_SETTINGS_KEY = 'react-scan-widget-settings-v2' +const LAST_VIEW_KEY = 'react-scan-widget-last-view-v1' const DOCKED_MARKER = 'tsd-react-scan-docked' +const INTERACTIVE_SELECTOR = + 'button, a, input, textarea, select, pre, [contenteditable], [data-react-scan-selectable]' -const FILL_CSS = ` -/* ${DOCKED_MARKER} */ -#react-scan-root { - position: absolute !important; - inset: 0 !important; - width: 100% !important; - height: 100% !important; +function getRoot(): HTMLElement | null { + return document.getElementById(REACT_SCAN_ROOT_ID) +} + +function getShadowRoot(root = getRoot()): ShadowRoot | null { + return root?.shadowRoot ?? null +} + +function getToolbar(shadow: ShadowRoot): HTMLElement | null { + const toolbar = shadow.getElementById('react-scan-toolbar') + return toolbar instanceof HTMLElement ? toolbar : null +} + +function paneFor(host: HTMLElement): HTMLElement { + const pane = host.closest('[id^="plugin-container-"]') + return pane instanceof HTMLElement ? pane : host +} + +export function resetReactScanWidgetStorage() { + if (typeof localStorage === 'undefined') { + return + } + try { + localStorage.removeItem(COLLAPSED_STORAGE_KEY) + localStorage.removeItem(WIDGET_SETTINGS_KEY) + localStorage.removeItem(LAST_VIEW_KEY) + } catch { + // Private mode and quota errors must not stop the plugin. + } +} + +resetReactScanWidgetStorage() + +function ensureDocumentStyle() { + if (typeof document === 'undefined') { + return + } + let style = document.getElementById(DOCUMENT_STYLE_ID) + if (!(style instanceof HTMLStyleElement)) { + style = document.createElement('style') + style.id = DOCUMENT_STYLE_ID + document.head.appendChild(style) + } + // The host must not eat page clicks. Inspect then listens on the document + // and reads the real app element under the pointer. + style.textContent = ` +#${REACT_SCAN_ROOT_ID} { + position: static !important; + transform: none !important; + filter: none !important; + perspective: none !important; + contain: none !important; + will-change: auto !important; pointer-events: none !important; } +` +} + +function ensureDockStyle(shadow: ShadowRoot): HTMLStyleElement { + const existing = shadow.getElementById(DOCK_STYLE_ID) + if (existing instanceof HTMLStyleElement) { + return existing + } + const style = document.createElement('style') + style.id = DOCK_STYLE_ID + shadow.appendChild(style) + return style +} + +function hideCss(): string { + return ` #react-scan-toolbar { - position: absolute !important; - inset: 0 !important; - top: 0 !important; - left: 0 !important; - width: 100% !important; - height: 100% !important; + display: none !important; +} +` +} + +function dockCss(rect: DOMRect): string { + return ` +/* ${DOCKED_MARKER} */ +#react-scan-toolbar { + position: fixed !important; + top: ${rect.top}px !important; + left: ${rect.left}px !important; + width: ${rect.width}px !important; + height: ${rect.height}px !important; max-width: none !important; max-height: none !important; min-width: 0 !important; min-height: 0 !important; transform: none !important; + translate: 0 !important; opacity: 1 !important; border-radius: 0 !important; box-shadow: none !important; animation: none !important; + inset: auto !important; pointer-events: auto !important; + cursor: default !important; + z-index: 2147483646 !important; } #react-scan-toolbar.opacity-0 { opacity: 1 !important; @@ -39,58 +118,67 @@ const FILL_CSS = ` #react-scan-toolbar .resize-bottom { display: none !important; } +#react-scan-toolbar button[title="Close"] { + display: none !important; +} ` - -function getRoot(): HTMLElement | null { - return document.getElementById(REACT_SCAN_ROOT_ID) } -function getShadowRoot(root = getRoot()): ShadowRoot | null { - return root?.shadowRoot ?? null +function pinToolbar(toolbar: HTMLElement, rect: DOMRect) { + toolbar.style.setProperty('position', 'fixed', 'important') + toolbar.style.setProperty('top', `${rect.top}px`, 'important') + toolbar.style.setProperty('left', `${rect.left}px`, 'important') + toolbar.style.setProperty('width', `${rect.width}px`, 'important') + toolbar.style.setProperty('height', `${rect.height}px`, 'important') + toolbar.style.setProperty('max-width', 'none', 'important') + toolbar.style.setProperty('max-height', 'none', 'important') + toolbar.style.setProperty('transform', 'none', 'important') + toolbar.style.setProperty('translate', '0', 'important') + toolbar.style.setProperty('opacity', '1', 'important') + toolbar.style.setProperty('display', 'flex', 'important') } -function paneFor(host: HTMLElement): HTMLElement { - const pane = host.closest('[id^="plugin-container-"]') - return pane instanceof HTMLElement ? pane : host +function applyHide(shadow: ShadowRoot) { + const style = ensureDockStyle(shadow) + if (style.textContent.includes(DOCKED_MARKER)) { + return + } + style.textContent = hideCss() } -function ensureDockStyle(shadow: ShadowRoot): HTMLStyleElement { - const existing = shadow.getElementById(DOCK_STYLE_ID) - if (existing instanceof HTMLStyleElement) { - return existing +function syncDock(pane: HTMLElement, style: HTMLStyleElement) { + const rect = pane.getBoundingClientRect() + if (rect.width < 40 || rect.height < 40) { + style.textContent = hideCss() + return + } + style.textContent = dockCss(rect) + const toolbar = getToolbar(style.getRootNode() as ShadowRoot) + if (toolbar) { + pinToolbar(toolbar, rect) } - const style = document.createElement('style') - style.id = DOCK_STYLE_ID - shadow.appendChild(style) - return style } -function applyFillCss(root: HTMLElement) { - const shadow = getShadowRoot(root) - if (!shadow) { - return +function expandOnce(shadow: ShadowRoot) { + const expand = shadow.querySelector('button[title="Expand toolbar"]') + if (expand instanceof HTMLElement) { + expand.click() } - ensureDockStyle(shadow).textContent = FILL_CSS } -function hideFillCss(root: HTMLElement | null) { - const shadow = getShadowRoot(root ?? undefined) - if (!shadow) { - return +function blockDrag(toolbar: HTMLElement): () => void { + const onPointerDown = (event: Event) => { + const target = event.target + if (target instanceof Element && target.closest(INTERACTIVE_SELECTOR)) { + return + } + event.stopImmediatePropagation() + event.preventDefault() } - const style = ensureDockStyle(shadow) - const dockedInPane = - !!root && - root.parentElement !== document.documentElement && - style.textContent.includes(DOCKED_MARKER) - if (dockedInPane) { - return + toolbar.addEventListener('pointerdown', onPointerDown, true) + return () => { + toolbar.removeEventListener('pointerdown', onPointerDown, true) } - style.textContent = ` -#react-scan-toolbar { - display: none !important; -} -` } function waitForRoot(timeoutMs: number): Promise { @@ -132,65 +220,119 @@ function waitForRoot(timeoutMs: number): Promise { } export function expandReactScanToolbar() { - try { - localStorage.removeItem(COLLAPSED_STORAGE_KEY) - } catch { - // ignore - } + resetReactScanWidgetStorage() } export function hideReactScanToolbar() { void waitForRoot(8000).then((root) => { - hideFillCss(root) + const shadow = getShadowRoot(root ?? undefined) + if (shadow) { + applyHide(shadow) + } }) } export function dockReactScanToolbar(host: HTMLElement): () => void { + ensureDocumentStyle() const pane = paneFor(host) - const previousParent = document.documentElement let stopped = false - let root: HTMLElement | null = null - let observer: MutationObserver | null = null + let style: HTMLStyleElement | null = null + let frame = 0 + let stopDrag: (() => void) | null = null + let boundToolbar: HTMLElement | null = null + let didExpand = false + const observers: Array = [] + + const keepOnDocument = (root: HTMLElement) => { + if (root.parentElement !== document.documentElement) { + document.documentElement.appendChild(root) + } + } - const place = (next: HTMLElement) => { + const bindToolbar = (toolbar: HTMLElement) => { + if (boundToolbar === toolbar) { + return + } + stopDrag?.() + boundToolbar = toolbar + stopDrag = blockDrag(toolbar) + } + + const sync = () => { if (stopped) { return } - root = next - if (next.parentElement !== pane) { - pane.appendChild(next) + const root = getRoot() + if (!root) { + return + } + keepOnDocument(root) + const shadow = getShadowRoot(root) + if (!shadow) { + return + } + if (!style) { + style = ensureDockStyle(shadow) } - pane.style.position = pane.style.position || 'relative' - pane.style.overflow = 'hidden' - applyFillCss(next) + if (!didExpand) { + expandOnce(shadow) + didExpand = true + } + const toolbar = getToolbar(shadow) + if (toolbar) { + bindToolbar(toolbar) + } + syncDock(pane, style) } - const attach = (next: HTMLElement) => { - place(next) - observer = new MutationObserver(() => { - const current = getRoot() - if (current && current.parentElement !== pane && !stopped) { - place(current) - } - }) - observer.observe(document.documentElement, { - childList: true, - subtree: true, - }) + const attach = (root: HTMLElement) => { + if (stopped) { + return + } + keepOnDocument(root) + const shadow = getShadowRoot(root) + if (!shadow) { + return + } + style = ensureDockStyle(shadow) + sync() + + if (typeof ResizeObserver !== 'undefined') { + const resize = new ResizeObserver(sync) + resize.observe(pane) + observers.push(resize) + } + + window.addEventListener('resize', sync) + window.addEventListener('scroll', sync, true) } - void waitForRoot(8000).then((next) => { - if (next) { - attach(next) + void waitForRoot(8000).then((root) => { + if (root) { + attach(root) } }) + const tick = () => { + if (stopped) { + return + } + sync() + frame = window.requestAnimationFrame(tick) + } + frame = window.requestAnimationFrame(tick) + return () => { stopped = true - observer?.disconnect() - if (root && root.parentElement === pane) { - previousParent.appendChild(root) + window.cancelAnimationFrame(frame) + window.removeEventListener('resize', sync) + window.removeEventListener('scroll', sync, true) + stopDrag?.() + for (const observer of observers) { + observer.disconnect() + } + if (style) { + style.textContent = hideCss() } - hideFillCss(root) } } diff --git a/packages/react-scan-devtools/src/core/index.ts b/packages/react-scan-devtools/src/core/index.ts deleted file mode 100644 index beaee4377..000000000 --- a/packages/react-scan-devtools/src/core/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** @jsxImportSource solid-js */ - -import { constructCoreClass } from '@tanstack/devtools-utils/solid' - -const [ReactScanDevtoolsCore] = constructCoreClass(() => import('./components')) - -export { ReactScanDevtoolsCore } diff --git a/packages/react-scan-devtools/src/core/scan.ts b/packages/react-scan-devtools/src/core/scan.ts index 01ba00a6f..fbd8ba592 100644 --- a/packages/react-scan-devtools/src/core/scan.ts +++ b/packages/react-scan-devtools/src/core/scan.ts @@ -1,5 +1,5 @@ -import { scan, setOptions } from 'react-scan' import { expandReactScanToolbar, hideReactScanToolbar } from './host-toolbar' +import { scan, setOptions } from 'react-scan' import { DEFAULT_PLUGIN_SETTINGS } from './types' import type { Options } from 'react-scan' import type { ReactScanDevtoolsOptions, ReactScanPluginSettings } from './types' diff --git a/packages/react-scan-devtools/src/panel.ts b/packages/react-scan-devtools/src/panel.ts index 24b7fb80e..9a4c3432f 100644 --- a/packages/react-scan-devtools/src/panel.ts +++ b/packages/react-scan-devtools/src/panel.ts @@ -1,8 +1,4 @@ -import { createReactPanel } from '@tanstack/devtools-utils/react' -import { ReactScanDevtoolsCore } from './core' - -const [ReactScanDevtoolsPanel, ReactScanDevtoolsPanelNoOp] = createReactPanel( - ReactScanDevtoolsCore, -) - -export { ReactScanDevtoolsPanel, ReactScanDevtoolsPanelNoOp } +export { + ReactScanDevtoolsPanel, + ReactScanDevtoolsPanelNoOp, +} from './core/components/Shell' diff --git a/packages/react-scan-devtools/src/production/panel.ts b/packages/react-scan-devtools/src/production/panel.ts index e87f6558c..e265c689f 100644 --- a/packages/react-scan-devtools/src/production/panel.ts +++ b/packages/react-scan-devtools/src/production/panel.ts @@ -1,6 +1 @@ -import { createReactPanel } from '@tanstack/devtools-utils/react' -import { ReactScanDevtoolsCore } from '../core' - -const [ReactScanDevtoolsPanel] = createReactPanel(ReactScanDevtoolsCore) - -export { ReactScanDevtoolsPanel } +export { ReactScanDevtoolsPanel } from '../core/components/Shell' diff --git a/packages/react-scan-devtools/tests/host-toolbar.test.ts b/packages/react-scan-devtools/tests/host-toolbar.test.ts index 83ad619fa..32a4766fc 100644 --- a/packages/react-scan-devtools/tests/host-toolbar.test.ts +++ b/packages/react-scan-devtools/tests/host-toolbar.test.ts @@ -15,15 +15,38 @@ function mountScanRoot() { return { root, shadow, toolbar } } +function fakeBox( + top: number, + left: number, + width: number, + height: number, +): () => DOMRect { + return () => + ({ + top, + left, + width, + height, + right: left + width, + bottom: top + height, + x: left, + y: top, + toJSON: () => ({}), + }) as DOMRect +} + describe('dockReactScanToolbar', () => { afterEach(() => { document.getElementById('react-scan-root')?.remove() }) - it('moves the native root into the plugin pane and fills it', async () => { + it('keeps the native root on the document and pins the toolbar to the pane box', async () => { const { root, shadow } = mountScanRoot() const pane = document.createElement('div') pane.id = 'plugin-container-react-scan' + Object.defineProperty(pane, 'getBoundingClientRect', { + value: fakeBox(80, 12, 640, 320), + }) const host = document.createElement('div') pane.appendChild(host) document.body.appendChild(pane) @@ -31,10 +54,15 @@ describe('dockReactScanToolbar', () => { const stop = dockReactScanToolbar(host) await Promise.resolve() - expect(root.parentElement).toBe(pane) + expect(root.parentElement).toBe(document.documentElement) const style = shadow.getElementById('tsd-react-scan-dock-style') expect(style?.textContent).toContain('tsd-react-scan-docked') - expect(style?.textContent).toContain('position: absolute') + expect(style?.textContent).toContain('position: fixed') + expect(style?.textContent).not.toContain('#react-scan-root') + expect(style?.textContent).toContain('top: 80px') + expect(style?.textContent).toContain('left: 12px') + expect(style?.textContent).toContain('width: 640px') + expect(style?.textContent).toContain('height: 320px') hideReactScanToolbar() await Promise.resolve() diff --git a/packages/react-scan-devtools/tests/plugin.test.ts b/packages/react-scan-devtools/tests/plugin.test.ts index 66e024598..1c77e9fa6 100644 --- a/packages/react-scan-devtools/tests/plugin.test.ts +++ b/packages/react-scan-devtools/tests/plugin.test.ts @@ -8,7 +8,6 @@ vi.mock('react-scan', () => ({ })) vi.mock('@tanstack/devtools-utils/react', () => ({ - createReactPanel: () => [() => null, () => null], createReactPlugin: ({ name, id }: { name: string; id?: string }) => [ () => ({ name, diff --git a/packages/react-scan-devtools/tsconfig.json b/packages/react-scan-devtools/tsconfig.json index bf61a1a91..aefc6f402 100644 --- a/packages/react-scan-devtools/tsconfig.json +++ b/packages/react-scan-devtools/tsconfig.json @@ -1,8 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "jsx": "preserve", - "jsxImportSource": "solid-js" + "jsx": "react-jsx" }, "include": ["src", "tests", "eslint.config.js", "vite.config.ts"] } diff --git a/packages/react-scan-devtools/vite.config.ts b/packages/react-scan-devtools/vite.config.ts index f0163145f..7fad50cf2 100644 --- a/packages/react-scan-devtools/vite.config.ts +++ b/packages/react-scan-devtools/vite.config.ts @@ -1,16 +1,12 @@ import { defineConfig, mergeConfig } from 'vitest/config' import { fileURLToPath } from 'node:url' import { tanstackViteConfig } from '@tanstack/vite-config' -import solid from 'vite-plugin-solid' +import react from '@vitejs/plugin-react' import packageJson from './package.json' import type { Plugin } from 'vite' const config = defineConfig({ - plugins: [ - solid({ - ssr: process.env.VITEST !== 'true', - }) as any satisfies Plugin, - ], + plugins: [react() as any satisfies Plugin], test: { name: packageJson.name, dir: './', @@ -22,9 +18,6 @@ const config = defineConfig({ '@tanstack/devtools-utils/react': fileURLToPath( new URL('../devtools-utils/src/react/index.ts', import.meta.url), ), - '@tanstack/devtools-utils/solid': fileURLToPath( - new URL('../devtools-utils/src/solid/index.ts', import.meta.url), - ), }, }, }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d18e191d..4f0c30474 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1812,9 +1812,6 @@ importers: react-scan: specifier: ^0.5.7 version: 0.5.7(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(esbuild@0.27.4)(eslint@9.39.4(jiti@2.7.0))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(rollup@4.60.1) - solid-js: - specifier: ^1.9.9 - version: 1.9.12 devDependencies: '@types/react': specifier: ^19.2.0 @@ -1822,15 +1819,15 @@ importers: '@types/react-dom': specifier: ^19.2.0 version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.0.1(babel-plugin-react-compiler@1.0.0)(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.9.0)) react: specifier: ^19.2.0 version: 19.2.6 react-dom: specifier: ^19.2.0 version: 19.2.6(react@19.2.6) - 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.9.0)) packages/solid-devtools: dependencies: @@ -18272,7 +18269,7 @@ snapshots: jsonc-parser: 3.3.1 picocolors: 1.1.1 prompts: 2.4.2 - yaml: 2.8.3 + yaml: 2.9.0 agent-install@0.0.6: dependencies: @@ -18281,7 +18278,7 @@ snapshots: jsonc-parser: 3.3.1 picocolors: 1.1.1 prompts: 2.4.2 - yaml: 2.8.3 + yaml: 2.9.0 ajv-draft-04@1.0.0(ajv@8.13.0): optionalDependencies: From 493ed7d69b87b404a69cd7d7d3cf877d2ec33a2f Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 17:57:40 +0000 Subject: [PATCH 5/5] ci: apply automated fixes --- packages/react-scan-devtools/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react-scan-devtools/README.md b/packages/react-scan-devtools/README.md index 7e3113582..4cf22b785 100644 --- a/packages/react-scan-devtools/README.md +++ b/packages/react-scan-devtools/README.md @@ -9,7 +9,6 @@ npm install @tanstack/react-scan-devtools react-scan ```tsx import { TanStackDevtools } from '@tanstack/react-devtools' import { reactScanDevtoolsPlugin } from '@tanstack/react-scan-devtools' - ; ```