diff --git a/apps/typegpu-docs/package.json b/apps/typegpu-docs/package.json index 446b422de..dbe4226c7 100644 --- a/apps/typegpu-docs/package.json +++ b/apps/typegpu-docs/package.json @@ -27,6 +27,7 @@ "@typegpu/color": "workspace:*", "@typegpu/noise": "workspace:*", "@typegpu/sdf": "workspace:*", + "@typegpu/react": "workspace:*", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "arktype": "catalog:", diff --git a/apps/typegpu-docs/src/components/ExampleView.tsx b/apps/typegpu-docs/src/components/ExampleView.tsx index b2e655940..ff4bffa2d 100644 --- a/apps/typegpu-docs/src/components/ExampleView.tsx +++ b/apps/typegpu-docs/src/components/ExampleView.tsx @@ -69,17 +69,21 @@ function useExample( export function ExampleView({ example }: Props) { const { tsFiles, tsImport, htmlFile } = example; + const filePaths = tsFiles.map((file) => file.path); + const entryFile = filePaths.find((path) => + path.startsWith('index.ts') + ) as string; + const [snackbarText, setSnackbarText] = useAtom(currentSnackbarAtom); - const [currentFilePath, setCurrentFilePath] = useState('index.ts'); + const [currentFilePath, setCurrentFilePath] = useState(entryFile); const codeEditorShowing = useAtomValue(codeEditorShownAtom); const codeEditorMobileShowing = useAtomValue(codeEditorShownMobileAtom); const exampleHtmlRef = useRef(null); - const filePaths = tsFiles.map((file) => file.path); const editorTabsList = [ - 'index.ts', - ...filePaths.filter((name) => name !== 'index.ts'), + entryFile, + ...filePaths.filter((name) => name !== entryFile), 'index.html', ]; diff --git a/apps/typegpu-docs/src/components/stackblitz/openInStackBlitz.ts b/apps/typegpu-docs/src/components/stackblitz/openInStackBlitz.ts index 5fb6dcb6f..f0e32c2ec 100644 --- a/apps/typegpu-docs/src/components/stackblitz/openInStackBlitz.ts +++ b/apps/typegpu-docs/src/components/stackblitz/openInStackBlitz.ts @@ -10,7 +10,12 @@ import typegpuNoisePackageJson from '@typegpu/noise/package.json' with { import typegpuSdfPackageJson from '@typegpu/sdf/package.json' with { type: 'json', }; -import typegpuPackageJson from 'typegpu/package.json' with { type: 'json' }; +import typegpuReactPackageJson from '@typegpu/react/package.json' with { + type: 'json', +}; +import typegpuPackageJson from 'typegpu/package.json' with { + type: 'json', +}; import unpluginPackageJson from 'unplugin-typegpu/package.json' with { type: 'json', }; @@ -128,6 +133,7 @@ ${example.htmlFile.content} "@typegpu/noise": "${typegpuNoisePackageJson.version}", "@typegpu/color": "${typegpuColorPackageJson.version}", "@typegpu/sdf": "${typegpuSdfPackageJson.version}" + "@typegpu/react": "${typegpuReactPackageJson.version}" } }`, 'vite.config.js': `\ diff --git a/apps/typegpu-docs/src/content/examples/react/triangle/index.html b/apps/typegpu-docs/src/content/examples/react/triangle/index.html new file mode 100644 index 000000000..974ed97c0 --- /dev/null +++ b/apps/typegpu-docs/src/content/examples/react/triangle/index.html @@ -0,0 +1 @@ +
diff --git a/apps/typegpu-docs/src/content/examples/react/triangle/index.tsx b/apps/typegpu-docs/src/content/examples/react/triangle/index.tsx new file mode 100644 index 000000000..ea9baa273 --- /dev/null +++ b/apps/typegpu-docs/src/content/examples/react/triangle/index.tsx @@ -0,0 +1,45 @@ +import * as d from 'typegpu/data'; +import { vec4f } from 'typegpu/data'; +import { useRender } from '@typegpu/react'; + +function App() { + const { ref } = useRender({ + vertex: ({ vertexIndex }) => { + 'kernel'; + const pos = [d.vec2f(-1, -1), d.vec2f(3, -1), d.vec2f(-1, 3)]; + const uv = [d.vec2f(0, 1), d.vec2f(2, 1), d.vec2f(0, -1)]; + + return { + pos: d.vec4f(pos[vertexIndex] as d.v2f, 0, 1), + uv: uv[vertexIndex] as d.v2f, + }; + }, + fragment: ({ uv }) => { + 'kernel'; + return vec4f(uv.x, uv.y, 1, 1); + }, + }); + + // TODO: Provide a time variable to the shader with useUniformValue + // TODO: Make the gradient shift colors over time using hsvToRgb from @typegpu/color + + return ( +
+ +
+ ); +} + +// #region Example controls and cleanup + +import { createRoot } from 'react-dom/client'; +const reactRoot = createRoot( + document.getElementById('example-app') as HTMLDivElement, +); +reactRoot.render(); + +export function onCleanup() { + reactRoot.unmount(); +} + +// #endregion diff --git a/apps/typegpu-docs/src/content/examples/react/triangle/meta.json b/apps/typegpu-docs/src/content/examples/react/triangle/meta.json new file mode 100644 index 000000000..537f2f145 --- /dev/null +++ b/apps/typegpu-docs/src/content/examples/react/triangle/meta.json @@ -0,0 +1,5 @@ +{ + "title": "React: Spinning Triangle", + "category": "react", + "tags": ["experimental"] +} diff --git a/apps/typegpu-docs/src/content/examples/react/triangle/thumbnail.png b/apps/typegpu-docs/src/content/examples/react/triangle/thumbnail.png new file mode 100644 index 000000000..889b2f297 Binary files /dev/null and b/apps/typegpu-docs/src/content/examples/react/triangle/thumbnail.png differ diff --git a/apps/typegpu-docs/src/utils/examples/exampleContent.ts b/apps/typegpu-docs/src/utils/examples/exampleContent.ts index f6a7302ea..48f438029 100644 --- a/apps/typegpu-docs/src/utils/examples/exampleContent.ts +++ b/apps/typegpu-docs/src/utils/examples/exampleContent.ts @@ -82,7 +82,10 @@ const metaFiles = R.pipe( ); const readonlyTsFiles = R.pipe( - import.meta.glob('../../content/examples/**/*.ts', { + import.meta.glob([ + '../../content/examples/**/*.ts', + '../../content/examples/**/*.tsx', + ], { query: 'raw', eager: true, import: 'default', @@ -91,7 +94,10 @@ const readonlyTsFiles = R.pipe( ); const tsFilesImportFunctions = R.pipe( - import.meta.glob('../../content/examples/**/index.ts') as Record< + import.meta.glob([ + '../../content/examples/**/index.ts', + '../../content/examples/**/index.tsx', + ]) as Record< string, () => Promise >, diff --git a/apps/typegpu-docs/src/utils/examples/sandboxModules.ts b/apps/typegpu-docs/src/utils/examples/sandboxModules.ts index 350e809dd..21b3d9efe 100644 --- a/apps/typegpu-docs/src/utils/examples/sandboxModules.ts +++ b/apps/typegpu-docs/src/utils/examples/sandboxModules.ts @@ -36,6 +36,21 @@ const allPackagesSrcFiles = pipe( fromEntries(), ); +const reactModules = pipe( + entries( + import.meta.glob( + '../../../node_modules/@types/react/**/*.d.ts', + { + query: 'raw', + eager: true, + import: 'default', + }, + ) as Record, + ), + map((dtsFile) => dtsFileToModule(dtsFile, '../../../node_modules/')), + fromEntries(), +); + const mediacaptureModules = pipe( entries( import.meta.glob( @@ -54,7 +69,11 @@ const mediacaptureModules = pipe( export const SANDBOX_MODULES: Record = { ...allPackagesSrcFiles, ...mediacaptureModules, + ...reactModules, + 'react': { + typeDef: { reroute: ['@types/react/index.d.ts'] }, + }, '@webgpu/types': { typeDef: { content: dtsWebGPU }, }, @@ -78,4 +97,10 @@ export const SANDBOX_MODULES: Record = { '@typegpu/color': { typeDef: { reroute: ['typegpu-color/src/index.ts'] }, }, + '@typegpu/sdf': { + typeDef: { reroute: ['typegpu-sdf/src/index.ts'] }, + }, + '@typegpu/react': { + typeDef: { reroute: ['typegpu-react/src/index.ts'] }, + }, }; diff --git a/apps/typegpu-docs/src/utils/liveEditor/embeddedTypeScript.ts b/apps/typegpu-docs/src/utils/liveEditor/embeddedTypeScript.ts index 4880ba14a..ee8e6513f 100644 --- a/apps/typegpu-docs/src/utils/liveEditor/embeddedTypeScript.ts +++ b/apps/typegpu-docs/src/utils/liveEditor/embeddedTypeScript.ts @@ -10,5 +10,6 @@ export const tsCompilerOptions: languages.typescript.CompilerOptions = { skipLibCheck: true, exactOptionalPropertyTypes: true, baseUrl: '.', + jsx: languages.typescript.JsxEmit.React, lib: ['dom', 'es2021'], }; diff --git a/packages/typegpu-react/README.md b/packages/typegpu-react/README.md new file mode 100644 index 000000000..e3d4081a2 --- /dev/null +++ b/packages/typegpu-react/README.md @@ -0,0 +1,34 @@ +
+ +# @typegpu/react + +🚧 **Under Construction** 🚧 + +
+ +# Basic usage (draft) + +```ts +import { hsvToRgb } from '@typegpu/color'; +import { useFrame, useRender, useUniformValue } from '@typegpu/react'; + +const App = (props: Props) => { + const time = useUniformValue(d.f32, 0); + const color = useMirroredUniform(d.vec3f, props.color); + + // Runs each frame on the CPU 🤖 + useFrame(() => { + time.value = performance.now() / 1000; + }); + + const { ref } = useRender({ + // Runs each frame on the GPU 🌈 + fragment: ({ uv }) => { + 'kernel'; + return hsvToRgb(time.$, uv.x, uv.y) * color.$; + }, + }); + + return ; +}; +``` diff --git a/packages/typegpu-react/deno.json b/packages/typegpu-react/deno.json new file mode 100644 index 000000000..734470f64 --- /dev/null +++ b/packages/typegpu-react/deno.json @@ -0,0 +1,7 @@ +{ + "exclude": ["."], + "fmt": { + "exclude": ["!.", "./dist"], + "singleQuote": true + } +} diff --git a/packages/typegpu-react/package.json b/packages/typegpu-react/package.json new file mode 100644 index 000000000..31f277437 --- /dev/null +++ b/packages/typegpu-react/package.json @@ -0,0 +1,45 @@ +{ + "name": "@typegpu/react", + "type": "module", + "version": "0.7.0", + "description": "The best way to integrate TypeGPU into your React app.", + "types": "./src/index.ts", + "exports": { + ".": "./src/index.ts", + "./package.json": "./package.json" + }, + "publishConfig": { + "directory": "dist", + "linkDirectory": false, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + "./package.json": "./dist/package.json", + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + } + }, + "sideEffects": false, + "scripts": { + "build": "tsdown", + "test:types": "pnpm tsc --p ./tsconfig.json --noEmit", + "prepublishOnly": "tgpu-dev-cli prepack" + }, + "keywords": [], + "license": "MIT", + "peerDependencies": { + "typegpu": "^0.7.0", + "react": "^19.0.0" + }, + "devDependencies": { + "@typegpu/tgpu-dev-cli": "workspace:*", + "@webgpu/types": "catalog:types", + "@types/react": "^19.0.0", + "tsdown": "catalog:build", + "typegpu": "workspace:*", + "typescript": "catalog:types", + "unplugin-typegpu": "workspace:*" + } +} diff --git a/packages/typegpu-react/src/index.ts b/packages/typegpu-react/src/index.ts new file mode 100644 index 000000000..f92b8da8f --- /dev/null +++ b/packages/typegpu-react/src/index.ts @@ -0,0 +1,3 @@ +export { useFrame } from './use-frame.ts'; +export { useRender } from './use-render.ts'; +export { useUniformValue } from './use-uniform-value.ts'; diff --git a/packages/typegpu-react/src/root-context.tsx b/packages/typegpu-react/src/root-context.tsx new file mode 100644 index 000000000..e0443f3cf --- /dev/null +++ b/packages/typegpu-react/src/root-context.tsx @@ -0,0 +1,56 @@ +import { + createContext, + type ReactNode, + use, + useContext, + useState, +} from 'react'; +import tgpu, { type TgpuRoot } from 'typegpu'; + +class RootContext { + #root: TgpuRoot | undefined; + #rootPromise: Promise | undefined; + + initOrGetRoot(): Promise | TgpuRoot { + if (this.#root) { + return this.#root; + } + + if (!this.#rootPromise) { + this.#rootPromise = tgpu.init().then((root) => { + this.#root = root; + return root; + }); + } + + return this.#rootPromise; + } +} + +/** + * Used in case no provider is mounted + */ +const globalRootContextValue = new RootContext(); + +const rootContext = createContext(null); + +export interface RootProps { + children?: ReactNode | undefined; +} + +export const Root = ({ children }: RootProps) => { + const [ctx] = useState(() => new RootContext()); + + return ( + + {children} + + ); +}; + +export function useRoot(): TgpuRoot { + const context = useContext(rootContext) ?? globalRootContextValue; + + const maybeRoot = context.initOrGetRoot(); + return maybeRoot instanceof Promise ? use(maybeRoot) : maybeRoot; +} diff --git a/packages/typegpu-react/src/use-frame.ts b/packages/typegpu-react/src/use-frame.ts new file mode 100644 index 000000000..66d767053 --- /dev/null +++ b/packages/typegpu-react/src/use-frame.ts @@ -0,0 +1,26 @@ +import { useEffect, useRef } from 'react'; + +export function useFrame(cb: () => void) { + const latestCb = useRef(cb); + + useEffect(() => { + latestCb.current = cb; + }, [cb]); + + useEffect(() => { + let frameId: number | undefined; + + const loop = () => { + frameId = requestAnimationFrame(loop); + latestCb.current(); + }; + + loop(); + + return () => { + if (frameId !== undefined) { + cancelAnimationFrame(frameId); + } + }; + }, []); +} diff --git a/packages/typegpu-react/src/use-render.ts b/packages/typegpu-react/src/use-render.ts new file mode 100644 index 000000000..a48f0f765 --- /dev/null +++ b/packages/typegpu-react/src/use-render.ts @@ -0,0 +1,98 @@ +import * as d from 'typegpu/data'; +import tgpu from 'typegpu'; +import { useRoot } from './root-context.tsx'; +import { useMemo, useRef } from 'react'; +import { useFrame } from './use-frame.ts'; + +type InferRecord = { + [K in keyof T]: d.Infer; +}; + +const DefaultVertexInput = { + vertexIndex: d.builtin.vertexIndex, +}; + +const DefaultVertexOutput = { + pos: d.builtin.position, + uv: d.vec2f, +}; + +const DefaultFragmentInput = { + uv: d.vec2f, +}; + +type VertexFnInput = InferRecord; +type VertexFnOutput = InferRecord; +type FragmentFnInput = InferRecord; +type FragmentFnOutput = d.v4f; + +export interface UseRenderOptions { + /** + * A kernel function that runs per-vertex on the GPU. + */ + vertex: (input: VertexFnInput) => VertexFnOutput; + + /** + * A kernel function that runs per-pixel on the GPU. + */ + fragment: (input: FragmentFnInput) => FragmentFnOutput; +} + +const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); + +export function useRender(options: UseRenderOptions) { + const ref = useRef(null); + const ctxRef = useRef(null); + const root = useRoot(); + + // Only considering the first passed-in shaders function. + // This assumes that users won't swap shaders in the same useRender call, + // but we can make this more robust by computing a hash with unplugin-typegpu. + // TODO: You can also use the React Nook trick to track functions based on their + // place in the code. Simpler and more reliable? ((x)=>x)`` + const vertexRef = useRef(options.vertex); + const fragmentRef = useRef(options.fragment); + + const vertexFn = useMemo(() => { + return tgpu['~unstable'].vertexFn({ + in: { ...DefaultVertexInput }, + out: { ...DefaultVertexOutput }, + })(vertexRef.current); + }, []); + + const fragmentFn = useMemo(() => { + return tgpu['~unstable'].fragmentFn({ + in: { ...DefaultFragmentInput }, + out: d.vec4f, + })(fragmentRef.current); + }, []); + + const pipeline = useMemo(() => { + return root['~unstable'] + .withVertex(vertexFn, {}) + .withFragment(fragmentFn, { format: presentationFormat }) + .createPipeline(); + }, [root, vertexFn, fragmentFn]); + + useFrame(() => { + const canvas = ref.current; + if (!canvas) return; + if (ctxRef.current === null) { + ctxRef.current = canvas.getContext('webgpu') as GPUCanvasContext; + ctxRef.current.configure({ + device: root.device, + format: presentationFormat, + }); + } + + pipeline + .withColorAttachment({ + view: ctxRef.current.getCurrentTexture().createView(), + loadOp: 'load', + storeOp: 'store', + }) + .draw(3); + }); + + return { ref }; +} diff --git a/packages/typegpu-react/src/use-uniform-value.ts b/packages/typegpu-react/src/use-uniform-value.ts new file mode 100644 index 000000000..6d4c4bcc7 --- /dev/null +++ b/packages/typegpu-react/src/use-uniform-value.ts @@ -0,0 +1,13 @@ +import type * as d from 'typegpu/data'; + +interface UniformValue> { + schema: TSchema; + value: TValue; +} + +export function useUniformValue>( + schema: d.AnyWgslData, + initialValue?: TValue | undefined, +): UniformValue { + // TODO: Implement +} diff --git a/packages/typegpu-react/tsconfig.json b/packages/typegpu-react/tsconfig.json new file mode 100644 index 000000000..d503ef3ff --- /dev/null +++ b/packages/typegpu-react/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "jsx": "react-jsx" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22c508cd6..b279ce343 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,6 +9,9 @@ catalogs: jiti: specifier: ^2.4.2 version: 2.4.2 + tsdown: + specifier: ^0.15.0 + version: 0.15.0 tsup: specifier: ^8.5.0 version: 8.5.0 @@ -106,7 +109,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.20(@types/react@19.1.8) + version: 1.2.21(@types/react@19.1.8) apps/infra-benchmarks: devDependencies: @@ -121,19 +124,19 @@ importers: version: 0.9.4(prettier@3.5.3)(typescript@5.8.3) '@astrojs/react': specifier: ^4.3.0 - version: 4.3.0(@types/node@24.3.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(jiti@2.4.2)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.8.0) + version: 4.3.0(@types/node@24.3.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(jiti@2.5.1)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.8.0) '@astrojs/sitemap': specifier: ^3.5.0 version: 3.5.0 '@astrojs/starlight': specifier: ^0.35.2 - version: 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) + version: 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) '@astrojs/starlight-tailwind': specifier: ^4.0.1 - version: 4.0.1(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(tailwindcss@4.1.11) + version: 4.0.1(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(tailwindcss@4.1.11) '@astrojs/tailwind': specifier: ^6.0.2 - version: 6.0.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0))(tailwindcss@4.1.11) + version: 6.0.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0))(tailwindcss@4.1.11) '@babel/standalone': specifier: ^7.27.0 version: 7.27.0 @@ -157,13 +160,16 @@ importers: version: 1.11.0 '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) + version: 4.1.11(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) '@typegpu/color': specifier: workspace:* version: link:../../packages/typegpu-color '@typegpu/noise': specifier: workspace:* version: link:../../packages/typegpu-noise + '@typegpu/react': + specifier: workspace:* + version: link:../../packages/typegpu-react '@typegpu/sdf': specifier: workspace:* version: link:../../packages/typegpu-sdf @@ -178,7 +184,7 @@ importers: version: 2.1.20 astro: specifier: ^5.13.0 - version: 5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) + version: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) classnames: specifier: ^2.5.1 version: 2.5.1 @@ -223,10 +229,10 @@ importers: version: 0.34.2 starlight-blog: specifier: ^0.23.2 - version: 0.23.2(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) + version: 0.23.2(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) starlight-typedoc: specifier: ^0.19.0 - version: 0.19.0(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(typedoc-plugin-markdown@4.4.2(typedoc@0.27.9(typescript@5.8.3)))(typedoc@0.27.9(typescript@5.8.3)) + version: 0.19.0(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(typedoc-plugin-markdown@4.4.2(typedoc@0.27.9(typescript@5.8.3)))(typedoc@0.27.9(typescript@5.8.3)) tinybench: specifier: ^3.1.0 version: 3.1.1 @@ -272,7 +278,7 @@ importers: version: 24.3.0 '@vitejs/plugin-basic-ssl': specifier: ^2.1.0 - version: 2.1.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) + version: 2.1.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) '@webgpu/types': specifier: catalog:types version: 0.1.63 @@ -281,7 +287,7 @@ importers: version: 2.1.6 autoprefixer: specifier: ^10.4.21 - version: 10.4.21(postcss@8.5.3) + version: 10.4.21(postcss@8.5.6) tailwindcss: specifier: ^4.1.11 version: 4.1.11 @@ -293,7 +299,7 @@ importers: version: 7.1.0(rollup@4.34.8) vite-plugin-wasm: specifier: ^3.5.0 - version: 3.5.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) + version: 3.5.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) yaml: specifier: ^2.8.0 version: 2.8.0 @@ -345,7 +351,7 @@ importers: devDependencies: vitest: specifier: catalog:test - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(@vitest/browser@3.2.4)(jiti@2.4.2)(jsdom@26.1.0(canvas@3.2.0))(lightningcss@1.30.1)(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(tsx@4.19.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(@vitest/browser@3.2.4)(jiti@2.5.1)(jsdom@26.1.0(canvas@3.2.0))(lightningcss@1.30.1)(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(tsx@4.19.3)(yaml@2.8.0) packages/tgpu-wgsl-parser: dependencies: @@ -370,7 +376,7 @@ importers: version: 0.5.2 tsup: specifier: catalog:build - version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) + version: 8.5.0(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) tsx: specifier: ^4.16.2 version: 4.19.3 @@ -379,7 +385,7 @@ importers: version: 5.8.3 vitest: specifier: catalog:test - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(@vitest/browser@3.2.4)(jiti@2.4.2)(jsdom@26.1.0(canvas@3.2.0))(lightningcss@1.30.1)(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(tsx@4.19.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(@vitest/browser@3.2.4)(jiti@2.5.1)(jsdom@26.1.0(canvas@3.2.0))(lightningcss@1.30.1)(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(tsx@4.19.3)(yaml@2.8.0) publishDirectory: dist packages/tinyest: @@ -389,7 +395,7 @@ importers: version: link:../tgpu-dev-cli tsup: specifier: catalog:build - version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) + version: 8.5.0(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) typescript: specifier: catalog:types version: 5.8.3 @@ -415,7 +421,7 @@ importers: version: 8.14.1 tsup: specifier: catalog:build - version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) + version: 8.5.0(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) typescript: specifier: catalog:types version: 5.8.3 @@ -509,6 +515,35 @@ importers: version: link:../unplugin-typegpu publishDirectory: dist + packages/typegpu-react: + dependencies: + react: + specifier: ^19.0.0 + version: 19.1.0 + devDependencies: + '@typegpu/tgpu-dev-cli': + specifier: workspace:* + version: link:../tgpu-dev-cli + '@types/react': + specifier: ^19.0.0 + version: 19.1.8 + '@webgpu/types': + specifier: catalog:types + version: 0.1.63 + tsdown: + specifier: catalog:build + version: 0.15.0(typescript@5.8.3) + typegpu: + specifier: workspace:* + version: link:../typegpu + typescript: + specifier: catalog:types + version: 5.8.3 + unplugin-typegpu: + specifier: workspace:* + version: link:../unplugin-typegpu + publishDirectory: dist + packages/typegpu-sdf: devDependencies: '@typegpu/tgpu-dev-cli': @@ -599,7 +634,7 @@ importers: version: 4.34.8 tsup: specifier: catalog:build - version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) + version: 8.5.0(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) typescript: specifier: catalog:types version: 5.8.3 @@ -734,6 +769,10 @@ packages: resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.2': resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} @@ -796,6 +835,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-transform-react-jsx-self@7.27.1': resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} @@ -844,6 +888,10 @@ packages: resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -966,12 +1014,21 @@ packages: '@emmetio/stream-reader@2.2.0': resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + '@emnapi/core@1.5.0': + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} '@emnapi/runtime@1.4.4': resolution: {integrity: sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@esbuild/aix-ppc64@0.24.2': resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} engines: {node: '>=18'} @@ -1733,6 +1790,9 @@ packages: '@jridgewell/gen-mapping@0.3.11': resolution: {integrity: sha512-C512c1ytBTio4MrpWKlJpyFHT6+qfFL8SZ58zBzJ1OOzUEjHeF1BtjY2fH7n4x/g2OV/KiiMLAivOp1DXmiMMw==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -1801,6 +1861,9 @@ packages: resolution: {integrity: sha512-B9nHSJYtsv79uo7QdkZ/b/WoKm20IkVSmTc/WCKarmDtFwM0dRx2ouEniqwNkzCSLn3fydzKmnMzjtfdOWt3VQ==} engines: {node: '>=18'} + '@napi-rs/wasm-runtime@1.0.3': + resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1885,6 +1948,13 @@ packages: '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + '@oxc-project/runtime@0.87.0': + resolution: {integrity: sha512-ky2Hqi2q/uGX36UfY79zxMbUqiNIl1RyKKVJfFenG70lbn+/fcaKBVTbhmUwn8a2wPyv2gNtDQxuDytbKX9giQ==} + engines: {node: '>=6.9.0'} + + '@oxc-project/types@0.87.0': + resolution: {integrity: sha512-ipZFWVGE9fADBVXXWJWY/cxpysc41Gt5upKDeb32F6WMgFyO7XETUMVq8UuREKCih+Km5E6p2VhEvf6Fuhey6g==} + '@pagefind/darwin-arm64@1.3.0': resolution: {integrity: sha512-365BEGl6ChOsauRjyVpBjXybflXAOvoMROw3TucAROHIcdBvXk9/2AmEvGFU0r75+vdQI4LJdJdpH4Y6Yqaj4A==} cpu: [arm64] @@ -1934,6 +2004,9 @@ packages: '@probe.gl/stats@4.1.0': resolution: {integrity: sha512-EI413MkWKBDVNIfLdqbeNSJTs7ToBz/KVGkwi3D+dQrSIkRI2IYbWGAU3xX+D6+CI4ls8ehxMhNpUVMaZggDvQ==} + '@quansync/fs@0.1.5': + resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} + '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -2199,9 +2272,95 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@rolldown/binding-android-arm64@1.0.0-beta.37': + resolution: {integrity: sha512-Pdr3USGBdoYzcygfJTSATHd7x476vVF3rnQ6SuUAh4YjhgGoNaI/ZycQ0RsonptwwU5NmQRWxfWv+aUPL6JlJg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.37': + resolution: {integrity: sha512-iDdmatSgbWhTYOq51G2CkJXwFayiuQpv/ywG7Bv3wKqy31L7d0LltUhWqAdfCl7eBG3gybfUm/iEXiTldH3jYA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.37': + resolution: {integrity: sha512-LQPpi3YJDtIprj6mwMbVM1gLM4BV2m9oqe9h3Y1UwAd20xs+imnzWJqWFpm4Hw9SiFmefIf3q4EPx2k6Nj2K7A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.37': + resolution: {integrity: sha512-9JnfSWfYd/YrZOu4Sj3rb2THBrCj70nJB/2FOSdg0O9ZoRrdTeB8b7Futo6N7HLWZM5uqqnJBX6VTpA0RZD+ow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.37': + resolution: {integrity: sha512-eEmQTpvefEtHxc0vg5sOnWCqBcGQB/SIDlPkkzKR9ESKq9BsjQfHxssJWuNMyQ+rpr9CYaogddyQtZ9GHkp8vA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.37': + resolution: {integrity: sha512-Ekv4OjDzQUl0X9kHM7M23N9hVRiYCYr89neLBNITCp7P4IHs1f6SNZiCIvvBVy6NIFzO1w9LZJGEeJYK5cQBVQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.37': + resolution: {integrity: sha512-z8Aa5Kar5mhh0RVZEL+zKJwNz1cgcDISmwUMcTk0w986T8JZJOJCfJ/u9e8pqUTIJjxdM8SZq9/24nMgMlx5ng==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.37': + resolution: {integrity: sha512-e+fNseKhfE/socjOw6VrQcXrbNKfi2V/KZ+ssuLnmeaYNGuJWqPhvML56oYhGb3IgROEEc61lzr3Riy5BIqoMA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.37': + resolution: {integrity: sha512-dPZfB396PMIasd19X0ikpdCvjK/7SaJFO8y5/TxnozJEy70vOf4GESe/oKcsJPav/MSTWBYsHjJSO6vX0oAW8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.37': + resolution: {integrity: sha512-rFjLXoHpRqxJqkSBXHuyt6bhyiIFnvLD9X2iPmCYlfpEkdTbrY1AXg4ZbF8UMO5LM7DAAZm/7vPYPO1TKTA7Sg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.37': + resolution: {integrity: sha512-oQAe3lMaBGX6q0GSic0l3Obmd6/rX8R6eHLnRC8kyy/CvPLiCMV82MPGT8fxpPTo/ULFGrupSu2nV1zmOFBt/w==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.37': + resolution: {integrity: sha512-ucO6CiZhpkNRiVAk7ybvA9pZaMreCtfHej3BtJcBL5S3aYmp4h0g6TvaXLD5YRJx5sXobp/9A//xU4wPMul3Bg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.37': + resolution: {integrity: sha512-Ya9DBWJe1EGHwil7ielI8CdE0ELCg6KyDvDQqIFllnTJEYJ1Rb74DK6mvlZo273qz6Mw8WrMm26urfDeZhCc3Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.37': + resolution: {integrity: sha512-r+RI+wMReoTIF/uXqQWJcD8xGWXzCzUyGdpLmQ8FC+MCyPHlkjEsFRv8OFIYI6HhiGAmbfWVYEGf+aeLJzkHGw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.19': resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} + '@rolldown/pluginutils@1.0.0-beta.37': + resolution: {integrity: sha512-0taU1HpxFzrukvWIhLRI4YssJX2wOW5q1MxPXWztltsQ13TE51/larZIwhFdpyk7+K43TH7x6GJ8oEqAo+vDbA==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -2504,6 +2663,9 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -2528,8 +2690,8 @@ packages: '@types/bun@1.2.19': resolution: {integrity: sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg==} - '@types/bun@1.2.20': - resolution: {integrity: sha512-dX3RGzQ8+KgmMw7CsW4xT5ITBSCrSbfHc36SNT31EOUg/LA9JWq0VDdEXDRSe1InVWpd2yLUM1FUF/kEOyTzYA==} + '@types/bun@1.2.21': + resolution: {integrity: sha512-NiDnvEqmbfQ6dmZ3EeUO577s4P5bf4HCTXtI6trMc6f6RzirY5IrF3aIookuSpyslFzrnvv2lmEWv5HyC1X79A==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -2790,6 +2952,10 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansis@4.1.0: + resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} + engines: {node: '>=14'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -2824,6 +2990,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-kit@2.1.2: + resolution: {integrity: sha512-cl76xfBQM6pztbrFWRnxbrDm9EOqDr1BF6+qQnnDZG2Co2LjyUktkN9GTJfBAfdae+DbT2nJf2nCGAdDDN7W2g==} + engines: {node: '>=20.18.0'} + astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true @@ -2880,6 +3050,9 @@ packages: binary-search-bounds@2.0.5: resolution: {integrity: sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==} + birpc@2.5.0: + resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -2921,8 +3094,8 @@ packages: peerDependencies: '@types/react': ^19 - bun-types@1.2.20: - resolution: {integrity: sha512-pxTnQYOrKvdOwyiyd/7sMt9yFOenN004Y6O4lCcCUoKVej48FS5cvTw9geRaEcB9TsDZaJKAxPTVvi8tFsVuXA==} + bun-types@1.2.21: + resolution: {integrity: sha512-sa2Tj77Ijc/NTLS0/Odjq/qngmEPZfbfnOERi0KRUYhT9R8M4VBioWVmMWE5GrYbKMc+5lVybXygLdibHaqVqw==} peerDependencies: '@types/react': ^19 @@ -3397,6 +3570,10 @@ packages: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} + diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + engines: {node: '>=0.3.1'} + direction@2.0.1: resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} hasBin: true @@ -3431,6 +3608,15 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} + dts-resolver@2.1.2: + resolution: {integrity: sha512-xeXHBQkn2ISSXxbJWD828PFjtyg+/UrMDo7W4Ffcs7+YWCquxU8YjV1KoxuiL+eJ5pg3ll+bC6flVv61L3LKZg==} + engines: {node: '>=20.18.0'} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -3452,6 +3638,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -3591,6 +3781,15 @@ packages: picomatch: optional: true + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} @@ -3679,6 +3878,9 @@ packages: get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} @@ -3979,6 +4181,10 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + hasBin: true + jotai-location@0.6.1: resolution: {integrity: sha512-qn7mCLcstuKckwpJwi/eCrxjimQZnN3PBjQQIIJ34UZSj/724tdSkFM8Tzd+fRflqo+ITOcB//CWRugoKTejOQ==} peerDependencies: @@ -5006,6 +5212,9 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + query-registry@3.0.1: resolution: {integrity: sha512-M9RxRITi2mHMVPU5zysNjctUT8bAPx6ltEXo/ir9+qmiM47Y7f0Ir3+OxUO5OjYAWdicBQRew7RtHtqUXydqlg==} engines: {node: '>=20'} @@ -5221,6 +5430,27 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + rolldown-plugin-dts@0.16.2: + resolution: {integrity: sha512-WV1J5OqhWL8O8Nd5VAVQghmNcjyQvcGI5w51VszjO9k73avbXpz9X86KLYcKTWXXH6L0f+93JzZxiiSrcYhDLw==} + engines: {node: '>=20.18.0'} + peerDependencies: + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' + rolldown: ^1.0.0-beta.9 + typescript: ^5.0.0 + vue-tsc: ~3.0.3 + peerDependenciesMeta: + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + + rolldown@1.0.0-beta.37: + resolution: {integrity: sha512-KiTU6z1kHGaLvqaYjgsrv2LshHqNBn74waRZivlK8WbfN1obZeScVkQPKYunB66E/mxZWv/zyZlCv3xF2t0WOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup-plugin-dts@6.1.1: resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} engines: {node: '>=16'} @@ -5343,6 +5573,7 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -5514,6 +5745,9 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyglobby@0.2.12: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} @@ -5522,6 +5756,10 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + tinypool@1.1.1: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -5594,6 +5832,28 @@ packages: typescript: optional: true + tsdown@0.15.0: + resolution: {integrity: sha512-xbz8tvdlB2wspocZWcJQhZNDLJC+sKV+sTIpiRgfUiQCUxLFGnUZUPc9KoKp3nfMeXQqTyMi6FM9/SasSj+csQ==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + '@arethetypeswrong/core': ^0.18.1 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + publint: + optional: true + typescript: + optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5678,9 +5938,6 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -5696,6 +5953,9 @@ packages: typescript: optional: true + unconfig@7.3.3: + resolution: {integrity: sha512-QCkQoOnJF8L107gxfHL0uavn7WD9b3dpBcFX6HtfQYmjw2YzWxGuFQ0N0J6tE9oguCBJn9KOvfqYDCMPHIZrBA==} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -6425,12 +6685,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.2.6(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0))': + '@astrojs/mdx@4.2.6(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0))': dependencies: '@astrojs/markdown-remark': 6.3.1 '@mdx-js/mdx': 3.1.0(acorn@8.15.0) acorn: 8.15.0 - astro: 5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) + astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -6452,15 +6712,15 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.3.0(@types/node@24.3.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(jiti@2.4.2)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.8.0)': + '@astrojs/react@4.3.0(@types/node@24.3.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(jiti@2.5.1)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tsx@4.19.3)(yaml@2.8.0)': dependencies: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) - '@vitejs/plugin-react': 4.6.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) + '@vitejs/plugin-react': 4.6.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) ultrahtml: 1.6.0 - vite: 6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -6486,22 +6746,22 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.25.76 - '@astrojs/starlight-tailwind@4.0.1(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(tailwindcss@4.1.11)': + '@astrojs/starlight-tailwind@4.0.1(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(tailwindcss@4.1.11)': dependencies: - '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) + '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) tailwindcss: 4.1.11 - '@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0))': + '@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0))': dependencies: '@astrojs/markdown-remark': 6.3.3 - '@astrojs/mdx': 4.2.6(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) + '@astrojs/mdx': 4.2.6(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) '@astrojs/sitemap': 3.5.0 '@pagefind/default-ui': 1.3.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) - astro-expressive-code: 0.41.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) + astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) + astro-expressive-code: 0.41.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -6524,9 +6784,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/tailwind@6.0.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0))(tailwindcss@4.1.11)': + '@astrojs/tailwind@6.0.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0))(tailwindcss@4.1.11)': dependencies: - astro: 5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) + astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) autoprefixer: 10.4.21(postcss@8.5.3) postcss: 8.5.3 postcss-load-config: 4.0.2(postcss@8.5.3) @@ -6586,6 +6846,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.28 jsesc: 3.1.0 + '@babel/generator@7.28.3': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.28 + jsesc: 3.1.0 + '@babel/helper-compilation-targets@7.27.2': dependencies: '@babel/compat-data': 7.27.7 @@ -6643,6 +6911,10 @@ snapshots: dependencies: '@babel/types': 7.28.1 + '@babel/parser@7.28.4': + dependencies: + '@babel/types': 7.28.4 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 @@ -6702,6 +6974,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@bcoe/v8-coverage@1.0.2': {} '@biomejs/biome@1.9.4': @@ -6808,6 +7085,12 @@ snapshots: '@emmetio/stream-reader@2.2.0': {} + '@emnapi/core@1.5.0': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 @@ -6818,6 +7101,16 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.5.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.24.2': optional: true @@ -7306,6 +7599,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/trace-mapping': 0.3.28 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.28 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -7418,6 +7716,13 @@ snapshots: strict-event-emitter: 0.5.1 optional: true + '@napi-rs/wasm-runtime@1.0.3': + dependencies: + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.0 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7522,6 +7827,10 @@ snapshots: '@oslojs/encoding@1.1.0': {} + '@oxc-project/runtime@0.87.0': {} + + '@oxc-project/types@0.87.0': {} + '@pagefind/darwin-arm64@1.3.0': optional: true @@ -7557,6 +7866,10 @@ snapshots: '@probe.gl/stats@4.1.0': {} + '@quansync/fs@0.1.5': + dependencies: + quansync: 0.2.11 + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.2': {} @@ -7794,8 +8107,54 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@rolldown/binding-android-arm64@1.0.0-beta.37': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.37': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.37': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.37': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.37': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.37': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.37': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.37': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.37': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.37': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.37': + dependencies: + '@napi-rs/wasm-runtime': 1.0.3 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.37': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.37': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.37': + optional: true + '@rolldown/pluginutils@1.0.0-beta.19': {} + '@rolldown/pluginutils@1.0.0-beta.37': {} + '@rollup/plugin-alias@5.1.1(rollup@4.34.8)': optionalDependencies: rollup: 4.34.8 @@ -8021,12 +8380,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 - '@tailwindcss/vite@4.1.11(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0))': + '@tailwindcss/vite@4.1.11(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) '@testing-library/dom@10.4.0': dependencies: @@ -8045,6 +8404,11 @@ snapshots: '@trysound/sax@0.2.0': {} + '@tybys/wasm-util@0.10.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.8 @@ -8087,9 +8451,9 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@types/bun@1.2.20(@types/react@19.1.8)': + '@types/bun@1.2.21(@types/react@19.1.8)': dependencies: - bun-types: 1.2.20(@types/react@19.1.8) + bun-types: 1.2.21(@types/react@19.1.8) transitivePeerDependencies: - '@types/react' @@ -8196,11 +8560,11 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-basic-ssl@2.1.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0))': + '@vitejs/plugin-basic-ssl@2.1.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0))': dependencies: - vite: 6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) - '@vitejs/plugin-react@4.6.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0))': + '@vitejs/plugin-react@4.6.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0))': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.7) @@ -8208,7 +8572,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.19 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) transitivePeerDependencies: - supports-color @@ -8229,6 +8593,24 @@ snapshots: - utf-8-validate - vite + '@vitest/browser@3.2.4(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0))(vitest@3.2.4)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 3.2.4(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) + '@vitest/utils': 3.2.4 + magic-string: 0.30.17 + sirv: 3.0.1 + tinyrainbow: 2.0.0 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(@vitest/browser@3.2.4)(jiti@2.5.1)(jsdom@26.1.0(canvas@3.2.0))(lightningcss@1.30.1)(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(tsx@4.19.3)(yaml@2.8.0) + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + optional: true + '@vitest/coverage-v8@3.1.2(@vitest/browser@3.2.4)(vitest@3.2.4)': dependencies: '@ampproject/remapping': 2.3.0 @@ -8266,6 +8648,15 @@ snapshots: msw: 2.10.2(@types/node@24.3.0)(typescript@5.8.3) vite: 6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + '@vitest/mocker@3.2.4(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.10.2(@types/node@24.3.0)(typescript@5.8.3) + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 @@ -8392,6 +8783,8 @@ snapshots: ansi-styles@6.2.1: {} + ansis@4.1.0: {} + any-promise@1.3.0: {} anymatch@3.1.3: @@ -8422,11 +8815,16 @@ snapshots: assertion-error@2.0.1: {} + ast-kit@2.1.2: + dependencies: + '@babel/parser': 7.28.4 + pathe: 2.0.3 + astring@1.9.0: {} - astro-expressive-code@0.41.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)): + astro-expressive-code@0.41.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)): dependencies: - astro: 5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) + astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0) rehype-expressive-code: 0.41.2 astro-remote@0.3.3: @@ -8445,7 +8843,7 @@ snapshots: '@vtbag/turn-signal': 1.3.1 '@vtbag/utensil-drawer': 1.2.11 - astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0): + astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0): dependencies: '@astrojs/compiler': 2.12.2 '@astrojs/internal-helpers': 0.7.2 @@ -8501,8 +8899,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.16.1 vfile: 6.0.3 - vite: 6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) - vitefu: 1.0.6(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + vitefu: 1.0.6(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -8588,6 +8986,8 @@ snapshots: binary-search-bounds@2.0.5: {} + birpc@2.5.0: {} + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -8645,7 +9045,7 @@ snapshots: '@types/node': 24.3.0 '@types/react': 19.1.8 - bun-types@1.2.20(@types/react@19.1.8): + bun-types@1.2.21(@types/react@19.1.8): dependencies: '@types/node': 24.3.0 '@types/react': 19.1.8 @@ -9121,6 +9521,8 @@ snapshots: diff@5.2.0: {} + diff@8.0.2: {} + direction@2.0.1: {} discontinuous-range@1.0.0: {} @@ -9159,6 +9561,8 @@ snapshots: dset@3.1.4: {} + dts-resolver@2.1.2: {} + eastasianwidth@0.2.0: {} electron-to-chromium@1.5.168: {} @@ -9176,6 +9580,8 @@ snapshots: emoji-regex@9.2.2: {} + empathic@2.0.0: {} + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -9405,6 +9811,10 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 @@ -9489,6 +9899,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + github-from-package@0.0.0: optional: true @@ -9895,6 +10309,8 @@ snapshots: jiti@2.4.2: {} + jiti@2.5.1: {} + jotai-location@0.6.1(jotai@2.12.5(@types/react@19.1.8)(react@19.1.0)): dependencies: jotai: 2.12.5(@types/react@19.1.8)(react@19.1.0) @@ -10638,7 +11054,7 @@ snapshots: acorn: 8.15.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.5.4 + ufo: 1.6.1 monaco-editor@0.52.2: {} @@ -10955,6 +11371,15 @@ snapshots: tsx: 4.19.3 yaml: 2.8.0 + postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.3)(yaml@2.8.0): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.5.1 + postcss: 8.5.6 + tsx: 4.19.3 + yaml: 2.8.0 + postcss-merge-longhand@7.0.4(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -11160,6 +11585,8 @@ snapshots: punycode@2.3.1: {} + quansync@0.2.11: {} + query-registry@3.0.1: dependencies: query-string: 9.1.1 @@ -11449,6 +11876,45 @@ snapshots: robust-predicates@3.0.2: {} + rolldown-plugin-dts@0.16.2(rolldown@1.0.0-beta.37)(typescript@5.8.3): + dependencies: + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + ast-kit: 2.1.2 + birpc: 2.5.0 + debug: 4.4.1 + dts-resolver: 2.1.2 + get-tsconfig: 4.10.1 + rolldown: 1.0.0-beta.37 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - oxc-resolver + - supports-color + + rolldown@1.0.0-beta.37: + dependencies: + '@oxc-project/runtime': 0.87.0 + '@oxc-project/types': 0.87.0 + '@rolldown/pluginutils': 1.0.0-beta.37 + ansis: 4.1.0 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.37 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.37 + '@rolldown/binding-darwin-x64': 1.0.0-beta.37 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.37 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.37 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.37 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.37 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.37 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.37 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.37 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.37 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.37 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.37 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.37 + rollup-plugin-dts@6.1.1(rollup@4.34.8)(typescript@5.8.3): dependencies: magic-string: 0.30.17 @@ -11639,12 +12105,12 @@ snapshots: stackback@0.0.2: {} - starlight-blog@0.23.2(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)): + starlight-blog@0.23.2(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)): dependencies: '@astrojs/markdown-remark': 6.3.1 - '@astrojs/mdx': 4.2.6(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) + '@astrojs/mdx': 4.2.6(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) '@astrojs/rss': 4.0.11 - '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) + '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) astro-remote: 0.3.3 github-slugger: 2.0.0 marked: 15.0.7 @@ -11656,9 +12122,9 @@ snapshots: - astro - supports-color - starlight-typedoc@0.19.0(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(typedoc-plugin-markdown@4.4.2(typedoc@0.27.9(typescript@5.8.3)))(typedoc@0.27.9(typescript@5.8.3)): + starlight-typedoc@0.19.0(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)))(typedoc-plugin-markdown@4.4.2(typedoc@0.27.9(typescript@5.8.3)))(typedoc@0.27.9(typescript@5.8.3)): dependencies: - '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) + '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.34.8)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0)) github-slugger: 2.0.0 typedoc: 0.27.9(typescript@5.8.3) typedoc-plugin-markdown: 4.4.2(typedoc@0.27.9(typescript@5.8.3)) @@ -11825,6 +12291,8 @@ snapshots: tinyexec@0.3.2: {} + tinyexec@1.0.1: {} + tinyglobby@0.2.12: dependencies: fdir: 6.4.3(picomatch@4.0.3) @@ -11835,6 +12303,11 @@ snapshots: fdir: 6.4.6(picomatch@4.0.3) picomatch: 4.0.3 + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + tinypool@1.1.1: {} tinyrainbow@2.0.0: {} @@ -11889,6 +12362,30 @@ snapshots: optionalDependencies: typescript: 5.8.3 + tsdown@0.15.0(typescript@5.8.3): + dependencies: + ansis: 4.1.0 + cac: 6.7.14 + chokidar: 4.0.3 + debug: 4.4.1 + diff: 8.0.2 + empathic: 2.0.0 + hookable: 5.5.3 + rolldown: 1.0.0-beta.37 + rolldown-plugin-dts: 0.16.2(rolldown@1.0.0-beta.37)(typescript@5.8.3) + semver: 7.7.2 + tinyexec: 1.0.1 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + unconfig: 7.3.3 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@typescript/native-preview' + - oxc-resolver + - supports-color + - vue-tsc + tslib@2.8.1: {} tsup@8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0): @@ -11919,6 +12416,34 @@ snapshots: - tsx - yaml + tsup@8.5.0(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.8.0): + dependencies: + bundle-require: 5.1.0(esbuild@0.25.6) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.0 + debug: 4.4.1 + esbuild: 0.25.6 + fix-dts-default-cjs-exports: 1.0.0 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.3)(yaml@2.8.0) + resolve-from: 5.0.0 + rollup: 4.34.8 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.5.6 + typescript: 5.8.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + tsx@4.19.3: dependencies: esbuild: 0.25.5 @@ -11975,8 +12500,6 @@ snapshots: uc.micro@2.1.0: {} - ufo@1.5.4: {} - ufo@1.6.1: {} ultrahtml@1.6.0: {} @@ -12014,6 +12537,13 @@ snapshots: - vue - vue-tsc + unconfig@7.3.3: + dependencies: + '@quansync/fs': 0.1.5 + defu: 6.1.4 + jiti: 2.5.1 + quansync: 0.2.11 + uncrypto@0.1.3: {} undici-types@7.10.0: {} @@ -12209,9 +12739,30 @@ snapshots: - tsx - yaml - vite-plugin-wasm@3.5.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)): + vite-node@3.2.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0): dependencies: - vite: 6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + cac: 6.7.14 + debug: 4.4.1 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-plugin-wasm@3.5.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)): + dependencies: + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0): dependencies: @@ -12229,9 +12780,25 @@ snapshots: tsx: 4.19.3 yaml: 2.8.0 - vitefu@1.0.6(vite@6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)): + vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0): + dependencies: + esbuild: 0.25.6 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.34.8 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 24.3.0 + fsevents: 2.3.3 + jiti: 2.5.1 + lightningcss: 1.30.1 + tsx: 4.19.3 + yaml: 2.8.0 + + vitefu@1.0.6(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)): optionalDependencies: - vite: 6.3.5(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(@vitest/browser@3.2.4)(jiti@2.4.2)(jsdom@26.1.0(canvas@3.2.0))(lightningcss@1.30.1)(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(tsx@4.19.3)(yaml@2.8.0): dependencies: @@ -12277,6 +12844,50 @@ snapshots: - tsx - yaml + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(@vitest/browser@3.2.4)(jiti@2.5.1)(jsdom@26.1.0(canvas@3.2.0))(lightningcss@1.30.1)(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(tsx@4.19.3)(yaml@2.8.0): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.0 + debug: 4.4.1 + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 24.3.0 + '@vitest/browser': 3.2.4(msw@2.10.2(@types/node@24.3.0)(typescript@5.8.3))(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.8.0))(vitest@3.2.4) + jsdom: 26.1.0(canvas@3.2.0) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + volar-service-css@0.0.62(@volar/language-service@2.4.11): dependencies: vscode-css-languageservice: 6.3.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0a4608727..7c724f474 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,6 +8,7 @@ catalog: catalogs: build: tsup: ^8.5.0 + tsdown: ^0.15.0 unbuild: ^3.5.0 jiti: ^2.4.2 types: