diff --git a/apps/typegpu-docs/package.json b/apps/typegpu-docs/package.json index 11efed6ac..18d25ebe5 100644 --- a/apps/typegpu-docs/package.json +++ b/apps/typegpu-docs/package.json @@ -24,6 +24,7 @@ "@tailwindcss/vite": "^4.1.6", "@typegpu/color": "workspace:*", "@typegpu/noise": "workspace:*", + "@typegpu/concurrent-sum": "workspace:*", "@types/dom-mediacapture-transform": "^0.1.9", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", diff --git a/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/index.html b/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/index.html new file mode 100644 index 000000000..efa99c7be --- /dev/null +++ b/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/index.html @@ -0,0 +1,9 @@ +
+
+ + + +
+
Result will appear here
+ +
diff --git a/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/index.ts b/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/index.ts new file mode 100644 index 000000000..4e1ab1070 --- /dev/null +++ b/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/index.ts @@ -0,0 +1,36 @@ +import { currentSum } from '@typegpu/concurrent-sum'; +import tgpu from 'typegpu'; +import * as d from 'typegpu/data'; +import { fixedArrayLength } from '../../../../../../../packages/typegpu-concurrent-sum/src/schemas.ts'; + +const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); +const canvas = document.querySelector('canvas') as HTMLCanvasElement; +const context = canvas.getContext('webgpu') as GPUCanvasContext; + +const root = await tgpu.init({ + adapter: { + powerPreference: 'high-performance', + }, + device: { + requiredFeatures: [ + 'timestamp-query', + ], + }, +}); + +context.configure({ + device: root.device, + format: presentationFormat, + alphaMode: 'premultiplied', +}); + +const buffer = root.createBuffer( + d.arrayOf(d.f32, fixedArrayLength), + Array.from({ length: fixedArrayLength }, (_, k) => k), +).$usage('storage'); + +currentSum(root, buffer); + +export function onCleanup() { + root.destroy(); +} diff --git a/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/meta.json b/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/meta.json new file mode 100644 index 000000000..53ce6cf1d --- /dev/null +++ b/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Concurrent Sum", + "category": "simple", + "tags": ["experimental"] +} diff --git a/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/thumbnail.png b/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/thumbnail.png new file mode 100644 index 000000000..889b2f297 Binary files /dev/null and b/apps/typegpu-docs/src/content/examples/algorithms/concurrent-sum/thumbnail.png differ diff --git a/apps/typegpu-docs/src/utils/examples/sandboxModules.ts b/apps/typegpu-docs/src/utils/examples/sandboxModules.ts index 350e809dd..6af29ffb4 100644 --- a/apps/typegpu-docs/src/utils/examples/sandboxModules.ts +++ b/apps/typegpu-docs/src/utils/examples/sandboxModules.ts @@ -78,4 +78,7 @@ export const SANDBOX_MODULES: Record = { '@typegpu/color': { typeDef: { reroute: ['typegpu-color/src/index.ts'] }, }, + '@typegpu/concurrent-sum': { + typeDef: { reroute: ['typegpu-concurrent-sum/src/index.ts'] }, + }, }; diff --git a/packages/typegpu-concurrent-sum/README.md b/packages/typegpu-concurrent-sum/README.md new file mode 100644 index 000000000..56c8a545c --- /dev/null +++ b/packages/typegpu-concurrent-sum/README.md @@ -0,0 +1,9 @@ +
+ +# @typegpu/concurrent-sum + +🚧 **Under Construction** 🚧 + +
+ +A concurrent sum module. for use in WebGPU/TypeGPU apps. diff --git a/packages/typegpu-concurrent-sum/build.config.ts b/packages/typegpu-concurrent-sum/build.config.ts new file mode 100644 index 000000000..7f9f024f1 --- /dev/null +++ b/packages/typegpu-concurrent-sum/build.config.ts @@ -0,0 +1,12 @@ +import { type BuildConfig, defineBuildConfig } from 'unbuild'; +import typegpu from 'unplugin-typegpu/rollup'; + +const Config: BuildConfig[] = defineBuildConfig({ + hooks: { + 'rollup:options': (_options, config) => { + config.plugins.push(typegpu({ include: [/\.ts$/] })); + }, + }, +}); + +export default Config; diff --git a/packages/typegpu-concurrent-sum/deno.json b/packages/typegpu-concurrent-sum/deno.json new file mode 100644 index 000000000..66699a4b5 --- /dev/null +++ b/packages/typegpu-concurrent-sum/deno.json @@ -0,0 +1,7 @@ +{ + "exclude": ["."], + "fmt": { + "exclude": ["!."], + "singleQuote": true + } +} diff --git a/packages/typegpu-concurrent-sum/package.json b/packages/typegpu-concurrent-sum/package.json new file mode 100644 index 000000000..3d98ff700 --- /dev/null +++ b/packages/typegpu-concurrent-sum/package.json @@ -0,0 +1,45 @@ +{ + "name": "@typegpu/concurrent-sum", + "type": "module", + "version": "0.0.8", + "description": "A concurrent sum module.", + "exports": { + ".": "./src/index.ts", + "./package.json": "./package.json" + }, + "publishConfig": { + "directory": "dist", + "linkDirectory": false, + "main": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "exports": { + "./package.json": "./dist/package.json", + ".": { + "types": "./dist/index.d.ts", + "module": "./dist/index.mjs", + "import": "./dist/index.mjs", + "default": "./dist/index.cjs" + } + } + }, + "sideEffects": false, + "scripts": { + "build": "unbuild", + "test:types": "pnpm tsc --p ./tsconfig.json --noEmit", + "prepublishOnly": "tgpu-dev-cli prepack" + }, + "keywords": [], + "license": "MIT", + "peerDependencies": { + "typegpu": "^0.5.8" + }, + "devDependencies": { + "@typegpu/tgpu-dev-cli": "workspace:*", + "@types/node": "^22.13.14", + "@webgpu/types": "catalog:", + "unbuild": "catalog:", + "typegpu": "workspace:*", + "typescript": "catalog:", + "unplugin-typegpu": "workspace:*" + } +} diff --git a/packages/typegpu-concurrent-sum/src/compute.ts b/packages/typegpu-concurrent-sum/src/compute.ts new file mode 100644 index 000000000..bc4fc4547 --- /dev/null +++ b/packages/typegpu-concurrent-sum/src/compute.ts @@ -0,0 +1,65 @@ +import tgpu from 'typegpu'; +import * as d from 'typegpu/data'; +import * as std from 'typegpu/std'; +import { + dataBindGroupLayout as layout, + fixedArrayLength, + workgroupSize, +} from './schemas.ts'; + +export const computeShader = tgpu['~unstable'].computeFn({ + in: { in: d.builtin.globalInvocationId }, + workgroupSize: [workgroupSize], +})((input) => { + const threadId = input.in.x; + const length = d.u32(fixedArrayLength); + const log2Length = d.i32(std.log2(d.f32(length))); + + if (threadId < length) { + layout.$.workArray[threadId] = layout.$.inputArray[threadId] as number; + } + + std.workgroupBarrier(); + // Up-sweep phase + for (let dLevel = 0; dLevel < log2Length; dLevel++) { + const windowSize = d.u32(std.exp2(d.f32(dLevel + 1))); // window size == step + const offset = d.u32(std.exp2(d.f32(dLevel))); // offset for the window + + if (threadId < length / windowSize) { + const i = threadId * windowSize; + const leftIdx = i + offset - 1; + const rightIdx = i + windowSize - 1; + + layout.$.workArray[rightIdx] = (layout.$.workArray[leftIdx] as number) + + (layout.$.workArray[rightIdx] as number); + } + + std.workgroupBarrier(); + } + + if (threadId === 0) { + layout.$.workArray[length - 1] = 0; + } + + std.workgroupBarrier(); + + // Down-sweep phase + for (let k = 0; k < log2Length; k++) { + const dLevel = log2Length - 1 - k; + const windowSize = d.u32(std.exp2(d.f32(dLevel + 1))); // window size == step + const offset = d.u32(std.exp2(d.f32(dLevel))); // offset for the window + + if (threadId < length / windowSize) { + const i = threadId * windowSize; + const leftIdx = i + offset - 1; + const rightIdx = i + windowSize - 1; + + const temp = layout.$.workArray[leftIdx] as number; + layout.$.workArray[leftIdx] = layout.$.workArray[rightIdx] as number; + layout.$.workArray[rightIdx] = temp + + (layout.$.workArray[rightIdx] as number); + } + + std.workgroupBarrier(); + } +}); diff --git a/packages/typegpu-concurrent-sum/src/compute/computeInPlace.ts b/packages/typegpu-concurrent-sum/src/compute/computeInPlace.ts new file mode 100644 index 000000000..a2b2a9389 --- /dev/null +++ b/packages/typegpu-concurrent-sum/src/compute/computeInPlace.ts @@ -0,0 +1,61 @@ +import tgpu from 'typegpu'; +import * as d from 'typegpu/data'; +import * as std from 'typegpu/std'; +import { + dataBindGroupLayout as layout, + fixedArrayLength, + workgroupSize, +} from '../schemas.ts'; + +export const computeShaderInPlace = tgpu['~unstable'].computeFn({ + in: { in: d.builtin.globalInvocationId }, + workgroupSize: [workgroupSize], +})((input) => { + const threadId = input.in.x; + const length = d.u32(fixedArrayLength); + const log2Length = d.i32(std.log2(d.f32(length))); + + std.workgroupBarrier(); + // Up-sweep phase + for (let dLevel = 0; dLevel < log2Length; dLevel++) { + const windowSize = d.u32(std.exp2(d.f32(dLevel + 1))); // window size == step + const offset = d.u32(std.exp2(d.f32(dLevel))); // offset for the window + + if (threadId < length / windowSize) { + const i = threadId * windowSize; + const leftIdx = i + offset - 1; + const rightIdx = i + windowSize - 1; + + layout.$.inputArray[rightIdx] = (layout.$.inputArray[leftIdx] as number) + + (layout.$.inputArray[rightIdx] as number); + } + + std.workgroupBarrier(); + } + + if (threadId === 0) { + layout.$.inputArray[length - 1] = 0; + } + + std.workgroupBarrier(); + + // Down-sweep phase + for (let k = 0; k < log2Length; k++) { + const dLevel = log2Length - 1 - k; + const windowSize = d.u32(std.exp2(d.f32(dLevel + 1))); // window size == step + const offset = d.u32(std.exp2(d.f32(dLevel))); // offset for the window + + if (threadId < length / windowSize) { + const i = threadId * windowSize; + const leftIdx = i + offset - 1; + const rightIdx = i + windowSize - 1; + + const temp = layout.$.inputArray[leftIdx] as number; + layout.$.inputArray[leftIdx] = layout.$.inputArray[rightIdx] as number; + layout.$.inputArray[rightIdx] = temp + + (layout.$.inputArray[rightIdx] as number); + } + + std.workgroupBarrier(); + } +}); diff --git a/packages/typegpu-concurrent-sum/src/compute/computeShared.ts b/packages/typegpu-concurrent-sum/src/compute/computeShared.ts new file mode 100644 index 000000000..072758da9 --- /dev/null +++ b/packages/typegpu-concurrent-sum/src/compute/computeShared.ts @@ -0,0 +1,88 @@ +import tgpu from 'typegpu'; +import * as d from 'typegpu/data'; +import * as std from 'typegpu/std'; +import { + dataBindGroupLayout as layout, + fixedArrayLength, + workgroupSize, +} from '../schemas.ts'; + +const sharedMem = tgpu['~unstable'].workgroupVar( + d.arrayOf(d.f32, workgroupSize * 2), +); + +export const computeShaderShared = tgpu['~unstable'].computeFn({ + in: { + lid: d.builtin.localInvocationIndex, + gid: d.builtin.globalInvocationId, + }, + workgroupSize: [workgroupSize], +})((input) => { + const lId = input.lid; + const gId = input.gid.x; + const length = d.u32(workgroupSize); + const log2Length = d.i32(std.log2(d.f32(length))); + + // copy + const idx0 = gId * 2; + const idx1 = gId * 2 + 1; + if (idx0 < d.u32(fixedArrayLength)) { + sharedMem.value[lId * 2] = layout.$.inputArray[idx0] as number; + } + if (idx1 < d.u32(fixedArrayLength)) { + sharedMem.value[lId * 2 + 1] = layout.$.inputArray[idx1] as number; + } + std.workgroupBarrier(); + + // Up-sweep phase + for (let dLevel = 0; dLevel < log2Length; dLevel++) { + const windowSize = d.u32(std.exp2(d.f32(dLevel + 1))); // window size == step + const offset = d.u32(std.exp2(d.f32(dLevel))); // offset for the window + + if (lId < (length / (windowSize / 2))) { //workgroup length + const i = lId * windowSize; + const leftIdx = i + offset - 1; + const rightIdx = i + windowSize - 1; + + (sharedMem.value[rightIdx] as number) += sharedMem + .value[leftIdx] as number; + } + + std.workgroupBarrier(); + } + std.workgroupBarrier(); + + // if (lId === 0) { + // sharedMem.value[length - 1] = 0; + // } + + // std.workgroupBarrier(); + + // // Down-sweep phase + // for (let k = 0; k < log2Length; k++) { + // const dLevel = log2Length - 1 - k; + // const windowSize = d.u32(std.exp2(d.f32(dLevel + 1))); // window size == step + // const offset = d.u32(std.exp2(d.f32(dLevel))); // offset for the window + + // if (lId < length / windowSize) { + // const i = lId * windowSize; + // const leftIdx = (i + offset - 1) % (length * 2); + // const rightIdx = (i + windowSize - 1) % (length * 2); + + // const temp = sharedMem.value[leftIdx] as number; + // sharedMem.value[leftIdx] = sharedMem.value[rightIdx] as number; + // sharedMem.value[rightIdx] = temp + + // (sharedMem.value[rightIdx] as number); + // } + + // std.workgroupBarrier(); + // } + + // copy back + if (idx0 < d.u32(fixedArrayLength)) { + layout.$.workArray[idx0] = sharedMem.value[lId * 2] as number; + } + if (idx1 < d.u32(fixedArrayLength)) { + layout.$.workArray[idx1] = sharedMem.value[lId * 2 + 1] as number; + } +}); diff --git a/packages/typegpu-concurrent-sum/src/concurrentSum.ts b/packages/typegpu-concurrent-sum/src/concurrentSum.ts new file mode 100644 index 000000000..6f054d815 --- /dev/null +++ b/packages/typegpu-concurrent-sum/src/concurrentSum.ts @@ -0,0 +1,65 @@ +import type { StorageFlag, TgpuBuffer, TgpuRoot } from 'typegpu'; +import { + dataBindGroupLayout, + fixedArrayLength, + inputValueType, + workgroupSize, +} from './schemas.ts'; +// import { computeShader } from './compute.ts'; +import type { F32, WgslArray } from 'typegpu/data'; +import { computeShaderShared } from './compute/computeShared.ts'; + +export function currentSum( + root: TgpuRoot, + inputBuffor: TgpuBuffer> & StorageFlag, +) { + const workBuffer = root.createBuffer(inputValueType).$usage('storage'); + const fooBindGroup = root.createBindGroup(dataBindGroupLayout, { + inputArray: inputBuffor, + workArray: workBuffer, + }); + + const computePipelineSharedMem = root['~unstable'] + .withCompute(computeShaderShared) + .createPipeline() + .$name('compute'); + + // const computePipeline = root['~unstable'] + // .withCompute(computeShader) + // // .withCompute(computeShaderInPlace) + // .createPipeline() + // .$name('compute'); + + // computePipeline.with(dataBindGroupLayout, fooBindGroup) + // .withPerformanceCallback((start, end) => { + // const durationNs = Number(end - start); + // console.log( + // `Concurrent sum execution time: ${durationNs} ns (${ + // durationNs / 1000000 + // } ms)`, + // ); + // }) + // .dispatchWorkgroups(fixedArrayLength / workgroupSize); + + computePipelineSharedMem.with(dataBindGroupLayout, fooBindGroup) + .withPerformanceCallback((start, end) => { + const durationNs = Number(end - start); + console.log( + `Concurrent sum (shared memory) execution time: ${durationNs} ns (${ + durationNs / 1000000 + } ms)`, + ); + }) + .dispatchWorkgroups(fixedArrayLength / (workgroupSize / 2)); + + workBuffer + .read() + .then((result) => { + console.log('Result:', result); + }) + .catch((error) => { + console.error('Error reading buffer:', error); + }); + + return inputBuffor; +} diff --git a/packages/typegpu-concurrent-sum/src/index.ts b/packages/typegpu-concurrent-sum/src/index.ts new file mode 100644 index 000000000..d95585e1e --- /dev/null +++ b/packages/typegpu-concurrent-sum/src/index.ts @@ -0,0 +1,2 @@ +export * from './compute.ts'; +export * from './concurrentSum.ts'; diff --git a/packages/typegpu-concurrent-sum/src/schemas.ts b/packages/typegpu-concurrent-sum/src/schemas.ts new file mode 100644 index 000000000..027e069d6 --- /dev/null +++ b/packages/typegpu-concurrent-sum/src/schemas.ts @@ -0,0 +1,11 @@ +import tgpu from 'typegpu'; +import * as d from 'typegpu/data'; + +export const workgroupSize = 256; +export const fixedArrayLength = 2048; +export const inputValueType = d.arrayOf(d.f32, fixedArrayLength); + +export const dataBindGroupLayout = tgpu.bindGroupLayout({ + inputArray: { storage: inputValueType, access: 'readonly' }, + workArray: { storage: inputValueType, access: 'mutable' }, +}); diff --git a/packages/typegpu-concurrent-sum/tsconfig.json b/packages/typegpu-concurrent-sum/tsconfig.json new file mode 100644 index 000000000..5f257dc0f --- /dev/null +++ b/packages/typegpu-concurrent-sum/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ffcd3a839..486c8728a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -113,6 +113,9 @@ importers: '@typegpu/color': specifier: workspace:* version: link:../../packages/typegpu-color + '@typegpu/concurrent-sum': + specifier: workspace:* + version: link:../../packages/typegpu-concurrent-sum '@typegpu/noise': specifier: workspace:* version: link:../../packages/typegpu-noise @@ -456,6 +459,31 @@ importers: version: link:../unplugin-typegpu publishDirectory: dist + packages/typegpu-concurrent-sum: + devDependencies: + '@typegpu/tgpu-dev-cli': + specifier: workspace:* + version: link:../tgpu-dev-cli + '@types/node': + specifier: ^22.13.14 + version: 22.13.14 + '@webgpu/types': + specifier: 'catalog:' + version: 0.1.54 + typegpu: + specifier: workspace:* + version: link:../typegpu + typescript: + specifier: 'catalog:' + version: 5.8.3 + unbuild: + specifier: 'catalog:' + version: 3.5.0(typescript@5.8.3) + unplugin-typegpu: + specifier: workspace:* + version: link:../unplugin-typegpu + publishDirectory: dist + packages/typegpu-noise: devDependencies: '@typegpu/tgpu-dev-cli': @@ -653,10 +681,6 @@ packages: '@astrojs/yaml2ts@0.2.2': resolution: {integrity: sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -883,12 +907,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.3': - resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.5': resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} @@ -907,12 +925,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.3': - resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.5': resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} @@ -931,12 +943,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.3': - resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.5': resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} @@ -955,12 +961,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.3': - resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.5': resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} @@ -979,12 +979,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.3': - resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.5': resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} @@ -1003,12 +997,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.3': - resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.5': resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} @@ -1027,12 +1015,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.3': - resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.5': resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} @@ -1051,12 +1033,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.3': - resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} @@ -1075,12 +1051,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.3': - resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.5': resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} @@ -1099,12 +1069,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.3': - resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.5': resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} @@ -1123,12 +1087,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.3': - resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.5': resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} @@ -1147,12 +1105,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.3': - resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.5': resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} @@ -1171,12 +1123,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.3': - resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.5': resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} @@ -1195,12 +1141,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.3': - resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.5': resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} @@ -1219,12 +1159,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.3': - resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.5': resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} @@ -1243,12 +1177,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.3': - resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.5': resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} @@ -1267,12 +1195,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.3': - resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.5': resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} @@ -1291,12 +1213,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.3': - resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.5': resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} @@ -1315,12 +1231,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.3': - resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} @@ -1339,12 +1249,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.3': - resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.5': resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} @@ -1363,12 +1267,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.3': - resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} @@ -1387,12 +1285,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.3': - resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.5': resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} @@ -1411,12 +1303,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.3': - resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.5': resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} @@ -1435,12 +1321,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.3': - resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.5': resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} @@ -1459,12 +1339,6 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.3': - resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.5': resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} @@ -3232,11 +3106,6 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.3: - resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.5: resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} @@ -3330,14 +3199,6 @@ packages: picomatch: optional: true - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - fdir@6.4.6: resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} peerDependencies: @@ -5098,10 +4959,6 @@ packages: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -5438,46 +5295,6 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.3.3: - resolution: {integrity: sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@6.3.5: resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -6052,13 +5869,6 @@ snapshots: dependencies: yaml: 2.7.0 - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - optional: true - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -6292,9 +6102,6 @@ snapshots: '@esbuild/aix-ppc64@0.25.2': optional: true - '@esbuild/aix-ppc64@0.25.3': - optional: true - '@esbuild/aix-ppc64@0.25.5': optional: true @@ -6304,9 +6111,6 @@ snapshots: '@esbuild/android-arm64@0.25.2': optional: true - '@esbuild/android-arm64@0.25.3': - optional: true - '@esbuild/android-arm64@0.25.5': optional: true @@ -6316,9 +6120,6 @@ snapshots: '@esbuild/android-arm@0.25.2': optional: true - '@esbuild/android-arm@0.25.3': - optional: true - '@esbuild/android-arm@0.25.5': optional: true @@ -6328,9 +6129,6 @@ snapshots: '@esbuild/android-x64@0.25.2': optional: true - '@esbuild/android-x64@0.25.3': - optional: true - '@esbuild/android-x64@0.25.5': optional: true @@ -6340,9 +6138,6 @@ snapshots: '@esbuild/darwin-arm64@0.25.2': optional: true - '@esbuild/darwin-arm64@0.25.3': - optional: true - '@esbuild/darwin-arm64@0.25.5': optional: true @@ -6352,9 +6147,6 @@ snapshots: '@esbuild/darwin-x64@0.25.2': optional: true - '@esbuild/darwin-x64@0.25.3': - optional: true - '@esbuild/darwin-x64@0.25.5': optional: true @@ -6364,9 +6156,6 @@ snapshots: '@esbuild/freebsd-arm64@0.25.2': optional: true - '@esbuild/freebsd-arm64@0.25.3': - optional: true - '@esbuild/freebsd-arm64@0.25.5': optional: true @@ -6376,9 +6165,6 @@ snapshots: '@esbuild/freebsd-x64@0.25.2': optional: true - '@esbuild/freebsd-x64@0.25.3': - optional: true - '@esbuild/freebsd-x64@0.25.5': optional: true @@ -6388,9 +6174,6 @@ snapshots: '@esbuild/linux-arm64@0.25.2': optional: true - '@esbuild/linux-arm64@0.25.3': - optional: true - '@esbuild/linux-arm64@0.25.5': optional: true @@ -6400,9 +6183,6 @@ snapshots: '@esbuild/linux-arm@0.25.2': optional: true - '@esbuild/linux-arm@0.25.3': - optional: true - '@esbuild/linux-arm@0.25.5': optional: true @@ -6412,9 +6192,6 @@ snapshots: '@esbuild/linux-ia32@0.25.2': optional: true - '@esbuild/linux-ia32@0.25.3': - optional: true - '@esbuild/linux-ia32@0.25.5': optional: true @@ -6424,9 +6201,6 @@ snapshots: '@esbuild/linux-loong64@0.25.2': optional: true - '@esbuild/linux-loong64@0.25.3': - optional: true - '@esbuild/linux-loong64@0.25.5': optional: true @@ -6436,9 +6210,6 @@ snapshots: '@esbuild/linux-mips64el@0.25.2': optional: true - '@esbuild/linux-mips64el@0.25.3': - optional: true - '@esbuild/linux-mips64el@0.25.5': optional: true @@ -6448,9 +6219,6 @@ snapshots: '@esbuild/linux-ppc64@0.25.2': optional: true - '@esbuild/linux-ppc64@0.25.3': - optional: true - '@esbuild/linux-ppc64@0.25.5': optional: true @@ -6460,9 +6228,6 @@ snapshots: '@esbuild/linux-riscv64@0.25.2': optional: true - '@esbuild/linux-riscv64@0.25.3': - optional: true - '@esbuild/linux-riscv64@0.25.5': optional: true @@ -6472,9 +6237,6 @@ snapshots: '@esbuild/linux-s390x@0.25.2': optional: true - '@esbuild/linux-s390x@0.25.3': - optional: true - '@esbuild/linux-s390x@0.25.5': optional: true @@ -6484,9 +6246,6 @@ snapshots: '@esbuild/linux-x64@0.25.2': optional: true - '@esbuild/linux-x64@0.25.3': - optional: true - '@esbuild/linux-x64@0.25.5': optional: true @@ -6496,9 +6255,6 @@ snapshots: '@esbuild/netbsd-arm64@0.25.2': optional: true - '@esbuild/netbsd-arm64@0.25.3': - optional: true - '@esbuild/netbsd-arm64@0.25.5': optional: true @@ -6508,9 +6264,6 @@ snapshots: '@esbuild/netbsd-x64@0.25.2': optional: true - '@esbuild/netbsd-x64@0.25.3': - optional: true - '@esbuild/netbsd-x64@0.25.5': optional: true @@ -6520,9 +6273,6 @@ snapshots: '@esbuild/openbsd-arm64@0.25.2': optional: true - '@esbuild/openbsd-arm64@0.25.3': - optional: true - '@esbuild/openbsd-arm64@0.25.5': optional: true @@ -6532,9 +6282,6 @@ snapshots: '@esbuild/openbsd-x64@0.25.2': optional: true - '@esbuild/openbsd-x64@0.25.3': - optional: true - '@esbuild/openbsd-x64@0.25.5': optional: true @@ -6544,9 +6291,6 @@ snapshots: '@esbuild/sunos-x64@0.25.2': optional: true - '@esbuild/sunos-x64@0.25.3': - optional: true - '@esbuild/sunos-x64@0.25.5': optional: true @@ -6556,9 +6300,6 @@ snapshots: '@esbuild/win32-arm64@0.25.2': optional: true - '@esbuild/win32-arm64@0.25.3': - optional: true - '@esbuild/win32-arm64@0.25.5': optional: true @@ -6568,9 +6309,6 @@ snapshots: '@esbuild/win32-ia32@0.25.2': optional: true - '@esbuild/win32-ia32@0.25.3': - optional: true - '@esbuild/win32-ia32@0.25.5': optional: true @@ -6580,9 +6318,6 @@ snapshots: '@esbuild/win32-x64@0.25.2': optional: true - '@esbuild/win32-x64@0.25.3': - optional: true - '@esbuild/win32-x64@0.25.5': optional: true @@ -7293,7 +7028,7 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.34.8) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.4.3(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.2) is-reference: 1.2.1 magic-string: 0.30.17 picomatch: 4.0.2 @@ -7685,13 +7420,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.2(vite@6.3.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0))': + '@vitest/mocker@3.1.2(vite@6.3.5(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.1.2 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) '@vitest/pretty-format@3.1.2': dependencies: @@ -7965,6 +7700,16 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 + autoprefixer@10.4.21(postcss@8.5.6): + dependencies: + browserslist: 4.25.0 + caniuse-lite: 1.0.30001723 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + axobject-query@4.1.0: {} bail@2.0.2: {} @@ -8030,9 +7775,9 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bundle-require@5.1.0(esbuild@0.25.3): + bundle-require@5.1.0(esbuild@0.25.5): dependencies: - esbuild: 0.25.3 + esbuild: 0.25.5 load-tsconfig: 0.2.5 cac@6.7.14: {} @@ -8177,9 +7922,9 @@ snapshots: dependencies: uncrypto: 0.1.3 - css-declaration-sorter@7.2.0(postcss@8.5.3): + css-declaration-sorter@7.2.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 css-select@5.1.0: dependencies: @@ -8210,49 +7955,49 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@7.0.6(postcss@8.5.3): + cssnano-preset-default@7.0.6(postcss@8.5.6): dependencies: browserslist: 4.25.0 - css-declaration-sorter: 7.2.0(postcss@8.5.3) - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 - postcss-calc: 10.1.1(postcss@8.5.3) - postcss-colormin: 7.0.2(postcss@8.5.3) - postcss-convert-values: 7.0.4(postcss@8.5.3) - postcss-discard-comments: 7.0.3(postcss@8.5.3) - postcss-discard-duplicates: 7.0.1(postcss@8.5.3) - postcss-discard-empty: 7.0.0(postcss@8.5.3) - postcss-discard-overridden: 7.0.0(postcss@8.5.3) - postcss-merge-longhand: 7.0.4(postcss@8.5.3) - postcss-merge-rules: 7.0.4(postcss@8.5.3) - postcss-minify-font-values: 7.0.0(postcss@8.5.3) - postcss-minify-gradients: 7.0.0(postcss@8.5.3) - postcss-minify-params: 7.0.2(postcss@8.5.3) - postcss-minify-selectors: 7.0.4(postcss@8.5.3) - postcss-normalize-charset: 7.0.0(postcss@8.5.3) - postcss-normalize-display-values: 7.0.0(postcss@8.5.3) - postcss-normalize-positions: 7.0.0(postcss@8.5.3) - postcss-normalize-repeat-style: 7.0.0(postcss@8.5.3) - postcss-normalize-string: 7.0.0(postcss@8.5.3) - postcss-normalize-timing-functions: 7.0.0(postcss@8.5.3) - postcss-normalize-unicode: 7.0.2(postcss@8.5.3) - postcss-normalize-url: 7.0.0(postcss@8.5.3) - postcss-normalize-whitespace: 7.0.0(postcss@8.5.3) - postcss-ordered-values: 7.0.1(postcss@8.5.3) - postcss-reduce-initial: 7.0.2(postcss@8.5.3) - postcss-reduce-transforms: 7.0.0(postcss@8.5.3) - postcss-svgo: 7.0.1(postcss@8.5.3) - postcss-unique-selectors: 7.0.3(postcss@8.5.3) - - cssnano-utils@5.0.0(postcss@8.5.3): + css-declaration-sorter: 7.2.0(postcss@8.5.6) + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 10.1.1(postcss@8.5.6) + postcss-colormin: 7.0.2(postcss@8.5.6) + postcss-convert-values: 7.0.4(postcss@8.5.6) + postcss-discard-comments: 7.0.3(postcss@8.5.6) + postcss-discard-duplicates: 7.0.1(postcss@8.5.6) + postcss-discard-empty: 7.0.0(postcss@8.5.6) + postcss-discard-overridden: 7.0.0(postcss@8.5.6) + postcss-merge-longhand: 7.0.4(postcss@8.5.6) + postcss-merge-rules: 7.0.4(postcss@8.5.6) + postcss-minify-font-values: 7.0.0(postcss@8.5.6) + postcss-minify-gradients: 7.0.0(postcss@8.5.6) + postcss-minify-params: 7.0.2(postcss@8.5.6) + postcss-minify-selectors: 7.0.4(postcss@8.5.6) + postcss-normalize-charset: 7.0.0(postcss@8.5.6) + postcss-normalize-display-values: 7.0.0(postcss@8.5.6) + postcss-normalize-positions: 7.0.0(postcss@8.5.6) + postcss-normalize-repeat-style: 7.0.0(postcss@8.5.6) + postcss-normalize-string: 7.0.0(postcss@8.5.6) + postcss-normalize-timing-functions: 7.0.0(postcss@8.5.6) + postcss-normalize-unicode: 7.0.2(postcss@8.5.6) + postcss-normalize-url: 7.0.0(postcss@8.5.6) + postcss-normalize-whitespace: 7.0.0(postcss@8.5.6) + postcss-ordered-values: 7.0.1(postcss@8.5.6) + postcss-reduce-initial: 7.0.2(postcss@8.5.6) + postcss-reduce-transforms: 7.0.0(postcss@8.5.6) + postcss-svgo: 7.0.1(postcss@8.5.6) + postcss-unique-selectors: 7.0.3(postcss@8.5.6) + + cssnano-utils@5.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 - cssnano@7.0.6(postcss@8.5.3): + cssnano@7.0.6(postcss@8.5.6): dependencies: - cssnano-preset-default: 7.0.6(postcss@8.5.3) + cssnano-preset-default: 7.0.6(postcss@8.5.6) lilconfig: 3.1.3 - postcss: 8.5.3 + postcss: 8.5.6 csso@5.0.5: dependencies: @@ -8440,34 +8185,6 @@ snapshots: '@esbuild/win32-ia32': 0.25.2 '@esbuild/win32-x64': 0.25.2 - esbuild@0.25.3: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.3 - '@esbuild/android-arm': 0.25.3 - '@esbuild/android-arm64': 0.25.3 - '@esbuild/android-x64': 0.25.3 - '@esbuild/darwin-arm64': 0.25.3 - '@esbuild/darwin-x64': 0.25.3 - '@esbuild/freebsd-arm64': 0.25.3 - '@esbuild/freebsd-x64': 0.25.3 - '@esbuild/linux-arm': 0.25.3 - '@esbuild/linux-arm64': 0.25.3 - '@esbuild/linux-ia32': 0.25.3 - '@esbuild/linux-loong64': 0.25.3 - '@esbuild/linux-mips64el': 0.25.3 - '@esbuild/linux-ppc64': 0.25.3 - '@esbuild/linux-riscv64': 0.25.3 - '@esbuild/linux-s390x': 0.25.3 - '@esbuild/linux-x64': 0.25.3 - '@esbuild/netbsd-arm64': 0.25.3 - '@esbuild/netbsd-x64': 0.25.3 - '@esbuild/openbsd-arm64': 0.25.3 - '@esbuild/openbsd-x64': 0.25.3 - '@esbuild/sunos-x64': 0.25.3 - '@esbuild/win32-arm64': 0.25.3 - '@esbuild/win32-ia32': 0.25.3 - '@esbuild/win32-x64': 0.25.3 - esbuild@0.25.5: optionalDependencies: '@esbuild/aix-ppc64': 0.25.5 @@ -8603,10 +8320,6 @@ snapshots: optionalDependencies: picomatch: 4.0.2 - fdir@6.4.4(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - fdir@6.4.6(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -9733,17 +9446,17 @@ snapshots: mkdist@2.2.0(typescript@5.8.3): dependencies: - autoprefixer: 10.4.21(postcss@8.5.3) + autoprefixer: 10.4.21(postcss@8.5.6) citty: 0.1.6 - cssnano: 7.0.6(postcss@8.5.3) + cssnano: 7.0.6(postcss@8.5.6) defu: 6.1.4 esbuild: 0.24.2 jiti: 1.21.7 mlly: 1.7.4 pathe: 1.1.2 pkg-types: 1.3.1 - postcss: 8.5.3 - postcss-nested: 7.0.2(postcss@8.5.3) + postcss: 8.5.6 + postcss-nested: 7.0.2(postcss@8.5.6) semver: 7.7.2 tinyglobby: 0.2.14 optionalDependencies: @@ -9974,42 +9687,42 @@ snapshots: exsolve: 1.0.4 pathe: 2.0.3 - postcss-calc@10.1.1(postcss@8.5.3): + postcss-calc@10.1.1(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.2(postcss@8.5.3): + postcss-colormin@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.25.0 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.4(postcss@8.5.3): + postcss-convert-values@7.0.4(postcss@8.5.6): dependencies: browserslist: 4.25.0 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-discard-comments@7.0.3(postcss@8.5.3): + postcss-discard-comments@7.0.3(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-discard-duplicates@7.0.1(postcss@8.5.3): + postcss-discard-duplicates@7.0.1(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 - postcss-discard-empty@7.0.0(postcss@8.5.3): + postcss-discard-empty@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 - postcss-discard-overridden@7.0.0(postcss@8.5.3): + postcss-discard-overridden@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-load-config@4.0.2(postcss@8.5.3): dependencies: @@ -10027,43 +9740,43 @@ snapshots: tsx: 4.19.3 yaml: 2.7.0 - postcss-merge-longhand@7.0.4(postcss@8.5.3): + postcss-merge-longhand@7.0.4(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - stylehacks: 7.0.4(postcss@8.5.3) + stylehacks: 7.0.4(postcss@8.5.6) - postcss-merge-rules@7.0.4(postcss@8.5.3): + postcss-merge-rules@7.0.4(postcss@8.5.6): dependencies: browserslist: 4.25.0 caniuse-api: 3.0.0 - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@7.0.0(postcss@8.5.3): + postcss-minify-font-values@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.0(postcss@8.5.3): + postcss-minify-gradients@7.0.0(postcss@8.5.6): dependencies: colord: 2.9.3 - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.2(postcss@8.5.3): + postcss-minify-params@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.25.0 - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-selectors@7.0.4(postcss@8.5.3): + postcss-minify-selectors@7.0.4(postcss@8.5.6): dependencies: cssesc: 3.0.0 - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-nested@6.2.0(postcss@8.5.6): @@ -10071,71 +9784,71 @@ snapshots: postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-nested@7.0.2(postcss@8.5.3): + postcss-nested@7.0.2(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 7.1.0 - postcss-normalize-charset@7.0.0(postcss@8.5.3): + postcss-normalize-charset@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 - postcss-normalize-display-values@7.0.0(postcss@8.5.3): + postcss-normalize-display-values@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.0(postcss@8.5.3): + postcss-normalize-positions@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.0(postcss@8.5.3): + postcss-normalize-repeat-style@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.0(postcss@8.5.3): + postcss-normalize-string@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.0(postcss@8.5.3): + postcss-normalize-timing-functions@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.2(postcss@8.5.3): + postcss-normalize-unicode@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.25.0 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.0(postcss@8.5.3): + postcss-normalize-url@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.0(postcss@8.5.3): + postcss-normalize-whitespace@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.1(postcss@8.5.3): + postcss-ordered-values@7.0.1(postcss@8.5.6): dependencies: - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-reduce-initial@7.0.2(postcss@8.5.3): + postcss-reduce-initial@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.25.0 caniuse-api: 3.0.0 - postcss: 8.5.3 + postcss: 8.5.6 - postcss-reduce-transforms@7.0.0(postcss@8.5.3): + postcss-reduce-transforms@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 postcss-selector-parser@6.1.2: @@ -10148,15 +9861,15 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@7.0.1(postcss@8.5.3): + postcss-svgo@7.0.1(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@7.0.3(postcss@8.5.3): + postcss-unique-selectors@7.0.3(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-value-parser@4.2.0: {} @@ -10476,7 +10189,7 @@ snapshots: rollup: 4.34.8 typescript: 5.8.3 optionalDependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 rollup@4.34.8: dependencies: @@ -10713,10 +10426,10 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - stylehacks@7.0.4(postcss@8.5.3): + stylehacks@7.0.4(postcss@8.5.6): dependencies: browserslist: 4.25.0 - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 sucrase@3.35.0: @@ -10795,11 +10508,6 @@ snapshots: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 - tinyglobby@0.2.13: - dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - tinyglobby@0.2.14: dependencies: fdir: 6.4.6(picomatch@4.0.2) @@ -10839,12 +10547,12 @@ snapshots: tsup@8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.7.0): dependencies: - bundle-require: 5.1.0(esbuild@0.25.3) + bundle-require: 5.1.0(esbuild@0.25.5) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.0 - debug: 4.4.0 - esbuild: 0.25.3 + debug: 4.4.1 + esbuild: 0.25.5 fix-dts-default-cjs-exports: 1.0.0 joycon: 3.1.1 picocolors: 1.1.1 @@ -10854,7 +10562,7 @@ snapshots: source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 + tinyglobby: 0.2.14 tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.6 @@ -10930,7 +10638,7 @@ snapshots: citty: 0.1.6 consola: 3.4.0 defu: 6.1.4 - esbuild: 0.25.2 + esbuild: 0.25.5 fix-dts-default-cjs-exports: 1.0.0 hookable: 5.5.3 jiti: 2.4.2 @@ -10943,7 +10651,7 @@ snapshots: rollup: 4.34.8 rollup-plugin-dts: 6.1.1(rollup@4.34.8)(typescript@5.8.3) scule: 1.3.0 - tinyglobby: 0.2.12 + tinyglobby: 0.2.14 untyped: 2.0.0 optionalDependencies: typescript: 5.8.3 @@ -11155,38 +10863,6 @@ snapshots: - tsx - yaml - vite@6.3.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0): - dependencies: - esbuild: 0.25.5 - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.34.8 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 22.13.14 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.29.2 - tsx: 4.19.3 - yaml: 2.7.0 - - vite@6.3.3(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0): - dependencies: - esbuild: 0.25.5 - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.34.8 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 24.0.3 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.29.2 - tsx: 4.19.3 - yaml: 2.7.0 - vite@6.3.5(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0): dependencies: esbuild: 0.25.5 @@ -11226,24 +10902,24 @@ snapshots: vitest@3.1.2(@types/debug@4.1.12)(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.1.2 - '@vitest/mocker': 3.1.2(vite@6.3.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0)) + '@vitest/mocker': 3.1.2(vite@6.3.5(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.1.2 '@vitest/runner': 3.1.2 '@vitest/snapshot': 3.1.2 '@vitest/spy': 3.1.2 '@vitest/utils': 3.1.2 chai: 5.2.0 - debug: 4.4.0 + debug: 4.4.1 expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 + tinyglobby: 0.2.14 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) vite-node: 3.1.2(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: @@ -11266,24 +10942,24 @@ snapshots: vitest@3.1.2(@types/debug@4.1.12)(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.1.2 - '@vitest/mocker': 3.1.2(vite@6.3.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0)) + '@vitest/mocker': 3.1.2(vite@6.3.5(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.1.2 '@vitest/runner': 3.1.2 '@vitest/snapshot': 3.1.2 '@vitest/spy': 3.1.2 '@vitest/utils': 3.1.2 chai: 5.2.0 - debug: 4.4.0 + debug: 4.4.1 expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 + tinyglobby: 0.2.14 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.3(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) vite-node: 3.1.2(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: