gitframes 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/audio/index.mjs +4 -4
  2. package/dist/{audio-C4kiPbrV.mjs → audio-DvL7gQQ8.mjs} +3 -3
  3. package/dist/{audio-C4kiPbrV.mjs.map → audio-DvL7gQQ8.mjs.map} +1 -1
  4. package/dist/{audio-CiXUMGyk.mjs → audio-sZdRh_qg.mjs} +3 -3
  5. package/dist/{audio-CiXUMGyk.mjs.map → audio-sZdRh_qg.mjs.map} +1 -1
  6. package/dist/{dist-C37594c6.mjs → dist-8vbhZYqX.mjs} +471 -152
  7. package/dist/dist-8vbhZYqX.mjs.map +1 -0
  8. package/dist/{dist-CMF9eNLB.mjs → dist-B0vCkDzJ.mjs} +37 -3
  9. package/dist/dist-B0vCkDzJ.mjs.map +1 -0
  10. package/dist/effects/index.mjs +2 -2
  11. package/dist/{effects-C9connag.mjs → effects-C3nV-k4T.mjs} +4 -4
  12. package/dist/{effects-C9connag.mjs.map → effects-C3nV-k4T.mjs.map} +1 -1
  13. package/dist/fonts/index.mjs +1 -1
  14. package/dist/{fonts-Dn18r_ST.mjs → fonts-dn-pl4Pe.mjs} +3 -3
  15. package/dist/{fonts-Dn18r_ST.mjs.map → fonts-dn-pl4Pe.mjs.map} +1 -1
  16. package/dist/{index-YZsTjqut.d.mts → index-D-O2kwLx.d.mts} +3 -3
  17. package/dist/{index-YZsTjqut.d.mts.map → index-D-O2kwLx.d.mts.map} +1 -1
  18. package/dist/index.d.mts +67 -49
  19. package/dist/index.d.mts.map +1 -1
  20. package/dist/index.mjs +96 -52
  21. package/dist/index.mjs.map +1 -1
  22. package/dist/react/index.mjs +2 -2
  23. package/dist/renderer/index.d.mts +2 -2
  24. package/dist/renderer/index.mjs +3 -3
  25. package/dist/{renderer-DgY7XBYE.mjs → renderer-CMDIVxhv.mjs} +315 -12
  26. package/dist/renderer-CMDIVxhv.mjs.map +1 -0
  27. package/dist/{renderers-CLJQRPVU-CMZnHNK0.mjs → renderers-CLJQRPVU-DuQ7-PaC.mjs} +3 -3
  28. package/dist/{renderers-CLJQRPVU-CMZnHNK0.mjs.map → renderers-CLJQRPVU-DuQ7-PaC.mjs.map} +1 -1
  29. package/dist/signals/index.mjs +5 -5
  30. package/dist/{signals-BB_kdndF.mjs → signals-CLaCq092.mjs} +2 -2
  31. package/dist/{signals-BB_kdndF.mjs.map → signals-CLaCq092.mjs.map} +1 -1
  32. package/package.json +52 -52
  33. package/dist/dist-C37594c6.mjs.map +0 -1
  34. package/dist/dist-CMF9eNLB.mjs.map +0 -1
  35. package/dist/renderer-DgY7XBYE.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dist-8vbhZYqX.mjs","names":["LocalFontManager","AudioSignalComputePipeline","resolve","WebGPUAudioProcessor","AudioLatentEngine","HeadlessDOMMatrix","SlugFontCache","SlugGeometry","Canvas","Path3D","ObjLoader","FbxLoader","StlLoader","PlyLoader","GltfLoader","VoxLoader","ThreeDSLoader","OffLoader"],"sources":["../../client-utils/dist/index.mjs","../../webgpu-renderers/dist/index.mjs"],"sourcesContent":["//#region src/browser/env.ts\nfunction getEnv(key) {\n\tif (typeof window !== \"undefined\" && window.GATEWAI_ENV && window.GATEWAI_ENV[key] !== void 0) return window.GATEWAI_ENV[key];\n\ttry {\n\t\tif (typeof process !== \"undefined\" && process && process.env) {\n\t\t\tconst val = process.env[key];\n\t\t\tif (val !== void 0) return val;\n\t\t}\n\t} catch {}\n}\n\n//#endregion\n//#region src/browser/file.ts\nconst isNodeEnv = () => typeof process !== \"undefined\" && Boolean(process.versions?.node) || Boolean(globalThis.__IS_HEADLESS_RENDERER__);\nlet BASE_URL = getEnv(\"BASE_URL\");\nlet R2_CUSTOM_DOMAIN = getEnv(\"R2_CUSTOM_DOMAIN\");\nfunction configureAssetUrls(options) {\n\tif (options.baseUrl !== void 0) BASE_URL = options.baseUrl;\n\tif (options.r2CustomDomain !== void 0) R2_CUSTOM_DOMAIN = options.r2CustomDomain;\n}\n/**\n* Resolve the actual playable URL from a VirtualMediaData.\n* Walks down the tree to find the 'source' operation.\n*/\nfunction normalizeLocalBrowserUrl(url) {\n\tif (!url || isNodeEnv() || typeof window === \"undefined\") return url;\n\tconst clean = url.replace(/^file:\\/\\//, \"\");\n\tif (clean.startsWith(\"/\") && !clean.startsWith(\"/@fs/\") && !clean.startsWith(\"/api/\")) return `/@fs${clean}`;\n\treturn url;\n}\nfunction resolveMediaSourceUrl(vv, options) {\n\tif (!vv) return void 0;\n\tif (vv?.sourceUrl && typeof vv.sourceUrl === \"string\") return normalizeLocalBrowserUrl(vv.sourceUrl);\n\tif (vv?.url && typeof vv.url === \"string\") return normalizeLocalBrowserUrl(vv.url);\n\tconst directEntity = vv?.entity;\n\tif (directEntity) {\n\t\tif (typeof directEntity === \"string\") return normalizeLocalBrowserUrl(directEntity);\n\t\tif (directEntity.url && typeof directEntity.url === \"string\") return normalizeLocalBrowserUrl(directEntity.url);\n\t\treturn GetAssetEndpoint(directEntity, options);\n\t}\n\tif (vv.operation?.op === \"source\") {\n\t\tconst source = vv.operation.source;\n\t\tif (typeof source === \"string\") return normalizeLocalBrowserUrl(source);\n\t\tif (source?.url && typeof source.url === \"string\") return normalizeLocalBrowserUrl(source.url);\n\t\tif (source?.entity) return GetAssetEndpoint(source.entity, options);\n\t\tif (vv.operation.sourceUrl && typeof vv.operation.sourceUrl === \"string\") return normalizeLocalBrowserUrl(vv.operation.sourceUrl);\n\t\tif (vv.operation.url && typeof vv.operation.url === \"string\") return normalizeLocalBrowserUrl(vv.operation.url);\n\t\tconst srtText = vv.operation.srtText;\n\t\tif (srtText) return `data:text/srt;base64,${typeof Buffer !== \"undefined\" ? Buffer.from(srtText).toString(\"base64\") : btoa(unescape(encodeURIComponent(srtText)))}`;\n\t\tconst svgContent$1 = vv.operation.svgContent;\n\t\tif (svgContent$1) return `data:image/svg+xml;base64,${typeof Buffer !== \"undefined\" ? Buffer.from(svgContent$1).toString(\"base64\") : btoa(unescape(encodeURIComponent(svgContent$1)))}`;\n\t}\n\tconst svgDataUrl = vv.operation?.svgDataUrl;\n\tif (svgDataUrl && typeof svgDataUrl === \"string\") return svgDataUrl;\n\tconst svgContent = vv.operation?.svgContent;\n\tif (svgContent && typeof svgContent === \"string\") return `data:image/svg+xml;base64,${typeof Buffer !== \"undefined\" ? Buffer.from(svgContent).toString(\"base64\") : btoa(unescape(encodeURIComponent(svgContent)))}`;\n\tconst lutUrl = vv.operation?.lutUrl;\n\tif (lutUrl && typeof lutUrl === \"string\") return lutUrl;\n\tif (vv.operation?.op === \"ExtractLUT\") return;\n\tif (Array.isArray(vv.children)) for (const child of vv.children) {\n\t\tconst found = resolveMediaSourceUrl(child, options);\n\t\tif (found) return found;\n\t}\n\tconst inputs = vv.operation?.inputs;\n\tif (inputs && typeof inputs === \"object\") {\n\t\tfor (const entry of Object.values(inputs)) if (entry?.outputItem?.data && typeof entry.outputItem.data === \"object\") {\n\t\t\tconst found = resolveMediaSourceUrl(entry.outputItem.data, options);\n\t\t\tif (found) return found;\n\t\t}\n\t}\n}\n/**\n* Appends a file extension hint to the URL.\n*/\nfunction GetAssetEndpoint(fileAsset, options) {\n\tif (!fileAsset) return \"\";\n\tif (fileAsset.url && typeof fileAsset.url === \"string\") {\n\t\tconst u = fileAsset.url;\n\t\tif (typeof window !== \"undefined\" && !isNodeEnv()) {\n\t\t\tconst cleanPath = u.replace(/^file:\\/\\//, \"\");\n\t\t\tif (cleanPath.startsWith(\"/\") && !cleanPath.startsWith(\"/@fs/\") && !cleanPath.startsWith(\"/api/\")) return `/@fs${cleanPath}`;\n\t\t}\n\t\treturn u;\n\t}\n\tconst { id, key } = fileAsset;\n\tconst r2CustomDomain = options?.r2CustomDomain ?? getEnv(\"R2_CUSTOM_DOMAIN\") ?? R2_CUSTOM_DOMAIN;\n\tconst baseUrl = options?.baseUrl ?? getEnv(\"BASE_URL\") ?? BASE_URL ?? \"\";\n\tif (key && (key.startsWith(\"file://\") || key.startsWith(\"/\") || key.startsWith(\"http://\") || key.startsWith(\"https://\"))) {\n\t\tif (typeof window !== \"undefined\" && !isNodeEnv()) {\n\t\t\tconst cleanPath = key.replace(/^file:\\/\\//, \"\");\n\t\t\tif (cleanPath.startsWith(\"/\") && !cleanPath.startsWith(\"/@fs/\") && !cleanPath.startsWith(\"/api/\")) return `/@fs${cleanPath}`;\n\t\t}\n\t\treturn key.startsWith(\"/\") ? `file://${key}` : key;\n\t}\n\tif (r2CustomDomain) return `https://${r2CustomDomain}/${key}`;\n\tif (baseUrl && baseUrl.startsWith(\"file://\")) return `${baseUrl.replace(/\\/+$/, \"\")}/${key}`;\n\tconst extension = key.includes(\".\") ? key.split(\".\").pop() : null;\n\treturn `${baseUrl}/api/v1/assets/${id}${extension ? `.${extension}` : \"\"}`;\n}\nfunction GetFontAssetUrl(name, options) {\n\tconst r2CustomDomain = options?.r2CustomDomain ?? getEnv(\"R2_CUSTOM_DOMAIN\") ?? R2_CUSTOM_DOMAIN;\n\tconst baseUrl = options?.baseUrl ?? getEnv(\"BASE_URL\") ?? BASE_URL ?? \"\";\n\tif (r2CustomDomain) return `https://${r2CustomDomain}/fonts/${name}/font_file.ttf`;\n\tif (baseUrl) return `${baseUrl}/api/v1/fonts/load/${name}`;\n\treturn `assets/fonts/${name}.ttf`;\n}\nfunction getDataTypeFromMime(mimeType, filename) {\n\tif (filename) {\n\t\tif (filename.toLowerCase().split(\".\").pop() === \"cube\") return \"LUT\";\n\t}\n\tif (!mimeType) return null;\n\tif (mimeType === \"image/svg+xml\") return \"SVG\";\n\tif (mimeType.startsWith(\"image/\")) return \"Image\";\n\tif (mimeType === \"application/json\") return \"Lottie\";\n\tif (mimeType.startsWith(\"video/\")) return \"Video\";\n\tif (mimeType.startsWith(\"audio/\")) return \"Audio\";\n\tif (mimeType === \"text/srt\" || mimeType === \"application/x-subrip\") return \"Caption\";\n\tif (mimeType === \"text/plain\") return \"Text\";\n\treturn null;\n}\nconst isFileData = (data) => {\n\treturn typeof data === \"object\" && data !== null && \"entity\" in data;\n};\nfunction ResolveFileDataUrl(data, options) {\n\tif (!data) return null;\n\tif (data.entity) return GetAssetEndpoint(data.entity, options);\n\treturn null;\n}\n\n//#endregion\n//#region src/browser/local-font-manager.ts\n/**\n* Singleton font loader\n*/\nvar LocalFontManager = class LocalFontManager {\n\tstatic instance = null;\n\tloadedFonts = /* @__PURE__ */ new Set();\n\tconstructor() {}\n\tstatic getInstance() {\n\t\tif (!LocalFontManager.instance) LocalFontManager.instance = new LocalFontManager();\n\t\treturn LocalFontManager.instance;\n\t}\n\tasync loadFont(family, url) {\n\t\tif (this.loadedFonts.has(family)) return;\n\t\tconst fontId = `local-font-${family}`;\n\t\tif (document.getElementById(fontId)) return;\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.id = fontId;\n\t\tstyle.innerHTML = `\n\t\t\t@font-face {\n \tfont-family: \"${family}\";\n \tsrc: url(\"${url}\");\n\t\t\t}\n `;\n\t\tdocument.head.appendChild(style);\n\t\ttry {\n\t\t\tawait document.fonts.load(`1em \"${family}\"`);\n\t\t\tawait document.fonts.ready;\n\t\t\tthis.loadedFonts.add(family);\n\t\t} catch (e) {\n\t\t\tconsole.warn(`Font load failed for ${family}:`, e);\n\t\t}\n\t}\n\tisFontLoaded(family) {\n\t\treturn this.loadedFonts.has(family);\n\t}\n};\nconst localFontManager = LocalFontManager.getInstance();\nconst registerFont = (family, url) => localFontManager.loadFont(family, url);\nconst isFontLoaded = (family) => localFontManager.isFontLoaded(family);\n\n//#endregion\nexport { BASE_URL, GetAssetEndpoint, GetFontAssetUrl, LocalFontManager, R2_CUSTOM_DOMAIN, ResolveFileDataUrl, configureAssetUrls, getDataTypeFromMime, getEnv, isFileData, isFontLoaded, localFontManager, registerFont, resolveMediaSourceUrl };\n//# sourceMappingURL=index.mjs.map","import { createRequire } from \"node:module\";\nimport { BASE_URL, GetFontAssetUrl, localFontManager } from \"@gitframes/client-utils\";\nimport { ALL_FORMATS, AudioBufferSink, CanvasSink, FilePathSource, Input, UrlSource, VideoSampleSink } from \"mediabunny\";\nimport * as fontkit from \"fontkit\";\nimport { ChartGPU } from \"chartgpu\";\nimport { decompressFrames, parseGIF } from \"gifuct-js\";\nimport { DotLottie } from \"@lottiefiles/dotlottie-web\";\nimport React, { createContext, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { inflateSync } from \"node:zlib\";\nimport earcut from \"earcut\";\nimport { Path2D } from \"skia-canvas\";\n\n//#region src/shader-store.ts\nvar ShaderStore = class {\n\tstore = /* @__PURE__ */ new Map();\n\tgetCacheKey(nodeId, renderId) {\n\t\treturn `${renderId ?? \"global\"}:${nodeId}`;\n\t}\n\tregister(nodeId, shader, renderId) {\n\t\tthis.store.set(this.getCacheKey(nodeId, renderId), shader);\n\t\tif (renderId) this.store.set(this.getCacheKey(nodeId, void 0), shader);\n\t}\n\tget(nodeId, renderId) {\n\t\tconst res = this.store.get(this.getCacheKey(nodeId, renderId));\n\t\tif (!res && renderId) return this.store.get(this.getCacheKey(nodeId, void 0));\n\t\treturn res;\n\t}\n\tdelete(nodeId, renderId) {\n\t\tthis.store.delete(this.getCacheKey(nodeId, renderId));\n\t}\n\tclear(renderId) {\n\t\tconst prefix = `${renderId}:`;\n\t\tfor (const key of this.store.keys()) if (key.startsWith(prefix)) this.store.delete(key);\n\t}\n\tregisterSignalsFromComposition(renderId, virtualMedia) {\n\t\tconst traverse = (node) => {\n\t\t\tif (!node) return;\n\t\t\tconst op = node.operation;\n\t\t\tif (op && op.inputs) {\n\t\t\t\tfor (const inputEntry of Object.values(op.inputs)) if (inputEntry && inputEntry.connectionValid && inputEntry.outputItem && inputEntry.outputItem.type === \"Signal\") {\n\t\t\t\t\tconst sd = inputEntry.outputItem.data;\n\t\t\t\t\tif (sd && sd.nodeId) {\n\t\t\t\t\t\tconst customWGSL = sd.customWGSL || sd.wgsl;\n\t\t\t\t\t\tif (customWGSL) this.register(sd.nodeId, {\n\t\t\t\t\t\t\twgsl: customWGSL,\n\t\t\t\t\t\t\tname: sd.signalFnName || sd.name || `signal_${sd.nodeId.replace(/[^a-zA-Z0-9]/g, \"_\")}`,\n\t\t\t\t\t\t\toutputType: sd.fnOutputType ?? sd.outputType ?? \"f32\",\n\t\t\t\t\t\t\tfnParams: sd.fnParams ?? []\n\t\t\t\t\t\t}, renderId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.children) for (const child of node.children) traverse(child);\n\t\t};\n\t\ttraverse(virtualMedia);\n\t}\n};\nconst shaderStore = new ShaderStore();\n\n//#endregion\n//#region src/signals/audio-signal-compute.ts\n/**\n* 1. Biquad IIR Filter Bank Compute Shader\n* Applies resonant bandpass/lowpass/highpass filtering on PCM audio buffer.\n*/\nconst AUDIO_BIQUAD_FILTER_SHADER = `\nstruct BiquadUniforms {\n b0 : f32,\n b1 : f32,\n b2 : f32,\n a1 : f32,\n a2 : f32,\n numSamples : u32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : BiquadUniforms;\n@group(0) @binding(1) var<storage, read> inAudio : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outAudio : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n var x1 = 0.0f;\n var x2 = 0.0f;\n var y1 = 0.0f;\n var y2 = 0.0f;\n\n let total = u.numSamples;\n for (var i = 0u; i < total; i = i + 1u) {\n let x0 = inAudio[i];\n let y0 = u.b0 * x0 + u.b1 * x1 + u.b2 * x2 - u.a1 * y1 - u.a2 * y2;\n\n x2 = x1;\n x1 = x0;\n y2 = y1;\n y1 = y0;\n\n outAudio[i] = y0;\n }\n}\n`;\n/**\n* 2. Windowed RMS, Peak Envelope & Spectral Flux Extraction Compute Shader\n*/\nconst AUDIO_FEATURE_EXTRACTION_SHADER = `\nstruct FeatureUniforms {\n sampleRate : f32,\n numSamples : u32,\n numFrames : u32,\n hopSize : u32,\n windowSize : u32,\n attackAlpha : f32,\n releaseAlpha : f32,\n sensitivity : f32,\n noiseFloorDb : f32,\n dynamicRangeDb : f32,\n curveType : u32, // 0=linear, 1=exp, 2=log, 3=sqr, 4=smoothstep\n beatThreshold : f32,\n beatDecayAlpha : f32,\n extractionMode : u32, // 0=rms, 1=beat, 2=bass, 3=energy, etc.\n pad0 : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : FeatureUniforms;\n@group(0) @binding(1) var<storage, read> rawAudio : array<f32>;\n@group(0) @binding(2) var<storage, read> bassAudio : array<f32>;\n@group(0) @binding(3) var<storage, read_write> outPrimary : array<f32>;\n@group(0) @binding(4) var<storage, read_write> outBeat : array<f32>;\n@group(0) @binding(5) var<storage, read_write> outBass : array<f32>;\n@group(0) @binding(6) var<storage, read_write> outEnergy : array<f32>;\n@group(0) @binding(7) var<storage, read_write> outStats : array<f32>;\n\nfn applyCurve(v: f32, curve: u32) -> f32 {\n let cv = clamp(v, 0.0f, 1.0f);\n if (curve == 1u) { // Exponential\n return cv * cv;\n }\n if (curve == 2u) { // Logarithmic\n return log(1.0f + 9.0f * cv) / log(10.0f);\n }\n if (curve == 3u) { // Square\n return cv * cv * cv;\n }\n if (curve == 4u) { // Smoothstep\n return cv * cv * (3.0f - 2.0f * cv);\n }\n return cv; // Linear\n}\n\nfn scaleDbToNormalized(rms: f32) -> f32 {\n let eps = 1e-6f;\n let safeRms = max(rms * u.sensitivity, eps);\n let db = 20.0f * log(safeRms) / log(10.0f);\n let minDb = u.noiseFloorDb;\n let maxDb = u.noiseFloorDb + u.dynamicRangeDb;\n let norm = clamp((db - minDb) / (maxDb - minDb), 0.0f, 1.0f);\n return norm;\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n var envFollower = 0.0f;\n var bassFollower = 0.0f;\n var prevBassEnergy = 0.0f;\n var beatEnvelope = 0.0f;\n\n let numFrames = u.numFrames;\n let numSamples = u.numSamples;\n let halfWin = u.windowSize / 2u;\n\n var minEnergy = 1e6f;\n var maxEnergy = -1e6f;\n var minBass = 1e6f;\n var maxBass = -1e6f;\n var minBeat = 1e6f;\n var maxBeat = -1e6f;\n var minPrimary = 1e6f;\n var maxPrimary = -1e6f;\n\n for (var f = 0u; f < numFrames; f = f + 1u) {\n let centerSample = f * u.hopSize;\n let startSample = select(0u, centerSample - halfWin, centerSample >= halfWin);\n let endSample = min(numSamples, centerSample + halfWin);\n\n var sumSq = 0.0f;\n var sumBassSq = 0.0f;\n var count = 0.0f;\n\n for (var s = startSample; s < endSample; s = s + 1u) {\n let val = rawAudio[s];\n let bVal = bassAudio[s];\n sumSq = sumSq + val * val;\n sumBassSq = sumBassSq + bVal * bVal;\n count = count + 1.0f;\n }\n\n let effectiveCount = max(count, 1.0f);\n let rms = sqrt(sumSq / effectiveCount);\n let bassRms = sqrt(sumBassSq / effectiveCount);\n\n let normRms = scaleDbToNormalized(rms);\n let normBass = scaleDbToNormalized(bassRms);\n\n // Ballistics envelope follower (Attack / Release)\n let alpha = select(u.releaseAlpha, u.attackAlpha, normRms > envFollower);\n envFollower = envFollower + alpha * (normRms - envFollower);\n\n let bassAlpha = select(u.releaseAlpha, u.attackAlpha, normBass > bassFollower);\n bassFollower = bassFollower + bassAlpha * (normBass - bassFollower);\n\n // Spectral flux / Onset detection on bass energy\n let flux = max(0.0f, bassFollower - prevBassEnergy);\n prevBassEnergy = bassFollower;\n\n // Beat pulse triggering and exponential decay\n beatEnvelope = beatEnvelope * u.beatDecayAlpha;\n if (flux > u.beatThreshold) {\n let hit = clamp((flux - u.beatThreshold) / max(0.01f, 0.15f - u.beatThreshold), 0.6f, 1.0f);\n beatEnvelope = max(beatEnvelope, hit);\n }\n\n let finalEnergy = applyCurve(envFollower, u.curveType);\n let finalBass = applyCurve(bassFollower, u.curveType);\n let finalBeat = applyCurve(beatEnvelope, u.curveType);\n\n var finalPrimary = finalEnergy;\n if (u.extractionMode == 1u) { // transient_beat\n finalPrimary = finalBeat;\n } else if (u.extractionMode == 2u || u.extractionMode == 3u) { // sub_bass or bass\n finalPrimary = finalBass;\n }\n\n minEnergy = min(minEnergy, finalEnergy);\n maxEnergy = max(maxEnergy, finalEnergy);\n minBass = min(minBass, finalBass);\n maxBass = max(maxBass, finalBass);\n minBeat = min(minBeat, finalBeat);\n maxBeat = max(maxBeat, finalBeat);\n minPrimary = min(minPrimary, finalPrimary);\n maxPrimary = max(maxPrimary, finalPrimary);\n\n outPrimary[f] = finalPrimary;\n outBeat[f] = finalBeat;\n outBass[f] = finalBass;\n outEnergy[f] = finalEnergy;\n }\n\n if (numFrames > 0u) {\n outStats[0] = minPrimary;\n outStats[1] = select(maxPrimary, minPrimary + 1.0f, maxPrimary <= minPrimary + 1e-5f);\n outStats[2] = minBeat;\n outStats[3] = select(maxBeat, minBeat + 1.0f, maxBeat <= minBeat + 1e-5f);\n outStats[4] = minBass;\n outStats[5] = select(maxBass, minBass + 1.0f, maxBass <= minBass + 1e-5f);\n outStats[6] = minEnergy;\n outStats[7] = select(maxEnergy, minEnergy + 1.0f, maxEnergy <= minEnergy + 1e-5f);\n } else {\n outStats[0] = 0.0f;\n outStats[1] = 1.0f;\n outStats[2] = 0.0f;\n outStats[3] = 1.0f;\n outStats[4] = 0.0f;\n outStats[5] = 1.0f;\n outStats[6] = 0.0f;\n outStats[7] = 1.0f;\n }\n}\n`;\n/**\n* 3. 2D / 1D Texture Pack Shader\n* Copies the 4 extracted signals (Primary, Beat, Bass, Energy) into an RGBA32F texture for UV shader sampling.\n*/\nconst AUDIO_SIGNAL_TO_TEXTURE_SHADER = `\nstruct TexturePackUniforms {\n numFrames : u32,\n texWidth : u32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : TexturePackUniforms;\n@group(0) @binding(1) var<storage, read> inPrimary : array<f32>;\n@group(0) @binding(2) var<storage, read> inBeat : array<f32>;\n@group(0) @binding(3) var<storage, read> inBass : array<f32>;\n@group(0) @binding(4) var<storage, read> inEnergy : array<f32>;\n@group(0) @binding(5) var outTex : texture_storage_2d<rgba16float, write>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let x = gid.x;\n if (x >= u.texWidth) { return; }\n\n let progress = f32(x) / f32(u.texWidth - 1u);\n let frameFloat = progress * f32(u.numFrames - 1u);\n let f0 = u32(clamp(floor(frameFloat), 0.0f, f32(u.numFrames - 1u)));\n let f1 = u32(clamp(ceil(frameFloat), 0.0f, f32(u.numFrames - 1u)));\n let weight = fract(frameFloat);\n\n let prim = mix(inPrimary[f0], inPrimary[f1], weight);\n let beat = mix(inBeat[f0], inBeat[f1], weight);\n let bass = mix(inBass[f0], inBass[f1], weight);\n let nrg = mix(inEnergy[f0], inEnergy[f1], weight);\n\n textureStore(outTex, vec2<i32>(i32(x), 0), vec4<f32>(prim, beat, bass, nrg));\n}\n`;\n/**\n* 4. Pace / Speed Ramping Prefix-Sum Time Integral Shader\n* Integrates pace = baseSpeed + gain * signal(t) over time into a monotonic timestamp lookup buffer.\n*/\nconst AUDIO_PACE_INTEGRAL_SHADER = `\nstruct PaceUniforms {\n baseSpeed : f32,\n gain : f32,\n dt : f32,\n numFrames : u32,\n};\n\n@group(0) @binding(0) var<uniform> u : PaceUniforms;\n@group(0) @binding(1) var<storage, read> inSignal : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outSourceTimestamps : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n var accumulatedTime = 0.0f;\n let total = u.numFrames;\n\n for (var f = 0u; f < total; f = f + 1u) {\n let sig = inSignal[f];\n let instantaneousSpeed = max(0.01f, u.baseSpeed + u.gain * sig);\n accumulatedTime = accumulatedTime + instantaneousSpeed * u.dt;\n outSourceTimestamps[f] = accumulatedTime;\n }\n}\n`;\nfunction calculateBiquadBandpassCoeffs(sampleRate, centerFreq, Q) {\n\tconst w0 = 2 * Math.PI * centerFreq / sampleRate;\n\tconst alpha = Math.sin(w0) / (2 * Q);\n\tconst cosW0 = Math.cos(w0);\n\tconst b0 = alpha;\n\tconst b1 = 0;\n\tconst b2 = -alpha;\n\tconst a0 = 1 + alpha;\n\tconst a1 = -2 * cosW0;\n\tconst a2 = 1 - alpha;\n\treturn {\n\t\tb0: b0 / a0,\n\t\tb1: b1 / a0,\n\t\tb2: b2 / a0,\n\t\ta1: a1 / a0,\n\t\ta2: a2 / a0\n\t};\n}\nconst getCurveTypeCode = (curve) => {\n\tswitch (curve) {\n\t\tcase \"exponential\": return 1;\n\t\tcase \"logarithmic\": return 2;\n\t\tcase \"square\": return 3;\n\t\tcase \"smoothstep\": return 4;\n\t\tcase \"linear\":\n\t\tdefault: return 0;\n\t}\n};\nconst getExtractionModeCode = (mode) => {\n\tswitch (mode) {\n\t\tcase \"transient_beat\": return 1;\n\t\tcase \"sub_bass\": return 2;\n\t\tcase \"bass\": return 3;\n\t\tcase \"mid\": return 4;\n\t\tcase \"high\": return 5;\n\t\tcase \"spectral_flux\": return 6;\n\t\tcase \"rms_envelope\":\n\t\tdefault: return 0;\n\t}\n};\nvar AudioSignalComputePipeline = class AudioSignalComputePipeline {\n\tstatic pipelineCache = /* @__PURE__ */ new WeakMap();\n\tstatic getPipeline(device, label, code) {\n\t\tlet map = AudioSignalComputePipeline.pipelineCache.get(device);\n\t\tif (!map) {\n\t\t\tmap = /* @__PURE__ */ new Map();\n\t\t\tAudioSignalComputePipeline.pipelineCache.set(device, map);\n\t\t}\n\t\tlet pipeline = map.get(label);\n\t\tif (!pipeline) {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tlabel: `${label}.wgsl`,\n\t\t\t\tcode\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tmap.set(label, pipeline);\n\t\t}\n\t\treturn pipeline;\n\t}\n\t/**\n\t* Processes raw PCM audio channels on the GPU and outputs extracted feature buffers and textures.\n\t*/\n\tstatic async extractFeatures(device, audioChannels, sampleRate, fps, config$1 = {}, targetWidth = 512) {\n\t\tconst numChannels = audioChannels.length;\n\t\tif (numChannels === 0 || audioChannels[0].length === 0) throw new Error(\"Empty audio buffer supplied to AudioSignalComputePipeline.\");\n\t\tconst numAudioSamples = audioChannels[0].length;\n\t\tconst durationSec = numAudioSamples / sampleRate;\n\t\tconst numFrames = Math.max(1, Math.ceil(durationSec * fps));\n\t\tconst hopSize = Math.max(1, Math.round(sampleRate / fps));\n\t\tconst windowSize = Math.max(32, Math.round(hopSize * 2));\n\t\tconst monoPcm = new Float32Array(numAudioSamples);\n\t\tfor (let c = 0; c < numChannels; c++) {\n\t\t\tconst ch = audioChannels[c];\n\t\t\tfor (let i = 0; i < numAudioSamples; i++) monoPcm[i] += ch[i] / numChannels;\n\t\t}\n\t\tconst rawAudioBuffer = device.createBuffer({\n\t\t\tsize: numAudioSamples * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_raw_pcm_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(rawAudioBuffer, 0, monoPcm);\n\t\tconst bassAudioBuffer = device.createBuffer({\n\t\t\tsize: numAudioSamples * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_bass_filtered_buffer\"\n\t\t});\n\t\tconst primaryBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_primary_signal_buffer\"\n\t\t});\n\t\tconst beatBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_beat_signal_buffer\"\n\t\t});\n\t\tconst bassBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_bass_signal_buffer\"\n\t\t});\n\t\tconst energyBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_energy_signal_buffer\"\n\t\t});\n\t\tconst biquadPipeline = AudioSignalComputePipeline.getPipeline(device, \"AudioBiquadFilterPipeline\", AUDIO_BIQUAD_FILTER_SHADER);\n\t\tconst bassCoeffs = calculateBiquadBandpassCoeffs(sampleRate, 120, 1.2);\n\t\tconst biquadUniformsData = new Float32Array([\n\t\t\tbassCoeffs.b0,\n\t\t\tbassCoeffs.b1,\n\t\t\tbassCoeffs.b2,\n\t\t\tbassCoeffs.a1,\n\t\t\tbassCoeffs.a2,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tnew Uint32Array(biquadUniformsData.buffer)[5] = numAudioSamples;\n\t\tconst biquadUniformBuffer = device.createBuffer({\n\t\t\tsize: biquadUniformsData.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_biquad_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(biquadUniformBuffer, 0, biquadUniformsData);\n\t\tconst biquadBindGroup = device.createBindGroup({\n\t\t\tlayout: biquadPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: biquadUniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: rawAudioBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: bassAudioBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst featurePipeline = AudioSignalComputePipeline.getPipeline(device, \"AudioFeatureExtractionPipeline\", AUDIO_FEATURE_EXTRACTION_SHADER);\n\t\tconst attackMs = config$1.attackMs ?? 10;\n\t\tconst releaseMs = config$1.releaseMs ?? 120;\n\t\tconst attackAlpha = 1 - Math.exp(-1 / (attackMs / 1e3 * fps));\n\t\tconst releaseAlpha = 1 - Math.exp(-1 / (releaseMs / 1e3 * fps));\n\t\tconst beatDecayMs = config$1.beatDecayMs ?? 80;\n\t\tconst beatDecayAlpha = Math.exp(-1 / (beatDecayMs / 1e3 * fps));\n\t\tconst noiseFloorDb = config$1.noiseFloorDb ?? -48;\n\t\tconst dynamicRangeDb = config$1.dynamicRangeDb ?? 48;\n\t\tconst featureUniformsBuffer = /* @__PURE__ */ new ArrayBuffer(64);\n\t\tconst featureF32 = new Float32Array(featureUniformsBuffer);\n\t\tconst featureU32 = new Uint32Array(featureUniformsBuffer);\n\t\tfeatureF32[0] = sampleRate;\n\t\tfeatureU32[1] = numAudioSamples;\n\t\tfeatureU32[2] = numFrames;\n\t\tfeatureU32[3] = hopSize;\n\t\tfeatureU32[4] = windowSize;\n\t\tfeatureF32[5] = attackAlpha;\n\t\tfeatureF32[6] = releaseAlpha;\n\t\tfeatureF32[7] = config$1.sensitivity ?? 1;\n\t\tfeatureF32[8] = noiseFloorDb;\n\t\tfeatureF32[9] = dynamicRangeDb;\n\t\tfeatureU32[10] = getCurveTypeCode(config$1.curve);\n\t\tfeatureF32[11] = config$1.beatThreshold ?? .08;\n\t\tfeatureF32[12] = beatDecayAlpha;\n\t\tfeatureU32[13] = getExtractionModeCode(config$1.extractionMode);\n\t\tfeatureF32[14] = 0;\n\t\tfeatureF32[15] = 0;\n\t\tconst featUniformBuffer = device.createBuffer({\n\t\t\tsize: featureUniformsBuffer.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_feature_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(featUniformBuffer, 0, featureUniformsBuffer);\n\t\tconst statsBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_feature_stats_buffer\"\n\t\t});\n\t\tconst statsReadBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_feature_stats_read_buffer\"\n\t\t});\n\t\tconst featureBindGroup = device.createBindGroup({\n\t\t\tlayout: featurePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: featUniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: rawAudioBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: bassAudioBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: primaryBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: beatBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: { buffer: bassBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: { buffer: energyBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: { buffer: statsBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst textureWidth = Math.max(targetWidth, 128);\n\t\tconst signalTexture = device.createTexture({\n\t\t\tsize: [\n\t\t\t\ttextureWidth,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t],\n\t\t\tformat: \"rgba16float\",\n\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n\t\t\tlabel: \"audio_extracted_signal_texture\"\n\t\t});\n\t\tconst packPipeline = AudioSignalComputePipeline.getPipeline(device, \"AudioTexturePackPipeline\", AUDIO_SIGNAL_TO_TEXTURE_SHADER);\n\t\tconst packUniforms = new Uint32Array([\n\t\t\tnumFrames,\n\t\t\ttextureWidth,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst packUniformBuffer = device.createBuffer({\n\t\t\tsize: packUniforms.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_pack_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(packUniformBuffer, 0, packUniforms);\n\t\tconst packBindGroup = device.createBindGroup({\n\t\t\tlayout: packPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: packUniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: primaryBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: beatBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: bassBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: energyBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: signalTexture.createView()\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst encoder = device.createCommandEncoder({ label: \"audio_signal_extractor_encoder\" });\n\t\tconst pass1 = encoder.beginComputePass({ label: \"audio_biquad_pass\" });\n\t\tpass1.setPipeline(biquadPipeline);\n\t\tpass1.setBindGroup(0, biquadBindGroup);\n\t\tpass1.dispatchWorkgroups(1);\n\t\tpass1.end();\n\t\tconst pass2 = encoder.beginComputePass({ label: \"audio_feature_pass\" });\n\t\tpass2.setPipeline(featurePipeline);\n\t\tpass2.setBindGroup(0, featureBindGroup);\n\t\tpass2.dispatchWorkgroups(1);\n\t\tpass2.end();\n\t\tencoder.copyBufferToBuffer(statsBuffer, 0, statsReadBuffer, 0, 32);\n\t\tconst readbackPrimary = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_primary_readback\"\n\t\t});\n\t\tconst readbackBeat = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_beat_readback\"\n\t\t});\n\t\tconst readbackBass = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_bass_readback\"\n\t\t});\n\t\tconst readbackEnergy = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_energy_readback\"\n\t\t});\n\t\tencoder.copyBufferToBuffer(primaryBuffer, 0, readbackPrimary, 0, numFrames * 4);\n\t\tencoder.copyBufferToBuffer(beatBuffer, 0, readbackBeat, 0, numFrames * 4);\n\t\tencoder.copyBufferToBuffer(bassBuffer, 0, readbackBass, 0, numFrames * 4);\n\t\tencoder.copyBufferToBuffer(energyBuffer, 0, readbackEnergy, 0, numFrames * 4);\n\t\tconst pass3 = encoder.beginComputePass({ label: \"audio_pack_pass\" });\n\t\tpass3.setPipeline(packPipeline);\n\t\tpass3.setBindGroup(0, packBindGroup);\n\t\tpass3.dispatchWorkgroups(Math.ceil(textureWidth / 64));\n\t\tpass3.end();\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tawait Promise.all([\n\t\t\tstatsReadBuffer.mapAsync(GPUMapMode.READ),\n\t\t\treadbackPrimary.mapAsync(GPUMapMode.READ),\n\t\t\treadbackBeat.mapAsync(GPUMapMode.READ),\n\t\t\treadbackBass.mapAsync(GPUMapMode.READ),\n\t\t\treadbackEnergy.mapAsync(GPUMapMode.READ)\n\t\t]);\n\t\tconst statsArray = new Float32Array(statsReadBuffer.getMappedRange().slice(0));\n\t\tconst channelSamples = {\n\t\t\tprimary: new Float32Array(readbackPrimary.getMappedRange().slice(0)),\n\t\t\tbeat: new Float32Array(readbackBeat.getMappedRange().slice(0)),\n\t\t\tbass: new Float32Array(readbackBass.getMappedRange().slice(0)),\n\t\t\tenergy: new Float32Array(readbackEnergy.getMappedRange().slice(0))\n\t\t};\n\t\tstatsReadBuffer.unmap();\n\t\tstatsReadBuffer.destroy();\n\t\tstatsBuffer.destroy();\n\t\treadbackPrimary.unmap();\n\t\treadbackPrimary.destroy();\n\t\treadbackBeat.unmap();\n\t\treadbackBeat.destroy();\n\t\treadbackBass.unmap();\n\t\treadbackBass.destroy();\n\t\treadbackEnergy.unmap();\n\t\treadbackEnergy.destroy();\n\t\tconst stats = {\n\t\t\tprimary: {\n\t\t\t\tmin: statsArray[0],\n\t\t\t\tmax: statsArray[1]\n\t\t\t},\n\t\t\tbeat: {\n\t\t\t\tmin: statsArray[2],\n\t\t\t\tmax: statsArray[3]\n\t\t\t},\n\t\t\tbass: {\n\t\t\t\tmin: statsArray[4],\n\t\t\t\tmax: statsArray[5]\n\t\t\t},\n\t\t\tenergy: {\n\t\t\t\tmin: statsArray[6],\n\t\t\t\tmax: statsArray[7]\n\t\t\t}\n\t\t};\n\t\tbiquadUniformBuffer.destroy();\n\t\tfeatUniformBuffer.destroy();\n\t\tpackUniformBuffer.destroy();\n\t\trawAudioBuffer.destroy();\n\t\tbassAudioBuffer.destroy();\n\t\treturn {\n\t\t\tprimaryBuffer,\n\t\t\tbeatBuffer,\n\t\t\tbassBuffer,\n\t\t\tenergyBuffer,\n\t\t\ttexture: signalTexture,\n\t\t\ttextureView: signalTexture.createView(),\n\t\t\tnumFrames,\n\t\t\tdurationSec,\n\t\t\tstats,\n\t\t\tchannelSamples\n\t\t};\n\t}\n\t/**\n\t* Computes cumulative speed-ramped presentation timestamps for video pace control.\n\t*/\n\tstatic computePaceTimestamps(device, signalBuffer, numFrames, fps, baseSpeed = 1, gain = 1) {\n\t\tconst outBuffer = device.createBuffer({\n\t\t\tsize: numFrames * 4,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_pace_timestamps_buffer\"\n\t\t});\n\t\tconst pacePipeline = AudioSignalComputePipeline.getPipeline(device, \"AudioPaceIntegralPipeline\", AUDIO_PACE_INTEGRAL_SHADER);\n\t\tconst dt = 1 / fps;\n\t\tconst uniformsData = new Float32Array([\n\t\t\tbaseSpeed,\n\t\t\tgain,\n\t\t\tdt,\n\t\t\t0\n\t\t]);\n\t\tnew Uint32Array(uniformsData.buffer)[3] = numFrames;\n\t\tconst uniformBuffer = device.createBuffer({\n\t\t\tsize: uniformsData.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_pace_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(uniformBuffer, 0, uniformsData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pacePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: signalBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: outBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst encoder = device.createCommandEncoder({ label: \"audio_pace_integral_encoder\" });\n\t\tconst pass = encoder.beginComputePass({ label: \"audio_pace_pass\" });\n\t\tpass.setPipeline(pacePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(1);\n\t\tpass.end();\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tuniformBuffer.destroy();\n\t\treturn outBuffer;\n\t}\n};\n\n//#endregion\n//#region src/signals/float16.ts\n/**\n* IEEE 754 half-precision (float16) bitwise converter and encoder.\n*/\n/**\n* Converts a 32-bit floating point number to a 16-bit half-precision float bit pattern (IEEE 754).\n*/\nfunction float32ToFloat16Bits(val) {\n\tconst f = new Float32Array([val]);\n\tconst u = new Uint32Array(f.buffer)[0];\n\tconst sign = u >>> 16 & 32768;\n\tconst exp = (u >>> 23 & 255) - 127 + 15;\n\tlet mant = u & 8388607;\n\tif (exp <= 0) {\n\t\tif (exp < -10) return sign;\n\t\tmant = (mant | 8388608) >> 1 - exp;\n\t\treturn sign | mant + 4096 >> 13;\n\t} else if (exp >= 31) return sign | 31744;\n\treturn sign | exp << 10 | mant + 4096 >> 13;\n}\n/**\n* Packs a Float32Array (or array of numbers) into a Uint16Array containing IEEE 754 half-precision floats.\n* Uses native Float16Array if supported by the runtime engine, otherwise falls back to bitwise conversion.\n*/\nfunction encodeFloat32ToFloat16(f32Array) {\n\tif (typeof Float16Array !== \"undefined\") return new Uint16Array(new Float16Array(f32Array).buffer);\n\tconst len = f32Array.length;\n\tconst out = new Uint16Array(len);\n\tfor (let i = 0; i < len; i++) out[i] = float32ToFloat16Bits(f32Array[i]);\n\treturn out;\n}\n\n//#endregion\n//#region src/signals/wgsl.ts\nconst WGSL_CONSTANTS = `\\\nconst PI: f32 = ${Math.PI}f;\nconst TAU: f32 = ${Math.PI * 2}f;\nconst E: f32 = ${Math.E}f;`;\n/** Built-in parameter list prepended before user params. */\nconst BASE_PARAMS = [\n\t\"t: f32\",\n\t\"x: f32\",\n\t\"y: f32\",\n\t\"z: f32\",\n\t\"i: u32\",\n\t\"n: u32\",\n\t\"frame: u32\",\n\t\"color: vec4f\",\n\t\"t_elapsed: f32\",\n\t\"duration: f32\"\n];\nfunction buildWGSLSignalFn(config$1, nodeId) {\n\tconst name = sanitizeName(nodeId);\n\tconst outputType = config$1.fnOutputType || \"f32\";\n\tconst params = config$1.fnParams ?? [];\n\tconst customArgs = params.map((p) => `${p.name}: ${p.type}`);\n\tconst signature = `fn ${name}(${[...BASE_PARAMS, ...customArgs].join(\", \")}) -> ${outputType}`;\n\tlet bodyToCompile = config$1.fnBody ?? \"\";\n\tlet resolvedConfig = { ...config$1 };\n\tif (!config$1.baseType || config$1.baseType === \"custom\") {\n\t\tconst parsed = parseStateFromFnBody(config$1.fnBody ?? \"\", config$1);\n\t\tif (parsed.baseType) resolvedConfig = {\n\t\t\t...config$1,\n\t\t\t...parsed\n\t\t};\n\t}\n\tif (resolvedConfig.baseType && resolvedConfig.baseType !== \"custom\") bodyToCompile = generateWGSLFromConfig(resolvedConfig);\n\tconst rawBody = bodyToCompile.split(\"\\n\").map((line) => ` ${line}`).join(\"\\n\");\n\tconst { valid, validationWarning } = heuristicValidate(rawBody, outputType);\n\tlet finalBody = rawBody;\n\tif (!valid && validationWarning === \"Function body has no return statement.\") if (outputType === \"vec2f\") finalBody += \"\\n return vec2<f32>(0.0);\";\n\telse if (outputType === \"vec3f\") finalBody += \"\\n return vec3<f32>(0.0);\";\n\telse if (outputType === \"vec4f\") finalBody += \"\\n return vec4<f32>(0.0);\";\n\telse finalBody += \"\\n return 0.0;\";\n\treturn {\n\t\tname,\n\t\twgsl: [\n\t\t\tWGSL_CONSTANTS,\n\t\t\t\"\",\n\t\t\t`${signature} {`,\n\t\t\tfinalBody,\n\t\t\t`}`\n\t\t].join(\"\\n\"),\n\t\tsignature,\n\t\toutputType,\n\t\tparams,\n\t\tvalid,\n\t\tvalidationWarning\n\t};\n}\nfunction emitBounceOut(xVar, id) {\n\treturn [\n\t\t` let ${id}_n1: f32 = 7.5625;`,\n\t\t` let ${id}_d1: f32 = 2.75;`,\n\t\t` let ${id}_r1: f32 = ${id}_n1 * (${xVar}) * (${xVar});`,\n\t\t` let ${id}_x2: f32 = (${xVar}) - 1.5 / ${id}_d1;`,\n\t\t` let ${id}_r2: f32 = ${id}_n1 * ${id}_x2 * ${id}_x2 + 0.75;`,\n\t\t` let ${id}_x3: f32 = (${xVar}) - 2.25 / ${id}_d1;`,\n\t\t` let ${id}_r3: f32 = ${id}_n1 * ${id}_x3 * ${id}_x3 + 0.9375;`,\n\t\t` let ${id}_x4: f32 = (${xVar}) - 2.625 / ${id}_d1;`,\n\t\t` let ${id}_r4: f32 = ${id}_n1 * ${id}_x4 * ${id}_x4 + 0.984375;`,\n\t\t` let ${id}_s1: f32 = select(${id}_r4, ${id}_r3, (${xVar}) < 2.5 / ${id}_d1);`,\n\t\t` let ${id}_s2: f32 = select(${id}_s1, ${id}_r2, (${xVar}) < 2.0 / ${id}_d1);`,\n\t\t` let ${id}: f32 = select(${id}_s2, ${id}_r1, (${xVar}) < 1.0 / ${id}_d1);`\n\t].join(\"\\n\");\n}\nfunction emitEaseIn(family, x, id) {\n\tswitch (family) {\n\t\tcase \"linear\": return ` let ${id}: f32 = ${x};`;\n\t\tcase \"smoothstep\": return ` let ${id}: f32 = (${x}) * (${x}) * (3.0 - 2.0 * (${x}));`;\n\t\tcase \"smootherstep\": return ` let ${id}: f32 = (${x}) * (${x}) * (${x}) * ((${x}) * ((${x}) * 6.0 - 15.0) + 10.0);`;\n\t\tcase \"sine\": return ` let ${id}: f32 = 1.0 - cos((${x}) * PI * 0.5);`;\n\t\tcase \"quad\": return ` let ${id}: f32 = (${x}) * (${x});`;\n\t\tcase \"cubic\": return ` let ${id}: f32 = (${x}) * (${x}) * (${x});`;\n\t\tcase \"quart\": return ` let ${id}: f32 = pow(${x}, 4.0);`;\n\t\tcase \"quint\": return ` let ${id}: f32 = pow(${x}, 5.0);`;\n\t\tcase \"expo\": return ` let ${id}: f32 = select(pow(2.0, 10.0 * (${x}) - 10.0), 0.0, (${x}) <= 0.0001);`;\n\t\tcase \"circ\": return ` let ${id}: f32 = 1.0 - sqrt(clamp(1.0 - (${x}) * (${x}), 0.0, 1.0));`;\n\t\tcase \"back\": return [\n\t\t\t` let ${id}_c1: f32 = 1.70158;`,\n\t\t\t` let ${id}_c3: f32 = ${id}_c1 + 1.0;`,\n\t\t\t` let ${id}: f32 = ${id}_c3 * (${x}) * (${x}) * (${x}) - ${id}_c1 * (${x}) * (${x});`\n\t\t].join(\"\\n\");\n\t\tcase \"elastic\": return [\n\t\t\t` let ${id}_c4: f32 = (2.0 * PI) / 3.0;`,\n\t\t\t` let ${id}_raw: f32 = -pow(2.0, 10.0 * (${x}) - 10.0) * sin(((${x}) * 10.0 - 10.75) * ${id}_c4);`,\n\t\t\t` let ${id}_lo: f32 = select(${id}_raw, 0.0, (${x}) <= 0.0001);`,\n\t\t\t` let ${id}: f32 = select(${id}_lo, 1.0, (${x}) >= 0.9999);`\n\t\t].join(\"\\n\");\n\t\tcase \"bounce\": {\n\t\t\tconst bx = `${id}_bx`;\n\t\t\tconst bo = `${id}_bo`;\n\t\t\treturn [\n\t\t\t\t` let ${bx}: f32 = 1.0 - (${x});`,\n\t\t\t\temitBounceOut(bx, bo),\n\t\t\t\t` let ${id}: f32 = 1.0 - ${bo};`\n\t\t\t].join(\"\\n\");\n\t\t}\n\t}\n}\nfunction emitEase(family, mode, xExpr, id) {\n\tif (family === \"linear\" || family === \"smoothstep\" || family === \"smootherstep\") return emitEaseIn(family, xExpr, id);\n\tif (mode === \"in\") return emitEaseIn(family, xExpr, id);\n\tif (mode === \"out\") {\n\t\tconst srcId = `${id}_src`;\n\t\treturn [emitEaseIn(family, `1.0 - (${xExpr})`, srcId), ` let ${id}: f32 = 1.0 - ${srcId};`].join(\"\\n\");\n\t}\n\tconst inId = `${id}_in`;\n\tconst outId = `${id}_out`;\n\treturn [\n\t\temitEaseIn(family, `(${xExpr}) * 2.0`, inId),\n\t\temitEaseIn(family, `2.0 - (${xExpr}) * 2.0`, outId),\n\t\t` let ${id}: f32 = select(1.0 - ${outId} * 0.5, ${inId} * 0.5, (${xExpr}) < 0.5);`\n\t].join(\"\\n\");\n}\nfunction generateWGSLFromConfig(config$1) {\n\tconst parts = [];\n\tconst baseEnabled = config$1.baseEnabled ?? true;\n\tconst fmEnabled = config$1.fmEnabled ?? false;\n\tif (baseEnabled && fmEnabled) {\n\t\tconst fmAmp = (config$1.fmAmplitude ?? 1).toFixed(5);\n\t\tconst fmFreq = (config$1.fmFrequency ?? .5).toFixed(5);\n\t\tparts.push(\" // Frequency Modulation\");\n\t\tparts.push(` let modulator = sin(t * ${fmFreq} * TAU) * ${fmAmp};`);\n\t\tparts.push(\" let t_mod = t + modulator;\");\n\t} else parts.push(\" let t_mod = t;\");\n\tparts.push(\" // Base Waveform\");\n\tif (!baseEnabled) parts.push(\" var val: f32 = 0.0;\");\n\telse {\n\t\tconst baseType = config$1.baseType ?? \"sine\";\n\t\tif (baseType === \"noise_smooth\") {\n\t\t\tparts.push(\" let noise_t = t_mod * u.frequency + u.phase;\");\n\t\t\tparts.push(\" let noise_i = floor(noise_t);\");\n\t\t\tparts.push(\" let noise_f = fract(noise_t);\");\n\t\t\tparts.push(\" let noise_u = noise_f * noise_f * (3.0 - 2.0 * noise_f);\");\n\t\t\tparts.push(\" let n0 = fract(sin(noise_i * 12.9898) * 43758.5453);\");\n\t\t\tparts.push(\" let n1 = fract(sin((noise_i + 1.0) * 12.9898) * 43758.5453);\");\n\t\t\tparts.push(\" let noise_val = mix(n0, n1, noise_u) * 2.0 - 1.0;\");\n\t\t} else if (baseType === \"noise_white\") parts.push(\" let noise_val = fract(sin(t_mod * 12.9898 + u.phase) * 43758.5453) * 2.0 - 1.0;\");\n\t\telse if (baseType === \"pulse\") {\n\t\t\tparts.push(\" let pulse_duty = select(clamp(u.phase, 0.01, 0.99), 0.5, u.phase == 0.0);\");\n\t\t\tparts.push(\" let pulse_val = select(-1.0, 1.0, fract(t_mod * u.frequency) < pulse_duty);\");\n\t\t} else if (baseType === \"bounce\") parts.push(\" let bounce_val = abs(sin(t_mod * u.frequency * PI + u.phase));\");\n\t\telse if (baseType === \"staircase\") parts.push(\" let stair_val = floor(fract(t_mod * u.frequency + u.phase / TAU) * 8.0) / 7.0 * 2.0 - 1.0;\");\n\t\tlet baseExpr = \"\";\n\t\tswitch (baseType) {\n\t\t\tcase \"sine\":\n\t\t\t\tbaseExpr = \"u.amplitude * sin(t_mod * u.frequency * TAU + u.phase) + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"triangle\":\n\t\t\t\tbaseExpr = \"u.amplitude * (2.0 * abs(2.0 * fract(t_mod * u.frequency + u.phase / TAU) - 1.0) - 1.0) + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"sawtooth\":\n\t\t\t\tbaseExpr = \"u.amplitude * (2.0 * (t_mod * u.frequency + u.phase / TAU - floor(t_mod * u.frequency + u.phase / TAU + 0.5))) + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"square\":\n\t\t\t\tbaseExpr = \"u.amplitude * sign(sin(t_mod * u.frequency * TAU + u.phase)) + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"constant\":\n\t\t\t\tbaseExpr = \"u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"noise_smooth\":\n\t\t\t\tbaseExpr = \"u.amplitude * noise_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"noise_white\":\n\t\t\t\tbaseExpr = \"u.amplitude * noise_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"pulse\":\n\t\t\t\tbaseExpr = \"u.amplitude * pulse_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"bounce\":\n\t\t\t\tbaseExpr = \"u.amplitude * bounce_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tcase \"staircase\":\n\t\t\t\tbaseExpr = \"u.amplitude * stair_val + u.offset\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbaseExpr = \"u.amplitude * sin(t_mod * u.frequency * TAU + u.phase) + u.offset\";\n\t\t\t\tbreak;\n\t\t}\n\t\tparts.push(` var val: f32 = ${baseExpr};`);\n\t}\n\tconst envelopeEnabled = config$1.envelopeEnabled ?? false;\n\tconst gateEnabled = config$1.gateEnabled ?? false;\n\tif (envelopeEnabled) {\n\t\tparts.push(\" // Time Envelope\");\n\t\tconst gateStartFrame = config$1.gateStartFrame ?? 0;\n\t\tconst gateEndFrame = config$1.gateEndFrame ?? 100;\n\t\tif ((config$1.envelopeUseFrame ?? true) && gateEnabled) parts.push(` let progress = select(0.0, clamp((f32(frame) - ${gateStartFrame.toFixed(1)}) / (${gateEndFrame.toFixed(1)} - ${gateStartFrame.toFixed(1)}), 0.0, 1.0), ${gateEndFrame}u > ${gateStartFrame}u);`);\n\t\telse parts.push(\" let progress = select(0.0, clamp(t_elapsed / duration, 0.0, 1.0), duration > 0.0);\");\n\t\tconst family = config$1.envelopeFamily ?? \"sine\";\n\t\tconst mode = config$1.envelopeMode ?? \"in_out\";\n\t\tconst pattern = config$1.envelopePattern ?? \"ramp_up\";\n\t\tconst cycles = config$1.envelopeCycles ?? 2;\n\t\tif (pattern === \"bell\" || pattern === \"loop\") {\n\t\t\tif (pattern === \"loop\") {\n\t\t\t\tconst loopCount = Math.max(1, cycles).toFixed(1);\n\t\t\t\tparts.push(` let env_loop: f32 = fract(progress * ${loopCount});`);\n\t\t\t\tparts.push(\" let env_folded: f32 = 1.0 - abs(env_loop * 2.0 - 1.0);\");\n\t\t\t} else parts.push(\" let env_folded: f32 = 1.0 - abs(progress * 2.0 - 1.0);\");\n\t\t\tparts.push(emitEase(family, mode, \"env_folded\", \"env_eased\"));\n\t\t\tparts.push(\" let env_factor: f32 = env_eased;\");\n\t\t} else {\n\t\t\tparts.push(emitEase(family, mode, \"progress\", \"env_eased\"));\n\t\t\tparts.push(pattern === \"ramp_up\" ? \" let env_factor: f32 = env_eased;\" : \" let env_factor: f32 = 1.0 - env_eased;\");\n\t\t}\n\t\tparts.push(\" val = mix(u.offset - u.amplitude, val, env_factor);\");\n\t}\n\tif (gateEnabled) {\n\t\tconst gateStartFrame = config$1.gateStartFrame ?? 0;\n\t\tconst gateEndFrame = config$1.gateEndFrame ?? 100;\n\t\tconst gateIdleValue = config$1.gateIdleValue ?? 0;\n\t\tparts.push(\" // Time Gate\");\n\t\tparts.push(` if (frame < ${gateStartFrame}u || frame > ${gateEndFrame}u) {`);\n\t\tparts.push(` val = ${gateIdleValue.toFixed(5)};`);\n\t\tparts.push(\" }\");\n\t}\n\tparts.push(\"\");\n\tparts.push(\" return val;\");\n\treturn parts.join(\"\\n\");\n}\nconst LEGACY_ENVELOPE_MAP = {\n\tfade_in: {\n\t\tfamily: \"linear\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_up\"\n\t},\n\tfade_out: {\n\t\tfamily: \"linear\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_down\"\n\t},\n\tping_pong: {\n\t\tfamily: \"linear\",\n\t\tmode: \"in\",\n\t\tpattern: \"bell\"\n\t},\n\texpo_decay: {\n\t\tfamily: \"expo\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_down\"\n\t},\n\tsmooth_in: {\n\t\tfamily: \"smoothstep\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_up\"\n\t},\n\tsmooth_out: {\n\t\tfamily: \"smoothstep\",\n\t\tmode: \"in\",\n\t\tpattern: \"ramp_down\"\n\t},\n\tsine_bell: {\n\t\tfamily: \"sine\",\n\t\tmode: \"in\",\n\t\tpattern: \"bell\"\n\t},\n\tspring: {\n\t\tfamily: \"elastic\",\n\t\tmode: \"out\",\n\t\tpattern: \"ramp_up\"\n\t}\n};\nfunction migrateLegacyEnvelope(legacyType) {\n\tif (legacyType && legacyType in LEGACY_ENVELOPE_MAP) return LEGACY_ENVELOPE_MAP[legacyType];\n\treturn {\n\t\tfamily: \"sine\",\n\t\tmode: \"in_out\",\n\t\tpattern: \"ramp_up\"\n\t};\n}\nfunction parseStateFromFnBody(fnBody, config$1) {\n\tconst match = fnBody.match(/\\/\\* SIGNAL_BUILDER_STATE:\\s*([\\s\\S]*?)\\s*\\*\\//);\n\tif (match) try {\n\t\tconst parsed = JSON.parse(match[1]);\n\t\tconst envIsV2 = !!parsed.envelope?.family;\n\t\tconst migrated = envIsV2 ? {\n\t\t\tfamily: parsed.envelope.family,\n\t\t\tmode: parsed.envelope.mode ?? \"in\",\n\t\t\tpattern: parsed.envelope.pattern ?? \"ramp_up\"\n\t\t} : migrateLegacyEnvelope(parsed.envelope?.type);\n\t\treturn {\n\t\t\tbaseEnabled: parsed.base?.enabled ?? true,\n\t\t\tbaseType: parsed.base?.type ?? \"sine\",\n\t\t\tfmEnabled: parsed.fm?.enabled ?? false,\n\t\t\tfmAmplitude: config$1?.fmAmplitude ?? parsed.fm?.amplitude ?? 1,\n\t\t\tfmFrequency: config$1?.fmFrequency ?? parsed.fm?.frequency ?? .5,\n\t\t\tenvelopeEnabled: parsed.envelope?.enabled ?? false,\n\t\t\tenvelopeFamily: migrated.family,\n\t\t\tenvelopeMode: migrated.mode,\n\t\t\tenvelopePattern: migrated.pattern,\n\t\t\tenvelopeCycles: envIsV2 ? parsed.envelope?.cycles ?? 2 : 2,\n\t\t\tenvelopeUseFrame: config$1?.envelopeUseFrame ?? parsed.envelope?.useFrame ?? true,\n\t\t\tgateEnabled: config$1?.gateEnabled ?? parsed.gate?.enabled ?? false,\n\t\t\tgateStartFrame: config$1?.gateStartFrame ?? parsed.gate?.startFrame ?? 0,\n\t\t\tgateEndFrame: config$1?.gateEndFrame ?? parsed.gate?.endFrame ?? 100,\n\t\t\tgateIdleValue: config$1?.gateIdleValue ?? parsed.gate?.idleValue ?? 0\n\t\t};\n\t} catch (e) {}\n\treturn {};\n}\nfunction buildUniformBufferLayout(fn, group = 0, binding = 0) {\n\tif (fn.params.length === 0) return null;\n\tconst structName = `SignalParams_${fn.name}`;\n\treturn {\n\t\tstructWGSL: `struct ${structName} {\\n${fn.params.map((p) => ` ${p.name}: ${p.type},`).join(\"\\n\")}\\n}`,\n\t\tbindingWGSL: `@group(${group}) @binding(${binding}) var<uniform> signal_params: ${structName};`,\n\t\tbyteSize: fn.params.reduce((acc, p) => {\n\t\t\treturn acc + ({\n\t\t\t\tf32: 4,\n\t\t\t\ti32: 4,\n\t\t\t\tu32: 4,\n\t\t\t\tvec2f: 8,\n\t\t\t\tvec3f: 16,\n\t\t\t\tvec4f: 16\n\t\t\t}[p.type] ?? 4);\n\t\t}, 0)\n\t};\n}\nfunction sanitizeName(nodeId) {\n\treturn `signal_${nodeId.replace(/[^a-zA-Z0-9]/g, \"_\")}`;\n}\nfunction heuristicValidate(body, outputType) {\n\tif (!/\\breturn\\b/.test(body)) return {\n\t\tvalid: false,\n\t\tvalidationWarning: \"Function body has no return statement.\"\n\t};\n\tconst vecReturn = /\\breturn\\s+vec(\\d)f?\\(/.exec(body);\n\tif (vecReturn) {\n\t\tconst dims = parseInt(vecReturn[1], 10);\n\t\tif (outputType === \"f32\") return {\n\t\t\tvalid: false,\n\t\t\tvalidationWarning: `Returning vec${dims}f but output type is f32.`\n\t\t};\n\t}\n\treturn { valid: true };\n}\n\n//#endregion\n//#region src/signals/signal-registry.ts\nfunction isSamplesArray(val) {\n\treturn Array.isArray(val) || ArrayBuffer.isView(val) && !(val instanceof DataView);\n}\nvar SignalRegistry = class {\n\tdeviceCache = /* @__PURE__ */ new WeakMap();\n\tstatsMap = /* @__PURE__ */ new Map();\n\tstatsListeners = /* @__PURE__ */ new Map();\n\tsetStats(nodeId, stats) {\n\t\tthis.statsMap.set(nodeId, stats);\n\t\tconst listeners = this.statsListeners.get(nodeId);\n\t\tif (listeners) for (const listener of listeners) listener(stats);\n\t}\n\tgetStats(nodeId) {\n\t\treturn this.statsMap.get(nodeId);\n\t}\n\tonStats(nodeId, listener) {\n\t\tlet set = this.statsListeners.get(nodeId);\n\t\tif (!set) {\n\t\t\tset = /* @__PURE__ */ new Set();\n\t\t\tthis.statsListeners.set(nodeId, set);\n\t\t}\n\t\tset.add(listener);\n\t\tconst current = this.statsMap.get(nodeId);\n\t\tif (current) listener(current);\n\t\treturn () => {\n\t\t\tset?.delete(listener);\n\t\t\tif (set?.size === 0) this.statsListeners.delete(nodeId);\n\t\t};\n\t}\n\t/**\n\t* Recursively computes a deterministic cache fingerprint for a signal descriptor\n\t* and its upstream dependencies (signalA, signalB, and upstream calculated stats).\n\t*/\n\tcomputeSignalFingerprint(sd, depth = 0, visited = /* @__PURE__ */ new Set()) {\n\t\tif (sd === null || sd === void 0) return \"\";\n\t\tif (typeof sd === \"number\") return `num:${sd}`;\n\t\tif (typeof sd === \"string\") return `str:${sd}`;\n\t\tif (typeof sd === \"boolean\") return `bool:${sd}`;\n\t\tif (typeof sd !== \"object\") return \"\";\n\t\tif (visited.has(sd) || depth > 8) {\n\t\t\tconst sObj = sd;\n\t\t\treturn `ref:${sObj.nodeId || sObj.virtualMedia?.operation?.nodeId || \"seen\"}`;\n\t\t}\n\t\tvisited.add(sd);\n\t\tconst s = sd;\n\t\tconst rawSamples = s.samples ?? s.data?.samples;\n\t\tconst nodeId = (typeof s.nodeId === \"string\" ? s.nodeId : void 0) || (typeof s.virtualMedia?.operation?.nodeId === \"string\" ? s.virtualMedia.operation?.nodeId : void 0);\n\t\tlet upstreamStats;\n\t\tif (depth > 0 && nodeId) upstreamStats = this.getStats(nodeId);\n\t\tconst cfg = s.signalConfig;\n\t\tconst operation = s.operation ?? cfg?.operation ?? s.config?.operation ?? s.data?.operation;\n\t\tconst parts = {\n\t\t\ttype: s.type,\n\t\t\top: s.op,\n\t\t\toperation,\n\t\t\tbValue: s.bValue ?? cfg?.bValue ?? s.config?.bValue ?? s.data?.bValue,\n\t\t\tvalue: s.value,\n\t\t\tinMin: s.inMin ?? cfg?.inMin,\n\t\t\tinMax: s.inMax ?? cfg?.inMax,\n\t\t\toutMin: s.outMin ?? cfg?.outMin,\n\t\t\toutMax: s.outMax ?? cfg?.outMax,\n\t\t\tclampMin: s.clampMin ?? cfg?.clampMin,\n\t\t\tclampMax: s.clampMax ?? cfg?.clampMax,\n\t\t\texponent: s.exponent ?? cfg?.exponent,\n\t\t\tedge0: s.edge0 ?? cfg?.edge0,\n\t\t\tedge1: s.edge1 ?? cfg?.edge1,\n\t\t\tcustomWGSL: s.customWGSL || s.fnBody || s.wgsl || cfg?.customWGSL || cfg?.fnBody,\n\t\t\tamplitude: s.amplitude,\n\t\t\tfrequency: s.frequency,\n\t\t\tphase: s.phase,\n\t\t\toffset: s.offset,\n\t\t\tfnParams: s.fnParams,\n\t\t\tsourceUrl: s.sourceUrl ?? s.url,\n\t\t\textractionMode: s.extractionMode,\n\t\t\tchannel: s.channel,\n\t\t\tnodeId,\n\t\t\tsamplesLen: rawSamples?.length,\n\t\t\tsample0: rawSamples?.[0],\n\t\t\tsampleMid: rawSamples && rawSamples.length > 1 ? rawSamples[Math.floor(rawSamples.length / 2)] : void 0,\n\t\t\tsampleLast: rawSamples && rawSamples.length > 2 ? rawSamples[rawSamples.length - 1] : void 0,\n\t\t\tupstreamStats: upstreamStats ? `${upstreamStats.min}:${upstreamStats.max}` : void 0,\n\t\t\tsigA: s.signalA ? this.computeSignalFingerprint(s.signalA, depth + 1, visited) : void 0,\n\t\t\tsigB: s.signalB ? this.computeSignalFingerprint(s.signalB, depth + 1, visited) : void 0\n\t\t};\n\t\treturn JSON.stringify(parts);\n\t}\n\tgetDeviceResources(device) {\n\t\tlet res = this.deviceCache.get(device);\n\t\tif (!res) {\n\t\t\tres = {\n\t\t\t\tresources: /* @__PURE__ */ new Map(),\n\t\t\t\tmasterAudioTextures: /* @__PURE__ */ new Map(),\n\t\t\t\tdummy1x1TextureView: null,\n\t\t\t\tdummyBuffer: null,\n\t\t\t\tpipelineCache: /* @__PURE__ */ new Map(),\n\t\t\t\tdefaultSampler: null\n\t\t\t};\n\t\t\tthis.deviceCache.set(device, res);\n\t\t}\n\t\treturn res;\n\t}\n\tgetSampler(device) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tif (dr.defaultSampler) return dr.defaultSampler;\n\t\tdr.defaultSampler = device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t});\n\t\treturn dr.defaultSampler;\n\t}\n\t/**\n\t* Clears frame resources. Typically called on renderId reset or context destruction.\n\t*/\n\tclear(renderId, device) {\n\t\tif (!device) return;\n\t\tconst dr = this.deviceCache.get(device);\n\t\tif (!dr) return;\n\t\tconst prefix = `${renderId}:`;\n\t\tfor (const [key, resource] of dr.resources.entries()) if (key.startsWith(prefix)) {\n\t\t\tresource.buffer?.destroy();\n\t\t\tresource.texture?.destroy();\n\t\t\tresource.uniformBuffer?.destroy();\n\t\t\tdr.resources.delete(key);\n\t\t}\n\t\tfor (const [key, entry] of dr.masterAudioTextures.entries()) if (key.startsWith(prefix)) {\n\t\t\tentry.texture.destroy();\n\t\t\tdr.masterAudioTextures.delete(key);\n\t\t}\n\t}\n\tgetDummy1x1TextureView(device) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tif (dr.dummy1x1TextureView) return dr.dummy1x1TextureView;\n\t\tconst texture = device.createTexture({\n\t\t\tsize: [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t],\n\t\t\tformat: \"rgba16float\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n\t\t\tlabel: \"dummy_1x1_signal_texture\"\n\t\t});\n\t\tdevice.queue.writeTexture({ texture }, new Uint16Array([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t15360\n\t\t]), {\n\t\t\tbytesPerRow: 8,\n\t\t\trowsPerImage: 1\n\t\t}, [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]);\n\t\tdr.dummy1x1TextureView = texture.createView();\n\t\treturn dr.dummy1x1TextureView;\n\t}\n\tgetDummyBuffer(device) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tif (dr.dummyBuffer) return dr.dummyBuffer;\n\t\tdr.dummyBuffer = device.createBuffer({\n\t\t\tsize: 256,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"dummy_signal_buffer\"\n\t\t});\n\t\treturn dr.dummyBuffer;\n\t}\n\tregisterBuffer(device, nodeId, buffer, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst existing = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tconst entry = {\n\t\t\t...existing,\n\t\t\ttype: existing?.texture ? \"combined\" : \"1d-buffer\",\n\t\t\tbuffer,\n\t\t\tlastProcessedFrame: -1,\n\t\t\tisExternal: true\n\t\t};\n\t\tdr.resources.set(key, entry);\n\t\tif (renderId) dr.resources.set(`global:${nodeId}`, entry);\n\t}\n\tregisterTexture(device, nodeId, texture, textureView, renderId, duration$2) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst existing = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tconst entry = {\n\t\t\t...existing,\n\t\t\ttype: existing?.buffer ? \"combined\" : \"2d-texture\",\n\t\t\ttexture,\n\t\t\ttextureView,\n\t\t\tlastProcessedFrame: -1,\n\t\t\tisExternal: true,\n\t\t\tduration: duration$2 !== void 0 ? duration$2 : existing?.duration\n\t\t};\n\t\tdr.resources.set(key, entry);\n\t\tif (renderId) dr.resources.set(`global:${nodeId}`, entry);\n\t}\n\tgetMasterTextureView(device, nodeId, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\treturn dr.masterAudioTextures.get(key)?.textureView ?? dr.masterAudioTextures.get(`global:${nodeId}`)?.textureView ?? dr.masterAudioTextures.get(`${renderId ?? \"global\"}:${baseId}`)?.textureView ?? dr.masterAudioTextures.get(`global:${baseId}`)?.textureView ?? dr.resources.get(key)?.textureView ?? dr.resources.get(`global:${nodeId}`)?.textureView ?? dr.resources.get(`${renderId ?? \"global\"}:${baseId}`)?.textureView ?? dr.resources.get(`global:${baseId}`)?.textureView;\n\t}\n\tgetMasterTexture(device, nodeId, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\treturn dr.masterAudioTextures.get(key)?.texture ?? dr.masterAudioTextures.get(`global:${nodeId}`)?.texture ?? dr.masterAudioTextures.get(`${renderId ?? \"global\"}:${baseId}`)?.texture ?? dr.masterAudioTextures.get(`global:${baseId}`)?.texture ?? dr.resources.get(key)?.texture ?? dr.resources.get(`global:${nodeId}`)?.texture ?? dr.resources.get(`${renderId ?? \"global\"}:${baseId}`)?.texture ?? dr.resources.get(`global:${baseId}`)?.texture;\n\t}\n\tchannelSamplesMap = /* @__PURE__ */ new Map();\n\tsetChannelSamples(nodeId, samples, renderId) {\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\tthis.channelSamplesMap.set(key, samples);\n\t\tthis.channelSamplesMap.set(`global:${nodeId}`, samples);\n\t\tif (baseId !== nodeId) {\n\t\t\tthis.channelSamplesMap.set(`${renderId ?? \"global\"}:${baseId}`, samples);\n\t\t\tthis.channelSamplesMap.set(`global:${baseId}`, samples);\n\t\t}\n\t}\n\tgetChannelSamples(nodeId, channel = \"primary\", renderId) {\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\tconst entry = this.channelSamplesMap.get(key) ?? this.channelSamplesMap.get(`global:${nodeId}`) ?? this.channelSamplesMap.get(`${renderId ?? \"global\"}:${baseId}`) ?? this.channelSamplesMap.get(`global:${baseId}`);\n\t\tif (!entry) return void 0;\n\t\treturn entry[channel] ?? entry.primary;\n\t}\n\tgetDuration(device, nodeId, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst res = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tif (res?.duration !== void 0) return res.duration;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\treturn (dr.masterAudioTextures.get(key) ?? dr.masterAudioTextures.get(`global:${nodeId}`) ?? dr.masterAudioTextures.get(`${renderId ?? \"global\"}:${baseId}`) ?? dr.masterAudioTextures.get(`global:${baseId}`))?.durationSec;\n\t}\n\textractionPromises = /* @__PURE__ */ new Map();\n\thas(device, nodeId, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst baseId = nodeId.replace(/_(beat|bass|energy)$/, \"\");\n\t\treturn dr.resources.has(key) || dr.resources.has(`global:${nodeId}`) || dr.masterAudioTextures.has(key) || dr.masterAudioTextures.has(`global:${nodeId}`) || dr.masterAudioTextures.has(`${renderId ?? \"global\"}:${baseId}`) || dr.masterAudioTextures.has(`global:${baseId}`);\n\t}\n\t/**\n\t* Recursively scans a signal descriptor (and upstream signalA/signalB trees)\n\t* for any audio sources and ensures they have been decoded and extracted.\n\t*/\n\tasync ensureAudioSourcesExtracted(device, sd, fps = 24, renderId, visited = /* @__PURE__ */ new Set()) {\n\t\tif (!sd || typeof sd !== \"object\" || visited.has(sd)) return;\n\t\tvisited.add(sd);\n\t\tconst s = sd;\n\t\tif (s.signalA) await this.ensureAudioSourcesExtracted(device, s.signalA, fps, renderId, visited);\n\t\tif (s.signalB && typeof s.signalB === \"object\") await this.ensureAudioSourcesExtracted(device, s.signalB, fps, renderId, visited);\n\t\tif (Boolean(s.extractionMode || s.op === \"AudioSignalExtractor\" || s.virtualMedia?.operation?.op === \"AudioSignalExtractor\")) {\n\t\t\tlet sourceUrl = s.sourceUrl || s.virtualMedia?.operation?.sourceUrl;\n\t\t\tif (!sourceUrl && s.virtualMedia) {\n\t\t\t\tconst vm = s.virtualMedia;\n\t\t\t\tsourceUrl = vm.operation?.sourceUrl || vm.operation?.url || vm.children?.[0]?.operation?.sourceUrl || vm.children?.[0]?.operation?.url;\n\t\t\t}\n\t\t\tconst targetId = s.nodeId || s.virtualMedia?.operation?.nodeId;\n\t\t\tif (sourceUrl && targetId) await this.extractFromAudioSource(device, sourceUrl, s, targetId, fps, renderId);\n\t\t}\n\t}\n\tasync extractFromAudioSource(device, sourceUrl, config$1 = {}, nodeId, fps = 24, renderId) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tconst configFingerprint = JSON.stringify({\n\t\t\tsourceUrl,\n\t\t\tmode: config$1.extractionMode,\n\t\t\tsens: config$1.sensitivity,\n\t\t\tatt: config$1.attackMs,\n\t\t\trel: config$1.releaseMs,\n\t\t\tsmooth: config$1.smoothing,\n\t\t\tcurve: config$1.curve,\n\t\t\tbeatThresh: config$1.beatThreshold,\n\t\t\tnoiseFloor: config$1.noiseFloorDb,\n\t\t\tdynRange: config$1.dynamicRangeDb,\n\t\t\tbeatDecay: config$1.beatDecayMs,\n\t\t\tfps\n\t\t});\n\t\tif ((dr.masterAudioTextures.get(key) ?? dr.masterAudioTextures.get(`global:${nodeId}`))?.lastFingerprint === configFingerprint) return;\n\t\tif (this.extractionPromises.has(key)) {\n\t\t\tawait this.extractionPromises.get(key);\n\t\t\treturn;\n\t\t}\n\t\tconst promise = (async () => {\n\t\t\ttry {\n\t\t\t\tlet channels = [];\n\t\t\t\tlet sampleRate = 44100;\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\tconst AudioCtx = window.AudioContext || window.webkitAudioContext;\n\t\t\t\t\tif (AudioCtx) {\n\t\t\t\t\t\tlet fetchUrl = sourceUrl;\n\t\t\t\t\t\tif (fetchUrl.startsWith(\"file://\")) fetchUrl = fetchUrl.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t\tif (fetchUrl.startsWith(\"/\") && !fetchUrl.startsWith(\"/@fs/\") && !fetchUrl.startsWith(\"/api/\")) fetchUrl = `/@fs${fetchUrl}`;\n\t\t\t\t\t\tconst ctx = new AudioCtx();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst res = await fetch(fetchUrl);\n\t\t\t\t\t\t\tif (!res.ok) throw new Error(`HTTP ${res.status}`);\n\t\t\t\t\t\t\tconst ab = await res.arrayBuffer();\n\t\t\t\t\t\t\tconst decoded = await ctx.decodeAudioData(ab);\n\t\t\t\t\t\t\tsampleRate = decoded.sampleRate;\n\t\t\t\t\t\t\tfor (let c = 0; c < decoded.numberOfChannels; c++) channels.push(new Float32Array(decoded.getChannelData(c)));\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tctx.close();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else try {\n\t\t\t\t\tconst fs$1 = await import(\"node:fs\");\n\t\t\t\t\tconst cleanPath = sourceUrl.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\tif (fs$1.existsSync(cleanPath)) {\n\t\t\t\t\t\tconst buf = fs$1.readFileSync(cleanPath);\n\t\t\t\t\t\tconst numChannels = buf.readUInt16LE(22);\n\t\t\t\t\t\tsampleRate = buf.readUInt32LE(24);\n\t\t\t\t\t\tconst bitsPerSample = buf.readUInt16LE(34);\n\t\t\t\t\t\tlet offset = 12;\n\t\t\t\t\t\twhile (offset < buf.length - 8) {\n\t\t\t\t\t\t\tconst id = buf.toString(\"ascii\", offset, offset + 4);\n\t\t\t\t\t\t\tconst size = buf.readUInt32LE(offset + 4);\n\t\t\t\t\t\t\tif (id === \"data\") {\n\t\t\t\t\t\t\t\toffset += 8;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toffset += 8 + size;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst bytesPerSample = Math.max(1, Math.floor(bitsPerSample / 8));\n\t\t\t\t\t\tconst totalFrames = Math.floor((buf.length - offset) / (numChannels * bytesPerSample));\n\t\t\t\t\t\tchannels = [];\n\t\t\t\t\t\tfor (let c = 0; c < numChannels; c++) channels.push(new Float32Array(totalFrames));\n\t\t\t\t\t\tif (bitsPerSample === 16) for (let i = 0; i < totalFrames; i++) for (let c = 0; c < numChannels; c++) {\n\t\t\t\t\t\t\tconst sampleOffset = offset + (i * numChannels + c) * 2;\n\t\t\t\t\t\t\tif (sampleOffset + 2 <= buf.length) channels[c][i] = buf.readInt16LE(sampleOffset) / 32768;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (bitsPerSample === 32) for (let i = 0; i < totalFrames; i++) for (let c = 0; c < numChannels; c++) {\n\t\t\t\t\t\t\tconst sampleOffset = offset + (i * numChannels + c) * 4;\n\t\t\t\t\t\t\tif (sampleOffset + 4 <= buf.length) channels[c][i] = buf.readFloatLE(sampleOffset);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (_) {}\n\t\t\t\tif (channels.length === 0 || channels[0].length === 0) return;\n\t\t\t\tconst durationSec = channels[0].length / sampleRate;\n\t\t\t\tconst signals = await AudioSignalComputePipeline.extractFeatures(device, channels, sampleRate, fps, config$1, 512);\n\t\t\t\tconst targetNodeIds = /* @__PURE__ */ new Set();\n\t\t\t\tif (nodeId) targetNodeIds.add(nodeId);\n\t\t\t\tconst cfgNodeId = config$1?.nodeId;\n\t\t\t\tif (cfgNodeId) targetNodeIds.add(cfgNodeId);\n\t\t\t\tfor (const id of targetNodeIds) {\n\t\t\t\t\tconst baseId = id.replace(/_(beat|bass|energy)$/, \"\");\n\t\t\t\t\tconst entry = {\n\t\t\t\t\t\ttexture: signals.texture,\n\t\t\t\t\t\ttextureView: signals.textureView,\n\t\t\t\t\t\tdurationSec,\n\t\t\t\t\t\tstats: signals.stats.primary,\n\t\t\t\t\t\tlastFingerprint: configFingerprint\n\t\t\t\t\t};\n\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${baseId}`, entry);\n\t\t\t\t\tdr.masterAudioTextures.set(`global:${baseId}`, entry);\n\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${baseId}_beat`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.beat\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`global:${baseId}_beat`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.beat\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${baseId}_bass`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.bass\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`global:${baseId}_bass`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.bass\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${baseId}_energy`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.energy\n\t\t\t\t\t});\n\t\t\t\t\tdr.masterAudioTextures.set(`global:${baseId}_energy`, {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstats: signals.stats.energy\n\t\t\t\t\t});\n\t\t\t\t\tif (id !== baseId) {\n\t\t\t\t\t\tdr.masterAudioTextures.set(`${renderId ?? \"global\"}:${id}`, entry);\n\t\t\t\t\t\tdr.masterAudioTextures.set(`global:${id}`, entry);\n\t\t\t\t\t}\n\t\t\t\t\tthis.registerBuffer(device, baseId, signals.primaryBuffer, renderId);\n\t\t\t\t\tthis.setStats(baseId, signals.stats.primary);\n\t\t\t\t\tthis.registerBuffer(device, `${baseId}_beat`, signals.beatBuffer, renderId);\n\t\t\t\t\tthis.setStats(`${baseId}_beat`, signals.stats.beat);\n\t\t\t\t\tthis.registerBuffer(device, `${baseId}_bass`, signals.bassBuffer, renderId);\n\t\t\t\t\tthis.setStats(`${baseId}_bass`, signals.stats.bass);\n\t\t\t\t\tthis.registerBuffer(device, `${baseId}_energy`, signals.energyBuffer, renderId);\n\t\t\t\t\tthis.setStats(`${baseId}_energy`, signals.stats.energy);\n\t\t\t\t\tif (signals.channelSamples) this.setChannelSamples(baseId, signals.channelSamples, renderId);\n\t\t\t\t}\n\t\t\t\tconst updatedRes = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\t\t\tif (updatedRes) updatedRes.lastFingerprint = configFingerprint;\n\t\t\t} catch (err) {\n\t\t\t\tconsole.warn(`[SignalRegistry] Failed to extract audio signal from ${sourceUrl}:`, err);\n\t\t\t} finally {\n\t\t\t\tthis.extractionPromises.delete(key);\n\t\t\t}\n\t\t})();\n\t\tthis.extractionPromises.set(key, promise);\n\t\tawait promise;\n\t}\n\t/**\n\t* Resolves or creates a 1D GPUBuffer for a time-varying signal.\n\t* If not evaluated yet for the current frame, it dispatches the generator compute pass.\n\t*/\n\tgetOrCreate1DBuffer(device, _encoder, nodeId, elapsedTime, duration$2, sd, numSamples, sampleRate, renderId, frame, fps) {\n\t\tlet normalizedSd = sd;\n\t\tif (sd && !sd.customWGSL && !sd.wgsl && sd.fnBody) {\n\t\t\tconst fnRes = buildWGSLSignalFn(sd, nodeId);\n\t\t\tnormalizedSd = {\n\t\t\t\t...sd,\n\t\t\t\tcustomWGSL: fnRes.wgsl,\n\t\t\t\tsignalFnName: fnRes.name,\n\t\t\t\tfnOutputType: fnRes.outputType,\n\t\t\t\toutputType: fnRes.outputType\n\t\t\t};\n\t\t}\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tlet res = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tconst bufferSize = numSamples * 4;\n\t\tif (res?.isExternal && res.buffer && res.buffer.size === bufferSize) return res.buffer;\n\t\tif (!res || !res.buffer || res.buffer.size < bufferSize) {\n\t\t\tif (res?.buffer && !res.isExternal) res.buffer.destroy();\n\t\t\tconst buffer = device.createBuffer({\n\t\t\t\tsize: bufferSize,\n\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,\n\t\t\t\tlabel: `signal_1d_buffer_${nodeId}`\n\t\t\t});\n\t\t\tres = {\n\t\t\t\t...res,\n\t\t\t\ttype: res?.texture ? \"combined\" : \"1d-buffer\",\n\t\t\t\tbuffer,\n\t\t\t\tlastProcessedFrame: -1\n\t\t\t};\n\t\t\tdr.resources.set(key, res);\n\t\t}\n\t\tconst rawSamples = normalizedSd?.samples ?? normalizedSd?.data?.samples;\n\t\tconst fingerprint = normalizedSd ? this.computeSignalFingerprint(normalizedSd) : \"\";\n\t\tconst cacheFrame = frame !== void 0 ? frame : elapsedTime;\n\t\tif (res.lastProcessedFrame === cacheFrame && res.lastFingerprint === fingerprint) return res.buffer;\n\t\tif (res.lastFingerprint !== fingerprint) res.bindGroup = void 0;\n\t\tres.lastProcessedFrame = cacheFrame;\n\t\tres.lastFingerprint = fingerprint;\n\t\tif (isSamplesArray(rawSamples) && rawSamples.length > 0) {\n\t\t\tconst flat = new Float32Array(numSamples);\n\t\t\tconst total = rawSamples.length;\n\t\t\tconst srcFps = Number(normalizedSd?.fps) || 24;\n\t\t\tfor (let i = 0; i < numSamples; i++) {\n\t\t\t\tconst t = elapsedTime + i / sampleRate;\n\t\t\t\tconst sIdx = Math.min(total - 1, Math.max(0, Math.round(t * srcFps)));\n\t\t\t\tflat[i] = Number(rawSamples[sIdx]) || 0;\n\t\t\t}\n\t\t\tdevice.queue.writeBuffer(res.buffer, 0, flat);\n\t\t} else if (normalizedSd?.type === \"generator\" && (normalizedSd.customWGSL || normalizedSd.fnBody)) {\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_1d_encoder_${nodeId}` });\n\t\t\tthis.dispatch1DGenerator(device, signalEncoder, res, elapsedTime, duration$2, normalizedSd, numSamples, sampleRate, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t} else if (normalizedSd?.type === \"audio_extractor\" || normalizedSd?.extractionMode !== void 0) {\n\t\t\tconst masterTex = this.getMasterTexture(device, nodeId, renderId);\n\t\t\tif (masterTex) {\n\t\t\t\tconst channel = normalizedSd.channel === \"beat\" || nodeId.endsWith(\"_beat\") ? 1 : normalizedSd.channel === \"bass\" || nodeId.endsWith(\"_bass\") ? 2 : normalizedSd.channel === \"energy\" || nodeId.endsWith(\"_energy\") ? 3 : 0;\n\t\t\t\tconst effectiveDuration = this.getDuration(device, nodeId, renderId) ?? (typeof normalizedSd.durationMs === \"number\" ? normalizedSd.durationMs / 1e3 : duration$2);\n\t\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_1d_audio_encoder_${nodeId}` });\n\t\t\t\tthis.dispatch1DAudioSignal(device, signalEncoder, res, masterTex, channel, elapsedTime, effectiveDuration, numSamples, sampleRate);\n\t\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t\t} else {\n\t\t\t\tconst val = Number(normalizedSd?.offset ?? 0);\n\t\t\t\tconst flat = new Float32Array(numSamples).fill(val);\n\t\t\t\tdevice.queue.writeBuffer(res.buffer, 0, flat);\n\t\t\t}\n\t\t} else if (normalizedSd?.type === \"signal_math\") {\n\t\t\tconst sigAId = normalizedSd.signalA?.nodeId ?? `${nodeId}_a`;\n\t\t\tconst bufA = this.getOrCreate1DBuffer(device, _encoder, sigAId, elapsedTime, duration$2, normalizedSd.signalA, numSamples, sampleRate, renderId, frame, fps);\n\t\t\tconst hasB = normalizedSd.signalB && typeof normalizedSd.signalB === \"object\" && normalizedSd.signalB.type !== void 0;\n\t\t\tconst sigBId = hasB ? normalizedSd.signalB.nodeId ?? `${nodeId}_b` : `${nodeId}_b_dummy`;\n\t\t\tconst bufB = hasB ? this.getOrCreate1DBuffer(device, _encoder, sigBId, elapsedTime, duration$2, normalizedSd.signalB, numSamples, sampleRate, renderId, frame, fps) : this.getDummyBuffer(device);\n\t\t\tconst bVal = resolveSignalBValue(normalizedSd);\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_1d_math_encoder_${nodeId}` });\n\t\t\tthis.dispatch1DMathSignal(device, signalEncoder, res, bufA, bufB, Boolean(hasB), bVal, normalizedSd, elapsedTime, duration$2, numSamples, sampleRate, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t} else if (normalizedSd?.type === \"gate\" || normalizedSd?.op === \"SignalGate\" || (normalizedSd?.signalConfig)?.type === \"gate\" || (normalizedSd?.signalConfig)?.op === \"SignalGate\") {\n\t\t\tconst source = normalizedSd.sourceSignal ?? normalizedSd.signalConfig?.sourceSignal ?? normalizedSd.signal;\n\t\t\tconst sigInId = source?.nodeId ?? `${nodeId}_in`;\n\t\t\tconst bufIn = this.getOrCreate1DBuffer(device, _encoder, sigInId, elapsedTime, duration$2, source, numSamples, sampleRate, renderId, frame, fps);\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_1d_gate_encoder_${nodeId}` });\n\t\t\tthis.dispatch1DGateSignal(device, signalEncoder, res, bufIn, normalizedSd, elapsedTime, duration$2, numSamples, sampleRate, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t} else {\n\t\t\tconst val = Number(normalizedSd?.offset ?? 0);\n\t\t\tconst flat = new Float32Array(numSamples).fill(val);\n\t\t\tdevice.queue.writeBuffer(res.buffer, 0, flat);\n\t\t}\n\t\treturn res.buffer;\n\t}\n\t/**\n\t* Resolves or creates a 2D GPUTextureView for spatial modulation.\n\t* If not evaluated yet for the current frame, it dispatches the generator render pass.\n\t*/\n\tgetOrCreate2DTextureView(device, _encoder, nodeId, elapsedTime, duration$2, sd, width, _height, renderId, frame, fps) {\n\t\tlet normalizedSd = sd;\n\t\tif (sd && !sd.customWGSL && !sd.wgsl && sd.fnBody) {\n\t\t\tconst fnRes = buildWGSLSignalFn(sd, nodeId);\n\t\t\tnormalizedSd = {\n\t\t\t\t...sd,\n\t\t\t\tcustomWGSL: fnRes.wgsl,\n\t\t\t\tsignalFnName: fnRes.name,\n\t\t\t\tfnOutputType: fnRes.outputType,\n\t\t\t\toutputType: fnRes.outputType\n\t\t\t};\n\t\t}\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst key = `${renderId ?? \"global\"}:${nodeId}`;\n\t\tlet res = dr.resources.get(key) ?? dr.resources.get(`global:${nodeId}`);\n\t\tconst masterAudio = dr.masterAudioTextures.get(key) ?? dr.masterAudioTextures.get(`global:${nodeId}`) ?? dr.masterAudioTextures.get(`${renderId ?? \"global\"}:${nodeId.replace(/_(beat|bass|energy)$/, \"\")}`) ?? dr.masterAudioTextures.get(`global:${nodeId.replace(/_(beat|bass|energy)$/, \"\")}`);\n\t\tif (res?.isExternal && res.textureView && !masterAudio) return res.textureView;\n\t\tconst targetWidth = res?.texture ? res.texture.width : Math.max(16, width > 0 ? width : 256);\n\t\tconst targetHeight = 1;\n\t\tif (!res || !res.texture) {\n\t\t\tconst texture = device.createTexture({\n\t\t\t\tsize: [\n\t\t\t\t\ttargetWidth,\n\t\t\t\t\ttargetHeight,\n\t\t\t\t\t1\n\t\t\t\t],\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_DST,\n\t\t\t\tlabel: `signal_2d_texture_${nodeId}`\n\t\t\t});\n\t\t\tres = {\n\t\t\t\t...res,\n\t\t\t\ttype: res?.buffer ? \"combined\" : \"2d-texture\",\n\t\t\t\ttexture,\n\t\t\t\ttextureView: texture.createView(),\n\t\t\t\tlastProcessedFrame: -1\n\t\t\t};\n\t\t\tdr.resources.set(key, res);\n\t\t\tif (renderId) dr.resources.set(`global:${nodeId}`, res);\n\t\t}\n\t\tconst rawSamples = normalizedSd?.samples ?? normalizedSd?.data?.samples;\n\t\tconst fingerprint = normalizedSd ? this.computeSignalFingerprint(normalizedSd) : \"\";\n\t\tconst cacheFrame = frame !== void 0 ? frame : elapsedTime;\n\t\tif (res.lastProcessedFrame === cacheFrame && res.lastFingerprint === fingerprint) return res.textureView;\n\t\tif (res.lastFingerprint !== fingerprint) res.bindGroup = void 0;\n\t\tres.lastProcessedFrame = cacheFrame;\n\t\tres.lastFingerprint = fingerprint;\n\t\tif (masterAudio) {\n\t\t\tlet channel = 0;\n\t\t\tif (typeof normalizedSd?.channel === \"number\") channel = normalizedSd.channel;\n\t\t\telse if (nodeId.endsWith(\"_beat\")) channel = 1;\n\t\t\telse if (nodeId.endsWith(\"_bass\")) channel = 2;\n\t\t\telse if (nodeId.endsWith(\"_energy\")) channel = 3;\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `audio_signal_2d_encoder_${nodeId}` });\n\t\t\tthis.dispatch2DAudioSignal(device, signalEncoder, res, masterAudio, channel, elapsedTime, duration$2 > 0 ? duration$2 : masterAudio.durationSec, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t\treturn res.textureView;\n\t\t} else if (isSamplesArray(rawSamples) && rawSamples.length > 0) {\n\t\t\tconst flat = new Float32Array(targetWidth * targetHeight * 4);\n\t\t\tconst total = rawSamples.length;\n\t\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\t\tfor (let i = 0; i < targetWidth; i++) {\n\t\t\t\tconst t = baseTime + ((targetWidth > 1 ? i / (targetWidth - 1) : .5) - .5) * 2;\n\t\t\t\tconst tNorm = duration$2 > 0 ? Math.min(1, Math.max(0, t / duration$2)) : .5;\n\t\t\t\tconst sIdx = Math.min(total - 1, Math.max(0, Math.round(tNorm * (total - 1))));\n\t\t\t\tconst val = Number(rawSamples[sIdx]) || 0;\n\t\t\t\tfor (let row = 0; row < targetHeight; row++) {\n\t\t\t\t\tconst idx = (row * targetWidth + i) * 4;\n\t\t\t\t\tflat[idx] = val;\n\t\t\t\t\tflat[idx + 1] = val;\n\t\t\t\t\tflat[idx + 2] = val;\n\t\t\t\t\tflat[idx + 3] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst halfFlat = encodeFloat32ToFloat16(flat);\n\t\t\tdevice.queue.writeTexture({ texture: res.texture }, halfFlat, {\n\t\t\t\tbytesPerRow: targetWidth * 8,\n\t\t\t\trowsPerImage: targetHeight\n\t\t\t}, [\n\t\t\t\ttargetWidth,\n\t\t\t\ttargetHeight,\n\t\t\t\t1\n\t\t\t]);\n\t\t\treturn res.textureView;\n\t\t} else if (normalizedSd && (normalizedSd.type === \"signal_math\" || normalizedSd.op === \"SignalMath\" || Boolean(normalizedSd.operation) || Boolean(normalizedSd.signalConfig?.operation))) {\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_math_2d_encoder_${nodeId}` });\n\t\t\tthis.dispatch2DSignalMath(device, signalEncoder, res, nodeId, normalizedSd, elapsedTime, duration$2, targetWidth, frame, fps, renderId);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t\treturn res.textureView;\n\t\t} else if (normalizedSd && (normalizedSd.type === \"gate\" || normalizedSd.op === \"SignalGate\" || normalizedSd.signalConfig?.type === \"gate\" || normalizedSd.signalConfig?.op === \"SignalGate\")) {\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_gate_2d_encoder_${nodeId}` });\n\t\t\tthis.dispatch2DSignalGate(device, signalEncoder, res, nodeId, normalizedSd, elapsedTime, duration$2, targetWidth, frame, fps, renderId);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t\treturn res.textureView;\n\t\t} else if (normalizedSd && normalizedSd.type === \"generator\" && (normalizedSd.customWGSL || normalizedSd.fnBody)) {\n\t\t\tconst signalEncoder = device.createCommandEncoder({ label: `signal_2d_encoder_${nodeId}` });\n\t\t\tthis.dispatch2DGenerator(device, signalEncoder, res, elapsedTime, duration$2, normalizedSd, targetWidth, targetHeight, frame, fps);\n\t\t\tdevice.queue.submit([signalEncoder.finish()]);\n\t\t} else {\n\t\t\tconst val = Number(normalizedSd?.offset ?? 0);\n\t\t\tconst flat = new Float32Array(targetWidth * targetHeight * 4);\n\t\t\tfor (let i = 0; i < targetWidth * targetHeight; i++) {\n\t\t\t\tflat[i * 4] = val;\n\t\t\t\tflat[i * 4 + 1] = val;\n\t\t\t\tflat[i * 4 + 2] = val;\n\t\t\t\tflat[i * 4 + 3] = 1;\n\t\t\t}\n\t\t\tconst halfFlat = encodeFloat32ToFloat16(flat);\n\t\t\tdevice.queue.writeTexture({ texture: res.texture }, halfFlat, {\n\t\t\t\tbytesPerRow: targetWidth * 8,\n\t\t\t\trowsPerImage: targetHeight\n\t\t\t}, [\n\t\t\t\ttargetWidth,\n\t\t\t\ttargetHeight,\n\t\t\t\t1\n\t\t\t]);\n\t\t}\n\t\treturn res.textureView;\n\t}\n\tdispatch1DGenerator(device, encoder, res, elapsedTime, duration$2, sd, numSamples, sampleRate, frame, fps) {\n\t\tconst customWGSL = sd.customWGSL ?? sd.wgsl ?? \"\";\n\t\tconst signalFnName = sd.signalFnName ?? sd.name ?? \"signal_fn\";\n\t\tconst outputType = sd.fnOutputType ?? sd.outputType ?? \"f32\";\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = `1d_${sd.nodeId}_${customWGSL}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst fnParams = sd.fnParams ?? [];\n\t\t\tconst paramVals = [];\n\t\t\tfor (const p of fnParams) {\n\t\t\t\tconst val = p.defaultValue;\n\t\t\t\tparamVals.push(val % 1 === 0 ? `${val.toFixed(1)}f` : `${val}f`);\n\t\t\t}\n\t\t\tlet callExpr = `${signalFnName}(${[\n\t\t\t\t\"t\",\n\t\t\t\t\"progress\",\n\t\t\t\t\"0.0\",\n\t\t\t\t\"0.0\",\n\t\t\t\t\"idx\",\n\t\t\t\t\"u.numSamples\",\n\t\t\t\t\"u.frame\",\n\t\t\t\t\"vec4<f32>(progress, 0.5, 0.5, 1.0)\",\n\t\t\t\t\"u.t_elapsed\",\n\t\t\t\t\"u.duration\",\n\t\t\t\t...paramVals\n\t\t\t].join(\", \")})`;\n\t\t\tif (outputType === \"vec2f\" || outputType === \"vec3f\" || outputType === \"vec4f\") callExpr = `${callExpr}.x`;\n\t\t\tconst shaderCode = `\nstruct GeneratorUniforms {\n sampleRate : f32,\n baseTime : f32,\n frame : u32,\n numSamples : u32,\n amplitude : f32,\n frequency : f32,\n phase : f32,\n offset : f32,\n t_elapsed : f32,\n duration : f32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : GeneratorUniforms;\n@group(0) @binding(1) var<storage, read_write> outSignal : array<f32>;\n\n${customWGSL}\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= u.numSamples) { return; }\n\n let progress = f32(idx) / f32(u.numSamples - 1u);\n let t = u.baseTime + f32(idx) / u.sampleRate;\n \n // Evaluate custom signal\n let val = ${callExpr};\n outSignal[idx] = val;\n}\n\t\t\t`;\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_1d_generator_${sd.nodeId}.wgsl`,\n\t\t\t\tcode: shaderCode\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel: `Signal1DComputePipeline_${sd.nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\tconst uFrame = frame !== void 0 ? frame : 0;\n\t\tconst uniformBufferData = /* @__PURE__ */ new ArrayBuffer(48);\n\t\tconst f32View = new Float32Array(uniformBufferData);\n\t\tconst u32View = new Uint32Array(uniformBufferData);\n\t\tf32View[0] = sampleRate;\n\t\tf32View[1] = baseTime;\n\t\tu32View[2] = uFrame;\n\t\tu32View[3] = numSamples;\n\t\tf32View[4] = sd.amplitude ?? 1;\n\t\tf32View[5] = sd.frequency ?? 1;\n\t\tf32View[6] = sd.phase ?? 0;\n\t\tf32View[7] = sd.offset ?? 0;\n\t\tf32View[8] = elapsedTime;\n\t\tf32View[9] = duration$2;\n\t\tf32View[10] = 0;\n\t\tf32View[11] = 0;\n\t\tif (!res.uniformBuffer) res.uniformBuffer = device.createBuffer({\n\t\t\tsize: uniformBufferData.byteLength,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: `signal_1d_uniform_buffer_${sd.nodeId}`\n\t\t});\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uniformBufferData);\n\t\tif (!res.bindGroup) res.bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: res.buffer }\n\t\t\t}]\n\t\t});\n\t\tconst pass = encoder.beginComputePass({ label: `signal_1d_compute_pass_${sd.nodeId}` });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, res.bindGroup);\n\t\tconst workgroups = Math.ceil(numSamples / 64);\n\t\tpass.dispatchWorkgroups(workgroups);\n\t\tpass.end();\n\t}\n\tdispatch1DAudioSignal(device, encoder, res, masterTex, channel, elapsedTime, duration$2, numSamples, sampleRate) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = \"audio_signal_1d\";\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tconst sampler = this.getSampler(device);\n\t\tif (!pipeline) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tcode: `\nstruct Audio1DUniforms {\n sampleRate : f32,\n baseTime : f32,\n duration : f32,\n numSamples : u32,\n channel : u32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Audio1DUniforms;\n@group(0) @binding(1) var masterTex : texture_2d<f32>;\n@group(0) @binding(2) var samp : sampler;\n@group(0) @binding(3) var<storage, read_write> outSignal : array<f32>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= u.numSamples) { return; }\n\n let t = u.baseTime + f32(idx) / u.sampleRate;\n var t_norm = 0.5f;\n if (u.duration > 0.0f) {\n t_norm = clamp(t / u.duration, 0.0f, 1.0f);\n }\n\n let s = textureSampleLevel(masterTex, samp, vec2<f32>(t_norm, 0.5f), 0.0f);\n var val = s.r;\n if (u.channel == 1u) {\n val = s.g;\n } else if (u.channel == 2u) {\n val = s.b;\n } else if (u.channel == 3u) {\n val = s.a;\n }\n\n outSignal[idx] = val;\n}\n`,\n\t\t\t\tlabel: \"dispatch1DAudioSignal_module\"\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel: \"dispatch1DAudioSignal_pipeline\",\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst uData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tfView[0] = sampleRate;\n\t\tfView[1] = elapsedTime;\n\t\tfView[2] = duration$2 > 0 ? duration$2 : 1;\n\t\tuView[3] = numSamples;\n\t\tuView[4] = channel;\n\t\tconst uBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"audio_1d_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(uBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: masterTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: res.buffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginComputePass({ label: \"audio_1d_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(numSamples / 64));\n\t\tpass.end();\n\t}\n\tdispatch1DMathSignal(device, encoder, res, bufA, bufB, hasSignalB, bValue, sd, elapsedTime, duration$2, numSamples, sampleRate, frame, _fps) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst operation = sd.operation ?? \"add\";\n\t\tconst customWGSL = sd.customWGSL ?? sd.wgsl ?? \"\";\n\t\tconst shaderKey = `1d_math_${operation}_${hasSignalB}_${customWGSL}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst { evalExpr, extraFn } = buildSignalMathExpression(operation, customWGSL);\n\t\t\tconst shaderCode = `\nstruct MathUniforms {\n bValue : f32,\n inMin : f32,\n inMax : f32,\n outMin : f32,\n outMax : f32,\n clampMin : f32,\n clampMax : f32,\n exponent : f32,\n edge0 : f32,\n edge1 : f32,\n a_min : f32,\n a_max : f32,\n baseTime : f32,\n duration : f32,\n sampleRate: f32,\n numSamples: u32,\n hasB : f32,\n frame : u32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MathUniforms;\n@group(0) @binding(1) var<storage, read> bufA : array<f32>;\n@group(0) @binding(2) var<storage, read> bufB : array<f32>;\n@group(0) @binding(3) var<storage, read_write> outSignal : array<f32>;\n\nconst PI: f32 = ${Math.PI}f;\nconst TAU: f32 = ${Math.PI * 2}f;\nconst E: f32 = ${Math.E}f;\n\n${extraFn}\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= u.numSamples) { return; }\n\n let a = bufA[idx];\n var b = u.bValue;\n if (u.hasB > 0.5f) {\n b = bufB[idx];\n }\n let a_min = u.a_min;\n let a_max = u.a_max;\n let inMin = u.inMin;\n let inMax = u.inMax;\n let outMin = u.outMin;\n let outMax = u.outMax;\n let clampMin = u.clampMin;\n let clampMax = u.clampMax;\n let exponent = u.exponent;\n let edge0 = u.edge0;\n let edge1 = u.edge1;\n let t = u.baseTime + f32(idx) / u.sampleRate;\n var t_norm = 0.5f;\n if (u.duration > 0.0f) {\n t_norm = clamp(t / u.duration, 0.0f, 1.0f);\n }\n let frame = u.frame;\n\n let val = ${evalExpr};\n outSignal[idx] = val;\n}\n`;\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_1d_math_${operation}.wgsl`,\n\t\t\t\tcode: shaderCode\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel: `Signal1DMathPipeline_${operation}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst uData = new ArrayBuffer(Math.max(80, 256));\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tfView[0] = bValue;\n\t\tfView[1] = Number(sd.inMin) || 0;\n\t\tfView[2] = Number(sd.inMax) || 1;\n\t\tfView[3] = Number(sd.outMin) || 0;\n\t\tfView[4] = Number(sd.outMax) || 1;\n\t\tfView[5] = Number(sd.clampMin) || 0;\n\t\tfView[6] = Number(sd.clampMax) || 1;\n\t\tfView[7] = Number(sd.exponent) || 2;\n\t\tfView[8] = Number(sd.edge0) || 0;\n\t\tfView[9] = Number(sd.edge1) || 1;\n\t\tfView[10] = Number(sd.aMin ?? sd.inMin) || 0;\n\t\tfView[11] = Number(sd.aMax ?? sd.inMax) || 1;\n\t\tfView[12] = elapsedTime;\n\t\tfView[13] = duration$2 > 0 ? duration$2 : 1;\n\t\tfView[14] = sampleRate;\n\t\tuView[15] = numSamples;\n\t\tfView[16] = hasSignalB ? 1 : 0;\n\t\tuView[17] = frame !== void 0 ? Math.max(0, Math.floor(frame)) : 0;\n\t\tconst uBuffer = device.createBuffer({\n\t\t\tsize: Math.max(80, 256),\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"math_1d_uniform_buffer\"\n\t\t});\n\t\tdevice.queue.writeBuffer(uBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: bufA }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: bufB }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: res.buffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginComputePass({ label: \"math_1d_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(numSamples / 64));\n\t\tpass.end();\n\t}\n\tdispatch2DGenerator(device, encoder, res, elapsedTime, duration$2, sd, _width, _height, frame, fps) {\n\t\tconst customWGSL = sd.customWGSL ?? sd.wgsl ?? \"\";\n\t\tconst signalFnName = sd.signalFnName ?? sd.name ?? \"signal_fn\";\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = `2d_${sd.nodeId}_${customWGSL}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst fnParams = sd.fnParams ?? [];\n\t\t\tconst paramVals = [];\n\t\t\tfor (const p of fnParams) {\n\t\t\t\tconst val = p.defaultValue;\n\t\t\t\tparamVals.push(val % 1 === 0 ? `${val.toFixed(1)}f` : `${val}f`);\n\t\t\t}\n\t\t\tconst shaderCode = `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\nstruct GeneratorUniforms {\n baseTime : f32,\n frame : u32,\n amplitude : f32,\n frequency : f32,\n phase : f32,\n offset : f32,\n t_elapsed : f32,\n duration : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : GeneratorUniforms;\n\n${customWGSL}\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n ${`let val = f32(${`${signalFnName}(${[\n\t\t\t\t\"u.baseTime + (in.uv.x - 0.5) * 2.0\",\n\t\t\t\t\"in.uv.x\",\n\t\t\t\t\"1.0 - in.uv.y\",\n\t\t\t\t\"0.0\",\n\t\t\t\t\"0u\",\n\t\t\t\t\"1u\",\n\t\t\t\t\"u.frame\",\n\t\t\t\t\"vec4<f32>(in.uv.x, 1.0 - in.uv.y, 0.5, 1.0)\",\n\t\t\t\t\"u.t_elapsed + (in.uv.x - 0.5) * 2.0\",\n\t\t\t\t\"u.duration\",\n\t\t\t\t...paramVals\n\t\t\t].join(\", \")})`}); return vec4<f32>(val, val, val, val);`}\n}\n\t\t\t`;\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_2d_generator_${sd.nodeId}.wgsl`,\n\t\t\t\tcode: shaderCode\n\t\t\t});\n\t\t\tpipeline = device.createRenderPipeline({\n\t\t\t\tlabel: `Signal2DPipeline_${sd.nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format: \"rgba16float\" }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\tconst uFrame = frame !== void 0 ? frame : 0;\n\t\tconst uniformBufferData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst f32View = new Float32Array(uniformBufferData);\n\t\tconst u32View = new Uint32Array(uniformBufferData);\n\t\tf32View[0] = baseTime;\n\t\tu32View[1] = uFrame;\n\t\tf32View[2] = sd.amplitude ?? 1;\n\t\tf32View[3] = sd.frequency ?? 1;\n\t\tf32View[4] = sd.phase ?? 0;\n\t\tf32View[5] = sd.offset ?? 0;\n\t\tf32View[6] = elapsedTime;\n\t\tf32View[7] = duration$2;\n\t\tif (!res.uniformBuffer || res.uniformBuffer.size < 256) {\n\t\t\tres.uniformBuffer = device.createBuffer({\n\t\t\t\tsize: 256,\n\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: `signal_2d_uniform_buffer_${sd.nodeId}`\n\t\t\t});\n\t\t\tres.bindGroup = void 0;\n\t\t}\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uniformBufferData);\n\t\tif (!res.bindGroup) res.bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: `signal_2d_render_pass_${sd.nodeId}`,\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: res.textureView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, res.bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t}\n\tdispatch2DAudioSignal(device, encoder, res, masterAudio, channel, elapsedTime, duration$2, frame, fps) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = \"audio_signal_2d\";\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tconst sampler = this.getSampler(device);\n\t\tif (!pipeline) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tcode: `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\nstruct AudioUniforms {\n baseTime : f32,\n duration : f32,\n channel : u32,\n pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : AudioUniforms;\n@group(0) @binding(1) var masterTex : texture_2d<f32>;\n@group(0) @binding(2) var samp : sampler;\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let t = u.baseTime + (in.uv.x - 0.5) * 2.0;\n var t_norm = 0.5;\n if (u.duration > 0.0) {\n t_norm = clamp(t / u.duration, 0.0, 1.0);\n }\n let s = textureSampleLevel(masterTex, samp, vec2<f32>(t_norm, 0.5), 0.0);\n if (u.channel == 1u) {\n return vec4<f32>(s.g, s.g, s.g, s.g);\n } else if (u.channel == 2u) {\n return vec4<f32>(s.b, s.b, s.b, s.b);\n } else if (u.channel == 3u) {\n return vec4<f32>(s.a, s.a, s.a, s.a);\n }\n return s;\n}\n`,\n\t\t\t\tlabel: \"dispatch2DAudioSignal_module\"\n\t\t\t});\n\t\t\tpipeline = device.createRenderPipeline({\n\t\t\t\tlabel: \"dispatch2DAudioSignal_pipeline\",\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format: \"rgba16float\" }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\tconst effectiveDuration = duration$2 > 0 ? duration$2 : masterAudio.durationSec ?? 0;\n\t\tconst uniformBufferData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(uniformBufferData);\n\t\tconst u32View = new Uint32Array(uniformBufferData);\n\t\tf32View[0] = baseTime;\n\t\tf32View[1] = effectiveDuration;\n\t\tu32View[2] = channel;\n\t\tf32View[3] = 0;\n\t\tif (!res.uniformBuffer || res.uniformBuffer.size < 256) {\n\t\t\tres.uniformBuffer = device.createBuffer({\n\t\t\t\tsize: 256,\n\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: \"audio_signal_2d_uniform_buffer\"\n\t\t\t});\n\t\t\tres.bindGroup = void 0;\n\t\t}\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uniformBufferData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: masterAudio.textureView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: \"audio_signal_2d_render_pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: res.textureView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t}\n\tdispatch2DSignalMath(device, encoder, res, nodeId, sd, elapsedTime, duration$2, width, frame, fps, renderId) {\n\t\tconst cfg = sd.signalConfig;\n\t\tconst operation = sd.operation ?? cfg?.operation ?? \"remap\";\n\t\tconst customWGSL = sd.customWGSL ?? cfg?.customWGSL ?? \"\";\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = `math_${nodeId}_${operation}_${customWGSL}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tconst sigANodeId = sd.signalA?.nodeId || sd.signalA?.virtualMedia?.operation?.nodeId;\n\t\tconst sigBNodeId = sd.signalB && typeof sd.signalB === \"object\" ? sd.signalB.nodeId || sd.signalB.virtualMedia?.operation?.nodeId : void 0;\n\t\tconst hasSignalB = Boolean(sigBNodeId);\n\t\tconst viewA = sigANodeId ? this.getOrCreate2DTextureView(device, encoder, sigANodeId, elapsedTime, duration$2, sd.signalA, width, 1, renderId, frame, fps) : this.getDummy1x1TextureView(device);\n\t\tconst viewB = sigBNodeId ? this.getOrCreate2DTextureView(device, encoder, sigBNodeId, elapsedTime, duration$2, sd.signalB, width, 1, renderId, frame, fps) : this.getDummy1x1TextureView(device);\n\t\tconst sampler = this.getSampler(device);\n\t\tif (!pipeline) {\n\t\t\tconst { evalExpr, extraFn } = buildSignalMathExpression(operation, customWGSL);\n\t\t\tconst shaderCode = `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\nstruct MathUniforms {\n bValue : f32,\n inMin : f32,\n inMax : f32,\n outMin : f32,\n outMax : f32,\n clampMin : f32,\n clampMax : f32,\n exponent : f32,\n edge0 : f32,\n edge1 : f32,\n a_min : f32,\n a_max : f32,\n t : f32,\n t_norm : f32,\n frame : u32,\n hasB : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MathUniforms;\n@group(0) @binding(1) var texA : texture_2d<f32>;\n@group(0) @binding(2) var texB : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n\nconst PI: f32 = ${Math.PI}f;\nconst TAU: f32 = ${Math.PI * 2}f;\nconst E: f32 = ${Math.E}f;\n\n${extraFn}\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let a = textureSampleLevel(texA, samp, in.uv, 0.0).r;\n var b = u.bValue;\n if (u.hasB > 0.5) {\n b = textureSampleLevel(texB, samp, in.uv, 0.0).r;\n }\n let a_min = u.a_min;\n let a_max = u.a_max;\n let inMin = u.inMin;\n let inMax = u.inMax;\n let outMin = u.outMin;\n let outMax = u.outMax;\n let clampMin = u.clampMin;\n let clampMax = u.clampMax;\n let exponent = u.exponent;\n let edge0 = u.edge0;\n let edge1 = u.edge1;\n let t = u.t;\n let t_norm = u.t_norm;\n let frame = u.frame;\n\n var val: f32 = ${evalExpr};\n return vec4<f32>(val, val, val, val);\n}\n`;\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_math_${nodeId}.wgsl`,\n\t\t\t\tcode: shaderCode\n\t\t\t});\n\t\t\tpipeline = device.createRenderPipeline({\n\t\t\t\tlabel: `SignalMathPipeline_${nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format: \"rgba16float\" }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst statsA = sigANodeId ? this.getStats(sigANodeId) : void 0;\n\t\tconst aMin = statsA?.min ?? 0;\n\t\tconst aMax = statsA?.max ?? 1;\n\t\tconst stats = computeSignalMathStats(operation, aMin, aMax, sd, hasSignalB, sigBNodeId ? this.getStats(sigBNodeId) : void 0);\n\t\tthis.setStats(nodeId, stats);\n\t\tif (sd.nodeId && sd.nodeId !== nodeId) this.setStats(sd.nodeId, stats);\n\t\tconst uData = /* @__PURE__ */ new ArrayBuffer(64);\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tconst baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;\n\t\tfView[0] = resolveSignalBValue(sd);\n\t\tfView[1] = sd.inMin ?? cfg?.inMin ?? 0;\n\t\tfView[2] = sd.inMax ?? cfg?.inMax ?? 1;\n\t\tfView[3] = sd.outMin ?? cfg?.outMin ?? 0;\n\t\tfView[4] = sd.outMax ?? cfg?.outMax ?? 1;\n\t\tfView[5] = sd.clampMin ?? cfg?.clampMin ?? 0;\n\t\tfView[6] = sd.clampMax ?? cfg?.clampMax ?? 1;\n\t\tfView[7] = sd.exponent ?? cfg?.exponent ?? 2;\n\t\tfView[8] = sd.edge0 ?? cfg?.edge0 ?? 0;\n\t\tfView[9] = sd.edge1 ?? cfg?.edge1 ?? 1;\n\t\tfView[10] = aMin;\n\t\tfView[11] = aMax;\n\t\tfView[12] = baseTime;\n\t\tfView[13] = duration$2 > 0 ? baseTime / duration$2 : 0;\n\t\tuView[14] = frame ?? 0;\n\t\tfView[15] = hasSignalB ? 1 : 0;\n\t\tif (!res.uniformBuffer || res.uniformBuffer.size < 256) {\n\t\t\tres.uniformBuffer = device.createBuffer({\n\t\t\t\tsize: 256,\n\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: `signal_math_uniform_${nodeId}`\n\t\t\t});\n\t\t\tres.bindGroup = void 0;\n\t\t}\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: viewA\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: viewB\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: `signal_math_pass_${nodeId}`,\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: res.textureView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t}\n\tdispatch2DSignalGate(device, encoder, res, nodeId, sd, elapsedTime, duration$2, width, frame, fps, renderId) {\n\t\tconst cfg = sd.signalConfig;\n\t\tconst threshold = Number(sd.threshold ?? cfg?.threshold ?? .5);\n\t\tconst mode = sd.mode ?? cfg?.mode ?? \"gate\";\n\t\tconst invert = Boolean(sd.invert ?? cfg?.invert ?? false);\n\t\tconst holdFrames = Math.max(1, Number(sd.holdFrames ?? cfg?.holdFrames ?? 4));\n\t\tconst source = sd.sourceSignal ?? cfg?.sourceSignal ?? sd.signal;\n\t\tconst op = (source?.virtualMedia)?.operation;\n\t\tconst sigInNodeId = source?.nodeId || op?.nodeId;\n\t\tconst viewIn = sigInNodeId ? this.getOrCreate2DTextureView(device, encoder, sigInNodeId, elapsedTime, duration$2, source, width, 1, renderId, frame, fps) : this.getDummy1x1TextureView(device);\n\t\tconst sampler = this.getSampler(device);\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst shaderKey = `gate_2d_${mode}_${invert}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_gate_${nodeId}.wgsl`,\n\t\t\t\tcode: `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\nstruct GateUniforms {\n threshold : f32,\n mode : u32,\n invert : f32,\n holdFrames : u32,\n dx : f32,\n pad0 : f32,\n pad1 : f32,\n pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : GateUniforms;\n@group(0) @binding(1) var texIn : texture_2d<f32>;\n@group(0) @binding(2) var samp : sampler;\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var high: f32 = 0.0f;\n\n if (u.mode == 0u) {\n let a = textureSampleLevel(texIn, samp, in.uv, 0.0).r;\n high = select(0.0f, 1.0f, a >= u.threshold);\n } else if (u.mode == 1u) {\n let steps = min(u.holdFrames, 32u);\n for (var i = 0u; i < steps; i = i + 1u) {\n let uv_cur = in.uv.x - f32(i) * u.dx;\n if (uv_cur >= 0.0f) {\n let cur = textureSampleLevel(texIn, samp, vec2<f32>(uv_cur, in.uv.y), 0.0).r;\n let prev = textureSampleLevel(texIn, samp, vec2<f32>(max(0.0f, uv_cur - u.dx), in.uv.y), 0.0).r;\n if (cur >= u.threshold && prev < u.threshold) {\n high = 1.0f;\n break;\n }\n }\n }\n } else {\n var count = 0u;\n let max_scan = 128u;\n for (var i = 0u; i < max_scan; i = i + 1u) {\n let uv_cur = in.uv.x - f32(i) * u.dx;\n if (uv_cur < 0.0f) { break; }\n let cur = textureSampleLevel(texIn, samp, vec2<f32>(uv_cur, in.uv.y), 0.0).r;\n let prev = textureSampleLevel(texIn, samp, vec2<f32>(max(0.0f, uv_cur - u.dx), in.uv.y), 0.0).r;\n if (cur >= u.threshold && prev < u.threshold) {\n count = count + 1u;\n }\n }\n high = select(0.0f, 1.0f, (count % 2u) == 1u);\n }\n\n if (u.invert > 0.5f) {\n high = 1.0f - high;\n }\n return vec4<f32>(high, high, high, 1.0f);\n}\n`\n\t\t\t});\n\t\t\tpipeline = device.createRenderPipeline({\n\t\t\t\tlabel: `SignalGatePipeline_${nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format: \"rgba16float\" }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst uData = /* @__PURE__ */ new ArrayBuffer(256);\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tfView[0] = threshold;\n\t\tuView[1] = mode === \"trigger\" ? 1 : mode === \"toggle\" ? 2 : 0;\n\t\tfView[2] = invert ? 1 : 0;\n\t\tuView[3] = holdFrames;\n\t\tfView[4] = 1 / Math.max(1, width);\n\t\tif (!res.uniformBuffer || res.uniformBuffer.size < 256) {\n\t\t\tres.uniformBuffer = device.createBuffer({\n\t\t\t\tsize: 256,\n\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: `signal_gate_uniform_${nodeId}`\n\t\t\t});\n\t\t\tres.bindGroup = void 0;\n\t\t}\n\t\tdevice.queue.writeBuffer(res.uniformBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: res.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: viewIn\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: `signal_gate_pass_${nodeId}`,\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: res.textureView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t\tthis.setStats(nodeId, {\n\t\t\tmin: 0,\n\t\t\tmax: 1\n\t\t});\n\t}\n\tdispatch1DGateSignal(device, encoder, res, bufIn, sd, _elapsedTime, _duration, numSamples, sampleRate, _frame, fps) {\n\t\tconst dr = this.getDeviceResources(device);\n\t\tconst cfg = sd.signalConfig;\n\t\tconst threshold = Number(sd.threshold ?? cfg?.threshold ?? .5);\n\t\tconst mode = sd.mode ?? cfg?.mode ?? \"gate\";\n\t\tconst invert = Boolean(sd.invert ?? cfg?.invert ?? false);\n\t\tconst holdFrames = Math.max(1, Number(sd.holdFrames ?? cfg?.holdFrames ?? 4));\n\t\tconst debounceMs = Number(sd.debounceMs ?? cfg?.debounceMs ?? 100);\n\t\tconst debounceSamples = Math.max(1, Math.round(debounceMs / 1e3 * sampleRate));\n\t\tconst effectiveFps = fps ?? 24;\n\t\tconst holdSamples = Math.max(1, Math.round(holdFrames / effectiveFps * sampleRate));\n\t\tconst shaderKey = `1d_gate_${mode}_${threshold}_${invert}`;\n\t\tlet pipeline = dr.pipelineCache.get(shaderKey);\n\t\tif (!pipeline) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `signal_1d_gate.wgsl`,\n\t\t\t\tcode: `\nstruct Gate1DUniforms {\n threshold : f32,\n mode : u32,\n invert : f32,\n holdSamples : u32,\n debounceSamples : u32,\n numSamples : u32,\n pad0 : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Gate1DUniforms;\n@group(0) @binding(1) var<storage, read> bufIn : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outSignal : array<f32>;\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= u.numSamples) { return; }\n\n var high: f32 = 0.0f;\n if (u.mode == 0u) {\n let cur = bufIn[idx];\n high = select(0.0f, 1.0f, cur >= u.threshold);\n } else if (u.mode == 1u) {\n let max_scan = min(idx, u.holdSamples);\n for (var i = 0u; i <= max_scan; i = i + 1u) {\n let cur_idx = idx - i;\n let cur = bufIn[cur_idx];\n var prev = 0.0f;\n if (cur_idx > 0u) {\n prev = bufIn[cur_idx - 1u];\n }\n if (cur >= u.threshold && prev < u.threshold) {\n high = 1.0f;\n break;\n }\n }\n } else {\n var count = 0u;\n var last_trigger = 0u;\n var has_triggered = false;\n for (var i = 0u; i <= idx; i = i + 1u) {\n let cur = bufIn[i];\n var prev = 0.0f;\n if (i > 0u) {\n prev = bufIn[i - 1u];\n }\n if (cur >= u.threshold && prev < u.threshold) {\n if (!has_triggered || (i - last_trigger) >= u.debounceSamples) {\n count = count + 1u;\n last_trigger = i;\n has_triggered = true;\n }\n }\n }\n high = select(0.0f, 1.0f, (count % 2u) == 1u);\n }\n\n if (u.invert > 0.5f) {\n high = 1.0f - high;\n }\n outSignal[idx] = high;\n}\n`\n\t\t\t});\n\t\t\tpipeline = device.createComputePipeline({\n\t\t\t\tlabel: `Signal1DGatePipeline_${mode}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tdr.pipelineCache.set(shaderKey, pipeline);\n\t\t}\n\t\tconst uData = /* @__PURE__ */ new ArrayBuffer(256);\n\t\tconst fView = new Float32Array(uData);\n\t\tconst uView = new Uint32Array(uData);\n\t\tfView[0] = threshold;\n\t\tuView[1] = mode === \"trigger\" ? 1 : mode === \"toggle\" ? 2 : 0;\n\t\tfView[2] = invert ? 1 : 0;\n\t\tuView[3] = holdSamples;\n\t\tuView[4] = debounceSamples;\n\t\tuView[5] = numSamples;\n\t\tconst uniformBuffer = device.createBuffer({\n\t\t\tsize: 256,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"gate_1d_uniform\"\n\t\t});\n\t\tdevice.queue.writeBuffer(uniformBuffer, 0, uData);\n\t\tconst bindGroup = device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: bufIn }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: res.buffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginComputePass({ label: \"gate_1d_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(numSamples / 64));\n\t\tpass.end();\n\t}\n};\nfunction buildSignalMathExpression(operation, customWGSL) {\n\tswitch (operation) {\n\t\tcase \"remap\": return {\n\t\t\tevalExpr: \"mix(u.outMin, u.outMax, clamp((a - u.inMin) / max(1e-5, u.inMax - u.inMin), 0.0, 1.0))\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"normalize\": return {\n\t\t\tevalExpr: \"clamp((a - u.a_min) / max(1e-5, u.a_max - u.a_min), 0.0, 1.0)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"add\": return {\n\t\t\tevalExpr: \"a + b\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"subtract\": return {\n\t\t\tevalExpr: \"a - b\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"multiply\": return {\n\t\t\tevalExpr: \"a * b\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"divide\": return {\n\t\t\tevalExpr: \"a / select(b, 1e-5, abs(b) < 1e-5)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"invert\": return {\n\t\t\tevalExpr: \"1.0 - a\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"clamp\": return {\n\t\t\tevalExpr: \"clamp(a, u.clampMin, u.clampMax)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"power\": return {\n\t\t\tevalExpr: \"pow(max(0.0, a), u.exponent)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"smoothstep\": return {\n\t\t\tevalExpr: \"smoothstep(u.edge0, u.edge1, a)\",\n\t\t\textraFn: \"\"\n\t\t};\n\t\tcase \"custom\": return {\n\t\t\textraFn: `\\nfn user_signal_calc(a: f32, b: f32, a_min: f32, a_max: f32, t: f32, t_norm: f32, frame: u32) -> f32 {\\n${customWGSL}\\n}\\n`,\n\t\t\tevalExpr: \"user_signal_calc(a, b, a_min, a_max, t, t_norm, frame)\"\n\t\t};\n\t\tdefault: return {\n\t\t\tevalExpr: \"a\",\n\t\t\textraFn: \"\"\n\t\t};\n\t}\n}\nfunction resolveSignalBValue(sd) {\n\tif (typeof sd.signalB === \"number\" && !Number.isNaN(sd.signalB)) return sd.signalB;\n\tif (sd.signalB && typeof sd.signalB === \"object\" && typeof sd.signalB.value === \"number\" && !Number.isNaN(sd.signalB.value)) return sd.signalB.value;\n\tif (typeof sd.bValue === \"number\" && !Number.isNaN(sd.bValue)) return sd.bValue;\n\tconst cfg = sd.signalConfig;\n\tif (typeof cfg?.bValue === \"number\" && !Number.isNaN(cfg.bValue)) return cfg.bValue;\n\treturn 1;\n}\nfunction computeSignalMathStats(operation, aMin, aMax, sd, hasSignalB, statsB) {\n\tconst cfg = sd.signalConfig;\n\tswitch (operation) {\n\t\tcase \"remap\": {\n\t\t\tconst outMin = Number(sd.outMin ?? cfg?.outMin ?? 0);\n\t\t\tconst outMax = Number(sd.outMax ?? cfg?.outMax ?? 1);\n\t\t\treturn {\n\t\t\t\tmin: Math.min(outMin, outMax),\n\t\t\t\tmax: Math.max(outMin, outMax)\n\t\t\t};\n\t\t}\n\t\tcase \"normalize\": return {\n\t\t\tmin: 0,\n\t\t\tmax: 1\n\t\t};\n\t\tcase \"invert\": return {\n\t\t\tmin: 1 - aMax,\n\t\t\tmax: 1 - aMin\n\t\t};\n\t\tcase \"clamp\": return {\n\t\t\tmin: Number(sd.clampMin ?? cfg?.clampMin ?? 0),\n\t\t\tmax: Number(sd.clampMax ?? cfg?.clampMax ?? 1)\n\t\t};\n\t\tcase \"power\": {\n\t\t\tconst exp = Number(sd.exponent ?? cfg?.exponent ?? 2);\n\t\t\treturn {\n\t\t\t\tmin: Math.max(0, aMin) ** exp,\n\t\t\t\tmax: Math.max(0, aMax) ** exp\n\t\t\t};\n\t\t}\n\t\tcase \"add\": {\n\t\t\tif (hasSignalB && statsB) return {\n\t\t\t\tmin: aMin + statsB.min,\n\t\t\t\tmax: aMax + statsB.max\n\t\t\t};\n\t\t\tconst b = hasSignalB ? 0 : resolveSignalBValue(sd);\n\t\t\treturn {\n\t\t\t\tmin: aMin + b,\n\t\t\t\tmax: aMax + b\n\t\t\t};\n\t\t}\n\t\tcase \"subtract\": {\n\t\t\tif (hasSignalB && statsB) return {\n\t\t\t\tmin: aMin - statsB.max,\n\t\t\t\tmax: aMax - statsB.min\n\t\t\t};\n\t\t\tconst b = hasSignalB ? 0 : resolveSignalBValue(sd);\n\t\t\treturn {\n\t\t\t\tmin: aMin - b,\n\t\t\t\tmax: aMax - b\n\t\t\t};\n\t\t}\n\t\tcase \"multiply\": {\n\t\t\tif (hasSignalB && statsB) {\n\t\t\t\tconst vals = [\n\t\t\t\t\taMin * statsB.min,\n\t\t\t\t\taMin * statsB.max,\n\t\t\t\t\taMax * statsB.min,\n\t\t\t\t\taMax * statsB.max\n\t\t\t\t];\n\t\t\t\treturn {\n\t\t\t\t\tmin: Math.min(...vals),\n\t\t\t\t\tmax: Math.max(...vals)\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst b = hasSignalB ? 1 : resolveSignalBValue(sd);\n\t\t\treturn {\n\t\t\t\tmin: Math.min(aMin * b, aMax * b),\n\t\t\t\tmax: Math.max(aMin * b, aMax * b)\n\t\t\t};\n\t\t}\n\t\tcase \"divide\": {\n\t\t\tif (hasSignalB && statsB) {\n\t\t\t\tconst safeMin = Math.abs(statsB.min) < 1e-5 ? 1e-5 : statsB.min;\n\t\t\t\tconst safeMax = Math.abs(statsB.max) < 1e-5 ? 1e-5 : statsB.max;\n\t\t\t\tconst vals = [\n\t\t\t\t\taMin / safeMin,\n\t\t\t\t\taMin / safeMax,\n\t\t\t\t\taMax / safeMin,\n\t\t\t\t\taMax / safeMax\n\t\t\t\t];\n\t\t\t\treturn {\n\t\t\t\t\tmin: Math.min(...vals),\n\t\t\t\t\tmax: Math.max(...vals)\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst b = hasSignalB ? 1 : resolveSignalBValue(sd);\n\t\t\tconst safeB = Math.abs(b) < 1e-5 ? 1e-5 : b;\n\t\t\treturn {\n\t\t\t\tmin: Math.min(aMin / safeB, aMax / safeB),\n\t\t\t\tmax: Math.max(aMin / safeB, aMax / safeB)\n\t\t\t};\n\t\t}\n\t\tdefault: return {\n\t\t\tmin: 0,\n\t\t\tmax: 1\n\t\t};\n\t}\n}\nconst signalRegistry = new SignalRegistry();\n\n//#endregion\n//#region src/audio/webgpu-audio-processor.ts\nconst yieldToMain = () => {\n\tif (typeof window === \"undefined\") return Promise.resolve();\n\tconst sched = globalThis.scheduler;\n\treturn typeof sched?.yield === \"function\" ? sched.yield() : new Promise((resolve) => setTimeout(resolve, 0));\n};\nvar WebGPUAudioProcessor = class WebGPUAudioProcessor {\n\tstatic devicePipelineCache = /* @__PURE__ */ new WeakMap();\n\tstatic getDeviceCache(device) {\n\t\tlet cache = WebGPUAudioProcessor.devicePipelineCache.get(device);\n\t\tif (!cache) {\n\t\t\tcache = /* @__PURE__ */ new Map();\n\t\t\tWebGPUAudioProcessor.devicePipelineCache.set(device, cache);\n\t\t}\n\t\treturn cache;\n\t}\n\tstatic getCache(device, renderId, nodeId, activeSignalsKey = \"\", stateFloatCount = 1) {\n\t\tconst cacheKey = `${renderId ?? \"global\"}_${nodeId}_${activeSignalsKey}_${stateFloatCount}`;\n\t\treturn WebGPUAudioProcessor.devicePipelineCache.get(device)?.get(cacheKey);\n\t}\n\tstatic clearCache(renderId, device) {\n\t\tif (!device) return;\n\t\tconst cache = WebGPUAudioProcessor.devicePipelineCache.get(device);\n\t\tif (!cache) return;\n\t\tconst prefix = `${renderId}_`;\n\t\tfor (const [key, cached$1] of cache.entries()) if (key.startsWith(prefix)) {\n\t\t\tcached$1.stateBuffer.destroy();\n\t\t\tcached$1.inputBuffer?.destroy();\n\t\t\tcached$1.outputBuffer?.destroy();\n\t\t\tcached$1.uniformBuffer?.destroy();\n\t\t\tcache.delete(key);\n\t\t}\n\t}\n\tstatic async process(device, nodeId, channels, _sampleRate, virtualMedia, frame, fps, shaderTemplate, getUniforms, uniformsFloatCount, stateFloatCount = 1, renderId, isStatic = false, elapsedMs, durationMs, initialState, stateUpdate, paramOrder) {\n\t\tconst numChannels = channels.length;\n\t\tif (numChannels === 0) return;\n\t\tconst numSamples = channels[0].length;\n\t\tif (numSamples === 0) return;\n\t\tconst elapsedSeconds = elapsedMs !== void 0 ? elapsedMs / 1e3 : frame / fps;\n\t\tconst durationSeconds = durationMs !== void 0 ? durationMs / 1e3 : 0;\n\t\tconst activeBindings = [];\n\t\tlet makeupGainModulation = \"\";\n\t\tlet customSignalWGSL = \"\";\n\t\tconst signalBuffers = [];\n\t\tconst signalBufferMap = /* @__PURE__ */ new Map();\n\t\tconst op = virtualMedia.operation;\n\t\tif (op?.inputs) {\n\t\t\tfor (const inputEntry of Object.values(op.inputs)) if (inputEntry?.connectionValid && inputEntry.outputItem && inputEntry.outputItem.type === \"Signal\") {\n\t\t\t\tconst sd = inputEntry.outputItem.data;\n\t\t\t\tif (sd) await signalRegistry.ensureAudioSourcesExtracted(device, sd, fps, renderId);\n\t\t\t}\n\t\t\tfor (const [key, val] of Object.entries(op)) if (key.endsWith(\"HandleId\") && val) {\n\t\t\t\tconst handleId = val;\n\t\t\t\tconst inputEntry = op.inputs[handleId];\n\t\t\t\tif (inputEntry?.connectionValid && inputEntry.outputItem && inputEntry.outputItem.type === \"Signal\") {\n\t\t\t\t\tconst sd = inputEntry.outputItem.data;\n\t\t\t\t\tif (sd) {\n\t\t\t\t\t\tconst paramName = key.replace(\"HandleId\", \"\");\n\t\t\t\t\t\tif (isStatic) {\n\t\t\t\t\t\t\tactiveBindings.push({\n\t\t\t\t\t\t\t\tparameterName: paramName,\n\t\t\t\t\t\t\t\tsignalNodeId: sd.nodeId ?? \"sig\",\n\t\t\t\t\t\t\t\tsignalFnName: sd.signalFnName ?? sd.name ?? \"sig_fn\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tconst commandEncoder = device.createCommandEncoder();\n\t\t\t\t\t\t\tconst buf = signalRegistry.getOrCreate1DBuffer(device, commandEncoder, sd.nodeId ?? \"sig\", elapsedSeconds, durationSeconds, sd, numSamples, _sampleRate, renderId, frame, fps);\n\t\t\t\t\t\t\tdevice.queue.submit([commandEncoder.finish()]);\n\t\t\t\t\t\t\tsignalBufferMap.set(paramName, buf);\n\t\t\t\t\t\t\tif (!paramOrder) signalBuffers.push(buf);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst signalNodeId = sd.nodeId;\n\t\t\t\t\t\t\tif (signalNodeId) {\n\t\t\t\t\t\t\t\tconst registered = shaderStore.get(signalNodeId, renderId);\n\t\t\t\t\t\t\t\tif (registered) {\n\t\t\t\t\t\t\t\t\tactiveBindings.push({\n\t\t\t\t\t\t\t\t\t\tparameterName: paramName,\n\t\t\t\t\t\t\t\t\t\tsignalNodeId,\n\t\t\t\t\t\t\t\t\t\tsignalFnName: registered.name\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tcustomSignalWGSL += `\\n${registered.wgsl}`;\n\t\t\t\t\t\t\t\t\tconst paramVals = [];\n\t\t\t\t\t\t\t\t\tfor (const p of registered.fnParams) {\n\t\t\t\t\t\t\t\t\t\tconst v = p.defaultValue;\n\t\t\t\t\t\t\t\t\t\tparamVals.push(v % 1 === 0 ? `${v.toFixed(1)}f` : `${v}f`);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\t\t\t\t\"t\",\n\t\t\t\t\t\t\t\t\t\t\"0.0\",\n\t\t\t\t\t\t\t\t\t\t\"0.0\",\n\t\t\t\t\t\t\t\t\t\t\"0.0\",\n\t\t\t\t\t\t\t\t\t\t\"index\",\n\t\t\t\t\t\t\t\t\t\t\"numSamples\",\n\t\t\t\t\t\t\t\t\t\t\"frame\",\n\t\t\t\t\t\t\t\t\t\t\"vec4<f32>(0.0)\",\n\t\t\t\t\t\t\t\t\t\t`(${elapsedSeconds.toFixed(6)}f + f32(index) / u.sampleRate)`,\n\t\t\t\t\t\t\t\t\t\t`${durationSeconds.toFixed(6)}f`,\n\t\t\t\t\t\t\t\t\t\t...paramVals\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tif (paramName === \"makeupGain\") makeupGainModulation += `\n\t\t\tlet sigVal_${signalNodeId} = ${registered.name}(${args.join(\", \")});\n\t\t\tdynamicMakeupGain = dynamicMakeupGain + sigVal_${signalNodeId};\n\t\t\t\t\t\t\t\t\t\t\t`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst fullShaderCode = shaderTemplate(isStatic ? {\n\t\t\tcustomSignalWGSL: \"\",\n\t\t\tmakeupGainModulation: \"\"\n\t\t} : {\n\t\t\tcustomSignalWGSL,\n\t\t\tmakeupGainModulation\n\t\t});\n\t\tconst hasBinding = (idx) => (/* @__PURE__ */ new RegExp(`@binding\\\\s*\\\\(\\\\s*${idx}\\\\s*\\\\)`)).test(fullShaderCode);\n\t\tif (isStatic) {\n\t\t\tif (paramOrder && paramOrder.length > 0) for (let i = 0; i < paramOrder.length; i++) {\n\t\t\t\tconst p = paramOrder[i];\n\t\t\t\tconst buf = signalBufferMap.get(p);\n\t\t\t\tif (buf) signalBuffers.push(buf);\n\t\t\t\telse if (hasBinding(4 + i)) signalBuffers.push(signalRegistry.getDummyBuffer(device));\n\t\t\t}\n\t\t\telse if (signalBuffers.length === 0 && hasBinding(4)) signalBuffers.push(signalRegistry.getDummyBuffer(device));\n\t\t}\n\t\tconst activeSignalsKey = activeBindings.map((b) => `${b.parameterName}:${b.signalNodeId}`).join(\",\");\n\t\tconst cacheKey = `${renderId ?? \"global\"}_${nodeId}_${activeSignalsKey}_${stateFloatCount}`;\n\t\tconst deviceCache = WebGPUAudioProcessor.getDeviceCache(device);\n\t\tlet cached$1 = deviceCache.get(cacheKey);\n\t\tif (!cached$1) {\n\t\t\tconst shaderModule = device.createShaderModule({\n\t\t\t\tlabel: `audio_shader_${nodeId}.wgsl`,\n\t\t\t\tcode: fullShaderCode\n\t\t\t});\n\t\t\tconst pipeline = device.createComputePipeline({\n\t\t\t\tlabel: `AudioComputePipeline_${nodeId}`,\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst stateBuffer = device.createBuffer({\n\t\t\t\tsize: stateFloatCount * 4,\n\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: `audio_state_${nodeId}`\n\t\t\t});\n\t\t\tconst initialData = new Float32Array(stateFloatCount);\n\t\t\tif (initialState) initialData.set(initialState, 0);\n\t\t\tif (stateUpdate) initialData.set(stateUpdate, 0);\n\t\t\tdevice.queue.writeBuffer(stateBuffer, 0, initialData);\n\t\t\tcached$1 = {\n\t\t\t\tpipeline,\n\t\t\t\tstateBuffer,\n\t\t\t\tactiveSignalsKey\n\t\t\t};\n\t\t\tdeviceCache.set(cacheKey, cached$1);\n\t\t} else if (stateUpdate) device.queue.writeBuffer(cached$1.stateBuffer, 0, stateUpdate);\n\t\tconst CHUNK_SIZE = 65536;\n\t\tfor (let offset = 0; offset < numSamples; offset += CHUNK_SIZE) {\n\t\t\tconst chunkSamples = Math.min(CHUNK_SIZE, numSamples - offset);\n\t\t\tconst canReuse = cached$1.inputBuffer && cached$1.outputBuffer && cached$1.uniformBuffer && cached$1.allocatedSamples && cached$1.allocatedSamples >= chunkSamples && cached$1.allocatedChannels && cached$1.allocatedChannels >= numChannels && cached$1.allocatedUniformsFloatCount && cached$1.allocatedUniformsFloatCount >= uniformsFloatCount;\n\t\t\tlet inputBuffer;\n\t\t\tlet outputBuffer;\n\t\t\tlet uniformBuffer;\n\t\t\tif (canReuse) {\n\t\t\t\tinputBuffer = cached$1.inputBuffer;\n\t\t\t\toutputBuffer = cached$1.outputBuffer;\n\t\t\t\tuniformBuffer = cached$1.uniformBuffer;\n\t\t\t} else {\n\t\t\t\tconst allocSamples = Math.max(chunkSamples, CHUNK_SIZE);\n\t\t\t\tconst allocChannels = numChannels;\n\t\t\t\tconst allocUniforms = uniformsFloatCount;\n\t\t\t\tconst freshInput = device.createBuffer({\n\t\t\t\t\tsize: allocChannels * allocSamples * 4,\n\t\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\t\t\tlabel: `audio_input_temp_${nodeId}_chunk_${offset}`\n\t\t\t\t});\n\t\t\t\tconst freshOutput = device.createBuffer({\n\t\t\t\t\tsize: allocChannels * allocSamples * 4,\n\t\t\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n\t\t\t\t\tlabel: `audio_output_temp_${nodeId}_chunk_${offset}`\n\t\t\t\t});\n\t\t\t\tconst freshUniform = device.createBuffer({\n\t\t\t\t\tsize: allocUniforms * 4,\n\t\t\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\t\t\tlabel: `audio_uniforms_temp_${nodeId}_chunk_${offset}`\n\t\t\t\t});\n\t\t\t\tinputBuffer = freshInput;\n\t\t\t\toutputBuffer = freshOutput;\n\t\t\t\tuniformBuffer = freshUniform;\n\t\t\t\tcached$1.inputBuffer?.destroy();\n\t\t\t\tcached$1.outputBuffer?.destroy();\n\t\t\t\tcached$1.uniformBuffer?.destroy();\n\t\t\t\tcached$1.inputBuffer = freshInput;\n\t\t\t\tcached$1.outputBuffer = freshOutput;\n\t\t\t\tcached$1.uniformBuffer = freshUniform;\n\t\t\t\tcached$1.allocatedSamples = allocSamples;\n\t\t\t\tcached$1.allocatedChannels = allocChannels;\n\t\t\t\tcached$1.allocatedUniformsFloatCount = allocUniforms;\n\t\t\t}\n\t\t\tconst stagingBuffer = device.createBuffer({\n\t\t\t\tsize: numChannels * chunkSamples * 4,\n\t\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n\t\t\t\tlabel: `audio_staging_temp_${nodeId}_chunk_${offset}`\n\t\t\t});\n\t\t\tconst entries = [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: inputBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: outputBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: cached$1.stateBuffer }\n\t\t\t\t}\n\t\t\t];\n\t\t\tif (isStatic) for (let i = 0; i < signalBuffers.length; i++) {\n\t\t\t\tconst bindingIndex = 4 + i;\n\t\t\t\tif (hasBinding(bindingIndex)) {\n\t\t\t\t\tconst sigBuf = signalBuffers[i];\n\t\t\t\t\tif (sigBuf.size >= (offset + chunkSamples) * 4) entries.push({\n\t\t\t\t\t\tbinding: bindingIndex,\n\t\t\t\t\t\tresource: {\n\t\t\t\t\t\t\tbuffer: sigBuf,\n\t\t\t\t\t\t\toffset: offset * 4,\n\t\t\t\t\t\t\tsize: chunkSamples * 4\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\telse entries.push({\n\t\t\t\t\t\tbinding: bindingIndex,\n\t\t\t\t\t\tresource: {\n\t\t\t\t\t\t\tbuffer: sigBuf,\n\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\tsize: sigBuf.size\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst bindGroup = device.createBindGroup({\n\t\t\t\tlayout: cached$1.pipeline.getBindGroupLayout(0),\n\t\t\t\tentries\n\t\t\t});\n\t\t\tconst flatInput = new Float32Array(numChannels * chunkSamples);\n\t\t\tfor (let c = 0; c < numChannels; c++) flatInput.set(channels[c].subarray(offset, offset + chunkSamples), c * chunkSamples);\n\t\t\tdevice.queue.writeBuffer(inputBuffer, 0, flatInput);\n\t\t\tconst uniforms = getUniforms(frame / fps + offset / _sampleRate);\n\t\t\tlet numSamplesIndex = -1;\n\t\t\tfor (let i = uniforms.length - 2; i >= 0; i--) if (uniforms[i] === numSamples && uniforms[i + 1] === numChannels) {\n\t\t\t\tnumSamplesIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (numSamplesIndex === -1) numSamplesIndex = uniforms.indexOf(numSamples);\n\t\t\tif (numSamplesIndex !== -1) uniforms[numSamplesIndex] = chunkSamples;\n\t\t\tdevice.queue.writeBuffer(uniformBuffer, 0, new Float32Array(uniforms));\n\t\t\tconst commandEncoder = device.createCommandEncoder({ label: `audio_encoder_${nodeId}_chunk_${offset}` });\n\t\t\tconst passEncoder = commandEncoder.beginComputePass({ label: `audio_pass_${nodeId}_chunk_${offset}` });\n\t\t\tpassEncoder.setPipeline(cached$1.pipeline);\n\t\t\tpassEncoder.setBindGroup(0, bindGroup);\n\t\t\tpassEncoder.dispatchWorkgroups(1);\n\t\t\tpassEncoder.end();\n\t\t\tcommandEncoder.copyBufferToBuffer(outputBuffer, 0, stagingBuffer, 0, numChannels * chunkSamples * 4);\n\t\t\tdevice.queue.submit([commandEncoder.finish()]);\n\t\t\tawait stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\t\tconst mappedRange = new Float32Array(stagingBuffer.getMappedRange());\n\t\t\tfor (let c = 0; c < numChannels; c++) channels[c].set(mappedRange.subarray(c * chunkSamples, (c + 1) * chunkSamples), offset);\n\t\t\tstagingBuffer.unmap();\n\t\t\tawait yieldToMain();\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/audio/audio-latent-engine.ts\nconst FFT_SIZE = 2048;\nconst NUM_BINS = 1024;\nconst AUDIO_LATENT_BUFFER_SIZE = (NUM_BINS + 4) * 4;\nconst HANN_WINDOW = new Float32Array(FFT_SIZE);\nfor (let n = 0; n < FFT_SIZE; n++) HANN_WINDOW[n] = .5 * (1 - Math.cos(2 * Math.PI * n / (FFT_SIZE - 1)));\nconst BIT_REVERSE = new Uint16Array(FFT_SIZE);\nfor (let i = 0; i < FFT_SIZE; i++) {\n\tlet rev = 0;\n\tlet val = i;\n\tfor (let j = 0; j < 11; j++) {\n\t\trev = rev << 1 | val & 1;\n\t\tval >>= 1;\n\t}\n\tBIT_REVERSE[i] = rev;\n}\nconst COS_TABLE = new Float32Array(FFT_SIZE / 2);\nconst SIN_TABLE = new Float32Array(FFT_SIZE / 2);\nfor (let k = 0; k < FFT_SIZE / 2; k++) {\n\tconst angle = -2 * Math.PI * k / FFT_SIZE;\n\tCOS_TABLE[k] = Math.cos(angle);\n\tSIN_TABLE[k] = Math.sin(angle);\n}\n/**\n* Computes in-place 2048-point Radix-2 Cooley-Tukey FFT.\n* Accepts real and imaginary Float32Array buffers of length 2048.\n*/\nfunction computeFFT2048(real, imag) {\n\tfor (let i = 0; i < FFT_SIZE; i++) {\n\t\tconst j = BIT_REVERSE[i] ?? 0;\n\t\tif (j > i) {\n\t\t\tconst tr = real[i] ?? 0;\n\t\t\treal[i] = real[j] ?? 0;\n\t\t\treal[j] = tr;\n\t\t\tconst ti = imag[i] ?? 0;\n\t\t\timag[i] = imag[j] ?? 0;\n\t\t\timag[j] = ti;\n\t\t}\n\t}\n\tfor (let len = 2; len <= FFT_SIZE; len <<= 1) {\n\t\tconst halfLen = len >> 1;\n\t\tconst step = FFT_SIZE / len;\n\t\tfor (let i = 0; i < FFT_SIZE; i += len) for (let k = 0; k < halfLen; k++) {\n\t\t\tconst twiddleIdx = k * step;\n\t\t\tconst cos = COS_TABLE[twiddleIdx] ?? 1;\n\t\t\tconst sin = SIN_TABLE[twiddleIdx] ?? 0;\n\t\t\tconst uReal = real[i + k] ?? 0;\n\t\t\tconst uImag = imag[i + k] ?? 0;\n\t\t\tconst vReal = real[i + k + halfLen] ?? 0;\n\t\t\tconst vImag = imag[i + k + halfLen] ?? 0;\n\t\t\tconst tReal = vReal * cos - vImag * sin;\n\t\t\tconst tImag = vReal * sin + vImag * cos;\n\t\t\treal[i + k] = uReal + tReal;\n\t\t\timag[i + k] = uImag + tImag;\n\t\t\treal[i + k + halfLen] = uReal - tReal;\n\t\t\timag[i + k + halfLen] = uImag - tImag;\n\t\t}\n\t}\n}\n/**\n* Fast Audio Latent and Spectral Vector Processor.\n*/\nvar AudioLatentEngine = class AudioLatentEngine {\n\ttempReal = new Float32Array(FFT_SIZE);\n\ttempImag = new Float32Array(FFT_SIZE);\n\tpreviousBins = new Float32Array(NUM_BINS);\n\t/**\n\t* Extracts 1024-band FFT and audio latent energies at a specific playback time.\n\t*/\n\textractAtTime(channels, sampleRate, timeSec) {\n\t\tconst numChannels = channels.length;\n\t\tconst totalSamples = numChannels > 0 ? channels[0]?.length ?? 0 : 0;\n\t\tconst startSample = Math.round(timeSec * sampleRate) - (FFT_SIZE >> 1);\n\t\tfor (let i = 0; i < FFT_SIZE; i++) {\n\t\t\tconst sampleIdx = startSample + i;\n\t\t\tlet sampleVal = 0;\n\t\t\tif (sampleIdx >= 0 && sampleIdx < totalSamples) {\n\t\t\t\tif (numChannels === 1) sampleVal = channels[0]?.[sampleIdx] ?? 0;\n\t\t\t\telse if (numChannels >= 2) sampleVal = ((channels[0]?.[sampleIdx] ?? 0) + (channels[1]?.[sampleIdx] ?? 0)) * .5;\n\t\t\t}\n\t\t\tthis.tempReal[i] = sampleVal * (HANN_WINDOW[i] ?? 1);\n\t\t\tthis.tempImag[i] = 0;\n\t\t}\n\t\tcomputeFFT2048(this.tempReal, this.tempImag);\n\t\tconst fftBins = new Float32Array(NUM_BINS);\n\t\tconst normFactor = 2 / FFT_SIZE;\n\t\tfor (let k = 0; k < NUM_BINS; k++) {\n\t\t\tconst r = this.tempReal[k] ?? 0;\n\t\t\tconst im = this.tempImag[k] ?? 0;\n\t\t\tfftBins[k] = Math.sqrt(r * r + im * im) * normFactor * 2;\n\t\t}\n\t\tconst hzPerBin = sampleRate / FFT_SIZE;\n\t\tconst bassStartBin = Math.max(1, Math.round(20 / hzPerBin));\n\t\tconst bassEndBin = Math.max(bassStartBin + 1, Math.round(150 / hzPerBin));\n\t\tlet bassSum = 0;\n\t\tfor (let k = bassStartBin; k <= bassEndBin && k < NUM_BINS; k++) bassSum += (fftBins[k] ?? 0) * (fftBins[k] ?? 0);\n\t\tconst bassEnergy = Math.min(1, Math.sqrt(bassSum / (bassEndBin - bassStartBin + 1)) * 4);\n\t\tlet fluxSum = 0;\n\t\tfor (let k = 0; k < NUM_BINS; k++) {\n\t\t\tconst diff = (fftBins[k] ?? 0) - (this.previousBins[k] ?? 0);\n\t\t\tif (diff > 0) fluxSum += diff;\n\t\t\tthis.previousBins[k] = fftBins[k] ?? 0;\n\t\t}\n\t\tconst drumTransient = Math.min(1, fluxSum * .15);\n\t\tconst vocalStartBin = Math.round(300 / hzPerBin);\n\t\tconst vocalEndBin = Math.min(NUM_BINS - 1, Math.round(3400 / hzPerBin));\n\t\tlet vocalSum = 0;\n\t\tfor (let k = vocalStartBin; k <= vocalEndBin; k++) vocalSum += (fftBins[k] ?? 0) * (fftBins[k] ?? 0);\n\t\treturn {\n\t\t\tfftBins,\n\t\t\tbassEnergy,\n\t\t\tdrumTransient,\n\t\t\tvocalEnergy: Math.min(1, Math.sqrt(vocalSum / (vocalEndBin - vocalStartBin + 1)) * 3.5),\n\t\t\ttimeMs: timeSec * 1e3\n\t\t};\n\t}\n\t/**\n\t* Packs AudioLatentData into a Float32Array suitable for WebGPU storage buffer upload.\n\t* Struct layout:\n\t* 0..1023: fftBins (array<f32, 1024>)\n\t* 1024: bassEnergy\n\t* 1025: drumTransient\n\t* 1026: vocalEnergy\n\t* 1027: timeMs\n\t*/\n\tstatic packBufferData(data) {\n\t\tconst bufferData = new Float32Array(NUM_BINS + 4);\n\t\tbufferData.set(data.fftBins, 0);\n\t\tbufferData[1024] = data.bassEnergy;\n\t\tbufferData[1025] = data.drumTransient;\n\t\tbufferData[1026] = data.vocalEnergy;\n\t\tbufferData[1027] = data.timeMs;\n\t\treturn bufferData;\n\t}\n\t/**\n\t* Creates a WebGPU GPUBuffer initialized with AudioLatentData.\n\t*/\n\tstatic createGpuBuffer(device, data) {\n\t\tconst rawFloats = data ? AudioLatentEngine.packBufferData(data) : new Float32Array(NUM_BINS + 4);\n\t\tconst buffer = device.createBuffer({\n\t\t\tlabel: \"AudioLatentBuffer\",\n\t\t\tsize: AUDIO_LATENT_BUFFER_SIZE,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(buffer.getMappedRange()).set(rawFloats);\n\t\tbuffer.unmap();\n\t\treturn buffer;\n\t}\n\t/**\n\t* Updates an existing WebGPU AudioLatentBuffer with new frame data.\n\t*/\n\tstatic updateGpuBuffer(device, buffer, data) {\n\t\tconst rawFloats = AudioLatentEngine.packBufferData(data);\n\t\tdevice.queue.writeBuffer(buffer, 0, rawFloats);\n\t}\n};\n/**\n* Cache for a full audio track timeline providing O(1) frame lookup during video rendering.\n*/\nvar AudioLatentTrackCache = class {\n\tframes = [];\n\tgpuBuffers = /* @__PURE__ */ new WeakMap();\n\tconstructor(channels, sampleRate, fps, totalFrames) {\n\t\tthis.channels = channels;\n\t\tthis.sampleRate = sampleRate;\n\t\tthis.fps = fps;\n\t\tthis.totalFrames = totalFrames;\n\t\tconst engine = new AudioLatentEngine();\n\t\tconst sRate = sampleRate || 48e3;\n\t\tconst safeFps = fps || 30;\n\t\tconst channelLength = channels[0]?.length ?? 0;\n\t\tconst fallbackFrames = Math.max(10, Math.ceil(channelLength / sRate * safeFps) + 10);\n\t\tconst safeTotal = typeof totalFrames === \"number\" && Number.isFinite(totalFrames) && totalFrames > 0 ? Math.round(totalFrames) : fallbackFrames;\n\t\tthis.frames = new Array(safeTotal);\n\t\tfor (let f = 0; f < safeTotal; f++) {\n\t\t\tconst timeSec = f / safeFps;\n\t\t\tthis.frames[f] = engine.extractAtTime(channels, sRate, timeSec);\n\t\t}\n\t}\n\tgetFrameData(frame) {\n\t\tconst clampedFrame = Math.max(0, Math.min(this.totalFrames - 1, Math.round(frame)));\n\t\treturn this.frames[clampedFrame] ?? {\n\t\t\tfftBins: new Float32Array(NUM_BINS),\n\t\t\tbassEnergy: 0,\n\t\t\tdrumTransient: 0,\n\t\t\tvocalEnergy: 0,\n\t\t\ttimeMs: clampedFrame / this.fps * 1e3\n\t\t};\n\t}\n\tgetGpuBuffer(device, frame) {\n\t\tlet deviceMap = this.gpuBuffers.get(device);\n\t\tif (!deviceMap) {\n\t\t\tdeviceMap = /* @__PURE__ */ new Map();\n\t\t\tthis.gpuBuffers.set(device, deviceMap);\n\t\t}\n\t\tconst clampedFrame = Math.max(0, Math.min(this.totalFrames - 1, Math.round(frame)));\n\t\tlet buffer = deviceMap.get(clampedFrame);\n\t\tif (!buffer) {\n\t\t\tconst data = this.getFrameData(clampedFrame);\n\t\t\tbuffer = AudioLatentEngine.createGpuBuffer(device, data);\n\t\t\tdeviceMap.set(clampedFrame, buffer);\n\t\t}\n\t\treturn buffer;\n\t}\n};\n\n//#endregion\n//#region src/color.ts\n/**\n* CSS named colors → normalized RGBA.\n* Covers the most commonly used names; hex and functional notation\n* are handled by the parser below.\n*/\nconst NAMED_COLORS = {\n\ttransparent: {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t},\n\tblack: {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t},\n\twhite: {\n\t\tr: 1,\n\t\tg: 1,\n\t\tb: 1,\n\t\ta: 1\n\t},\n\tred: {\n\t\tr: 1,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t},\n\tgreen: {\n\t\tr: 0,\n\t\tg: .502,\n\t\tb: 0,\n\t\ta: 1\n\t},\n\tlime: {\n\t\tr: 0,\n\t\tg: 1,\n\t\tb: 0,\n\t\ta: 1\n\t},\n\tblue: {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 1,\n\t\ta: 1\n\t},\n\tyellow: {\n\t\tr: 1,\n\t\tg: 1,\n\t\tb: 0,\n\t\ta: 1\n\t},\n\tcyan: {\n\t\tr: 0,\n\t\tg: 1,\n\t\tb: 1,\n\t\ta: 1\n\t},\n\taqua: {\n\t\tr: 0,\n\t\tg: 1,\n\t\tb: 1,\n\t\ta: 1\n\t},\n\tmagenta: {\n\t\tr: 1,\n\t\tg: 0,\n\t\tb: 1,\n\t\ta: 1\n\t},\n\tfuchsia: {\n\t\tr: 1,\n\t\tg: 0,\n\t\tb: 1,\n\t\ta: 1\n\t},\n\torange: {\n\t\tr: 1,\n\t\tg: .647,\n\t\tb: 0,\n\t\ta: 1\n\t},\n\tpurple: {\n\t\tr: .502,\n\t\tg: 0,\n\t\tb: .502,\n\t\ta: 1\n\t},\n\tpink: {\n\t\tr: 1,\n\t\tg: .753,\n\t\tb: .796,\n\t\ta: 1\n\t},\n\tgray: {\n\t\tr: .502,\n\t\tg: .502,\n\t\tb: .502,\n\t\ta: 1\n\t},\n\tgrey: {\n\t\tr: .502,\n\t\tg: .502,\n\t\tb: .502,\n\t\ta: 1\n\t}\n};\nconst RGBA_RE = /^rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*([\\d.]+)\\s*)?\\)$/;\nfunction parseHex(hex) {\n\tconst clean = hex.startsWith(\"#\") ? hex.slice(1) : hex;\n\tconst len = clean.length;\n\tif (len === 3) return {\n\t\tr: parseInt(clean[0] + clean[0], 16) / 255,\n\t\tg: parseInt(clean[1] + clean[1], 16) / 255,\n\t\tb: parseInt(clean[2] + clean[2], 16) / 255,\n\t\ta: 1\n\t};\n\tif (len === 4) return {\n\t\tr: parseInt(clean[0] + clean[0], 16) / 255,\n\t\tg: parseInt(clean[1] + clean[1], 16) / 255,\n\t\tb: parseInt(clean[2] + clean[2], 16) / 255,\n\t\ta: parseInt(clean[3] + clean[3], 16) / 255\n\t};\n\tif (len === 6) return {\n\t\tr: parseInt(clean.slice(0, 2), 16) / 255,\n\t\tg: parseInt(clean.slice(2, 4), 16) / 255,\n\t\tb: parseInt(clean.slice(4, 6), 16) / 255,\n\t\ta: 1\n\t};\n\tif (len === 8) return {\n\t\tr: parseInt(clean.slice(0, 2), 16) / 255,\n\t\tg: parseInt(clean.slice(2, 4), 16) / 255,\n\t\tb: parseInt(clean.slice(4, 6), 16) / 255,\n\t\ta: parseInt(clean.slice(6, 8), 16) / 255\n\t};\n\treturn null;\n}\n/**\n* Parse any CSS color string into a normalized {r,g,b,a} Color\n* with channel values in [0,1].\n*\n* Supports:\n* - Hex: #RGB, #RGBA, #RRGGBB, #RRGGBBAA\n* - Functional: rgb(r,g,b), rgba(r,g,b,a)\n* - Named: black, white, red, green, blue, yellow, transparent, etc.\n* - Color objects pass through unchanged.\n*\n* Returns `{ r: 0, g: 0, b: 0, a: 0 }` (transparent black) for\n* null/undefined/unrecognised input.\n*/\nfunction parseColor(color) {\n\tif (color == null) return {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t};\n\tif (typeof color !== \"string\") return color;\n\tconst trimmed = color.trim();\n\tif (trimmed.length === 0) return {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t};\n\tif (trimmed.startsWith(\"#\")) {\n\t\tconst parsed = parseHex(trimmed);\n\t\tif (parsed) return parsed;\n\t}\n\tconst rgbaMatch = RGBA_RE.exec(trimmed);\n\tif (rgbaMatch) return {\n\t\tr: parseInt(rgbaMatch[1], 10) / 255,\n\t\tg: parseInt(rgbaMatch[2], 10) / 255,\n\t\tb: parseInt(rgbaMatch[3], 10) / 255,\n\t\ta: rgbaMatch[4] !== void 0 ? parseFloat(rgbaMatch[4]) : 1\n\t};\n\tconst named = NAMED_COLORS[trimmed.toLowerCase()];\n\tif (named) return { ...named };\n\treturn {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t};\n}\n/**\n* Premultiplies an un-premultiplied (straight) RGBA Color by its alpha channel.\n*/\nfunction premultiplyColor(color) {\n\treturn {\n\t\tr: color.r * color.a,\n\t\tg: color.g * color.a,\n\t\tb: color.b * color.a,\n\t\ta: color.a\n\t};\n}\n\n//#endregion\n//#region src/device.ts\nlet deviceInstance = null;\nlet loadPromise = null;\nasync function acquireDevice(opts) {\n\tif (typeof process !== \"undefined\" && !!process.versions?.node && !globalThis.navigator?.gpu) {\n\t\tconst { create, globals } = await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t\"webgpu\"\n);\n\t\tObject.assign(globalThis, globals);\n\t\tconst flags = [];\n\t\tif (typeof globalThis.navigator === \"undefined\") globalThis.navigator = { gpu: create(flags) };\n\t\telse Object.defineProperty(globalThis.navigator, \"gpu\", {\n\t\t\tvalue: create(flags),\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t});\n\t}\n\tconst adapter = await globalThis.navigator.gpu.requestAdapter({\n\t\tpowerPreference: \"high-performance\",\n\t\t...opts\n\t});\n\tif (!adapter) throw new Error(\"WebGPU not available\");\n\tconst requiredFeatures = [];\n\tif (adapter.features.has(\"float32-filterable\")) requiredFeatures.push(\"float32-filterable\");\n\tconst requiredLimits = {};\n\tif (adapter.limits && Number.isInteger(adapter.limits.maxTextureDimension2D)) requiredLimits.maxTextureDimension2D = Math.min(8192, adapter.limits.maxTextureDimension2D);\n\tif (adapter.limits && Number.isInteger(adapter.limits.maxStorageBuffersPerShaderStage)) requiredLimits.maxStorageBuffersPerShaderStage = Math.min(16, adapter.limits.maxStorageBuffersPerShaderStage);\n\tif (adapter.limits && Number.isInteger(adapter.limits.maxStorageBuffersPerPipelineLayout)) requiredLimits.maxStorageBuffersPerPipelineLayout = Math.min(16, adapter.limits.maxStorageBuffersPerPipelineLayout);\n\treturn adapter.requestDevice({\n\t\trequiredFeatures,\n\t\trequiredLimits\n\t});\n}\nfunction resetDeviceInstance() {\n\tdeviceInstance = null;\n\tloadPromise = null;\n}\nconst ensureDevice = async (opts) => {\n\tif (deviceInstance) return deviceInstance;\n\tif (loadPromise) return loadPromise;\n\tloadPromise = (async () => {\n\t\tconst dev = await acquireDevice(opts);\n\t\tdeviceInstance = dev;\n\t\tdev.lost.then((lostInfo) => {\n\t\t\tif (lostInfo.reason !== \"destroyed\") resetDeviceInstance();\n\t\t});\n\t\treturn dev;\n\t})();\n\treturn loadPromise;\n};\nconst getDevice = () => {\n\tif (!deviceInstance) throw new Error(\"Device not loaded. Call ensureDevice() first!\");\n\treturn deviceInstance;\n};\n\n//#endregion\n//#region src/headless/dom-matrix.ts\n/**\n* Headless DOMMatrix polyfill (2D subset).\n*\n* Installed onto `globalThis` when the runtime has no native DOMMatrix\n* (Node / headless WebGPU). Must mirror the native constructor surface the\n* renderers rely on — in particular the 2D array form\n* `new DOMMatrix([a, b, c, d, e, f])` that `toDOMMatrix` in the compositor\n* renderer uses to materialize pure `Matrix2D` values.\n*\n* (Regression: the array form was previously ignored, silently producing an\n* identity matrix and dropping every layer transform in headless renders.)\n*/\nvar HeadlessDOMMatrix = class HeadlessDOMMatrix {\n\ta = 1;\n\tb = 0;\n\tc = 0;\n\td = 1;\n\te = 0;\n\tf = 0;\n\tconstructor(init) {\n\t\tthis.a = 1;\n\t\tthis.b = 0;\n\t\tthis.c = 0;\n\t\tthis.d = 1;\n\t\tthis.e = 0;\n\t\tthis.f = 0;\n\t\tif (init instanceof HeadlessDOMMatrix) {\n\t\t\tthis.a = init.a;\n\t\t\tthis.b = init.b;\n\t\t\tthis.c = init.c;\n\t\t\tthis.d = init.d;\n\t\t\tthis.e = init.e;\n\t\t\tthis.f = init.f;\n\t\t} else if (Array.isArray(init)) {\n\t\t\tif (init.length === 6) {\n\t\t\t\tthis.a = init[0];\n\t\t\t\tthis.b = init[1];\n\t\t\t\tthis.c = init[2];\n\t\t\t\tthis.d = init[3];\n\t\t\t\tthis.e = init[4];\n\t\t\t\tthis.f = init[5];\n\t\t\t} else if (init.length === 16) {\n\t\t\t\tthis.a = init[0];\n\t\t\t\tthis.b = init[1];\n\t\t\t\tthis.c = init[4];\n\t\t\t\tthis.d = init[5];\n\t\t\t\tthis.e = init[12];\n\t\t\t\tthis.f = init[13];\n\t\t\t}\n\t\t} else if (init && typeof init === \"object\") {\n\t\t\tthis.a = init.a ?? 1;\n\t\t\tthis.b = init.b ?? 0;\n\t\t\tthis.c = init.c ?? 0;\n\t\t\tthis.d = init.d ?? 1;\n\t\t\tthis.e = init.e ?? 0;\n\t\t\tthis.f = init.f ?? 0;\n\t\t}\n\t}\n\tmultiply(other) {\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.a = this.a * other.a + this.c * other.b;\n\t\tm.b = this.b * other.a + this.d * other.b;\n\t\tm.c = this.a * other.c + this.c * other.d;\n\t\tm.d = this.b * other.c + this.d * other.d;\n\t\tm.e = this.a * other.e + this.c * other.f + this.e;\n\t\tm.f = this.b * other.e + this.d * other.f + this.f;\n\t\treturn m;\n\t}\n\tinverse() {\n\t\tconst det = this.a * this.d - this.b * this.c;\n\t\tif (det === 0) throw new Error(\"Matrix is not invertible\");\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.a = this.d / det;\n\t\tm.b = -this.b / det;\n\t\tm.c = -this.c / det;\n\t\tm.d = this.a / det;\n\t\tm.e = (this.c * this.f - this.d * this.e) / det;\n\t\tm.f = (this.b * this.e - this.a * this.f) / det;\n\t\treturn m;\n\t}\n\ttransformPoint(point) {\n\t\treturn {\n\t\t\tx: point.x * this.a + point.y * this.c + this.e,\n\t\t\ty: point.x * this.b + point.y * this.d + this.f\n\t\t};\n\t}\n\ttranslate(x, y) {\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.e = x;\n\t\tm.f = y;\n\t\treturn this.multiply(m);\n\t}\n\tscale(sx, sy) {\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.a = sx;\n\t\tm.d = sy ?? sx;\n\t\treturn this.multiply(m);\n\t}\n\trotate(angle) {\n\t\tconst rad = angle * Math.PI / 180;\n\t\tconst cos = Math.cos(rad);\n\t\tconst sin = Math.sin(rad);\n\t\tconst m = new HeadlessDOMMatrix();\n\t\tm.a = cos;\n\t\tm.b = sin;\n\t\tm.c = -sin;\n\t\tm.d = cos;\n\t\treturn this.multiply(m);\n\t}\n};\n\n//#endregion\n//#region src/headless/init.ts\nasync function initHeadlessWebGPU() {\n\tconst { create, globals } = await import(\n\t\t/* webpackIgnore: true */\n\t\t\"webgpu\"\n);\n\tfor (const [key, value] of Object.entries(globals)) {\n\t\tif (key === \"navigator\") continue;\n\t\ttry {\n\t\t\tglobalThis[key] = value;\n\t\t} catch (e) {\n\t\t\tObject.defineProperty(globalThis, key, {\n\t\t\t\tvalue,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t}\n\tif (!globalThis.navigator?.gpu) {\n\t\tconst gpu = create([]);\n\t\tconsole.log(\"WebGPU created\", gpu);\n\t\tif (!globalThis.navigator) try {\n\t\t\tglobalThis.navigator = { gpu };\n\t\t} catch (e) {\n\t\t\tObject.defineProperty(globalThis, \"navigator\", {\n\t\t\t\tvalue: { gpu },\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t\telse try {\n\t\t\tglobalThis.navigator.gpu = gpu;\n\t\t} catch (e) {\n\t\t\tObject.defineProperty(globalThis.navigator, \"gpu\", {\n\t\t\t\tvalue: gpu,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t}\n\tconst domObj = globalThis;\n\tif (typeof domObj.DOMMatrix === \"undefined\") domObj.DOMMatrix = HeadlessDOMMatrix;\n\tif (typeof domObj.DOMPoint === \"undefined\") domObj.DOMPoint = class DOMPoint$1 {\n\t\tconstructor(x = 0, y = 0, z = 0, w = 1) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\tthis.w = w;\n\t\t}\n\t\tstatic fromPoint(other) {\n\t\t\treturn new DOMPoint$1(other.x ?? 0, other.y ?? 0, other.z ?? 0, other.w ?? 1);\n\t\t}\n\t};\n\tif (typeof globalThis.createImageBitmap === \"undefined\") globalThis.createImageBitmap = async (source) => {\n\t\tconsole.error(\"createImageBitmap called in headless mode. Source:\", source);\n\t\tthrow new Error(\"createImageBitmap is not supported in headless mode. Ensure isHeadless is set to true to use the sharp-based buffer path.\");\n\t};\n}\n\n//#endregion\n//#region src/headless-font-loader.ts\nlet tempDir = null;\nconst fontPathCache = /* @__PURE__ */ new Map();\nconst registeredFonts = /* @__PURE__ */ new Set();\nconst fontPaths = /* @__PURE__ */ new Map();\nconst fontDataCache = /* @__PURE__ */ new Map();\nasync function getLocalFontPath(family, url) {\n\tlet resolvedUrl = url;\n\tif (url.startsWith(\"/\")) if (BASE_URL) resolvedUrl = `${BASE_URL}${url}`;\n\telse {\n\t\tconst fs$2 = await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t\"fs/promises\"\n);\n\t\ttry {\n\t\t\tawait fs$2.access(url);\n\t\t} catch {\n\t\t\tthrow new Error(`Relative font URL \"${url}\" cannot be resolved because BASE_URL is not configured.`);\n\t\t}\n\t}\n\tif (fontPathCache.has(resolvedUrl)) return fontPathCache.get(resolvedUrl);\n\tif (resolvedUrl.startsWith(\"file://\")) try {\n\t\tlet fontPath = new URL(resolvedUrl).pathname;\n\t\tif (process.platform === \"win32\" && fontPath.startsWith(\"/\")) fontPath = fontPath.slice(1);\n\t\tfontPathCache.set(resolvedUrl, fontPath);\n\t\treturn fontPath;\n\t} catch {\n\t\tconst fontPath = resolvedUrl.replace(/^file:\\/\\//, \"\");\n\t\tfontPathCache.set(resolvedUrl, fontPath);\n\t\treturn fontPath;\n\t}\n\tif (!resolvedUrl.startsWith(\"http://\") && !resolvedUrl.startsWith(\"https://\")) return resolvedUrl;\n\tconst fs$1 = await import(\n\t\t/* webpackIgnore: true */\n\t\t\"fs/promises\"\n);\n\tconst path$1 = await import(\n\t\t/* webpackIgnore: true */\n\t\t\"path\"\n);\n\tconst os = await import(\n\t\t/* webpackIgnore: true */\n\t\t\"os\"\n);\n\tif (!tempDir) {\n\t\ttempDir = path$1.join(os.tmpdir(), \"gatewai-fonts\");\n\t\tawait fs$1.mkdir(tempDir, { recursive: true }).catch(() => {});\n\t}\n\tconst safeFamily = family.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n\tconst urlObj = new URL(resolvedUrl);\n\tlet ext = path$1.extname(urlObj.pathname);\n\tif (!ext || ext.length > 5) ext = \".ttf\";\n\tconst destPath = path$1.join(tempDir, `${safeFamily}-${Date.now()}${ext}`);\n\tconst response = await fetch(resolvedUrl);\n\tif (!response.ok) throw new Error(`Failed to fetch font from ${resolvedUrl}: ${response.statusText}`);\n\tconst buffer = await response.arrayBuffer();\n\tawait fs$1.writeFile(destPath, Buffer.from(buffer));\n\tfontPathCache.set(resolvedUrl, destPath);\n\treturn destPath;\n}\nasync function registerHeadlessFont(family, url) {\n\tif (fontPaths.has(family)) return fontPaths.get(family);\n\tconst anyGlobal = globalThis;\n\ttry {\n\t\tconst fontPath = await getLocalFontPath(family, url);\n\t\tfontPaths.set(family, fontPath);\n\t\tconsole.log(`[registerHeadlessFont] Headless font registered: \"${family}\" from URL: ${url} -> saved to local path: ${fontPath}`);\n\t\ttry {\n\t\t\tif (anyGlobal.OffscreenCanvas && typeof anyGlobal.OffscreenCanvas.registerFont === \"function\") {\n\t\t\t\tanyGlobal.OffscreenCanvas.registerFont(fontPath, { family });\n\t\t\t\tregisteredFonts.add(family);\n\t\t\t}\n\t\t} catch (skiaErr) {\n\t\t\tconsole.warn(`[registerHeadlessFont] SkiaCanvas registration failed for \"${family}\" (non-fatal):`, skiaErr);\n\t\t}\n\t\treturn fontPath;\n\t} catch (e) {\n\t\tconsole.warn(`[registerHeadlessFont] Failed to download font \"${family}\" from ${url}:`, e);\n\t}\n}\n/** Local file path of a font registered via {@link registerHeadlessFont}, if any. */\nfunction getHeadlessFontPath(family) {\n\treturn fontPaths.get(family);\n}\nasync function getHeadlessFontData(family) {\n\tconst cached$1 = fontDataCache.get(family);\n\tif (cached$1) return cached$1;\n\tconst path$1 = fontPaths.get(family);\n\tif (path$1) try {\n\t\tconst buf = await (await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t\"fs/promises\"\n)).readFile(path$1);\n\t\tconst uint8 = new Uint8Array(buf.length);\n\t\tuint8.set(buf);\n\t\tconsole.log(`[getHeadlessFontData] Read local font binary for \"${family}\" from: ${path$1} (${uint8.length} bytes)`);\n\t\tfontDataCache.set(family, uint8);\n\t\treturn uint8;\n\t} catch (e) {\n\t\tconsole.warn(`[getHeadlessFontData] Failed to read font file from ${path$1}:`, e);\n\t}\n}\n\n//#endregion\n//#region src/input-store.ts\nvar InputStore = class {\n\tstore = /* @__PURE__ */ new Map();\n\tasync acquire(url) {\n\t\tif (!url) throw new Error(\"Cannot acquire Input for empty URL\");\n\t\tlet resolvedUrl = url;\n\t\tconst isNode = typeof process !== \"undefined\" && Boolean(process.versions?.node);\n\t\tif (!isNode && typeof window !== \"undefined\") {\n\t\t\tif (resolvedUrl.startsWith(\"file://\")) resolvedUrl = resolvedUrl.slice(7);\n\t\t\tif (resolvedUrl.startsWith(\"/\") && !resolvedUrl.startsWith(\"/@fs/\") && !resolvedUrl.startsWith(\"/api/\")) resolvedUrl = \"/@fs\" + resolvedUrl;\n\t\t}\n\t\tlet shared = this.store.get(resolvedUrl);\n\t\tif (!shared) {\n\t\t\tconst promise = (async () => {\n\t\t\t\tconst isLocal = resolvedUrl.startsWith(\"/\") || resolvedUrl.startsWith(\"file://\");\n\t\t\t\tlet source;\n\t\t\t\tif (isNode && isLocal && typeof FilePathSource !== \"undefined\") {\n\t\t\t\t\tlet filePath = resolvedUrl.startsWith(\"file://\") ? resolvedUrl.slice(7) : resolvedUrl;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfilePath = decodeURIComponent(filePath);\n\t\t\t\t\t} catch (_) {}\n\t\t\t\t\tsource = new FilePathSource(filePath);\n\t\t\t\t} else source = new UrlSource(resolvedUrl);\n\t\t\t\treturn new Input({\n\t\t\t\t\tsource,\n\t\t\t\t\tformats: ALL_FORMATS\n\t\t\t\t});\n\t\t\t})();\n\t\t\tpromise.catch(() => {\n\t\t\t\tthis.store.delete(resolvedUrl);\n\t\t\t});\n\t\t\tshared = {\n\t\t\t\tpromise,\n\t\t\t\trefCount: 0\n\t\t\t};\n\t\t\tthis.store.set(resolvedUrl, shared);\n\t\t}\n\t\tshared.refCount++;\n\t\treturn shared.promise;\n\t}\n\trelease(url) {\n\t\tif (!url) return;\n\t\tlet resolvedUrl = url;\n\t\tif (!(typeof process !== \"undefined\" && Boolean(process.versions?.node)) && typeof window !== \"undefined\") {\n\t\t\tif (resolvedUrl.startsWith(\"file://\")) resolvedUrl = resolvedUrl.slice(7);\n\t\t\tif (resolvedUrl.startsWith(\"/\") && !resolvedUrl.startsWith(\"/@fs/\") && !resolvedUrl.startsWith(\"/api/\")) resolvedUrl = \"/@fs\" + resolvedUrl;\n\t\t}\n\t\tconst shared = this.store.get(resolvedUrl);\n\t\tif (!shared) return;\n\t\tshared.refCount--;\n\t\tif (shared.refCount <= 0) {\n\t\t\tthis.store.delete(resolvedUrl);\n\t\t\tshared.promise.then((input) => {\n\t\t\t\ttry {\n\t\t\t\t\tinput.dispose();\n\t\t\t\t} catch (_) {}\n\t\t\t}, () => {});\n\t\t}\n\t}\n};\nconst inputStore = new InputStore();\n\n//#endregion\n//#region src/lut-store.ts\nvar LutStore = class {\n\tdeviceCaches = /* @__PURE__ */ new WeakMap();\n\tdevicePromises = /* @__PURE__ */ new WeakMap();\n\trawDataCache = /* @__PURE__ */ new Map();\n\trawDataPromises = /* @__PURE__ */ new Map();\n\tlisteners = /* @__PURE__ */ new Set();\n\tonChange(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\temit(key) {\n\t\tfor (const listener of this.listeners) try {\n\t\t\tlistener(key);\n\t\t} catch {}\n\t}\n\tgetAnyMatching(prefix, device) {\n\t\tconst cache = this.getCache(device);\n\t\tconst keys = Array.from(cache.keys());\n\t\tfor (let i = keys.length - 1; i >= 0; i--) {\n\t\t\tconst key = keys[i];\n\t\t\tif (key.startsWith(prefix)) return cache.get(key);\n\t\t}\n\t}\n\tgetOrCreateRawDataPromise(key) {\n\t\tlet deferred = this.rawDataPromises.get(key);\n\t\tif (!deferred) {\n\t\t\tlet resolve;\n\t\t\tlet reject;\n\t\t\tdeferred = {\n\t\t\t\tpromise: new Promise((res, rej) => {\n\t\t\t\t\tresolve = res;\n\t\t\t\t\treject = rej;\n\t\t\t\t}),\n\t\t\t\tresolve,\n\t\t\t\treject\n\t\t\t};\n\t\t\tthis.rawDataPromises.set(key, deferred);\n\t\t}\n\t\treturn deferred;\n\t}\n\trejectRawDataPromise(key, error) {\n\t\tconst deferred = this.rawDataPromises.get(key);\n\t\tif (deferred) {\n\t\t\tdeferred.reject(error);\n\t\t\tthis.rawDataPromises.delete(key);\n\t\t}\n\t\tthis.emit(key);\n\t}\n\tgetCache(device) {\n\t\tlet cache = this.deviceCaches.get(device);\n\t\tif (!cache) {\n\t\t\tcache = /* @__PURE__ */ new Map();\n\t\t\tthis.deviceCaches.set(device, cache);\n\t\t}\n\t\treturn cache;\n\t}\n\tgetPromises(device) {\n\t\tlet promises = this.devicePromises.get(device);\n\t\tif (!promises) {\n\t\t\tpromises = /* @__PURE__ */ new Map();\n\t\t\tthis.devicePromises.set(device, promises);\n\t\t}\n\t\treturn promises;\n\t}\n\tget(key, device) {\n\t\treturn this.getCache(device).get(key);\n\t}\n\tset(key, device, lut) {\n\t\tconst cache = this.getCache(device);\n\t\tconst existing = cache.get(key);\n\t\tif (existing && existing !== lut) {\n\t\t\tif (existing.texture !== lut.texture) {\n\t\t\t\tconst oldTex = existing.texture;\n\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\toldTex.destroy();\n\t\t\t\t\t} catch {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t\tif (existing.vertexBuffer !== lut.vertexBuffer) {\n\t\t\t\tconst oldBuf = existing.vertexBuffer;\n\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\toldBuf.destroy();\n\t\t\t\t\t} catch {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t}\n\t\tcache.set(key, lut);\n\t}\n\t/** Get cached raw (device-independent) data for a key. */\n\tgetRawData(key) {\n\t\treturn this.rawDataCache.get(key);\n\t}\n\t/** Get any available raw LUT data from cache. */\n\tgetAnyRawData() {\n\t\tconst values = Array.from(this.rawDataCache.values());\n\t\treturn values[values.length - 1];\n\t}\n\tcreateOrUpdate(key, device, points, size, type) {\n\t\tconst raw = {\n\t\t\tpoints,\n\t\t\tsize,\n\t\t\ttype\n\t\t};\n\t\tthis.rawDataCache.set(key, raw);\n\t\tconst deferred = this.rawDataPromises.get(key);\n\t\tif (deferred) {\n\t\t\tdeferred.resolve(raw);\n\t\t\tthis.rawDataPromises.delete(key);\n\t\t}\n\t\tconst vertices = [];\n\t\tif (type === \"3D\") {\n\t\t\tlet index = 0;\n\t\t\tfor (let b = 0; b < size; b++) for (let g$1 = 0; g$1 < size; g$1++) for (let r = 0; r < size; r++) {\n\t\t\t\tconst inR = r / (size - 1 || 1);\n\t\t\t\tconst inG = g$1 / (size - 1 || 1);\n\t\t\t\tconst inB = b / (size - 1 || 1);\n\t\t\t\tconst outColor = points[index] || [\n\t\t\t\t\tinR,\n\t\t\t\t\tinG,\n\t\t\t\t\tinB\n\t\t\t\t];\n\t\t\t\tindex++;\n\t\t\t\tvertices.push(inR - .5, inG - .5, inB - .5);\n\t\t\t\tvertices.push(outColor[0], outColor[1], outColor[2]);\n\t\t\t}\n\t\t} else for (let i = 0; i < points.length; i++) {\n\t\t\tconst inVal = i / (points.length - 1 || 1);\n\t\t\tconst outColor = points[i];\n\t\t\tvertices.push(inVal - .5, 0, 0);\n\t\t\tvertices.push(outColor[0], outColor[1], outColor[2]);\n\t\t}\n\t\tconst vertexData = new Float32Array(vertices);\n\t\tconst existing = this.get(key, device);\n\t\tlet texture = existing?.texture;\n\t\tif (!texture || existing?.size !== size || existing?.type !== type) {\n\t\t\tif (existing) {\n\t\t\t\tconst oldTex = existing.texture;\n\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\toldTex.destroy();\n\t\t\t\t\t} catch {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t\tif (type === \"3D\") texture = device.createTexture({\n\t\t\t\tsize: [\n\t\t\t\t\tsize,\n\t\t\t\t\tsize,\n\t\t\t\t\tsize\n\t\t\t\t],\n\t\t\t\tdimension: \"3d\",\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\telse texture = device.createTexture({\n\t\t\t\tsize: [\n\t\t\t\t\tsize,\n\t\t\t\t\t1,\n\t\t\t\t\t1\n\t\t\t\t],\n\t\t\t\tdimension: \"1d\",\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t}\n\t\tif (type === \"3D\") {\n\t\t\tconst bytesPerPixel = 4;\n\t\t\tconst bytesPerRowPadded = Math.ceil(size * bytesPerPixel / 256) * 256;\n\t\t\tconst data = new Uint8Array(bytesPerRowPadded * size * size);\n\t\t\tlet index = 0;\n\t\t\tfor (let b = 0; b < size; b++) for (let g$1 = 0; g$1 < size; g$1++) for (let r = 0; r < size; r++) {\n\t\t\t\tconst inR = r / (size - 1 || 1);\n\t\t\t\tconst inG = g$1 / (size - 1 || 1);\n\t\t\t\tconst inB = b / (size - 1 || 1);\n\t\t\t\tconst outColor = points[index] || [\n\t\t\t\t\tinR,\n\t\t\t\t\tinG,\n\t\t\t\t\tinB\n\t\t\t\t];\n\t\t\t\tindex++;\n\t\t\t\tconst dstIdx = r * bytesPerPixel + g$1 * bytesPerRowPadded + b * bytesPerRowPadded * size;\n\t\t\t\tdata[dstIdx] = Math.max(0, Math.min(255, Math.round(outColor[0] * 255)));\n\t\t\t\tdata[dstIdx + 1] = Math.max(0, Math.min(255, Math.round(outColor[1] * 255)));\n\t\t\t\tdata[dstIdx + 2] = Math.max(0, Math.min(255, Math.round(outColor[2] * 255)));\n\t\t\t\tdata[dstIdx + 3] = 255;\n\t\t\t}\n\t\t\tdevice.queue.writeTexture({ texture }, data, {\n\t\t\t\tbytesPerRow: bytesPerRowPadded,\n\t\t\t\trowsPerImage: size\n\t\t\t}, [\n\t\t\t\tsize,\n\t\t\t\tsize,\n\t\t\t\tsize\n\t\t\t]);\n\t\t} else {\n\t\t\tconst bytesPerPixel = 4;\n\t\t\tconst data = new Uint8Array(size * bytesPerPixel);\n\t\t\tfor (let i = 0; i < size; i++) {\n\t\t\t\tconst outColor = points[i] || [\n\t\t\t\t\ti / (size - 1 || 1),\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t\tconst idx = i * bytesPerPixel;\n\t\t\t\tdata[idx] = Math.max(0, Math.min(255, Math.round(outColor[0] * 255)));\n\t\t\t\tdata[idx + 1] = Math.max(0, Math.min(255, Math.round(outColor[1] * 255)));\n\t\t\t\tdata[idx + 2] = Math.max(0, Math.min(255, Math.round(outColor[2] * 255)));\n\t\t\t\tdata[idx + 3] = 255;\n\t\t\t}\n\t\t\tdevice.queue.writeTexture({ texture }, data, {}, [\n\t\t\t\tsize,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t]);\n\t\t}\n\t\tlet vertexBuffer = existing?.vertexBuffer;\n\t\tif (!vertexBuffer || vertexBuffer.size < vertexData.byteLength) {\n\t\t\tif (existing) {\n\t\t\t\tconst oldBuf = existing.vertexBuffer;\n\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\toldBuf.destroy();\n\t\t\t\t\t} catch {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t\tvertexBuffer = device.createBuffer({\n\t\t\t\tsize: vertexData.byteLength,\n\t\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n\t\t\t});\n\t\t}\n\t\tdevice.queue.writeBuffer(vertexBuffer, 0, vertexData);\n\t\tconst lut = {\n\t\t\ttexture,\n\t\t\ttype,\n\t\t\tsize,\n\t\t\tvertexBuffer,\n\t\t\tvertexCount: points.length\n\t\t};\n\t\tthis.set(key, device, lut);\n\t\tthis.emit(key);\n\t\treturn lut;\n\t}\n\tasync getOrLoad(src, device, signal) {\n\t\tif (signal?.aborted) throw new DOMException(\"The operation was aborted.\", \"AbortError\");\n\t\tconst cached$1 = this.get(src, device);\n\t\tif (cached$1) return cached$1;\n\t\tconst raw = this.rawDataCache.get(src);\n\t\tif (raw) return this.createOrUpdate(src, device, raw.points, raw.size, raw.type);\n\t\tconst promises = this.getPromises(device);\n\t\tlet promise = promises.get(src);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tif (src.startsWith(\"runtime://\")) {\n\t\t\t\t\tconst deferred = this.getOrCreateRawDataPromise(src);\n\t\t\t\t\tlet timeoutId;\n\t\t\t\t\tconst timeoutPromise = new Promise((_, reject) => {\n\t\t\t\t\t\tconst checkTimeout = () => {\n\t\t\t\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\t\t\t\tconst isImgOrVidLoading = () => {\n\t\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\t\t\t\t\tconst rendererHandles = window.renderer_delayRenderHandles;\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(rendererHandles) && rendererHandles.length > 0) return true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (typeof globalThis !== \"undefined\") {\n\t\t\t\t\t\t\t\t\t\tconst gatewaiDelays = globalThis.__GATEWAI_DELAYS__;\n\t\t\t\t\t\t\t\t\t\tif (gatewaiDelays instanceof Set && gatewaiDelays.size > 0) return true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tif (isImgOrVidLoading()) checkTimeout();\n\t\t\t\t\t\t\t\telse reject(/* @__PURE__ */ new Error(`Timeout waiting for runtime LUT \"${src}\" after 5000ms.`));\n\t\t\t\t\t\t\t}, 5e3);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcheckTimeout();\n\t\t\t\t\t});\n\t\t\t\t\tlet onAbort;\n\t\t\t\t\tlet abortPromise;\n\t\t\t\t\tif (signal) abortPromise = new Promise((_, reject) => {\n\t\t\t\t\t\tonAbort = () => {\n\t\t\t\t\t\t\treject(new DOMException(\"The operation was aborted.\", \"AbortError\"));\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsignal.addEventListener(\"abort\", onAbort);\n\t\t\t\t\t});\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst promisesToRace = [deferred.promise, timeoutPromise];\n\t\t\t\t\t\tif (abortPromise) promisesToRace.push(abortPromise);\n\t\t\t\t\t\tconst result = await Promise.race(promisesToRace);\n\t\t\t\t\t\treturn this.createOrUpdate(src, device, result.points, result.size, result.type);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\tif (onAbort && signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst response = await fetch(src, { signal });\n\t\t\t\tif (!response.ok) throw new Error(`Failed to load LUT file: ${response.statusText}`);\n\t\t\t\tconst lines = (await response.text()).split(/\\r?\\n/);\n\t\t\t\tlet size = 33;\n\t\t\t\tlet type = \"3D\";\n\t\t\t\tconst points = [];\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tconst trimmed = line.trim();\n\t\t\t\t\tif (!trimmed || trimmed.startsWith(\"#\")) continue;\n\t\t\t\t\tif (trimmed.startsWith(\"LUT_3D_SIZE\")) {\n\t\t\t\t\t\tconst parts$1 = trimmed.split(/\\s+/);\n\t\t\t\t\t\tsize = parseInt(parts$1[1], 10);\n\t\t\t\t\t\ttype = \"3D\";\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (trimmed.startsWith(\"LUT_1D_SIZE\")) {\n\t\t\t\t\t\tconst parts$1 = trimmed.split(/\\s+/);\n\t\t\t\t\t\tsize = parseInt(parts$1[1], 10);\n\t\t\t\t\t\ttype = \"1D\";\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (trimmed.match(/^[a-zA-Z]/)) continue;\n\t\t\t\t\tconst parts = trimmed.split(/\\s+/).map(Number);\n\t\t\t\t\tif (parts.length === 3 && parts.every((n) => !isNaN(n))) points.push([\n\t\t\t\t\t\tparts[0],\n\t\t\t\t\t\tparts[1],\n\t\t\t\t\t\tparts[2]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tif (points.length === 0) throw new Error(\"No valid color mappings found in LUT file.\");\n\t\t\t\treturn this.createOrUpdate(src, device, points, size, type);\n\t\t\t})();\n\t\t\tpromises.set(src, promise);\n\t\t\tpromise.catch(() => {\n\t\t\t\tpromises.delete(src);\n\t\t\t});\n\t\t}\n\t\treturn promise;\n\t}\n\tevict(key, device) {\n\t\tconst cache = this.getCache(device);\n\t\tconst cached$1 = cache.get(key);\n\t\tif (cached$1) {\n\t\t\tconst oldTex = cached$1.texture;\n\t\t\tconst oldBuf = cached$1.vertexBuffer;\n\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\ttry {\n\t\t\t\t\toldTex.destroy();\n\t\t\t\t} catch {}\n\t\t\t\ttry {\n\t\t\t\t\toldBuf.destroy();\n\t\t\t\t} catch {}\n\t\t\t}).catch(() => {});\n\t\t\tcache.delete(key);\n\t\t}\n\t\tthis.getPromises(device).delete(key);\n\t}\n\thasPending(device) {\n\t\tconst promises = this.devicePromises.get(device);\n\t\treturn promises !== void 0 && promises.size > 0 || this.rawDataPromises.size > 0;\n\t}\n\tasync awaitAllPending(device) {\n\t\tconst promises = Array.from(this.getPromises(device).values());\n\t\tawait Promise.all(promises);\n\t}\n\tdestroy() {\n\t\tthis.deviceCaches = /* @__PURE__ */ new WeakMap();\n\t\tthis.devicePromises = /* @__PURE__ */ new WeakMap();\n\t\tthis.rawDataCache.clear();\n\t\tthis.rawDataPromises.clear();\n\t}\n};\nconst globalKey = \"__GATEWAI_LUT_STORE__\";\nconst lutStore = (() => {\n\tif (!globalThis[globalKey]) globalThis[globalKey] = new LutStore();\n\treturn globalThis[globalKey];\n})();\n\n//#endregion\n//#region src/nodes/audio-signal-extractor.ts\nconst STATIC_AUDIO_SIGNAL_PREVIEW_SHADER = `\nstruct AudioSignalUniforms {\n\tsensitivity : f32,\n\ttime : f32,\n\twidth : f32,\n\theight : f32,\n\tpreviewMode : f32, // 0=envelope, 1=beat_markers, 2=waveform\n\thasBeatSignal : f32,\n\tcalcMin : f32,\n\tcalcMax : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : AudioSignalUniforms;\n@group(1) @binding(0) var signalTex : texture_2d<f32>;\n@group(1) @binding(1) var sigSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dummy_use = u.width + u.height + u.previewMode;\n\tlet col_offset = vec3<f32>(dummy_use * 1e-10);\n\n\t// Dark sleek studio background\n\tvar col = vec3<f32>(0.07, 0.07, 0.08) + col_offset;\n\n\tlet y_zero = 0.85;\n\n\t// Grid Lines\n\tlet grid_scroll = u.time * 0.05;\n\tlet uv10 = vec2<f32>(in.uv.x - grid_scroll, in.uv.y) * 10.0;\n\tlet fw10 = fwidth(uv10);\n\tlet fine = 1.0 - clamp(min(abs(fract(uv10.x - 0.5) - 0.5) / fw10.x, abs(fract(uv10.y - 0.5) - 0.5) / fw10.y), 0.0, 1.0);\n\tcol = mix(col, vec3<f32>(0.12, 0.12, 0.14), fine * 0.35);\n\n\t// Baseline Axis\n\tlet axis_d = abs(in.uv.y - y_zero);\n\tlet axis_fw = fwidth(in.uv.y);\n\tlet axis_px = 1.0 - smoothstep(0.0, axis_fw * 1.5, axis_d);\n\tcol = mix(col, vec3<f32>(0.22, 0.22, 0.26), axis_px * 0.6);\n\n\t// Sample 4-channel audio signal texture\n\tlet sigSample = textureSampleLevel(signalTex, sigSamp, vec2<f32>(in.uv.x, 0.5), 0.0);\n\tlet primVal = sigSample.r;\n\tlet beatVal = sigSample.g;\n\tlet bassVal = sigSample.b;\n\tlet nrgVal = sigSample.a;\n\n\tlet range = max(1e-4, u.calcMax - u.calcMin);\n\n\t// Normalize primary curve using calculation min and max\n\tlet norm_prim = clamp((primVal - u.calcMin) / range, 0.0, 1.0);\n\tlet y_prim = 0.85 - norm_prim * 0.70;\n\n\t// Normalize secondary energy background fill\n\tlet norm_nrg = clamp((nrgVal - u.calcMin) / range, 0.0, 1.0);\n\tlet y_nrg = 0.85 - norm_nrg * 0.70;\n\n\t// 1. Soft RMS background fill under energy curve\n\tlet fill_lo = min(y_nrg, y_zero);\n\tlet fill_hi = max(y_nrg, y_zero);\n\tlet in_fill = step(fill_lo, in.uv.y) * step(in.uv.y, fill_hi);\n\tcol = mix(col, vec3<f32>(0.0, 0.45, 0.7), in_fill * 0.08);\n\n\t// 2. Beat transient markers / glow bars\n\tif (u.hasBeatSignal > 0.5 && beatVal > 0.1) {\n\t\tlet beat_height = 0.85 - (beatVal * 0.70);\n\t\tif (in.uv.y >= beat_height && in.uv.y <= y_zero) {\n\t\t\tlet beat_glow = exp(-4.0 * abs(in.uv.y - beat_height));\n\t\t\tcol = mix(col, vec3<f32>(1.0, 0.55, 0.1), beatVal * 0.15 * beat_glow);\n\t\t}\n\t}\n\n\t// 3. Crisp Primary Curve Line\n\tlet dist_prim = abs(in.uv.y - y_prim);\n\tlet core_fw = fwidth(in.uv.y);\n\tlet core = 1.0 - smoothstep(0.5 * core_fw, 2.2 * core_fw, dist_prim);\n\tlet curve_color = select(vec3<f32>(0.0, 0.75, 1.0), vec3<f32>(0.2, 0.85, 0.5), primVal == bassVal);\n\tcol = mix(col, curve_color, core * 0.95);\n\n\t// 4. Playhead cursor line at center (uv.x = 0.5)\n\tlet playhead_d = abs(in.uv.x - 0.5);\n\tlet playhead_fw = fwidth(in.uv.x);\n\tlet glow = exp(-28.0 * playhead_d);\n\tcol = mix(col, vec3<f32>(1.0, 0.3, 0.2), glow * 0.2);\n\tlet playhead_line = 1.0 - smoothstep(0.0, playhead_fw * 1.5, playhead_d);\n\tcol = mix(col, vec3<f32>(1.0, 0.35, 0.25), playhead_line * 0.9);\n\n\treturn vec4<f32>(clamp(col, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`;\nconst devicePipelineCache$1 = /* @__PURE__ */ new WeakMap();\nconst uniformData$1 = new Float32Array(8);\nfunction getDevicePipelines$1(device) {\n\tlet cache = devicePipelineCache$1.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdevicePipelineCache$1.set(device, cache);\n\t}\n\treturn cache;\n}\nasync function drawAudioSignalExtractorNode(ctx, encoder, pass, props) {\n\tconst config$1 = props.signalConfig;\n\tconst nodeId = props.nodeId ?? config$1?.nodeId ?? \"audio-extractor\";\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps ?? 24;\n\tconst width = props.width ?? 512;\n\tconst height = props.height ?? 512;\n\tconst elapsedMs = props.elapsedMs !== void 0 ? props.elapsedMs : frame / fps * 1e3;\n\tconst durationMs = props.durationMs !== void 0 ? props.durationMs : 0;\n\tconst elapsedTimeSec = elapsedMs / 1e3;\n\tconst durationSec = durationMs / 1e3;\n\tconst signalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, nodeId, elapsedTimeSec, durationSec, config$1 ?? props, width, height, props.renderId, frame, fps);\n\tconst pipelines = getDevicePipelines$1(ctx.device);\n\tconst cacheKey = `audio_preview_${ctx.renderer.format}`;\n\tlet pipeline = pipelines.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst shaderModule = ctx.device.createShaderModule({\n\t\t\tlabel: \"audio_signal_preview.wgsl\",\n\t\t\tcode: STATIC_AUDIO_SIGNAL_PREVIEW_SHADER\n\t\t});\n\t\tpipeline = ctx.device.createRenderPipeline({\n\t\t\tlabel: \"AudioSignalPreviewPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: ctx.renderer.format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tpipelines.set(cacheKey, pipeline);\n\t}\n\tconst sensitivity = typeof config$1?.sensitivity === \"number\" ? config$1.sensitivity : props.sensitivity ?? 1;\n\tconst hasBeat = props.extractionMode === \"transient_beat\" || config$1?.extractionMode === \"transient_beat\" ? 1 : 0;\n\tconst calculatedStats = signalRegistry.getStats(nodeId) ?? (config$1?.nodeId ? signalRegistry.getStats(config$1.nodeId) : void 0);\n\tconst minVal = calculatedStats?.min ?? 0;\n\tconst maxVal = calculatedStats?.max ?? 1;\n\tuniformData$1[0] = sensitivity;\n\tuniformData$1[1] = elapsedTimeSec;\n\tuniformData$1[2] = width;\n\tuniformData$1[3] = height;\n\tuniformData$1[4] = 0;\n\tuniformData$1[5] = hasBeat;\n\tuniformData$1[6] = minVal;\n\tuniformData$1[7] = maxVal;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(uniformData$1);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst bindGroup0 = ctx.device.createBindGroup({\n\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uBuffer }\n\t\t}]\n\t});\n\tconst bindGroup1 = ctx.device.createBindGroup({\n\t\tlayout: pipeline.getBindGroupLayout(1),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: signalView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup0);\n\tpass.setBindGroup(1, bindGroup1);\n\tpass.draw(4);\n}\n\n//#endregion\n//#region src/slug/slug-generator.ts\nconst TEXTURE_WIDTH$1 = 4096;\nconst SLUGGISH_HEADER_DATA$1 = \"SLUGGISH\";\nfunction getContours(commands) {\n\tconst contours = [];\n\tlet currentContour = [];\n\tlet cx = 0;\n\tlet cy = 0;\n\tfor (const cmd of commands) {\n\t\tconst type = cmd.command || cmd.type;\n\t\tconst args = cmd.args || [];\n\t\tif (type === \"moveTo\") {\n\t\t\tif (currentContour.length > 0) contours.push(currentContour);\n\t\t\tcx = args.length >= 2 ? args[0] : cmd.x ?? 0;\n\t\t\tcy = args.length >= 2 ? args[1] : cmd.y ?? 0;\n\t\t\tcurrentContour = [{\n\t\t\t\tx: cx,\n\t\t\t\ty: cy\n\t\t\t}];\n\t\t} else if (type === \"lineTo\") {\n\t\t\tconst x = args.length >= 2 ? args[0] : cmd.x ?? 0;\n\t\t\tconst y = args.length >= 2 ? args[1] : cmd.y ?? 0;\n\t\t\tcx = x;\n\t\t\tcy = y;\n\t\t\tcurrentContour.push({\n\t\t\t\tx: cx,\n\t\t\t\ty: cy\n\t\t\t});\n\t\t} else if (type === \"quadraticCurveTo\") {\n\t\t\tconst cpx = args.length >= 4 ? args[0] : cmd.cpx ?? cmd.x1 ?? 0;\n\t\t\tconst cpy = args.length >= 4 ? args[1] : cmd.cpy ?? cmd.y1 ?? 0;\n\t\t\tconst x = args.length >= 4 ? args[2] : cmd.x ?? 0;\n\t\t\tconst y = args.length >= 4 ? args[3] : cmd.y ?? 0;\n\t\t\tconst steps = 4;\n\t\t\tconst p0x = cx;\n\t\t\tconst p0y = cy;\n\t\t\tfor (let i = 1; i <= steps; i++) {\n\t\t\t\tconst t = i / steps;\n\t\t\t\tconst mt = 1 - t;\n\t\t\t\tconst x_t = mt * mt * p0x + 2 * mt * t * cpx + t * t * x;\n\t\t\t\tconst y_t = mt * mt * p0y + 2 * mt * t * cpy + t * t * y;\n\t\t\t\tcurrentContour.push({\n\t\t\t\t\tx: x_t,\n\t\t\t\t\ty: y_t\n\t\t\t\t});\n\t\t\t}\n\t\t\tcx = x;\n\t\t\tcy = y;\n\t\t} else if (type === \"bezierCurveTo\") {\n\t\t\tconst cp1x = args.length >= 6 ? args[0] : cmd.cp1x ?? 0;\n\t\t\tconst cp1y = args.length >= 6 ? args[1] : cmd.cp1y ?? 0;\n\t\t\tconst cp2x = args.length >= 6 ? args[2] : cmd.cp2x ?? 0;\n\t\t\tconst cp2y = args.length >= 6 ? args[3] : cmd.cp2y ?? 0;\n\t\t\tconst x = args.length >= 6 ? args[4] : cmd.x ?? 0;\n\t\t\tconst y = args.length >= 6 ? args[5] : cmd.y ?? 0;\n\t\t\tconst steps = 6;\n\t\t\tconst p0x = cx;\n\t\t\tconst p0y = cy;\n\t\t\tfor (let i = 1; i <= steps; i++) {\n\t\t\t\tconst t = i / steps;\n\t\t\t\tconst mt = 1 - t;\n\t\t\t\tconst mt2 = mt * mt;\n\t\t\t\tconst mt3 = mt2 * mt;\n\t\t\t\tconst t2 = t * t;\n\t\t\t\tconst t3 = t2 * t;\n\t\t\t\tconst x_t = mt3 * p0x + 3 * mt2 * t * cp1x + 3 * mt * t2 * cp2x + t3 * x;\n\t\t\t\tconst y_t = mt3 * p0y + 3 * mt2 * t * cp1y + 3 * mt * t2 * cp2y + t3 * y;\n\t\t\t\tcurrentContour.push({\n\t\t\t\t\tx: x_t,\n\t\t\t\t\ty: y_t\n\t\t\t\t});\n\t\t\t}\n\t\t\tcx = x;\n\t\t\tcy = y;\n\t\t}\n\t}\n\tif (currentContour.length > 0) contours.push(currentContour);\n\treturn contours;\n}\nfunction cleanPolygon(poly) {\n\tif (poly.length < 3) return poly;\n\tconst noDuplicates = [];\n\tfor (const pt of poly) if (noDuplicates.length === 0) noDuplicates.push(pt);\n\telse {\n\t\tconst prev = noDuplicates[noDuplicates.length - 1];\n\t\tif (Math.hypot(pt.x - prev.x, pt.y - prev.y) > .01) noDuplicates.push(pt);\n\t}\n\tif (noDuplicates.length >= 3) {\n\t\tconst first = noDuplicates[0];\n\t\tconst last = noDuplicates[noDuplicates.length - 1];\n\t\tif (Math.hypot(first.x - last.x, first.y - last.y) < .01) noDuplicates.pop();\n\t}\n\tif (noDuplicates.length < 3) return noDuplicates;\n\tconst cleaned = [];\n\tconst n = noDuplicates.length;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst prev = noDuplicates[(i - 1 + n) % n];\n\t\tconst curr = noDuplicates[i];\n\t\tconst next = noDuplicates[(i + 1) % n];\n\t\tconst dx1 = curr.x - prev.x;\n\t\tconst dy1 = curr.y - prev.y;\n\t\tconst len1 = Math.hypot(dx1, dy1);\n\t\tconst dx2 = next.x - curr.x;\n\t\tconst dy2 = next.y - curr.y;\n\t\tconst len2 = Math.hypot(dx2, dy2);\n\t\tif (len1 < 1e-5 || len2 < 1e-5) continue;\n\t\tconst cross = dx1 * dy2 - dy1 * dx2;\n\t\tif (Math.abs(cross) / (len1 * len2) < 1e-4) continue;\n\t\tcleaned.push(curr);\n\t}\n\treturn cleaned;\n}\nfunction getSignedArea(poly) {\n\tlet area = 0;\n\tconst n = poly.length;\n\tif (n < 3) return 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst curr = poly[i];\n\t\tconst next = poly[(i + 1) % n];\n\t\tarea += curr.x * next.y - next.x * curr.y;\n\t}\n\treturn area * .5;\n}\nfunction isPointInPolygon(pt, poly) {\n\tlet inside = false;\n\tconst n = poly.length;\n\tfor (let i = 0, j = n - 1; i < n; j = i++) {\n\t\tconst pi = poly[i];\n\t\tconst pj = poly[j];\n\t\tif (pi.y > pt.y !== pj.y > pt.y && pt.x < (pj.x - pi.x) * (pt.y - pi.y) / (pj.y - pi.y) + pi.x) inside = !inside;\n\t}\n\treturn inside;\n}\nfunction offsetPolygon(poly, d) {\n\tconst n = poly.length;\n\tif (n < 3) return poly;\n\tconst offsetPoly = [];\n\tfor (let i = 0; i < n; i++) {\n\t\tconst prev = poly[(i - 1 + n) % n];\n\t\tconst curr = poly[i];\n\t\tconst next = poly[(i + 1) % n];\n\t\tconst v1x = curr.x - prev.x;\n\t\tconst v1y = curr.y - prev.y;\n\t\tconst len1 = Math.sqrt(v1x * v1x + v1y * v1y);\n\t\tconst v2x = next.x - curr.x;\n\t\tconst v2y = next.y - curr.y;\n\t\tconst len2 = Math.sqrt(v2x * v2x + v2y * v2y);\n\t\tif (len1 < 1e-6 || len2 < 1e-6) {\n\t\t\toffsetPoly.push({\n\t\t\t\tx: curr.x,\n\t\t\t\ty: curr.y\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst u1x = v1x / len1;\n\t\tconst u1y = v1y / len1;\n\t\tconst u2x = v2x / len2;\n\t\tconst u2y = v2y / len2;\n\t\tconst n1x = -u1y;\n\t\tconst n1y = u1x;\n\t\tconst n2x = -u2y;\n\t\tconst n2y = u2x;\n\t\tconst nx = n1x + n2x;\n\t\tconst ny = n1y + n2y;\n\t\tconst lenN = Math.sqrt(nx * nx + ny * ny);\n\t\tlet unx = n1x;\n\t\tlet uny = n1y;\n\t\tif (lenN > 1e-6) {\n\t\t\tunx = nx / lenN;\n\t\t\tuny = ny / lenN;\n\t\t} else {\n\t\t\tunx = u1x;\n\t\t\tuny = u1y;\n\t\t}\n\t\tconst dotU = u1x * u2x + u1y * u2y;\n\t\tconst cosHalfTheta = Math.sqrt(Math.max(0, (1 + dotU) * .5));\n\t\tlet dist = d;\n\t\tif (cosHalfTheta > .05) dist = d / cosHalfTheta;\n\t\tdist = Math.min(dist, d * 4);\n\t\toffsetPoly.push({\n\t\t\tx: curr.x + unx * dist,\n\t\t\ty: curr.y + uny * dist\n\t\t});\n\t}\n\treturn offsetPoly;\n}\nfunction isBBoxContained(polyA, polyB) {\n\tlet minXA = Infinity, maxXA = -Infinity, minYA = Infinity, maxYA = -Infinity;\n\tfor (const p of polyA) {\n\t\tif (p.x < minXA) minXA = p.x;\n\t\tif (p.x > maxXA) maxXA = p.x;\n\t\tif (p.y < minYA) minYA = p.y;\n\t\tif (p.y > maxYA) maxYA = p.y;\n\t}\n\tlet minXB = Infinity, maxXB = -Infinity, minYB = Infinity, maxYB = -Infinity;\n\tfor (const p of polyB) {\n\t\tif (p.x < minXB) minXB = p.x;\n\t\tif (p.x > maxXB) maxXB = p.x;\n\t\tif (p.y < minYB) minYB = p.y;\n\t\tif (p.y > maxYB) maxYB = p.y;\n\t}\n\treturn minXA >= minXB && maxXA <= maxXB && minYA >= minYB && maxYA <= maxYB;\n}\nfunction offsetGlyphPath(path$1, strokeOffset) {\n\tif (!path$1 || !path$1.commands || path$1.commands.length === 0) return path$1;\n\tconst polygons = getContours(path$1.commands).map(cleanPolygon).filter((p) => p.length >= 3);\n\tconst n = polygons.length;\n\tif (n === 0) return path$1;\n\tconst nestingLevels = new Array(n).fill(0);\n\tfor (let i = 0; i < n; i++) {\n\t\tconst polyA = polygons[i];\n\t\tconst pt = polyA[0];\n\t\tfor (let j = 0; j < n; j++) {\n\t\t\tif (i === j) continue;\n\t\t\tif (isBBoxContained(polyA, polygons[j]) && isPointInPolygon(pt, polygons[j])) nestingLevels[i]++;\n\t\t}\n\t}\n\tfor (let i = 0; i < n; i++) {\n\t\tconst poly = polygons[i];\n\t\tconst area = getSignedArea(poly);\n\t\tconst shouldBeClockwise = nestingLevels[i] % 2 === 0;\n\t\tif (shouldBeClockwise && area > 0) poly.reverse();\n\t\telse if (!shouldBeClockwise && area < 0) poly.reverse();\n\t}\n\tconst offsetPolys = polygons.map((p) => offsetPolygon(p, strokeOffset));\n\tconst commands = [];\n\tfor (const poly of offsetPolys) {\n\t\tif (poly.length === 0) continue;\n\t\tcommands.push({\n\t\t\tcommand: \"moveTo\",\n\t\t\targs: [poly[0].x, poly[0].y]\n\t\t});\n\t\tfor (let i = 1; i < poly.length; i++) commands.push({\n\t\t\tcommand: \"lineTo\",\n\t\t\targs: [poly[i].x, poly[i].y]\n\t\t});\n\t\tcommands.push({\n\t\t\tcommand: \"closePath\",\n\t\t\targs: []\n\t\t});\n\t}\n\treturn { commands };\n}\nvar SlugGenerator = class {\n\tbandCount = 16;\n\tfullRange = false;\n\twhitelist = null;\n\tstrokeWidth;\n\tconstructor(options = {}) {\n\t\tthis.bandCount = options.bandCount !== void 0 ? options.bandCount : 16;\n\t\tthis.fullRange = options.fullRange !== void 0 ? options.fullRange : false;\n\t\tthis.whitelist = options.whitelist || null;\n\t\tthis.strokeWidth = options.strokeWidth;\n\t}\n\tgenerate(device, font) {\n\t\tif (!font) throw new Error(\"[SlugGenerator] Cannot generate slug font: font is null or undefined\");\n\t\tconst curvesTexData = [];\n\t\tconst bandsTexBandOffsets = [];\n\t\tconst bandsTexCurveOffsets = [];\n\t\tconst codePointsData = [];\n\t\tconst charSet = Array.isArray(font.characterSet) ? font.characterSet : Array.from(font.characterSet || []);\n\t\tconst charSetSet = new Set(charSet);\n\t\tconst getGlyphFn = typeof font.getGlyph === \"function\" ? font.getGlyph.bind(font) : typeof font.glyphForCodePoint === \"function\" ? font.glyphForCodePoint.bind(font) : null;\n\t\tconst glyphForCodePointFn = typeof font.glyphForCodePoint === \"function\" ? font.glyphForCodePoint.bind(font) : typeof font.getGlyph === \"function\" ? font.getGlyph.bind(font) : null;\n\t\tconst codePointsToProcess = [-1];\n\t\tif (this.fullRange) {\n\t\t\tfor (const cp of charSet) if (cp !== -1) codePointsToProcess.push(cp);\n\t\t} else if (this.whitelist) {\n\t\t\tfor (const cp of this.whitelist) if (charSetSet.has(cp)) codePointsToProcess.push(cp);\n\t\t} else for (const cp of charSet) {\n\t\t\tif (cp === -1) continue;\n\t\t\tif (cp >= 32 && cp <= 126 || cp >= 160 && cp <= 255 || cp >= 256 && cp <= 591 || cp >= 8192 && cp <= 8303 || cp >= 8352 && cp <= 8399 || cp >= 8448 && cp <= 8527 || cp >= 8592 && cp <= 8703 || cp >= 8704 && cp <= 8959 || cp >= 9728 && cp <= 10175) codePointsToProcess.push(cp);\n\t\t}\n\t\tfor (const cp of codePointsToProcess) {\n\t\t\tlet glyph = null;\n\t\t\ttry {\n\t\t\t\tglyph = cp === -1 ? getGlyphFn ? getGlyphFn(0) : null : glyphForCodePointFn ? glyphForCodePointFn(cp) : null;\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!glyph) continue;\n\t\t\tlet path$1;\n\t\t\tlet bbox;\n\t\t\tlet advanceWidth = 0;\n\t\t\ttry {\n\t\t\t\tpath$1 = glyph.path;\n\t\t\t\tbbox = glyph.bbox;\n\t\t\t\ttry {\n\t\t\t\t\tadvanceWidth = Math.floor(glyph.advanceWidth || 0);\n\t\t\t\t} catch {\n\t\t\t\t\tadvanceWidth = 0;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!bbox || bbox.minX === bbox.maxX || bbox.minY === bbox.maxY || bbox.minX === Infinity || bbox.minY === Infinity || !path$1 || !path$1.commands || path$1.commands.length === 0) {\n\t\t\t\tcodePointsData.push({\n\t\t\t\t\tcodePoint: cp,\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tadvanceWidth,\n\t\t\t\t\tbearingX: 0,\n\t\t\t\t\tbearingY: 0,\n\t\t\t\t\tbandCount: 0,\n\t\t\t\t\tbandDimX: 0,\n\t\t\t\t\tbandDimY: 0,\n\t\t\t\t\tbandsTexCoordX: 0,\n\t\t\t\t\tbandsTexCoordY: 0\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst strokeOffset = this.strokeWidth ? this.strokeWidth / 2 : 0;\n\t\t\tconst pathCommands = this.strokeWidth && this.strokeWidth > 0 ? offsetGlyphPath(path$1, strokeOffset) : path$1;\n\t\t\tconst gx1 = bbox.minX - strokeOffset;\n\t\t\tconst gy1 = bbox.minY - strokeOffset;\n\t\t\tconst gx2 = bbox.maxX + strokeOffset;\n\t\t\tconst gy2 = bbox.maxY + strokeOffset;\n\t\t\tconst curves = [];\n\t\t\tlet currentX = 0;\n\t\t\tlet currentY = 0;\n\t\t\tlet firstCurve = false;\n\t\t\tlet startOfShapeX = 0;\n\t\t\tlet startOfShapeY = 0;\n\t\t\tfor (let j = 0; j < pathCommands.commands.length; j++) {\n\t\t\t\tconst cmd = pathCommands.commands[j];\n\t\t\t\tconst commandType = cmd.command || cmd.type;\n\t\t\t\tconst args = cmd.args || [];\n\t\t\t\tif (commandType === \"moveTo\") {\n\t\t\t\t\tfirstCurve = true;\n\t\t\t\t\tconst x = args.length >= 2 ? args[0] : cmd.x;\n\t\t\t\t\tconst y = args.length >= 2 ? args[1] : cmd.y;\n\t\t\t\t\tcurrentX = x - gx1;\n\t\t\t\t\tcurrentY = y - gy1;\n\t\t\t\t\tstartOfShapeX = currentX;\n\t\t\t\t\tstartOfShapeY = currentY;\n\t\t\t\t} else if (commandType === \"lineTo\") {\n\t\t\t\t\tconst x = args.length >= 2 ? args[0] : cmd.x;\n\t\t\t\t\tconst y = args.length >= 2 ? args[1] : cmd.y;\n\t\t\t\t\tconst nextX = x - gx1;\n\t\t\t\t\tconst nextY = y - gy1;\n\t\t\t\t\tconst c = {\n\t\t\t\t\t\tfirst: firstCurve,\n\t\t\t\t\t\tx1: currentX,\n\t\t\t\t\t\ty1: currentY,\n\t\t\t\t\t\tx3: nextX,\n\t\t\t\t\t\ty3: nextY,\n\t\t\t\t\t\tx2: (currentX + nextX) / 2,\n\t\t\t\t\t\ty2: (currentY + nextY) / 2\n\t\t\t\t\t};\n\t\t\t\t\tcurves.push(c);\n\t\t\t\t\tfirstCurve = false;\n\t\t\t\t\tcurrentX = nextX;\n\t\t\t\t\tcurrentY = nextY;\n\t\t\t\t} else if (commandType === \"quadraticCurveTo\") {\n\t\t\t\t\tconst cpx = args.length >= 4 ? args[0] : cmd.cpx ?? cmd.x1;\n\t\t\t\t\tconst cpy = args.length >= 4 ? args[1] : cmd.cpy ?? cmd.y1;\n\t\t\t\t\tconst x = args.length >= 4 ? args[2] : cmd.x;\n\t\t\t\t\tconst y = args.length >= 4 ? args[3] : cmd.y;\n\t\t\t\t\tconst nextX = x - gx1;\n\t\t\t\t\tconst nextY = y - gy1;\n\t\t\t\t\tconst c = {\n\t\t\t\t\t\tfirst: firstCurve,\n\t\t\t\t\t\tx1: currentX,\n\t\t\t\t\t\ty1: currentY,\n\t\t\t\t\t\tx2: cpx - gx1,\n\t\t\t\t\t\ty2: cpy - gy1,\n\t\t\t\t\t\tx3: nextX,\n\t\t\t\t\t\ty3: nextY\n\t\t\t\t\t};\n\t\t\t\t\tcurves.push(c);\n\t\t\t\t\tfirstCurve = false;\n\t\t\t\t\tcurrentX = nextX;\n\t\t\t\t\tcurrentY = nextY;\n\t\t\t\t} else if (commandType === \"bezierCurveTo\") {\n\t\t\t\t\tconst cp1x = args.length >= 6 ? args[0] : cmd.cp1x;\n\t\t\t\t\tconst cp1y = args.length >= 6 ? args[1] : cmd.cp1y;\n\t\t\t\t\tconst cp2x = args.length >= 6 ? args[2] : cmd.cp2x;\n\t\t\t\t\tconst cp2y = args.length >= 6 ? args[3] : cmd.cp2y;\n\t\t\t\t\tconst x = args.length >= 6 ? args[4] : cmd.x;\n\t\t\t\t\tconst y = args.length >= 6 ? args[5] : cmd.y;\n\t\t\t\t\tconst nextX = x - gx1;\n\t\t\t\t\tconst nextY = y - gy1;\n\t\t\t\t\tconst segments = 4;\n\t\t\t\t\tlet prevX = currentX;\n\t\t\t\t\tlet prevY = currentY;\n\t\t\t\t\tfor (let k = 1; k <= segments; k++) {\n\t\t\t\t\t\tconst t = k / segments;\n\t\t\t\t\t\tconst mt = 1 - t;\n\t\t\t\t\t\tconst mt2 = mt * mt;\n\t\t\t\t\t\tconst mt3 = mt2 * mt;\n\t\t\t\t\t\tconst t2 = t * t;\n\t\t\t\t\t\tconst t3 = t2 * t;\n\t\t\t\t\t\tconst posX = mt3 * currentX + 3 * mt2 * t * (cp1x - gx1) + 3 * mt * t2 * (cp2x - gx1) + t3 * nextX;\n\t\t\t\t\t\tconst posY = mt3 * currentY + 3 * mt2 * t * (cp1y - gy1) + 3 * mt * t2 * (cp2y - gy1) + t3 * nextY;\n\t\t\t\t\t\tconst c = {\n\t\t\t\t\t\t\tfirst: firstCurve && k === 1,\n\t\t\t\t\t\t\tx1: prevX,\n\t\t\t\t\t\t\ty1: prevY,\n\t\t\t\t\t\t\tx2: (prevX + posX) / 2,\n\t\t\t\t\t\t\ty2: (prevY + posY) / 2,\n\t\t\t\t\t\t\tx3: posX,\n\t\t\t\t\t\t\ty3: posY\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcurves.push(c);\n\t\t\t\t\t\tprevX = posX;\n\t\t\t\t\t\tprevY = posY;\n\t\t\t\t\t}\n\t\t\t\t\tfirstCurve = false;\n\t\t\t\t\tcurrentX = nextX;\n\t\t\t\t\tcurrentY = nextY;\n\t\t\t\t} else if (commandType === \"closePath\") {\n\t\t\t\t\tif (currentX !== startOfShapeX || currentY !== startOfShapeY) {\n\t\t\t\t\t\tconst c = {\n\t\t\t\t\t\t\tfirst: firstCurve,\n\t\t\t\t\t\t\tx1: currentX,\n\t\t\t\t\t\t\ty1: currentY,\n\t\t\t\t\t\t\tx3: startOfShapeX,\n\t\t\t\t\t\t\ty3: startOfShapeY,\n\t\t\t\t\t\t\tx2: (currentX + startOfShapeX) / 2,\n\t\t\t\t\t\t\ty2: (currentY + startOfShapeY) / 2\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcurves.push(c);\n\t\t\t\t\t\tfirstCurve = false;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentX = startOfShapeX;\n\t\t\t\t\tcurrentY = startOfShapeY;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!curves || curves.length === 0) continue;\n\t\t\tfor (const c of curves) if (c.x2 === c.x1 && c.y2 === c.y1 || c.x2 === c.x3 && c.y2 === c.y3) {\n\t\t\t\tc.x2 = (c.x1 + c.x3) / 2;\n\t\t\t\tc.y2 = (c.y1 + c.y3) / 2;\n\t\t\t}\n\t\t\tconst bandsTexelIndex = Math.floor(bandsTexBandOffsets.length / 2);\n\t\t\tfor (const c of curves) {\n\t\t\t\tif (c.first && curvesTexData.length % 4 !== 0) {\n\t\t\t\t\tconst toAdd = 4 - curvesTexData.length % 4;\n\t\t\t\t\tfor (let k = 0; k < toAdd; k++) curvesTexData.push(-1);\n\t\t\t\t}\n\t\t\t\tconst newRow = Math.floor(curvesTexData.length / 4) % TEXTURE_WIDTH$1 === TEXTURE_WIDTH$1 - 1;\n\t\t\t\tif (newRow) {\n\t\t\t\t\tconst toAdd = 8 - curvesTexData.length % 4;\n\t\t\t\t\tfor (let k = 0; k < toAdd; k++) curvesTexData.push(-1);\n\t\t\t\t}\n\t\t\t\tif (c.first || newRow) {\n\t\t\t\t\tc.texelIndex = Math.floor(curvesTexData.length / 4);\n\t\t\t\t\tcurvesTexData.push(c.x1, c.y1);\n\t\t\t\t} else c.texelIndex = Math.floor((Math.floor(curvesTexData.length / 2) - 1) / 2);\n\t\t\t\tcurvesTexData.push(c.x2, c.y2);\n\t\t\t\tcurvesTexData.push(c.x3, c.y3);\n\t\t\t}\n\t\t\tconst sizeX = 1 + (gx2 - gx1);\n\t\t\tconst sizeY = 1 + (gy2 - gy1);\n\t\t\tlet bCount = this.bandCount;\n\t\t\tif (sizeX < bCount || sizeY < bCount) {\n\t\t\t\tbCount = Math.floor(Math.min(sizeX, sizeY) / 2);\n\t\t\t\tif (bCount < 1) bCount = 1;\n\t\t\t}\n\t\t\tconst bandDimY = Math.ceil(sizeY / bCount);\n\t\t\tlet bandMinY = 0;\n\t\t\tlet bandMaxY = bandDimY;\n\t\t\tcurves.sort((a, b) => Math.max(b.x1, b.x2, b.x3) - Math.max(a.x1, a.x2, a.x3));\n\t\t\tfor (let b = 0; b < bCount; b++) {\n\t\t\t\tconst bandTexelOffset = Math.floor(bandsTexCurveOffsets.length / 2);\n\t\t\t\tlet curveCount = 0;\n\t\t\t\tfor (const c of curves) {\n\t\t\t\t\tif (c.y1 === c.y2 && c.y2 === c.y3) continue;\n\t\t\t\t\tconst curveMinY = Math.min(c.y1, c.y2, c.y3);\n\t\t\t\t\tconst curveMaxY = Math.max(c.y1, c.y2, c.y3);\n\t\t\t\t\tif (curveMinY > bandMaxY || curveMaxY < bandMinY) continue;\n\t\t\t\t\tconst texelIndex = c.texelIndex ?? 0;\n\t\t\t\t\tconst curveOffsetX = texelIndex % TEXTURE_WIDTH$1;\n\t\t\t\t\tconst curveOffsetY = Math.floor(texelIndex / TEXTURE_WIDTH$1);\n\t\t\t\t\tbandsTexCurveOffsets.push(curveOffsetX, curveOffsetY);\n\t\t\t\t\tcurveCount++;\n\t\t\t\t}\n\t\t\t\tbandsTexBandOffsets.push(curveCount, bandTexelOffset);\n\t\t\t\tbandMinY += bandDimY;\n\t\t\t\tbandMaxY += bandDimY;\n\t\t\t}\n\t\t\tconst bandDimX = Math.ceil(sizeX / bCount);\n\t\t\tlet bandMinX = 0;\n\t\t\tlet bandMaxX = bandDimX;\n\t\t\tcurves.sort((a, b) => Math.max(b.y1, b.y2, b.y3) - Math.max(a.y1, a.y2, a.y3));\n\t\t\tfor (let b = 0; b < bCount; b++) {\n\t\t\t\tconst bandTexelOffset = Math.floor(bandsTexCurveOffsets.length / 2);\n\t\t\t\tlet curveCount = 0;\n\t\t\t\tfor (const c of curves) {\n\t\t\t\t\tif (c.x1 === c.x2 && c.x2 === c.x3) continue;\n\t\t\t\t\tconst curveMinX = Math.min(c.x1, c.x2, c.x3);\n\t\t\t\t\tconst curveMaxX = Math.max(c.x1, c.x2, c.x3);\n\t\t\t\t\tif (curveMinX > bandMaxX || curveMaxX < bandMinX) continue;\n\t\t\t\t\tconst texelIndex = c.texelIndex ?? 0;\n\t\t\t\t\tconst curveOffsetX = texelIndex % TEXTURE_WIDTH$1;\n\t\t\t\t\tconst curveOffsetY = Math.floor(texelIndex / TEXTURE_WIDTH$1);\n\t\t\t\t\tbandsTexCurveOffsets.push(curveOffsetX, curveOffsetY);\n\t\t\t\t\tcurveCount++;\n\t\t\t\t}\n\t\t\t\tbandsTexBandOffsets.push(curveCount, bandTexelOffset);\n\t\t\t\tbandMinX += bandDimX;\n\t\t\t\tbandMaxX += bandDimX;\n\t\t\t}\n\t\t\tcodePointsData.push({\n\t\t\t\tcodePoint: cp,\n\t\t\t\twidth: Math.floor(gx2 - gx1),\n\t\t\t\theight: Math.floor(gy2 - gy1),\n\t\t\t\tadvanceWidth: Math.floor(glyph.advanceWidth || 0),\n\t\t\t\tbearingX: Math.floor(gx1),\n\t\t\t\tbearingY: Math.floor(gy2),\n\t\t\t\tbandCount: bCount,\n\t\t\t\tbandDimX,\n\t\t\t\tbandDimY,\n\t\t\t\tbandsTexCoordX: bandsTexelIndex % TEXTURE_WIDTH$1,\n\t\t\t\tbandsTexCoordY: Math.floor(bandsTexelIndex / TEXTURE_WIDTH$1)\n\t\t\t});\n\t\t}\n\t\tconst bandHeaderTexels = Math.floor(bandsTexBandOffsets.length / 2);\n\t\tfor (let k = 1; k < bandsTexBandOffsets.length; k += 2) bandsTexBandOffsets[k] += bandHeaderTexels;\n\t\treturn this.buildOutput(device, codePointsData, curvesTexData, bandsTexBandOffsets, bandsTexCurveOffsets, font);\n\t}\n\tbuildOutput(device, codePoints, curvesList, bandOffsets, curveOffsets, font) {\n\t\tconst map = /* @__PURE__ */ new Map();\n\t\tfor (const cp of codePoints) map.set(cp.codePoint, cp);\n\t\tlet curvesTex = null;\n\t\tlet bandsTex = null;\n\t\tif (device) {\n\t\t\tconst curvesTexels = Math.ceil(curvesList.length / 4);\n\t\t\tconst curvesTexHeight = Math.max(1, Math.ceil(curvesTexels / TEXTURE_WIDTH$1));\n\t\t\tconst curvesFloatArray = new Float32Array(TEXTURE_WIDTH$1 * curvesTexHeight * 4);\n\t\t\tcurvesFloatArray.fill(-1);\n\t\t\tcurvesFloatArray.set(curvesList);\n\t\t\tcurvesTex = device.createTexture({\n\t\t\t\tlabel: \"SlugGeneratedCurvesTexture\",\n\t\t\t\tsize: [TEXTURE_WIDTH$1, curvesTexHeight],\n\t\t\t\tformat: \"rgba32float\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\tdevice.queue.writeTexture({ texture: curvesTex }, curvesFloatArray, { bytesPerRow: TEXTURE_WIDTH$1 * 16 }, [TEXTURE_WIDTH$1, curvesTexHeight]);\n\t\t\tconst bandsTexels = Math.floor(bandOffsets.length / 2) + Math.floor(curveOffsets.length / 2);\n\t\t\tconst bandsTexHeight = Math.max(1, Math.ceil(bandsTexels / TEXTURE_WIDTH$1));\n\t\t\tconst bandsUintArray = new Uint32Array(TEXTURE_WIDTH$1 * bandsTexHeight * 2);\n\t\t\tbandsUintArray.set(bandOffsets, 0);\n\t\t\tbandsUintArray.set(curveOffsets, bandOffsets.length);\n\t\t\tbandsTex = device.createTexture({\n\t\t\t\tlabel: \"SlugGeneratedBandsTexture\",\n\t\t\t\tsize: [TEXTURE_WIDTH$1, bandsTexHeight],\n\t\t\t\tformat: \"rg32uint\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\tdevice.queue.writeTexture({ texture: bandsTex }, bandsUintArray, { bytesPerRow: TEXTURE_WIDTH$1 * 8 }, [TEXTURE_WIDTH$1, bandsTexHeight]);\n\t\t}\n\t\treturn {\n\t\t\tcodePoints: map,\n\t\t\tcurvesTex,\n\t\t\tbandsTex,\n\t\t\tascender: font.ascent || 0,\n\t\t\tdescender: font.descent || 0,\n\t\t\tlineGap: font.lineGap || 0,\n\t\t\tunitsPerEm: font.unitsPerEm || 0,\n\t\t\t_raw: {\n\t\t\t\tcodePoints,\n\t\t\t\tcurvesList,\n\t\t\t\tbandOffsets,\n\t\t\t\tcurveOffsets,\n\t\t\t\tmetrics: {\n\t\t\t\t\tascender: font.ascent || 0,\n\t\t\t\t\tdescender: font.descent || 0,\n\t\t\t\t\tlineGap: font.lineGap || 0,\n\t\t\t\t\tunitsPerEm: font.unitsPerEm || 0\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\texportSluggish(generatedData) {\n\t\tconst { codePoints, curvesList, bandOffsets, curveOffsets } = generatedData._raw;\n\t\tconst curvesTexels = Math.ceil(curvesList.length / 4);\n\t\tconst curvesTexHeight = Math.ceil(curvesTexels / TEXTURE_WIDTH$1);\n\t\tconst curvesFloatArray = new Float32Array(TEXTURE_WIDTH$1 * curvesTexHeight * 4);\n\t\tcurvesFloatArray.fill(0);\n\t\tcurvesFloatArray.set(curvesList);\n\t\tconst bandsTexels = Math.floor(bandOffsets.length / 2) + Math.floor(curveOffsets.length / 2);\n\t\tconst bandsTexHeight = Math.ceil(bandsTexels / TEXTURE_WIDTH$1);\n\t\tconst bandsUintArray = new Uint32Array(TEXTURE_WIDTH$1 * bandsTexHeight * 2);\n\t\tbandsUintArray.set(bandOffsets, 0);\n\t\tbandsUintArray.set(curveOffsets, bandOffsets.length);\n\t\tconst curvesBytes = curvesFloatArray.byteLength;\n\t\tconst bandsBytes = bandsUintArray.byteLength;\n\t\tconst metrics = generatedData._raw.metrics;\n\t\tconst totalBytes = 10 + codePoints.length * 40 + 8 + curvesBytes + 8 + bandsBytes + 16;\n\t\tconst buffer = new ArrayBuffer(totalBytes);\n\t\tconst view = new DataView(buffer);\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < 8; i++) view.setUint8(offset++, SLUGGISH_HEADER_DATA$1.charCodeAt(i));\n\t\tview.setUint16(offset, codePoints.length, true);\n\t\toffset += 2;\n\t\tfor (const cp of codePoints) {\n\t\t\tview.setUint32(offset, cp.codePoint, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.width, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.height, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.advanceWidth, true);\n\t\t\toffset += 4;\n\t\t\tview.setInt32(offset, cp.bearingX, true);\n\t\t\toffset += 4;\n\t\t\tview.setInt32(offset, cp.bearingY, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.bandCount, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.bandDimX, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint32(offset, cp.bandDimY, true);\n\t\t\toffset += 4;\n\t\t\tview.setUint16(offset, cp.bandsTexCoordX, true);\n\t\t\toffset += 2;\n\t\t\tview.setUint16(offset, cp.bandsTexCoordY, true);\n\t\t\toffset += 2;\n\t\t}\n\t\tview.setUint16(offset, TEXTURE_WIDTH$1, true);\n\t\toffset += 2;\n\t\tview.setUint16(offset, curvesTexHeight, true);\n\t\toffset += 2;\n\t\tview.setUint32(offset, curvesBytes, true);\n\t\toffset += 4;\n\t\tnew Uint8Array(buffer).set(new Uint8Array(curvesFloatArray.buffer), offset);\n\t\toffset += curvesBytes;\n\t\tview.setUint16(offset, TEXTURE_WIDTH$1, true);\n\t\toffset += 2;\n\t\tview.setUint16(offset, bandsTexHeight, true);\n\t\toffset += 2;\n\t\tview.setUint32(offset, bandsBytes, true);\n\t\toffset += 4;\n\t\tnew Uint8Array(buffer).set(new Uint8Array(bandsUintArray.buffer), offset);\n\t\toffset += bandsBytes;\n\t\tview.setInt32(offset, metrics.ascender || 0, true);\n\t\toffset += 4;\n\t\tview.setInt32(offset, metrics.descender || 0, true);\n\t\toffset += 4;\n\t\tview.setInt32(offset, metrics.lineGap || 0, true);\n\t\toffset += 4;\n\t\tview.setInt32(offset, metrics.unitsPerEm || 0, true);\n\t\toffset += 4;\n\t\treturn buffer;\n\t}\n};\n\n//#endregion\n//#region src/slug/slug-font-cache.ts\n/** Per-font load timings are debug output: shown only with LOG_LEVEL=debug or trace. */\nconst VERBOSE_FONT_LOGS = typeof process !== \"undefined\" && /^(debug|trace)$/i.test(process.env?.LOG_LEVEL ?? \"\");\nfunction parseFontWeight(fontWeight) {\n\tif (!fontWeight) return 400;\n\tif (fontWeight === \"bold\") return 700;\n\tif (fontWeight === \"normal\") return 400;\n\tif (typeof fontWeight === \"number\") return fontWeight;\n\tconst parsed = parseInt(fontWeight, 10);\n\treturn isNaN(parsed) ? 400 : parsed;\n}\nfunction getFontCacheKey(fontFamily, fontWeight, strokeWidth, axes) {\n\treturn `${fontFamily}-${parseFontWeight(fontWeight)}${strokeWidth ? `-stroke-${strokeWidth}` : \"\"}${axes && Object.keys(axes).length > 0 ? `-axes-${Object.entries(axes).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => `${k}_${v}`).join(\"_\")}` : \"\"}`;\n}\n/**\n* fontkit.create() accepts a Buffer at the type level, but works fine at\n* runtime with a plain Uint8Array (this keeps things portable between\n* Node.js and the browser, where a real `Buffer` may not exist). It can\n* also return a `FontCollection` for multi-font files (e.g. .ttc) instead\n* of a single `Font` — in that case we grab the first font in the\n* collection. Both quirks are isolated here at the fontkit boundary.\n*/\nfunction parseFontBuffer(bytes) {\n\tconst parsed = fontkit.create(bytes);\n\tlet font;\n\tif (parsed && typeof parsed.fonts !== \"undefined\" && Array.isArray(parsed.fonts) && (parsed.fonts.length ?? 0) > 0) font = parsed.fonts[0];\n\telse if (parsed && typeof parsed.getFont === \"function\" && typeof parsed.getGlyph !== \"function\") font = parsed.fonts?.[0] || parsed;\n\telse font = parsed;\n\treturn font;\n}\nfunction recreateTextures(device, slugFont) {\n\tif (slugFont.curvesTex) return;\n\tconst raw = slugFont._raw;\n\tif (!raw) return;\n\tconst TEXTURE_WIDTH$2 = 4096;\n\tconst curvesTexels = Math.ceil(raw.curvesList.length / 4);\n\tconst curvesTexHeight = Math.max(1, Math.ceil(curvesTexels / TEXTURE_WIDTH$2));\n\tconst curvesFloatArray = new Float32Array(TEXTURE_WIDTH$2 * curvesTexHeight * 4);\n\tcurvesFloatArray.fill(-1);\n\tcurvesFloatArray.set(raw.curvesList);\n\tslugFont.curvesTex = device.createTexture({\n\t\tlabel: \"SlugGeneratedCurvesTexture\",\n\t\tsize: [TEXTURE_WIDTH$2, curvesTexHeight],\n\t\tformat: \"rgba32float\",\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture: slugFont.curvesTex }, curvesFloatArray, { bytesPerRow: TEXTURE_WIDTH$2 * 16 }, [TEXTURE_WIDTH$2, curvesTexHeight]);\n\tconst bandsTexels = Math.floor(raw.bandOffsets.length / 2) + Math.floor(raw.curveOffsets.length / 2);\n\tconst bandsTexHeight = Math.max(1, Math.ceil(bandsTexels / TEXTURE_WIDTH$2));\n\tconst bandsUintArray = new Uint32Array(TEXTURE_WIDTH$2 * bandsTexHeight * 2);\n\tbandsUintArray.set(raw.bandOffsets, 0);\n\tbandsUintArray.set(raw.curveOffsets, raw.bandOffsets.length);\n\tslugFont.bandsTex = device.createTexture({\n\t\tlabel: \"SlugGeneratedBandsTexture\",\n\t\tsize: [TEXTURE_WIDTH$2, bandsTexHeight],\n\t\tformat: \"rg32uint\",\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture: slugFont.bandsTex }, bandsUintArray, { bytesPerRow: TEXTURE_WIDTH$2 * 8 }, [TEXTURE_WIDTH$2, bandsTexHeight]);\n}\nconst GLOBAL_CACHE_KEY = Symbol.for(\"gatewai.slugFontCache.cache\");\nconst GLOBAL_PARSED_KEY = Symbol.for(\"gatewai.slugFontCache.parsed\");\nconst GLOBAL_PROMISES_KEY = Symbol.for(\"gatewai.slugFontCache.promises\");\nconst GLOBAL_FAILED_KEY = Symbol.for(\"gatewai.slugFontCache.failed\");\nconst g = globalThis;\ng[GLOBAL_CACHE_KEY] = g[GLOBAL_CACHE_KEY] || /* @__PURE__ */ new Map();\ng[GLOBAL_PARSED_KEY] = g[GLOBAL_PARSED_KEY] || /* @__PURE__ */ new Map();\ng[GLOBAL_PROMISES_KEY] = g[GLOBAL_PROMISES_KEY] || /* @__PURE__ */ new Map();\ng[GLOBAL_FAILED_KEY] = g[GLOBAL_FAILED_KEY] || /* @__PURE__ */ new Map();\nvar SlugFontCache = class SlugFontCache {\n\tstatic get cache() {\n\t\treturn g[GLOBAL_CACHE_KEY];\n\t}\n\tstatic get parsedFontCache() {\n\t\treturn g[GLOBAL_PARSED_KEY];\n\t}\n\t/** Register an already parsed font (e.g. by FontManager) under a family name. */\n\tstatic setParsed(fontFamily, font) {\n\t\tSlugFontCache.parsedFontCache.set(fontFamily, font);\n\t}\n\tstatic getParsed(fontFamily) {\n\t\treturn SlugFontCache.parsedFontCache.get(fontFamily) || null;\n\t}\n\tstatic getAllParsed() {\n\t\treturn Array.from(SlugFontCache.parsedFontCache.values());\n\t}\n\tstatic getFirstParsed() {\n\t\tconst iter = SlugFontCache.parsedFontCache.values().next();\n\t\treturn iter.done ? null : iter.value;\n\t}\n\tstatic hasPending() {\n\t\treturn SlugFontCache.loadingPromises.size > 0;\n\t}\n\tstatic listeners = /* @__PURE__ */ new Set();\n\tstatic get loadingPromises() {\n\t\treturn g[GLOBAL_PROMISES_KEY];\n\t}\n\tstatic get failedFonts() {\n\t\tif (g[GLOBAL_FAILED_KEY] instanceof Set) g[GLOBAL_FAILED_KEY] = /* @__PURE__ */ new Map();\n\t\treturn g[GLOBAL_FAILED_KEY];\n\t}\n\tstatic emojiFontPath = null;\n\tstatic emojiFontUrl = null;\n\tstatic emojiTextureCache = /* @__PURE__ */ new Map();\n\tstatic emojiFontBuffer = null;\n\tstatic emojiFontLoadPromise = null;\n\tstatic emojiFontFaceLoadPromise = null;\n\tstatic cmapOffset = 0;\n\tstatic cblcOffset = 0;\n\tstatic cbdtOffset = 0;\n\t/**\n\t* Parse the SFNT table directory from a raw font buffer and cache\n\t* the offsets for cmap, CBLC, and CBDT tables.\n\t*/\n\tstatic parseTableDirectory(uint8) {\n\t\tSlugFontCache.emojiFontBuffer = uint8;\n\t\tconst view = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength);\n\t\tconst numTables = view.getUint16(4);\n\t\tlet offset = 12;\n\t\tfor (let i = 0; i < numTables; i++) {\n\t\t\tconst tag = String.fromCharCode(view.getUint8(offset), view.getUint8(offset + 1), view.getUint8(offset + 2), view.getUint8(offset + 3));\n\t\t\tif (tag === \"cmap\") SlugFontCache.cmapOffset = view.getUint32(offset + 8);\n\t\t\telse if (tag === \"CBLC\") SlugFontCache.cblcOffset = view.getUint32(offset + 8);\n\t\t\telse if (tag === \"CBDT\") SlugFontCache.cbdtOffset = view.getUint32(offset + 8);\n\t\t\toffset += 16;\n\t\t}\n\t}\n\t/**\n\t* Load the emoji font binary from a local filesystem path (Node.js only)\n\t* or from an HTTP URL via fetch.\n\t*/\n\tstatic async loadEmojiFontBinary() {\n\t\tif (SlugFontCache.emojiFontBuffer) return;\n\t\tif (SlugFontCache.emojiFontLoadPromise) {\n\t\t\tawait SlugFontCache.emojiFontLoadPromise;\n\t\t\treturn;\n\t\t}\n\t\tSlugFontCache.emojiFontLoadPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tif ((!!globalThis.__IS_HEADLESS_RENDERER__ || typeof window === \"undefined\" || typeof globalThis.document === \"undefined\") && SlugFontCache.emojiFontPath) {\n\t\t\t\t\tconst nodeBuffer = await (await import(\n\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\"fs/promises\"\n)).readFile(SlugFontCache.emojiFontPath);\n\t\t\t\t\tconst uint8 = new Uint8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.byteLength);\n\t\t\t\t\tSlugFontCache.parseTableDirectory(uint8);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst url = SlugFontCache.emojiFontUrl;\n\t\t\t\tif (!url) {\n\t\t\t\t\tconsole.warn(\"[SlugFontCache] No emoji font path or URL configured.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst response = await fetch(url);\n\t\t\t\tif (!response.ok) throw new Error(`Failed to fetch emoji font from ${url}: ${response.statusText}`);\n\t\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\t\tSlugFontCache.parseTableDirectory(new Uint8Array(arrayBuffer));\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[SlugFontCache] Failed to load emoji font binary:\", err);\n\t\t\t}\n\t\t})();\n\t\tawait SlugFontCache.emojiFontLoadPromise;\n\t}\n\tstatic async getEmojiPngBuffer(codePoint) {\n\t\tif (!SlugFontCache.emojiFontBuffer) {\n\t\t\tif (SlugFontCache.emojiFontPath || SlugFontCache.emojiFontUrl) await SlugFontCache.loadEmojiFontBinary();\n\t\t}\n\t\tconst uint8 = SlugFontCache.emojiFontBuffer;\n\t\tif (!uint8) return null;\n\t\tconst view = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength);\n\t\tconst cmapHead = SlugFontCache.cmapOffset;\n\t\tif (!cmapHead) return null;\n\t\tconst numSubTables = view.getUint16(cmapHead + 2);\n\t\tlet format12Offset = 0;\n\t\tfor (let i = 0; i < numSubTables; i++) {\n\t\t\tconst subTableRecord = cmapHead + 4 + i * 8;\n\t\t\tconst subOffset = view.getUint32(subTableRecord + 4);\n\t\t\tif (view.getUint16(cmapHead + subOffset) === 12) {\n\t\t\t\tformat12Offset = cmapHead + subOffset;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!format12Offset) return null;\n\t\tconst numGroups = view.getUint32(format12Offset + 12);\n\t\tlet glyphID = 0;\n\t\tfor (let g$1 = 0; g$1 < numGroups; g$1++) {\n\t\t\tconst groupOffset = format12Offset + 16 + g$1 * 12;\n\t\t\tconst startCharCode = view.getUint32(groupOffset);\n\t\t\tconst endCharCode = view.getUint32(groupOffset + 4);\n\t\t\tconst startGlyphID = view.getUint32(groupOffset + 8);\n\t\t\tif (codePoint >= startCharCode && codePoint <= endCharCode) {\n\t\t\t\tglyphID = startGlyphID + (codePoint - startCharCode);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!glyphID) return null;\n\t\tconst cblcOffset = SlugFontCache.cblcOffset;\n\t\tconst cbdtOffset = SlugFontCache.cbdtOffset;\n\t\tif (!cblcOffset || !cbdtOffset) return null;\n\t\tconst indexSubTableArrayOffset = view.getUint32(cblcOffset + 8);\n\t\tconst numberOfIndexSubTables = view.getUint32(cblcOffset + 16);\n\t\tconst arrayStart = cblcOffset + indexSubTableArrayOffset;\n\t\tlet foundSubtable = null;\n\t\tfor (let i = 0; i < numberOfIndexSubTables; i++) {\n\t\t\tconst entryOffset = arrayStart + i * 8;\n\t\t\tconst firstGlyph = view.getUint16(entryOffset);\n\t\t\tconst lastGlyph = view.getUint16(entryOffset + 2);\n\t\t\tconst subTableOffset = view.getUint32(entryOffset + 4);\n\t\t\tif (glyphID >= firstGlyph && glyphID <= lastGlyph) {\n\t\t\t\tfoundSubtable = {\n\t\t\t\t\tfirstGlyph,\n\t\t\t\t\tlastGlyph,\n\t\t\t\t\tsubTableOffset: indexSubTableArrayOffset + subTableOffset\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!foundSubtable) return null;\n\t\tconst subTableStart = cblcOffset + foundSubtable.subTableOffset;\n\t\tconst indexFormat = view.getUint16(subTableStart);\n\t\tconst imageFormat = view.getUint16(subTableStart + 2);\n\t\tconst imageDataOffset = view.getUint32(subTableStart + 4);\n\t\tif (indexFormat !== 1 || imageFormat !== 17) return null;\n\t\tconst idx = glyphID - foundSubtable.firstGlyph;\n\t\tconst offsetArrayStart = subTableStart + 8;\n\t\tconst startOffset = view.getUint32(offsetArrayStart + idx * 4);\n\t\tif (view.getUint32(offsetArrayStart + (idx + 1) * 4) - startOffset <= 0) return null;\n\t\tconst absoluteGlyphOffset = cbdtOffset + imageDataOffset + startOffset;\n\t\tconst height = view.getUint8(absoluteGlyphOffset);\n\t\tconst width = view.getUint8(absoluteGlyphOffset + 1);\n\t\tconst dataLen = view.getUint32(absoluteGlyphOffset + 5);\n\t\tconst pngStart = absoluteGlyphOffset + 9;\n\t\treturn {\n\t\t\tbuffer: new Uint8Array(uint8.buffer, uint8.byteOffset + pngStart, dataLen),\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t}\n\tstatic async preloadEmoji(device, char, fontSize) {\n\t\tconst key = `${char}-${fontSize}`;\n\t\tlet tex = SlugFontCache.emojiTextureCache.get(key);\n\t\tif (tex) return tex;\n\t\tif (!!globalThis.__IS_HEADLESS_RENDERER__ || typeof window === \"undefined\" || typeof globalThis.document === \"undefined\") {\n\t\t\tconst codePoint = char.codePointAt(0);\n\t\t\tif (!codePoint) throw new Error(\"No codepoint\");\n\t\t\tconst pngInfo = await SlugFontCache.getEmojiPngBuffer(codePoint);\n\t\t\tif (!pngInfo) throw new Error(`Emoji glyph not found in font for ${char}`);\n\t\t\tconst sharp = (await import(\n\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\"sharp\"\n)).default;\n\t\t\tconst targetSize = Math.max(16, Math.ceil(fontSize * 1.5 * 4));\n\t\t\tconst { data, info } = await sharp(Buffer.from(pngInfo.buffer)).ensureAlpha().resize(targetSize, targetSize, {\n\t\t\t\tfit: \"contain\",\n\t\t\t\tbackground: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\talpha: 0\n\t\t\t\t},\n\t\t\t\tkernel: \"lanczos3\"\n\t\t\t}).raw().toBuffer({ resolveWithObject: true });\n\t\t\tconst pixels = new Uint8Array(data.length);\n\t\t\tpixels.set(data);\n\t\t\tfor (let i = 0; i < pixels.length; i += 4) {\n\t\t\t\tconst alpha = pixels[i + 3];\n\t\t\t\tif (alpha < 255) {\n\t\t\t\t\tconst f = alpha / 255;\n\t\t\t\t\tpixels[i] = Math.round(pixels[i] * f);\n\t\t\t\t\tpixels[i + 1] = Math.round(pixels[i + 1] * f);\n\t\t\t\t\tpixels[i + 2] = Math.round(pixels[i + 2] * f);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttex = device.createTexture({\n\t\t\t\tlabel: `Emoji-${char}`,\n\t\t\t\tsize: [info.width, info.height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\tdevice.queue.writeTexture({ texture: tex }, pixels, { bytesPerRow: info.width * 4 }, [info.width, info.height]);\n\t\t} else {\n\t\t\tconst resolutionScale = 4;\n\t\t\tconst emojiSize = Math.max(16, Math.ceil(fontSize * 1.5 * resolutionScale));\n\t\t\tconst size = Math.ceil(emojiSize / 4) * 4;\n\t\t\tconst canvas = new OffscreenCanvas(size, size);\n\t\t\tconst c2d = canvas.getContext(\"2d\");\n\t\t\tif (c2d) {\n\t\t\t\tc2d.font = `${fontSize * resolutionScale}px \"NotoColorEmoji\", \"Emoji\", \"Apple Color Emoji\", \"Segoe UI Emoji\", sans-serif`;\n\t\t\t\tc2d.textBaseline = \"middle\";\n\t\t\t\tc2d.textAlign = \"center\";\n\t\t\t\tc2d.fillText(char, size / 2, size / 2);\n\t\t\t}\n\t\t\ttex = device.createTexture({\n\t\t\t\tlabel: `Emoji-${char}`,\n\t\t\t\tsize: [size, size],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t\tdevice.queue.copyExternalImageToTexture({ source: canvas }, {\n\t\t\t\ttexture: tex,\n\t\t\t\tpremultipliedAlpha: true\n\t\t\t}, [size, size]);\n\t\t}\n\t\tSlugFontCache.emojiTextureCache.set(key, tex);\n\t\treturn tex;\n\t}\n\tstatic getFont(fontFamily, fontWeight, device, strokeWidth, fontSize, variableAxes) {\n\t\tconst effectiveAxes = { ...variableAxes ?? {} };\n\t\tconst rawFont = SlugFontCache.parsedFontCache.get(fontFamily);\n\t\tif (rawFont?.variationAxes && \"opsz\" in rawFont.variationAxes && fontSize !== void 0 && effectiveAxes.opsz === void 0) {\n\t\t\tconst axis = rawFont.variationAxes.opsz;\n\t\t\tconst minOpsz = axis?.min ?? 14;\n\t\t\tconst maxOpsz = axis?.max ?? 32;\n\t\t\teffectiveAxes.opsz = Math.min(maxOpsz, Math.max(minOpsz, fontSize));\n\t\t}\n\t\tconst cacheKey = getFontCacheKey(fontFamily, fontWeight, strokeWidth, effectiveAxes);\n\t\tconst cached$1 = SlugFontCache.cache.get(cacheKey);\n\t\tif (cached$1) {\n\t\t\tif (device) recreateTextures(device, cached$1);\n\t\t\treturn cached$1;\n\t\t}\n\t\tif (rawFont) {\n\t\t\tconst weight = parseFontWeight(fontWeight);\n\t\t\tlet variationFont = rawFont;\n\t\t\tlet hasTrueWeight = false;\n\t\t\tif (rawFont.variationAxes && Object.keys(rawFont.variationAxes).length > 0) try {\n\t\t\t\tif (typeof rawFont.getVariation === \"function\") {\n\t\t\t\t\tconst variationParams = {\n\t\t\t\t\t\twght: weight,\n\t\t\t\t\t\t...effectiveAxes\n\t\t\t\t\t};\n\t\t\t\t\tconst vFont = rawFont.getVariation(variationParams);\n\t\t\t\t\tif (vFont && (typeof vFont.getGlyph === \"function\" || typeof vFont.glyphForCodePoint === \"function\")) {\n\t\t\t\t\t\tvariationFont = vFont;\n\t\t\t\t\t\thasTrueWeight = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(`[SlugFontCache] Failed to get variation for ${fontFamily} with weight ${weight}:`, e);\n\t\t\t}\n\t\t\tif (variationFont && (typeof variationFont.getGlyph === \"function\" || typeof variationFont.glyphForCodePoint === \"function\")) try {\n\t\t\t\tconst generated = new SlugGenerator({\n\t\t\t\t\tfullRange: false,\n\t\t\t\t\tstrokeWidth\n\t\t\t\t}).generate(device ?? null, variationFont);\n\t\t\t\tgenerated.hasTrueWeight = hasTrueWeight;\n\t\t\t\tgenerated.weight = weight;\n\t\t\t\tgenerated.fontFamily = fontFamily;\n\t\t\t\tSlugFontCache.cache.set(cacheKey, generated);\n\t\t\t\treturn generated;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(`[SlugFontCache] Failed to generate variation font for ${fontFamily}:`, e);\n\t\t\t}\n\t\t}\n\t\tconst baseFont = SlugFontCache.cache.get(fontFamily);\n\t\tif (baseFont) {\n\t\t\tbaseFont.fontFamily = fontFamily;\n\t\t\tif (device) recreateTextures(device, baseFont);\n\t\t}\n\t\treturn baseFont;\n\t}\n\tstatic registerFont(fontFamily, font) {\n\t\tfont.fontFamily = fontFamily;\n\t\tSlugFontCache.cache.set(fontFamily, font);\n\t}\n\tstatic ensureTextures(device, font) {\n\t\trecreateTextures(device, font);\n\t}\n\tstatic addListener(listener) {\n\t\tSlugFontCache.listeners.add(listener);\n\t\treturn () => {\n\t\t\tSlugFontCache.listeners.delete(listener);\n\t\t};\n\t}\n\tstatic isFailed(fontFamily) {\n\t\tconst failedAt = SlugFontCache.failedFonts.get(fontFamily);\n\t\tif (!failedAt) return false;\n\t\tif (Date.now() - failedAt > 5e3) {\n\t\t\tSlugFontCache.failedFonts.delete(fontFamily);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\tstatic clearFailed(fontFamily) {\n\t\tif (fontFamily) SlugFontCache.failedFonts.delete(fontFamily);\n\t\telse SlugFontCache.failedFonts.clear();\n\t}\n\tstatic async preloadSlugFont(device, fontFamily, fontUrl, whitelist, renderId) {\n\t\tif (SlugFontCache.isFailed(fontFamily)) throw new Error(`Font \"${fontFamily}\" recently failed to load.`);\n\t\tlet slugFont;\n\t\tconst cached$1 = SlugFontCache.cache.get(fontFamily);\n\t\tlet delayHandle = null;\n\t\tif (typeof window !== \"undefined\") {\n\t\t\tconst win = window;\n\t\t\twin.renderer_delayRenderHandles = win.renderer_delayRenderHandles || [];\n\t\t\tif (renderId) delayHandle = `${renderId}-font-${Math.random()}`;\n\t\t\telse delayHandle = Math.random();\n\t\t\twin.renderer_delayRenderHandles.push(delayHandle);\n\t\t}\n\t\ttry {\n\t\t\tif (cached$1) slugFont = cached$1;\n\t\t\telse {\n\t\t\t\tlet activePromise = SlugFontCache.loadingPromises.get(fontFamily);\n\t\t\t\tif (activePromise) slugFont = await activePromise;\n\t\t\t\telse {\n\t\t\t\t\tactivePromise = (async () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet buffer;\n\t\t\t\t\t\t\tconst isNode = !!globalThis.__IS_HEADLESS_RENDERER__ || typeof window === \"undefined\" || typeof globalThis.document === \"undefined\";\n\t\t\t\t\t\t\tconst isHttp = fontUrl.startsWith(\"http://\") || fontUrl.startsWith(\"https://\");\n\t\t\t\t\t\t\tif (isNode && !isHttp) {\n\t\t\t\t\t\t\t\tconst fs$1 = await import(\n\t\t\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\t\t\"fs/promises\"\n);\n\t\t\t\t\t\t\t\tconst path$1 = await import(\n\t\t\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\t\t\"path\"\n);\n\t\t\t\t\t\t\t\tconst candidates = [];\n\t\t\t\t\t\t\t\tif (fontUrl && !fontUrl.startsWith(\"//api/\")) {\n\t\t\t\t\t\t\t\t\tlet fontPath = fontUrl;\n\t\t\t\t\t\t\t\t\tif (fontUrl.startsWith(\"file://\")) try {\n\t\t\t\t\t\t\t\t\t\tfontPath = new URL(fontUrl).pathname;\n\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\tfontPath = fontUrl.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcandidates.push(fontPath);\n\t\t\t\t\t\t\t\t\tcandidates.push(path$1.resolve(process.cwd(), fontPath));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst cleanFamily = fontFamily.replace(/['\"]/g, \"\").trim();\n\t\t\t\t\t\t\t\tconst variations = [\n\t\t\t\t\t\t\t\t\tcleanFamily,\n\t\t\t\t\t\t\t\t\tcleanFamily.replace(/ /g, \"\"),\n\t\t\t\t\t\t\t\t\tcleanFamily.replace(/ /g, \"_\")\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\tfor (const v of variations) {\n\t\t\t\t\t\t\t\t\tcandidates.push(path$1.resolve(process.cwd(), \"assets/fonts\", v + \".ttf\"));\n\t\t\t\t\t\t\t\t\tcandidates.push(path$1.resolve(process.cwd(), \"assets/fonts\", v + \".otf\"));\n\t\t\t\t\t\t\t\t\tcandidates.push(`/Users/okanaslankan/gitframes/assets/fonts/${v}.ttf`);\n\t\t\t\t\t\t\t\t\tcandidates.push(`/Users/okanaslankan/Gatewai/apps/gatewai-artifex/assets/fonts/${v}.ttf`);\n\t\t\t\t\t\t\t\t\tcandidates.push(`/Users/okanaslankan/Gatewai/apps/gatewai-backend/src/assets/fonts/${v}/font_file.ttf`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcandidates.push(\"/Users/okanaslankan/gitframes/assets/fonts/Inter.ttf\");\n\t\t\t\t\t\t\t\tcandidates.push(\"/Users/okanaslankan/Gatewai/apps/gatewai-artifex/assets/fonts/Inter.ttf\");\n\t\t\t\t\t\t\t\tlet nodeBuffer = null;\n\t\t\t\t\t\t\t\tfor (const c of candidates) try {\n\t\t\t\t\t\t\t\t\tnodeBuffer = await fs$1.readFile(c);\n\t\t\t\t\t\t\t\t\tif (nodeBuffer && nodeBuffer.length > 0) break;\n\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\tif (!nodeBuffer) throw new Error(`Could not resolve font file for \"${fontFamily}\" (${fontUrl})`);\n\t\t\t\t\t\t\t\tbuffer = nodeBuffer.buffer.slice(nodeBuffer.byteOffset, nodeBuffer.byteOffset + nodeBuffer.byteLength);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst response = await fetch(fontUrl);\n\t\t\t\t\t\t\t\tif (!response.ok) throw new Error(`Failed to fetch font from ${fontUrl}: ${response.statusText}`);\n\t\t\t\t\t\t\t\tbuffer = await response.arrayBuffer();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst startTime = performance.now();\n\t\t\t\t\t\t\tconst font = parseFontBuffer(new Uint8Array(buffer));\n\t\t\t\t\t\t\tconst parseTime = performance.now();\n\t\t\t\t\t\t\tSlugFontCache.parsedFontCache.set(fontFamily, font);\n\t\t\t\t\t\t\tconst generated = new SlugGenerator({\n\t\t\t\t\t\t\t\tfullRange: false,\n\t\t\t\t\t\t\t\twhitelist: whitelist || null\n\t\t\t\t\t\t\t}).generate(device, font);\n\t\t\t\t\t\t\tconst generateTime = performance.now();\n\t\t\t\t\t\t\tif (VERBOSE_FONT_LOGS) console.log(`[SlugFontCache] Preloaded and parsed font \"${fontFamily}\":\\n - fontkit parse: ${(parseTime - startTime).toFixed(2)}ms\\n - slug generation: ${(generateTime - parseTime).toFixed(2)}ms\\n - total: ${(generateTime - startTime).toFixed(2)}ms`);\n\t\t\t\t\t\t\tgenerated.fontFamily = fontFamily;\n\t\t\t\t\t\t\tSlugFontCache.cache.set(fontFamily, generated);\n\t\t\t\t\t\t\tSlugFontCache.listeners.forEach((l) => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tl(fontFamily);\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tconsole.error(\"[SlugFontCache] Error in listener:\", e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn generated;\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tSlugFontCache.failedFonts.set(fontFamily, Date.now());\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tSlugFontCache.loadingPromises.delete(fontFamily);\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\tSlugFontCache.loadingPromises.set(fontFamily, activePromise);\n\t\t\t\t\tslugFont = await activePromise;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tif (delayHandle !== null && typeof window !== \"undefined\") {\n\t\t\t\tconst win = window;\n\t\t\t\tif (win.renderer_delayRenderHandles) {\n\t\t\t\t\tconst idx = win.renderer_delayRenderHandles.indexOf(delayHandle);\n\t\t\t\t\tif (idx > -1) win.renderer_delayRenderHandles.splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (device) {\n\t\t\tconst hadTex = !!slugFont.curvesTex;\n\t\t\trecreateTextures(device, slugFont);\n\t\t\tif (!hadTex && slugFont.curvesTex) SlugFontCache.listeners.forEach((l) => {\n\t\t\t\ttry {\n\t\t\t\t\tl(fontFamily);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(\"[SlugFontCache] Error in listener:\", e);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn slugFont;\n\t}\n\t/**\n\t* Preloads the emoji font in the browser using the Cache API and registers\n\t* a FontFace so canvas 2D can render emojis natively.\n\t* No-op in Node.js environments.\n\t*/\n\tstatic async preloadEmojiFontFace(url) {\n\t\tif (typeof window === \"undefined\" || typeof caches === \"undefined\" || typeof FontFace === \"undefined\") return;\n\t\tSlugFontCache.emojiFontUrl = url;\n\t\tif (SlugFontCache.emojiFontFaceLoadPromise) {\n\t\t\tawait SlugFontCache.emojiFontFaceLoadPromise;\n\t\t\treturn;\n\t\t}\n\t\tSlugFontCache.emojiFontFaceLoadPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tconst cache = await caches.open(\"gatewai-emoji-font\");\n\t\t\t\tlet response = await cache.match(url);\n\t\t\t\tif (!response) {\n\t\t\t\t\tconst networkResponse = await fetch(url);\n\t\t\t\t\tif (!networkResponse.ok) throw new Error(`Failed to fetch emoji font from ${url}: ${networkResponse.statusText}`);\n\t\t\t\t\tawait cache.put(url, networkResponse.clone());\n\t\t\t\t\tresponse = networkResponse;\n\t\t\t\t}\n\t\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\t\tSlugFontCache.parseTableDirectory(new Uint8Array(arrayBuffer));\n\t\t\t\tconst loadedFace = await new FontFace(\"NotoColorEmoji\", arrayBuffer).load();\n\t\t\t\tdocument.fonts.add(loadedFace);\n\t\t\t\tawait document.fonts.ready;\n\t\t\t\tconsole.log(\"[SlugFontCache] Emoji font preloaded and registered via Cache API.\");\n\t\t\t\tSlugFontCache.listeners.forEach((l) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tl(\"NotoColorEmoji\");\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(\"[SlugFontCache] Error in listener:\", e);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tconsole.warn(\"[SlugFontCache] Failed to preload emoji font face:\", err);\n\t\t\t\tSlugFontCache.emojiFontFaceLoadPromise = null;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t})();\n\t\tawait SlugFontCache.emojiFontFaceLoadPromise;\n\t}\n\tstatic destroy() {\n\t\tfor (const font of SlugFontCache.cache.values()) {\n\t\t\tfont.curvesTex?.destroy();\n\t\t\tfont.bandsTex?.destroy();\n\t\t}\n\t\tSlugFontCache.cache.clear();\n\t\tSlugFontCache.failedFonts.clear();\n\t\tfor (const tex of SlugFontCache.emojiTextureCache.values()) tex.destroy();\n\t\tSlugFontCache.emojiTextureCache.clear();\n\t\tSlugFontCache.emojiFontBuffer = null;\n\t\tSlugFontCache.emojiFontLoadPromise = null;\n\t\tSlugFontCache.emojiFontFaceLoadPromise = null;\n\t}\n};\n\n//#endregion\n//#region src/text-animations/path.ts\n/**\n* Evaluates a point on a cubic Bezier curve at parameter t in [0, 1].\n*/\nfunction evaluateCubicBezier(segment, t) {\n\tconst u = 1 - t;\n\tconst tt = t * t;\n\tconst uu = u * u;\n\tconst uuu = uu * u;\n\tconst ttt = tt * t;\n\treturn {\n\t\tx: uuu * segment.p0.x + 3 * uu * t * segment.p1.x + 3 * u * tt * segment.p2.x + ttt * segment.p3.x,\n\t\ty: uuu * segment.p0.y + 3 * uu * t * segment.p1.y + 3 * u * tt * segment.p2.y + ttt * segment.p3.y\n\t};\n}\n/**\n* Evaluates the first derivative (tangent velocity vector) of a cubic Bezier curve at parameter t.\n*/\nfunction evaluateCubicBezierDerivative(segment, t) {\n\tconst u = 1 - t;\n\treturn {\n\t\tx: 3 * u * u * (segment.p1.x - segment.p0.x) + 6 * u * t * (segment.p2.x - segment.p1.x) + 3 * t * t * (segment.p3.x - segment.p2.x),\n\t\ty: 3 * u * u * (segment.p1.y - segment.p0.y) + 6 * u * t * (segment.p2.y - segment.p1.y) + 3 * t * t * (segment.p3.y - segment.p2.y)\n\t};\n}\n/**\n* Generates an arc-length parameterization lookup table (LUT) for a cubic Bezier segment.\n* Ensures glyphs travel with uniform speed and do not bunch up on tight curve bends.\n*/\nfunction generateArcLengthLUT(segment, samples = 100) {\n\tconst lut = [{\n\t\tdistance: 0,\n\t\tt: 0\n\t}];\n\tlet accumulatedDist = 0;\n\tlet prevPoint = segment.p0;\n\tfor (let i = 1; i <= samples; i++) {\n\t\tconst t = i / samples;\n\t\tconst currentPoint = evaluateCubicBezier(segment, t);\n\t\tconst dx = currentPoint.x - prevPoint.x;\n\t\tconst dy = currentPoint.y - prevPoint.y;\n\t\taccumulatedDist += Math.hypot(dx, dy);\n\t\tlut.push({\n\t\t\tdistance: accumulatedDist,\n\t\t\tt\n\t\t});\n\t\tprevPoint = currentPoint;\n\t}\n\treturn {\n\t\tlut,\n\t\ttotalLength: accumulatedDist\n\t};\n}\n/**\n* Maps a distance along the curve (in pixels) to normalized curve parameter t via binary search on the LUT.\n*/\nfunction distanceToCurveParameter(lut, distance, totalLength) {\n\tif (distance <= 0) return 0;\n\tif (distance >= totalLength) return 1;\n\tlet low = 0;\n\tlet high = lut.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = low + high >> 1;\n\t\tif (lut[mid].distance < distance) low = mid + 1;\n\t\telse high = mid - 1;\n\t}\n\tconst index = Math.max(1, Math.min(low, lut.length - 1));\n\tconst prev = lut[index - 1];\n\tconst curr = lut[index];\n\tconst segmentDist = curr.distance - prev.distance;\n\tif (segmentDist <= 1e-6) return prev.t;\n\tconst ratio = (distance - prev.distance) / segmentDist;\n\treturn prev.t + ratio * (curr.t - prev.t);\n}\n/**\n* Samples position and baseline tangent orientation angle along a curve at distance `dist`.\n*/\nfunction sampleCurveGeometry(segment, lut, totalLength, distance) {\n\tconst t = distanceToCurveParameter(lut, distance, totalLength);\n\tconst pos = evaluateCubicBezier(segment, t);\n\tconst deriv = evaluateCubicBezierDerivative(segment, t);\n\tconst length = Math.hypot(deriv.x, deriv.y);\n\tconst nx = length > 1e-6 ? -deriv.y / length : 0;\n\tconst ny = length > 1e-6 ? deriv.x / length : 1;\n\treturn {\n\t\tposition: pos,\n\t\ttangentAngleDeg: Math.atan2(deriv.y, deriv.x) * 180 / Math.PI,\n\t\tnormal: {\n\t\t\tx: nx,\n\t\t\ty: ny\n\t\t}\n\t};\n}\n/**\n* Builds a cumulative Arc-Length LUT across a chain of Cubic Bezier segments.\n*/\nfunction buildPathLUT(segments, samplesPerSegment = 50) {\n\tif (segments.length === 0) return {\n\t\ttotalLength: 0,\n\t\tentries: [{\n\t\t\tdistance: 0,\n\t\t\tsegmentIndex: 0,\n\t\t\tt: 0\n\t\t}],\n\t\tsegments: []\n\t};\n\tconst segLuts = [];\n\tconst entries = [];\n\tlet accumulatedDist = 0;\n\tfor (let segIdx = 0; segIdx < segments.length; segIdx++) {\n\t\tconst seg = segments[segIdx];\n\t\tconst { lut: segLut, totalLength: segLength } = generateArcLengthLUT(seg, samplesPerSegment);\n\t\tsegLuts.push({\n\t\t\tsegmentIndex: segIdx,\n\t\t\tstartDistance: accumulatedDist,\n\t\t\tlength: segLength,\n\t\t\tlut: segLut\n\t\t});\n\t\tfor (let i = 0; i < segLut.length; i++) entries.push({\n\t\t\tdistance: accumulatedDist + segLut[i].distance,\n\t\t\tsegmentIndex: segIdx,\n\t\t\tt: segLut[i].t\n\t\t});\n\t\taccumulatedDist += segLength;\n\t}\n\treturn {\n\t\ttotalLength: accumulatedDist,\n\t\tentries,\n\t\tsegments: segLuts\n\t};\n}\n/**\n* Samples position, tangent angle, and normal across a chain of Cubic Bezier segments.\n*/\nfunction samplePathChainGeometry(segments, chainLUT, distance) {\n\tif (segments.length === 0) return {\n\t\tposition: {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\ttangentAngleDeg: 0,\n\t\tnormal: {\n\t\t\tx: 0,\n\t\t\ty: 1\n\t\t}\n\t};\n\tconst totalLength = chainLUT.totalLength;\n\tif (distance <= 0) {\n\t\tconst seg = segments[0];\n\t\tconst deriv$1 = evaluateCubicBezierDerivative(seg, 0);\n\t\tconst length$1 = Math.hypot(deriv$1.x, deriv$1.y);\n\t\tconst ux = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\tconst uy = length$1 > 1e-6 ? deriv$1.y / length$1 : 0;\n\t\tconst pos$1 = {\n\t\t\tx: seg.p0.x + ux * distance,\n\t\t\ty: seg.p0.y + uy * distance\n\t\t};\n\t\tconst nx$1 = length$1 > 1e-6 ? -deriv$1.y / length$1 : 0;\n\t\tconst ny$1 = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\treturn {\n\t\t\tposition: pos$1,\n\t\t\ttangentAngleDeg: Math.atan2(deriv$1.y, deriv$1.x) * 180 / Math.PI,\n\t\t\tnormal: {\n\t\t\t\tx: nx$1,\n\t\t\t\ty: ny$1\n\t\t\t}\n\t\t};\n\t}\n\tif (distance >= totalLength) {\n\t\tconst lastSeg = segments[segments.length - 1];\n\t\tconst deriv$1 = evaluateCubicBezierDerivative(lastSeg, 1);\n\t\tconst length$1 = Math.hypot(deriv$1.x, deriv$1.y);\n\t\tconst ux = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\tconst uy = length$1 > 1e-6 ? deriv$1.y / length$1 : 0;\n\t\tconst overflow = distance - totalLength;\n\t\tconst pos$1 = {\n\t\t\tx: lastSeg.p3.x + ux * overflow,\n\t\t\ty: lastSeg.p3.y + uy * overflow\n\t\t};\n\t\tconst nx$1 = length$1 > 1e-6 ? -deriv$1.y / length$1 : 0;\n\t\tconst ny$1 = length$1 > 1e-6 ? deriv$1.x / length$1 : 1;\n\t\treturn {\n\t\t\tposition: pos$1,\n\t\t\ttangentAngleDeg: Math.atan2(deriv$1.y, deriv$1.x) * 180 / Math.PI,\n\t\t\tnormal: {\n\t\t\t\tx: nx$1,\n\t\t\t\ty: ny$1\n\t\t\t}\n\t\t};\n\t}\n\tlet segIdx = 0;\n\tlet t = 0;\n\tif (chainLUT.segments && chainLUT.segments.length > 0) {\n\t\tlet low = 0;\n\t\tlet high = chainLUT.segments.length - 1;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tconst segLUT$1 = chainLUT.segments[mid];\n\t\t\tif (distance < segLUT$1.startDistance) high = mid - 1;\n\t\t\telse if (distance > segLUT$1.startDistance + segLUT$1.length) low = mid + 1;\n\t\t\telse {\n\t\t\t\tlow = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst sIdx = Math.max(0, Math.min(low, chainLUT.segments.length - 1));\n\t\tconst segLUT = chainLUT.segments[sIdx];\n\t\tsegIdx = segLUT.segmentIndex;\n\t\tconst localDist = distance - segLUT.startDistance;\n\t\tt = distanceToCurveParameter(segLUT.lut, localDist, segLUT.length);\n\t} else {\n\t\tlet low = 0;\n\t\tlet high = chainLUT.entries.length - 1;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (chainLUT.entries[mid].distance < distance) low = mid + 1;\n\t\t\telse high = mid - 1;\n\t\t}\n\t\tconst index = Math.max(1, Math.min(low, chainLUT.entries.length - 1));\n\t\tconst prev = chainLUT.entries[index - 1];\n\t\tconst curr = chainLUT.entries[index];\n\t\tconst segmentDist = curr.distance - prev.distance;\n\t\tconst ratio = segmentDist > 1e-6 ? (distance - prev.distance) / segmentDist : 0;\n\t\tsegIdx = curr.segmentIndex;\n\t\tt = prev.segmentIndex === curr.segmentIndex ? prev.t + ratio * (curr.t - prev.t) : curr.t;\n\t}\n\tconst segment = segments[segIdx] ?? segments[0];\n\tconst pos = evaluateCubicBezier(segment, t);\n\tconst deriv = evaluateCubicBezierDerivative(segment, t);\n\tconst length = Math.hypot(deriv.x, deriv.y);\n\tconst nx = length > 1e-6 ? -deriv.y / length : 0;\n\tconst ny = length > 1e-6 ? deriv.x / length : 1;\n\treturn {\n\t\tposition: pos,\n\t\ttangentAngleDeg: Math.atan2(deriv.y, deriv.x) * 180 / Math.PI,\n\t\tnormal: {\n\t\t\tx: nx,\n\t\t\ty: ny\n\t\t}\n\t};\n}\n/**\n* Converts an ellipse arc into cubic Bezier segments (up to 90 degrees per segment).\n*/\nfunction ellipseToCubicBeziers(cx, cy, rx, ry, startAngleDeg = 0, endAngleDeg = 360) {\n\tconst startRad = startAngleDeg * Math.PI / 180;\n\tconst totalSweep = endAngleDeg * Math.PI / 180 - startRad;\n\tconst numSegments = Math.max(1, Math.ceil(Math.abs(totalSweep) / (Math.PI / 2)));\n\tconst sweepStep = totalSweep / numSegments;\n\tconst segments = [];\n\tfor (let i = 0; i < numSegments; i++) {\n\t\tconst a0 = startRad + i * sweepStep;\n\t\tconst a1 = a0 + sweepStep;\n\t\tconst halfSweep = sweepStep / 2;\n\t\tconst k = 4 / 3 * Math.tan(halfSweep / 2);\n\t\tconst cos0 = Math.cos(a0);\n\t\tconst sin0 = Math.sin(a0);\n\t\tconst cos1 = Math.cos(a1);\n\t\tconst sin1 = Math.sin(a1);\n\t\tconst p0 = {\n\t\t\tx: cx + rx * cos0,\n\t\t\ty: cy + ry * sin0\n\t\t};\n\t\tconst p1 = {\n\t\t\tx: p0.x - k * rx * sin0,\n\t\t\ty: p0.y + k * ry * cos0\n\t\t};\n\t\tconst p3 = {\n\t\t\tx: cx + rx * cos1,\n\t\t\ty: cy + ry * sin1\n\t\t};\n\t\tconst p2 = {\n\t\t\tx: p3.x + k * rx * sin1,\n\t\t\ty: p3.y - k * ry * cos1\n\t\t};\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1,\n\t\t\tp2,\n\t\t\tp3\n\t\t});\n\t}\n\treturn segments;\n}\n/**\n* Converts a sinusoidal wave into cubic Bezier segments per half-cycle.\n*/\nfunction waveToCubicBeziers(startX, startY, length, amplitude, frequency, phaseDeg = 0) {\n\tconst phaseRad = phaseDeg * Math.PI / 180;\n\tconst totalCycles = frequency < .1 && frequency * length >= .25 ? frequency * length : Math.max(.5, frequency);\n\tconst halfCycles = Math.max(1, Math.round(totalCycles * 2));\n\tconst dx = length / halfCycles;\n\tconst segments = [];\n\tfor (let i = 0; i < halfCycles; i++) {\n\t\tconst t0 = i / halfCycles * (2 * Math.PI * totalCycles) + phaseRad;\n\t\tconst t1 = (i + 1) / halfCycles * (2 * Math.PI * totalCycles) + phaseRad;\n\t\tconst x0 = startX + i * dx;\n\t\tconst x3 = startX + (i + 1) * dx;\n\t\tconst y0 = startY + amplitude * Math.sin(t0);\n\t\tconst y3 = startY + amplitude * Math.sin(t1);\n\t\tconst slope0 = amplitude * Math.cos(t0) * (Math.PI / 3);\n\t\tconst slope1 = amplitude * Math.cos(t1) * (Math.PI / 3);\n\t\tconst p0 = {\n\t\t\tx: x0,\n\t\t\ty: y0\n\t\t};\n\t\tconst p1 = {\n\t\t\tx: x0 + dx / 3,\n\t\t\ty: y0 + slope0\n\t\t};\n\t\tconst p2 = {\n\t\t\tx: x3 - dx / 3,\n\t\t\ty: y3 - slope1\n\t\t};\n\t\tconst p3 = {\n\t\t\tx: x3,\n\t\t\ty: y3\n\t\t};\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1,\n\t\t\tp2,\n\t\t\tp3\n\t\t});\n\t}\n\treturn segments;\n}\n/**\n* An SVG elliptical arc (endpoint form, SVG 1.1 F.6.5) as cubic Bezier\n* segments of at most 90° each.\n*/\nfunction svgArcToCubicBeziers(x1, y1, rxIn, ryIn, rotationDeg, largeArc, sweep, x2, y2) {\n\tif (x1 === x2 && y1 === y2) return [];\n\tlet rx = Math.abs(rxIn);\n\tlet ry = Math.abs(ryIn);\n\tif (rx === 0 || ry === 0) return [{\n\t\tp0: {\n\t\t\tx: x1,\n\t\t\ty: y1\n\t\t},\n\t\tp1: {\n\t\t\tx: x1 + (x2 - x1) / 3,\n\t\t\ty: y1 + (y2 - y1) / 3\n\t\t},\n\t\tp2: {\n\t\t\tx: x1 + 2 * (x2 - x1) / 3,\n\t\t\ty: y1 + 2 * (y2 - y1) / 3\n\t\t},\n\t\tp3: {\n\t\t\tx: x2,\n\t\t\ty: y2\n\t\t}\n\t}];\n\tconst phi = rotationDeg * Math.PI / 180;\n\tconst cosPhi = Math.cos(phi);\n\tconst sinPhi = Math.sin(phi);\n\tconst dx = (x1 - x2) / 2;\n\tconst dy = (y1 - y2) / 2;\n\tconst x1p = cosPhi * dx + sinPhi * dy;\n\tconst y1p = -sinPhi * dx + cosPhi * dy;\n\tconst lambda = x1p * x1p / (rx * rx) + y1p * y1p / (ry * ry);\n\tif (lambda > 1) {\n\t\trx *= Math.sqrt(lambda);\n\t\try *= Math.sqrt(lambda);\n\t}\n\tconst num = rx * rx * ry * ry - rx * rx * y1p * y1p - ry * ry * x1p * x1p;\n\tconst den = rx * rx * y1p * y1p + ry * ry * x1p * x1p;\n\tconst coef = (largeArc !== sweep ? 1 : -1) * Math.sqrt(Math.max(0, num / den));\n\tconst cxp = coef * rx * y1p / ry;\n\tconst cyp = -coef * ry * x1p / rx;\n\tconst cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n\tconst cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\tconst angle = (ux, uy, vx, vy) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n\tconst theta1 = angle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);\n\tlet delta = angle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry);\n\tif (!sweep && delta > 0) delta -= 2 * Math.PI;\n\tif (sweep && delta < 0) delta += 2 * Math.PI;\n\tconst n = Math.max(1, Math.ceil(Math.abs(delta) / (Math.PI / 2)));\n\tconst step = delta / n;\n\tconst k = 4 / 3 * Math.tan(step / 4);\n\tconst point = (a) => ({\n\t\tx: cx + rx * Math.cos(a) * cosPhi - ry * Math.sin(a) * sinPhi,\n\t\ty: cy + rx * Math.cos(a) * sinPhi + ry * Math.sin(a) * cosPhi\n\t});\n\tconst tangent = (a) => ({\n\t\tx: -rx * Math.sin(a) * cosPhi - ry * Math.cos(a) * sinPhi,\n\t\ty: -rx * Math.sin(a) * sinPhi + ry * Math.cos(a) * cosPhi\n\t});\n\tconst segments = [];\n\tfor (let s = 0; s < n; s++) {\n\t\tconst a0 = theta1 + s * step;\n\t\tconst a1 = a0 + step;\n\t\tconst p0 = point(a0);\n\t\tconst p3 = point(a1);\n\t\tconst t0 = tangent(a0);\n\t\tconst t1 = tangent(a1);\n\t\tsegments.push({\n\t\t\tp0,\n\t\t\tp1: {\n\t\t\t\tx: p0.x + k * t0.x,\n\t\t\t\ty: p0.y + k * t0.y\n\t\t\t},\n\t\t\tp2: {\n\t\t\t\tx: p3.x - k * t1.x,\n\t\t\t\ty: p3.y - k * t1.y\n\t\t\t},\n\t\t\tp3\n\t\t});\n\t}\n\tsegments[segments.length - 1].p3 = {\n\t\tx: x2,\n\t\ty: y2\n\t};\n\treturn segments;\n}\n/**\n* Converts SVG path data string into a chain of Cubic Bezier segments.\n*/\nfunction parseSvgPathToCubicBeziers(d) {\n\tconst segments = [];\n\tconst tokens = d.match(/[a-df-z]|[-+]?(?:\\d*\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?/gi);\n\tif (!tokens || tokens.length === 0) return segments;\n\tlet currentX = 0;\n\tlet currentY = 0;\n\tlet startX = 0;\n\tlet startY = 0;\n\tlet lastControlX = 0;\n\tlet lastControlY = 0;\n\tlet lastCommand = \"\";\n\tlet i = 0;\n\tconst nextNum = () => {\n\t\tif (i >= tokens.length) return 0;\n\t\treturn Number.parseFloat(tokens[i++]);\n\t};\n\twhile (i < tokens.length) {\n\t\tconst token = tokens[i++];\n\t\tconst isCommand = /^[a-df-z]$/i.test(token);\n\t\tconst cmd = isCommand ? token : lastCommand;\n\t\tif (!isCommand) i--;\n\t\tswitch (cmd) {\n\t\t\tcase \"M\":\n\t\t\t\tcurrentX = nextNum();\n\t\t\t\tcurrentY = nextNum();\n\t\t\t\tstartX = currentX;\n\t\t\t\tstartY = currentY;\n\t\t\t\tlastCommand = \"L\";\n\t\t\t\tbreak;\n\t\t\tcase \"m\":\n\t\t\t\tcurrentX += nextNum();\n\t\t\t\tcurrentY += nextNum();\n\t\t\t\tstartX = currentX;\n\t\t\t\tstartY = currentY;\n\t\t\t\tlastCommand = \"l\";\n\t\t\t\tbreak;\n\t\t\tcase \"L\": {\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY + (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY + 2 * (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"L\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"l\": {\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + dx / 3,\n\t\t\t\t\t\ty: currentY + dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * dx / 3,\n\t\t\t\t\t\ty: currentY + 2 * dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"l\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"H\": {\n\t\t\t\tconst x = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * (x - currentX) / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tlastCommand = \"H\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"h\": {\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX + dx / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX + 2 * dx / 3,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentX = x;\n\t\t\t\tlastCommand = \"h\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"V\": {\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + 2 * (y - currentY) / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"V\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"v\": {\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY + 2 * dy / 3\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"v\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"C\": {\n\t\t\t\tconst x1 = nextNum();\n\t\t\t\tconst y1 = nextNum();\n\t\t\t\tconst x2 = nextNum();\n\t\t\t\tconst y2 = nextNum();\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"C\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"c\": {\n\t\t\t\tconst dx1 = nextNum();\n\t\t\t\tconst dy1 = nextNum();\n\t\t\t\tconst dx2 = nextNum();\n\t\t\t\tconst dy2 = nextNum();\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x1 = currentX + dx1;\n\t\t\t\tconst y1 = currentY + dy1;\n\t\t\t\tconst x2 = currentX + dx2;\n\t\t\t\tconst y2 = currentY + dy2;\n\t\t\t\tconst x = currentX + dx;\n\t\t\t\tconst y = currentY + dy;\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = \"c\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"S\":\n\t\t\tcase \"s\": {\n\t\t\t\tconst isRel = cmd === \"s\";\n\t\t\t\tconst dx2 = nextNum();\n\t\t\t\tconst dy2 = nextNum();\n\t\t\t\tconst dx = nextNum();\n\t\t\t\tconst dy = nextNum();\n\t\t\t\tconst x2 = isRel ? currentX + dx2 : dx2;\n\t\t\t\tconst y2 = isRel ? currentY + dy2 : dy2;\n\t\t\t\tconst x = isRel ? currentX + dx : dx;\n\t\t\t\tconst y = isRel ? currentY + dy : dy;\n\t\t\t\tlet x1 = currentX;\n\t\t\t\tlet y1 = currentY;\n\t\t\t\tif (/^[cs]$/i.test(lastCommand)) {\n\t\t\t\t\tx1 = 2 * currentX - lastControlX;\n\t\t\t\t\ty1 = 2 * currentY - lastControlY;\n\t\t\t\t}\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = x2;\n\t\t\t\tlastControlY = y2;\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\": {\n\t\t\t\tconst isRel = cmd === \"q\";\n\t\t\t\tconst qx = nextNum();\n\t\t\t\tconst qy = nextNum();\n\t\t\t\tconst x = nextNum();\n\t\t\t\tconst y = nextNum();\n\t\t\t\tconst cx1 = isRel ? currentX + qx : qx;\n\t\t\t\tconst cy1 = isRel ? currentY + qy : qy;\n\t\t\t\tconst ex = isRel ? currentX + x : x;\n\t\t\t\tconst ey = isRel ? currentY + y : y;\n\t\t\t\tconst p1x = currentX + 2 / 3 * (cx1 - currentX);\n\t\t\t\tconst p1y = currentY + 2 / 3 * (cy1 - currentY);\n\t\t\t\tconst p2x = ex + 2 / 3 * (cx1 - ex);\n\t\t\t\tconst p2y = ey + 2 / 3 * (cy1 - ey);\n\t\t\t\tsegments.push({\n\t\t\t\t\tp0: {\n\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\ty: currentY\n\t\t\t\t\t},\n\t\t\t\t\tp1: {\n\t\t\t\t\t\tx: p1x,\n\t\t\t\t\t\ty: p1y\n\t\t\t\t\t},\n\t\t\t\t\tp2: {\n\t\t\t\t\t\tx: p2x,\n\t\t\t\t\t\ty: p2y\n\t\t\t\t\t},\n\t\t\t\t\tp3: {\n\t\t\t\t\t\tx: ex,\n\t\t\t\t\t\ty: ey\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlastControlX = cx1;\n\t\t\t\tlastControlY = cy1;\n\t\t\t\tcurrentX = ex;\n\t\t\t\tcurrentY = ey;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"A\":\n\t\t\tcase \"a\": {\n\t\t\t\tconst rx = nextNum();\n\t\t\t\tconst ry = nextNum();\n\t\t\t\tconst rotation = nextNum();\n\t\t\t\tconst largeArc = nextNum() !== 0;\n\t\t\t\tconst sweep = nextNum() !== 0;\n\t\t\t\tlet x = nextNum();\n\t\t\t\tlet y = nextNum();\n\t\t\t\tif (cmd === \"a\") {\n\t\t\t\t\tx += currentX;\n\t\t\t\t\ty += currentY;\n\t\t\t\t}\n\t\t\t\tsegments.push(...svgArcToCubicBeziers(currentX, currentY, rx, ry, rotation, largeArc, sweep, x, y));\n\t\t\t\tcurrentX = x;\n\t\t\t\tcurrentY = y;\n\t\t\t\tlastControlX = x;\n\t\t\t\tlastControlY = y;\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"Z\":\n\t\t\tcase \"z\":\n\t\t\t\tif (currentX !== startX || currentY !== startY) {\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: {\n\t\t\t\t\t\t\tx: currentX,\n\t\t\t\t\t\t\ty: currentY\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp1: {\n\t\t\t\t\t\t\tx: currentX + (startX - currentX) / 3,\n\t\t\t\t\t\t\ty: currentY + (startY - currentY) / 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp2: {\n\t\t\t\t\t\t\tx: currentX + 2 * (startX - currentX) / 3,\n\t\t\t\t\t\t\ty: currentY + 2 * (startY - currentY) / 3\n\t\t\t\t\t\t},\n\t\t\t\t\t\tp3: {\n\t\t\t\t\t\t\tx: startX,\n\t\t\t\t\t\t\ty: startY\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcurrentX = startX;\n\t\t\t\t\tcurrentY = startY;\n\t\t\t\t}\n\t\t\t\tlastCommand = cmd;\n\t\t\t\tbreak;\n\t\t\tdefault: break;\n\t\t}\n\t}\n\treturn segments;\n}\n/**\n* Universal path source converter to Cubic Bezier segments.\n*/\nfunction generatePathSegments(source) {\n\tswitch (source.type) {\n\t\tcase \"bezier\": return source.segments;\n\t\tcase \"svg\": return parseSvgPathToCubicBeziers(source.d);\n\t\tcase \"ellipse\": return ellipseToCubicBeziers(source.cx, source.cy, source.rx, source.ry, source.startAngleDeg ?? 0, source.endAngleDeg ?? 360);\n\t\tcase \"wave\": return waveToCubicBeziers(source.startX, source.startY, source.length, source.amplitude, source.frequency, source.phaseDeg ?? 0);\n\t}\n}\n\n//#endregion\n//#region src/slug/slug-geometry.ts\nconst EMOJI_REGEX = /(\\p{Extended_Pictographic}|\\p{Emoji_Presentation}|[\\u2600-\\u27BF])/u;\nconst graphemeSegmenter = typeof Intl !== \"undefined\" && Intl.Segmenter ? new Intl.Segmenter(\"en\", { granularity: \"grapheme\" }) : null;\nfunction segmentGraphemes(text) {\n\tif (graphemeSegmenter) return Array.from(graphemeSegmenter.segment(text), (s) => s.segment);\n\treturn Array.from(text);\n}\nconst kernCache = /* @__PURE__ */ new Map();\nfunction resolveParsedFont(font) {\n\tif (font.fontFamily) {\n\t\tconst parsed = SlugFontCache.getParsed(font.fontFamily);\n\t\tif (parsed) return parsed;\n\t}\n\tconst globalParsed = globalThis[Symbol.for(\"gatewai.slugFontCache.parsed\")];\n\tif (globalParsed) {\n\t\tif (font.fontFamily && globalParsed.has(font.fontFamily)) return globalParsed.get(font.fontFamily) ?? null;\n\t\tif (globalParsed.size === 1) return globalParsed.values().next().value ?? null;\n\t}\n\treturn null;\n}\nfunction getKernOffset(font, a, b) {\n\tconst key = `${font.fontFamily ?? \"default\"}:${a}:${b}`;\n\tconst hit = kernCache.get(key);\n\tif (hit !== void 0) return hit;\n\tconst src = resolveParsedFont(font);\n\tlet v = 0;\n\tif (src) try {\n\t\tconst s = String.fromCodePoint(a) + String.fromCodePoint(b);\n\t\tconst laid = src.layout?.(s);\n\t\tif (!laid) throw new Error(\"font cannot shape text\");\n\t\tconst total = laid.positions.reduce((acc, p) => acc + p.xAdvance, 0);\n\t\tconst advA = src.glyphForCodePoint?.(a)?.advanceWidth ?? 0;\n\t\tconst advB = src.glyphForCodePoint?.(b)?.advanceWidth ?? 0;\n\t\tv = laid.glyphs.length === 2 ? total - (advA + advB) : 0;\n\t} catch {\n\t\tv = 0;\n\t}\n\tkernCache.set(key, v);\n\treturn v;\n}\nconst layoutCache = /* @__PURE__ */ new Map();\nconst MAX_LAYOUT_CACHE = 256;\nvar SlugGeometry = class SlugGeometry {\n\tstatic layout(text, font, fontSize, letterSpacing, lineHeight, maxWidth, align = \"left\", applyBy = \"word\", alignWidth, pathOptions, spans) {\n\t\tif (spans && spans.length > 0) {\n\t\t\tconst spansKey = spans.map((s) => `${typeof s.text === \"string\" ? s.text : \"\"}:${s.fontFamily ?? \"\"}:${s.fontWeight ?? \"\"}:${s.fontSize ?? \"\"}:${s.fill ?? \"\"}:${s.baselineShift ?? \"\"}`).join(\";\");\n\t\t\tconst cacheKey$1 = `${text}|${font.fontFamily ?? \"\"}|${font.unitsPerEm}|${fontSize}|${letterSpacing}|${lineHeight}|${maxWidth}|${align}|${applyBy}|${alignWidth ?? \"\"}|${spansKey}`;\n\t\t\tconst cached$2 = layoutCache.get(cacheKey$1);\n\t\t\tif (cached$2) return cached$2;\n\t\t\tconst result$1 = SlugGeometry.layoutSpans(spans, font, fontSize, letterSpacing, lineHeight, maxWidth, align, applyBy, alignWidth);\n\t\t\tif (layoutCache.size >= MAX_LAYOUT_CACHE) {\n\t\t\t\tconst firstKey = layoutCache.keys().next().value;\n\t\t\t\tif (firstKey) layoutCache.delete(firstKey);\n\t\t\t}\n\t\t\tlayoutCache.set(cacheKey$1, result$1);\n\t\t\treturn result$1;\n\t\t}\n\t\tif (pathOptions) return SlugGeometry.layoutOnPath(text, font, fontSize, letterSpacing, pathOptions, applyBy);\n\t\tconst cacheKey = `${text}|${font.fontFamily ?? \"\"}|${font.unitsPerEm}|${fontSize}|${letterSpacing}|${lineHeight}|${maxWidth}|${align}|${applyBy}|${alignWidth ?? \"\"}`;\n\t\tconst cached$1 = layoutCache.get(cacheKey);\n\t\tif (cached$1) return cached$1;\n\t\tconst fontScale = fontSize / font.unitsPerEm;\n\t\tconst rawLines = text.split(\"\\n\");\n\t\tconst lines = [];\n\t\tfor (const rawLine of rawLines) {\n\t\t\tconst tokens = rawLine.split(/(\\s+)/);\n\t\t\tlet currentLineGlyphs = [];\n\t\t\tlet currentLineWidth = 0;\n\t\t\tfor (const token of tokens) {\n\t\t\t\tif (!token) continue;\n\t\t\t\tconst isSpace = /^\\s+$/.test(token);\n\t\t\t\tlet tokenWidth = 0;\n\t\t\t\tconst tokenGlyphs = [];\n\t\t\t\tconst graphemes = segmentGraphemes(token);\n\t\t\t\tfor (const char of graphemes) {\n\t\t\t\t\tif (char === \"️\" || char === \"︎\" || char === \"‍\") continue;\n\t\t\t\t\tconst codePoint = char.codePointAt(0) || 0;\n\t\t\t\t\tconst isEmoji = EMOJI_REGEX.test(char);\n\t\t\t\t\tlet cp = null;\n\t\t\t\t\tlet adv = 0;\n\t\t\t\t\tif (isEmoji) adv = fontSize;\n\t\t\t\t\telse {\n\t\t\t\t\t\tcp = font.codePoints.get(codePoint) || font.codePoints.get(-1) || null;\n\t\t\t\t\t\tadv = (cp?.advanceWidth || 0) * fontScale;\n\t\t\t\t\t}\n\t\t\t\t\ttokenGlyphs.push({\n\t\t\t\t\t\tchar,\n\t\t\t\t\t\tcp,\n\t\t\t\t\t\tisEmoji,\n\t\t\t\t\t\tisSpace,\n\t\t\t\t\t\tx: tokenWidth\n\t\t\t\t\t});\n\t\t\t\t\ttokenWidth += adv + letterSpacing;\n\t\t\t\t}\n\t\t\t\tif (isSpace) {\n\t\t\t\t\tif (currentLineGlyphs.length === 0) continue;\n\t\t\t\t\tfor (const tg of tokenGlyphs) {\n\t\t\t\t\t\ttg.x += currentLineWidth;\n\t\t\t\t\t\tcurrentLineGlyphs.push(tg);\n\t\t\t\t\t}\n\t\t\t\t\tcurrentLineWidth += tokenWidth;\n\t\t\t\t} else {\n\t\t\t\t\tif (currentLineWidth > 0 && currentLineWidth + tokenWidth > maxWidth) {\n\t\t\t\t\t\tlines.push({\n\t\t\t\t\t\t\tglyphs: currentLineGlyphs,\n\t\t\t\t\t\t\twidth: currentLineWidth\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcurrentLineGlyphs = [];\n\t\t\t\t\t\tcurrentLineWidth = 0;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const tg of tokenGlyphs) {\n\t\t\t\t\t\ttg.x += currentLineWidth;\n\t\t\t\t\t\tcurrentLineGlyphs.push(tg);\n\t\t\t\t\t}\n\t\t\t\t\tcurrentLineWidth += tokenWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlines.push({\n\t\t\t\tglyphs: currentLineGlyphs,\n\t\t\t\twidth: currentLineWidth\n\t\t\t});\n\t\t}\n\t\tfor (const line of lines) {\n\t\t\tlet shift = 0;\n\t\t\tfor (let i = 1; i < line.glyphs.length; i++) {\n\t\t\t\tconst prev = line.glyphs[i - 1];\n\t\t\t\tconst cur = line.glyphs[i];\n\t\t\t\tif (!prev.isSpace && !cur.isSpace && prev.cp && cur.cp) shift += getKernOffset(font, prev.cp.codePoint, cur.cp.codePoint) * fontScale;\n\t\t\t\tcur.x += shift;\n\t\t\t}\n\t\t\tline.width += shift;\n\t\t}\n\t\tconst glyphs = [];\n\t\tconst emojis = [];\n\t\tlet currentY = font.ascender * fontScale;\n\t\tlet wordIndex = 0;\n\t\tlet charIndex = 0;\n\t\tconst isCenter = align === \"center\";\n\t\tconst isRight = align === \"right\" || align === \"end\";\n\t\tfor (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n\t\t\tconst line = lines[lineIndex];\n\t\t\tlet visibleLineWidth = line.width;\n\t\t\tfor (let i = line.glyphs.length - 1; i >= 0; i--) {\n\t\t\t\tconst g$1 = line.glyphs[i];\n\t\t\t\tif (!g$1.isSpace) {\n\t\t\t\t\tconst adv = g$1.isEmoji ? fontSize : (g$1.cp?.advanceWidth || 0) * fontScale;\n\t\t\t\t\tvisibleLineWidth = g$1.x + adv;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst targetAlignWidth = alignWidth ?? maxWidth;\n\t\t\tlet alignOffset = 0;\n\t\t\tif (isCenter) alignOffset = (targetAlignWidth - visibleLineWidth) / 2;\n\t\t\telse if (isRight) alignOffset = targetAlignWidth - visibleLineWidth;\n\t\t\tlet inWord = false;\n\t\t\tfor (let gIdx = 0; gIdx < line.glyphs.length; gIdx++) {\n\t\t\t\tconst g$1 = line.glyphs[gIdx];\n\t\t\t\tconst charX = g$1.x + alignOffset;\n\t\t\t\tif (g$1.isEmoji) {\n\t\t\t\t\temojis.push({\n\t\t\t\t\t\tchar: g$1.char,\n\t\t\t\t\t\tx: charX,\n\t\t\t\t\t\ty: currentY - fontSize,\n\t\t\t\t\t\tsize: fontSize,\n\t\t\t\t\t\tlineIndex\n\t\t\t\t\t});\n\t\t\t\t\tcharIndex++;\n\t\t\t\t} else if (g$1.cp) {\n\t\t\t\t\tif (g$1.isSpace) {\n\t\t\t\t\t\tif (inWord) {\n\t\t\t\t\t\t\twordIndex++;\n\t\t\t\t\t\t\tinWord = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!inWord) inWord = true;\n\t\t\t\t\tlet mappedUnitIndex = 0;\n\t\t\t\t\tif (applyBy === \"line\") mappedUnitIndex = lineIndex;\n\t\t\t\t\telse if (applyBy === \"word\") mappedUnitIndex = wordIndex;\n\t\t\t\t\telse mappedUnitIndex = charIndex;\n\t\t\t\t\tglyphs.push({\n\t\t\t\t\t\tchar: g$1.char,\n\t\t\t\t\t\tcp: g$1.cp,\n\t\t\t\t\t\tx: charX,\n\t\t\t\t\t\ty: currentY,\n\t\t\t\t\t\tlineIndex,\n\t\t\t\t\t\twordIndex,\n\t\t\t\t\t\tcharIndex,\n\t\t\t\t\t\tunitIndex: mappedUnitIndex,\n\t\t\t\t\t\tisSpace: g$1.isSpace\n\t\t\t\t\t});\n\t\t\t\t\tcharIndex++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (inWord) wordIndex++;\n\t\t\tcurrentY += lineHeight;\n\t\t}\n\t\tconst totalHeight = currentY - lineHeight + -font.descender * fontScale;\n\t\tlet maxUnitIndex = 0;\n\t\tfor (const g$1 of glyphs) if (!g$1.isSpace && g$1.unitIndex > maxUnitIndex) maxUnitIndex = g$1.unitIndex;\n\t\tconst result = {\n\t\t\tglyphs,\n\t\t\temojis,\n\t\t\ttotalHeight,\n\t\t\tlinesCount: lines.length,\n\t\t\twordsCount: wordIndex,\n\t\t\tcharsCount: charIndex\n\t\t};\n\t\tif (layoutCache.size >= MAX_LAYOUT_CACHE) {\n\t\t\tconst firstKey = layoutCache.keys().next().value;\n\t\t\tif (firstKey) layoutCache.delete(firstKey);\n\t\t}\n\t\tlayoutCache.set(cacheKey, result);\n\t\treturn result;\n\t}\n\tstatic measure(text, font, fontSize, letterSpacing, lineHeight, maxWidth, spans) {\n\t\tconst effectiveMaxWidth = maxWidth ?? Number.MAX_SAFE_INTEGER;\n\t\tconst layout = SlugGeometry.layout(text, font, fontSize, letterSpacing, lineHeight, effectiveMaxWidth, \"left\", \"word\", void 0, void 0, spans);\n\t\tconst fontScale = fontSize / font.unitsPerEm;\n\t\tlet contentWidth = 0;\n\t\tconst lineWidths = /* @__PURE__ */ new Map();\n\t\tfor (const g$1 of layout.glyphs) {\n\t\t\tif (g$1.isSpace) continue;\n\t\t\tconst glyphFontScale = g$1.fontScale ?? fontScale;\n\t\t\tconst glyphRight = g$1.x + g$1.cp.advanceWidth * glyphFontScale;\n\t\t\tif (glyphRight > (lineWidths.get(g$1.lineIndex) ?? 0)) lineWidths.set(g$1.lineIndex, glyphRight);\n\t\t}\n\t\tfor (const emoji$1 of layout.emojis) {\n\t\t\tconst emojiRight = emoji$1.x + emoji$1.size;\n\t\t\tif (emojiRight > (lineWidths.get(emoji$1.lineIndex) ?? 0)) lineWidths.set(emoji$1.lineIndex, emojiRight);\n\t\t}\n\t\tfor (const w of lineWidths.values()) if (w > contentWidth) contentWidth = w;\n\t\tif (letterSpacing > 0) contentWidth += letterSpacing;\n\t\treturn {\n\t\t\twidth: Math.ceil(contentWidth) + 2,\n\t\t\theight: Math.ceil(layout.totalHeight) + 2,\n\t\t\tlayout\n\t\t};\n\t}\n\tstatic layoutSpans(spans, defaultFont, defaultFontSize, defaultLetterSpacing, defaultLineHeight, maxWidth, align = \"left\", applyBy = \"word\", alignWidth) {\n\t\tconst stream = [];\n\t\tfor (let sIdx = 0; sIdx < spans.length; sIdx++) {\n\t\t\tconst s = spans[sIdx];\n\t\t\tconst rawText = typeof s.text === \"string\" ? s.text : s.text && typeof s.text === \"object\" && \"get\" in s.text && typeof s.text.get === \"function\" ? String(s.text.get()) : String(s.text ?? \"\");\n\t\t\tlet spanFont = defaultFont;\n\t\t\tif (s.fontFamily || s.fontWeight !== void 0) {\n\t\t\t\tconst family = s.fontFamily ?? defaultFont.fontFamily ?? \"Inter\";\n\t\t\t\tconst resolved = SlugFontCache.getFont(family, s.fontWeight, null);\n\t\t\t\tif (resolved) spanFont = resolved;\n\t\t\t}\n\t\t\tconst spanFontSize = typeof s.fontSize === \"number\" ? s.fontSize : s.fontSize && typeof s.fontSize === \"object\" && \"get\" in s.fontSize && typeof s.fontSize.get === \"function\" ? Number(s.fontSize.get()) : defaultFontSize;\n\t\t\tconst spanFontScale = spanFontSize / spanFont.unitsPerEm;\n\t\t\tconst spanLetterSpacing = s.letterSpacing ?? defaultLetterSpacing;\n\t\t\tconst spanBaselineShift = s.baselineShift ?? 0;\n\t\t\tconst spanFill = typeof s.fill === \"string\" ? s.fill : s.fill && typeof s.fill === \"object\" && \"get\" in s.fill && typeof s.fill.get === \"function\" ? String(s.fill.get()) : void 0;\n\t\t\tconst spanOpacity = typeof s.opacity === \"number\" ? s.opacity : s.opacity && typeof s.opacity === \"object\" && \"get\" in s.opacity && typeof s.opacity.get === \"function\" ? Number(s.opacity.get()) : void 0;\n\t\t\tconst graphemes = segmentGraphemes(rawText);\n\t\t\tfor (const char of graphemes) {\n\t\t\t\tif (char === \"️\" || char === \"︎\" || char === \"‍\") continue;\n\t\t\t\tif (char === \"\\n\") {\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\tisNewline: true,\n\t\t\t\t\t\tchar: \"\\n\",\n\t\t\t\t\t\tcp: null,\n\t\t\t\t\t\tisEmoji: false,\n\t\t\t\t\t\tisSpace: true,\n\t\t\t\t\t\tadvance: 0,\n\t\t\t\t\t\tspanIndex: sIdx,\n\t\t\t\t\t\tfont: spanFont,\n\t\t\t\t\t\tfontSize: spanFontSize,\n\t\t\t\t\t\tfontScale: spanFontScale,\n\t\t\t\t\t\tletterSpacing: spanLetterSpacing,\n\t\t\t\t\t\tbaselineShift: spanBaselineShift,\n\t\t\t\t\t\tfill: spanFill,\n\t\t\t\t\t\topacity: spanOpacity,\n\t\t\t\t\t\tmark: s.mark\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst codePoint = char.codePointAt(0) || 0;\n\t\t\t\tconst isEmoji = EMOJI_REGEX.test(char);\n\t\t\t\tlet cp = null;\n\t\t\t\tlet adv = 0;\n\t\t\t\tif (isEmoji) adv = spanFontSize;\n\t\t\t\telse {\n\t\t\t\t\tcp = spanFont.codePoints.get(codePoint) || spanFont.codePoints.get(-1) || null;\n\t\t\t\t\tadv = (cp?.advanceWidth || 0) * spanFontScale;\n\t\t\t\t}\n\t\t\t\tstream.push({\n\t\t\t\t\tisNewline: false,\n\t\t\t\t\tchar,\n\t\t\t\t\tcp,\n\t\t\t\t\tisEmoji,\n\t\t\t\t\tisSpace: /^\\s+$/.test(char),\n\t\t\t\t\tadvance: adv,\n\t\t\t\t\tspanIndex: sIdx,\n\t\t\t\t\tfont: spanFont,\n\t\t\t\t\tfontSize: spanFontSize,\n\t\t\t\t\tfontScale: spanFontScale,\n\t\t\t\t\tletterSpacing: spanLetterSpacing,\n\t\t\t\t\tbaselineShift: spanBaselineShift,\n\t\t\t\t\tfill: spanFill,\n\t\t\t\t\topacity: spanOpacity,\n\t\t\t\t\tmark: s.mark\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst tokens = [];\n\t\tlet currentTokenGlyphs = [];\n\t\tlet currentTokenIsSpace = false;\n\t\tlet currentTokenWidth = 0;\n\t\tconst flushToken = () => {\n\t\t\tif (currentTokenGlyphs.length > 0) {\n\t\t\t\ttokens.push({\n\t\t\t\t\tisNewline: false,\n\t\t\t\t\tisSpace: currentTokenIsSpace,\n\t\t\t\t\tglyphs: currentTokenGlyphs,\n\t\t\t\t\twidth: currentTokenWidth\n\t\t\t\t});\n\t\t\t\tcurrentTokenGlyphs = [];\n\t\t\t\tcurrentTokenWidth = 0;\n\t\t\t}\n\t\t};\n\t\tfor (const g$1 of stream) {\n\t\t\tif (g$1.isNewline) {\n\t\t\t\tflushToken();\n\t\t\t\ttokens.push({\n\t\t\t\t\tisNewline: true,\n\t\t\t\t\tisSpace: true,\n\t\t\t\t\tglyphs: [],\n\t\t\t\t\twidth: 0\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (currentTokenGlyphs.length === 0) {\n\t\t\t\tcurrentTokenIsSpace = g$1.isSpace;\n\t\t\t\tcurrentTokenGlyphs.push(g$1);\n\t\t\t\tcurrentTokenWidth = g$1.advance + g$1.letterSpacing;\n\t\t\t} else if (g$1.isSpace === currentTokenIsSpace) {\n\t\t\t\tcurrentTokenGlyphs.push(g$1);\n\t\t\t\tcurrentTokenWidth += g$1.advance + g$1.letterSpacing;\n\t\t\t} else {\n\t\t\t\tflushToken();\n\t\t\t\tcurrentTokenIsSpace = g$1.isSpace;\n\t\t\t\tcurrentTokenGlyphs.push(g$1);\n\t\t\t\tcurrentTokenWidth = g$1.advance + g$1.letterSpacing;\n\t\t\t}\n\t\t}\n\t\tflushToken();\n\t\tconst lines = [];\n\t\tlet currentLineGlyphs = [];\n\t\tlet currentLineWidth = 0;\n\t\tfor (const token of tokens) {\n\t\t\tif (token.isNewline) {\n\t\t\t\tlines.push({\n\t\t\t\t\tglyphs: currentLineGlyphs,\n\t\t\t\t\twidth: currentLineWidth\n\t\t\t\t});\n\t\t\t\tcurrentLineGlyphs = [];\n\t\t\t\tcurrentLineWidth = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (token.isSpace) {\n\t\t\t\tif (currentLineGlyphs.length === 0) continue;\n\t\t\t\tfor (const g$1 of token.glyphs) {\n\t\t\t\t\tcurrentLineGlyphs.push({\n\t\t\t\t\t\t...g$1,\n\t\t\t\t\t\tx: currentLineWidth\n\t\t\t\t\t});\n\t\t\t\t\tcurrentLineWidth += g$1.advance + g$1.letterSpacing;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (currentLineWidth > 0 && currentLineWidth + token.width > maxWidth) {\n\t\t\t\t\tlines.push({\n\t\t\t\t\t\tglyphs: currentLineGlyphs,\n\t\t\t\t\t\twidth: currentLineWidth\n\t\t\t\t\t});\n\t\t\t\t\tcurrentLineGlyphs = [];\n\t\t\t\t\tcurrentLineWidth = 0;\n\t\t\t\t}\n\t\t\t\tfor (const g$1 of token.glyphs) {\n\t\t\t\t\tcurrentLineGlyphs.push({\n\t\t\t\t\t\t...g$1,\n\t\t\t\t\t\tx: currentLineWidth\n\t\t\t\t\t});\n\t\t\t\t\tcurrentLineWidth += g$1.advance + g$1.letterSpacing;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlines.push({\n\t\t\tglyphs: currentLineGlyphs,\n\t\t\twidth: currentLineWidth\n\t\t});\n\t\tfor (const line of lines) {\n\t\t\tlet shift = 0;\n\t\t\tfor (let i = 1; i < line.glyphs.length; i++) {\n\t\t\t\tconst prev = line.glyphs[i - 1];\n\t\t\t\tconst cur = line.glyphs[i];\n\t\t\t\tif (!prev.isSpace && !cur.isSpace && prev.cp && cur.cp && prev.font === cur.font) shift += getKernOffset(cur.font, prev.cp.codePoint, cur.cp.codePoint) * cur.fontScale;\n\t\t\t\tcur.x += shift;\n\t\t\t}\n\t\t\tline.width += shift;\n\t\t}\n\t\tconst glyphs = [];\n\t\tconst emojis = [];\n\t\tconst marks = [];\n\t\tlet currentBaselineY = 0;\n\t\tlet wordIndex = 0;\n\t\tlet charIndex = 0;\n\t\tconst isCenter = align === \"center\";\n\t\tconst isRight = align === \"right\" || align === \"end\";\n\t\tfor (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n\t\t\tconst line = lines[lineIndex];\n\t\t\tlet maxAscenderPx = (defaultFont.ascender ?? 800) * (defaultFontSize / defaultFont.unitsPerEm);\n\t\t\tlet maxDescenderPx = -(defaultFont.descender ?? -200) * (defaultFontSize / defaultFont.unitsPerEm);\n\t\t\tlet maxLineHeightPx = defaultLineHeight;\n\t\t\tfor (const g$1 of line.glyphs) {\n\t\t\t\tconst asc = (g$1.font.ascender ?? 800) * g$1.fontScale;\n\t\t\t\tconst desc = -(g$1.font.descender ?? -200) * g$1.fontScale;\n\t\t\t\tconst lh = defaultLineHeight * (g$1.fontSize / defaultFontSize);\n\t\t\t\tif (asc > maxAscenderPx) maxAscenderPx = asc;\n\t\t\t\tif (desc > maxDescenderPx) maxDescenderPx = desc;\n\t\t\t\tif (lh > maxLineHeightPx) maxLineHeightPx = lh;\n\t\t\t}\n\t\t\tif (lineIndex === 0) currentBaselineY = maxAscenderPx;\n\t\t\tlet visibleLineWidth = line.width;\n\t\t\tfor (let i = line.glyphs.length - 1; i >= 0; i--) {\n\t\t\t\tconst g$1 = line.glyphs[i];\n\t\t\t\tif (!g$1.isSpace) {\n\t\t\t\t\tvisibleLineWidth = g$1.x + g$1.advance;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst targetAlignWidth = alignWidth ?? maxWidth;\n\t\t\tlet alignOffset = 0;\n\t\t\tif (isCenter) alignOffset = (targetAlignWidth - visibleLineWidth) / 2;\n\t\t\telse if (isRight) alignOffset = targetAlignWidth - visibleLineWidth;\n\t\t\tlet inWord = false;\n\t\t\tlet activeMark;\n\t\t\tlet markStartX = 0;\n\t\t\tlet markEndX = 0;\n\t\t\tlet markAsc = maxAscenderPx;\n\t\t\tlet markDesc = maxDescenderPx;\n\t\t\tconst flushMark = () => {\n\t\t\t\tif (activeMark && markEndX > markStartX) {\n\t\t\t\t\tconst padX = activeMark.paddingX ?? 4;\n\t\t\t\t\tconst padY = activeMark.paddingY ?? 2;\n\t\t\t\t\tconst bg = typeof activeMark.background === \"string\" ? activeMark.background : activeMark.background && typeof activeMark.background === \"object\" && \"get\" in activeMark.background && typeof activeMark.background.get === \"function\" ? String(activeMark.background.get()) : String(activeMark.background);\n\t\t\t\t\tmarks.push({\n\t\t\t\t\t\tx: markStartX - padX,\n\t\t\t\t\t\ty: currentBaselineY - markAsc - padY,\n\t\t\t\t\t\twidth: markEndX - markStartX + padX * 2,\n\t\t\t\t\t\theight: markAsc + markDesc + padY * 2,\n\t\t\t\t\t\tbackground: bg,\n\t\t\t\t\t\tborderRadius: activeMark.borderRadius ?? 4,\n\t\t\t\t\t\tlineIndex\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tactiveMark = void 0;\n\t\t\t};\n\t\t\tfor (let gIdx = 0; gIdx < line.glyphs.length; gIdx++) {\n\t\t\t\tconst g$1 = line.glyphs[gIdx];\n\t\t\t\tconst charX = g$1.x + alignOffset;\n\t\t\t\tif (g$1.mark && !g$1.isSpace) if (!activeMark || activeMark !== g$1.mark) {\n\t\t\t\t\tflushMark();\n\t\t\t\t\tactiveMark = g$1.mark;\n\t\t\t\t\tmarkStartX = charX;\n\t\t\t\t\tmarkEndX = charX + g$1.advance;\n\t\t\t\t\tmarkAsc = (g$1.font.ascender ?? 800) * g$1.fontScale;\n\t\t\t\t\tmarkDesc = -(g$1.font.descender ?? -200) * g$1.fontScale;\n\t\t\t\t} else {\n\t\t\t\t\tmarkEndX = charX + g$1.advance;\n\t\t\t\t\tconst a = (g$1.font.ascender ?? 800) * g$1.fontScale;\n\t\t\t\t\tconst d = -(g$1.font.descender ?? -200) * g$1.fontScale;\n\t\t\t\t\tif (a > markAsc) markAsc = a;\n\t\t\t\t\tif (d > markDesc) markDesc = d;\n\t\t\t\t}\n\t\t\t\telse flushMark();\n\t\t\t\tif (g$1.isEmoji) {\n\t\t\t\t\temojis.push({\n\t\t\t\t\t\tchar: g$1.char,\n\t\t\t\t\t\tx: charX,\n\t\t\t\t\t\ty: currentBaselineY - g$1.fontSize,\n\t\t\t\t\t\tsize: g$1.fontSize,\n\t\t\t\t\t\tlineIndex\n\t\t\t\t\t});\n\t\t\t\t\tcharIndex++;\n\t\t\t\t} else if (g$1.cp) {\n\t\t\t\t\tif (g$1.isSpace) {\n\t\t\t\t\t\tif (inWord) {\n\t\t\t\t\t\t\twordIndex++;\n\t\t\t\t\t\t\tinWord = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!inWord) inWord = true;\n\t\t\t\t\tlet mappedUnitIndex = 0;\n\t\t\t\t\tif (applyBy === \"line\") mappedUnitIndex = lineIndex;\n\t\t\t\t\telse if (applyBy === \"word\") mappedUnitIndex = wordIndex;\n\t\t\t\t\telse mappedUnitIndex = charIndex;\n\t\t\t\t\tglyphs.push({\n\t\t\t\t\t\tchar: g$1.char,\n\t\t\t\t\t\tcp: g$1.cp,\n\t\t\t\t\t\tx: charX,\n\t\t\t\t\t\ty: currentBaselineY + g$1.baselineShift,\n\t\t\t\t\t\tlineIndex,\n\t\t\t\t\t\twordIndex,\n\t\t\t\t\t\tcharIndex,\n\t\t\t\t\t\tunitIndex: mappedUnitIndex,\n\t\t\t\t\t\tisSpace: g$1.isSpace,\n\t\t\t\t\t\tspanIndex: g$1.spanIndex,\n\t\t\t\t\t\tfill: g$1.fill,\n\t\t\t\t\t\tfontSize: g$1.fontSize,\n\t\t\t\t\t\tfontScale: g$1.fontScale,\n\t\t\t\t\t\tbaselineShift: g$1.baselineShift,\n\t\t\t\t\t\topacity: g$1.opacity,\n\t\t\t\t\t\tfontFamily: g$1.font.fontFamily,\n\t\t\t\t\t\tfont: g$1.font,\n\t\t\t\t\t\tmark: g$1.mark\n\t\t\t\t\t});\n\t\t\t\t\tcharIndex++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tflushMark();\n\t\t\tif (inWord) wordIndex++;\n\t\t\tif (lineIndex < lines.length - 1) currentBaselineY += Math.max(maxLineHeightPx, maxAscenderPx + maxDescenderPx);\n\t\t}\n\t\tlet maxUnitIndex = 0;\n\t\tfor (const g$1 of glyphs) if (!g$1.isSpace && g$1.unitIndex > maxUnitIndex) maxUnitIndex = g$1.unitIndex;\n\t\tconst totalHeight = lines.length > 0 ? currentBaselineY + defaultFontSize / defaultFont.unitsPerEm * -(defaultFont.descender ?? -200) : 0;\n\t\treturn {\n\t\t\tglyphs,\n\t\t\temojis,\n\t\t\tmarks: marks.length > 0 ? marks : void 0,\n\t\t\ttotalHeight,\n\t\t\tlinesCount: lines.length,\n\t\t\twordsCount: Math.max(0, maxUnitIndex + 1),\n\t\t\tcharsCount: charIndex\n\t\t};\n\t}\n\tstatic layoutOnPath(text, font, fontSize, letterSpacing, pathOptions, applyBy = \"word\") {\n\t\tconst fontScale = fontSize / font.unitsPerEm;\n\t\tconst segments = generatePathSegments(pathOptions.path);\n\t\tconst chainLUT = buildPathLUT(segments);\n\t\tconst totalLength = chainLUT.totalLength;\n\t\tconst graphemes = segmentGraphemes(text);\n\t\tconst chars = [];\n\t\tlet wordIndex = 0;\n\t\tlet charIndex = 0;\n\t\tlet inWord = false;\n\t\tfor (const char of graphemes) {\n\t\t\tif (char === \"️\" || char === \"︎\" || char === \"‍\") continue;\n\t\t\tconst isSpace = /^\\s+$/.test(char);\n\t\t\tconst isEmoji = EMOJI_REGEX.test(char);\n\t\t\tlet cp = null;\n\t\t\tlet advance = 0;\n\t\t\tif (isEmoji) advance = fontSize;\n\t\t\telse {\n\t\t\t\tconst codePoint = char.codePointAt(0) || 0;\n\t\t\t\tcp = font.codePoints.get(codePoint) || font.codePoints.get(-1) || null;\n\t\t\t\tadvance = (cp?.advanceWidth || 0) * fontScale;\n\t\t\t}\n\t\t\tif (isSpace) {\n\t\t\t\tif (inWord) {\n\t\t\t\t\twordIndex++;\n\t\t\t\t\tinWord = false;\n\t\t\t\t}\n\t\t\t} else if (!inWord) inWord = true;\n\t\t\tlet unitIdx = charIndex;\n\t\t\tif (applyBy === \"word\") unitIdx = wordIndex;\n\t\t\telse if (applyBy === \"line\") unitIdx = 0;\n\t\t\tchars.push({\n\t\t\t\tchar,\n\t\t\t\tcp,\n\t\t\t\tisEmoji,\n\t\t\t\tisSpace,\n\t\t\t\tadvance,\n\t\t\t\tcharIndex,\n\t\t\t\twordIndex,\n\t\t\t\tunitIndex: unitIdx\n\t\t\t});\n\t\t\tcharIndex++;\n\t\t}\n\t\tif (inWord) wordIndex++;\n\t\tlet baselineOffsetPixels = 0;\n\t\tif (pathOptions.baselineOffset === \"center\") baselineOffsetPixels = (font.ascender + font.descender) * fontScale * .5;\n\t\telse if (pathOptions.baselineOffset === \"ascender\") baselineOffsetPixels = -font.ascender * fontScale;\n\t\telse if (pathOptions.baselineOffset === \"descender\") baselineOffsetPixels = -font.descender * fontScale;\n\t\tconst totalShift = (pathOptions.baselineShift ?? 0) + baselineOffsetPixels;\n\t\tconst glyphs = [];\n\t\tconst emojis = [];\n\t\tconst firstMargin = pathOptions.firstMargin ?? 0;\n\t\tconst lastMargin = pathOptions.lastMargin ?? 0;\n\t\tconst pathSpan = Math.max(firstMargin, totalLength - lastMargin) - firstMargin;\n\t\tconst advanceAt = (i) => {\n\t\t\tconst ch = chars[i];\n\t\t\tconst next = chars[i + 1];\n\t\t\tconst kern = next && !ch.isSpace && !next.isSpace && ch.cp && next.cp ? getKernOffset(font, ch.cp.codePoint, next.cp.codePoint) * fontScale : 0;\n\t\t\treturn ch.advance + letterSpacing + kern;\n\t\t};\n\t\tlet naturalLength = 0;\n\t\tfor (let i = 0; i < chars.length; i++) naturalLength += i < chars.length - 1 ? advanceAt(i) : chars[i].advance;\n\t\tconst forceAlignExtra = pathOptions.forceAlignment && chars.length > 1 ? (pathSpan - naturalLength) / (chars.length - 1) : 0;\n\t\tlet currentDistance = firstMargin;\n\t\tfor (let i = 0; i < chars.length; i++) {\n\t\t\tconst ch = chars[i];\n\t\t\tconst d = currentDistance;\n\t\t\tlet s = pathOptions.reversePath ? totalLength - d : d;\n\t\t\tif (pathOptions.loop && totalLength > 0) s = (s % totalLength + totalLength) % totalLength;\n\t\t\tconst sample = samplePathChainGeometry(segments, chainLUT, s);\n\t\t\tconst glyphX = sample.position.x + sample.normal.x * totalShift;\n\t\t\tconst glyphY = sample.position.y + sample.normal.y * totalShift;\n\t\t\tconst tangentRad = pathOptions.perpendicularToPath !== false ? sample.tangentAngleDeg * Math.PI / 180 : 0;\n\t\t\tif (ch.isEmoji) emojis.push({\n\t\t\t\tchar: ch.char,\n\t\t\t\tx: glyphX,\n\t\t\t\ty: glyphY - fontSize,\n\t\t\t\tsize: fontSize,\n\t\t\t\tlineIndex: 0\n\t\t\t});\n\t\t\telse if (ch.cp) glyphs.push({\n\t\t\t\tchar: ch.char,\n\t\t\t\tcp: ch.cp,\n\t\t\t\tx: glyphX,\n\t\t\t\ty: glyphY,\n\t\t\t\tlineIndex: 0,\n\t\t\t\twordIndex: ch.wordIndex,\n\t\t\t\tcharIndex: ch.charIndex,\n\t\t\t\tunitIndex: ch.unitIndex,\n\t\t\t\tisSpace: ch.isSpace,\n\t\t\t\tpathTangentAngleRad: tangentRad,\n\t\t\t\tperpendicularToPath: pathOptions.perpendicularToPath !== false,\n\t\t\t\tpathNormalX: sample.normal.x,\n\t\t\t\tpathNormalY: sample.normal.y\n\t\t\t});\n\t\t\tcurrentDistance += advanceAt(i) + forceAlignExtra;\n\t\t}\n\t\treturn {\n\t\t\tglyphs,\n\t\t\temojis,\n\t\t\ttotalHeight: fontSize * 1.5,\n\t\t\tlinesCount: 1,\n\t\t\twordsCount: wordIndex,\n\t\t\tcharsCount: charIndex\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/text-animations/advanced-builder.ts\n/**\n* Fluent Builder for Extended Text Animators.\n*/\nvar AdvancedTextAnimatorBuilder = class AdvancedTextAnimatorBuilder {\n\tname;\n\tprops = {};\n\tselectors = [];\n\tconstructor(name) {\n\t\tthis.name = name;\n\t}\n\tstatic create(name) {\n\t\treturn new AdvancedTextAnimatorBuilder(name);\n\t}\n\t/** Directional Skew */\n\tskew(angleDeg, axisDeg = 0) {\n\t\tthis.props.skew = angleDeg;\n\t\tthis.props.skewAxis = axisDeg;\n\t\treturn this;\n\t}\n\t/** Anchor Point Grouping and Preset Pivot */\n\tanchor(preset, grouping = \"character\", offsetX = 0, offsetY = 0) {\n\t\tthis.props.anchor = {\n\t\t\tgrouping,\n\t\t\tpreset,\n\t\t\tanchorX: .5,\n\t\t\tanchorY: .5,\n\t\t\toffsetX,\n\t\t\toffsetY\n\t\t};\n\t\treturn this;\n\t}\n\t/** Custom Anchor Point Coordinates (0 to 1 normalized) */\n\tanchorNormalized(ax, ay, grouping = \"character\") {\n\t\tthis.props.anchor = {\n\t\t\tgrouping,\n\t\t\tpreset: \"custom\",\n\t\t\tanchorX: ax,\n\t\t\tanchorY: ay,\n\t\t\toffsetX: 0,\n\t\t\toffsetY: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** 3D Spatial Z-Depth */\n\ttranslateZ(zPixels) {\n\t\tthis.props.translateZ = zPixels;\n\t\treturn this;\n\t}\n\t/** 3D Tilts */\n\ttilt3D(rx = 0, ry = 0, rz = 0) {\n\t\tthis.props.rotationX = rx;\n\t\tthis.props.rotationY = ry;\n\t\tthis.props.rotationZ = rz;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along X axis */\n\trotationX(deg) {\n\t\tthis.props.rotationX = deg;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along Y axis */\n\trotationY(deg) {\n\t\tthis.props.rotationY = deg;\n\t\treturn this;\n\t}\n\t/** 3D Rotation along Z axis */\n\trotationZ(deg) {\n\t\tthis.props.rotationZ = deg;\n\t\treturn this;\n\t}\n\t/** 3D Volumetric Formations */\n\tvolumetricFormation(mode = \"cylinder\", radius = 300, pitch = 120, totalAngle = 360, perspective = 1200, axis = \"y\") {\n\t\tthis.props.formation = {\n\t\t\tmode,\n\t\t\tradius,\n\t\t\tpitch,\n\t\t\ttotalAngle,\n\t\t\tperspective,\n\t\t\taxis\n\t\t};\n\t\treturn this;\n\t}\n\t/** Dynamic Line Spacing (Leading) */\n\tlineSpacing(extraLeadingPixels, lineAnchor = 0) {\n\t\tthis.props.lineSpacing = extraLeadingPixels;\n\t\tthis.props.lineAnchor = lineAnchor;\n\t\treturn this;\n\t}\n\t/** Normalized Line Anchor (0=top, 0.5=center, 1=bottom) */\n\tlineAnchor(anchor) {\n\t\tthis.props.lineAnchor = anchor;\n\t\treturn this;\n\t}\n\t/** Inertial Spring Settling Physics */\n\tspring(stiffness = 180, damping = 12, mass = 1, initialVelocity = 0) {\n\t\tthis.props.spring = {\n\t\t\tstiffness,\n\t\t\tdamping,\n\t\t\tmass,\n\t\t\tinitialVelocity,\n\t\t\tovershootMultiplier: 1\n\t\t};\n\t\treturn this;\n\t}\n\t/** Dynamic Stroke & Wireframe Properties */\n\tstroke(widthPixels, color = \"#ffffff\", fillOpacity = 1) {\n\t\tthis.props.stroke = {\n\t\t\tstrokeWidth: widthPixels,\n\t\t\tstrokeColor: color,\n\t\t\tstrokeAlign: \"center\",\n\t\t\tfillOpacity,\n\t\t\tdashOffset: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** Variable Font Axes */\n\tvariableFont(axes) {\n\t\tthis.props.variableAxes = axes;\n\t\treturn this;\n\t}\n\t/** Chromatic Aberration / Cyberpunk Glitch */\n\tchromaticGlitch(redShiftX, redShiftY = 0, blueShiftX = -redShiftX, blueShiftY = 0) {\n\t\tthis.props.chromaticGlitch = {\n\t\t\tredShiftX,\n\t\t\tredShiftY,\n\t\t\tblueShiftX,\n\t\t\tblueShiftY,\n\t\t\tsliceProbability: 0,\n\t\t\tsliceAmplitude: 0\n\t\t};\n\t\treturn this;\n\t}\n\t/** Multi-Band Audio Spectrum Equalizer */\n\taudioSpectrum(signalChannel, minFreqHz = 60, maxFreqHz = 16e3, maxScale = 2.5) {\n\t\tthis.props.audioSpectrum = {\n\t\t\tsignalChannel,\n\t\t\tminFreqHz,\n\t\t\tmaxFreqHz,\n\t\t\tscaleAxis: \"scaleY\",\n\t\t\tminScale: .2,\n\t\t\tmaxScale,\n\t\t\tpeakDecay: .8\n\t\t};\n\t\treturn this;\n\t}\n\t/** Long Shadow Extrusion */\n\tlongShadow(angle = 45, length = 40, color = \"#000000\", startOpacity = .8, endOpacity = 0, steps = 16) {\n\t\tthis.props.longShadow = {\n\t\t\tangle,\n\t\t\tlength,\n\t\t\tcolor,\n\t\t\tstartOpacity,\n\t\t\tendOpacity,\n\t\t\tsteps\n\t\t};\n\t\treturn this;\n\t}\n\t/** Particle Dust / Quantum Dissolve */\n\tparticleDissolve(progress = 0, dispersalAngle = 90, maxDisplacement = 120) {\n\t\tthis.props.particleDissolve = {\n\t\t\tprogress,\n\t\t\tdispersalAngle,\n\t\t\tmaxDisplacement,\n\t\t\tturbulence: .5,\n\t\t\tparticleSize: 2\n\t\t};\n\t\treturn this;\n\t}\n\t/** Add Expression Selector */\n\taddExpressionSelector(expression, mode = \"add\") {\n\t\tthis.selectors.push({\n\t\t\ttype: \"expression\",\n\t\t\texpression,\n\t\t\tmode,\n\t\t\tamount: 1\n\t\t});\n\t\treturn this;\n\t}\n\t/** Alias for addExpressionSelector */\n\texpressionSelector(expression, mode = \"add\") {\n\t\treturn this.addExpressionSelector(expression, mode);\n\t}\n\t/** Standard 2D Transforms */\n\tx(v) {\n\t\tthis.props.x = v;\n\t\treturn this;\n\t}\n\ty(v) {\n\t\tthis.props.y = v;\n\t\treturn this;\n\t}\n\tscale(v) {\n\t\tthis.props.scale = v;\n\t\treturn this;\n\t}\n\tscaleX(v) {\n\t\tthis.props.scaleX = v;\n\t\treturn this;\n\t}\n\tscaleY(v) {\n\t\tthis.props.scaleY = v;\n\t\treturn this;\n\t}\n\trotation(deg) {\n\t\tthis.props.rotation = deg;\n\t\treturn this;\n\t}\n\topacity(v) {\n\t\tthis.props.opacity = v;\n\t\treturn this;\n\t}\n\tblur(v) {\n\t\tthis.props.blur = v;\n\t\treturn this;\n\t}\n\tfillColor(hex) {\n\t\tthis.props.fillColor = hex;\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tselectors: this.selectors,\n\t\t\tprops: this.props\n\t\t};\n\t}\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js\n/** A special constant with type `never` */\nconst NEVER = Object.freeze({ status: \"aborted\" });\nfunction $constructor(name, initializer$2, params) {\n\tfunction init(inst, def) {\n\t\tif (!inst._zod) Object.defineProperty(inst, \"_zod\", {\n\t\t\tvalue: {\n\t\t\t\tdef,\n\t\t\t\tconstr: _,\n\t\t\t\ttraits: /* @__PURE__ */ new Set()\n\t\t\t},\n\t\t\tenumerable: false\n\t\t});\n\t\tif (inst._zod.traits.has(name)) return;\n\t\tinst._zod.traits.add(name);\n\t\tinitializer$2(inst, def);\n\t\tconst proto = _.prototype;\n\t\tconst keys = Object.keys(proto);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst k = keys[i];\n\t\t\tif (!(k in inst)) inst[k] = proto[k].bind(inst);\n\t\t}\n\t}\n\tconst Parent = params?.Parent ?? Object;\n\tclass Definition extends Parent {}\n\tObject.defineProperty(Definition, \"name\", { value: name });\n\tfunction _(def) {\n\t\tvar _a$1;\n\t\tconst inst = params?.Parent ? new Definition() : this;\n\t\tinit(inst, def);\n\t\t(_a$1 = inst._zod).deferred ?? (_a$1.deferred = []);\n\t\tfor (const fn of inst._zod.deferred) fn();\n\t\treturn inst;\n\t}\n\tObject.defineProperty(_, \"init\", { value: init });\n\tObject.defineProperty(_, Symbol.hasInstance, { value: (inst) => {\n\t\tif (params?.Parent && inst instanceof params.Parent) return true;\n\t\treturn inst?._zod?.traits?.has(name);\n\t} });\n\tObject.defineProperty(_, \"name\", { value: name });\n\treturn _;\n}\nvar $ZodAsyncError = class extends Error {\n\tconstructor() {\n\t\tsuper(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n\t}\n};\nvar $ZodEncodeError = class extends Error {\n\tconstructor(name) {\n\t\tsuper(`Encountered unidirectional transform during encode: ${name}`);\n\t\tthis.name = \"ZodEncodeError\";\n\t}\n};\nconst globalConfig = {};\nfunction config(newConfig) {\n\tif (newConfig) Object.assign(globalConfig, newConfig);\n\treturn globalConfig;\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js\nfunction getEnumValues(entries) {\n\tconst numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n\treturn Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);\n}\nfunction jsonStringifyReplacer(_, value) {\n\tif (typeof value === \"bigint\") return value.toString();\n\treturn value;\n}\nfunction cached(getter) {\n\treturn { get value() {\n\t\t{\n\t\t\tconst value = getter();\n\t\t\tObject.defineProperty(this, \"value\", { value });\n\t\t\treturn value;\n\t\t}\n\t\tthrow new Error(\"cached value already set\");\n\t} };\n}\nfunction nullish(input) {\n\treturn input === null || input === void 0;\n}\nfunction cleanRegex(source) {\n\tconst start = source.startsWith(\"^\") ? 1 : 0;\n\tconst end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n\treturn source.slice(start, end);\n}\nfunction floatSafeRemainder(val, step) {\n\tconst valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n\tconst stepString = step.toString();\n\tlet stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n\tif (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n\t\tconst match = stepString.match(/\\d?e-(\\d?)/);\n\t\tif (match?.[1]) stepDecCount = Number.parseInt(match[1]);\n\t}\n\tconst decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n\treturn Number.parseInt(val.toFixed(decCount).replace(\".\", \"\")) % Number.parseInt(step.toFixed(decCount).replace(\".\", \"\")) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nfunction defineLazy(object$1, key, getter) {\n\tlet value = void 0;\n\tObject.defineProperty(object$1, key, {\n\t\tget() {\n\t\t\tif (value === EVALUATING) return;\n\t\t\tif (value === void 0) {\n\t\t\t\tvalue = EVALUATING;\n\t\t\t\tvalue = getter();\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t\tset(v) {\n\t\t\tObject.defineProperty(object$1, key, { value: v });\n\t\t},\n\t\tconfigurable: true\n\t});\n}\nfunction assignProp(target, prop, value) {\n\tObject.defineProperty(target, prop, {\n\t\tvalue,\n\t\twritable: true,\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n}\nfunction mergeDefs(...defs) {\n\tconst mergedDescriptors = {};\n\tfor (const def of defs) {\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(def);\n\t\tObject.assign(mergedDescriptors, descriptors);\n\t}\n\treturn Object.defineProperties({}, mergedDescriptors);\n}\nfunction esc(str) {\n\treturn JSON.stringify(str);\n}\nfunction slugify(input) {\n\treturn input.toLowerCase().trim().replace(/[^\\w\\s-]/g, \"\").replace(/[\\s_-]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n}\nconst captureStackTrace = \"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => {};\nfunction isObject(data) {\n\treturn typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nconst allowsEval = cached(() => {\n\tif (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) return false;\n\ttry {\n\t\tnew Function(\"\");\n\t\treturn true;\n\t} catch (_) {\n\t\treturn false;\n\t}\n});\nfunction isPlainObject(o) {\n\tif (isObject(o) === false) return false;\n\tconst ctor = o.constructor;\n\tif (ctor === void 0) return true;\n\tif (typeof ctor !== \"function\") return true;\n\tconst prot = ctor.prototype;\n\tif (isObject(prot) === false) return false;\n\tif (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) return false;\n\treturn true;\n}\nfunction shallowClone(o) {\n\tif (isPlainObject(o)) return { ...o };\n\tif (Array.isArray(o)) return [...o];\n\treturn o;\n}\nconst propertyKeyTypes = new Set([\n\t\"string\",\n\t\"number\",\n\t\"symbol\"\n]);\nfunction escapeRegex(str) {\n\treturn str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction clone(inst, def, params) {\n\tconst cl = new inst._zod.constr(def ?? inst._zod.def);\n\tif (!def || params?.parent) cl._zod.parent = inst;\n\treturn cl;\n}\nfunction normalizeParams(_params) {\n\tconst params = _params;\n\tif (!params) return {};\n\tif (typeof params === \"string\") return { error: () => params };\n\tif (params?.message !== void 0) {\n\t\tif (params?.error !== void 0) throw new Error(\"Cannot specify both `message` and `error` params\");\n\t\tparams.error = params.message;\n\t}\n\tdelete params.message;\n\tif (typeof params.error === \"string\") return {\n\t\t...params,\n\t\terror: () => params.error\n\t};\n\treturn params;\n}\nfunction optionalKeys(shape) {\n\treturn Object.keys(shape).filter((k) => {\n\t\treturn shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n\t});\n}\nconst NUMBER_FORMAT_RANGES = {\n\tsafeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n\tint32: [-2147483648, 2147483647],\n\tuint32: [0, 4294967295],\n\tfloat32: [-34028234663852886e22, 34028234663852886e22],\n\tfloat64: [-Number.MAX_VALUE, Number.MAX_VALUE]\n};\nfunction pick(schema, mask) {\n\tconst currDef = schema._zod.def;\n\tconst checks = currDef.checks;\n\tif (checks && checks.length > 0) throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n\treturn clone(schema, mergeDefs(schema._zod.def, {\n\t\tget shape() {\n\t\t\tconst newShape = {};\n\t\t\tfor (const key in mask) {\n\t\t\t\tif (!(key in currDef.shape)) throw new Error(`Unrecognized key: \"${key}\"`);\n\t\t\t\tif (!mask[key]) continue;\n\t\t\t\tnewShape[key] = currDef.shape[key];\n\t\t\t}\n\t\t\tassignProp(this, \"shape\", newShape);\n\t\t\treturn newShape;\n\t\t},\n\t\tchecks: []\n\t}));\n}\nfunction omit(schema, mask) {\n\tconst currDef = schema._zod.def;\n\tconst checks = currDef.checks;\n\tif (checks && checks.length > 0) throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n\treturn clone(schema, mergeDefs(schema._zod.def, {\n\t\tget shape() {\n\t\t\tconst newShape = { ...schema._zod.def.shape };\n\t\t\tfor (const key in mask) {\n\t\t\t\tif (!(key in currDef.shape)) throw new Error(`Unrecognized key: \"${key}\"`);\n\t\t\t\tif (!mask[key]) continue;\n\t\t\t\tdelete newShape[key];\n\t\t\t}\n\t\t\tassignProp(this, \"shape\", newShape);\n\t\t\treturn newShape;\n\t\t},\n\t\tchecks: []\n\t}));\n}\nfunction extend(schema, shape) {\n\tif (!isPlainObject(shape)) throw new Error(\"Invalid input to extend: expected a plain object\");\n\tconst checks = schema._zod.def.checks;\n\tif (checks && checks.length > 0) {\n\t\tconst existingShape = schema._zod.def.shape;\n\t\tfor (const key in shape) if (Object.getOwnPropertyDescriptor(existingShape, key) !== void 0) throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n\t}\n\treturn clone(schema, mergeDefs(schema._zod.def, { get shape() {\n\t\tconst _shape = {\n\t\t\t...schema._zod.def.shape,\n\t\t\t...shape\n\t\t};\n\t\tassignProp(this, \"shape\", _shape);\n\t\treturn _shape;\n\t} }));\n}\nfunction safeExtend(schema, shape) {\n\tif (!isPlainObject(shape)) throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n\treturn clone(schema, mergeDefs(schema._zod.def, { get shape() {\n\t\tconst _shape = {\n\t\t\t...schema._zod.def.shape,\n\t\t\t...shape\n\t\t};\n\t\tassignProp(this, \"shape\", _shape);\n\t\treturn _shape;\n\t} }));\n}\nfunction merge(a, b) {\n\treturn clone(a, mergeDefs(a._zod.def, {\n\t\tget shape() {\n\t\t\tconst _shape = {\n\t\t\t\t...a._zod.def.shape,\n\t\t\t\t...b._zod.def.shape\n\t\t\t};\n\t\t\tassignProp(this, \"shape\", _shape);\n\t\t\treturn _shape;\n\t\t},\n\t\tget catchall() {\n\t\t\treturn b._zod.def.catchall;\n\t\t},\n\t\tchecks: []\n\t}));\n}\nfunction partial(Class, schema, mask) {\n\tconst checks = schema._zod.def.checks;\n\tif (checks && checks.length > 0) throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n\treturn clone(schema, mergeDefs(schema._zod.def, {\n\t\tget shape() {\n\t\t\tconst oldShape = schema._zod.def.shape;\n\t\t\tconst shape = { ...oldShape };\n\t\t\tif (mask) for (const key in mask) {\n\t\t\t\tif (!(key in oldShape)) throw new Error(`Unrecognized key: \"${key}\"`);\n\t\t\t\tif (!mask[key]) continue;\n\t\t\t\tshape[key] = Class ? new Class({\n\t\t\t\t\ttype: \"optional\",\n\t\t\t\t\tinnerType: oldShape[key]\n\t\t\t\t}) : oldShape[key];\n\t\t\t}\n\t\t\telse for (const key in oldShape) shape[key] = Class ? new Class({\n\t\t\t\ttype: \"optional\",\n\t\t\t\tinnerType: oldShape[key]\n\t\t\t}) : oldShape[key];\n\t\t\tassignProp(this, \"shape\", shape);\n\t\t\treturn shape;\n\t\t},\n\t\tchecks: []\n\t}));\n}\nfunction required(Class, schema, mask) {\n\treturn clone(schema, mergeDefs(schema._zod.def, { get shape() {\n\t\tconst oldShape = schema._zod.def.shape;\n\t\tconst shape = { ...oldShape };\n\t\tif (mask) for (const key in mask) {\n\t\t\tif (!(key in shape)) throw new Error(`Unrecognized key: \"${key}\"`);\n\t\t\tif (!mask[key]) continue;\n\t\t\tshape[key] = new Class({\n\t\t\t\ttype: \"nonoptional\",\n\t\t\t\tinnerType: oldShape[key]\n\t\t\t});\n\t\t}\n\t\telse for (const key in oldShape) shape[key] = new Class({\n\t\t\ttype: \"nonoptional\",\n\t\t\tinnerType: oldShape[key]\n\t\t});\n\t\tassignProp(this, \"shape\", shape);\n\t\treturn shape;\n\t} }));\n}\nfunction aborted(x, startIndex = 0) {\n\tif (x.aborted === true) return true;\n\tfor (let i = startIndex; i < x.issues.length; i++) if (x.issues[i]?.continue !== true) return true;\n\treturn false;\n}\nfunction prefixIssues(path$1, issues) {\n\treturn issues.map((iss) => {\n\t\tvar _a$1;\n\t\t(_a$1 = iss).path ?? (_a$1.path = []);\n\t\tiss.path.unshift(path$1);\n\t\treturn iss;\n\t});\n}\nfunction unwrapMessage(message) {\n\treturn typeof message === \"string\" ? message : message?.message;\n}\nfunction finalizeIssue(iss, ctx, config$1) {\n\tconst full = {\n\t\t...iss,\n\t\tpath: iss.path ?? []\n\t};\n\tif (!iss.message) full.message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config$1.customError?.(iss)) ?? unwrapMessage(config$1.localeError?.(iss)) ?? \"Invalid input\";\n\tdelete full.inst;\n\tdelete full.continue;\n\tif (!ctx?.reportInput) delete full.input;\n\treturn full;\n}\nfunction getLengthableOrigin(input) {\n\tif (Array.isArray(input)) return \"array\";\n\tif (typeof input === \"string\") return \"string\";\n\treturn \"unknown\";\n}\nfunction issue(...args) {\n\tconst [iss, input, inst] = args;\n\tif (typeof iss === \"string\") return {\n\t\tmessage: iss,\n\t\tcode: \"custom\",\n\t\tinput,\n\t\tinst\n\t};\n\treturn { ...iss };\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js\nconst initializer$1 = (inst, def) => {\n\tinst.name = \"$ZodError\";\n\tObject.defineProperty(inst, \"_zod\", {\n\t\tvalue: inst._zod,\n\t\tenumerable: false\n\t});\n\tObject.defineProperty(inst, \"issues\", {\n\t\tvalue: def,\n\t\tenumerable: false\n\t});\n\tinst.message = JSON.stringify(def, jsonStringifyReplacer, 2);\n\tObject.defineProperty(inst, \"toString\", {\n\t\tvalue: () => inst.message,\n\t\tenumerable: false\n\t});\n};\nconst $ZodError = $constructor(\"$ZodError\", initializer$1);\nconst $ZodRealError = $constructor(\"$ZodError\", initializer$1, { Parent: Error });\nfunction flattenError(error, mapper = (issue$1) => issue$1.message) {\n\tconst fieldErrors = {};\n\tconst formErrors = [];\n\tfor (const sub of error.issues) if (sub.path.length > 0) {\n\t\tfieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n\t\tfieldErrors[sub.path[0]].push(mapper(sub));\n\t} else formErrors.push(mapper(sub));\n\treturn {\n\t\tformErrors,\n\t\tfieldErrors\n\t};\n}\nfunction formatError(error, mapper = (issue$1) => issue$1.message) {\n\tconst fieldErrors = { _errors: [] };\n\tconst processError = (error$1) => {\n\t\tfor (const issue$1 of error$1.issues) if (issue$1.code === \"invalid_union\" && issue$1.errors.length) issue$1.errors.map((issues) => processError({ issues }));\n\t\telse if (issue$1.code === \"invalid_key\") processError({ issues: issue$1.issues });\n\t\telse if (issue$1.code === \"invalid_element\") processError({ issues: issue$1.issues });\n\t\telse if (issue$1.path.length === 0) fieldErrors._errors.push(mapper(issue$1));\n\t\telse {\n\t\t\tlet curr = fieldErrors;\n\t\t\tlet i = 0;\n\t\t\twhile (i < issue$1.path.length) {\n\t\t\t\tconst el = issue$1.path[i];\n\t\t\t\tif (!(i === issue$1.path.length - 1)) curr[el] = curr[el] || { _errors: [] };\n\t\t\t\telse {\n\t\t\t\t\tcurr[el] = curr[el] || { _errors: [] };\n\t\t\t\t\tcurr[el]._errors.push(mapper(issue$1));\n\t\t\t\t}\n\t\t\t\tcurr = curr[el];\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t};\n\tprocessError(error);\n\treturn fieldErrors;\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js\nconst _parse = (_Err) => (schema, value, _ctx, _params) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n\tconst result = schema._zod.run({\n\t\tvalue,\n\t\tissues: []\n\t}, ctx);\n\tif (result instanceof Promise) throw new $ZodAsyncError();\n\tif (result.issues.length) {\n\t\tconst e = new (_params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));\n\t\tcaptureStackTrace(e, _params?.callee);\n\t\tthrow e;\n\t}\n\treturn result.value;\n};\nconst parse$1 = /* @__PURE__ */ _parse($ZodRealError);\nconst _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n\tlet result = schema._zod.run({\n\t\tvalue,\n\t\tissues: []\n\t}, ctx);\n\tif (result instanceof Promise) result = await result;\n\tif (result.issues.length) {\n\t\tconst e = new (params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));\n\t\tcaptureStackTrace(e, params?.callee);\n\t\tthrow e;\n\t}\n\treturn result.value;\n};\nconst parseAsync$1 = /* @__PURE__ */ _parseAsync($ZodRealError);\nconst _safeParse = (_Err) => (schema, value, _ctx) => {\n\tconst ctx = _ctx ? {\n\t\t..._ctx,\n\t\tasync: false\n\t} : { async: false };\n\tconst result = schema._zod.run({\n\t\tvalue,\n\t\tissues: []\n\t}, ctx);\n\tif (result instanceof Promise) throw new $ZodAsyncError();\n\treturn result.issues.length ? {\n\t\tsuccess: false,\n\t\terror: new (_Err ?? $ZodError)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())))\n\t} : {\n\t\tsuccess: true,\n\t\tdata: result.value\n\t};\n};\nconst safeParse$1 = /* @__PURE__ */ _safeParse($ZodRealError);\nconst _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n\tlet result = schema._zod.run({\n\t\tvalue,\n\t\tissues: []\n\t}, ctx);\n\tif (result instanceof Promise) result = await result;\n\treturn result.issues.length ? {\n\t\tsuccess: false,\n\t\terror: new _Err(result.issues.map((iss) => finalizeIssue(iss, ctx, config())))\n\t} : {\n\t\tsuccess: true,\n\t\tdata: result.value\n\t};\n};\nconst safeParseAsync$1 = /* @__PURE__ */ _safeParseAsync($ZodRealError);\nconst _encode = (_Err) => (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n\treturn _parse(_Err)(schema, value, ctx);\n};\nconst encode$1 = /* @__PURE__ */ _encode($ZodRealError);\nconst _decode = (_Err) => (schema, value, _ctx) => {\n\treturn _parse(_Err)(schema, value, _ctx);\n};\nconst decode$1 = /* @__PURE__ */ _decode($ZodRealError);\nconst _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n\treturn _parseAsync(_Err)(schema, value, ctx);\n};\nconst encodeAsync$1 = /* @__PURE__ */ _encodeAsync($ZodRealError);\nconst _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n\treturn _parseAsync(_Err)(schema, value, _ctx);\n};\nconst decodeAsync$1 = /* @__PURE__ */ _decodeAsync($ZodRealError);\nconst _safeEncode = (_Err) => (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n\treturn _safeParse(_Err)(schema, value, ctx);\n};\nconst safeEncode$1 = /* @__PURE__ */ _safeEncode($ZodRealError);\nconst _safeDecode = (_Err) => (schema, value, _ctx) => {\n\treturn _safeParse(_Err)(schema, value, _ctx);\n};\nconst safeDecode$1 = /* @__PURE__ */ _safeDecode($ZodRealError);\nconst _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n\tconst ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n\treturn _safeParseAsync(_Err)(schema, value, ctx);\n};\nconst safeEncodeAsync$1 = /* @__PURE__ */ _safeEncodeAsync($ZodRealError);\nconst _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n\treturn _safeParseAsync(_Err)(schema, value, _ctx);\n};\nconst safeDecodeAsync$1 = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js\nconst cuid = /^[cC][^\\s-]{8,}$/;\nconst cuid2 = /^[0-9a-z]+$/;\nconst ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nconst xid = /^[0-9a-vA-V]{20}$/;\nconst ksuid = /^[A-Za-z0-9]{27}$/;\nconst nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nconst duration$1 = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nconst guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n*\n* @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nconst uuid = (version$1) => {\n\tif (!version$1) return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n\treturn /* @__PURE__ */ new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version$1}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\n/** Practical email validation */\nconst email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\nconst _emoji$1 = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nfunction emoji() {\n\treturn new RegExp(_emoji$1, \"u\");\n}\nconst ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nconst cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nconst cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\nconst base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nconst base64url = /^[A-Za-z0-9_-]*$/;\nconst e164 = /^\\+[1-9]\\d{6,14}$/;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nconst date$1 = /* @__PURE__ */ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n\tconst hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n\treturn typeof args.precision === \"number\" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\\\d` : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n}\nfunction time$1(args) {\n\treturn /* @__PURE__ */ new RegExp(`^${timeSource(args)}$`);\n}\nfunction datetime$1(args) {\n\tconst time$2 = timeSource({ precision: args.precision });\n\tconst opts = [\"Z\"];\n\tif (args.local) opts.push(\"\");\n\tif (args.offset) opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n\tconst timeRegex = `${time$2}(?:${opts.join(\"|\")})`;\n\treturn /* @__PURE__ */ new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nconst string$1 = (params) => {\n\tconst regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n\treturn /* @__PURE__ */ new RegExp(`^${regex}$`);\n};\nconst integer = /^-?\\d+$/;\nconst number$1 = /^-?\\d+(?:\\.\\d+)?$/;\nconst boolean$1 = /^(?:true|false)$/i;\nconst lowercase = /^[^A-Z]*$/;\nconst uppercase = /^[^a-z]*$/;\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js\nconst $ZodCheck = /* @__PURE__ */ $constructor(\"$ZodCheck\", (inst, def) => {\n\tvar _a$1;\n\tinst._zod ?? (inst._zod = {});\n\tinst._zod.def = def;\n\t(_a$1 = inst._zod).onattach ?? (_a$1.onattach = []);\n});\nconst numericOriginMap = {\n\tnumber: \"number\",\n\tbigint: \"bigint\",\n\tobject: \"date\"\n};\nconst $ZodCheckLessThan = /* @__PURE__ */ $constructor(\"$ZodCheckLessThan\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst origin = numericOriginMap[typeof def.value];\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tconst curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n\t\tif (def.value < curr) if (def.inclusive) bag.maximum = def.value;\n\t\telse bag.exclusiveMaximum = def.value;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (def.inclusive ? payload.value <= def.value : payload.value < def.value) return;\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\tcode: \"too_big\",\n\t\t\tmaximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n\t\t\tinput: payload.value,\n\t\t\tinclusive: def.inclusive,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckGreaterThan = /* @__PURE__ */ $constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst origin = numericOriginMap[typeof def.value];\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tconst curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n\t\tif (def.value > curr) if (def.inclusive) bag.minimum = def.value;\n\t\telse bag.exclusiveMinimum = def.value;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (def.inclusive ? payload.value >= def.value : payload.value > def.value) return;\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\tcode: \"too_small\",\n\t\t\tminimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n\t\t\tinput: payload.value,\n\t\t\tinclusive: def.inclusive,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckMultipleOf = /* @__PURE__ */ $constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tinst._zod.onattach.push((inst$1) => {\n\t\tvar _a$1;\n\t\t(_a$1 = inst$1._zod.bag).multipleOf ?? (_a$1.multipleOf = def.value);\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (typeof payload.value !== typeof def.value) throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n\t\tif (typeof payload.value === \"bigint\" ? payload.value % def.value === BigInt(0) : floatSafeRemainder(payload.value, def.value) === 0) return;\n\t\tpayload.issues.push({\n\t\t\torigin: typeof payload.value,\n\t\t\tcode: \"not_multiple_of\",\n\t\t\tdivisor: def.value,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckNumberFormat = /* @__PURE__ */ $constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tdef.format = def.format || \"float64\";\n\tconst isInt = def.format?.includes(\"int\");\n\tconst origin = isInt ? \"int\" : \"number\";\n\tconst [minimum, maximum] = NUMBER_FORMAT_RANGES[def.format];\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.format = def.format;\n\t\tbag.minimum = minimum;\n\t\tbag.maximum = maximum;\n\t\tif (isInt) bag.pattern = integer;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tif (isInt) {\n\t\t\tif (!Number.isInteger(input)) {\n\t\t\t\tpayload.issues.push({\n\t\t\t\t\texpected: origin,\n\t\t\t\t\tformat: def.format,\n\t\t\t\t\tcode: \"invalid_type\",\n\t\t\t\t\tcontinue: false,\n\t\t\t\t\tinput,\n\t\t\t\t\tinst\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!Number.isSafeInteger(input)) {\n\t\t\t\tif (input > 0) payload.issues.push({\n\t\t\t\t\tinput,\n\t\t\t\t\tcode: \"too_big\",\n\t\t\t\t\tmaximum: Number.MAX_SAFE_INTEGER,\n\t\t\t\t\tnote: \"Integers must be within the safe integer range.\",\n\t\t\t\t\tinst,\n\t\t\t\t\torigin,\n\t\t\t\t\tinclusive: true,\n\t\t\t\t\tcontinue: !def.abort\n\t\t\t\t});\n\t\t\t\telse payload.issues.push({\n\t\t\t\t\tinput,\n\t\t\t\t\tcode: \"too_small\",\n\t\t\t\t\tminimum: Number.MIN_SAFE_INTEGER,\n\t\t\t\t\tnote: \"Integers must be within the safe integer range.\",\n\t\t\t\t\tinst,\n\t\t\t\t\torigin,\n\t\t\t\t\tinclusive: true,\n\t\t\t\t\tcontinue: !def.abort\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (input < minimum) payload.issues.push({\n\t\t\torigin: \"number\",\n\t\t\tinput,\n\t\t\tcode: \"too_small\",\n\t\t\tminimum,\n\t\t\tinclusive: true,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t\tif (input > maximum) payload.issues.push({\n\t\t\torigin: \"number\",\n\t\t\tinput,\n\t\t\tcode: \"too_big\",\n\t\t\tmaximum,\n\t\t\tinclusive: true,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckMaxLength = /* @__PURE__ */ $constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n\tvar _a$1;\n\t$ZodCheck.init(inst, def);\n\t(_a$1 = inst._zod.def).when ?? (_a$1.when = (payload) => {\n\t\tconst val = payload.value;\n\t\treturn !nullish(val) && val.length !== void 0;\n\t});\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst curr = inst$1._zod.bag.maximum ?? Number.POSITIVE_INFINITY;\n\t\tif (def.maximum < curr) inst$1._zod.bag.maximum = def.maximum;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tif (input.length <= def.maximum) return;\n\t\tconst origin = getLengthableOrigin(input);\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\tcode: \"too_big\",\n\t\t\tmaximum: def.maximum,\n\t\t\tinclusive: true,\n\t\t\tinput,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckMinLength = /* @__PURE__ */ $constructor(\"$ZodCheckMinLength\", (inst, def) => {\n\tvar _a$1;\n\t$ZodCheck.init(inst, def);\n\t(_a$1 = inst._zod.def).when ?? (_a$1.when = (payload) => {\n\t\tconst val = payload.value;\n\t\treturn !nullish(val) && val.length !== void 0;\n\t});\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst curr = inst$1._zod.bag.minimum ?? Number.NEGATIVE_INFINITY;\n\t\tif (def.minimum > curr) inst$1._zod.bag.minimum = def.minimum;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tif (input.length >= def.minimum) return;\n\t\tconst origin = getLengthableOrigin(input);\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\tcode: \"too_small\",\n\t\t\tminimum: def.minimum,\n\t\t\tinclusive: true,\n\t\t\tinput,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckLengthEquals = /* @__PURE__ */ $constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n\tvar _a$1;\n\t$ZodCheck.init(inst, def);\n\t(_a$1 = inst._zod.def).when ?? (_a$1.when = (payload) => {\n\t\tconst val = payload.value;\n\t\treturn !nullish(val) && val.length !== void 0;\n\t});\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.minimum = def.length;\n\t\tbag.maximum = def.length;\n\t\tbag.length = def.length;\n\t});\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tconst length = input.length;\n\t\tif (length === def.length) return;\n\t\tconst origin = getLengthableOrigin(input);\n\t\tconst tooBig = length > def.length;\n\t\tpayload.issues.push({\n\t\t\torigin,\n\t\t\t...tooBig ? {\n\t\t\t\tcode: \"too_big\",\n\t\t\t\tmaximum: def.length\n\t\t\t} : {\n\t\t\t\tcode: \"too_small\",\n\t\t\t\tminimum: def.length\n\t\t\t},\n\t\t\tinclusive: true,\n\t\t\texact: true,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckStringFormat = /* @__PURE__ */ $constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n\tvar _a$1, _b;\n\t$ZodCheck.init(inst, def);\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.format = def.format;\n\t\tif (def.pattern) {\n\t\t\tbag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());\n\t\t\tbag.patterns.add(def.pattern);\n\t\t}\n\t});\n\tif (def.pattern) (_a$1 = inst._zod).check ?? (_a$1.check = (payload) => {\n\t\tdef.pattern.lastIndex = 0;\n\t\tif (def.pattern.test(payload.value)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: def.format,\n\t\t\tinput: payload.value,\n\t\t\t...def.pattern ? { pattern: def.pattern.toString() } : {},\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t});\n\telse (_b = inst._zod).check ?? (_b.check = () => {});\n});\nconst $ZodCheckRegex = /* @__PURE__ */ $constructor(\"$ZodCheckRegex\", (inst, def) => {\n\t$ZodCheckStringFormat.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\tdef.pattern.lastIndex = 0;\n\t\tif (def.pattern.test(payload.value)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"regex\",\n\t\t\tinput: payload.value,\n\t\t\tpattern: def.pattern.toString(),\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckLowerCase = /* @__PURE__ */ $constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = lowercase);\n\t$ZodCheckStringFormat.init(inst, def);\n});\nconst $ZodCheckUpperCase = /* @__PURE__ */ $constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = uppercase);\n\t$ZodCheckStringFormat.init(inst, def);\n});\nconst $ZodCheckIncludes = /* @__PURE__ */ $constructor(\"$ZodCheckIncludes\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst escapedRegex = escapeRegex(def.includes);\n\tconst pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n\tdef.pattern = pattern;\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());\n\t\tbag.patterns.add(pattern);\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (payload.value.includes(def.includes, def.position)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"includes\",\n\t\t\tincludes: def.includes,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckStartsWith = /* @__PURE__ */ $constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst pattern = /* @__PURE__ */ new RegExp(`^${escapeRegex(def.prefix)}.*`);\n\tdef.pattern ?? (def.pattern = pattern);\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());\n\t\tbag.patterns.add(pattern);\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (payload.value.startsWith(def.prefix)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"starts_with\",\n\t\t\tprefix: def.prefix,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckEndsWith = /* @__PURE__ */ $constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tconst pattern = /* @__PURE__ */ new RegExp(`.*${escapeRegex(def.suffix)}$`);\n\tdef.pattern ?? (def.pattern = pattern);\n\tinst._zod.onattach.push((inst$1) => {\n\t\tconst bag = inst$1._zod.bag;\n\t\tbag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());\n\t\tbag.patterns.add(pattern);\n\t});\n\tinst._zod.check = (payload) => {\n\t\tif (payload.value.endsWith(def.suffix)) return;\n\t\tpayload.issues.push({\n\t\t\torigin: \"string\",\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"ends_with\",\n\t\t\tsuffix: def.suffix,\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodCheckOverwrite = /* @__PURE__ */ $constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\tpayload.value = def.tx(payload.value);\n\t};\n});\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js\nvar Doc = class {\n\tconstructor(args = []) {\n\t\tthis.content = [];\n\t\tthis.indent = 0;\n\t\tif (this) this.args = args;\n\t}\n\tindented(fn) {\n\t\tthis.indent += 1;\n\t\tfn(this);\n\t\tthis.indent -= 1;\n\t}\n\twrite(arg) {\n\t\tif (typeof arg === \"function\") {\n\t\t\targ(this, { execution: \"sync\" });\n\t\t\targ(this, { execution: \"async\" });\n\t\t\treturn;\n\t\t}\n\t\tconst lines = arg.split(\"\\n\").filter((x) => x);\n\t\tconst minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n\t\tconst dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n\t\tfor (const line of dedented) this.content.push(line);\n\t}\n\tcompile() {\n\t\tconst F = Function;\n\t\tconst args = this?.args;\n\t\tconst lines = [...(this?.content ?? [``]).map((x) => ` ${x}`)];\n\t\treturn new F(...args, lines.join(\"\\n\"));\n\t}\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js\nconst version = {\n\tmajor: 4,\n\tminor: 3,\n\tpatch: 6\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js\nconst $ZodType = /* @__PURE__ */ $constructor(\"$ZodType\", (inst, def) => {\n\tvar _a$1;\n\tinst ?? (inst = {});\n\tinst._zod.def = def;\n\tinst._zod.bag = inst._zod.bag || {};\n\tinst._zod.version = version;\n\tconst checks = [...inst._zod.def.checks ?? []];\n\tif (inst._zod.traits.has(\"$ZodCheck\")) checks.unshift(inst);\n\tfor (const ch of checks) for (const fn of ch._zod.onattach) fn(inst);\n\tif (checks.length === 0) {\n\t\t(_a$1 = inst._zod).deferred ?? (_a$1.deferred = []);\n\t\tinst._zod.deferred?.push(() => {\n\t\t\tinst._zod.run = inst._zod.parse;\n\t\t});\n\t} else {\n\t\tconst runChecks = (payload, checks$1, ctx) => {\n\t\t\tlet isAborted = aborted(payload);\n\t\t\tlet asyncResult;\n\t\t\tfor (const ch of checks$1) {\n\t\t\t\tif (ch._zod.def.when) {\n\t\t\t\t\tif (!ch._zod.def.when(payload)) continue;\n\t\t\t\t} else if (isAborted) continue;\n\t\t\t\tconst currLen = payload.issues.length;\n\t\t\t\tconst _ = ch._zod.check(payload);\n\t\t\t\tif (_ instanceof Promise && ctx?.async === false) throw new $ZodAsyncError();\n\t\t\t\tif (asyncResult || _ instanceof Promise) asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n\t\t\t\t\tawait _;\n\t\t\t\t\tif (payload.issues.length === currLen) return;\n\t\t\t\t\tif (!isAborted) isAborted = aborted(payload, currLen);\n\t\t\t\t});\n\t\t\t\telse {\n\t\t\t\t\tif (payload.issues.length === currLen) continue;\n\t\t\t\t\tif (!isAborted) isAborted = aborted(payload, currLen);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (asyncResult) return asyncResult.then(() => {\n\t\t\t\treturn payload;\n\t\t\t});\n\t\t\treturn payload;\n\t\t};\n\t\tconst handleCanaryResult = (canary, payload, ctx) => {\n\t\t\tif (aborted(canary)) {\n\t\t\t\tcanary.aborted = true;\n\t\t\t\treturn canary;\n\t\t\t}\n\t\t\tconst checkResult = runChecks(payload, checks, ctx);\n\t\t\tif (checkResult instanceof Promise) {\n\t\t\t\tif (ctx.async === false) throw new $ZodAsyncError();\n\t\t\t\treturn checkResult.then((checkResult$1) => inst._zod.parse(checkResult$1, ctx));\n\t\t\t}\n\t\t\treturn inst._zod.parse(checkResult, ctx);\n\t\t};\n\t\tinst._zod.run = (payload, ctx) => {\n\t\t\tif (ctx.skipChecks) return inst._zod.parse(payload, ctx);\n\t\t\tif (ctx.direction === \"backward\") {\n\t\t\t\tconst canary = inst._zod.parse({\n\t\t\t\t\tvalue: payload.value,\n\t\t\t\t\tissues: []\n\t\t\t\t}, {\n\t\t\t\t\t...ctx,\n\t\t\t\t\tskipChecks: true\n\t\t\t\t});\n\t\t\t\tif (canary instanceof Promise) return canary.then((canary$1) => {\n\t\t\t\t\treturn handleCanaryResult(canary$1, payload, ctx);\n\t\t\t\t});\n\t\t\t\treturn handleCanaryResult(canary, payload, ctx);\n\t\t\t}\n\t\t\tconst result = inst._zod.parse(payload, ctx);\n\t\t\tif (result instanceof Promise) {\n\t\t\t\tif (ctx.async === false) throw new $ZodAsyncError();\n\t\t\t\treturn result.then((result$1) => runChecks(result$1, checks, ctx));\n\t\t\t}\n\t\t\treturn runChecks(result, checks, ctx);\n\t\t};\n\t}\n\tdefineLazy(inst, \"~standard\", () => ({\n\t\tvalidate: (value) => {\n\t\t\ttry {\n\t\t\t\tconst r = safeParse$1(inst, value);\n\t\t\t\treturn r.success ? { value: r.data } : { issues: r.error?.issues };\n\t\t\t} catch (_) {\n\t\t\t\treturn safeParseAsync$1(inst, value).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues });\n\t\t\t}\n\t\t},\n\t\tvendor: \"zod\",\n\t\tversion: 1\n\t}));\n});\nconst $ZodString = /* @__PURE__ */ $constructor(\"$ZodString\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.pattern = [...inst?._zod.bag?.patterns ?? []].pop() ?? string$1(inst._zod.bag);\n\tinst._zod.parse = (payload, _) => {\n\t\tif (def.coerce) try {\n\t\t\tpayload.value = String(payload.value);\n\t\t} catch (_$1) {}\n\t\tif (typeof payload.value === \"string\") return payload;\n\t\tpayload.issues.push({\n\t\t\texpected: \"string\",\n\t\t\tcode: \"invalid_type\",\n\t\t\tinput: payload.value,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodStringFormat = /* @__PURE__ */ $constructor(\"$ZodStringFormat\", (inst, def) => {\n\t$ZodCheckStringFormat.init(inst, def);\n\t$ZodString.init(inst, def);\n});\nconst $ZodGUID = /* @__PURE__ */ $constructor(\"$ZodGUID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = guid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodUUID = /* @__PURE__ */ $constructor(\"$ZodUUID\", (inst, def) => {\n\tif (def.version) {\n\t\tconst v = {\n\t\t\tv1: 1,\n\t\t\tv2: 2,\n\t\t\tv3: 3,\n\t\t\tv4: 4,\n\t\t\tv5: 5,\n\t\t\tv6: 6,\n\t\t\tv7: 7,\n\t\t\tv8: 8\n\t\t}[def.version];\n\t\tif (v === void 0) throw new Error(`Invalid UUID version: \"${def.version}\"`);\n\t\tdef.pattern ?? (def.pattern = uuid(v));\n\t} else def.pattern ?? (def.pattern = uuid());\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodEmail = /* @__PURE__ */ $constructor(\"$ZodEmail\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = email);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodURL = /* @__PURE__ */ $constructor(\"$ZodURL\", (inst, def) => {\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\ttry {\n\t\t\tconst trimmed = payload.value.trim();\n\t\t\tconst url = new URL(trimmed);\n\t\t\tif (def.hostname) {\n\t\t\t\tdef.hostname.lastIndex = 0;\n\t\t\t\tif (!def.hostname.test(url.hostname)) payload.issues.push({\n\t\t\t\t\tcode: \"invalid_format\",\n\t\t\t\t\tformat: \"url\",\n\t\t\t\t\tnote: \"Invalid hostname\",\n\t\t\t\t\tpattern: def.hostname.source,\n\t\t\t\t\tinput: payload.value,\n\t\t\t\t\tinst,\n\t\t\t\t\tcontinue: !def.abort\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (def.protocol) {\n\t\t\t\tdef.protocol.lastIndex = 0;\n\t\t\t\tif (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) payload.issues.push({\n\t\t\t\t\tcode: \"invalid_format\",\n\t\t\t\t\tformat: \"url\",\n\t\t\t\t\tnote: \"Invalid protocol\",\n\t\t\t\t\tpattern: def.protocol.source,\n\t\t\t\t\tinput: payload.value,\n\t\t\t\t\tinst,\n\t\t\t\t\tcontinue: !def.abort\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (def.normalize) payload.value = url.href;\n\t\t\telse payload.value = trimmed;\n\t\t\treturn;\n\t\t} catch (_) {\n\t\t\tpayload.issues.push({\n\t\t\t\tcode: \"invalid_format\",\n\t\t\t\tformat: \"url\",\n\t\t\t\tinput: payload.value,\n\t\t\t\tinst,\n\t\t\t\tcontinue: !def.abort\n\t\t\t});\n\t\t}\n\t};\n});\nconst $ZodEmoji = /* @__PURE__ */ $constructor(\"$ZodEmoji\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = emoji());\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodNanoID = /* @__PURE__ */ $constructor(\"$ZodNanoID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = nanoid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodCUID = /* @__PURE__ */ $constructor(\"$ZodCUID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = cuid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodCUID2 = /* @__PURE__ */ $constructor(\"$ZodCUID2\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = cuid2);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodULID = /* @__PURE__ */ $constructor(\"$ZodULID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = ulid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodXID = /* @__PURE__ */ $constructor(\"$ZodXID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = xid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodKSUID = /* @__PURE__ */ $constructor(\"$ZodKSUID\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = ksuid);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodISODateTime = /* @__PURE__ */ $constructor(\"$ZodISODateTime\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = datetime$1(def));\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodISODate = /* @__PURE__ */ $constructor(\"$ZodISODate\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = date$1);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodISOTime = /* @__PURE__ */ $constructor(\"$ZodISOTime\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = time$1(def));\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodISODuration = /* @__PURE__ */ $constructor(\"$ZodISODuration\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = duration$1);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodIPv4 = /* @__PURE__ */ $constructor(\"$ZodIPv4\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = ipv4);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.bag.format = `ipv4`;\n});\nconst $ZodIPv6 = /* @__PURE__ */ $constructor(\"$ZodIPv6\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = ipv6);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.bag.format = `ipv6`;\n\tinst._zod.check = (payload) => {\n\t\ttry {\n\t\t\tnew URL(`http://[${payload.value}]`);\n\t\t} catch {\n\t\t\tpayload.issues.push({\n\t\t\t\tcode: \"invalid_format\",\n\t\t\t\tformat: \"ipv6\",\n\t\t\t\tinput: payload.value,\n\t\t\t\tinst,\n\t\t\t\tcontinue: !def.abort\n\t\t\t});\n\t\t}\n\t};\n});\nconst $ZodCIDRv4 = /* @__PURE__ */ $constructor(\"$ZodCIDRv4\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = cidrv4);\n\t$ZodStringFormat.init(inst, def);\n});\nconst $ZodCIDRv6 = /* @__PURE__ */ $constructor(\"$ZodCIDRv6\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = cidrv6);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\tconst parts = payload.value.split(\"/\");\n\t\ttry {\n\t\t\tif (parts.length !== 2) throw new Error();\n\t\t\tconst [address, prefix] = parts;\n\t\t\tif (!prefix) throw new Error();\n\t\t\tconst prefixNum = Number(prefix);\n\t\t\tif (`${prefixNum}` !== prefix) throw new Error();\n\t\t\tif (prefixNum < 0 || prefixNum > 128) throw new Error();\n\t\t\tnew URL(`http://[${address}]`);\n\t\t} catch {\n\t\t\tpayload.issues.push({\n\t\t\t\tcode: \"invalid_format\",\n\t\t\t\tformat: \"cidrv6\",\n\t\t\t\tinput: payload.value,\n\t\t\t\tinst,\n\t\t\t\tcontinue: !def.abort\n\t\t\t});\n\t\t}\n\t};\n});\nfunction isValidBase64(data) {\n\tif (data === \"\") return true;\n\tif (data.length % 4 !== 0) return false;\n\ttry {\n\t\tatob(data);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\nconst $ZodBase64 = /* @__PURE__ */ $constructor(\"$ZodBase64\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = base64);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.bag.contentEncoding = \"base64\";\n\tinst._zod.check = (payload) => {\n\t\tif (isValidBase64(payload.value)) return;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"base64\",\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nfunction isValidBase64URL(data) {\n\tif (!base64url.test(data)) return false;\n\tconst base64$1 = data.replace(/[-_]/g, (c) => c === \"-\" ? \"+\" : \"/\");\n\treturn isValidBase64(base64$1.padEnd(Math.ceil(base64$1.length / 4) * 4, \"=\"));\n}\nconst $ZodBase64URL = /* @__PURE__ */ $constructor(\"$ZodBase64URL\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = base64url);\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.bag.contentEncoding = \"base64url\";\n\tinst._zod.check = (payload) => {\n\t\tif (isValidBase64URL(payload.value)) return;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"base64url\",\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodE164 = /* @__PURE__ */ $constructor(\"$ZodE164\", (inst, def) => {\n\tdef.pattern ?? (def.pattern = e164);\n\t$ZodStringFormat.init(inst, def);\n});\nfunction isValidJWT(token, algorithm = null) {\n\ttry {\n\t\tconst tokensParts = token.split(\".\");\n\t\tif (tokensParts.length !== 3) return false;\n\t\tconst [header] = tokensParts;\n\t\tif (!header) return false;\n\t\tconst parsedHeader = JSON.parse(atob(header));\n\t\tif (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\") return false;\n\t\tif (!parsedHeader.alg) return false;\n\t\tif (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm)) return false;\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\nconst $ZodJWT = /* @__PURE__ */ $constructor(\"$ZodJWT\", (inst, def) => {\n\t$ZodStringFormat.init(inst, def);\n\tinst._zod.check = (payload) => {\n\t\tif (isValidJWT(payload.value, def.alg)) return;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_format\",\n\t\t\tformat: \"jwt\",\n\t\t\tinput: payload.value,\n\t\t\tinst,\n\t\t\tcontinue: !def.abort\n\t\t});\n\t};\n});\nconst $ZodNumber = /* @__PURE__ */ $constructor(\"$ZodNumber\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.pattern = inst._zod.bag.pattern ?? number$1;\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tif (def.coerce) try {\n\t\t\tpayload.value = Number(payload.value);\n\t\t} catch (_) {}\n\t\tconst input = payload.value;\n\t\tif (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) return payload;\n\t\tconst received = typeof input === \"number\" ? Number.isNaN(input) ? \"NaN\" : !Number.isFinite(input) ? \"Infinity\" : void 0 : void 0;\n\t\tpayload.issues.push({\n\t\t\texpected: \"number\",\n\t\t\tcode: \"invalid_type\",\n\t\t\tinput,\n\t\t\tinst,\n\t\t\t...received ? { received } : {}\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodNumberFormat = /* @__PURE__ */ $constructor(\"$ZodNumberFormat\", (inst, def) => {\n\t$ZodCheckNumberFormat.init(inst, def);\n\t$ZodNumber.init(inst, def);\n});\nconst $ZodBoolean = /* @__PURE__ */ $constructor(\"$ZodBoolean\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.pattern = boolean$1;\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tif (def.coerce) try {\n\t\t\tpayload.value = Boolean(payload.value);\n\t\t} catch (_) {}\n\t\tconst input = payload.value;\n\t\tif (typeof input === \"boolean\") return payload;\n\t\tpayload.issues.push({\n\t\t\texpected: \"boolean\",\n\t\t\tcode: \"invalid_type\",\n\t\t\tinput,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodUnknown = /* @__PURE__ */ $constructor(\"$ZodUnknown\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload) => payload;\n});\nconst $ZodNever = /* @__PURE__ */ $constructor(\"$ZodNever\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tpayload.issues.push({\n\t\t\texpected: \"never\",\n\t\t\tcode: \"invalid_type\",\n\t\t\tinput: payload.value,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nfunction handleArrayResult(result, final, index) {\n\tif (result.issues.length) final.issues.push(...prefixIssues(index, result.issues));\n\tfinal.value[index] = result.value;\n}\nconst $ZodArray = /* @__PURE__ */ $constructor(\"$ZodArray\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tif (!Array.isArray(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\texpected: \"array\",\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tpayload.value = Array(input.length);\n\t\tconst proms = [];\n\t\tfor (let i = 0; i < input.length; i++) {\n\t\t\tconst item = input[i];\n\t\t\tconst result = def.element._zod.run({\n\t\t\t\tvalue: item,\n\t\t\t\tissues: []\n\t\t\t}, ctx);\n\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => handleArrayResult(result$1, payload, i)));\n\t\t\telse handleArrayResult(result, payload, i);\n\t\t}\n\t\tif (proms.length) return Promise.all(proms).then(() => payload);\n\t\treturn payload;\n\t};\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n\tif (result.issues.length) {\n\t\tif (isOptionalOut && !(key in input)) return;\n\t\tfinal.issues.push(...prefixIssues(key, result.issues));\n\t}\n\tif (result.value === void 0) {\n\t\tif (key in input) final.value[key] = void 0;\n\t} else final.value[key] = result.value;\n}\nfunction normalizeDef(def) {\n\tconst keys = Object.keys(def.shape);\n\tfor (const k of keys) if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n\tconst okeys = optionalKeys(def.shape);\n\treturn {\n\t\t...def,\n\t\tkeys,\n\t\tkeySet: new Set(keys),\n\t\tnumKeys: keys.length,\n\t\toptionalKeys: new Set(okeys)\n\t};\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n\tconst unrecognized = [];\n\tconst keySet = def.keySet;\n\tconst _catchall = def.catchall._zod;\n\tconst t = _catchall.def.type;\n\tconst isOptionalOut = _catchall.optout === \"optional\";\n\tfor (const key in input) {\n\t\tif (keySet.has(key)) continue;\n\t\tif (t === \"never\") {\n\t\t\tunrecognized.push(key);\n\t\t\tcontinue;\n\t\t}\n\t\tconst r = _catchall.run({\n\t\t\tvalue: input[key],\n\t\t\tissues: []\n\t\t}, ctx);\n\t\tif (r instanceof Promise) proms.push(r.then((r$1) => handlePropertyResult(r$1, payload, key, input, isOptionalOut)));\n\t\telse handlePropertyResult(r, payload, key, input, isOptionalOut);\n\t}\n\tif (unrecognized.length) payload.issues.push({\n\t\tcode: \"unrecognized_keys\",\n\t\tkeys: unrecognized,\n\t\tinput,\n\t\tinst\n\t});\n\tif (!proms.length) return payload;\n\treturn Promise.all(proms).then(() => {\n\t\treturn payload;\n\t});\n}\nconst $ZodObject = /* @__PURE__ */ $constructor(\"$ZodObject\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tif (!Object.getOwnPropertyDescriptor(def, \"shape\")?.get) {\n\t\tconst sh = def.shape;\n\t\tObject.defineProperty(def, \"shape\", { get: () => {\n\t\t\tconst newSh = { ...sh };\n\t\t\tObject.defineProperty(def, \"shape\", { value: newSh });\n\t\t\treturn newSh;\n\t\t} });\n\t}\n\tconst _normalized = cached(() => normalizeDef(def));\n\tdefineLazy(inst._zod, \"propValues\", () => {\n\t\tconst shape = def.shape;\n\t\tconst propValues = {};\n\t\tfor (const key in shape) {\n\t\t\tconst field = shape[key]._zod;\n\t\t\tif (field.values) {\n\t\t\t\tpropValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set());\n\t\t\t\tfor (const v of field.values) propValues[key].add(v);\n\t\t\t}\n\t\t}\n\t\treturn propValues;\n\t});\n\tconst isObject$1 = isObject;\n\tconst catchall = def.catchall;\n\tlet value;\n\tinst._zod.parse = (payload, ctx) => {\n\t\tvalue ?? (value = _normalized.value);\n\t\tconst input = payload.value;\n\t\tif (!isObject$1(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\texpected: \"object\",\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tpayload.value = {};\n\t\tconst proms = [];\n\t\tconst shape = value.shape;\n\t\tfor (const key of value.keys) {\n\t\t\tconst el = shape[key];\n\t\t\tconst isOptionalOut = el._zod.optout === \"optional\";\n\t\t\tconst r = el._zod.run({\n\t\t\t\tvalue: input[key],\n\t\t\t\tissues: []\n\t\t\t}, ctx);\n\t\t\tif (r instanceof Promise) proms.push(r.then((r$1) => handlePropertyResult(r$1, payload, key, input, isOptionalOut)));\n\t\t\telse handlePropertyResult(r, payload, key, input, isOptionalOut);\n\t\t}\n\t\tif (!catchall) return proms.length ? Promise.all(proms).then(() => payload) : payload;\n\t\treturn handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n\t};\n});\nconst $ZodObjectJIT = /* @__PURE__ */ $constructor(\"$ZodObjectJIT\", (inst, def) => {\n\t$ZodObject.init(inst, def);\n\tconst superParse = inst._zod.parse;\n\tconst _normalized = cached(() => normalizeDef(def));\n\tconst generateFastpass = (shape) => {\n\t\tconst doc = new Doc([\n\t\t\t\"shape\",\n\t\t\t\"payload\",\n\t\t\t\"ctx\"\n\t\t]);\n\t\tconst normalized = _normalized.value;\n\t\tconst parseStr = (key) => {\n\t\t\tconst k = esc(key);\n\t\t\treturn `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n\t\t};\n\t\tdoc.write(`const input = payload.value;`);\n\t\tconst ids = Object.create(null);\n\t\tlet counter = 0;\n\t\tfor (const key of normalized.keys) ids[key] = `key_${counter++}`;\n\t\tdoc.write(`const newResult = {};`);\n\t\tfor (const key of normalized.keys) {\n\t\t\tconst id = ids[key];\n\t\t\tconst k = esc(key);\n\t\t\tconst isOptionalOut = shape[key]?._zod?.optout === \"optional\";\n\t\t\tdoc.write(`const ${id} = ${parseStr(key)};`);\n\t\t\tif (isOptionalOut) doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n\t\t\telse doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n\t\t}\n\t\tdoc.write(`payload.value = newResult;`);\n\t\tdoc.write(`return payload;`);\n\t\tconst fn = doc.compile();\n\t\treturn (payload, ctx) => fn(shape, payload, ctx);\n\t};\n\tlet fastpass;\n\tconst isObject$1 = isObject;\n\tconst jit = !globalConfig.jitless;\n\tconst allowsEval$1 = allowsEval;\n\tconst fastEnabled = jit && allowsEval$1.value;\n\tconst catchall = def.catchall;\n\tlet value;\n\tinst._zod.parse = (payload, ctx) => {\n\t\tvalue ?? (value = _normalized.value);\n\t\tconst input = payload.value;\n\t\tif (!isObject$1(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\texpected: \"object\",\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tif (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n\t\t\tif (!fastpass) fastpass = generateFastpass(def.shape);\n\t\t\tpayload = fastpass(payload, ctx);\n\t\t\tif (!catchall) return payload;\n\t\t\treturn handleCatchall([], input, payload, ctx, value, inst);\n\t\t}\n\t\treturn superParse(payload, ctx);\n\t};\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n\tfor (const result of results) if (result.issues.length === 0) {\n\t\tfinal.value = result.value;\n\t\treturn final;\n\t}\n\tconst nonaborted = results.filter((r) => !aborted(r));\n\tif (nonaborted.length === 1) {\n\t\tfinal.value = nonaborted[0].value;\n\t\treturn nonaborted[0];\n\t}\n\tfinal.issues.push({\n\t\tcode: \"invalid_union\",\n\t\tinput: final.value,\n\t\tinst,\n\t\terrors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config())))\n\t});\n\treturn final;\n}\nconst $ZodUnion = /* @__PURE__ */ $constructor(\"$ZodUnion\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : void 0);\n\tdefineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : void 0);\n\tdefineLazy(inst._zod, \"values\", () => {\n\t\tif (def.options.every((o) => o._zod.values)) return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n\t});\n\tdefineLazy(inst._zod, \"pattern\", () => {\n\t\tif (def.options.every((o) => o._zod.pattern)) {\n\t\t\tconst patterns = def.options.map((o) => o._zod.pattern);\n\t\t\treturn /* @__PURE__ */ new RegExp(`^(${patterns.map((p) => cleanRegex(p.source)).join(\"|\")})$`);\n\t\t}\n\t});\n\tconst single = def.options.length === 1;\n\tconst first = def.options[0]._zod.run;\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (single) return first(payload, ctx);\n\t\tlet async = false;\n\t\tconst results = [];\n\t\tfor (const option of def.options) {\n\t\t\tconst result = option._zod.run({\n\t\t\t\tvalue: payload.value,\n\t\t\t\tissues: []\n\t\t\t}, ctx);\n\t\t\tif (result instanceof Promise) {\n\t\t\t\tresults.push(result);\n\t\t\t\tasync = true;\n\t\t\t} else {\n\t\t\t\tif (result.issues.length === 0) return result;\n\t\t\t\tresults.push(result);\n\t\t\t}\n\t\t}\n\t\tif (!async) return handleUnionResults(results, payload, inst, ctx);\n\t\treturn Promise.all(results).then((results$1) => {\n\t\t\treturn handleUnionResults(results$1, payload, inst, ctx);\n\t\t});\n\t};\n});\nconst $ZodDiscriminatedUnion = /* @__PURE__ */ $constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n\tdef.inclusive = false;\n\t$ZodUnion.init(inst, def);\n\tconst _super = inst._zod.parse;\n\tdefineLazy(inst._zod, \"propValues\", () => {\n\t\tconst propValues = {};\n\t\tfor (const option of def.options) {\n\t\t\tconst pv = option._zod.propValues;\n\t\t\tif (!pv || Object.keys(pv).length === 0) throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n\t\t\tfor (const [k, v] of Object.entries(pv)) {\n\t\t\t\tif (!propValues[k]) propValues[k] = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const val of v) propValues[k].add(val);\n\t\t\t}\n\t\t}\n\t\treturn propValues;\n\t});\n\tconst disc = cached(() => {\n\t\tconst opts = def.options;\n\t\tconst map = /* @__PURE__ */ new Map();\n\t\tfor (const o of opts) {\n\t\t\tconst values = o._zod.propValues?.[def.discriminator];\n\t\t\tif (!values || values.size === 0) throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n\t\t\tfor (const v of values) {\n\t\t\t\tif (map.has(v)) throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n\t\t\t\tmap.set(v, o);\n\t\t\t}\n\t\t}\n\t\treturn map;\n\t});\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tif (!isObject(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\texpected: \"object\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tconst opt = disc.value.get(input?.[def.discriminator]);\n\t\tif (opt) return opt._zod.run(payload, ctx);\n\t\tif (def.unionFallback) return _super(payload, ctx);\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_union\",\n\t\t\terrors: [],\n\t\t\tnote: \"No matching discriminator\",\n\t\t\tdiscriminator: def.discriminator,\n\t\t\tinput,\n\t\t\tpath: [def.discriminator],\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodIntersection = /* @__PURE__ */ $constructor(\"$ZodIntersection\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tconst left = def.left._zod.run({\n\t\t\tvalue: input,\n\t\t\tissues: []\n\t\t}, ctx);\n\t\tconst right = def.right._zod.run({\n\t\t\tvalue: input,\n\t\t\tissues: []\n\t\t}, ctx);\n\t\tif (left instanceof Promise || right instanceof Promise) return Promise.all([left, right]).then(([left$1, right$1]) => {\n\t\t\treturn handleIntersectionResults(payload, left$1, right$1);\n\t\t});\n\t\treturn handleIntersectionResults(payload, left, right);\n\t};\n});\nfunction mergeValues(a, b) {\n\tif (a === b) return {\n\t\tvalid: true,\n\t\tdata: a\n\t};\n\tif (a instanceof Date && b instanceof Date && +a === +b) return {\n\t\tvalid: true,\n\t\tdata: a\n\t};\n\tif (isPlainObject(a) && isPlainObject(b)) {\n\t\tconst bKeys = Object.keys(b);\n\t\tconst sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n\t\tconst newObj = {\n\t\t\t...a,\n\t\t\t...b\n\t\t};\n\t\tfor (const key of sharedKeys) {\n\t\t\tconst sharedValue = mergeValues(a[key], b[key]);\n\t\t\tif (!sharedValue.valid) return {\n\t\t\t\tvalid: false,\n\t\t\t\tmergeErrorPath: [key, ...sharedValue.mergeErrorPath]\n\t\t\t};\n\t\t\tnewObj[key] = sharedValue.data;\n\t\t}\n\t\treturn {\n\t\t\tvalid: true,\n\t\t\tdata: newObj\n\t\t};\n\t}\n\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\tif (a.length !== b.length) return {\n\t\t\tvalid: false,\n\t\t\tmergeErrorPath: []\n\t\t};\n\t\tconst newArray = [];\n\t\tfor (let index = 0; index < a.length; index++) {\n\t\t\tconst itemA = a[index];\n\t\t\tconst itemB = b[index];\n\t\t\tconst sharedValue = mergeValues(itemA, itemB);\n\t\t\tif (!sharedValue.valid) return {\n\t\t\t\tvalid: false,\n\t\t\t\tmergeErrorPath: [index, ...sharedValue.mergeErrorPath]\n\t\t\t};\n\t\t\tnewArray.push(sharedValue.data);\n\t\t}\n\t\treturn {\n\t\t\tvalid: true,\n\t\t\tdata: newArray\n\t\t};\n\t}\n\treturn {\n\t\tvalid: false,\n\t\tmergeErrorPath: []\n\t};\n}\nfunction handleIntersectionResults(result, left, right) {\n\tconst unrecKeys = /* @__PURE__ */ new Map();\n\tlet unrecIssue;\n\tfor (const iss of left.issues) if (iss.code === \"unrecognized_keys\") {\n\t\tunrecIssue ?? (unrecIssue = iss);\n\t\tfor (const k of iss.keys) {\n\t\t\tif (!unrecKeys.has(k)) unrecKeys.set(k, {});\n\t\t\tunrecKeys.get(k).l = true;\n\t\t}\n\t} else result.issues.push(iss);\n\tfor (const iss of right.issues) if (iss.code === \"unrecognized_keys\") for (const k of iss.keys) {\n\t\tif (!unrecKeys.has(k)) unrecKeys.set(k, {});\n\t\tunrecKeys.get(k).r = true;\n\t}\n\telse result.issues.push(iss);\n\tconst bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n\tif (bothKeys.length && unrecIssue) result.issues.push({\n\t\t...unrecIssue,\n\t\tkeys: bothKeys\n\t});\n\tif (aborted(result)) return result;\n\tconst merged = mergeValues(left.value, right.value);\n\tif (!merged.valid) throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(merged.mergeErrorPath)}`);\n\tresult.value = merged.data;\n\treturn result;\n}\nconst $ZodTuple = /* @__PURE__ */ $constructor(\"$ZodTuple\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tconst items = def.items;\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tif (!Array.isArray(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\tinput,\n\t\t\t\tinst,\n\t\t\t\texpected: \"tuple\",\n\t\t\t\tcode: \"invalid_type\"\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tpayload.value = [];\n\t\tconst proms = [];\n\t\tconst reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n\t\tconst optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n\t\tif (!def.rest) {\n\t\t\tconst tooBig = input.length > items.length;\n\t\t\tconst tooSmall = input.length < optStart - 1;\n\t\t\tif (tooBig || tooSmall) {\n\t\t\t\tpayload.issues.push({\n\t\t\t\t\t...tooBig ? {\n\t\t\t\t\t\tcode: \"too_big\",\n\t\t\t\t\t\tmaximum: items.length,\n\t\t\t\t\t\tinclusive: true\n\t\t\t\t\t} : {\n\t\t\t\t\t\tcode: \"too_small\",\n\t\t\t\t\t\tminimum: items.length\n\t\t\t\t\t},\n\t\t\t\t\tinput,\n\t\t\t\t\tinst,\n\t\t\t\t\torigin: \"array\"\n\t\t\t\t});\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t}\n\t\tlet i = -1;\n\t\tfor (const item of items) {\n\t\t\ti++;\n\t\t\tif (i >= input.length) {\n\t\t\t\tif (i >= optStart) continue;\n\t\t\t}\n\t\t\tconst result = item._zod.run({\n\t\t\t\tvalue: input[i],\n\t\t\t\tissues: []\n\t\t\t}, ctx);\n\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => handleTupleResult(result$1, payload, i)));\n\t\t\telse handleTupleResult(result, payload, i);\n\t\t}\n\t\tif (def.rest) {\n\t\t\tconst rest = input.slice(items.length);\n\t\t\tfor (const el of rest) {\n\t\t\t\ti++;\n\t\t\t\tconst result = def.rest._zod.run({\n\t\t\t\t\tvalue: el,\n\t\t\t\t\tissues: []\n\t\t\t\t}, ctx);\n\t\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => handleTupleResult(result$1, payload, i)));\n\t\t\t\telse handleTupleResult(result, payload, i);\n\t\t\t}\n\t\t}\n\t\tif (proms.length) return Promise.all(proms).then(() => payload);\n\t\treturn payload;\n\t};\n});\nfunction handleTupleResult(result, final, index) {\n\tif (result.issues.length) final.issues.push(...prefixIssues(index, result.issues));\n\tfinal.value[index] = result.value;\n}\nconst $ZodRecord = /* @__PURE__ */ $constructor(\"$ZodRecord\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst input = payload.value;\n\t\tif (!isPlainObject(input)) {\n\t\t\tpayload.issues.push({\n\t\t\t\texpected: \"record\",\n\t\t\t\tcode: \"invalid_type\",\n\t\t\t\tinput,\n\t\t\t\tinst\n\t\t\t});\n\t\t\treturn payload;\n\t\t}\n\t\tconst proms = [];\n\t\tconst values = def.keyType._zod.values;\n\t\tif (values) {\n\t\t\tpayload.value = {};\n\t\t\tconst recordKeys = /* @__PURE__ */ new Set();\n\t\t\tfor (const key of values) if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n\t\t\t\trecordKeys.add(typeof key === \"number\" ? key.toString() : key);\n\t\t\t\tconst result = def.valueType._zod.run({\n\t\t\t\t\tvalue: input[key],\n\t\t\t\t\tissues: []\n\t\t\t\t}, ctx);\n\t\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => {\n\t\t\t\t\tif (result$1.issues.length) payload.issues.push(...prefixIssues(key, result$1.issues));\n\t\t\t\t\tpayload.value[key] = result$1.value;\n\t\t\t\t}));\n\t\t\t\telse {\n\t\t\t\t\tif (result.issues.length) payload.issues.push(...prefixIssues(key, result.issues));\n\t\t\t\t\tpayload.value[key] = result.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet unrecognized;\n\t\t\tfor (const key in input) if (!recordKeys.has(key)) {\n\t\t\t\tunrecognized = unrecognized ?? [];\n\t\t\t\tunrecognized.push(key);\n\t\t\t}\n\t\t\tif (unrecognized && unrecognized.length > 0) payload.issues.push({\n\t\t\t\tcode: \"unrecognized_keys\",\n\t\t\t\tinput,\n\t\t\t\tinst,\n\t\t\t\tkeys: unrecognized\n\t\t\t});\n\t\t} else {\n\t\t\tpayload.value = {};\n\t\t\tfor (const key of Reflect.ownKeys(input)) {\n\t\t\t\tif (key === \"__proto__\") continue;\n\t\t\t\tlet keyResult = def.keyType._zod.run({\n\t\t\t\t\tvalue: key,\n\t\t\t\t\tissues: []\n\t\t\t\t}, ctx);\n\t\t\t\tif (keyResult instanceof Promise) throw new Error(\"Async schemas not supported in object keys currently\");\n\t\t\t\tif (typeof key === \"string\" && number$1.test(key) && keyResult.issues.length) {\n\t\t\t\t\tconst retryResult = def.keyType._zod.run({\n\t\t\t\t\t\tvalue: Number(key),\n\t\t\t\t\t\tissues: []\n\t\t\t\t\t}, ctx);\n\t\t\t\t\tif (retryResult instanceof Promise) throw new Error(\"Async schemas not supported in object keys currently\");\n\t\t\t\t\tif (retryResult.issues.length === 0) keyResult = retryResult;\n\t\t\t\t}\n\t\t\t\tif (keyResult.issues.length) {\n\t\t\t\t\tif (def.mode === \"loose\") payload.value[key] = input[key];\n\t\t\t\t\telse payload.issues.push({\n\t\t\t\t\t\tcode: \"invalid_key\",\n\t\t\t\t\t\torigin: \"record\",\n\t\t\t\t\t\tissues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())),\n\t\t\t\t\t\tinput: key,\n\t\t\t\t\t\tpath: [key],\n\t\t\t\t\t\tinst\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst result = def.valueType._zod.run({\n\t\t\t\t\tvalue: input[key],\n\t\t\t\t\tissues: []\n\t\t\t\t}, ctx);\n\t\t\t\tif (result instanceof Promise) proms.push(result.then((result$1) => {\n\t\t\t\t\tif (result$1.issues.length) payload.issues.push(...prefixIssues(key, result$1.issues));\n\t\t\t\t\tpayload.value[keyResult.value] = result$1.value;\n\t\t\t\t}));\n\t\t\t\telse {\n\t\t\t\t\tif (result.issues.length) payload.issues.push(...prefixIssues(key, result.issues));\n\t\t\t\t\tpayload.value[keyResult.value] = result.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (proms.length) return Promise.all(proms).then(() => payload);\n\t\treturn payload;\n\t};\n});\nconst $ZodEnum = /* @__PURE__ */ $constructor(\"$ZodEnum\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tconst values = getEnumValues(def.entries);\n\tconst valuesSet = new Set(values);\n\tinst._zod.values = valuesSet;\n\tinst._zod.pattern = /* @__PURE__ */ new RegExp(`^(${values.filter((k) => propertyKeyTypes.has(typeof k)).map((o) => typeof o === \"string\" ? escapeRegex(o) : o.toString()).join(\"|\")})$`);\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tconst input = payload.value;\n\t\tif (valuesSet.has(input)) return payload;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_value\",\n\t\t\tvalues,\n\t\t\tinput,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodLiteral = /* @__PURE__ */ $constructor(\"$ZodLiteral\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tif (def.values.length === 0) throw new Error(\"Cannot create literal schema with no valid values\");\n\tconst values = new Set(def.values);\n\tinst._zod.values = values;\n\tinst._zod.pattern = /* @__PURE__ */ new RegExp(`^(${def.values.map((o) => typeof o === \"string\" ? escapeRegex(o) : o ? escapeRegex(o.toString()) : String(o)).join(\"|\")})$`);\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tconst input = payload.value;\n\t\tif (values.has(input)) return payload;\n\t\tpayload.issues.push({\n\t\t\tcode: \"invalid_value\",\n\t\t\tvalues: def.values,\n\t\t\tinput,\n\t\t\tinst\n\t\t});\n\t\treturn payload;\n\t};\n});\nconst $ZodTransform = /* @__PURE__ */ $constructor(\"$ZodTransform\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") throw new $ZodEncodeError(inst.constructor.name);\n\t\tconst _out = def.transform(payload.value, payload);\n\t\tif (ctx.async) return (_out instanceof Promise ? _out : Promise.resolve(_out)).then((output) => {\n\t\t\tpayload.value = output;\n\t\t\treturn payload;\n\t\t});\n\t\tif (_out instanceof Promise) throw new $ZodAsyncError();\n\t\tpayload.value = _out;\n\t\treturn payload;\n\t};\n});\nfunction handleOptionalResult(result, input) {\n\tif (result.issues.length && input === void 0) return {\n\t\tissues: [],\n\t\tvalue: void 0\n\t};\n\treturn result;\n}\nconst $ZodOptional = /* @__PURE__ */ $constructor(\"$ZodOptional\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.optin = \"optional\";\n\tinst._zod.optout = \"optional\";\n\tdefineLazy(inst._zod, \"values\", () => {\n\t\treturn def.innerType._zod.values ? new Set([...def.innerType._zod.values, void 0]) : void 0;\n\t});\n\tdefineLazy(inst._zod, \"pattern\", () => {\n\t\tconst pattern = def.innerType._zod.pattern;\n\t\treturn pattern ? /* @__PURE__ */ new RegExp(`^(${cleanRegex(pattern.source)})?$`) : void 0;\n\t});\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (def.innerType._zod.optin === \"optional\") {\n\t\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\t\tif (result instanceof Promise) return result.then((r) => handleOptionalResult(r, payload.value));\n\t\t\treturn handleOptionalResult(result, payload.value);\n\t\t}\n\t\tif (payload.value === void 0) return payload;\n\t\treturn def.innerType._zod.run(payload, ctx);\n\t};\n});\nconst $ZodExactOptional = /* @__PURE__ */ $constructor(\"$ZodExactOptional\", (inst, def) => {\n\t$ZodOptional.init(inst, def);\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tdefineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n\tinst._zod.parse = (payload, ctx) => {\n\t\treturn def.innerType._zod.run(payload, ctx);\n\t};\n});\nconst $ZodNullable = /* @__PURE__ */ $constructor(\"$ZodNullable\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n\tdefineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n\tdefineLazy(inst._zod, \"pattern\", () => {\n\t\tconst pattern = def.innerType._zod.pattern;\n\t\treturn pattern ? /* @__PURE__ */ new RegExp(`^(${cleanRegex(pattern.source)}|null)$`) : void 0;\n\t});\n\tdefineLazy(inst._zod, \"values\", () => {\n\t\treturn def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : void 0;\n\t});\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (payload.value === null) return payload;\n\t\treturn def.innerType._zod.run(payload, ctx);\n\t};\n});\nconst $ZodDefault = /* @__PURE__ */ $constructor(\"$ZodDefault\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.optin = \"optional\";\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") return def.innerType._zod.run(payload, ctx);\n\t\tif (payload.value === void 0) {\n\t\t\tpayload.value = def.defaultValue;\n\t\t\t/**\n\t\t\t* $ZodDefault returns the default value immediately in forward direction.\n\t\t\t* It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n\t\t\treturn payload;\n\t\t}\n\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\tif (result instanceof Promise) return result.then((result$1) => handleDefaultResult(result$1, def));\n\t\treturn handleDefaultResult(result, def);\n\t};\n});\nfunction handleDefaultResult(payload, def) {\n\tif (payload.value === void 0) payload.value = def.defaultValue;\n\treturn payload;\n}\nconst $ZodPrefault = /* @__PURE__ */ $constructor(\"$ZodPrefault\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tinst._zod.optin = \"optional\";\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") return def.innerType._zod.run(payload, ctx);\n\t\tif (payload.value === void 0) payload.value = def.defaultValue;\n\t\treturn def.innerType._zod.run(payload, ctx);\n\t};\n});\nconst $ZodNonOptional = /* @__PURE__ */ $constructor(\"$ZodNonOptional\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"values\", () => {\n\t\tconst v = def.innerType._zod.values;\n\t\treturn v ? new Set([...v].filter((x) => x !== void 0)) : void 0;\n\t});\n\tinst._zod.parse = (payload, ctx) => {\n\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\tif (result instanceof Promise) return result.then((result$1) => handleNonOptionalResult(result$1, inst));\n\t\treturn handleNonOptionalResult(result, inst);\n\t};\n});\nfunction handleNonOptionalResult(payload, inst) {\n\tif (!payload.issues.length && payload.value === void 0) payload.issues.push({\n\t\tcode: \"invalid_type\",\n\t\texpected: \"nonoptional\",\n\t\tinput: payload.value,\n\t\tinst\n\t});\n\treturn payload;\n}\nconst $ZodCatch = /* @__PURE__ */ $constructor(\"$ZodCatch\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n\tdefineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") return def.innerType._zod.run(payload, ctx);\n\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\tif (result instanceof Promise) return result.then((result$1) => {\n\t\t\tpayload.value = result$1.value;\n\t\t\tif (result$1.issues.length) {\n\t\t\t\tpayload.value = def.catchValue({\n\t\t\t\t\t...payload,\n\t\t\t\t\terror: { issues: result$1.issues.map((iss) => finalizeIssue(iss, ctx, config())) },\n\t\t\t\t\tinput: payload.value\n\t\t\t\t});\n\t\t\t\tpayload.issues = [];\n\t\t\t}\n\t\t\treturn payload;\n\t\t});\n\t\tpayload.value = result.value;\n\t\tif (result.issues.length) {\n\t\t\tpayload.value = def.catchValue({\n\t\t\t\t...payload,\n\t\t\t\terror: { issues: result.issues.map((iss) => finalizeIssue(iss, ctx, config())) },\n\t\t\t\tinput: payload.value\n\t\t\t});\n\t\t\tpayload.issues = [];\n\t\t}\n\t\treturn payload;\n\t};\n});\nconst $ZodPipe = /* @__PURE__ */ $constructor(\"$ZodPipe\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"values\", () => def.in._zod.values);\n\tdefineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n\tdefineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n\tdefineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") {\n\t\t\tconst right = def.out._zod.run(payload, ctx);\n\t\t\tif (right instanceof Promise) return right.then((right$1) => handlePipeResult(right$1, def.in, ctx));\n\t\t\treturn handlePipeResult(right, def.in, ctx);\n\t\t}\n\t\tconst left = def.in._zod.run(payload, ctx);\n\t\tif (left instanceof Promise) return left.then((left$1) => handlePipeResult(left$1, def.out, ctx));\n\t\treturn handlePipeResult(left, def.out, ctx);\n\t};\n});\nfunction handlePipeResult(left, next, ctx) {\n\tif (left.issues.length) {\n\t\tleft.aborted = true;\n\t\treturn left;\n\t}\n\treturn next._zod.run({\n\t\tvalue: left.value,\n\t\tissues: left.issues\n\t}, ctx);\n}\nconst $ZodReadonly = /* @__PURE__ */ $constructor(\"$ZodReadonly\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tdefineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n\tdefineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n\tdefineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n\tdefineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n\tinst._zod.parse = (payload, ctx) => {\n\t\tif (ctx.direction === \"backward\") return def.innerType._zod.run(payload, ctx);\n\t\tconst result = def.innerType._zod.run(payload, ctx);\n\t\tif (result instanceof Promise) return result.then(handleReadonlyResult);\n\t\treturn handleReadonlyResult(result);\n\t};\n});\nfunction handleReadonlyResult(payload) {\n\tpayload.value = Object.freeze(payload.value);\n\treturn payload;\n}\nconst $ZodCustom = /* @__PURE__ */ $constructor(\"$ZodCustom\", (inst, def) => {\n\t$ZodCheck.init(inst, def);\n\t$ZodType.init(inst, def);\n\tinst._zod.parse = (payload, _) => {\n\t\treturn payload;\n\t};\n\tinst._zod.check = (payload) => {\n\t\tconst input = payload.value;\n\t\tconst r = def.fn(input);\n\t\tif (r instanceof Promise) return r.then((r$1) => handleRefineResult(r$1, payload, input, inst));\n\t\thandleRefineResult(r, payload, input, inst);\n\t};\n});\nfunction handleRefineResult(result, payload, input, inst) {\n\tif (!result) {\n\t\tconst _iss = {\n\t\t\tcode: \"custom\",\n\t\t\tinput,\n\t\t\tinst,\n\t\t\tpath: [...inst._zod.def.path ?? []],\n\t\t\tcontinue: !inst._zod.def.abort\n\t\t};\n\t\tif (inst._zod.def.params) _iss.params = inst._zod.def.params;\n\t\tpayload.issues.push(issue(_iss));\n\t}\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js\nvar _a;\nvar $ZodRegistry = class {\n\tconstructor() {\n\t\tthis._map = /* @__PURE__ */ new WeakMap();\n\t\tthis._idmap = /* @__PURE__ */ new Map();\n\t}\n\tadd(schema, ..._meta) {\n\t\tconst meta$2 = _meta[0];\n\t\tthis._map.set(schema, meta$2);\n\t\tif (meta$2 && typeof meta$2 === \"object\" && \"id\" in meta$2) this._idmap.set(meta$2.id, schema);\n\t\treturn this;\n\t}\n\tclear() {\n\t\tthis._map = /* @__PURE__ */ new WeakMap();\n\t\tthis._idmap = /* @__PURE__ */ new Map();\n\t\treturn this;\n\t}\n\tremove(schema) {\n\t\tconst meta$2 = this._map.get(schema);\n\t\tif (meta$2 && typeof meta$2 === \"object\" && \"id\" in meta$2) this._idmap.delete(meta$2.id);\n\t\tthis._map.delete(schema);\n\t\treturn this;\n\t}\n\tget(schema) {\n\t\tconst p = schema._zod.parent;\n\t\tif (p) {\n\t\t\tconst pm = { ...this.get(p) ?? {} };\n\t\t\tdelete pm.id;\n\t\t\tconst f = {\n\t\t\t\t...pm,\n\t\t\t\t...this._map.get(schema)\n\t\t\t};\n\t\t\treturn Object.keys(f).length ? f : void 0;\n\t\t}\n\t\treturn this._map.get(schema);\n\t}\n\thas(schema) {\n\t\treturn this._map.has(schema);\n\t}\n};\nfunction registry() {\n\treturn new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nconst globalRegistry = globalThis.__zod_globalRegistry;\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js\n/* @__NO_SIDE_EFFECTS__ */\nfunction _string(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _email(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"email\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _guid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"guid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uuid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"uuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uuidv4(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"uuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\tversion: \"v4\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uuidv6(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"uuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\tversion: \"v6\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uuidv7(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"uuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\tversion: \"v7\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _url(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"url\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _emoji(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"emoji\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _nanoid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"nanoid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cuid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"cuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cuid2(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"cuid2\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _ulid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"ulid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _xid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"xid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _ksuid(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"ksuid\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _ipv4(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"ipv4\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _ipv6(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"ipv6\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cidrv4(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"cidrv4\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cidrv6(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"cidrv6\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _base64(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"base64\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _base64url(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"base64url\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _e164(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"e164\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _jwt(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"jwt\",\n\t\tcheck: \"string_format\",\n\t\tabort: false,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isoDateTime(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"datetime\",\n\t\tcheck: \"string_format\",\n\t\toffset: false,\n\t\tlocal: false,\n\t\tprecision: null,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isoDate(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"date\",\n\t\tcheck: \"string_format\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isoTime(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"time\",\n\t\tcheck: \"string_format\",\n\t\tprecision: null,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isoDuration(Class, params) {\n\treturn new Class({\n\t\ttype: \"string\",\n\t\tformat: \"duration\",\n\t\tcheck: \"string_format\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _number(Class, params) {\n\treturn new Class({\n\t\ttype: \"number\",\n\t\tchecks: [],\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _int(Class, params) {\n\treturn new Class({\n\t\ttype: \"number\",\n\t\tcheck: \"number_format\",\n\t\tabort: false,\n\t\tformat: \"safeint\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _boolean(Class, params) {\n\treturn new Class({\n\t\ttype: \"boolean\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _unknown(Class) {\n\treturn new Class({ type: \"unknown\" });\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _never(Class, params) {\n\treturn new Class({\n\t\ttype: \"never\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _lt(value, params) {\n\treturn new $ZodCheckLessThan({\n\t\tcheck: \"less_than\",\n\t\t...normalizeParams(params),\n\t\tvalue,\n\t\tinclusive: false\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _lte(value, params) {\n\treturn new $ZodCheckLessThan({\n\t\tcheck: \"less_than\",\n\t\t...normalizeParams(params),\n\t\tvalue,\n\t\tinclusive: true\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _gt(value, params) {\n\treturn new $ZodCheckGreaterThan({\n\t\tcheck: \"greater_than\",\n\t\t...normalizeParams(params),\n\t\tvalue,\n\t\tinclusive: false\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _gte(value, params) {\n\treturn new $ZodCheckGreaterThan({\n\t\tcheck: \"greater_than\",\n\t\t...normalizeParams(params),\n\t\tvalue,\n\t\tinclusive: true\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _multipleOf(value, params) {\n\treturn new $ZodCheckMultipleOf({\n\t\tcheck: \"multiple_of\",\n\t\t...normalizeParams(params),\n\t\tvalue\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _maxLength(maximum, params) {\n\treturn new $ZodCheckMaxLength({\n\t\tcheck: \"max_length\",\n\t\t...normalizeParams(params),\n\t\tmaximum\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _minLength(minimum, params) {\n\treturn new $ZodCheckMinLength({\n\t\tcheck: \"min_length\",\n\t\t...normalizeParams(params),\n\t\tminimum\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _length(length, params) {\n\treturn new $ZodCheckLengthEquals({\n\t\tcheck: \"length_equals\",\n\t\t...normalizeParams(params),\n\t\tlength\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _regex(pattern, params) {\n\treturn new $ZodCheckRegex({\n\t\tcheck: \"string_format\",\n\t\tformat: \"regex\",\n\t\t...normalizeParams(params),\n\t\tpattern\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _lowercase(params) {\n\treturn new $ZodCheckLowerCase({\n\t\tcheck: \"string_format\",\n\t\tformat: \"lowercase\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _uppercase(params) {\n\treturn new $ZodCheckUpperCase({\n\t\tcheck: \"string_format\",\n\t\tformat: \"uppercase\",\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _includes(includes, params) {\n\treturn new $ZodCheckIncludes({\n\t\tcheck: \"string_format\",\n\t\tformat: \"includes\",\n\t\t...normalizeParams(params),\n\t\tincludes\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _startsWith(prefix, params) {\n\treturn new $ZodCheckStartsWith({\n\t\tcheck: \"string_format\",\n\t\tformat: \"starts_with\",\n\t\t...normalizeParams(params),\n\t\tprefix\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _endsWith(suffix, params) {\n\treturn new $ZodCheckEndsWith({\n\t\tcheck: \"string_format\",\n\t\tformat: \"ends_with\",\n\t\t...normalizeParams(params),\n\t\tsuffix\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _overwrite(tx) {\n\treturn new $ZodCheckOverwrite({\n\t\tcheck: \"overwrite\",\n\t\ttx\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _normalize(form) {\n\treturn /* @__PURE__ */ _overwrite((input) => input.normalize(form));\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _trim() {\n\treturn /* @__PURE__ */ _overwrite((input) => input.trim());\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _toLowerCase() {\n\treturn /* @__PURE__ */ _overwrite((input) => input.toLowerCase());\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _toUpperCase() {\n\treturn /* @__PURE__ */ _overwrite((input) => input.toUpperCase());\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _slugify() {\n\treturn /* @__PURE__ */ _overwrite((input) => slugify(input));\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _array(Class, element, params) {\n\treturn new Class({\n\t\ttype: \"array\",\n\t\telement,\n\t\t...normalizeParams(params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _refine(Class, fn, _params) {\n\treturn new Class({\n\t\ttype: \"custom\",\n\t\tcheck: \"custom\",\n\t\tfn,\n\t\t...normalizeParams(_params)\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _superRefine(fn) {\n\tconst ch = /* @__PURE__ */ _check((payload) => {\n\t\tpayload.addIssue = (issue$1) => {\n\t\t\tif (typeof issue$1 === \"string\") payload.issues.push(issue(issue$1, payload.value, ch._zod.def));\n\t\t\telse {\n\t\t\t\tconst _issue = issue$1;\n\t\t\t\tif (_issue.fatal) _issue.continue = false;\n\t\t\t\t_issue.code ?? (_issue.code = \"custom\");\n\t\t\t\t_issue.input ?? (_issue.input = payload.value);\n\t\t\t\t_issue.inst ?? (_issue.inst = ch);\n\t\t\t\t_issue.continue ?? (_issue.continue = !ch._zod.def.abort);\n\t\t\t\tpayload.issues.push(issue(_issue));\n\t\t\t}\n\t\t};\n\t\treturn fn(payload.value, payload);\n\t});\n\treturn ch;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _check(fn, params) {\n\tconst ch = new $ZodCheck({\n\t\tcheck: \"custom\",\n\t\t...normalizeParams(params)\n\t});\n\tch._zod.check = fn;\n\treturn ch;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction describe$1(description) {\n\tconst ch = new $ZodCheck({ check: \"describe\" });\n\tch._zod.onattach = [(inst) => {\n\t\tconst existing = globalRegistry.get(inst) ?? {};\n\t\tglobalRegistry.add(inst, {\n\t\t\t...existing,\n\t\t\tdescription\n\t\t});\n\t}];\n\tch._zod.check = () => {};\n\treturn ch;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction meta$1(metadata) {\n\tconst ch = new $ZodCheck({ check: \"meta\" });\n\tch._zod.onattach = [(inst) => {\n\t\tconst existing = globalRegistry.get(inst) ?? {};\n\t\tglobalRegistry.add(inst, {\n\t\t\t...existing,\n\t\t\t...metadata\n\t\t});\n\t}];\n\tch._zod.check = () => {};\n\treturn ch;\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js\nfunction initializeContext(params) {\n\tlet target = params?.target ?? \"draft-2020-12\";\n\tif (target === \"draft-4\") target = \"draft-04\";\n\tif (target === \"draft-7\") target = \"draft-07\";\n\treturn {\n\t\tprocessors: params.processors ?? {},\n\t\tmetadataRegistry: params?.metadata ?? globalRegistry,\n\t\ttarget,\n\t\tunrepresentable: params?.unrepresentable ?? \"throw\",\n\t\toverride: params?.override ?? (() => {}),\n\t\tio: params?.io ?? \"output\",\n\t\tcounter: 0,\n\t\tseen: /* @__PURE__ */ new Map(),\n\t\tcycles: params?.cycles ?? \"ref\",\n\t\treused: params?.reused ?? \"inline\",\n\t\texternal: params?.external ?? void 0\n\t};\n}\nfunction process$1(schema, ctx, _params = {\n\tpath: [],\n\tschemaPath: []\n}) {\n\tvar _a$1;\n\tconst def = schema._zod.def;\n\tconst seen = ctx.seen.get(schema);\n\tif (seen) {\n\t\tseen.count++;\n\t\tif (_params.schemaPath.includes(schema)) seen.cycle = _params.path;\n\t\treturn seen.schema;\n\t}\n\tconst result = {\n\t\tschema: {},\n\t\tcount: 1,\n\t\tcycle: void 0,\n\t\tpath: _params.path\n\t};\n\tctx.seen.set(schema, result);\n\tconst overrideSchema = schema._zod.toJSONSchema?.();\n\tif (overrideSchema) result.schema = overrideSchema;\n\telse {\n\t\tconst params = {\n\t\t\t..._params,\n\t\t\tschemaPath: [..._params.schemaPath, schema],\n\t\t\tpath: _params.path\n\t\t};\n\t\tif (schema._zod.processJSONSchema) schema._zod.processJSONSchema(ctx, result.schema, params);\n\t\telse {\n\t\t\tconst _json = result.schema;\n\t\t\tconst processor = ctx.processors[def.type];\n\t\t\tif (!processor) throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n\t\t\tprocessor(schema, ctx, _json, params);\n\t\t}\n\t\tconst parent = schema._zod.parent;\n\t\tif (parent) {\n\t\t\tif (!result.ref) result.ref = parent;\n\t\t\tprocess$1(parent, ctx, params);\n\t\t\tctx.seen.get(parent).isParent = true;\n\t\t}\n\t}\n\tconst meta$2 = ctx.metadataRegistry.get(schema);\n\tif (meta$2) Object.assign(result.schema, meta$2);\n\tif (ctx.io === \"input\" && isTransforming(schema)) {\n\t\tdelete result.schema.examples;\n\t\tdelete result.schema.default;\n\t}\n\tif (ctx.io === \"input\" && result.schema._prefault) (_a$1 = result.schema).default ?? (_a$1.default = result.schema._prefault);\n\tdelete result.schema._prefault;\n\treturn ctx.seen.get(schema).schema;\n}\nfunction extractDefs(ctx, schema) {\n\tconst root = ctx.seen.get(schema);\n\tif (!root) throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n\tconst idToSchema = /* @__PURE__ */ new Map();\n\tfor (const entry of ctx.seen.entries()) {\n\t\tconst id = ctx.metadataRegistry.get(entry[0])?.id;\n\t\tif (id) {\n\t\t\tconst existing = idToSchema.get(id);\n\t\t\tif (existing && existing !== entry[0]) throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n\t\t\tidToSchema.set(id, entry[0]);\n\t\t}\n\t}\n\tconst makeURI = (entry) => {\n\t\tconst defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n\t\tif (ctx.external) {\n\t\t\tconst externalId = ctx.external.registry.get(entry[0])?.id;\n\t\t\tconst uriGenerator = ctx.external.uri ?? ((id$1) => id$1);\n\t\t\tif (externalId) return { ref: uriGenerator(externalId) };\n\t\t\tconst id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n\t\t\tentry[1].defId = id;\n\t\t\treturn {\n\t\t\t\tdefId: id,\n\t\t\t\tref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}`\n\t\t\t};\n\t\t}\n\t\tif (entry[1] === root) return { ref: \"#\" };\n\t\tconst defUriPrefix = `#/${defsSegment}/`;\n\t\tconst defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n\t\treturn {\n\t\t\tdefId,\n\t\t\tref: defUriPrefix + defId\n\t\t};\n\t};\n\tconst extractToDef = (entry) => {\n\t\tif (entry[1].schema.$ref) return;\n\t\tconst seen = entry[1];\n\t\tconst { ref, defId } = makeURI(entry);\n\t\tseen.def = { ...seen.schema };\n\t\tif (defId) seen.defId = defId;\n\t\tconst schema$1 = seen.schema;\n\t\tfor (const key in schema$1) delete schema$1[key];\n\t\tschema$1.$ref = ref;\n\t};\n\tif (ctx.cycles === \"throw\") for (const entry of ctx.seen.entries()) {\n\t\tconst seen = entry[1];\n\t\tif (seen.cycle) throw new Error(`Cycle detected: #/${seen.cycle?.join(\"/\")}/<root>\n\nSet the \\`cycles\\` parameter to \\`\"ref\"\\` to resolve cyclical schemas with defs.`);\n\t}\n\tfor (const entry of ctx.seen.entries()) {\n\t\tconst seen = entry[1];\n\t\tif (schema === entry[0]) {\n\t\t\textractToDef(entry);\n\t\t\tcontinue;\n\t\t}\n\t\tif (ctx.external) {\n\t\t\tconst ext = ctx.external.registry.get(entry[0])?.id;\n\t\t\tif (schema !== entry[0] && ext) {\n\t\t\t\textractToDef(entry);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (ctx.metadataRegistry.get(entry[0])?.id) {\n\t\t\textractToDef(entry);\n\t\t\tcontinue;\n\t\t}\n\t\tif (seen.cycle) {\n\t\t\textractToDef(entry);\n\t\t\tcontinue;\n\t\t}\n\t\tif (seen.count > 1) {\n\t\t\tif (ctx.reused === \"ref\") {\n\t\t\t\textractToDef(entry);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction finalize(ctx, schema) {\n\tconst root = ctx.seen.get(schema);\n\tif (!root) throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n\tconst flattenRef = (zodSchema) => {\n\t\tconst seen = ctx.seen.get(zodSchema);\n\t\tif (seen.ref === null) return;\n\t\tconst schema$1 = seen.def ?? seen.schema;\n\t\tconst _cached = { ...schema$1 };\n\t\tconst ref = seen.ref;\n\t\tseen.ref = null;\n\t\tif (ref) {\n\t\t\tflattenRef(ref);\n\t\t\tconst refSeen = ctx.seen.get(ref);\n\t\t\tconst refSchema = refSeen.schema;\n\t\t\tif (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n\t\t\t\tschema$1.allOf = schema$1.allOf ?? [];\n\t\t\t\tschema$1.allOf.push(refSchema);\n\t\t\t} else Object.assign(schema$1, refSchema);\n\t\t\tObject.assign(schema$1, _cached);\n\t\t\tif (zodSchema._zod.parent === ref) for (const key in schema$1) {\n\t\t\t\tif (key === \"$ref\" || key === \"allOf\") continue;\n\t\t\t\tif (!(key in _cached)) delete schema$1[key];\n\t\t\t}\n\t\t\tif (refSchema.$ref && refSeen.def) for (const key in schema$1) {\n\t\t\t\tif (key === \"$ref\" || key === \"allOf\") continue;\n\t\t\t\tif (key in refSeen.def && JSON.stringify(schema$1[key]) === JSON.stringify(refSeen.def[key])) delete schema$1[key];\n\t\t\t}\n\t\t}\n\t\tconst parent = zodSchema._zod.parent;\n\t\tif (parent && parent !== ref) {\n\t\t\tflattenRef(parent);\n\t\t\tconst parentSeen = ctx.seen.get(parent);\n\t\t\tif (parentSeen?.schema.$ref) {\n\t\t\t\tschema$1.$ref = parentSeen.schema.$ref;\n\t\t\t\tif (parentSeen.def) for (const key in schema$1) {\n\t\t\t\t\tif (key === \"$ref\" || key === \"allOf\") continue;\n\t\t\t\t\tif (key in parentSeen.def && JSON.stringify(schema$1[key]) === JSON.stringify(parentSeen.def[key])) delete schema$1[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tctx.override({\n\t\t\tzodSchema,\n\t\t\tjsonSchema: schema$1,\n\t\t\tpath: seen.path ?? []\n\t\t});\n\t};\n\tfor (const entry of [...ctx.seen.entries()].reverse()) flattenRef(entry[0]);\n\tconst result = {};\n\tif (ctx.target === \"draft-2020-12\") result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n\telse if (ctx.target === \"draft-07\") result.$schema = \"http://json-schema.org/draft-07/schema#\";\n\telse if (ctx.target === \"draft-04\") result.$schema = \"http://json-schema.org/draft-04/schema#\";\n\telse if (ctx.target === \"openapi-3.0\") {}\n\tif (ctx.external?.uri) {\n\t\tconst id = ctx.external.registry.get(schema)?.id;\n\t\tif (!id) throw new Error(\"Schema is missing an `id` property\");\n\t\tresult.$id = ctx.external.uri(id);\n\t}\n\tObject.assign(result, root.def ?? root.schema);\n\tconst defs = ctx.external?.defs ?? {};\n\tfor (const entry of ctx.seen.entries()) {\n\t\tconst seen = entry[1];\n\t\tif (seen.def && seen.defId) defs[seen.defId] = seen.def;\n\t}\n\tif (ctx.external) {} else if (Object.keys(defs).length > 0) if (ctx.target === \"draft-2020-12\") result.$defs = defs;\n\telse result.definitions = defs;\n\ttry {\n\t\tconst finalized = JSON.parse(JSON.stringify(result));\n\t\tObject.defineProperty(finalized, \"~standard\", {\n\t\t\tvalue: {\n\t\t\t\t...schema[\"~standard\"],\n\t\t\t\tjsonSchema: {\n\t\t\t\t\tinput: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n\t\t\t\t\toutput: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors)\n\t\t\t\t}\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t\twritable: false\n\t\t});\n\t\treturn finalized;\n\t} catch (_err) {\n\t\tthrow new Error(\"Error converting schema to JSON.\");\n\t}\n}\nfunction isTransforming(_schema, _ctx) {\n\tconst ctx = _ctx ?? { seen: /* @__PURE__ */ new Set() };\n\tif (ctx.seen.has(_schema)) return false;\n\tctx.seen.add(_schema);\n\tconst def = _schema._zod.def;\n\tif (def.type === \"transform\") return true;\n\tif (def.type === \"array\") return isTransforming(def.element, ctx);\n\tif (def.type === \"set\") return isTransforming(def.valueType, ctx);\n\tif (def.type === \"lazy\") return isTransforming(def.getter(), ctx);\n\tif (def.type === \"promise\" || def.type === \"optional\" || def.type === \"nonoptional\" || def.type === \"nullable\" || def.type === \"readonly\" || def.type === \"default\" || def.type === \"prefault\") return isTransforming(def.innerType, ctx);\n\tif (def.type === \"intersection\") return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n\tif (def.type === \"record\" || def.type === \"map\") return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n\tif (def.type === \"pipe\") return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n\tif (def.type === \"object\") {\n\t\tfor (const key in def.shape) if (isTransforming(def.shape[key], ctx)) return true;\n\t\treturn false;\n\t}\n\tif (def.type === \"union\") {\n\t\tfor (const option of def.options) if (isTransforming(option, ctx)) return true;\n\t\treturn false;\n\t}\n\tif (def.type === \"tuple\") {\n\t\tfor (const item of def.items) if (isTransforming(item, ctx)) return true;\n\t\tif (def.rest && isTransforming(def.rest, ctx)) return true;\n\t\treturn false;\n\t}\n\treturn false;\n}\n/**\n* Creates a toJSONSchema method for a schema instance.\n* This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n*/\nconst createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n\tconst ctx = initializeContext({\n\t\t...params,\n\t\tprocessors\n\t});\n\tprocess$1(schema, ctx);\n\textractDefs(ctx, schema);\n\treturn finalize(ctx, schema);\n};\nconst createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n\tconst { libraryOptions, target } = params ?? {};\n\tconst ctx = initializeContext({\n\t\t...libraryOptions ?? {},\n\t\ttarget,\n\t\tio,\n\t\tprocessors\n\t});\n\tprocess$1(schema, ctx);\n\textractDefs(ctx, schema);\n\treturn finalize(ctx, schema);\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js\nconst formatMap = {\n\tguid: \"uuid\",\n\turl: \"uri\",\n\tdatetime: \"date-time\",\n\tjson_string: \"json-string\",\n\tregex: \"\"\n};\nconst stringProcessor = (schema, ctx, _json, _params) => {\n\tconst json = _json;\n\tjson.type = \"string\";\n\tconst { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag;\n\tif (typeof minimum === \"number\") json.minLength = minimum;\n\tif (typeof maximum === \"number\") json.maxLength = maximum;\n\tif (format) {\n\t\tjson.format = formatMap[format] ?? format;\n\t\tif (json.format === \"\") delete json.format;\n\t\tif (format === \"time\") delete json.format;\n\t}\n\tif (contentEncoding) json.contentEncoding = contentEncoding;\n\tif (patterns && patterns.size > 0) {\n\t\tconst regexes = [...patterns];\n\t\tif (regexes.length === 1) json.pattern = regexes[0].source;\n\t\telse if (regexes.length > 1) json.allOf = [...regexes.map((regex) => ({\n\t\t\t...ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\" ? { type: \"string\" } : {},\n\t\t\tpattern: regex.source\n\t\t}))];\n\t}\n};\nconst numberProcessor = (schema, ctx, _json, _params) => {\n\tconst json = _json;\n\tconst { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n\tif (typeof format === \"string\" && format.includes(\"int\")) json.type = \"integer\";\n\telse json.type = \"number\";\n\tif (typeof exclusiveMinimum === \"number\") if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n\t\tjson.minimum = exclusiveMinimum;\n\t\tjson.exclusiveMinimum = true;\n\t} else json.exclusiveMinimum = exclusiveMinimum;\n\tif (typeof minimum === \"number\") {\n\t\tjson.minimum = minimum;\n\t\tif (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") if (exclusiveMinimum >= minimum) delete json.minimum;\n\t\telse delete json.exclusiveMinimum;\n\t}\n\tif (typeof exclusiveMaximum === \"number\") if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n\t\tjson.maximum = exclusiveMaximum;\n\t\tjson.exclusiveMaximum = true;\n\t} else json.exclusiveMaximum = exclusiveMaximum;\n\tif (typeof maximum === \"number\") {\n\t\tjson.maximum = maximum;\n\t\tif (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") if (exclusiveMaximum <= maximum) delete json.maximum;\n\t\telse delete json.exclusiveMaximum;\n\t}\n\tif (typeof multipleOf === \"number\") json.multipleOf = multipleOf;\n};\nconst booleanProcessor = (_schema, _ctx, json, _params) => {\n\tjson.type = \"boolean\";\n};\nconst neverProcessor = (_schema, _ctx, json, _params) => {\n\tjson.not = {};\n};\nconst unknownProcessor = (_schema, _ctx, _json, _params) => {};\nconst enumProcessor = (schema, _ctx, json, _params) => {\n\tconst def = schema._zod.def;\n\tconst values = getEnumValues(def.entries);\n\tif (values.every((v) => typeof v === \"number\")) json.type = \"number\";\n\tif (values.every((v) => typeof v === \"string\")) json.type = \"string\";\n\tjson.enum = values;\n};\nconst literalProcessor = (schema, ctx, json, _params) => {\n\tconst def = schema._zod.def;\n\tconst vals = [];\n\tfor (const val of def.values) if (val === void 0) {\n\t\tif (ctx.unrepresentable === \"throw\") throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n\t} else if (typeof val === \"bigint\") if (ctx.unrepresentable === \"throw\") throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n\telse vals.push(Number(val));\n\telse vals.push(val);\n\tif (vals.length === 0) {} else if (vals.length === 1) {\n\t\tconst val = vals[0];\n\t\tjson.type = val === null ? \"null\" : typeof val;\n\t\tif (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") json.enum = [val];\n\t\telse json.const = val;\n\t} else {\n\t\tif (vals.every((v) => typeof v === \"number\")) json.type = \"number\";\n\t\tif (vals.every((v) => typeof v === \"string\")) json.type = \"string\";\n\t\tif (vals.every((v) => typeof v === \"boolean\")) json.type = \"boolean\";\n\t\tif (vals.every((v) => v === null)) json.type = \"null\";\n\t\tjson.enum = vals;\n\t}\n};\nconst customProcessor = (_schema, ctx, _json, _params) => {\n\tif (ctx.unrepresentable === \"throw\") throw new Error(\"Custom types cannot be represented in JSON Schema\");\n};\nconst transformProcessor = (_schema, ctx, _json, _params) => {\n\tif (ctx.unrepresentable === \"throw\") throw new Error(\"Transforms cannot be represented in JSON Schema\");\n};\nconst arrayProcessor = (schema, ctx, _json, params) => {\n\tconst json = _json;\n\tconst def = schema._zod.def;\n\tconst { minimum, maximum } = schema._zod.bag;\n\tif (typeof minimum === \"number\") json.minItems = minimum;\n\tif (typeof maximum === \"number\") json.maxItems = maximum;\n\tjson.type = \"array\";\n\tjson.items = process$1(def.element, ctx, {\n\t\t...params,\n\t\tpath: [...params.path, \"items\"]\n\t});\n};\nconst objectProcessor = (schema, ctx, _json, params) => {\n\tconst json = _json;\n\tconst def = schema._zod.def;\n\tjson.type = \"object\";\n\tjson.properties = {};\n\tconst shape = def.shape;\n\tfor (const key in shape) json.properties[key] = process$1(shape[key], ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\t\"properties\",\n\t\t\tkey\n\t\t]\n\t});\n\tconst allKeys = new Set(Object.keys(shape));\n\tconst requiredKeys = new Set([...allKeys].filter((key) => {\n\t\tconst v = def.shape[key]._zod;\n\t\tif (ctx.io === \"input\") return v.optin === void 0;\n\t\telse return v.optout === void 0;\n\t}));\n\tif (requiredKeys.size > 0) json.required = Array.from(requiredKeys);\n\tif (def.catchall?._zod.def.type === \"never\") json.additionalProperties = false;\n\telse if (!def.catchall) {\n\t\tif (ctx.io === \"output\") json.additionalProperties = false;\n\t} else if (def.catchall) json.additionalProperties = process$1(def.catchall, ctx, {\n\t\t...params,\n\t\tpath: [...params.path, \"additionalProperties\"]\n\t});\n};\nconst unionProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tconst isExclusive = def.inclusive === false;\n\tconst options = def.options.map((x, i) => process$1(x, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\tisExclusive ? \"oneOf\" : \"anyOf\",\n\t\t\ti\n\t\t]\n\t}));\n\tif (isExclusive) json.oneOf = options;\n\telse json.anyOf = options;\n};\nconst intersectionProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tconst a = process$1(def.left, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\t\"allOf\",\n\t\t\t0\n\t\t]\n\t});\n\tconst b = process$1(def.right, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\t\"allOf\",\n\t\t\t1\n\t\t]\n\t});\n\tconst isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n\tjson.allOf = [...isSimpleIntersection(a) ? a.allOf : [a], ...isSimpleIntersection(b) ? b.allOf : [b]];\n};\nconst tupleProcessor = (schema, ctx, _json, params) => {\n\tconst json = _json;\n\tconst def = schema._zod.def;\n\tjson.type = \"array\";\n\tconst prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n\tconst restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n\tconst prefixItems = def.items.map((x, i) => process$1(x, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\tprefixPath,\n\t\t\ti\n\t\t]\n\t}));\n\tconst rest = def.rest ? process$1(def.rest, ctx, {\n\t\t...params,\n\t\tpath: [\n\t\t\t...params.path,\n\t\t\trestPath,\n\t\t\t...ctx.target === \"openapi-3.0\" ? [def.items.length] : []\n\t\t]\n\t}) : null;\n\tif (ctx.target === \"draft-2020-12\") {\n\t\tjson.prefixItems = prefixItems;\n\t\tif (rest) json.items = rest;\n\t} else if (ctx.target === \"openapi-3.0\") {\n\t\tjson.items = { anyOf: prefixItems };\n\t\tif (rest) json.items.anyOf.push(rest);\n\t\tjson.minItems = prefixItems.length;\n\t\tif (!rest) json.maxItems = prefixItems.length;\n\t} else {\n\t\tjson.items = prefixItems;\n\t\tif (rest) json.additionalItems = rest;\n\t}\n\tconst { minimum, maximum } = schema._zod.bag;\n\tif (typeof minimum === \"number\") json.minItems = minimum;\n\tif (typeof maximum === \"number\") json.maxItems = maximum;\n};\nconst recordProcessor = (schema, ctx, _json, params) => {\n\tconst json = _json;\n\tconst def = schema._zod.def;\n\tjson.type = \"object\";\n\tconst keyType = def.keyType;\n\tconst patterns = keyType._zod.bag?.patterns;\n\tif (def.mode === \"loose\" && patterns && patterns.size > 0) {\n\t\tconst valueSchema = process$1(def.valueType, ctx, {\n\t\t\t...params,\n\t\t\tpath: [\n\t\t\t\t...params.path,\n\t\t\t\t\"patternProperties\",\n\t\t\t\t\"*\"\n\t\t\t]\n\t\t});\n\t\tjson.patternProperties = {};\n\t\tfor (const pattern of patterns) json.patternProperties[pattern.source] = valueSchema;\n\t} else {\n\t\tif (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") json.propertyNames = process$1(def.keyType, ctx, {\n\t\t\t...params,\n\t\t\tpath: [...params.path, \"propertyNames\"]\n\t\t});\n\t\tjson.additionalProperties = process$1(def.valueType, ctx, {\n\t\t\t...params,\n\t\t\tpath: [...params.path, \"additionalProperties\"]\n\t\t});\n\t}\n\tconst keyValues = keyType._zod.values;\n\tif (keyValues) {\n\t\tconst validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n\t\tif (validKeyValues.length > 0) json.required = validKeyValues;\n\t}\n};\nconst nullableProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tconst inner = process$1(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tif (ctx.target === \"openapi-3.0\") {\n\t\tseen.ref = def.innerType;\n\t\tjson.nullable = true;\n\t} else json.anyOf = [inner, { type: \"null\" }];\n};\nconst nonoptionalProcessor = (schema, ctx, _json, params) => {\n\tconst def = schema._zod.def;\n\tprocess$1(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n};\nconst defaultProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tprocess$1(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n\tjson.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nconst prefaultProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tprocess$1(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n\tif (ctx.io === \"input\") json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nconst catchProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tprocess$1(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n\tlet catchValue;\n\ttry {\n\t\tcatchValue = def.catchValue(void 0);\n\t} catch {\n\t\tthrow new Error(\"Dynamic catch values are not supported in JSON Schema\");\n\t}\n\tjson.default = catchValue;\n};\nconst pipeProcessor = (schema, ctx, _json, params) => {\n\tconst def = schema._zod.def;\n\tconst innerType = ctx.io === \"input\" ? def.in._zod.def.type === \"transform\" ? def.out : def.in : def.out;\n\tprocess$1(innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = innerType;\n};\nconst readonlyProcessor = (schema, ctx, json, params) => {\n\tconst def = schema._zod.def;\n\tprocess$1(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n\tjson.readOnly = true;\n};\nconst optionalProcessor = (schema, ctx, _json, params) => {\n\tconst def = schema._zod.def;\n\tprocess$1(def.innerType, ctx, params);\n\tconst seen = ctx.seen.get(schema);\n\tseen.ref = def.innerType;\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js\nconst ZodISODateTime = /* @__PURE__ */ $constructor(\"ZodISODateTime\", (inst, def) => {\n\t$ZodISODateTime.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nfunction datetime(params) {\n\treturn _isoDateTime(ZodISODateTime, params);\n}\nconst ZodISODate = /* @__PURE__ */ $constructor(\"ZodISODate\", (inst, def) => {\n\t$ZodISODate.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nfunction date(params) {\n\treturn _isoDate(ZodISODate, params);\n}\nconst ZodISOTime = /* @__PURE__ */ $constructor(\"ZodISOTime\", (inst, def) => {\n\t$ZodISOTime.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nfunction time(params) {\n\treturn _isoTime(ZodISOTime, params);\n}\nconst ZodISODuration = /* @__PURE__ */ $constructor(\"ZodISODuration\", (inst, def) => {\n\t$ZodISODuration.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nfunction duration(params) {\n\treturn _isoDuration(ZodISODuration, params);\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js\nconst initializer = (inst, issues) => {\n\t$ZodError.init(inst, issues);\n\tinst.name = \"ZodError\";\n\tObject.defineProperties(inst, {\n\t\tformat: { value: (mapper) => formatError(inst, mapper) },\n\t\tflatten: { value: (mapper) => flattenError(inst, mapper) },\n\t\taddIssue: { value: (issue$1) => {\n\t\t\tinst.issues.push(issue$1);\n\t\t\tinst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2);\n\t\t} },\n\t\taddIssues: { value: (issues$1) => {\n\t\t\tinst.issues.push(...issues$1);\n\t\t\tinst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2);\n\t\t} },\n\t\tisEmpty: { get() {\n\t\t\treturn inst.issues.length === 0;\n\t\t} }\n\t});\n};\nconst ZodError = $constructor(\"ZodError\", initializer);\nconst ZodRealError = $constructor(\"ZodError\", initializer, { Parent: Error });\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js\nconst parse = /* @__PURE__ */ _parse(ZodRealError);\nconst parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);\nconst safeParse = /* @__PURE__ */ _safeParse(ZodRealError);\nconst safeParseAsync = /* @__PURE__ */ _safeParseAsync(ZodRealError);\nconst encode = /* @__PURE__ */ _encode(ZodRealError);\nconst decode = /* @__PURE__ */ _decode(ZodRealError);\nconst encodeAsync = /* @__PURE__ */ _encodeAsync(ZodRealError);\nconst decodeAsync = /* @__PURE__ */ _decodeAsync(ZodRealError);\nconst safeEncode = /* @__PURE__ */ _safeEncode(ZodRealError);\nconst safeDecode = /* @__PURE__ */ _safeDecode(ZodRealError);\nconst safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);\nconst safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);\n\n//#endregion\n//#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js\nconst ZodType = /* @__PURE__ */ $constructor(\"ZodType\", (inst, def) => {\n\t$ZodType.init(inst, def);\n\tObject.assign(inst[\"~standard\"], { jsonSchema: {\n\t\tinput: createStandardJSONSchemaMethod(inst, \"input\"),\n\t\toutput: createStandardJSONSchemaMethod(inst, \"output\")\n\t} });\n\tinst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n\tinst.def = def;\n\tinst.type = def.type;\n\tObject.defineProperty(inst, \"_def\", { value: def });\n\tinst.check = (...checks) => {\n\t\treturn inst.clone(mergeDefs(def, { checks: [...def.checks ?? [], ...checks.map((ch) => typeof ch === \"function\" ? { _zod: {\n\t\t\tcheck: ch,\n\t\t\tdef: { check: \"custom\" },\n\t\t\tonattach: []\n\t\t} } : ch)] }), { parent: true });\n\t};\n\tinst.with = inst.check;\n\tinst.clone = (def$1, params) => clone(inst, def$1, params);\n\tinst.brand = () => inst;\n\tinst.register = ((reg, meta$2) => {\n\t\treg.add(inst, meta$2);\n\t\treturn inst;\n\t});\n\tinst.parse = (data, params) => parse(inst, data, params, { callee: inst.parse });\n\tinst.safeParse = (data, params) => safeParse(inst, data, params);\n\tinst.parseAsync = async (data, params) => parseAsync(inst, data, params, { callee: inst.parseAsync });\n\tinst.safeParseAsync = async (data, params) => safeParseAsync(inst, data, params);\n\tinst.spa = inst.safeParseAsync;\n\tinst.encode = (data, params) => encode(inst, data, params);\n\tinst.decode = (data, params) => decode(inst, data, params);\n\tinst.encodeAsync = async (data, params) => encodeAsync(inst, data, params);\n\tinst.decodeAsync = async (data, params) => decodeAsync(inst, data, params);\n\tinst.safeEncode = (data, params) => safeEncode(inst, data, params);\n\tinst.safeDecode = (data, params) => safeDecode(inst, data, params);\n\tinst.safeEncodeAsync = async (data, params) => safeEncodeAsync(inst, data, params);\n\tinst.safeDecodeAsync = async (data, params) => safeDecodeAsync(inst, data, params);\n\tinst.refine = (check, params) => inst.check(refine(check, params));\n\tinst.superRefine = (refinement) => inst.check(superRefine(refinement));\n\tinst.overwrite = (fn) => inst.check(_overwrite(fn));\n\tinst.optional = () => optional(inst);\n\tinst.exactOptional = () => exactOptional(inst);\n\tinst.nullable = () => nullable(inst);\n\tinst.nullish = () => optional(nullable(inst));\n\tinst.nonoptional = (params) => nonoptional(inst, params);\n\tinst.array = () => array(inst);\n\tinst.or = (arg) => union([inst, arg]);\n\tinst.and = (arg) => intersection(inst, arg);\n\tinst.transform = (tx) => pipe(inst, transform(tx));\n\tinst.default = (def$1) => _default(inst, def$1);\n\tinst.prefault = (def$1) => prefault(inst, def$1);\n\tinst.catch = (params) => _catch(inst, params);\n\tinst.pipe = (target) => pipe(inst, target);\n\tinst.readonly = () => readonly(inst);\n\tinst.describe = (description) => {\n\t\tconst cl = inst.clone();\n\t\tglobalRegistry.add(cl, { description });\n\t\treturn cl;\n\t};\n\tObject.defineProperty(inst, \"description\", {\n\t\tget() {\n\t\t\treturn globalRegistry.get(inst)?.description;\n\t\t},\n\t\tconfigurable: true\n\t});\n\tinst.meta = (...args) => {\n\t\tif (args.length === 0) return globalRegistry.get(inst);\n\t\tconst cl = inst.clone();\n\t\tglobalRegistry.add(cl, args[0]);\n\t\treturn cl;\n\t};\n\tinst.isOptional = () => inst.safeParse(void 0).success;\n\tinst.isNullable = () => inst.safeParse(null).success;\n\tinst.apply = (fn) => fn(inst);\n\treturn inst;\n});\n/** @internal */\nconst _ZodString = /* @__PURE__ */ $constructor(\"_ZodString\", (inst, def) => {\n\t$ZodString.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => stringProcessor(inst, ctx, json, params);\n\tconst bag = inst._zod.bag;\n\tinst.format = bag.format ?? null;\n\tinst.minLength = bag.minimum ?? null;\n\tinst.maxLength = bag.maximum ?? null;\n\tinst.regex = (...args) => inst.check(_regex(...args));\n\tinst.includes = (...args) => inst.check(_includes(...args));\n\tinst.startsWith = (...args) => inst.check(_startsWith(...args));\n\tinst.endsWith = (...args) => inst.check(_endsWith(...args));\n\tinst.min = (...args) => inst.check(_minLength(...args));\n\tinst.max = (...args) => inst.check(_maxLength(...args));\n\tinst.length = (...args) => inst.check(_length(...args));\n\tinst.nonempty = (...args) => inst.check(_minLength(1, ...args));\n\tinst.lowercase = (params) => inst.check(_lowercase(params));\n\tinst.uppercase = (params) => inst.check(_uppercase(params));\n\tinst.trim = () => inst.check(_trim());\n\tinst.normalize = (...args) => inst.check(_normalize(...args));\n\tinst.toLowerCase = () => inst.check(_toLowerCase());\n\tinst.toUpperCase = () => inst.check(_toUpperCase());\n\tinst.slugify = () => inst.check(_slugify());\n});\nconst ZodString = /* @__PURE__ */ $constructor(\"ZodString\", (inst, def) => {\n\t$ZodString.init(inst, def);\n\t_ZodString.init(inst, def);\n\tinst.email = (params) => inst.check(_email(ZodEmail, params));\n\tinst.url = (params) => inst.check(_url(ZodURL, params));\n\tinst.jwt = (params) => inst.check(_jwt(ZodJWT, params));\n\tinst.emoji = (params) => inst.check(_emoji(ZodEmoji, params));\n\tinst.guid = (params) => inst.check(_guid(ZodGUID, params));\n\tinst.uuid = (params) => inst.check(_uuid(ZodUUID, params));\n\tinst.uuidv4 = (params) => inst.check(_uuidv4(ZodUUID, params));\n\tinst.uuidv6 = (params) => inst.check(_uuidv6(ZodUUID, params));\n\tinst.uuidv7 = (params) => inst.check(_uuidv7(ZodUUID, params));\n\tinst.nanoid = (params) => inst.check(_nanoid(ZodNanoID, params));\n\tinst.guid = (params) => inst.check(_guid(ZodGUID, params));\n\tinst.cuid = (params) => inst.check(_cuid(ZodCUID, params));\n\tinst.cuid2 = (params) => inst.check(_cuid2(ZodCUID2, params));\n\tinst.ulid = (params) => inst.check(_ulid(ZodULID, params));\n\tinst.base64 = (params) => inst.check(_base64(ZodBase64, params));\n\tinst.base64url = (params) => inst.check(_base64url(ZodBase64URL, params));\n\tinst.xid = (params) => inst.check(_xid(ZodXID, params));\n\tinst.ksuid = (params) => inst.check(_ksuid(ZodKSUID, params));\n\tinst.ipv4 = (params) => inst.check(_ipv4(ZodIPv4, params));\n\tinst.ipv6 = (params) => inst.check(_ipv6(ZodIPv6, params));\n\tinst.cidrv4 = (params) => inst.check(_cidrv4(ZodCIDRv4, params));\n\tinst.cidrv6 = (params) => inst.check(_cidrv6(ZodCIDRv6, params));\n\tinst.e164 = (params) => inst.check(_e164(ZodE164, params));\n\tinst.datetime = (params) => inst.check(datetime(params));\n\tinst.date = (params) => inst.check(date(params));\n\tinst.time = (params) => inst.check(time(params));\n\tinst.duration = (params) => inst.check(duration(params));\n});\nfunction string(params) {\n\treturn _string(ZodString, params);\n}\nconst ZodStringFormat = /* @__PURE__ */ $constructor(\"ZodStringFormat\", (inst, def) => {\n\t$ZodStringFormat.init(inst, def);\n\t_ZodString.init(inst, def);\n});\nconst ZodEmail = /* @__PURE__ */ $constructor(\"ZodEmail\", (inst, def) => {\n\t$ZodEmail.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodGUID = /* @__PURE__ */ $constructor(\"ZodGUID\", (inst, def) => {\n\t$ZodGUID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodUUID = /* @__PURE__ */ $constructor(\"ZodUUID\", (inst, def) => {\n\t$ZodUUID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodURL = /* @__PURE__ */ $constructor(\"ZodURL\", (inst, def) => {\n\t$ZodURL.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodEmoji = /* @__PURE__ */ $constructor(\"ZodEmoji\", (inst, def) => {\n\t$ZodEmoji.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodNanoID = /* @__PURE__ */ $constructor(\"ZodNanoID\", (inst, def) => {\n\t$ZodNanoID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodCUID = /* @__PURE__ */ $constructor(\"ZodCUID\", (inst, def) => {\n\t$ZodCUID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodCUID2 = /* @__PURE__ */ $constructor(\"ZodCUID2\", (inst, def) => {\n\t$ZodCUID2.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodULID = /* @__PURE__ */ $constructor(\"ZodULID\", (inst, def) => {\n\t$ZodULID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodXID = /* @__PURE__ */ $constructor(\"ZodXID\", (inst, def) => {\n\t$ZodXID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodKSUID = /* @__PURE__ */ $constructor(\"ZodKSUID\", (inst, def) => {\n\t$ZodKSUID.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodIPv4 = /* @__PURE__ */ $constructor(\"ZodIPv4\", (inst, def) => {\n\t$ZodIPv4.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodIPv6 = /* @__PURE__ */ $constructor(\"ZodIPv6\", (inst, def) => {\n\t$ZodIPv6.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodCIDRv4 = /* @__PURE__ */ $constructor(\"ZodCIDRv4\", (inst, def) => {\n\t$ZodCIDRv4.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodCIDRv6 = /* @__PURE__ */ $constructor(\"ZodCIDRv6\", (inst, def) => {\n\t$ZodCIDRv6.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodBase64 = /* @__PURE__ */ $constructor(\"ZodBase64\", (inst, def) => {\n\t$ZodBase64.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodBase64URL = /* @__PURE__ */ $constructor(\"ZodBase64URL\", (inst, def) => {\n\t$ZodBase64URL.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodE164 = /* @__PURE__ */ $constructor(\"ZodE164\", (inst, def) => {\n\t$ZodE164.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodJWT = /* @__PURE__ */ $constructor(\"ZodJWT\", (inst, def) => {\n\t$ZodJWT.init(inst, def);\n\tZodStringFormat.init(inst, def);\n});\nconst ZodNumber = /* @__PURE__ */ $constructor(\"ZodNumber\", (inst, def) => {\n\t$ZodNumber.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => numberProcessor(inst, ctx, json, params);\n\tinst.gt = (value, params) => inst.check(_gt(value, params));\n\tinst.gte = (value, params) => inst.check(_gte(value, params));\n\tinst.min = (value, params) => inst.check(_gte(value, params));\n\tinst.lt = (value, params) => inst.check(_lt(value, params));\n\tinst.lte = (value, params) => inst.check(_lte(value, params));\n\tinst.max = (value, params) => inst.check(_lte(value, params));\n\tinst.int = (params) => inst.check(int(params));\n\tinst.safe = (params) => inst.check(int(params));\n\tinst.positive = (params) => inst.check(_gt(0, params));\n\tinst.nonnegative = (params) => inst.check(_gte(0, params));\n\tinst.negative = (params) => inst.check(_lt(0, params));\n\tinst.nonpositive = (params) => inst.check(_lte(0, params));\n\tinst.multipleOf = (value, params) => inst.check(_multipleOf(value, params));\n\tinst.step = (value, params) => inst.check(_multipleOf(value, params));\n\tinst.finite = () => inst;\n\tconst bag = inst._zod.bag;\n\tinst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n\tinst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n\tinst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? .5);\n\tinst.isFinite = true;\n\tinst.format = bag.format ?? null;\n});\nfunction number(params) {\n\treturn _number(ZodNumber, params);\n}\nconst ZodNumberFormat = /* @__PURE__ */ $constructor(\"ZodNumberFormat\", (inst, def) => {\n\t$ZodNumberFormat.init(inst, def);\n\tZodNumber.init(inst, def);\n});\nfunction int(params) {\n\treturn _int(ZodNumberFormat, params);\n}\nconst ZodBoolean = /* @__PURE__ */ $constructor(\"ZodBoolean\", (inst, def) => {\n\t$ZodBoolean.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => booleanProcessor(inst, ctx, json, params);\n});\nfunction boolean(params) {\n\treturn _boolean(ZodBoolean, params);\n}\nconst ZodUnknown = /* @__PURE__ */ $constructor(\"ZodUnknown\", (inst, def) => {\n\t$ZodUnknown.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => unknownProcessor(inst, ctx, json, params);\n});\nfunction unknown() {\n\treturn _unknown(ZodUnknown);\n}\nconst ZodNever = /* @__PURE__ */ $constructor(\"ZodNever\", (inst, def) => {\n\t$ZodNever.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => neverProcessor(inst, ctx, json, params);\n});\nfunction never(params) {\n\treturn _never(ZodNever, params);\n}\nconst ZodArray = /* @__PURE__ */ $constructor(\"ZodArray\", (inst, def) => {\n\t$ZodArray.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => arrayProcessor(inst, ctx, json, params);\n\tinst.element = def.element;\n\tinst.min = (minLength, params) => inst.check(_minLength(minLength, params));\n\tinst.nonempty = (params) => inst.check(_minLength(1, params));\n\tinst.max = (maxLength, params) => inst.check(_maxLength(maxLength, params));\n\tinst.length = (len, params) => inst.check(_length(len, params));\n\tinst.unwrap = () => inst.element;\n});\nfunction array(element, params) {\n\treturn _array(ZodArray, element, params);\n}\nconst ZodObject = /* @__PURE__ */ $constructor(\"ZodObject\", (inst, def) => {\n\t$ZodObjectJIT.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => objectProcessor(inst, ctx, json, params);\n\tdefineLazy(inst, \"shape\", () => {\n\t\treturn def.shape;\n\t});\n\tinst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n\tinst.catchall = (catchall) => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall\n\t});\n\tinst.passthrough = () => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall: unknown()\n\t});\n\tinst.loose = () => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall: unknown()\n\t});\n\tinst.strict = () => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall: never()\n\t});\n\tinst.strip = () => inst.clone({\n\t\t...inst._zod.def,\n\t\tcatchall: void 0\n\t});\n\tinst.extend = (incoming) => {\n\t\treturn extend(inst, incoming);\n\t};\n\tinst.safeExtend = (incoming) => {\n\t\treturn safeExtend(inst, incoming);\n\t};\n\tinst.merge = (other) => merge(inst, other);\n\tinst.pick = (mask) => pick(inst, mask);\n\tinst.omit = (mask) => omit(inst, mask);\n\tinst.partial = (...args) => partial(ZodOptional, inst, args[0]);\n\tinst.required = (...args) => required(ZodNonOptional, inst, args[0]);\n});\nfunction object(shape, params) {\n\treturn new ZodObject({\n\t\ttype: \"object\",\n\t\tshape: shape ?? {},\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodUnion = /* @__PURE__ */ $constructor(\"ZodUnion\", (inst, def) => {\n\t$ZodUnion.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => unionProcessor(inst, ctx, json, params);\n\tinst.options = def.options;\n});\nfunction union(options, params) {\n\treturn new ZodUnion({\n\t\ttype: \"union\",\n\t\toptions,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodDiscriminatedUnion = /* @__PURE__ */ $constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n\tZodUnion.init(inst, def);\n\t$ZodDiscriminatedUnion.init(inst, def);\n});\nfunction discriminatedUnion(discriminator, options, params) {\n\treturn new ZodDiscriminatedUnion({\n\t\ttype: \"union\",\n\t\toptions,\n\t\tdiscriminator,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodIntersection = /* @__PURE__ */ $constructor(\"ZodIntersection\", (inst, def) => {\n\t$ZodIntersection.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => intersectionProcessor(inst, ctx, json, params);\n});\nfunction intersection(left, right) {\n\treturn new ZodIntersection({\n\t\ttype: \"intersection\",\n\t\tleft,\n\t\tright\n\t});\n}\nconst ZodTuple = /* @__PURE__ */ $constructor(\"ZodTuple\", (inst, def) => {\n\t$ZodTuple.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => tupleProcessor(inst, ctx, json, params);\n\tinst.rest = (rest) => inst.clone({\n\t\t...inst._zod.def,\n\t\trest\n\t});\n});\nfunction tuple(items, _paramsOrRest, _params) {\n\tconst hasRest = _paramsOrRest instanceof $ZodType;\n\tconst params = hasRest ? _params : _paramsOrRest;\n\treturn new ZodTuple({\n\t\ttype: \"tuple\",\n\t\titems,\n\t\trest: hasRest ? _paramsOrRest : null,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodRecord = /* @__PURE__ */ $constructor(\"ZodRecord\", (inst, def) => {\n\t$ZodRecord.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => recordProcessor(inst, ctx, json, params);\n\tinst.keyType = def.keyType;\n\tinst.valueType = def.valueType;\n});\nfunction record(keyType, valueType, params) {\n\treturn new ZodRecord({\n\t\ttype: \"record\",\n\t\tkeyType,\n\t\tvalueType,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodEnum = /* @__PURE__ */ $constructor(\"ZodEnum\", (inst, def) => {\n\t$ZodEnum.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => enumProcessor(inst, ctx, json, params);\n\tinst.enum = def.entries;\n\tinst.options = Object.values(def.entries);\n\tconst keys = new Set(Object.keys(def.entries));\n\tinst.extract = (values, params) => {\n\t\tconst newEntries = {};\n\t\tfor (const value of values) if (keys.has(value)) newEntries[value] = def.entries[value];\n\t\telse throw new Error(`Key ${value} not found in enum`);\n\t\treturn new ZodEnum({\n\t\t\t...def,\n\t\t\tchecks: [],\n\t\t\t...normalizeParams(params),\n\t\t\tentries: newEntries\n\t\t});\n\t};\n\tinst.exclude = (values, params) => {\n\t\tconst newEntries = { ...def.entries };\n\t\tfor (const value of values) if (keys.has(value)) delete newEntries[value];\n\t\telse throw new Error(`Key ${value} not found in enum`);\n\t\treturn new ZodEnum({\n\t\t\t...def,\n\t\t\tchecks: [],\n\t\t\t...normalizeParams(params),\n\t\t\tentries: newEntries\n\t\t});\n\t};\n});\nfunction _enum(values, params) {\n\treturn new ZodEnum({\n\t\ttype: \"enum\",\n\t\tentries: Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodLiteral = /* @__PURE__ */ $constructor(\"ZodLiteral\", (inst, def) => {\n\t$ZodLiteral.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => literalProcessor(inst, ctx, json, params);\n\tinst.values = new Set(def.values);\n\tObject.defineProperty(inst, \"value\", { get() {\n\t\tif (def.values.length > 1) throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n\t\treturn def.values[0];\n\t} });\n});\nfunction literal(value, params) {\n\treturn new ZodLiteral({\n\t\ttype: \"literal\",\n\t\tvalues: Array.isArray(value) ? value : [value],\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodTransform = /* @__PURE__ */ $constructor(\"ZodTransform\", (inst, def) => {\n\t$ZodTransform.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => transformProcessor(inst, ctx, json, params);\n\tinst._zod.parse = (payload, _ctx) => {\n\t\tif (_ctx.direction === \"backward\") throw new $ZodEncodeError(inst.constructor.name);\n\t\tpayload.addIssue = (issue$1) => {\n\t\t\tif (typeof issue$1 === \"string\") payload.issues.push(issue(issue$1, payload.value, def));\n\t\t\telse {\n\t\t\t\tconst _issue = issue$1;\n\t\t\t\tif (_issue.fatal) _issue.continue = false;\n\t\t\t\t_issue.code ?? (_issue.code = \"custom\");\n\t\t\t\t_issue.input ?? (_issue.input = payload.value);\n\t\t\t\t_issue.inst ?? (_issue.inst = inst);\n\t\t\t\tpayload.issues.push(issue(_issue));\n\t\t\t}\n\t\t};\n\t\tconst output = def.transform(payload.value, payload);\n\t\tif (output instanceof Promise) return output.then((output$1) => {\n\t\t\tpayload.value = output$1;\n\t\t\treturn payload;\n\t\t});\n\t\tpayload.value = output;\n\t\treturn payload;\n\t};\n});\nfunction transform(fn) {\n\treturn new ZodTransform({\n\t\ttype: \"transform\",\n\t\ttransform: fn\n\t});\n}\nconst ZodOptional = /* @__PURE__ */ $constructor(\"ZodOptional\", (inst, def) => {\n\t$ZodOptional.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction optional(innerType) {\n\treturn new ZodOptional({\n\t\ttype: \"optional\",\n\t\tinnerType\n\t});\n}\nconst ZodExactOptional = /* @__PURE__ */ $constructor(\"ZodExactOptional\", (inst, def) => {\n\t$ZodExactOptional.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction exactOptional(innerType) {\n\treturn new ZodExactOptional({\n\t\ttype: \"optional\",\n\t\tinnerType\n\t});\n}\nconst ZodNullable = /* @__PURE__ */ $constructor(\"ZodNullable\", (inst, def) => {\n\t$ZodNullable.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => nullableProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction nullable(innerType) {\n\treturn new ZodNullable({\n\t\ttype: \"nullable\",\n\t\tinnerType\n\t});\n}\nconst ZodDefault = /* @__PURE__ */ $constructor(\"ZodDefault\", (inst, def) => {\n\t$ZodDefault.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => defaultProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n\tinst.removeDefault = inst.unwrap;\n});\nfunction _default(innerType, defaultValue) {\n\treturn new ZodDefault({\n\t\ttype: \"default\",\n\t\tinnerType,\n\t\tget defaultValue() {\n\t\t\treturn typeof defaultValue === \"function\" ? defaultValue() : shallowClone(defaultValue);\n\t\t}\n\t});\n}\nconst ZodPrefault = /* @__PURE__ */ $constructor(\"ZodPrefault\", (inst, def) => {\n\t$ZodPrefault.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => prefaultProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction prefault(innerType, defaultValue) {\n\treturn new ZodPrefault({\n\t\ttype: \"prefault\",\n\t\tinnerType,\n\t\tget defaultValue() {\n\t\t\treturn typeof defaultValue === \"function\" ? defaultValue() : shallowClone(defaultValue);\n\t\t}\n\t});\n}\nconst ZodNonOptional = /* @__PURE__ */ $constructor(\"ZodNonOptional\", (inst, def) => {\n\t$ZodNonOptional.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => nonoptionalProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction nonoptional(innerType, params) {\n\treturn new ZodNonOptional({\n\t\ttype: \"nonoptional\",\n\t\tinnerType,\n\t\t...normalizeParams(params)\n\t});\n}\nconst ZodCatch = /* @__PURE__ */ $constructor(\"ZodCatch\", (inst, def) => {\n\t$ZodCatch.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => catchProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n\tinst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n\treturn new ZodCatch({\n\t\ttype: \"catch\",\n\t\tinnerType,\n\t\tcatchValue: typeof catchValue === \"function\" ? catchValue : () => catchValue\n\t});\n}\nconst ZodPipe = /* @__PURE__ */ $constructor(\"ZodPipe\", (inst, def) => {\n\t$ZodPipe.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => pipeProcessor(inst, ctx, json, params);\n\tinst.in = def.in;\n\tinst.out = def.out;\n});\nfunction pipe(in_, out) {\n\treturn new ZodPipe({\n\t\ttype: \"pipe\",\n\t\tin: in_,\n\t\tout\n\t});\n}\nconst ZodReadonly = /* @__PURE__ */ $constructor(\"ZodReadonly\", (inst, def) => {\n\t$ZodReadonly.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => readonlyProcessor(inst, ctx, json, params);\n\tinst.unwrap = () => inst._zod.def.innerType;\n});\nfunction readonly(innerType) {\n\treturn new ZodReadonly({\n\t\ttype: \"readonly\",\n\t\tinnerType\n\t});\n}\nconst ZodCustom = /* @__PURE__ */ $constructor(\"ZodCustom\", (inst, def) => {\n\t$ZodCustom.init(inst, def);\n\tZodType.init(inst, def);\n\tinst._zod.processJSONSchema = (ctx, json, params) => customProcessor(inst, ctx, json, params);\n});\nfunction refine(fn, _params = {}) {\n\treturn _refine(ZodCustom, fn, _params);\n}\nfunction superRefine(fn) {\n\treturn _superRefine(fn);\n}\nconst describe = describe$1;\nconst meta = meta$1;\n\n//#endregion\n//#region src/text-animations/advanced-types.ts\n/**\n* @file packages/webgpu-renderers/src/text-animations/advanced-types.ts\n* Data contracts and Zod schemas for Advanced Motion Design & After Effects Extended Typography Engine.\n*/\nconst AnchorGroupingSchema = _enum([\n\t\"character\",\n\t\"word\",\n\t\"line\",\n\t\"all\"\n]);\nconst AnchorPresetSchema = _enum([\n\t\"center\",\n\t\"baseline\",\n\t\"bottom_left\",\n\t\"bottom_center\",\n\t\"bottom_right\",\n\t\"top_left\",\n\t\"top_center\",\n\t\"top_right\",\n\t\"custom\"\n]);\nconst TextAnchorConfigSchema = object({\n\tgrouping: AnchorGroupingSchema.default(\"character\"),\n\tpreset: AnchorPresetSchema.default(\"center\"),\n\tanchorX: number().default(.5),\n\tanchorY: number().default(.5),\n\toffsetX: number().default(0),\n\toffsetY: number().default(0)\n});\nconst SkewPropertiesSchema = object({\n\tskew: number().min(-90).max(90),\n\tskewAxis: number().default(0)\n});\nconst LineSpacingDynamicsSchema = object({\n\tlineSpacing: number(),\n\tlineAnchor: number().min(0).max(1).default(0)\n});\nconst VolumetricFormationModeSchema = _enum([\n\t\"planar\",\n\t\"vortex\",\n\t\"cylinder\",\n\t\"helix\"\n]);\nconst VolumetricFormationConfigSchema = object({\n\tmode: VolumetricFormationModeSchema.default(\"planar\"),\n\tradius: number().default(300),\n\tpitch: number().default(120),\n\ttotalAngle: number().default(360),\n\taxis: _enum([\n\t\t\"x\",\n\t\t\"y\",\n\t\t\"z\"\n\t]).default(\"y\"),\n\tperspective: number().positive().default(1200)\n});\nconst Spatial3DPropertiesSchema = object({\n\ttranslateZ: number().optional(),\n\trotationX: number().optional(),\n\trotationY: number().optional(),\n\trotationZ: number().optional(),\n\tformation: VolumetricFormationConfigSchema.optional()\n});\nconst SpringPhysicsSchema = object({\n\tstiffness: number().positive().default(180),\n\tdamping: number().positive().default(12),\n\tmass: number().positive().default(1),\n\tinitialVelocity: number().default(0),\n\tovershootMultiplier: number().min(.5).max(3).default(1)\n});\nconst ExpressionSelectorSchema = object({\n\ttype: literal(\"expression\"),\n\tname: string().optional(),\n\texpression: string(),\n\tmode: _enum([\n\t\t\"add\",\n\t\t\"subtract\",\n\t\t\"intersect\",\n\t\t\"min\",\n\t\t\"max\",\n\t\t\"difference\"\n\t]).default(\"add\"),\n\tamount: number().default(1)\n});\nconst DynamicStrokePropertiesSchema = object({\n\tstrokeWidth: number().min(0).default(0),\n\tstrokeColor: string().default(\"#ffffff\"),\n\tstrokeAlign: _enum([\n\t\t\"center\",\n\t\t\"inside\",\n\t\t\"outside\"\n\t]).default(\"center\"),\n\tfillOpacity: number().min(0).max(1).default(1),\n\tdashArray: tuple([number(), number()]).optional(),\n\tdashOffset: number().default(0)\n});\nconst KineticMarqueeConfigSchema = object({\n\tdirection: _enum([\n\t\t\"left\",\n\t\t\"right\",\n\t\t\"up\",\n\t\t\"down\"\n\t]).default(\"left\"),\n\tvelocity: number().default(120),\n\tloop: boolean().default(true),\n\trepeatGap: number().default(80),\n\tsnap: object({\n\t\tenabled: boolean().default(false),\n\t\tgranularity: _enum([\n\t\t\t\"character\",\n\t\t\t\"word\",\n\t\t\t\"line\"\n\t\t]).default(\"word\"),\n\t\tstopIndex: number().default(0),\n\t\tdecelEase: string().default(\"cubic.out\")\n\t}).optional()\n});\nconst VariableFontAxesSchema = object({\n\tweight: number().min(100).max(1e3).optional(),\n\twidth: number().min(50).max(200).optional(),\n\tslant: number().min(-25).max(25).optional(),\n\titalic: number().min(0).max(1).optional(),\n\topticalSize: number().min(6).max(144).optional()\n});\nconst ChromaticGlitchConfigSchema = object({\n\tredShiftX: number().default(0),\n\tredShiftY: number().default(0),\n\tblueShiftX: number().default(0),\n\tblueShiftY: number().default(0),\n\tsliceProbability: number().min(0).max(1).default(0),\n\tsliceAmplitude: number().default(0)\n});\nconst AudioSpectrumTypographySchema = object({\n\tsignalChannel: string(),\n\tminFreqHz: number().default(60),\n\tmaxFreqHz: number().default(16e3),\n\tscaleAxis: _enum([\n\t\t\"scaleY\",\n\t\t\"scaleX\",\n\t\t\"scale\",\n\t\t\"y\"\n\t]).default(\"scaleY\"),\n\tminScale: number().default(.2),\n\tmaxScale: number().default(2.5),\n\tpeakDecay: number().min(0).max(.99).default(.8)\n});\nconst LongShadowConfigSchema = object({\n\tangle: number().default(45),\n\tlength: number().min(0).default(0),\n\tcolor: string().default(\"#000000\"),\n\tstartOpacity: number().min(0).max(1).default(.8),\n\tendOpacity: number().min(0).max(1).default(0),\n\tsteps: number().int().min(4).max(64).default(16)\n});\nconst ParticleDissolveConfigSchema = object({\n\tprogress: number().min(0).max(1).default(0),\n\tdispersalAngle: number().default(90),\n\tmaxDisplacement: number().default(120),\n\tturbulence: number().default(.5),\n\tparticleSize: number().default(2)\n});\nconst ExtendedGlyphPropertiesSchema = object({\n\tx: number().optional(),\n\ty: number().optional(),\n\ttranslateZ: number().optional(),\n\tscale: number().optional(),\n\tscaleX: number().optional(),\n\tscaleY: number().optional(),\n\trotation: number().optional(),\n\trotationX: number().optional(),\n\trotationY: number().optional(),\n\trotationZ: number().optional(),\n\tformation: VolumetricFormationConfigSchema.optional(),\n\tskew: number().optional(),\n\tskewAxis: number().optional(),\n\ttracking: number().optional(),\n\tlineSpacing: number().optional(),\n\tlineAnchor: number().optional(),\n\tanchor: TextAnchorConfigSchema.optional(),\n\topacity: number().optional(),\n\tblur: number().optional(),\n\tfillColor: string().optional(),\n\tstroke: DynamicStrokePropertiesSchema.optional(),\n\tvariableAxes: VariableFontAxesSchema.optional(),\n\tchromaticGlitch: ChromaticGlitchConfigSchema.optional(),\n\tlongShadow: LongShadowConfigSchema.optional(),\n\tparticleDissolve: ParticleDissolveConfigSchema.optional(),\n\taudioSpectrum: AudioSpectrumTypographySchema.optional(),\n\tspring: SpringPhysicsSchema.optional()\n});\nconst AdvancedTextAnimatorSchema = object({\n\tname: string().default(\"AdvancedAnimator\"),\n\tselectors: array(record(string(), unknown())).default([]),\n\tprops: ExtendedGlyphPropertiesSchema\n});\n\n//#endregion\n//#region src/text-animations/types.ts\n/**\n* @file packages/webgpu-renderers/src/text-animations/types.ts\n* Data contracts and Zod schemas for After Effects Parity Text Animation Engine.\n*/\nconst Vec2Schema = object({\n\tx: number(),\n\ty: number()\n});\nconst CubicBezierSegmentSchema = object({\n\tp0: Vec2Schema,\n\tp1: Vec2Schema,\n\tp2: Vec2Schema,\n\tp3: Vec2Schema\n});\nconst TextPathSourceSchema = discriminatedUnion(\"type\", [\n\tobject({\n\t\ttype: literal(\"svg\"),\n\t\td: string().min(1, \"SVG path string cannot be empty\")\n\t}),\n\tobject({\n\t\ttype: literal(\"bezier\"),\n\t\tsegments: array(CubicBezierSegmentSchema).min(1)\n\t}),\n\tobject({\n\t\ttype: literal(\"ellipse\"),\n\t\tcx: number(),\n\t\tcy: number(),\n\t\trx: number().positive(),\n\t\try: number().positive(),\n\t\tstartAngleDeg: number().default(0),\n\t\tendAngleDeg: number().default(360)\n\t}),\n\tobject({\n\t\ttype: literal(\"wave\"),\n\t\tstartX: number(),\n\t\tstartY: number(),\n\t\tlength: number().positive(),\n\t\tamplitude: number(),\n\t\tfrequency: number().positive(),\n\t\tphaseDeg: number().default(0)\n\t})\n]);\nconst TextPathOptionsSchema = object({\n\tpath: TextPathSourceSchema,\n\tfirstMargin: number().default(0),\n\tlastMargin: number().default(0),\n\treversePath: boolean().default(false),\n\tperpendicularToPath: boolean().default(true),\n\tforceAlignment: boolean().default(false),\n\tloop: boolean().default(false),\n\tbaselineOffset: _enum([\n\t\t\"baseline\",\n\t\t\"center\",\n\t\t\"ascender\",\n\t\t\"descender\"\n\t]).default(\"baseline\"),\n\tbaselineShift: number().default(0)\n});\nconst TextCursorStyleSchema = _enum([\n\t\"bar\",\n\t\"underscore\",\n\t\"block\",\n\t\"custom\"\n]);\nconst TextCursorConfigSchema = object({\n\tenabled: boolean().default(true),\n\tstyle: TextCursorStyleSchema.default(\"bar\"),\n\tcustomChar: string().default(\"|\"),\n\tcolor: string().optional(),\n\tblinkFrequency: number().min(0).default(2),\n\thideOnComplete: boolean().default(false),\n\twidth: number().positive().default(2.5),\n\tspacing: number().default(3)\n});\nconst TypingCadenceSchema = discriminatedUnion(\"mode\", [object({ mode: literal(\"constant\") }), object({\n\tmode: literal(\"human\"),\n\tjitter: number().min(0).max(1).default(.35),\n\tcommaPauseMultiplier: number().min(1).default(3),\n\tsentencePauseMultiplier: number().min(1).default(5.5),\n\tparagraphPauseMultiplier: number().min(1).default(7)\n})]);\nconst TextScrambleConfigSchema = object({\n\tenabled: boolean().default(false),\n\tcharset: _enum([\n\t\t\"ascii\",\n\t\t\"alphanumeric\",\n\t\t\"matrix\",\n\t\t\"binary\",\n\t\t\"hex\",\n\t\t\"custom\"\n\t]).default(\"alphanumeric\"),\n\tcustomCharset: string().optional(),\n\tscrambleFramesPerChar: number().int().min(1).default(8),\n\thighlightProbability: number().min(0).max(1).default(.25),\n\tscrambleColor: string().optional()\n});\nconst TypewriterAnimatorSchema = object({\n\tgranularity: _enum([\n\t\t\"character\",\n\t\t\"word\",\n\t\t\"line\"\n\t]).default(\"character\"),\n\tcursor: TextCursorConfigSchema.default({\n\t\tenabled: true,\n\t\tstyle: \"bar\",\n\t\tcustomChar: \"|\",\n\t\tblinkFrequency: 2,\n\t\thideOnComplete: false,\n\t\twidth: 2.5,\n\t\tspacing: 3\n\t}),\n\tcadence: TypingCadenceSchema.default({\n\t\tmode: \"human\",\n\t\tjitter: .35,\n\t\tcommaPauseMultiplier: 3,\n\t\tsentencePauseMultiplier: 5.5,\n\t\tparagraphPauseMultiplier: 7\n\t}),\n\tscramble: TextScrambleConfigSchema.default({\n\t\tenabled: false,\n\t\tcharset: \"alphanumeric\",\n\t\tscrambleFramesPerChar: 8,\n\t\thighlightProbability: .25\n\t}),\n\tsoundSync: boolean().default(false)\n});\nconst SelectorBasedOnSchema = _enum([\n\t\"characters\",\n\t\"characters_excluding_spaces\",\n\t\"words\",\n\t\"lines\"\n]);\nconst SelectorUnitsSchema = _enum([\"percentage\", \"index\"]);\nconst SelectorShapeSchema = _enum([\n\t\"square\",\n\t\"ramp_up\",\n\t\"ramp_down\",\n\t\"triangle\",\n\t\"round\",\n\t\"smooth\"\n]);\nconst SelectorModeSchema = _enum([\n\t\"add\",\n\t\"subtract\",\n\t\"intersect\",\n\t\"min\",\n\t\"max\",\n\t\"difference\"\n]);\nconst TextRangeSelectorSchema = object({\n\ttype: literal(\"range\"),\n\tstart: number().default(0),\n\tend: number().default(1),\n\toffset: number().default(0),\n\tunits: SelectorUnitsSchema.default(\"percentage\"),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tshape: SelectorShapeSchema.default(\"square\"),\n\tmode: SelectorModeSchema.default(\"add\"),\n\tamount: number().min(-1).max(1).default(1),\n\teaseHigh: number().min(-1).max(1).default(0),\n\teaseLow: number().min(-1).max(1).default(0),\n\trandomizeOrder: boolean().default(false),\n\trandomSeed: number().int().default(12345)\n});\nconst TextWigglySelectorSchema = object({\n\ttype: literal(\"wiggly\"),\n\twigglesPerSecond: number().positive().default(2),\n\tcorrelation: number().min(0).max(1).default(.5),\n\ttemporalPhaseDeg: number().default(0),\n\tspatialPhaseDeg: number().default(0),\n\tminAmount: number().min(-1).max(1).default(-1),\n\tmaxAmount: number().min(-1).max(1).default(1),\n\trandomSeed: number().int().default(42),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tmode: SelectorModeSchema.default(\"intersect\")\n});\nconst TextSignalSelectorSchema = object({\n\ttype: literal(\"signal\"),\n\tsignalId: string(),\n\tmultiplier: number().default(1),\n\toffset: number().default(0),\n\tphaseSpread: number().default(0),\n\tbasedOn: SelectorBasedOnSchema.default(\"characters\"),\n\tmode: SelectorModeSchema.default(\"add\")\n});\nconst TextSelectorSchema = discriminatedUnion(\"type\", [\n\tTextRangeSelectorSchema,\n\tTextWigglySelectorSchema,\n\tTextSignalSelectorSchema\n]);\nconst AnimatableGlyphPropsSchema = object({\n\tx: number().optional(),\n\ty: number().optional(),\n\tz: number().optional(),\n\tscale: number().optional(),\n\tscaleX: number().optional(),\n\tscaleY: number().optional(),\n\trotation: number().optional(),\n\trotationX: number().optional(),\n\trotationY: number().optional(),\n\tskew: number().optional(),\n\tskewAxis: number().optional(),\n\ttracking: number().optional(),\n\tlineSpacing: number().optional(),\n\topacity: number().min(0).max(1).optional(),\n\tfillColor: string().optional(),\n\tstrokeColor: string().optional(),\n\tstrokeWidth: number().min(0).optional(),\n\tblur: number().min(0).optional(),\n\tcharacterOffset: number().int().optional()\n});\nconst GlyphAnchorGroupingSchema = _enum([\n\t\"character\",\n\t\"word\",\n\t\"line\",\n\t\"all\"\n]);\nconst GlyphAnchorPointSchema = object({\n\tgrouping: GlyphAnchorGroupingSchema.default(\"character\"),\n\tanchorX: number().default(.5),\n\tanchorY: number().default(.8)\n});\nconst AETextAnimatorSchema = object({\n\tname: string().default(\"Animator\"),\n\tselectors: array(TextSelectorSchema).min(1),\n\tprops: AnimatableGlyphPropsSchema,\n\tanchor: GlyphAnchorPointSchema.default({\n\t\tgrouping: \"character\",\n\t\tanchorX: .5,\n\t\tanchorY: .8\n\t})\n});\nconst EnhancedTextNodeSchema = object({\n\ttext: string(),\n\tfontFamily: string().default(\"Inter\"),\n\tfontSize: number().positive().default(24),\n\tfontWeight: union([number(), string()]).default(400),\n\tfill: string().default(\"#ffffff\"),\n\tletterSpacing: number().default(0),\n\tlineHeight: number().positive().default(1.2),\n\ttextAlign: _enum([\n\t\t\"left\",\n\t\t\"center\",\n\t\t\"right\"\n\t]).default(\"left\"),\n\tpathOptions: TextPathOptionsSchema.optional(),\n\ttypewriter: TypewriterAnimatorSchema.optional(),\n\tanimators: array(AETextAnimatorSchema).default([])\n});\n\n//#endregion\n//#region src/text-animations/builder.ts\n/**\n* @file packages/webgpu-renderers/src/text-animations/builder.ts\n* Fluent builders for Path-Following Text and After Effects Text Animators.\n*/\n/**\n* Fluent builder for creating Path-Following Text configurations.\n*/\nvar TextPathBuilder = class TextPathBuilder {\n\toptions = {\n\t\tfirstMargin: 0,\n\t\tlastMargin: 0,\n\t\treversePath: false,\n\t\tperpendicularToPath: true,\n\t\tforceAlignment: false,\n\t\tloop: false,\n\t\tbaselineOffset: \"baseline\",\n\t\tbaselineShift: 0\n\t};\n\tstatic fromSvg(svgPath) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"svg\",\n\t\t\td: svgPath\n\t\t};\n\t\treturn builder;\n\t}\n\tstatic fromBezier(segments) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"bezier\",\n\t\t\tsegments\n\t\t};\n\t\treturn builder;\n\t}\n\tstatic fromCurve(curve) {\n\t\treturn TextPathBuilder.fromBezier([curve]);\n\t}\n\tstatic circularBadge(cx, cy, radius) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"ellipse\",\n\t\t\tcx,\n\t\t\tcy,\n\t\t\trx: radius,\n\t\t\try: radius,\n\t\t\tstartAngleDeg: 0,\n\t\t\tendAngleDeg: 360\n\t\t};\n\t\tbuilder.options.loop = true;\n\t\treturn builder;\n\t}\n\tstatic ellipse(cx, cy, rx, ry, startAngleDeg = 0, endAngleDeg = 360) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"ellipse\",\n\t\t\tcx,\n\t\t\tcy,\n\t\t\trx,\n\t\t\try,\n\t\t\tstartAngleDeg,\n\t\t\tendAngleDeg\n\t\t};\n\t\tbuilder.options.loop = Math.abs(endAngleDeg - startAngleDeg) >= 360;\n\t\treturn builder;\n\t}\n\tstatic wave(startX, startY, length, amplitude, frequency, phaseDeg = 0) {\n\t\tconst builder = new TextPathBuilder();\n\t\tbuilder.options.path = {\n\t\t\ttype: \"wave\",\n\t\t\tstartX,\n\t\t\tstartY,\n\t\t\tlength,\n\t\t\tamplitude,\n\t\t\tfrequency,\n\t\t\tphaseDeg\n\t\t};\n\t\treturn builder;\n\t}\n\tfirstMargin(margin) {\n\t\tthis.options.firstMargin = margin;\n\t\treturn this;\n\t}\n\tlastMargin(margin) {\n\t\tthis.options.lastMargin = margin;\n\t\treturn this;\n\t}\n\treversePath(reverse) {\n\t\tthis.options.reversePath = reverse;\n\t\treturn this;\n\t}\n\tperpendicularToPath(perpendicular) {\n\t\tthis.options.perpendicularToPath = perpendicular;\n\t\treturn this;\n\t}\n\tforceAlignment(force) {\n\t\tthis.options.forceAlignment = force;\n\t\treturn this;\n\t}\n\tloop(isLoop) {\n\t\tthis.options.loop = isLoop;\n\t\treturn this;\n\t}\n\tbaselineOffset(offset) {\n\t\tthis.options.baselineOffset = offset;\n\t\treturn this;\n\t}\n\tbaselineShift(shiftPixels) {\n\t\tthis.options.baselineShift = shiftPixels;\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn TextPathOptionsSchema.parse(this.options);\n\t}\n};\n/**\n* Fluent builder for After Effects Range, Wiggly, and Signal Animators.\n*/\nvar TextAnimatorBuilder = class TextAnimatorBuilder {\n\tname = \"Animator\";\n\tselectors = [];\n\tprops = {};\n\tanchor = {\n\t\tgrouping: \"character\",\n\t\tanchorX: .5,\n\t\tanchorY: .8\n\t};\n\tstatic create(name) {\n\t\tconst builder = new TextAnimatorBuilder();\n\t\tbuilder.name = name;\n\t\treturn builder;\n\t}\n\t/** Adds an After Effects Range Selector */\n\taddRangeSelector(config$1) {\n\t\tconst rawHigh = config$1.easeHigh ?? 0;\n\t\tconst easeHigh = Math.abs(rawHigh) > 1 ? rawHigh / 100 : rawHigh;\n\t\tconst rawLow = config$1.easeLow ?? 0;\n\t\tconst easeLow = Math.abs(rawLow) > 1 ? rawLow / 100 : rawLow;\n\t\tthis.selectors.push({\n\t\t\ttype: \"range\",\n\t\t\tstart: config$1.start ?? 0,\n\t\t\tend: config$1.end ?? 1,\n\t\t\toffset: config$1.offset ?? 0,\n\t\t\tunits: \"percentage\",\n\t\t\tbasedOn: config$1.basedOn ?? \"characters\",\n\t\t\tshape: config$1.shape ?? \"smooth\",\n\t\t\tmode: config$1.mode ?? \"add\",\n\t\t\tamount: 1,\n\t\t\teaseHigh: Math.max(-1, Math.min(1, easeHigh)),\n\t\t\teaseLow: Math.max(-1, Math.min(1, easeLow)),\n\t\t\trandomizeOrder: config$1.randomizeOrder ?? false,\n\t\t\trandomSeed: config$1.randomSeed ?? 12345\n\t\t});\n\t\treturn this;\n\t}\n\t/** Adds an After Effects Wiggly Selector for procedural organic flutter */\n\taddWigglySelector(config$1) {\n\t\tthis.selectors.push({\n\t\t\ttype: \"wiggly\",\n\t\t\twigglesPerSecond: config$1.wigglesPerSecond ?? 2,\n\t\t\tcorrelation: config$1.correlation ?? .5,\n\t\t\ttemporalPhaseDeg: 0,\n\t\t\tspatialPhaseDeg: 0,\n\t\t\tminAmount: config$1.minAmount ?? -1,\n\t\t\tmaxAmount: config$1.maxAmount ?? 1,\n\t\t\trandomSeed: config$1.randomSeed ?? 42,\n\t\t\tbasedOn: \"characters\",\n\t\t\tmode: config$1.mode ?? \"intersect\"\n\t\t});\n\t\treturn this;\n\t}\n\t/** Adds a reactive signal selector */\n\taddSignalSelector(signalId, multiplier = 1, phaseSpread = 0, offset = 0, mode = \"add\") {\n\t\tthis.selectors.push({\n\t\t\ttype: \"signal\",\n\t\t\tsignalId,\n\t\t\tmultiplier,\n\t\t\toffset,\n\t\t\tphaseSpread,\n\t\t\tbasedOn: \"characters\",\n\t\t\tmode\n\t\t});\n\t\treturn this;\n\t}\n\tx(pixels) {\n\t\tthis.props.x = pixels;\n\t\treturn this;\n\t}\n\ty(pixels) {\n\t\tthis.props.y = pixels;\n\t\treturn this;\n\t}\n\tz(pixels) {\n\t\tthis.props.z = pixels;\n\t\treturn this;\n\t}\n\tscale(scaleValue) {\n\t\tthis.props.scale = scaleValue;\n\t\treturn this;\n\t}\n\tscaleX(scaleValue) {\n\t\tthis.props.scaleX = scaleValue;\n\t\treturn this;\n\t}\n\tscaleY(scaleValue) {\n\t\tthis.props.scaleY = scaleValue;\n\t\treturn this;\n\t}\n\trotation(degrees) {\n\t\tthis.props.rotation = degrees;\n\t\treturn this;\n\t}\n\trotationX(degrees) {\n\t\tthis.props.rotationX = degrees;\n\t\treturn this;\n\t}\n\trotationY(degrees) {\n\t\tthis.props.rotationY = degrees;\n\t\treturn this;\n\t}\n\tskew(degrees) {\n\t\tthis.props.skew = degrees;\n\t\treturn this;\n\t}\n\tskewAxis(degrees) {\n\t\tthis.props.skewAxis = degrees;\n\t\treturn this;\n\t}\n\topacity(value) {\n\t\tthis.props.opacity = value;\n\t\treturn this;\n\t}\n\tblur(pixels) {\n\t\tthis.props.blur = pixels;\n\t\treturn this;\n\t}\n\tfill(colorHex) {\n\t\treturn this.fillColor(colorHex);\n\t}\n\tfillColor(colorHex) {\n\t\tthis.props.fillColor = colorHex;\n\t\treturn this;\n\t}\n\tstrokeColor(colorHex) {\n\t\tthis.props.strokeColor = colorHex;\n\t\treturn this;\n\t}\n\tstrokeWidth(pixels) {\n\t\tthis.props.strokeWidth = pixels;\n\t\treturn this;\n\t}\n\ttracking(spacingPixels) {\n\t\tthis.props.tracking = spacingPixels;\n\t\treturn this;\n\t}\n\tlineSpacing(spacingPixels) {\n\t\tthis.props.lineSpacing = spacingPixels;\n\t\treturn this;\n\t}\n\tcharacterOffset(offset) {\n\t\tthis.props.characterOffset = offset;\n\t\treturn this;\n\t}\n\tanchorGrouping(grouping, anchorX = .5, anchorY = .8) {\n\t\tthis.anchor = {\n\t\t\tgrouping,\n\t\t\tanchorX,\n\t\t\tanchorY\n\t\t};\n\t\treturn this;\n\t}\n\tbuild() {\n\t\treturn AETextAnimatorSchema.parse({\n\t\t\tname: this.name,\n\t\t\tselectors: this.selectors,\n\t\t\tprops: this.props,\n\t\t\tanchor: this.anchor\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/text-animations/math.ts\n/**\n* @file packages/webgpu-renderers/src/text-animations/math.ts\n* Mathematical formulations, closed-form physics, affine matrices, and evaluation algorithms.\n*/\n/**\n* Evaluates closed-form underdamped harmonic oscillator for spring physics:\n*\n* x(t) = target + (x0 - target) * exp(-zeta * omega_n * t) *\n* [ cos(omega_d * t) + (zeta / sqrt(1 - zeta^2)) * sin(omega_d * t) ]\n*\n* @param t Time in seconds since excitation\n* @param stiffness Spring stiffness (k)\n* @param damping Damping coefficient (c)\n* @param mass Mass of glyph (m)\n* @param initialVelocity Initial velocity (v0)\n* @returns Settled scalar progress in [0, 1] with overshoot\n*/\nfunction evaluateSpringProgress(t, stiffness = 180, damping = 12, mass = 1, initialVelocity = 0) {\n\tif (t <= 0) return 0;\n\tconst omega_n = Math.sqrt(Math.max(1e-4, stiffness) / Math.max(1e-4, mass));\n\tconst zeta = damping / (2 * Math.sqrt(Math.max(1e-4, stiffness * mass)));\n\tif (zeta < 1) {\n\t\tconst omega_d = omega_n * Math.sqrt(1 - zeta * zeta);\n\t\tconst decay = Math.exp(-zeta * omega_n * t);\n\t\tconst c1 = -1;\n\t\tconst c2 = (initialVelocity - zeta * omega_n * -1) / Math.max(1e-6, omega_d);\n\t\tconst displacement = decay * (c1 * Math.cos(omega_d * t) + c2 * Math.sin(omega_d * t));\n\t\treturn Math.min(2, Math.max(-1, 1 + displacement));\n\t} else if (Math.abs(zeta - 1) < 1e-4) {\n\t\tconst decay = Math.exp(-omega_n * t);\n\t\treturn 1 + (-1 + (initialVelocity - omega_n) * t) * decay;\n\t} else {\n\t\tconst s1 = -omega_n * (zeta - Math.sqrt(zeta * zeta - 1));\n\t\tconst s2 = -omega_n * (zeta + Math.sqrt(zeta * zeta - 1));\n\t\tconst c1 = (initialVelocity + s2) / Math.max(1e-6, s1 - s2);\n\t\tconst c2 = -1 - c1;\n\t\treturn 1 + (c1 * Math.exp(s1 * t) + c2 * Math.exp(s2 * t));\n\t}\n}\n/**\n* Evaluates 2D Directional Skew matrix components:\n*\n* S(theta, phi) = R(phi) * [ 1 tan(theta) ] * R(-phi)\n* [ 0 1 ]\n*\n* @param skewDeg Skew angle in degrees\n* @param skewAxisDeg Skew axis in degrees\n* @returns 2x2 affine shear matrix components [m00, m01, m10, m11]\n*/\nfunction evaluateSkewMatrix(skewDeg, skewAxisDeg = 0) {\n\tif (skewDeg === 0) return [\n\t\t1,\n\t\t0,\n\t\t0,\n\t\t1\n\t];\n\tconst theta = skewDeg * Math.PI / 180;\n\tconst phi = skewAxisDeg * Math.PI / 180;\n\tconst cosPhi = Math.cos(phi);\n\tconst sinPhi = Math.sin(phi);\n\tconst tanTheta = Math.tan(theta);\n\treturn [\n\t\t1 - tanTheta * cosPhi * sinPhi,\n\t\ttanTheta * cosPhi * cosPhi,\n\t\t-tanTheta * sinPhi * sinPhi,\n\t\t1 + tanTheta * sinPhi * cosPhi\n\t];\n}\n/**\n* Computes anchor pivot coordinates relative to glyph bounding box:\n*\n* @param bbox Glyph bounding box { width, height, ascender, descender }\n* @param config Text anchor configuration\n* @returns Pivot offset (px, py) relative to glyph quad center\n*/\nfunction computeAnchorPivotOffset(bbox, config$1) {\n\tlet normX = config$1.anchorX;\n\tlet normY = config$1.anchorY;\n\tswitch (config$1.preset) {\n\t\tcase \"center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = .5;\n\t\t\tbreak;\n\t\tcase \"baseline\":\n\t\t\tnormX = .5;\n\t\t\tnormY = bbox.height > 0 ? bbox.ascender / bbox.height : .8;\n\t\t\tbreak;\n\t\tcase \"bottom_left\":\n\t\t\tnormX = 0;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"bottom_center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"bottom_right\":\n\t\t\tnormX = 1;\n\t\t\tnormY = 1;\n\t\t\tbreak;\n\t\tcase \"top_left\":\n\t\t\tnormX = 0;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tcase \"top_center\":\n\t\t\tnormX = .5;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tcase \"top_right\":\n\t\t\tnormX = 1;\n\t\t\tnormY = 0;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tnormX = .5;\n\t\t\tnormY = .5;\n\t\t\tbreak;\n\t}\n\treturn {\n\t\tpx: (normX - .5) * bbox.width + config$1.offsetX,\n\t\tpy: (normY - .5) * bbox.height + config$1.offsetY\n\t};\n}\n/**\n* Computes leading displacement per line based on lineAnchor:\n*\n* @param lineIndex 0-based index of current line\n* @param lineCount Total lines in paragraph\n* @param lineSpacing Additional leading in pixels\n* @param lineAnchor Pivot line anchor in [0, 1]\n* @returns Y displacement in pixels\n*/\nfunction computeLineLeadingDisplacement(lineIndex, lineCount, lineSpacing, lineAnchor = 0) {\n\tif (lineSpacing === 0 || lineCount <= 1) return 0;\n\treturn (lineIndex - lineAnchor * (lineCount - 1)) * lineSpacing;\n}\n/**\n* Evaluates an Expression Selector formula safely in a sandboxed numeric scope.\n*\n* @param expression Formula string (e.g. \"Math.sin(time * 4 + textIndex * 0.2)\")\n* @param ctx Glyph evaluation context\n* @returns Numeric selector weight clamped to [-1, 1]\n*/\nfunction evaluateExpressionSelector(expression, ctx) {\n\ttry {\n\t\tconst scope = {\n\t\t\ttextIndex: ctx.charIndex,\n\t\t\ttextTotal: Math.max(1, ctx.totalChars),\n\t\t\twordIndex: ctx.wordIndex,\n\t\t\twordTotal: Math.max(1, ctx.totalWords),\n\t\t\tlineIndex: ctx.lineIndex,\n\t\t\tlineTotal: Math.max(1, ctx.totalLines),\n\t\t\ttime: ctx.time,\n\t\t\tframe: ctx.frame,\n\t\t\tfps: ctx.fps,\n\t\t\tsin: Math.sin,\n\t\t\tcos: Math.cos,\n\t\t\ttan: Math.tan,\n\t\t\texp: Math.exp,\n\t\t\tlog: Math.log,\n\t\t\tabs: Math.abs,\n\t\t\tmin: Math.min,\n\t\t\tmax: Math.max,\n\t\t\tsqrt: Math.sqrt,\n\t\t\tpow: Math.pow,\n\t\t\tfloor: Math.floor,\n\t\t\tceil: Math.ceil,\n\t\t\tround: Math.round,\n\t\t\tPI: Math.PI,\n\t\t\tclamp: (v, lo, hi) => Math.max(lo, Math.min(hi, v)),\n\t\t\tnoise: (seed) => {\n\t\t\t\tconst n = Math.sin(seed * 12.9898 + ctx.frame * .1) * 43758.5453;\n\t\t\t\treturn (n - Math.floor(n)) * 2 - 1;\n\t\t\t},\n\t\t\tsignals: ctx.signals ?? {}\n\t\t};\n\t\tconst keys = Object.keys(scope);\n\t\tconst values = Object.values(scope);\n\t\tconst fn = new Function(...keys, `return (${expression});`);\n\t\tconst result = Number(fn(...values));\n\t\treturn Number.isFinite(result) ? Math.max(-1, Math.min(1, result)) : 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n/**\n* Evaluates 3D Volumetric Formation parametric coordinates.\n*/\nfunction evaluateVolumetricFormation(glyphIndex, totalGlyphs, config$1) {\n\tconst n = Math.max(1, totalGlyphs);\n\tconst norm = n > 1 ? glyphIndex / (n - 1) : 0;\n\tconst totalAngleRad = config$1.totalAngle * Math.PI / 180;\n\tconst phi = norm * totalAngleRad;\n\tlet x = 0;\n\tlet y = 0;\n\tlet z = 0;\n\tlet rotX = 0;\n\tlet rotY = 0;\n\tlet rotZ = 0;\n\tlet depthOpacity = 1;\n\tswitch (config$1.mode) {\n\t\tcase \"cylinder\": {\n\t\t\tconst theta = config$1.totalAngle < 360 ? (norm - .5) * totalAngleRad : phi;\n\t\t\tif (config$1.axis === \"y\") {\n\t\t\t\tx = config$1.radius * Math.sin(theta);\n\t\t\t\tz = config$1.radius * Math.cos(theta) - config$1.radius;\n\t\t\t\trotY = theta * 180 / Math.PI;\n\t\t\t} else if (config$1.axis === \"x\") {\n\t\t\t\ty = config$1.radius * Math.sin(theta);\n\t\t\t\tz = config$1.radius * Math.cos(theta) - config$1.radius;\n\t\t\t\trotX = theta * 180 / Math.PI;\n\t\t\t} else {\n\t\t\t\tx = config$1.radius * Math.sin(theta);\n\t\t\t\ty = config$1.radius * Math.cos(theta);\n\t\t\t\trotZ = theta * 180 / Math.PI;\n\t\t\t}\n\t\t\tconst facing = Math.cos(theta);\n\t\t\tdepthOpacity = Math.max(.25, (facing + 1) * .5);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"vortex\": {\n\t\t\tconst spiralPhi = -Math.PI / 2 + phi;\n\t\t\tconst r = config$1.radius * (1 - norm * .35);\n\t\t\tx = r * Math.cos(spiralPhi);\n\t\t\ty = r * Math.sin(spiralPhi);\n\t\t\tz = -glyphIndex * config$1.pitch || 0;\n\t\t\tconst dr = -.35 * config$1.radius / (totalAngleRad || 1);\n\t\t\tconst dx = dr * Math.cos(spiralPhi) - r * Math.sin(spiralPhi);\n\t\t\tconst dy = dr * Math.sin(spiralPhi) + r * Math.cos(spiralPhi);\n\t\t\trotZ = Math.atan2(dy, dx) * 180 / Math.PI;\n\t\t\tdepthOpacity = Math.max(.65, 1 - norm * .35);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"helix\":\n\t\t\tif (config$1.axis === \"x\") {\n\t\t\t\tconst pitchX = config$1.pitch > 10 ? config$1.pitch : 28;\n\t\t\t\tx = (glyphIndex - (n - 1) / 2) * pitchX;\n\t\t\t\ty = config$1.radius * Math.sin(phi);\n\t\t\t\tz = config$1.radius * Math.cos(phi) - config$1.radius;\n\t\t\t\trotX = Math.sin(phi) * 22;\n\t\t\t\tdepthOpacity = .75 + .25 * ((Math.cos(phi) + 1) * .5);\n\t\t\t} else {\n\t\t\t\tconst theta = (norm - .5) * totalAngleRad;\n\t\t\t\tx = config$1.radius * Math.sin(theta);\n\t\t\t\ty = (glyphIndex - (n - 1) / 2) * config$1.pitch;\n\t\t\t\tz = config$1.radius * Math.cos(theta) - config$1.radius;\n\t\t\t\trotY = theta * 180 / Math.PI;\n\t\t\t\tconst facing = Math.cos(theta);\n\t\t\t\tdepthOpacity = Math.max(.65, (facing + 1) * .5);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tz = 0;\n\t\t\tbreak;\n\t}\n\tconst perspective = Math.max(100, config$1.perspective ?? 1200);\n\tconst depthDist = perspective - z;\n\tconst scaleMult = depthDist > 1 ? perspective / depthDist : 1;\n\treturn {\n\t\tx: x * scaleMult,\n\t\ty: y * scaleMult,\n\t\tz,\n\t\trotX,\n\t\trotY,\n\t\trotZ,\n\t\tscaleMult: Math.max(.1, scaleMult),\n\t\tdepthOpacity\n\t};\n}\n/**\n* Evaluates infinite kinetic marquee translation and snapping.\n*/\nfunction evaluateMarqueeOffset(baseX, containerWidth, contentWidth, config$1, elapsedSec) {\n\tconst totalSpan = (containerWidth > 0 ? Math.max(containerWidth, contentWidth) : contentWidth) + config$1.repeatGap;\n\tif (totalSpan <= 0) return baseX;\n\tlet travel = config$1.velocity * elapsedSec;\n\tif (config$1.snap?.enabled) {\n\t\tconst targetPos = (config$1.snap.stopIndex ?? 0) * (config$1.snap.granularity === \"character\" ? 40 : 120);\n\t\tconst decelFactor = Math.min(1, elapsedSec * 1.5);\n\t\ttravel = travel * (1 - decelFactor) + targetPos * decelFactor;\n\t}\n\tif (config$1.direction === \"right\" || config$1.direction === \"down\") travel = -travel;\n\tif (config$1.loop) {\n\t\tconst wrapped = (baseX - travel) % totalSpan;\n\t\treturn wrapped < -contentWidth ? wrapped + totalSpan : wrapped;\n\t}\n\treturn baseX - travel;\n}\n/**\n* Samples audio FFT frequency bin and computes scale factor for Audio Spectrum Typography.\n*/\nfunction sampleAudioSpectrumScale(glyphIndex, totalGlyphs, config$1, signals, frame, fps) {\n\tconst n = Math.max(1, totalGlyphs);\n\tconst norm = n > 1 ? glyphIndex / (n - 1) : .5;\n\tconst minFreq = Math.max(20, config$1.minFreqHz);\n\tconst targetFreq = minFreq * (Math.max(minFreq + 100, config$1.maxFreqHz) / minFreq) ** norm;\n\tlet magnitude = 0;\n\tconst regSamples = signalRegistry.getChannelSamples(config$1.signalChannel, \"primary\");\n\tif (regSamples && regSamples.length > 0) {\n\t\tconst compFps = fps > 0 ? fps : 24;\n\t\tconst sampleIdx = Math.max(0, Math.min(regSamples.length - 1, Math.round(frame / compFps * 24)));\n\t\tmagnitude = Number(regSamples[sampleIdx]) || 0;\n\t} else if (signals) {\n\t\tconst sig = signals[config$1.signalChannel];\n\t\tif (typeof sig === \"number\") magnitude = sig;\n\t\telse if (typeof sig === \"function\") magnitude = Number(sig(frame, fps, targetFreq)) || 0;\n\t\telse if (typeof sig === \"object\" && sig !== null) {\n\t\t\tconst sObj = sig;\n\t\t\tif (typeof sObj.get === \"function\") magnitude = Number(sObj.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\tfreq: targetFreq\n\t\t\t})) || 0;\n\t\t\telse if (Array.isArray(sObj.samples) || ArrayBuffer.isView(sObj.samples)) {\n\t\t\t\tconst arr = sObj.samples;\n\t\t\t\tconst binIdx = Math.floor(norm * (arr.length - 1));\n\t\t\t\tmagnitude = Number(arr[binIdx]) || 0;\n\t\t\t}\n\t\t}\n\t}\n\tconst clampedMag = Math.max(0, Math.min(1, magnitude));\n\treturn config$1.minScale + clampedMag * (config$1.maxScale - config$1.minScale);\n}\n\n//#endregion\n//#region src/text-animations/selectors.ts\n/**\n* Computes After Effects Range Selector weight for a single glyph index.\n*\n* @param index Normalized position of the glyph in the string (0.0 to 1.0)\n* @param start Start boundary (0.0 to 1.0)\n* @param end End boundary (0.0 to 1.0)\n* @param offset Window shift (-1.0 to 1.0)\n* @param shape Falloff curve\n* @param easeHigh Non-linear easing for high values\n* @param easeLow Non-linear easing for low values\n* @returns Weight in [0.0, 1.0]\n*/\nfunction computeRangeSelectorWeight(index, start, end, offset, shape, easeHigh = 0, easeLow = 0) {\n\tconst effStart = start + offset;\n\tconst effEnd = end + offset;\n\tif (effEnd <= effStart) return 0;\n\tconst relativePos = (index - effStart) / (effEnd - effStart);\n\tlet baseWeight = 0;\n\tswitch (shape) {\n\t\tcase \"square\":\n\t\t\tbaseWeight = relativePos >= 0 && relativePos <= 1 ? 1 : 0;\n\t\t\tbreak;\n\t\tcase \"ramp_up\":\n\t\t\tbaseWeight = Math.max(0, Math.min(1, relativePos));\n\t\t\tbreak;\n\t\tcase \"ramp_down\":\n\t\t\tbaseWeight = 1 - Math.max(0, Math.min(1, relativePos));\n\t\t\tbreak;\n\t\tcase \"triangle\":\n\t\t\tif (relativePos < 0 || relativePos > 1) baseWeight = 0;\n\t\t\telse if (relativePos < .5) baseWeight = relativePos * 2;\n\t\t\telse baseWeight = (1 - relativePos) * 2;\n\t\t\tbreak;\n\t\tcase \"round\":\n\t\t\tif (relativePos < 0 || relativePos > 1) baseWeight = 0;\n\t\t\telse baseWeight = .5 - .5 * Math.cos(relativePos * 2 * Math.PI);\n\t\t\tbreak;\n\t\tcase \"smooth\":\n\t\t\tif (relativePos <= 0) baseWeight = 0;\n\t\t\telse if (relativePos >= 1) baseWeight = 1;\n\t\t\telse baseWeight = relativePos * relativePos * (3 - 2 * relativePos);\n\t\t\tbreak;\n\t}\n\tif (baseWeight > 0 && baseWeight < 1) {\n\t\tif (easeHigh !== 0 && baseWeight > .5) baseWeight = .5 + .5 * ((baseWeight - .5) * 2) ** (easeHigh > 0 ? 1 + easeHigh * 3 : 1 / (1 - easeHigh * 3));\n\t\tif (easeLow !== 0 && baseWeight <= .5) baseWeight = .5 * (baseWeight * 2) ** (easeLow > 0 ? 1 + easeLow * 3 : 1 / (1 - easeLow * 3));\n\t}\n\treturn Math.max(0, Math.min(1, baseWeight));\n}\n/**\n* 1D Gradient deterministic hash noise for Wiggly Selectors.\n*/\nfunction deterministicWigglyNoise(seed, glyphIndex, phase, correlation) {\n\tconst coord = (glyphIndex * (1 - correlation) + correlation) * 12.9898 + phase + seed * 78.233;\n\tconst raw = Math.sin(coord) * 43758.5453;\n\treturn (raw - Math.floor(raw)) * 2 - 1;\n}\n/**\n* Deterministic pseudo-random number generator for seeded order shuffling.\n*/\nfunction getShuffledOrder(count, seed) {\n\tlet s = seed;\n\tconst nextRand = () => {\n\t\ts = (s * 9301 + 49297) % 233280;\n\t\treturn s / 233280;\n\t};\n\tconst arr = Array.from({ length: count }, (_, i) => i);\n\tfor (let i = arr.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(nextRand() * (i + 1));\n\t\tconst temp = arr[i];\n\t\tarr[i] = arr[j];\n\t\tarr[j] = temp;\n\t}\n\treturn arr;\n}\n/**\n* Combines consecutive selector weights using After Effects Selector Mode logic.\n*/\nfunction evaluateSelectorCombination(prevWeight, currWeight, mode) {\n\tswitch (mode) {\n\t\tcase \"add\": return Math.max(0, Math.min(1, prevWeight + currWeight));\n\t\tcase \"subtract\": return Math.max(0, Math.min(1, prevWeight - currWeight));\n\t\tcase \"intersect\": return prevWeight * currWeight;\n\t\tcase \"min\": return Math.min(prevWeight, currWeight);\n\t\tcase \"max\": return Math.max(prevWeight, currWeight);\n\t\tcase \"difference\": return Math.abs(prevWeight - currWeight);\n\t}\n}\n\n//#endregion\n//#region src/text-animations/typewriter.ts\nconst SCRAMBLE_POOLS = {\n\tascii: \"!@#$%^&*()_+{}[]:;<>,.?\",\n\talphanumeric: \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n\tmatrix: \"010101<>[]{}+=*~#%&!?/\\\\:;|X0123456789\",\n\tbinary: \"01\",\n\thex: \"0123456789ABCDEF\"\n};\nfunction getScramblePool(charset, customCharset) {\n\tif (charset === \"custom\" && customCharset && customCharset.length > 0) return customCharset;\n\treturn SCRAMBLE_POOLS[charset] ?? SCRAMBLE_POOLS.alphanumeric;\n}\n/**\n* Evaluates typewriter visible character count and scramble state for frame `currentFrame`.\n*/\nfunction evaluateTypewriterState(fullText, currentFrame, startFrame, durationFrames, cadence = {\n\tmode: \"human\",\n\tjitter: .35,\n\tcommaPauseMultiplier: 3,\n\tsentencePauseMultiplier: 5.5,\n\tparagraphPauseMultiplier: 7\n}, scramble = {\n\tenabled: false,\n\tcharset: \"alphanumeric\",\n\tscrambleFramesPerChar: 8,\n\thighlightProbability: .25\n}, blinkFrequency = 2, granularity = \"character\", progressOverride) {\n\tif (progressOverride === void 0 && currentFrame < startFrame) return {\n\t\tvisibleChars: 0,\n\t\tcurrentDisplayString: \"\",\n\t\tisCursorVisible: false\n\t};\n\tconst progress = progressOverride !== void 0 ? Math.max(0, Math.min(1, progressOverride)) : Math.min(1, (currentFrame - startFrame) / Math.max(1, durationFrames));\n\tconst elapsed = progressOverride !== void 0 ? progress * durationFrames : currentFrame - startFrame;\n\tconst totalChars = fullText.length;\n\tlet visibleCount = Math.floor(progress * totalChars);\n\tif (granularity === \"word\") {\n\t\tconst tokens = fullText.split(/(\\s+)/);\n\t\tconst wordIndices = [];\n\t\ttokens.forEach((t, i) => {\n\t\t\tif (t.trim().length > 0) wordIndices.push(i);\n\t\t});\n\t\tconst visibleWords = Math.min(wordIndices.length, Math.floor(progress * (wordIndices.length + 1)));\n\t\tif (visibleWords <= 0) visibleCount = 0;\n\t\telse {\n\t\t\tconst lastIdx = wordIndices[Math.min(wordIndices.length - 1, visibleWords - 1)];\n\t\t\tvisibleCount = tokens.slice(0, lastIdx + 1).join(\"\").length;\n\t\t}\n\t} else if (granularity === \"line\") {\n\t\tconst lines = fullText.split(\"\\n\");\n\t\tconst visibleLines = Math.min(lines.length, Math.floor(progress * (lines.length + 1)));\n\t\tvisibleCount = lines.slice(0, visibleLines).join(\"\\n\").length;\n\t} else if (cadence.mode === \"human\" && progress < 1) {\n\t\tlet simulatedCharIndex = 0;\n\t\tlet simulatedElapsed = 0;\n\t\tconst baseFramesPerChar = durationFrames / Math.max(1, totalChars);\n\t\tfor (let i = 0; i < totalChars; i++) {\n\t\t\tconst char = fullText[i];\n\t\t\tlet multiplier = 1;\n\t\t\tconst commaMult = cadence.commaPauseMultiplier ?? 3;\n\t\t\tconst sentenceMult = cadence.sentencePauseMultiplier ?? 5.5;\n\t\t\tconst paraMult = cadence.paragraphPauseMultiplier ?? 7;\n\t\t\tconst jitter = cadence.jitter ?? .35;\n\t\t\tif (char === \",\" || char === \";\") multiplier = commaMult;\n\t\t\telse if (char === \".\" || char === \"!\" || char === \"?\") multiplier = sentenceMult;\n\t\t\telse if (char === \"\\n\") multiplier = paraMult;\n\t\t\tconst jitterVal = 1 + Math.sin(i * 17.3 + 42) * .5 * jitter;\n\t\t\tconst charDuration = baseFramesPerChar * multiplier * jitterVal;\n\t\t\tsimulatedElapsed += charDuration;\n\t\t\tif (simulatedElapsed <= elapsed) simulatedCharIndex = i + 1;\n\t\t\telse break;\n\t\t}\n\t\tvisibleCount = Math.min(totalChars, simulatedCharIndex);\n\t}\n\tlet displayStr = fullText.slice(0, visibleCount);\n\tif (scramble.enabled && visibleCount < totalChars && visibleCount > 0) {\n\t\tconst pool = getScramblePool(scramble.charset, scramble.customCharset);\n\t\tconst trailCount = Math.min(visibleCount, Math.max(1, scramble.scrambleFramesPerChar > 4 ? 3 : 2));\n\t\tlet scrambledTail = \"\";\n\t\tfor (let t = 0; t < trailCount; t++) {\n\t\t\tconst idx = Math.floor(Math.abs(Math.sin(currentFrame * 7 + t * 13)) * pool.length) % pool.length;\n\t\t\tscrambledTail += pool[idx];\n\t\t}\n\t\tdisplayStr = displayStr.slice(0, displayStr.length - trailCount) + scrambledTail;\n\t}\n\tlet isCursorVisible = true;\n\tif (blinkFrequency > 0) {\n\t\tconst halfPeriodFrames = Math.max(1, Math.round(30 / (2 * blinkFrequency)));\n\t\tisCursorVisible = Math.floor(elapsed / halfPeriodFrames) % 2 === 0;\n\t}\n\treturn {\n\t\tvisibleChars: visibleCount,\n\t\tcurrentDisplayString: displayStr,\n\t\tisCursorVisible\n\t};\n}\n\n//#endregion\n//#region src/nodes/paragraph.ts\nfunction sampleSignalValue(signals, signalId, frame, fps, phaseSpread = 0, glyphIndex = 0) {\n\tconst regSamples = signalRegistry.getChannelSamples(signalId, \"primary\");\n\tif (regSamples && regSamples.length > 0) {\n\t\tconst compFps = fps > 0 ? fps : 24;\n\t\tconst t = frame / compFps;\n\t\tconst phaseOffsetSec = phaseSpread !== 0 ? glyphIndex * phaseSpread / (2 * Math.PI) : 0;\n\t\tconst effT = Math.max(0, t + phaseOffsetSec);\n\t\tconst idx = Math.max(0, Math.min(regSamples.length - 1, Math.round(effT * compFps)));\n\t\treturn Number(regSamples[idx]) || 0;\n\t}\n\tif (!signals) return 0;\n\tconst sig = signals[signalId];\n\tif (sig === void 0 || sig === null) return 0;\n\tif (typeof sig === \"number\") return sig;\n\tif (typeof sig === \"function\") return Number(sig(frame, fps)) || 0;\n\tif (typeof sig === \"object\") {\n\t\tconst sObj = sig;\n\t\tif (typeof sObj.get === \"function\") {\n\t\t\tconst time$2 = fps > 0 ? frame / fps : 0;\n\t\t\tconst phaseOffsetSec = phaseSpread !== 0 ? glyphIndex * phaseSpread / (2 * Math.PI) : 0;\n\t\t\treturn Number(sObj.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: time$2 + phaseOffsetSec\n\t\t\t})) || 0;\n\t\t}\n\t\tif (Array.isArray(sObj.samples) || ArrayBuffer.isView(sObj.samples)) {\n\t\t\tconst arr = sObj.samples;\n\t\t\tconst idx = Math.max(0, Math.min(arr.length - 1, Math.round(frame)));\n\t\t\treturn Number(arr[idx]) || 0;\n\t\t}\n\t}\n\treturn 0;\n}\nfunction easeInOutQuad(t) {\n\treturn t < .5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2;\n}\nfunction seededRandom(str) {\n\tlet hash = 0;\n\tfor (let i = 0; i < str.length; i++) hash = str.charCodeAt(i) + ((hash << 5) - hash);\n\treturn () => {\n\t\tconst x = Math.sin(hash++) * 1e4;\n\t\treturn x - Math.floor(x);\n\t};\n}\nfunction getShuffleOrder(n, seed) {\n\tconst rand = seededRandom(seed);\n\tconst arr = Array.from({ length: n }, (_, i) => i);\n\tfor (let i = arr.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(rand() * (i + 1));\n\t\tconst temp = arr[i];\n\t\tarr[i] = arr[j];\n\t\tarr[j] = temp;\n\t}\n\treturn arr;\n}\nfunction getOrCreateEmojiTexture(device, char, fontSize) {\n\tconst key = `${char}-${fontSize}`;\n\tlet tex = SlugFontCache.emojiTextureCache.get(key);\n\tif (tex) return tex;\n\tconst resolutionScale = 4;\n\tconst emojiSize = Math.max(16, Math.ceil(fontSize * 1.5 * resolutionScale));\n\tconst size = Math.ceil(emojiSize / 4) * 4;\n\tif (!!globalThis.__IS_HEADLESS_RENDERER__ || typeof window === \"undefined\" || typeof globalThis.document === \"undefined\") {\n\t\tconsole.warn(`[getOrCreateEmojiTexture] Emoji \"${char}\" not preloaded. Returning fallback dummy texture.`);\n\t\ttex = device.createTexture({\n\t\t\tlabel: `Emoji-Dummy-${char}`,\n\t\t\tsize: [1, 1],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING\n\t\t});\n\t\tSlugFontCache.emojiTextureCache.set(key, tex);\n\t\treturn tex;\n\t}\n\tconst canvas = new OffscreenCanvas(size, size);\n\tconst c2d = canvas.getContext(\"2d\");\n\tif (c2d) {\n\t\tc2d.font = `${fontSize * resolutionScale}px \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", \"NotoColorEmoji\", sans-serif`;\n\t\tc2d.textBaseline = \"middle\";\n\t\tc2d.textAlign = \"center\";\n\t\tc2d.fillText(char, size / 2, size / 2);\n\t}\n\ttex = device.createTexture({\n\t\tlabel: `Emoji-${char}`,\n\t\tsize: [size, size],\n\t\tformat: \"rgba8unorm\",\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t});\n\tdevice.queue.copyExternalImageToTexture({ source: canvas }, {\n\t\ttexture: tex,\n\t\tpremultipliedAlpha: true\n\t}, [size, size]);\n\tSlugFontCache.emojiTextureCache.set(key, tex);\n\treturn tex;\n}\nfunction computeUnitProgress(elapsed, duration$2, entranceMs, exitMs, idx_i, totalUnits, isVideoMode) {\n\tif (!isVideoMode) return {\n\t\tp_in: 1,\n\t\tp_out: 1\n\t};\n\tlet p_in = 1;\n\tif (entranceMs > 0) {\n\t\tconst D_unit = entranceMs * .5;\n\t\tconst s_i = idx_i * (totalUnits > 1 ? entranceMs * .5 / (totalUnits - 1) : 0);\n\t\tconst e_i = s_i + D_unit;\n\t\tif (elapsed < s_i) p_in = 0;\n\t\telse if (elapsed > e_i) p_in = 1;\n\t\telse p_in = (elapsed - s_i) / (e_i - s_i);\n\t}\n\tlet p_out = 1;\n\tif (exitMs > 0) {\n\t\tconst t_exit_start = duration$2 - exitMs;\n\t\tif (elapsed > t_exit_start) {\n\t\t\tconst D_unit = exitMs * .5;\n\t\t\tconst s_i = t_exit_start + idx_i * (totalUnits > 1 ? exitMs * .5 / (totalUnits - 1) : 0);\n\t\t\tconst e_i = s_i + D_unit;\n\t\t\tif (elapsed < s_i) p_out = 1;\n\t\t\telse if (elapsed > e_i) p_out = 0;\n\t\t\telse p_out = 1 - (elapsed - s_i) / (e_i - s_i);\n\t\t}\n\t}\n\treturn {\n\t\tp_in,\n\t\tp_out\n\t};\n}\nfunction applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration$2, entranceMs, exitMs, idx_i, baseOpacity, isEmoji) {\n\tconst ep_in = smoothing ? easeInOutQuad(p_in) : p_in;\n\tconst ep_out = smoothing ? easeInOutQuad(p_out) : p_out;\n\tconst ep_i = ep_in * ep_out;\n\tif (ep_in <= 0 && transitionIn !== \"blur\" || ep_out <= 0 && transitionOut !== \"blur\") return {\n\t\topacity: 0,\n\t\ttransX: 0,\n\t\ttransY: 0,\n\t\trot: 0,\n\t\tscale: 1,\n\t\tblurAmount: 0,\n\t\tvisible: false\n\t};\n\tlet opacity = baseOpacity;\n\tif (transitionIn === \"fade\" || transitionIn === \"slideUp\" || transitionIn === \"blur\") opacity *= ep_in;\n\telse if (transitionIn === \"appear\") {\n\t\tif (ep_in < .5) opacity = 0;\n\t}\n\tif (transitionOut === \"fade\" || transitionOut === \"slideUp\" || transitionOut === \"blur\") opacity *= ep_out;\n\telse if (transitionOut === \"appear\") {\n\t\tif (ep_out < .5) opacity = 0;\n\t}\n\tif (opacity < .001) return {\n\t\topacity: 0,\n\t\ttransX: 0,\n\t\ttransY: 0,\n\t\trot: 0,\n\t\tscale: 1,\n\t\tblurAmount: 0,\n\t\tvisible: false\n\t};\n\tlet transX = 0;\n\tlet transY = 0;\n\tlet rot = 0;\n\tlet scale = 1;\n\tif (transitionIn === \"slideUp\" && elapsed < entranceMs) transY += (1 - ep_in) * 30;\n\tif (transitionOut === \"slideUp\" && elapsed > duration$2 - exitMs) transY -= (1 - ep_out) * 30;\n\tconst rotScale = isEmoji ? 1 : Math.PI / 180;\n\tif (kinetic === \"stack\") {\n\t\tscale = .8 + .2 * ep_i;\n\t\trot = (1 - ep_i) * 15 * rotScale;\n\t} else if (kinetic === \"wave\") transY += 10 * Math.sin(elapsed * .005 - idx_i * .5);\n\telse if (kinetic === \"wiggle\") {\n\t\ttransX += 5 * Math.sin(elapsed * .008 + idx_i * 1.7);\n\t\ttransY += 5 * Math.cos(elapsed * .006 + idx_i * 1.3);\n\t\trot += 4 * Math.sin(elapsed * .005 + idx_i * 2.1) * rotScale;\n\t} else if (kinetic === \"shuffle\") {\n\t\ttransX += 3 * Math.sin(elapsed * .015 + idx_i * 3.1);\n\t\ttransY += 3 * Math.cos(elapsed * .012 + idx_i * 2.3);\n\t\trot += 8 * Math.sin(elapsed * .02 + idx_i * 1.1) * rotScale;\n\t}\n\tlet blurAmount = 0;\n\tif (transitionIn === \"blur\") blurAmount = Math.max(blurAmount, (1 - ep_in) * 20);\n\tif (transitionOut === \"blur\") blurAmount = Math.max(blurAmount, (1 - ep_out) * 20);\n\treturn {\n\t\topacity,\n\t\ttransX,\n\t\ttransY,\n\t\trot,\n\t\tscale,\n\t\tblurAmount,\n\t\tvisible: true\n\t};\n}\nconst KINETIC_EASING_MAP = {\n\tlinear: (t) => t,\n\tnone: (t) => t,\n\tsmoothstep: (t) => t,\n\t\"power1.out\": (t) => 1 - (1 - t) ** 2,\n\t\"quad.out\": (t) => 1 - (1 - t) ** 2,\n\t\"power1.in\": (t) => t ** 2,\n\t\"quad.in\": (t) => t ** 2,\n\t\"power1.inout\": (t) => t < .5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2,\n\t\"quad.inout\": (t) => t < .5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2,\n\t\"power2.out\": (t) => 1 - (1 - t) ** 3,\n\t\"cubic.out\": (t) => 1 - (1 - t) ** 3,\n\t\"power2.in\": (t) => t ** 3,\n\t\"cubic.in\": (t) => t ** 3,\n\t\"power2.inout\": (t) => t < .5 ? 4 * t ** 3 : 1 - (-2 * t + 2) ** 3 / 2,\n\t\"cubic.inout\": (t) => t < .5 ? 4 * t ** 3 : 1 - (-2 * t + 2) ** 3 / 2,\n\t\"power3.out\": (t) => 1 - (1 - t) ** 4,\n\t\"quart.out\": (t) => 1 - (1 - t) ** 4,\n\t\"power3.in\": (t) => t ** 4,\n\t\"quart.in\": (t) => t ** 4,\n\t\"power3.inout\": (t) => t < .5 ? 8 * t ** 4 : 1 - (-2 * t + 2) ** 4 / 2,\n\t\"quart.inout\": (t) => t < .5 ? 8 * t ** 4 : 1 - (-2 * t + 2) ** 4 / 2,\n\t\"power4.out\": (t) => 1 - (1 - t) ** 5,\n\t\"quint.out\": (t) => 1 - (1 - t) ** 5,\n\t\"power4.in\": (t) => t ** 5,\n\t\"quint.in\": (t) => t ** 5,\n\t\"sine.out\": (t) => Math.sin(t * Math.PI / 2),\n\t\"sine.in\": (t) => 1 - Math.cos(t * Math.PI / 2),\n\t\"sine.inout\": (t) => -(Math.cos(Math.PI * t) - 1) / 2,\n\t\"expo.out\": (t) => t === 1 ? 1 : 1 - 2 ** (-10 * t),\n\t\"back.out\": (t) => 1 + 2.70158 * (t - 1) ** 3 + 1.70158 * (t - 1) ** 2\n};\nfunction evaluateEasing(ease, t) {\n\tconst clamped = Math.max(0, Math.min(1, t));\n\tif (!ease) return clamped;\n\tconst fn = KINETIC_EASING_MAP[ease.toLowerCase().trim()];\n\treturn fn ? fn(clamped) : clamped;\n}\nfunction computeAnimatorProgress(animator, unitIdx, totalUnits) {\n\tif (totalUnits <= 0) return 0;\n\tconst p = totalUnits > 1 ? unitIdx / (totalUnits - 1) : .5;\n\tconst offset = animator.offset ?? 0;\n\tconst rStart = (animator.rangeStart ?? 0) + offset;\n\tconst rEnd = (animator.rangeEnd ?? 1) + offset;\n\tlet u = 0;\n\tif (rEnd <= rStart) u = p >= rStart ? 1 : 0;\n\telse u = Math.max(0, Math.min(1, (p - rStart) / (rEnd - rStart)));\n\tconst s = u * u * (3 - 2 * u);\n\treturn evaluateEasing(animator.easing ?? \"power2.out\", s);\n}\nfunction evaluateAEAnimatorWeight(aeAnim, glyph, counts, signals, frame, fps) {\n\tconst charsCount = Math.max(1, counts.charsCount ?? 1);\n\tconst wordsCount = Math.max(1, counts.wordsCount ?? 1);\n\tconst linesCount = Math.max(1, counts.linesCount ?? 1);\n\tconst selectors = aeAnim.selectors ?? [];\n\tif (selectors.length === 0) return 1;\n\tlet combinedWeight = 0;\n\tfor (let sIdx = 0; sIdx < selectors.length; sIdx++) {\n\t\tconst selector = selectors[sIdx];\n\t\tlet currentWeight = 0;\n\t\tif (selector.type === \"range\") {\n\t\t\tlet totalUnits = charsCount;\n\t\t\tlet unitIdx = glyph.charIndex ?? 0;\n\t\t\tif (selector.basedOn === \"words\") {\n\t\t\t\ttotalUnits = wordsCount;\n\t\t\t\tunitIdx = glyph.wordIndex ?? 0;\n\t\t\t} else if (selector.basedOn === \"lines\") {\n\t\t\t\ttotalUnits = linesCount;\n\t\t\t\tunitIdx = glyph.lineIndex ?? 0;\n\t\t\t}\n\t\t\tif (selector.randomizeOrder) unitIdx = getShuffledOrder(totalUnits, selector.randomSeed ?? 12345)[unitIdx % totalUnits] ?? unitIdx;\n\t\t\tcurrentWeight = computeRangeSelectorWeight(selector.units === \"index\" ? unitIdx : totalUnits > 1 ? unitIdx / (totalUnits - 1) : .5, selector.start ?? aeAnim.rangeStart ?? 0, selector.end ?? aeAnim.rangeEnd ?? (selector.units === \"index\" ? totalUnits : 1), selector.offset ?? aeAnim.offset ?? 0, selector.shape ?? \"smooth\", selector.easeHigh ?? 0, selector.easeLow ?? 0) * (selector.amount ?? 1);\n\t\t} else if (selector.type === \"wiggly\") {\n\t\t\tconst tSec = fps > 0 ? frame / fps : 0;\n\t\t\tconst temporalPhase = (selector.temporalPhaseDeg ?? 0) * Math.PI / 180;\n\t\t\tconst spatialPhase = (selector.spatialPhaseDeg ?? 0) * Math.PI / 180;\n\t\t\tconst phase = tSec * (selector.wigglesPerSecond ?? 2) * 2 * Math.PI + temporalPhase + spatialPhase;\n\t\t\tconst noise = deterministicWigglyNoise(selector.randomSeed ?? 42, glyph.charIndex ?? 0, phase, selector.correlation ?? .5);\n\t\t\tconst minAmt = selector.minAmount ?? -1;\n\t\t\tconst maxAmt = selector.maxAmount ?? 1;\n\t\t\tcurrentWeight = minAmt + (noise * .5 + .5) * (maxAmt - minAmt);\n\t\t} else if (selector.type === \"signal\") currentWeight = sampleSignalValue(signals, selector.signalId, frame, fps, selector.phaseSpread ?? 0, glyph.charIndex ?? 0) * (selector.multiplier ?? 1) + (selector.offset ?? 0);\n\t\telse if (selector.type === \"expression\") {\n\t\t\tconst exprSel = selector;\n\t\t\tconst time$2 = fps > 0 ? frame / fps : 0;\n\t\t\tconst ctx = {\n\t\t\t\tcharIndex: glyph.charIndex ?? 0,\n\t\t\t\twordIndex: glyph.wordIndex ?? 0,\n\t\t\t\tlineIndex: glyph.lineIndex ?? 0,\n\t\t\t\ttotalChars: charsCount,\n\t\t\t\ttotalWords: wordsCount,\n\t\t\t\ttotalLines: linesCount,\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: time$2,\n\t\t\t\tsignals\n\t\t\t};\n\t\t\tcurrentWeight = evaluateExpressionSelector(exprSel.expression, ctx) * (exprSel.amount ?? 1);\n\t\t}\n\t\tif (sIdx === 0) combinedWeight = currentWeight;\n\t\telse combinedWeight = evaluateSelectorCombination(combinedWeight, currentWeight, selector.mode ?? \"add\");\n\t}\n\treturn combinedWeight;\n}\nfunction applyGlyphAnimators(animators, glyph, counts, base, isEmoji = false, frame = 0, fps = 24, signals) {\n\tif (!animators || animators.length === 0) return base;\n\tlet { transX, transY, rot, scale, scaleX, scaleY, opacity, blurAmount } = base;\n\tlet transZ = base.transZ ?? 0;\n\tlet color = base.color;\n\tlet chromaticShift = base.chromaticShift ?? 0;\n\tlet dissolveProgress = base.dissolveProgress ?? 0;\n\tconst vfxParam = base.vfxParam ?? 0;\n\tlet skewM01 = base.skewM01 ?? 0;\n\tlet skewM10 = base.skewM10 ?? 0;\n\tlet anchorConfig = base.anchorConfig;\n\tlet fillOpacity = base.fillOpacity ?? 1;\n\tlet strokeWidth = base.strokeWidth;\n\tlet strokeColor = base.strokeColor;\n\tlet longShadow = base.longShadow;\n\tlet lineSpacing = base.lineSpacing;\n\tlet lineAnchor = base.lineAnchor;\n\tconst rotScale = isEmoji ? 1 : Math.PI / 180;\n\tconst charsCount = Math.max(1, counts.charsCount ?? 1);\n\tconst wordsCount = Math.max(1, counts.wordsCount ?? 1);\n\tconst linesCount = Math.max(1, counts.linesCount ?? 1);\n\tfor (const animator of animators) if (\"selectors\" in animator && Array.isArray(animator.selectors)) {\n\t\tconst aeAnim = animator;\n\t\tconst p = aeAnim.props ?? {};\n\t\tconst selectorWeight = evaluateAEAnimatorWeight(aeAnim, glyph, {\n\t\t\tcharsCount,\n\t\t\twordsCount,\n\t\t\tlinesCount\n\t\t}, signals, frame, fps);\n\t\tlet combinedWeight = selectorWeight;\n\t\tlet springWeight = 1;\n\t\tlet springProgress = 1;\n\t\tif (p.spring) {\n\t\t\tconst charDelay = (glyph.charIndex ?? 0) * .035;\n\t\t\tspringProgress = evaluateSpringProgress(Math.max(0, (fps > 0 ? frame / fps : 0) - charDelay), p.spring.stiffness, p.spring.damping, p.spring.mass, p.spring.initialVelocity);\n\t\t\tspringWeight = 1 - springProgress;\n\t\t\tcombinedWeight = selectorWeight * springWeight;\n\t\t}\n\t\tif (combinedWeight !== 0 || selectorWeight !== 0) {\n\t\t\tif (p.x !== void 0) transX += p.x * combinedWeight;\n\t\t\tif (p.y !== void 0) transY += p.y * combinedWeight;\n\t\t\tif (p.scale !== void 0) scale *= 1 + (p.scale - 1) * combinedWeight;\n\t\t\tif (p.scaleX !== void 0) scaleX *= 1 + (p.scaleX - 1) * combinedWeight;\n\t\t\tif (p.scaleY !== void 0) scaleY *= 1 + (p.scaleY - 1) * combinedWeight;\n\t\t\tif (p.rotation !== void 0) rot += p.rotation * rotScale * combinedWeight;\n\t\t\tif (p.rotationX !== void 0) {\n\t\t\t\tconst rotXRad = p.rotationX * combinedWeight * Math.PI / 180;\n\t\t\t\tscaleY *= Math.max(.08, Math.abs(Math.cos(rotXRad)));\n\t\t\t}\n\t\t\tif (p.rotationY !== void 0) {\n\t\t\t\tconst rotYRad = p.rotationY * combinedWeight * Math.PI / 180;\n\t\t\t\tscaleX *= Math.max(.08, Math.abs(Math.cos(rotYRad)));\n\t\t\t}\n\t\t\tif (p.rotationZ !== void 0) rot += p.rotationZ * rotScale * combinedWeight;\n\t\t\tif (p.translateZ !== void 0) transZ += p.translateZ * combinedWeight;\n\t\t\tif (p.skew !== void 0) {\n\t\t\t\tconst [, m01, m10] = evaluateSkewMatrix(p.skew * combinedWeight, p.skewAxis ?? 0);\n\t\t\t\tskewM01 += m01;\n\t\t\t\tskewM10 += m10;\n\t\t\t}\n\t\t\tif (p.formation !== void 0) {\n\t\t\t\tconst v3d = evaluateVolumetricFormation(glyph.charIndex ?? 0, charsCount, p.formation);\n\t\t\t\tconst centerX = counts.layoutCenter?.x ?? 0;\n\t\t\t\tconst centerY = counts.layoutCenter?.y ?? 0;\n\t\t\t\tconst glyphFlatX = glyph.x ?? 0;\n\t\t\t\tconst glyphFlatY = glyph.y ?? 0;\n\t\t\t\tconst targetX = centerX + v3d.x;\n\t\t\t\tconst targetY = centerY + v3d.y;\n\t\t\t\ttransX += (targetX - glyphFlatX) * combinedWeight;\n\t\t\t\ttransY += (targetY - glyphFlatY) * combinedWeight;\n\t\t\t\ttransZ += v3d.z * combinedWeight;\n\t\t\t\tif (v3d.rotX) {\n\t\t\t\t\tconst rotXRad = v3d.rotX * combinedWeight * Math.PI / 180;\n\t\t\t\t\tscaleY *= Math.max(.5, Math.abs(Math.cos(rotXRad)));\n\t\t\t\t}\n\t\t\t\tif (v3d.rotY) {\n\t\t\t\t\tconst rotYRad = v3d.rotY * combinedWeight * Math.PI / 180;\n\t\t\t\t\tscaleX *= Math.max(.5, Math.abs(Math.cos(rotYRad)));\n\t\t\t\t}\n\t\t\t\tif (v3d.rotZ) rot += v3d.rotZ * Math.PI / 180 * combinedWeight;\n\t\t\t\tif (v3d.depthOpacity !== void 0) opacity *= 1 + (v3d.depthOpacity - 1) * combinedWeight;\n\t\t\t}\n\t\t\tif (p.anchor !== void 0) anchorConfig = p.anchor;\n\t\t\tif (p.opacity !== void 0) opacity *= 1 + (p.opacity - 1) * combinedWeight;\n\t\t\tif (p.blur !== void 0) blurAmount = Math.max(blurAmount, p.blur * combinedWeight);\n\t\t\tif (p.chromaticGlitch !== void 0) {\n\t\t\t\tlet shift = (p.chromaticGlitch.redShiftX ?? 0) * Math.max(0, combinedWeight);\n\t\t\t\tconst sliceProb = p.chromaticGlitch.sliceProbability ?? .35;\n\t\t\t\tconst n = Math.sin(frame * 17.13 + (glyph.charIndex ?? 0) * 43.17);\n\t\t\t\tconst frac = Math.abs(n - Math.floor(n));\n\t\t\t\tif (frac < sliceProb) shift += (p.chromaticGlitch.sliceAmplitude ?? 12) * (frac * 2 - 1);\n\t\t\t\tchromaticShift += shift;\n\t\t\t}\n\t\t\tif (p.particleDissolve !== void 0) dissolveProgress = Math.max(dissolveProgress, (p.particleDissolve.progress ?? 0) * (p.spring ? springProgress : Math.max(0, combinedWeight)));\n\t\t\tif (p.longShadow !== void 0) longShadow = p.longShadow;\n\t\t\tif (p.audioSpectrum !== void 0) {\n\t\t\t\tconst specScale = sampleAudioSpectrumScale(glyph.charIndex ?? 0, charsCount, p.audioSpectrum, signals, frame, fps);\n\t\t\t\tif (p.audioSpectrum.scaleAxis === \"scaleY\") scaleY *= specScale;\n\t\t\t\telse if (p.audioSpectrum.scaleAxis === \"scaleX\") scaleX *= specScale;\n\t\t\t\telse scale *= specScale;\n\t\t\t}\n\t\t\tif (p.stroke !== void 0) {\n\t\t\t\tif (p.stroke.fillOpacity !== void 0) fillOpacity *= 1 - combinedWeight + p.stroke.fillOpacity * combinedWeight;\n\t\t\t\tif (p.stroke.strokeWidth !== void 0) strokeWidth = (p.stroke.strokeWidth ?? 0) * combinedWeight;\n\t\t\t\tif (p.stroke.strokeColor) strokeColor = p.stroke.strokeColor;\n\t\t\t}\n\t\t\tif (p.lineSpacing !== void 0) {\n\t\t\t\tlineSpacing = p.lineSpacing * (p.spring ? springProgress : combinedWeight);\n\t\t\t\tlineAnchor = p.lineAnchor ?? 0;\n\t\t\t}\n\t\t\tif (p.fillColor) {\n\t\t\t\tconst targetCol = parseColor(p.fillColor);\n\t\t\t\tconst currentColor = color ?? {\n\t\t\t\t\tr: 1,\n\t\t\t\t\tg: 1,\n\t\t\t\t\tb: 1,\n\t\t\t\t\ta: 1\n\t\t\t\t};\n\t\t\t\tconst colorWeight = selectorWeight;\n\t\t\t\tcolor = {\n\t\t\t\t\tr: currentColor.r * (1 - colorWeight) + targetCol.r * colorWeight,\n\t\t\t\t\tg: currentColor.g * (1 - colorWeight) + targetCol.g * colorWeight,\n\t\t\t\t\tb: currentColor.b * (1 - colorWeight) + targetCol.b * colorWeight,\n\t\t\t\t\ta: currentColor.a * (1 - colorWeight) + targetCol.a * colorWeight\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst legacyAnim = animator;\n\t\tlet unitIdx = glyph.charIndex ?? glyph.unitIndex ?? 0;\n\t\tlet numUnits = Math.max(1, counts.charsCount ?? 1);\n\t\tif (legacyAnim.unit === \"word\") {\n\t\t\tunitIdx = glyph.wordIndex ?? 0;\n\t\t\tnumUnits = Math.max(1, counts.wordsCount ?? 1);\n\t\t} else if (legacyAnim.unit === \"line\") {\n\t\t\tunitIdx = glyph.lineIndex ?? 0;\n\t\t\tnumUnits = Math.max(1, counts.linesCount ?? 1);\n\t\t}\n\t\tconst tc = computeAnimatorProgress(legacyAnim, unitIdx, numUnits);\n\t\tconst t = legacyAnim.transform;\n\t\tif (!t || tc <= 0) continue;\n\t\tif (t.x !== void 0) transX += t.x * tc;\n\t\tif (t.y !== void 0) transY += t.y * tc;\n\t\tif (t.rotation !== void 0) rot += t.rotation * rotScale * tc;\n\t\tif (t.scale !== void 0) scale *= 1 + (t.scale - 1) * tc;\n\t\tif (t.scaleX !== void 0) scaleX *= 1 + (t.scaleX - 1) * tc;\n\t\tlet scaleYFactor = 1 + ((t.scaleY ?? 1) - 1) * tc;\n\t\tif (t.rotationX) {\n\t\t\tconst rotXRad = t.rotationX * tc * Math.PI / 180;\n\t\t\tscaleYFactor *= Math.cos(rotXRad);\n\t\t}\n\t\tscaleY *= scaleYFactor;\n\t\tif (t.opacity !== void 0) opacity *= 1 + (t.opacity - 1) * tc;\n\t\tif (t.blur !== void 0) blurAmount = Math.max(blurAmount, t.blur * tc);\n\t\tif (t.color) {\n\t\t\tconst targetCol = parseColor(t.color);\n\t\t\tconst currentColor = color ?? {\n\t\t\t\tr: 1,\n\t\t\t\tg: 1,\n\t\t\t\tb: 1,\n\t\t\t\ta: 1\n\t\t\t};\n\t\t\tcolor = {\n\t\t\t\tr: currentColor.r * (1 - tc) + targetCol.r * tc,\n\t\t\t\tg: currentColor.g * (1 - tc) + targetCol.g * tc,\n\t\t\t\tb: currentColor.b * (1 - tc) + targetCol.b * tc,\n\t\t\t\ta: currentColor.a * (1 - tc) + targetCol.a * tc\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\ttransX,\n\t\ttransY,\n\t\ttransZ,\n\t\trot,\n\t\tscale,\n\t\tscaleX,\n\t\tscaleY,\n\t\topacity: Math.max(0, Math.min(1, opacity)),\n\t\tblurAmount,\n\t\tcolor,\n\t\tchromaticShift,\n\t\tdissolveProgress,\n\t\tvfxParam,\n\t\tskewM01,\n\t\tskewM10,\n\t\tanchorConfig,\n\t\tfillOpacity: Math.max(0, Math.min(1, fillOpacity)),\n\t\tstrokeWidth,\n\t\tstrokeColor,\n\t\tlongShadow,\n\t\tlineSpacing,\n\t\tlineAnchor\n\t};\n}\nfunction drawParagraphNode(ctx, pass, props) {\n\tlet fontFamily = props.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) return;\n\tconst fontSize = props.fontSize ?? 48;\n\tconst slugFont = SlugFontCache.getFont(fontFamily, props.fontWeight, ctx.device, void 0, fontSize, props.variableAxes);\n\tconst hasStroke = props.stroke && props.strokeWidth && props.strokeWidth > 0;\n\tlet strokeFont = null;\n\tif (slugFont && hasStroke && ctx.device) {\n\t\tconst alignMultiplier = props.strokeAlign === \"outside\" ? 2 : 1;\n\t\tconst strokeWidthInFontUnits = (props.strokeWidth ?? 0) * alignMultiplier * (slugFont.unitsPerEm / fontSize);\n\t\tstrokeFont = SlugFontCache.getFont(fontFamily, props.fontWeight, ctx.device, strokeWidthInFontUnits, fontSize, props.variableAxes) ?? null;\n\t}\n\tif (!slugFont?.curvesTex || hasStroke && !strokeFont?.curvesTex) {\n\t\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\t\tSlugFontCache.preloadSlugFont(ctx.device, fontFamily, fontUrl, void 0, props.renderId).catch((err) => {\n\t\t\tconsole.warn(`[drawParagraphNode] Failed to load Slug font for ${fontFamily}:`, err);\n\t\t});\n\t\treturn;\n\t}\n\tconst letterSpacing = props.letterSpacing ?? 0;\n\tconst lineHeight = props.lineHeight !== void 0 && props.lineHeight < 10 ? props.lineHeight * fontSize : props.lineHeight ?? fontSize * 1.2;\n\tconst align = props.align ?? \"left\";\n\tconst padding = props.isCaption ? 0 : props.textBackgroundColor ? props.padding ?? 0 : 0;\n\tlet textToRender = props.text;\n\tlet twState;\n\tif (props.typewriter) {\n\t\tconst compFps = props.fps ?? 24;\n\t\tconst totalDurationFrames = props.durationMs !== void 0 ? Math.round(props.durationMs / 1e3 * compFps) : 60;\n\t\ttwState = evaluateTypewriterState(props.text, props.frame ?? 0, 0, totalDurationFrames, props.typewriter.cadence, props.typewriter.scramble, props.typewriter.cursor?.blinkFrequency ?? 2, props.typewriter.granularity ?? \"character\", props.textProgress);\n\t\ttextToRender = twState.currentDisplayString;\n\t}\n\tconst pathOptions = props.pathOptions ? {\n\t\t...props.pathOptions,\n\t\tfirstMargin: props.firstMargin !== void 0 ? props.firstMargin : props.pathOptions.firstMargin,\n\t\tlastMargin: props.lastMargin !== void 0 ? props.lastMargin : props.pathOptions.lastMargin,\n\t\tbaselineShift: props.baselineShift !== void 0 ? props.baselineShift : props.pathOptions.baselineShift\n\t} : void 0;\n\tlet maxWidth;\n\tlet measured;\n\tif (props.width != null) {\n\t\tmaxWidth = Math.max(0, props.width - padding * 2);\n\t\tmeasured = SlugGeometry.measure(textToRender, slugFont, fontSize, letterSpacing, lineHeight, maxWidth, props.spans);\n\t} else {\n\t\tmeasured = SlugGeometry.measure(textToRender, slugFont, fontSize, letterSpacing, lineHeight, void 0, props.spans);\n\t\tmaxWidth = measured.width;\n\t}\n\tconst alignWidth = props.isCaption ? props.dstRect.width : maxWidth;\n\tconst animApplyBy = props.animation?.applyBy ?? \"word\";\n\tconst layout = align === \"left\" && (alignWidth === void 0 || alignWidth === maxWidth) && !pathOptions && animApplyBy === \"word\" && Boolean(measured?.layout) && measured.layout ? measured.layout : SlugGeometry.layout(textToRender, slugFont, fontSize, letterSpacing, lineHeight, maxWidth, align, animApplyBy, alignWidth, pathOptions, props.spans);\n\tconst vAlign = props.verticalAlign ?? \"top\";\n\tconst slack = props.height != null && !pathOptions && !props.isCaption ? props.height - (measured.height + padding * 2) : 0;\n\tconst textRect = {\n\t\t...props.dstRect,\n\t\ty: props.dstRect.y + (vAlign === \"middle\" ? slack / 2 : vAlign === \"bottom\" ? slack : 0)\n\t};\n\tconst anim = props.animation;\n\tconst isBold = props.fontWeight === \"bold\" || typeof props.fontWeight === \"number\" && props.fontWeight >= 600 || typeof props.fontWeight === \"string\" && parseInt(props.fontWeight, 10) >= 600;\n\tconst hasTrueWeight = \"hasTrueWeight\" in slugFont && Boolean(slugFont.hasTrueWeight);\n\tlet fillFont = slugFont;\n\tif (isBold && !hasTrueWeight && ctx.device) {\n\t\tconst numericWeight = parseFontWeight(props.fontWeight);\n\t\tconst emboldenPx = Math.max(0, (numericWeight - 400) / 500) * .055 * fontSize;\n\t\tif (emboldenPx > 0) {\n\t\t\tconst strokeFontUnits = emboldenPx * (slugFont.unitsPerEm / fontSize);\n\t\t\tconst dilated = SlugFontCache.getFont(fontFamily, 400, ctx.device, strokeFontUnits, fontSize, props.variableAxes);\n\t\t\tif (dilated?.curvesTex) fillFont = dilated;\n\t\t}\n\t}\n\tconst instanceCount = layout.glyphs.length;\n\tconst elapsed = props.elapsedMs !== void 0 ? props.elapsedMs : props.frame !== void 0 && props.fps !== void 0 ? props.frame / props.fps * 1e3 : 0;\n\tconst duration$2 = props.durationMs !== void 0 ? props.durationMs : 3e3;\n\tconst entranceMs = props.isCaption ? anim?.in === \"none\" || !anim?.in ? 0 : duration$2 : anim?.entranceMs ? anim.entranceMs : anim?.in === \"none\" || !anim?.in ? 0 : duration$2;\n\tconst exitMs = props.isCaption ? 0 : anim?.exitMs ? anim.exitMs : anim?.out === \"none\" || !anim?.out ? 0 : duration$2;\n\tconst transitionIn = anim?.in || \"none\";\n\tconst transitionOut = anim?.out || \"none\";\n\tconst kinetic = anim?.kinetic || \"none\";\n\tconst smoothing = anim?.smoothing !== false;\n\tlet maxUnitIndex = 0;\n\tfor (const g$1 of layout.glyphs) if (!g$1.isSpace && g$1.unitIndex > maxUnitIndex) maxUnitIndex = g$1.unitIndex;\n\tconst totalUnits = maxUnitIndex + 1;\n\tconst perm = kinetic === \"shuffle\" || transitionIn === \"shuffle\" ? getShuffleOrder(totalUnits, props.text) : Array.from({ length: totalUnits }, (_, i) => i);\n\tif (props.textBackgroundColor) {\n\t\tconst strokeRadius = props.strokeRadius ?? props.borderRadius ?? 8;\n\t\tlet maxParagraphOpacity = 0;\n\t\tconst baseOpacity = props.opacity ?? 1;\n\t\tif (props.isVideoMode === false) maxParagraphOpacity = baseOpacity;\n\t\telse {\n\t\t\tfor (const glyph of layout.glyphs) {\n\t\t\t\tif (glyph.isSpace) continue;\n\t\t\t\tconst unitIdx = glyph.unitIndex;\n\t\t\t\tconst idx_i = perm[unitIdx] ?? unitIdx;\n\t\t\t\tconst { p_in, p_out } = computeUnitProgress(elapsed, duration$2, entranceMs, exitMs, idx_i, totalUnits, true);\n\t\t\t\tconst effect = applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration$2, entranceMs, exitMs, idx_i, baseOpacity, false);\n\t\t\t\tif (effect.visible && effect.opacity > maxParagraphOpacity) maxParagraphOpacity = effect.opacity;\n\t\t\t}\n\t\t\tfor (const emoji$1 of layout.emojis) {\n\t\t\t\tconst idx_i = perm[(props.animation?.applyBy === \"line\" ? 0 : Math.floor(emoji$1.x / (fontSize + letterSpacing))) % totalUnits] ?? 0;\n\t\t\t\tconst { p_in, p_out } = computeUnitProgress(elapsed, duration$2, entranceMs, exitMs, idx_i, totalUnits, true);\n\t\t\t\tconst effect = applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration$2, entranceMs, exitMs, idx_i, baseOpacity, true);\n\t\t\t\tif (effect.visible && effect.opacity > maxParagraphOpacity) maxParagraphOpacity = effect.opacity;\n\t\t\t}\n\t\t}\n\t\tif (maxParagraphOpacity > .001) {\n\t\t\tconst rectWidth = props.width != null ? props.width : measured.width + padding * 2;\n\t\t\tconst rectHeight = props.height != null ? props.height : measured.height + padding * 2;\n\t\t\tctx.renderer.drawRRect(pass, {\n\t\t\t\trect: {\n\t\t\t\t\tx: props.dstRect.x,\n\t\t\t\t\ty: props.dstRect.y,\n\t\t\t\t\twidth: rectWidth,\n\t\t\t\t\theight: rectHeight\n\t\t\t\t},\n\t\t\t\trx: strokeRadius,\n\t\t\t\try: strokeRadius\n\t\t\t}, props.textBackgroundColor, { opacity: maxParagraphOpacity });\n\t\t}\n\t}\n\tif (layout.marks && layout.marks.length > 0) for (const m of layout.marks) {\n\t\tconst rx = m.borderRadius ?? 4;\n\t\tctx.renderer.drawRRect(pass, {\n\t\t\trect: {\n\t\t\t\tx: props.dstRect.x + padding + m.x,\n\t\t\t\ty: textRect.y + padding + m.y,\n\t\t\t\twidth: m.width,\n\t\t\t\theight: m.height\n\t\t\t},\n\t\t\trx,\n\t\t\try: rx\n\t\t}, m.background, { opacity: props.opacity ?? 1 });\n\t}\n\tconst baseColor = parseColor(props.color ?? \"white\");\n\tconst highlightColor = parseColor(props.highlightColor ?? \"yellow\");\n\tconst trackingShifts = new Float32Array(layout.glyphs.length);\n\tlet layoutCenterX = 0;\n\tlet layoutCenterY = 0;\n\tif (layout.glyphs.length > 0) {\n\t\tconst nonSpace = layout.glyphs.filter((g$1) => !g$1.isSpace);\n\t\tif (nonSpace.length > 0) {\n\t\t\tlayoutCenterX = (nonSpace[0].x + nonSpace[nonSpace.length - 1].x) / 2;\n\t\t\tlayoutCenterY = (nonSpace[0].y + nonSpace[nonSpace.length - 1].y) / 2;\n\t\t}\n\t}\n\tconst counts = {\n\t\tcharsCount: layout.charsCount,\n\t\twordsCount: layout.wordsCount,\n\t\tlinesCount: layout.linesCount,\n\t\tlayoutCenter: {\n\t\t\tx: layoutCenterX,\n\t\t\ty: layoutCenterY\n\t\t}\n\t};\n\tif (props.animators && props.animators.length > 0) {\n\t\tfor (const anim$1 of props.animators) if (\"selectors\" in anim$1 && Array.isArray(anim$1.selectors)) {\n\t\t\tconst aeAnim = anim$1;\n\t\t\tif (aeAnim.props?.tracking !== void 0 && aeAnim.props.tracking !== 0) {\n\t\t\t\tconst trackingAmount = aeAnim.props.tracking;\n\t\t\t\tconst lineGlyphIndices = /* @__PURE__ */ new Map();\n\t\t\t\tfor (let gIdx = 0; gIdx < layout.glyphs.length; gIdx++) {\n\t\t\t\t\tconst lIdx = layout.glyphs[gIdx].lineIndex ?? 0;\n\t\t\t\t\tlet list = lineGlyphIndices.get(lIdx);\n\t\t\t\t\tif (!list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t\tlineGlyphIndices.set(lIdx, list);\n\t\t\t\t\t}\n\t\t\t\t\tlist.push(gIdx);\n\t\t\t\t}\n\t\t\t\tfor (const indices of lineGlyphIndices.values()) {\n\t\t\t\t\tconst weights = [];\n\t\t\t\t\tfor (const gIdx of indices) {\n\t\t\t\t\t\tconst g$1 = layout.glyphs[gIdx];\n\t\t\t\t\t\tconst w = evaluateAEAnimatorWeight(aeAnim, g$1, counts, props.signals, props.frame ?? 0, props.fps ?? 24);\n\t\t\t\t\t\tweights.push(w);\n\t\t\t\t\t}\n\t\t\t\t\tlet totalLineShift = 0;\n\t\t\t\t\tfor (let k = 0; k < indices.length - 1; k++) totalLineShift += trackingAmount * weights[k];\n\t\t\t\t\tlet cumShift = 0;\n\t\t\t\t\tfor (let k = 0; k < indices.length; k++) {\n\t\t\t\t\t\tconst gIdx = indices[k];\n\t\t\t\t\t\tlet shift = cumShift;\n\t\t\t\t\t\tif (align === \"center\") shift -= totalLineShift * .5;\n\t\t\t\t\t\telse if (align === \"right\" || align === \"end\") shift -= totalLineShift;\n\t\t\t\t\t\ttrackingShifts[gIdx] += shift;\n\t\t\t\t\t\tif (k < indices.length - 1) cumShift += trackingAmount * weights[k];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tlet scratchData = new Float32Array(Math.max(1024, instanceCount * 24));\n\tconst buildInstanceData = (targetFont, colorOverride, offsetX = 0, offsetY = 0, blurOverride, fontFilter) => {\n\t\tconst requiredLen = instanceCount * 24;\n\t\tif (scratchData.length < requiredLen) scratchData = new Float32Array(requiredLen);\n\t\tconst data = scratchData;\n\t\tlet visibleCount = 0;\n\t\tfor (let i = 0; i < layout.glyphs.length; i++) {\n\t\t\tconst glyph = layout.glyphs[i];\n\t\t\tif (glyph.isSpace) continue;\n\t\t\tif (fontFilter && !fontFilter(glyph)) continue;\n\t\t\tconst cp = targetFont.codePoints.get(glyph.cp.codePoint) || glyph.cp;\n\t\t\tif (!cp || cp.width === 0 || cp.height === 0) continue;\n\t\t\tconst unitIdx = glyph.unitIndex;\n\t\t\tconst idx_i = perm[unitIdx] ?? unitIdx;\n\t\t\tlet opacity = props.opacity ?? 1;\n\t\t\tlet transX = 0;\n\t\t\tlet transY = 0;\n\t\t\tlet rot = 0;\n\t\t\tlet scale = 1;\n\t\t\tlet blurAmount = blurOverride !== void 0 ? blurOverride : 0;\n\t\t\tif (props.isVideoMode !== false) {\n\t\t\t\tconst { p_in, p_out } = computeUnitProgress(elapsed, duration$2, entranceMs, exitMs, idx_i, totalUnits, true);\n\t\t\t\tconst effect = applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration$2, entranceMs, exitMs, idx_i, props.opacity ?? 1, false);\n\t\t\t\tif (!effect.visible) continue;\n\t\t\t\topacity = effect.opacity;\n\t\t\t\ttransX = effect.transX;\n\t\t\t\ttransY = effect.transY;\n\t\t\t\trot = effect.rot;\n\t\t\t\tscale = effect.scale;\n\t\t\t\tif (blurOverride === void 0) blurAmount = effect.blurAmount;\n\t\t\t}\n\t\t\tlet customScaleX = 1;\n\t\t\tlet customScaleY = 1;\n\t\t\tlet animatorColor;\n\t\t\tlet transZ = 0;\n\t\t\tlet chromaticShift = 0;\n\t\t\tlet dissolveProgress = 0;\n\t\t\tlet vfxParam = 0;\n\t\t\tlet skewM01 = 0;\n\t\t\tlet skewM10 = 0;\n\t\t\tlet anchorConfig;\n\t\t\tlet fillOpacity = 1;\n\t\t\tif (props.animators && props.animators.length > 0) {\n\t\t\t\tconst kResult = applyGlyphAnimators(props.animators, glyph, counts, {\n\t\t\t\t\ttransX,\n\t\t\t\t\ttransY,\n\t\t\t\t\trot,\n\t\t\t\t\tscale,\n\t\t\t\t\tscaleX: customScaleX,\n\t\t\t\t\tscaleY: customScaleY,\n\t\t\t\t\topacity,\n\t\t\t\t\tblurAmount,\n\t\t\t\t\tcolor: baseColor\n\t\t\t\t}, false, props.frame ?? 0, props.fps ?? 24, props.signals);\n\t\t\t\ttransX = kResult.transX;\n\t\t\t\ttransY = kResult.transY;\n\t\t\t\trot = kResult.rot;\n\t\t\t\tscale = kResult.scale;\n\t\t\t\tcustomScaleX = kResult.scaleX;\n\t\t\t\tcustomScaleY = kResult.scaleY;\n\t\t\t\topacity = kResult.opacity;\n\t\t\t\tif (blurOverride === void 0) blurAmount = kResult.blurAmount;\n\t\t\t\tif (kResult.color) animatorColor = kResult.color;\n\t\t\t\tif (kResult.lineSpacing !== void 0) transY += computeLineLeadingDisplacement(glyph.lineIndex, layout.linesCount, kResult.lineSpacing, kResult.lineAnchor ?? 0);\n\t\t\t\ttransZ = kResult.transZ ?? 0;\n\t\t\t\tchromaticShift = kResult.chromaticShift ?? 0;\n\t\t\t\tdissolveProgress = kResult.dissolveProgress ?? 0;\n\t\t\t\tvfxParam = kResult.vfxParam ?? 0;\n\t\t\t\tskewM01 = kResult.skewM01 ?? 0;\n\t\t\t\tskewM10 = kResult.skewM10 ?? 0;\n\t\t\t\tanchorConfig = kResult.anchorConfig;\n\t\t\t\tfillOpacity = kResult.fillOpacity ?? 1;\n\t\t\t}\n\t\t\ttransX += trackingShifts[i];\n\t\t\tlet glyphX = glyph.x;\n\t\t\tif (props.marquee) {\n\t\t\t\tconst elapsedSec = (props.frame ?? 0) / (props.fps ?? 24);\n\t\t\t\tconst contentWidth = layout.glyphs.length > 0 ? layout.glyphs[layout.glyphs.length - 1].x + fontSize : props.dstRect.width;\n\t\t\t\tglyphX = evaluateMarqueeOffset(glyph.x, props.dstRect.width, contentWidth, props.marquee, elapsedSec);\n\t\t\t}\n\t\t\tconst isHighlighted = props.highlightWordIndex !== void 0 && glyph.wordIndex === props.highlightWordIndex;\n\t\t\tconst spanColor = glyph.fill ? parseColor(glyph.fill) : void 0;\n\t\t\tconst col = animatorColor ?? colorOverride ?? (isHighlighted ? highlightColor : spanColor ?? baseColor);\n\t\t\tconst writeInstance = (boldShift) => {\n\t\t\t\tconst offset = visibleCount * 24;\n\t\t\t\tconst fontScale = glyph.fontScale ?? fontSize / targetFont.unitsPerEm;\n\t\t\t\tlet scaleX = cp.width * fontScale / 2 * customScaleX;\n\t\t\t\tlet scaleY = cp.height * fontScale / 2 * customScaleY;\n\t\t\t\tif (transZ !== 0) {\n\t\t\t\t\tconst perspective = 1200;\n\t\t\t\t\tconst depth = Math.max(100, perspective - transZ);\n\t\t\t\t\tconst pScale = depth > 1 ? perspective / depth : 1;\n\t\t\t\t\tscaleX *= pScale;\n\t\t\t\t\tscaleY *= pScale;\n\t\t\t\t}\n\t\t\t\tconst finalRot = rot + (glyph.pathTangentAngleRad ?? 0);\n\t\t\t\tlet biasX;\n\t\t\t\tlet biasY;\n\t\t\t\tif (glyph.pathTangentAngleRad !== void 0) {\n\t\t\t\t\tconst r0x = cp.bearingX * fontScale + scaleX;\n\t\t\t\t\tconst r0y = -cp.bearingY * fontScale + scaleY;\n\t\t\t\t\tconst cosT = Math.cos(finalRot);\n\t\t\t\t\tconst sinT = Math.sin(finalRot);\n\t\t\t\t\tconst rotatedR0x = r0x * cosT - r0y * sinT;\n\t\t\t\t\tconst rotatedR0y = r0x * sinT + r0y * cosT;\n\t\t\t\t\tbiasX = glyphX + rotatedR0x + props.dstRect.x + padding + offsetX + boldShift;\n\t\t\t\t\tbiasY = glyph.y + rotatedR0y + textRect.y + padding + offsetY;\n\t\t\t\t} else {\n\t\t\t\t\tbiasX = glyphX + cp.bearingX * fontScale + scaleX + props.dstRect.x + padding + offsetX + boldShift;\n\t\t\t\t\tbiasY = glyph.y - cp.bearingY * fontScale + scaleY + textRect.y + padding + offsetY;\n\t\t\t\t}\n\t\t\t\tif (anchorConfig) {\n\t\t\t\t\tconst pivot = computeAnchorPivotOffset({\n\t\t\t\t\t\twidth: cp.width * fontScale,\n\t\t\t\t\t\theight: cp.height * fontScale,\n\t\t\t\t\t\tascender: (targetFont.ascender ?? 800) * fontScale,\n\t\t\t\t\t\tdescender: (targetFont.descender ?? -200) * fontScale\n\t\t\t\t\t}, anchorConfig);\n\t\t\t\t\tconst cosR = Math.cos(finalRot);\n\t\t\t\t\tconst sinR = Math.sin(finalRot);\n\t\t\t\t\tconst pivotShiftX = pivot.px * (1 - cosR * scale) + pivot.py * (sinR * scale);\n\t\t\t\t\tconst pivotShiftY = -pivot.px * (sinR * scale) + pivot.py * (1 - cosR * scale);\n\t\t\t\t\tbiasX += pivotShiftX;\n\t\t\t\t\tbiasY += pivotShiftY;\n\t\t\t\t}\n\t\t\t\tif (skewM01 !== 0 || skewM10 !== 0) {\n\t\t\t\t\tbiasX += scaleY * skewM01;\n\t\t\t\t\tbiasY += scaleX * skewM10;\n\t\t\t\t}\n\t\t\t\tdata[offset + 0] = scaleX;\n\t\t\t\tdata[offset + 1] = scaleY;\n\t\t\t\tdata[offset + 2] = biasX;\n\t\t\t\tdata[offset + 3] = biasY;\n\t\t\t\tdata[offset + 4] = cp.width;\n\t\t\t\tdata[offset + 5] = cp.height;\n\t\t\t\tdata[offset + 6] = cp.width / cp.bandDimX;\n\t\t\t\tdata[offset + 7] = cp.height / cp.bandDimY;\n\t\t\t\tdata[offset + 8] = cp.bandCount - 1;\n\t\t\t\tdata[offset + 9] = cp.bandCount - 1;\n\t\t\t\tdata[offset + 10] = cp.bandsTexCoordX;\n\t\t\t\tdata[offset + 11] = cp.bandsTexCoordY;\n\t\t\t\tdata[offset + 12] = finalRot;\n\t\t\t\tdata[offset + 13] = scale;\n\t\t\t\tdata[offset + 14] = transX;\n\t\t\t\tdata[offset + 15] = transY;\n\t\t\t\tdata[offset + 16] = col.r;\n\t\t\t\tdata[offset + 17] = col.g;\n\t\t\t\tdata[offset + 18] = col.b;\n\t\t\t\tconst spanOpacity = glyph.opacity ?? 1;\n\t\t\t\tdata[offset + 19] = col.a * opacity * fillOpacity * spanOpacity;\n\t\t\t\tdata[offset + 20] = blurAmount;\n\t\t\t\tdata[offset + 21] = chromaticShift;\n\t\t\t\tdata[offset + 22] = dissolveProgress;\n\t\t\t\tdata[offset + 23] = vfxParam;\n\t\t\t\tvisibleCount++;\n\t\t\t};\n\t\t\twriteInstance(0);\n\t\t}\n\t\treturn {\n\t\t\tdata,\n\t\t\tvisibleCount\n\t\t};\n\t};\n\tif (props.shadows && props.shadows.length > 0) for (const shadow of props.shadows) {\n\t\tconst shadowColor = parseColor(shadow.color);\n\t\tconst dx = shadow.offset?.x ?? 0;\n\t\tconst dy = shadow.offset?.y ?? 0;\n\t\tconst blur = shadow.blurRadius ?? 0;\n\t\tconst { data: shadowData, visibleCount: shadowVisibleCount } = buildInstanceData(fillFont, shadowColor, dx, dy, blur);\n\t\tif (shadowVisibleCount > 0) {\n\t\t\tconst drawInstances = shadowData.subarray(0, shadowVisibleCount * 24);\n\t\t\tconst slant$1 = props.fontStyle === \"italic\" ? .21 : 0;\n\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), fillFont, drawInstances, shadowVisibleCount, shadow.color, ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\topacity: props.opacity ?? 1,\n\t\t\t\ttransform: props.matrix,\n\t\t\t\tcustomParam: slant$1\n\t\t\t});\n\t\t}\n\t}\n\tconst longShadowAnim = props.animators?.find((a) => \"props\" in a && a.props?.longShadow && (a.props?.longShadow?.length ?? 0) > 0);\n\tif (longShadowAnim && \"props\" in longShadowAnim) {\n\t\tconst animObj = longShadowAnim;\n\t\tconst ls = animObj.props?.longShadow;\n\t\tif (ls) {\n\t\t\tconst spProp = animObj.props?.spring;\n\t\t\tlet length = ls.length;\n\t\t\tlet angle = ls.angle;\n\t\t\tif (spProp) {\n\t\t\t\tconst sp = evaluateSpringProgress((props.frame ?? 0) / (props.fps ?? 30), spProp.stiffness, spProp.damping, spProp.mass, spProp.initialVelocity);\n\t\t\t\tlength = Math.max(0, ls.length * sp);\n\t\t\t\tangle = ls.angle + (1 - Math.min(1, sp)) * 25;\n\t\t\t} else {\n\t\t\t\tconst easeOut = 1 - (1 - Math.min(1, (props.frame ?? 0) / 36)) ** 3;\n\t\t\t\tlength = ls.length * easeOut;\n\t\t\t}\n\t\t\tconst rad = angle * Math.PI / 180;\n\t\t\tconst totalSteps = Math.max(4, Math.min(64, ls.steps ?? 16));\n\t\t\tconst stepLen = length / totalSteps;\n\t\t\tconst shadowCol = parseColor(ls.color ?? \"#000000\");\n\t\t\tfor (let s = 1; s <= totalSteps; s++) {\n\t\t\t\tconst dist = s * stepLen;\n\t\t\t\tconst sx = dist * Math.cos(rad);\n\t\t\t\tconst sy = dist * Math.sin(rad);\n\t\t\t\tconst t = s / totalSteps;\n\t\t\t\tconst stepOpacity = (ls.startOpacity ?? .8) * (1 - t) + (ls.endOpacity ?? 0) * t;\n\t\t\t\tconst { data: sliceData, visibleCount: sliceCount } = buildInstanceData(slugFont, {\n\t\t\t\t\t...shadowCol,\n\t\t\t\t\ta: shadowCol.a * stepOpacity\n\t\t\t\t}, sx, sy, 0);\n\t\t\t\tif (sliceCount > 0) {\n\t\t\t\t\tconst drawInstances = sliceData.subarray(0, sliceCount * 24);\n\t\t\t\t\tconst slant$1 = props.fontStyle === \"italic\" ? .21 : 0;\n\t\t\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), fillFont, drawInstances, sliceCount, ls.color ?? \"black\", ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\t\t\topacity: (props.opacity ?? 1) * stepOpacity,\n\t\t\t\t\t\ttransform: props.matrix,\n\t\t\t\t\t\tcustomParam: slant$1\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (hasStroke && strokeFont) {\n\t\tconst strokeColor = parseColor(props.stroke);\n\t\tconst { data: strokeData, visibleCount: strokeVisibleCount } = buildInstanceData(strokeFont, strokeColor);\n\t\tif (strokeVisibleCount > 0) {\n\t\t\tconst drawInstances = strokeData.subarray(0, strokeVisibleCount * 24);\n\t\t\tconst slant$1 = props.fontStyle === \"italic\" ? .21 : 0;\n\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), strokeFont, drawInstances, strokeVisibleCount, props.stroke ?? \"#000000\", ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\topacity: props.opacity ?? 1,\n\t\t\t\ttransform: props.matrix,\n\t\t\t\tcustomParam: slant$1\n\t\t\t});\n\t\t}\n\t}\n\tconst uniqueFonts = /* @__PURE__ */ new Set();\n\tlet hasMultiFonts = false;\n\tfor (const g$1 of layout.glyphs) if (g$1.font && g$1.font !== fillFont) {\n\t\tuniqueFonts.add(g$1.font);\n\t\thasMultiFonts = true;\n\t}\n\tconst slant = props.fontStyle === \"italic\" ? .21 : 0;\n\tif (hasMultiFonts) {\n\t\tuniqueFonts.add(fillFont);\n\t\tfor (const currentFont of uniqueFonts) {\n\t\t\tif (ctx.device && !currentFont.curvesTex) SlugFontCache.ensureTextures(ctx.device, currentFont);\n\t\t\tif (!currentFont.curvesTex) continue;\n\t\t\tconst { data: fontData, visibleCount: fontVisibleCount } = buildInstanceData(currentFont, void 0, 0, 0, void 0, (g$1) => (g$1.font ?? fillFont) === currentFont);\n\t\t\tif (fontVisibleCount > 0) {\n\t\t\t\tconst drawInstances = fontData.subarray(0, fontVisibleCount * 24);\n\t\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), currentFont, drawInstances, fontVisibleCount, props.color ?? \"white\", ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\t\topacity: props.opacity ?? 1,\n\t\t\t\t\ttransform: props.matrix,\n\t\t\t\t\tcustomParam: slant\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst { data: mainData, visibleCount: mainVisibleCount } = buildInstanceData(fillFont);\n\t\tif (mainVisibleCount > 0) {\n\t\t\tconst drawInstances = mainData.subarray(0, mainVisibleCount * 24);\n\t\t\tctx.renderer.slugPipeline.draw(pass, ctx.renderer.getTransformStack(), fillFont, drawInstances, mainVisibleCount, props.color ?? \"white\", ctx.renderer.getSurfaceWidth(), ctx.renderer.getSurfaceHeight(), {\n\t\t\t\topacity: props.opacity ?? 1,\n\t\t\t\ttransform: props.matrix,\n\t\t\t\tcustomParam: slant\n\t\t\t});\n\t\t}\n\t}\n\tfor (const emoji$1 of layout.emojis) {\n\t\tconst emojiUnitIdx = props.animation?.applyBy === \"line\" ? 0 : Math.floor(emoji$1.x / (fontSize + letterSpacing));\n\t\tconst idx_i = perm[emojiUnitIdx % totalUnits] ?? 0;\n\t\tlet opacity = props.opacity ?? 1;\n\t\tlet transX = 0;\n\t\tlet transY = 0;\n\t\tlet rot = 0;\n\t\tlet scale = 1;\n\t\tif (props.isVideoMode !== false) {\n\t\t\tconst { p_in, p_out } = computeUnitProgress(elapsed, duration$2, entranceMs, exitMs, idx_i, totalUnits, true);\n\t\t\tconst effect = applyAnimationEffects(p_in, p_out, smoothing, transitionIn, transitionOut, kinetic, elapsed, duration$2, entranceMs, exitMs, idx_i, props.opacity ?? 1, true);\n\t\t\tif (!effect.visible) continue;\n\t\t\topacity = effect.opacity;\n\t\t\ttransX = effect.transX;\n\t\t\ttransY = effect.transY;\n\t\t\trot = effect.rot;\n\t\t\tscale = effect.scale;\n\t\t}\n\t\tif (props.animators && props.animators.length > 0) {\n\t\t\tconst kResult = applyGlyphAnimators(props.animators, {\n\t\t\t\tcharIndex: emojiUnitIdx,\n\t\t\t\twordIndex: 0,\n\t\t\t\tlineIndex: emoji$1.lineIndex\n\t\t\t}, {\n\t\t\t\tcharsCount: layout.charsCount,\n\t\t\t\twordsCount: layout.wordsCount,\n\t\t\t\tlinesCount: layout.linesCount\n\t\t\t}, {\n\t\t\t\ttransX,\n\t\t\t\ttransY,\n\t\t\t\trot,\n\t\t\t\tscale,\n\t\t\t\tscaleX: 1,\n\t\t\t\tscaleY: 1,\n\t\t\t\topacity,\n\t\t\t\tblurAmount: 0\n\t\t\t}, true);\n\t\t\ttransX = kResult.transX;\n\t\t\ttransY = kResult.transY;\n\t\t\trot = kResult.rot;\n\t\t\tscale = kResult.scale;\n\t\t\topacity = kResult.opacity;\n\t\t}\n\t\tconst emojiTex = getOrCreateEmojiTexture(ctx.device, emoji$1.char, emoji$1.size);\n\t\tconst localEmojiSize = emoji$1.size * 1.5;\n\t\tconst offsetAdjustment = (localEmojiSize - emoji$1.size) / 2;\n\t\tconst emojiDstRect = {\n\t\t\tx: props.dstRect.x + emoji$1.x + padding - offsetAdjustment,\n\t\t\ty: textRect.y + emoji$1.y + padding - offsetAdjustment,\n\t\t\twidth: localEmojiSize,\n\t\t\theight: localEmojiSize\n\t\t};\n\t\tlet localM = new DOMMatrix();\n\t\tconst emojiCenterX = emojiDstRect.x + localEmojiSize / 2;\n\t\tconst emojiCenterY = emojiDstRect.y + localEmojiSize / 2;\n\t\tlocalM = localM.translate(emojiCenterX, emojiCenterY);\n\t\tif (transX !== 0 || transY !== 0) localM = localM.translate(transX, transY);\n\t\tif (rot !== 0) localM = localM.rotate(rot);\n\t\tif (scale !== 1) localM = localM.scale(scale);\n\t\tlocalM = localM.translate(-emojiCenterX, -emojiCenterY);\n\t\tconst emojiMatrix = props.matrix ? props.matrix.multiply(localM) : localM;\n\t\tctx.renderer.drawTextureRegion(pass, emojiTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: emojiTex.width,\n\t\t\theight: emojiTex.height\n\t\t}, emojiDstRect, {\n\t\t\topacity,\n\t\t\ttransform: emojiMatrix\n\t\t});\n\t}\n\tif (props.typewriter?.cursor?.enabled && twState && twState.isCursorVisible && (!props.typewriter.cursor.hideOnComplete || twState.visibleChars < props.text.length)) {\n\t\tconst cursorCfg = props.typewriter.cursor;\n\t\tconst cursorCol = cursorCfg.color ?? props.color ?? \"white\";\n\t\tconst cursorWidth = cursorCfg.width ?? 2.5;\n\t\tconst cursorSpacing = cursorCfg.spacing ?? 3;\n\t\tlet cursorX = props.dstRect.x + padding;\n\t\tlet cursorY = textRect.y + padding;\n\t\tif (layout.glyphs.length > 0) {\n\t\t\tconst lastG = layout.glyphs[layout.glyphs.length - 1];\n\t\t\tconst fontScale = fontSize / slugFont.unitsPerEm;\n\t\t\tconst adv = (lastG.cp?.advanceWidth || 0) * fontScale;\n\t\t\tcursorX = lastG.x + props.dstRect.x + padding + adv + cursorSpacing;\n\t\t\tcursorY = lastG.y + textRect.y + padding;\n\t\t}\n\t\tif (cursorCfg.style === \"underscore\") ctx.renderer.drawRect(pass, {\n\t\t\tx: cursorX,\n\t\t\ty: cursorY,\n\t\t\twidth: fontSize * .5,\n\t\t\theight: cursorWidth\n\t\t}, cursorCol, 0, { opacity: props.opacity ?? 1 });\n\t\telse if (cursorCfg.style === \"block\") ctx.renderer.drawRect(pass, {\n\t\t\tx: cursorX,\n\t\t\ty: cursorY - fontSize * .8,\n\t\t\twidth: fontSize * .5,\n\t\t\theight: fontSize\n\t\t}, cursorCol, 0, { opacity: props.opacity ?? 1 });\n\t\telse ctx.renderer.drawRect(pass, {\n\t\t\tx: cursorX,\n\t\t\ty: cursorY - fontSize * .8,\n\t\t\twidth: cursorWidth,\n\t\t\theight: fontSize\n\t\t}, cursorCol, 0, { opacity: props.opacity ?? 1 });\n\t}\n}\n\n//#endregion\n//#region src/nodes/caption.ts\nfunction toSeconds(time$2) {\n\tconst parts = time$2.trim().replace(\",\", \".\").split(\":\");\n\tif (parts.length < 2 || parts.length > 3) throw new Error(`Invalid timestamp: ${time$2}`);\n\tif (parts.length === 2) {\n\t\tconst [m$1, s$1] = parts;\n\t\treturn parseInt(m$1, 10) * 60 + parseFloat(s$1);\n\t}\n\tconst [h, m, s] = parts;\n\treturn parseInt(h, 10) * 3600 + parseInt(m, 10) * 60 + parseFloat(s);\n}\nfunction parseSrt(input) {\n\tconst inputLines = input.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n\tconst captions = [];\n\tfor (let i = 0; i < inputLines.length; i++) {\n\t\tconst line = inputLines[i];\n\t\tconst nextLine = inputLines[i + 1];\n\t\tif (line?.match(/([0-9]+)/) && nextLine?.includes(\" --> \")) {\n\t\t\tconst nextLineSplit = nextLine.split(\" --> \");\n\t\t\tconst start = toSeconds(nextLineSplit[0]);\n\t\t\tconst end = toSeconds(nextLineSplit[1]);\n\t\t\tcaptions.push({\n\t\t\t\ttext: \"\",\n\t\t\t\tstartMs: start * 1e3,\n\t\t\t\tendMs: end * 1e3,\n\t\t\t\tconfidence: 1,\n\t\t\t\ttimestampMs: (start + end) / 2 * 1e3\n\t\t\t});\n\t\t} else if (line?.includes(\" --> \")) {} else if (line?.trim() === \"\") {\n\t\t\tif (captions.length > 0) captions[captions.length - 1].text = captions[captions.length - 1].text.trim();\n\t\t} else if (captions.length > 0) captions[captions.length - 1].text += line + \"\\n\";\n\t}\n\treturn { captions: captions.map((l) => ({\n\t\t...l,\n\t\ttext: l.text.trimEnd()\n\t})) };\n}\nfunction getActiveCaptionCue(captions, currentMs, isVideoMode = true) {\n\tif (!captions || captions.length === 0) return null;\n\tconst cue = captions.find((c) => currentMs >= c.startMs && currentMs < c.endMs);\n\tif (cue) return cue;\n\tif (!isVideoMode && captions.length > 0) return captions[0];\n\treturn null;\n}\nfunction measureMaxCaptionHeight(captions, style, maxWidth) {\n\tif (!captions || captions.length === 0) return 160;\n\tconst fontSize = style.fontSize ?? 48;\n\tconst letterSpacing = style.letterSpacing ?? 0;\n\tconst calculatedLineHeight = style.lineHeight !== void 0 && style.lineHeight < 10 ? style.lineHeight * fontSize : style.lineHeight ?? fontSize * 1.2;\n\tconst padding = style.padding ?? (style.background ? 12 : 0);\n\tconst availableW = maxWidth ? Math.max(10, maxWidth - padding * 2) : void 0;\n\tlet fontFamily = style.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tconst slugFont = SlugFontCache.getFont(fontFamily, style.fontWeight, null);\n\tlet maxH = 0;\n\tfor (const cue of captions) {\n\t\tif (!cue.text) continue;\n\t\tlet cueH = 0;\n\t\tif (slugFont && slugFont.codePoints) {\n\t\t\tconst measured = SlugGeometry.measure(cue.text, slugFont, fontSize, letterSpacing, calculatedLineHeight, availableW);\n\t\t\tcueH = Math.ceil(measured.height);\n\t\t} else {\n\t\t\tconst lines = cue.text.split(\"\\n\");\n\t\t\tlet totalWrappedLines = 0;\n\t\t\tfor (const l of lines) if (availableW) {\n\t\t\t\tconst estLineWidth = l.length * fontSize * .55 + letterSpacing * l.length;\n\t\t\t\tconst wrapCount = Math.max(1, Math.ceil(estLineWidth / availableW));\n\t\t\t\ttotalWrappedLines += wrapCount;\n\t\t\t} else totalWrappedLines += 1;\n\t\t\tcueH = Math.ceil(totalWrappedLines * calculatedLineHeight);\n\t\t}\n\t\tconst totalH = cueH + padding * 2;\n\t\tif (totalH > maxH) maxH = totalH;\n\t}\n\treturn Math.max(20, maxH || 160);\n}\nvar SrtLoaderCache = class {\n\tcache = /* @__PURE__ */ new Map();\n\tresolvedCache = /* @__PURE__ */ new Map();\n\tgetCached(src) {\n\t\treturn this.resolvedCache.get(src);\n\t}\n\tsetCached(src, captions) {\n\t\tthis.resolvedCache.set(src, captions);\n\t}\n\tclear() {\n\t\tthis.cache.clear();\n\t\tthis.resolvedCache.clear();\n\t}\n\tasync load(src) {\n\t\tif (!src) return [];\n\t\tconst cached$1 = this.resolvedCache.get(src);\n\t\tif (cached$1) return cached$1;\n\t\tlet promise = this.cache.get(src);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tlet srtString = \"\";\n\t\t\t\tif (src.startsWith(\"data:\")) {\n\t\t\t\t\tconst commaIndex = src.indexOf(\",\");\n\t\t\t\t\tif (commaIndex !== -1) {\n\t\t\t\t\t\tconst metadata = src.substring(0, commaIndex);\n\t\t\t\t\t\tconst data = src.substring(commaIndex + 1);\n\t\t\t\t\t\tsrtString = metadata.includes(\";base64\") ? typeof Buffer !== \"undefined\" ? Buffer.from(data, \"base64\").toString(\"utf-8\") : new TextDecoder().decode(Uint8Array.from(atob(data), (c) => c.charCodeAt(0))) : decodeURIComponent(data);\n\t\t\t\t\t}\n\t\t\t\t} else if (src.includes(\"-->\")) srtString = src;\n\t\t\t\telse if (src.startsWith(\"http://\") || src.startsWith(\"https://\")) {\n\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SRT: ${src}`);\n\t\t\t\t\tsrtString = await res.text();\n\t\t\t\t} else {\n\t\t\t\t\tlet filePath = src;\n\t\t\t\t\tif (filePath.startsWith(\"file://\")) try {\n\t\t\t\t\t\tfilePath = new URL(filePath).pathname;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tfilePath = filePath.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof process !== \"undefined\" && process.versions?.node) try {\n\t\t\t\t\t\tsrtString = await (await import(\n\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\"node:fs/promises\"\n)).readFile(filePath, \"utf-8\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SRT: ${src}`);\n\t\t\t\t\t\tsrtString = await res.text();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SRT: ${src}`);\n\t\t\t\t\t\tsrtString = await res.text();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst list = parseSrt(srtString).captions;\n\t\t\t\tthis.resolvedCache.set(src, list);\n\t\t\t\treturn list;\n\t\t\t})();\n\t\t\tthis.cache.set(src, promise);\n\t\t\tpromise.catch(() => {\n\t\t\t\tthis.cache.delete(src);\n\t\t\t\tthis.resolvedCache.delete(src);\n\t\t\t});\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst srtLoader = new SrtLoaderCache();\nasync function drawCaptionNode(ctx, pass, props) {\n\tif (!props.src) return;\n\tconst captions = await srtLoader.load(props.src);\n\tif (!captions || captions.length === 0) return;\n\tconst caption = getActiveCaptionCue(captions, props.frame / props.fps * 1e3, props.isVideoMode !== false);\n\tif (!caption) return;\n\tconst text = caption.text;\n\tconst containerWidth = props.dstRect.width;\n\tconst padding = props.padding ?? (props.textBackgroundColor ? 12 : 0);\n\tconst maxAvailableWidth = Math.max(10, containerWidth - padding * 2);\n\tconst maxWidth = props.maxWidth !== void 0 ? Math.min(props.maxWidth, maxAvailableWidth) : maxAvailableWidth;\n\tconst fontSize = props.fontSize ?? 48;\n\tlet fontFamily = props.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) return;\n\tconst letterSpacing = props.letterSpacing ?? 0;\n\tconst slugFont = SlugFontCache.getFont(fontFamily, props.fontWeight, ctx.device);\n\tif (!slugFont || !slugFont.curvesTex) {\n\t\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\t\tSlugFontCache.preloadSlugFont(ctx.device, fontFamily, fontUrl, void 0, props.renderId).catch((err) => {\n\t\t\tconsole.warn(`[drawCaptionNode] Failed to load Slug font for ${fontFamily}:`, err);\n\t\t});\n\t\treturn;\n\t}\n\tconst calculatedLineHeight = props.lineHeight !== void 0 && props.lineHeight < 10 ? props.lineHeight * fontSize : props.lineHeight ?? fontSize * 1.2;\n\tconst measured = SlugGeometry.measure(text, slugFont, fontSize, letterSpacing, calculatedLineHeight, maxWidth);\n\tconst finalWidth = measured.width;\n\tconst finalHeight = measured.height;\n\tconst rectWidth = finalWidth + padding * 2;\n\tconst rectHeight = finalHeight + padding * 2;\n\tconst align = props.align ?? \"center\";\n\tlet rectX = 0;\n\tif (align === \"center\") rectX = Math.max(0, (containerWidth - rectWidth) / 2);\n\telse if (align === \"right\") rectX = Math.max(0, containerWidth - rectWidth);\n\tconst containerHeight = props.dstRect.height;\n\tconst verticalAlign = props.verticalAlign ?? props.textAlignVertical ?? \"bottom\";\n\tlet rectY = 0;\n\tif (verticalAlign === \"top\") rectY = 0;\n\telse if (verticalAlign === \"middle\") rectY = (containerHeight - rectHeight) / 2;\n\telse rectY = containerHeight - rectHeight;\n\tconst dstRect = {\n\t\tx: props.dstRect.x + rectX,\n\t\ty: props.dstRect.y + rectY,\n\t\twidth: rectWidth,\n\t\theight: rectHeight\n\t};\n\tconst opacity = props.opacity ?? 1;\n\tif (props.textBackgroundColor) {\n\t\tconst radius = props.strokeRadius ?? props.borderRadius ?? 8;\n\t\tctx.renderer.drawRRect(pass, {\n\t\t\trect: dstRect,\n\t\t\trx: radius,\n\t\t\try: radius\n\t\t}, props.textBackgroundColor, { opacity });\n\t}\n\tconst paragraphDstRect = {\n\t\tx: dstRect.x + padding,\n\t\ty: dstRect.y + padding,\n\t\twidth: finalWidth,\n\t\theight: finalHeight\n\t};\n\tdrawParagraphNode(ctx, pass, {\n\t\t...props,\n\t\ttext,\n\t\tdstRect: paragraphDstRect,\n\t\twidth: maxWidth,\n\t\theight: finalHeight,\n\t\talign,\n\t\topacity,\n\t\tisCaption: true,\n\t\tanimation: void 0,\n\t\ttextBackgroundColor: void 0\n\t});\n}\n\n//#endregion\n//#region src/nodes/chart.ts\nconst nodeRequire = typeof import.meta?.url === \"string\" ? createRequire(import.meta.url) : null;\nvar HeadlessGPUCanvasContextMock = class {\n\ttarget;\n\tconfiguredFormat = null;\n\tconstructor(target) {\n\t\tthis.target = target;\n\t}\n\tconfigure(config$1) {\n\t\tthis.configuredFormat = config$1.format;\n\t}\n\tunconfigure() {\n\t\tthis.configuredFormat = null;\n\t}\n\tgetCurrentTexture() {\n\t\treturn this.target.currentTexture;\n\t}\n};\nvar HeadlessChartCanvasElementMock = class {\n\twidth;\n\theight;\n\tclientWidth;\n\tclientHeight;\n\tstyle = {\n\t\tdisplay: \"block\",\n\t\twidth: \"100%\",\n\t\theight: \"100%\",\n\t\tposition: \"absolute\",\n\t\tinset: \"0\"\n\t};\n\tgpuContext;\n\tctx2d = null;\n\tconstructor(target) {\n\t\tthis.width = target.width;\n\t\tthis.height = target.height;\n\t\tthis.clientWidth = target.width;\n\t\tthis.clientHeight = target.height;\n\t\tthis.gpuContext = new HeadlessGPUCanvasContextMock(target);\n\t}\n\tgetContext(type) {\n\t\tif (type === \"webgpu\") return this.gpuContext;\n\t\tif (type === \"2d\") {\n\t\t\tif (!this.ctx2d) {\n\t\t\t\ttry {\n\t\t\t\t\tif (nodeRequire) {\n\t\t\t\t\t\tconst { Canvas } = nodeRequire(\"skia-canvas\");\n\t\t\t\t\t\tthis.ctx2d = new Canvas(this.width, this.height).getContext(\"2d\");\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t\tif (!this.ctx2d) this.ctx2d = {\n\t\t\t\t\tsave: () => {},\n\t\t\t\t\trestore: () => {},\n\t\t\t\t\tsetTransform: () => {},\n\t\t\t\t\tclearRect: () => {},\n\t\t\t\t\tfillText: () => {},\n\t\t\t\t\tmeasureText: (text) => ({ width: text.length * 7 })\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn this.ctx2d;\n\t\t}\n\t\treturn null;\n\t}\n\tgetBoundingClientRect() {\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: this.clientWidth,\n\t\t\theight: this.clientHeight,\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\tright: this.clientWidth,\n\t\t\tbottom: this.clientHeight\n\t\t};\n\t}\n\taddEventListener(_type, _listener, _options) {}\n\tremoveEventListener(_type, _listener, _options) {}\n\tsetPointerCapture(_pointerId) {}\n\treleasePointerCapture(_pointerId) {}\n\thasPointerCapture(_pointerId) {\n\t\treturn false;\n\t}\n\tremove() {}\n};\nvar HeadlessChartContainerMock = class {\n\tstyle = {\n\t\tposition: \"relative\",\n\t\toverflow: \"hidden\"\n\t};\n\tchildren = [];\n\tclientWidth;\n\tclientHeight;\n\tconstructor(width, height) {\n\t\tthis.clientWidth = width;\n\t\tthis.clientHeight = height;\n\t}\n\tappendChild(child) {\n\t\tthis.children.push(child);\n\t\treturn child;\n\t}\n\tremoveChild(child) {\n\t\tthis.children = this.children.filter((c) => c !== child);\n\t\treturn child;\n\t}\n\tgetBoundingClientRect() {\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: this.clientWidth,\n\t\t\theight: this.clientHeight,\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\tright: this.clientWidth,\n\t\t\tbottom: this.clientHeight\n\t\t};\n\t}\n};\nlet activeCanvasMockForNextCreation = null;\nvar ChartGPUEngineBridge = class {\n\tchartInstance = null;\n\ttarget;\n\tcontainerMock;\n\tcanvasMock;\n\tdpr;\n\tinitialOptions = null;\n\townsTexture;\n\tlastRenderedProgress = null;\n\tconstructor(options) {\n\t\tthis.dpr = options.dpr ?? 1;\n\t\tconst texW = Math.max(1, Math.round(options.width * this.dpr));\n\t\tconst texH = Math.max(1, Math.round(options.height * this.dpr));\n\t\tconst renderAttachment = typeof GPUTextureUsage !== \"undefined\" ? GPUTextureUsage.RENDER_ATTACHMENT : 16;\n\t\tconst textureBinding = typeof GPUTextureUsage !== \"undefined\" ? GPUTextureUsage.TEXTURE_BINDING : 4;\n\t\tconst copySrc = typeof GPUTextureUsage !== \"undefined\" ? GPUTextureUsage.COPY_SRC : 1;\n\t\tconst copyDst = typeof GPUTextureUsage !== \"undefined\" ? GPUTextureUsage.COPY_DST : 2;\n\t\tconst texture = options.device.createTexture({\n\t\t\tsize: [texW, texH],\n\t\t\tformat: options.colorFormat ?? \"rgba8unorm\",\n\t\t\tusage: renderAttachment | textureBinding | copySrc | copyDst\n\t\t});\n\t\tthis.ownsTexture = true;\n\t\tthis.target = {\n\t\t\tdevice: options.device,\n\t\t\tformat: options.colorFormat ?? \"rgba8unorm\",\n\t\t\twidth: texW,\n\t\t\theight: texH,\n\t\t\tcurrentTexture: texture\n\t\t};\n\t\tthis.containerMock = new HeadlessChartContainerMock(options.width, options.height);\n\t\tthis.canvasMock = new HeadlessChartCanvasElementMock(this.target);\n\t}\n\tget width() {\n\t\treturn this.target.width;\n\t}\n\tget height() {\n\t\treturn this.target.height;\n\t}\n\tget currentTexture() {\n\t\treturn this.target.currentTexture;\n\t}\n\tsetupHeadlessDOM() {\n\t\tconst gEnv = globalThis;\n\t\tif (typeof gEnv.document === \"undefined\") gEnv.document = {};\n\t\tconst doc = gEnv.document;\n\t\tconst originalCreateElement = typeof doc.createElement === \"function\" ? doc.createElement.bind(doc) : null;\n\t\tdoc.createElement = (tag, ...args) => {\n\t\t\tif (tag === \"canvas\") {\n\t\t\t\tif (activeCanvasMockForNextCreation) {\n\t\t\t\t\tconst mock = activeCanvasMockForNextCreation;\n\t\t\t\t\tactiveCanvasMockForNextCreation = null;\n\t\t\t\t\treturn mock;\n\t\t\t\t}\n\t\t\t\tif (originalCreateElement) try {\n\t\t\t\t\tconst el = originalCreateElement(tag, ...args);\n\t\t\t\t\tif (el) {\n\t\t\t\t\t\tconst elObj = el;\n\t\t\t\t\t\tif (typeof elObj.remove !== \"function\") elObj.remove = () => {};\n\t\t\t\t\t\tif (typeof elObj.addEventListener !== \"function\") elObj.addEventListener = () => {};\n\t\t\t\t\t\tif (typeof elObj.removeEventListener !== \"function\") elObj.removeEventListener = () => {};\n\t\t\t\t\t\tif (!elObj.style) elObj.style = {};\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t} catch (_) {}\n\t\t\t\treturn new HeadlessChartCanvasElementMock(this.target);\n\t\t\t}\n\t\t\tif (originalCreateElement) try {\n\t\t\t\tconst el = originalCreateElement(tag, ...args);\n\t\t\t\tif (el) {\n\t\t\t\t\tconst elObj = el;\n\t\t\t\t\tif (typeof elObj.remove !== \"function\") elObj.remove = () => {};\n\t\t\t\t\tif (typeof elObj.addEventListener !== \"function\") elObj.addEventListener = () => {};\n\t\t\t\t\tif (typeof elObj.removeEventListener !== \"function\") elObj.removeEventListener = () => {};\n\t\t\t\t\tif (!elObj.style) elObj.style = {};\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t} catch (_) {}\n\t\t\treturn {\n\t\t\t\tstyle: {},\n\t\t\t\tappendChild: () => {},\n\t\t\t\tremoveChild: () => {},\n\t\t\t\tremove: () => {},\n\t\t\t\taddEventListener: () => {},\n\t\t\t\tremoveEventListener: () => {}\n\t\t\t};\n\t\t};\n\t\tif (typeof doc.createElementNS === \"undefined\") doc.createElementNS = (_ns, _tag) => ({\n\t\t\tstyle: {},\n\t\t\tsetAttribute: () => {},\n\t\t\tgetAttribute: () => null,\n\t\t\tappendChild: () => {},\n\t\t\tremoveChild: () => {},\n\t\t\tremove: () => {},\n\t\t\taddEventListener: () => {},\n\t\t\tremoveEventListener: () => {}\n\t\t});\n\t\tif (typeof doc.getElementsByTagName === \"undefined\") doc.getElementsByTagName = () => [];\n\t\tif (typeof gEnv.window === \"undefined\") gEnv.window = globalThis;\n\t\tconst win = gEnv.window;\n\t\tif (typeof win.devicePixelRatio === \"undefined\") win.devicePixelRatio = this.dpr;\n\t\tif (typeof win.getComputedStyle === \"undefined\") win.getComputedStyle = () => ({\n\t\t\tposition: \"relative\",\n\t\t\toverflow: \"hidden\",\n\t\t\tfontFamily: \"Inter, sans-serif\"\n\t\t});\n\t\tif (typeof globalThis.requestAnimationFrame === \"undefined\") globalThis.requestAnimationFrame = (callback) => {\n\t\t\treturn setTimeout(() => callback(performance.now()), 16);\n\t\t};\n\t\tif (typeof globalThis.cancelAnimationFrame === \"undefined\") globalThis.cancelAnimationFrame = (id) => {\n\t\t\tclearTimeout(id);\n\t\t};\n\t\tconst g$1 = globalThis;\n\t\tif (typeof g$1.GPUShaderStage === \"undefined\") g$1.GPUShaderStage = {\n\t\t\tVERTEX: 1,\n\t\t\tFRAGMENT: 2,\n\t\t\tCOMPUTE: 4\n\t\t};\n\t\tif (typeof g$1.GPUBufferUsage === \"undefined\") g$1.GPUBufferUsage = {\n\t\t\tMAP_READ: 1,\n\t\t\tMAP_WRITE: 2,\n\t\t\tCOPY_SRC: 4,\n\t\t\tCOPY_DST: 8,\n\t\t\tINDEX: 16,\n\t\t\tVERTEX: 32,\n\t\t\tUNIFORM: 64,\n\t\t\tSTORAGE: 128,\n\t\t\tINDIRECT: 256,\n\t\t\tQUERY_RESOLVE: 512\n\t\t};\n\t\tif (typeof g$1.GPUTextureUsage === \"undefined\") g$1.GPUTextureUsage = {\n\t\t\tCOPY_SRC: 1,\n\t\t\tCOPY_DST: 2,\n\t\t\tTEXTURE_BINDING: 4,\n\t\t\tSTORAGE_BINDING: 8,\n\t\t\tRENDER_ATTACHMENT: 16\n\t\t};\n\t\tconst preferredFormat = this.target.format ?? \"rgba8unorm\";\n\t\tconst navEnv = globalThis;\n\t\tif (typeof navEnv.navigator === \"undefined\") navEnv.navigator = { gpu: {\n\t\t\trequestAdapter: async () => ({ requestDevice: async () => this.target.device }),\n\t\t\tgetPreferredCanvasFormat: () => preferredFormat\n\t\t} };\n\t\telse if (!navEnv.navigator.gpu) Object.defineProperty(navEnv.navigator, \"gpu\", {\n\t\t\tvalue: {\n\t\t\t\trequestAdapter: async () => ({ requestDevice: async () => this.target.device }),\n\t\t\t\tgetPreferredCanvasFormat: () => preferredFormat\n\t\t\t},\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t});\n\t\telse Object.defineProperty(navEnv.navigator.gpu, \"getPreferredCanvasFormat\", {\n\t\t\tvalue: () => preferredFormat,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t});\n\t}\n\tasync initialize(chartOptions) {\n\t\tconst safeOptions = {\n\t\t\t...structuredClone(chartOptions),\n\t\t\tanimation: false\n\t\t};\n\t\tthis.initialOptions = safeOptions;\n\t\tthis.lastRenderedProgress = null;\n\t\tthis.setupHeadlessDOM();\n\t\tactiveCanvasMockForNextCreation = this.canvasMock;\n\t\tconst createContext$1 = {\n\t\t\tdevice: this.target.device,\n\t\t\tadapter: this.target.device.adapter ?? {}\n\t\t};\n\t\ttry {\n\t\t\tthis.chartInstance = await ChartGPU.create(this.containerMock, safeOptions, createContext$1);\n\t\t} finally {\n\t\t\tactiveCanvasMockForNextCreation = null;\n\t\t}\n\t\tthis.chartInstance.setRenderMode(\"external\");\n\t}\n\tasync renderFrame(progress = 1, destinationTexture) {\n\t\tif (!this.chartInstance) throw new Error(\"ChartGPUEngineBridge not initialized. Call initialize() first.\");\n\t\tif (destinationTexture) {\n\t\t\tif (this.ownsTexture && this.target.currentTexture !== destinationTexture) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.target.currentTexture.destroy();\n\t\t\t\t} catch (_) {}\n\t\t\t\tthis.ownsTexture = false;\n\t\t\t}\n\t\t\tthis.target.currentTexture = destinationTexture;\n\t\t}\n\t\tif (this.lastRenderedProgress !== progress) {\n\t\t\tthis.lastRenderedProgress = progress;\n\t\t\tif (progress < 1 && this.initialOptions?.series) {\n\t\t\t\tconst updatedSeries = this.initialOptions.series.map((s) => {\n\t\t\t\t\tif (!Array.isArray(s.data)) return s;\n\t\t\t\t\tconst visibleCount = Math.max(2, Math.round(s.data.length * progress));\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...s,\n\t\t\t\t\t\tdata: s.data.slice(0, visibleCount)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tthis.chartInstance.setOption({\n\t\t\t\t\t...this.initialOptions,\n\t\t\t\t\tanimation: false,\n\t\t\t\t\tseries: updatedSeries\n\t\t\t\t});\n\t\t\t} else if (this.initialOptions) this.chartInstance.setOption({\n\t\t\t\t...this.initialOptions,\n\t\t\t\tanimation: false\n\t\t\t});\n\t\t}\n\t\tthis.chartInstance.renderFrame();\n\t\tawait Promise.resolve();\n\t\treturn this.target.currentTexture;\n\t}\n\tdestroy() {\n\t\tif (this.chartInstance) {\n\t\t\tthis.chartInstance.dispose();\n\t\t\tthis.chartInstance = null;\n\t\t}\n\t\tif (this.ownsTexture && this.target.currentTexture) try {\n\t\t\tthis.target.currentTexture.destroy();\n\t\t} catch (_) {}\n\t}\n};\nconst chartBridgeCache = /* @__PURE__ */ new Map();\nasync function drawChartNode(ctx, pass, props) {\n\tconst key = props.nodeId ?? \"default_chart\";\n\tconst rectW = Math.max(1, Math.round(props.dstRect.width));\n\tconst rectH = Math.max(1, Math.round(props.dstRect.height));\n\tlet bridge = chartBridgeCache.get(key);\n\tif (bridge && (bridge.width !== rectW || bridge.height !== rectH)) {\n\t\tbridge.destroy();\n\t\tchartBridgeCache.delete(key);\n\t\tbridge = void 0;\n\t}\n\tif (!bridge) {\n\t\tbridge = new ChartGPUEngineBridge({\n\t\t\tdevice: ctx.device,\n\t\t\twidth: rectW,\n\t\t\theight: rectH\n\t\t});\n\t\tawait bridge.initialize(props.chartOptions);\n\t\tchartBridgeCache.set(key, bridge);\n\t}\n\tconst progress = props.progress ?? props.drawProgress ?? 1;\n\tconst chartTexture = await bridge.renderFrame(progress);\n\tctx.renderer.drawTexture(pass, chartTexture, props.dstRect, {\n\t\topacity: props.opacity ?? 1,\n\t\ttransform: props.matrix\n\t});\n}\n\n//#endregion\n//#region src/texture-cache.ts\nvar TextureCache = class {\n\ttextures = /* @__PURE__ */ new Map();\n\trefs = /* @__PURE__ */ new Map();\n\tlruMap = /* @__PURE__ */ new Map();\n\tactiveKeys = /* @__PURE__ */ new Set();\n\tacquire(key) {\n\t\tconst tex = this.textures.get(key);\n\t\tif (tex) {\n\t\t\tconst count = this.refs.get(key) ?? 0;\n\t\t\tthis.refs.set(key, count + 1);\n\t\t\tthis.updateLru(key);\n\t\t}\n\t\treturn tex;\n\t}\n\thas(key) {\n\t\treturn this.textures.has(key);\n\t}\n\thasPrefix(prefix) {\n\t\tfor (const key of this.textures.keys()) if (key.startsWith(prefix)) return true;\n\t\treturn false;\n\t}\n\tcontains(str) {\n\t\tfor (const key of this.textures.keys()) if (key.includes(str)) return true;\n\t\treturn false;\n\t}\n\tset(key, tex, device) {\n\t\tif (this.textures.has(key)) this.evict(key, device);\n\t\tthis.textures.set(key, tex);\n\t\tthis.refs.set(key, 1);\n\t\tthis.updateLru(key);\n\t}\n\tcreate(key, device, width, height, format = \"rgba8unorm\") {\n\t\tconst tex = device.createTexture({\n\t\t\tsize: [width, height],\n\t\t\tformat,\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t\tthis.set(key, tex, device);\n\t\treturn tex;\n\t}\n\trelease(key) {\n\t\tconst count = this.refs.get(key);\n\t\tif (count !== void 0 && count > 0) {\n\t\t\tconst nextCount = count - 1;\n\t\t\tthis.refs.set(key, nextCount);\n\t\t}\n\t}\n\tevict(key, device) {\n\t\tconst tex = this.textures.get(key);\n\t\tif (tex) {\n\t\t\ttry {\n\t\t\t\tif (device) {\n\t\t\t\t\tconst toDestroy = tex;\n\t\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\ttoDestroy.destroy();\n\t\t\t\t\t\t} catch (_) {}\n\t\t\t\t\t}).catch(() => {});\n\t\t\t\t} else tex.destroy();\n\t\t\t} catch (_) {}\n\t\t\tthis.textures.delete(key);\n\t\t}\n\t\tthis.refs.delete(key);\n\t\tthis.lruMap.delete(key);\n\t}\n\tprune(device, maxInactive = 30) {\n\t\tlet inactiveCount = 0;\n\t\tfor (const key of this.textures.keys()) if ((this.refs.get(key) ?? 0) === 0 && !this.activeKeys.has(key)) inactiveCount++;\n\t\tconst lruKeys = Array.from(this.lruMap.keys());\n\t\tfor (let i = lruKeys.length - 1; i >= 0; i--) {\n\t\t\tif (inactiveCount <= maxInactive) break;\n\t\t\tconst key = lruKeys[i];\n\t\t\tif ((this.refs.get(key) ?? 0) === 0 && !this.activeKeys.has(key)) {\n\t\t\t\tconst tex = this.textures.get(key);\n\t\t\t\tif (tex) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (device) {\n\t\t\t\t\t\t\tconst toDestroy = tex;\n\t\t\t\t\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\ttoDestroy.destroy();\n\t\t\t\t\t\t\t\t} catch (_) {}\n\t\t\t\t\t\t\t}).catch(() => {});\n\t\t\t\t\t\t} else tex.destroy();\n\t\t\t\t\t} catch (_) {}\n\t\t\t\t\tthis.textures.delete(key);\n\t\t\t\t}\n\t\t\t\tthis.refs.delete(key);\n\t\t\t\tthis.lruMap.delete(key);\n\t\t\t\tinactiveCount--;\n\t\t\t}\n\t\t}\n\t}\n\tupdateLru(key) {\n\t\tthis.lruMap.delete(key);\n\t\tthis.lruMap.set(key, true);\n\t}\n\tdestroy() {\n\t\tfor (const [_, tex] of this.textures) try {\n\t\t\ttex.destroy();\n\t\t} catch (_$1) {}\n\t\tthis.textures.clear();\n\t\tthis.refs.clear();\n\t\tthis.lruMap.clear();\n\t}\n};\nconst textureCache = new TextureCache();\n\n//#endregion\n//#region src/nodes/gif.ts\nvar GifLoader = class {\n\tcache = /* @__PURE__ */ new Map();\n\tasync load(src) {\n\t\tlet promise = this.cache.get(src);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tconst res = await fetch(src);\n\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch GIF: ${src}`);\n\t\t\t\tconst rawFrames = decompressFrames(parseGIF(await res.arrayBuffer()), true);\n\t\t\t\tif (rawFrames.length === 0) throw new Error(`GIF has no frames: ${src}`);\n\t\t\t\tconst width = rawFrames[0].dims.width;\n\t\t\t\tconst height = rawFrames[0].dims.height;\n\t\t\t\tconst fullCanvasBuffer = new Uint8ClampedArray(width * height * 4);\n\t\t\t\tconst frames = [];\n\t\t\t\tlet currentMs = 0;\n\t\t\t\tfor (const rf of rawFrames) {\n\t\t\t\t\tconst { dims, patch, delay } = rf;\n\t\t\t\t\tconst delayMs = delay ?? 100;\n\t\t\t\t\tfor (let y = 0; y < dims.height; y++) for (let x = 0; x < dims.width; x++) {\n\t\t\t\t\t\tconst patchIdx = (y * dims.width + x) * 4;\n\t\t\t\t\t\tconst targetIdx = ((y + dims.top) * width + (x + dims.left)) * 4;\n\t\t\t\t\t\tif (patch[patchIdx + 3] > 0) {\n\t\t\t\t\t\t\tfullCanvasBuffer[targetIdx] = patch[patchIdx];\n\t\t\t\t\t\t\tfullCanvasBuffer[targetIdx + 1] = patch[patchIdx + 1];\n\t\t\t\t\t\t\tfullCanvasBuffer[targetIdx + 2] = patch[patchIdx + 2];\n\t\t\t\t\t\t\tfullCanvasBuffer[targetIdx + 3] = patch[patchIdx + 3];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tframes.push({\n\t\t\t\t\t\tbuffer: new Uint8Array(fullCanvasBuffer),\n\t\t\t\t\t\tdelayMs,\n\t\t\t\t\t\tstartMs: currentMs,\n\t\t\t\t\t\tendMs: currentMs + delayMs\n\t\t\t\t\t});\n\t\t\t\t\tcurrentMs += delayMs;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tframes,\n\t\t\t\t\ttotalMs: currentMs\n\t\t\t\t};\n\t\t\t})();\n\t\t\tthis.cache.set(src, promise);\n\t\t\tpromise.catch(() => this.cache.delete(src));\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst gifLoader = new GifLoader();\nasync function drawGifNode(ctx, pass, props) {\n\tconst table = await gifLoader.load(props.src);\n\tif (table.frames.length === 0) return;\n\tconst elapsedMs = props.frame / props.fps * 1e3;\n\tconst loopedMs = table.totalMs > 0 ? elapsedMs % table.totalMs : 0;\n\tlet targetFrame = table.frames[0];\n\tfor (const f of table.frames) if (loopedMs >= f.startMs && loopedMs < f.endMs) {\n\t\ttargetFrame = f;\n\t\tbreak;\n\t}\n\tconst cacheKey = `${props.src}@@${props.frame}`;\n\tlet tex = textureCache.acquire(cacheKey);\n\tif (!tex) {\n\t\ttex = ctx.device.createTexture({\n\t\t\tsize: [table.width, table.height],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t\tctx.device.queue.writeTexture({ texture: tex }, targetFrame.buffer, { bytesPerRow: table.width * 4 }, [table.width, table.height]);\n\t\ttextureCache.set(cacheKey, tex, ctx.device);\n\t}\n\tctx.renderer.drawTexture(pass, tex, props.dstRect, {\n\t\topacity: props.opacity ?? 1,\n\t\ttransform: props.matrix\n\t});\n\ttextureCache.release(cacheKey);\n}\n\n//#endregion\n//#region src/nodes/image.ts\nvar ImageLoader = class {\n\tpending = /* @__PURE__ */ new Map();\n\tasync load(src, isHeadless) {\n\t\tconst key = `${src}-${isHeadless}`;\n\t\tlet promise = this.pending.get(key);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tlet arrayBuffer;\n\t\t\t\tif (src.startsWith(\"http://\") || src.startsWith(\"https://\") || src.startsWith(\"data:\") || !isHeadless) {\n\t\t\t\t\tconst response = await fetch(src);\n\t\t\t\t\tif (!response.ok) throw new Error(`Failed to fetch image: ${src}`);\n\t\t\t\t\tarrayBuffer = await response.arrayBuffer();\n\t\t\t\t} else {\n\t\t\t\t\tlet filePath = src;\n\t\t\t\t\tif (filePath.startsWith(\"file://\")) try {\n\t\t\t\t\t\tfilePath = new URL(filePath).pathname;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tfilePath = filePath.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t}\n\t\t\t\t\tconst fileBuf = await (await import(\n\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\"fs/promises\"\n)).readFile(filePath);\n\t\t\t\t\tarrayBuffer = fileBuf.buffer.slice(fileBuf.byteOffset, fileBuf.byteOffset + fileBuf.byteLength);\n\t\t\t\t}\n\t\t\t\tif (isHeadless) {\n\t\t\t\t\tconst sharp = (await import(\n\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\"sharp\"\n)).default;\n\t\t\t\t\tconst { data, info } = await sharp(Buffer.from(arrayBuffer)).ensureAlpha().raw().toBuffer({ resolveWithObject: true });\n\t\t\t\t\treturn {\n\t\t\t\t\t\twidth: info.width,\n\t\t\t\t\t\theight: info.height,\n\t\t\t\t\t\tbuffer: new Uint8Array(data)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst blob = new Blob([arrayBuffer]);\n\t\t\t\tconst bitmap = await createImageBitmap(blob);\n\t\t\t\treturn {\n\t\t\t\t\twidth: bitmap.width,\n\t\t\t\t\theight: bitmap.height,\n\t\t\t\t\tbitmap\n\t\t\t\t};\n\t\t\t})();\n\t\t\tthis.pending.set(key, promise);\n\t\t\tpromise.catch((err) => {\n\t\t\t\tthis.pending.delete(key);\n\t\t\t\tconsole.error(`Failed to load image texture from ${src}:`, err);\n\t\t\t});\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst imageLoader = new ImageLoader();\nasync function drawImageNode(ctx, pass, props) {\n\tlet tex = textureCache.acquire(props.src);\n\tif (!tex) try {\n\t\tconst isHeadless = props.isHeadless ?? (typeof window === \"undefined\" || globalThis.__IS_HEADLESS_RENDERER__);\n\t\tconst data = await imageLoader.load(props.src, isHeadless);\n\t\ttex = textureCache.acquire(props.src);\n\t\tif (!tex) {\n\t\t\ttex = ctx.device.createTexture({\n\t\t\t\tsize: [data.width, data.height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t\tif (data.bitmap) ctx.device.queue.copyExternalImageToTexture({ source: data.bitmap }, { texture: tex }, [data.width, data.height]);\n\t\t\telse if (data.buffer) ctx.device.queue.writeTexture({ texture: tex }, data.buffer, { bytesPerRow: data.width * 4 }, [data.width, data.height]);\n\t\t\ttextureCache.set(props.src, tex, ctx.device);\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(\"Failed to load image texture:\", err);\n\t\treturn;\n\t}\n\tctx.renderer.drawTexture(pass, tex, props.dstRect, {\n\t\topacity: props.opacity ?? 1,\n\t\ttransform: props.matrix\n\t});\n\ttextureCache.release(props.src);\n}\n\n//#endregion\n//#region src/nodes/lottie.ts\nfunction resolveUrl(url) {\n\tif (!url) return url;\n\tif (url.startsWith(\"/\")) return `${BASE_URL || \"http://localhost:8081\"}${url}`;\n\treturn url;\n}\nconst registeredLottieFonts = /* @__PURE__ */ new Set();\nfunction decodeBase64(base64$1) {\n\tif (typeof Buffer !== \"undefined\") return Buffer.from(base64$1, \"base64\").toString(\"utf-8\");\n\treturn atob(base64$1);\n}\nfunction extractFontFamiliesFromLottie(lottieJson) {\n\tconst fonts = /* @__PURE__ */ new Set();\n\tconst fontsList = lottieJson?.fonts?.list;\n\tif (Array.isArray(fontsList)) for (const entry of fontsList) {\n\t\tif (entry?.fName && typeof entry.fName === \"string\") fonts.add(entry.fName);\n\t\tif (entry?.fFamily && typeof entry.fFamily === \"string\") fonts.add(entry.fFamily);\n\t}\n\tconst layers = lottieJson?.layers;\n\tif (!Array.isArray(layers)) return [...fonts];\n\tfor (const layer of layers) {\n\t\tif (layer?.ty !== 5) continue;\n\t\tconst k = layer?.t?.d?.k ?? layer?.t?.k;\n\t\tif (!k) continue;\n\t\tconst kArr = Array.isArray(k) ? k : [k];\n\t\tfor (const kf of kArr) {\n\t\t\tconst possibleDocs = [\n\t\t\t\tkf?.s,\n\t\t\t\tkf?.e,\n\t\t\t\tkf\n\t\t\t].filter(Boolean);\n\t\t\tfor (const doc of possibleDocs) {\n\t\t\t\tconst docArr = Array.isArray(doc) ? doc : [doc];\n\t\t\t\tfor (const d of docArr) if (d?.f && typeof d.f === \"string\") fonts.add(d.f);\n\t\t\t}\n\t\t}\n\t}\n\treturn [...fonts];\n}\nfunction getBaseFontFamily(name) {\n\treturn name.replace(/[- ](Regular|Bold|Italic|Medium|Light|SemiBold|Semi-Bold|ExtraBold|Extra-Bold|Thin|Black|Book|Heavy|Alt|Alternate|RegularItalic|BoldItalic)$/i, \"\").trim();\n}\n/**\n* Make a font usable for DotLottie text layers.\n*\n* 1. Registers the font with the DOM via the shared font manager\n* (@font-face + document.fonts) — keeps canvas-2D fallbacks and\n* measurement working in the browser.\n* 2. Registers the font with the dotlottie WASM (thorvg) engine via\n* `DotLottie.registerFont` — this is what actually renders the text\n* inside the animation. It awaits WASM initialisation internally and\n* accepts a URL, an ArrayBuffer, or a Uint8Array.\n*/\nasync function registerLottieFont(family) {\n\tif (registeredLottieFonts.has(family)) return;\n\tconst baseFamily = getBaseFontFamily(family);\n\tlet fontUrl = GetFontAssetUrl(baseFamily);\n\tconsole.log(`[LottieRenderer] Registering font: \"${family}\" (base: \"${baseFamily}\") from URL: ${fontUrl}`);\n\tif (typeof window !== \"undefined\" && typeof document !== \"undefined\" && typeof document.createElement === \"function\" && typeof document.getElementById === \"function\") {\n\t\ttry {\n\t\t\tawait localFontManager.loadFont(family, fontUrl);\n\t\t} catch (err) {\n\t\t\tfontUrl = GetFontAssetUrl(family);\n\t\t\ttry {\n\t\t\t\tawait localFontManager.loadFont(family, fontUrl);\n\t\t\t} catch (_) {}\n\t\t}\n\t\ttry {\n\t\t\tif (!await DotLottie.registerFont(family, fontUrl)) {\n\t\t\t\tconsole.warn(`[LottieRenderer] DotLottie.registerFont returned false for \"${family}\" (${fontUrl})`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.warn(`[LottieRenderer] DotLottie.registerFont failed for \"${family}\" (${fontUrl}):`, err);\n\t\t\treturn;\n\t\t}\n\t\tregisteredLottieFonts.add(family);\n\t\treturn;\n\t}\n\tlet fontPath = await registerHeadlessFont(family, fontUrl);\n\tif (!fontPath) {\n\t\tfontUrl = GetFontAssetUrl(family);\n\t\tfontPath = await registerHeadlessFont(family, fontUrl);\n\t}\n\tlet registered = false;\n\tif (fontPath) {\n\t\tconst fontData = await getHeadlessFontData(family);\n\t\tif (fontData) try {\n\t\t\tregistered = await DotLottie.registerFont(family, fontData);\n\t\t\tif (!registered) console.warn(`[LottieRenderer] DotLottie.registerFont returned false for \"${family}\" (${fontData.length} bytes)`);\n\t\t} catch (err) {\n\t\t\tconsole.warn(`[LottieRenderer] DotLottie.registerFont failed for \"${family}\" with binary data:`, err);\n\t\t}\n\t}\n\tif (!registered) try {\n\t\tconst resolvedFontUrl = resolveUrl(fontUrl);\n\t\tregistered = await DotLottie.registerFont(family, resolvedFontUrl);\n\t\tif (!registered) console.warn(`[LottieRenderer] DotLottie.registerFont via URL also failed for \"${family}\" (${resolvedFontUrl})`);\n\t} catch (err) {\n\t\tconsole.warn(`[LottieRenderer] DotLottie.registerFont via URL threw for \"${family}\":`, err);\n\t}\n\tif (registered) registeredLottieFonts.add(family);\n\telse console.warn(`[LottieRenderer] All font registration attempts failed for \"${family}\". Text using this font will not render.`);\n}\nvar LottieInstance = class {\n\tdotLottie;\n\tcanvas;\n\tloadPromise;\n\t_width;\n\t_height;\n\tconstructor(src, width, height) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis.canvas = new OffscreenCanvas(width, height);\n\t\tthis.dotLottie = new DotLottie({\n\t\t\tcanvas: this.canvas,\n\t\t\tsrc: resolveUrl(src),\n\t\t\tautoplay: false,\n\t\t\tloop: false,\n\t\t\tspeed: 0,\n\t\t\tlayout: {\n\t\t\t\talign: [.5, .5],\n\t\t\t\tfit: \"contain\"\n\t\t\t}\n\t\t});\n\t\tthis.loadPromise = new Promise((resolve, reject) => {\n\t\t\tif (this.dotLottie.isLoaded) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.dotLottie.addEventListener(\"load\", () => {\n\t\t\t\tresolve();\n\t\t\t});\n\t\t\tthis.dotLottie.addEventListener(\"loadError\", (e) => {\n\t\t\t\treject(e instanceof Error ? e : /* @__PURE__ */ new Error(\"Failed to load DotLottie animation\"));\n\t\t\t});\n\t\t});\n\t}\n\tget width() {\n\t\treturn this._width;\n\t}\n\tget height() {\n\t\treturn this._height;\n\t}\n\tget totalFrames() {\n\t\treturn this.dotLottie.totalFrames ?? 1;\n\t}\n\tget fps() {\n\t\tconst totalFrames = this.totalFrames;\n\t\tconst duration$2 = this.dotLottie.duration;\n\t\tif (duration$2 > 0 && totalFrames > 0) return Math.round(totalFrames / duration$2);\n\t\treturn 24;\n\t}\n\tasync ready() {\n\t\tawait this.loadPromise;\n\t}\n\trenderFrame(frame, fit) {\n\t\tconst loopedFrame = Math.floor(frame) % Math.max(1, this.totalFrames);\n\t\tthis.dotLottie.setLayout({\n\t\t\talign: [.5, .5],\n\t\t\tfit: fit || \"contain\"\n\t\t});\n\t\tthis.dotLottie.resize();\n\t\tthis.dotLottie.setFrame(loopedFrame);\n\t\ttry {\n\t\t\tthis.dotLottie.render?.();\n\t\t} catch (_) {}\n\t\treturn this.canvas;\n\t}\n\tdestroy() {\n\t\ttry {\n\t\t\tthis.dotLottie.destroy();\n\t\t} catch (_) {}\n\t}\n};\nlet wasmConfigured = false;\nfunction polyfillHeadlessDOM() {\n\tconst globalObj = globalThis;\n\tconst dummyElement = {\n\t\tclientWidth: 1920,\n\t\tclientHeight: 1080,\n\t\tgetBoundingClientRect: () => ({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: 1920,\n\t\t\tbottom: 1080,\n\t\t\twidth: 1920,\n\t\t\theight: 1080\n\t\t}),\n\t\tstyle: {},\n\t\tappendChild: () => {},\n\t\tremoveChild: () => {},\n\t\taddEventListener: () => {},\n\t\tremoveEventListener: () => {},\n\t\tgetAttribute: () => null\n\t};\n\tif (typeof globalThis.IntersectionObserver === \"undefined\") globalObj.IntersectionObserver = class IntersectionObserver {\n\t\tobserve() {}\n\t\tunobserve() {}\n\t\tdisconnect() {}\n\t};\n\tif (typeof globalThis.HTMLCanvasElement === \"undefined\") {\n\t\tif (typeof globalThis.OffscreenCanvas !== \"undefined\") globalObj.HTMLCanvasElement = globalThis.OffscreenCanvas;\n\t}\n\tconst docObj = globalThis.document ??= {\n\t\tcreateElement: (tag) => {\n\t\t\tif (tag === \"canvas\" && typeof globalThis.OffscreenCanvas === \"function\") return new globalThis.OffscreenCanvas(1, 1);\n\t\t\treturn { ...dummyElement };\n\t\t},\n\t\tgetElementsByTagName: () => [],\n\t\tdocumentElement: dummyElement,\n\t\tbody: dummyElement\n\t};\n\tdocObj.documentElement ??= dummyElement;\n\tdocObj.body ??= dummyElement;\n\tconst CanvasCtor = globalThis.HTMLCanvasElement || globalThis.OffscreenCanvas;\n\tif (CanvasCtor && typeof CanvasCtor === \"function\") {\n\t\tconst proto = CanvasCtor.prototype;\n\t\tif (proto) {\n\t\t\tif (typeof proto.getBoundingClientRect === \"undefined\") proto.getBoundingClientRect = function() {\n\t\t\t\tconst width = this.width || 512;\n\t\t\t\tconst height = this.height || 512;\n\t\t\t\treturn {\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tright: width,\n\t\t\t\t\tbottom: height,\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t};\n\t\t\t};\n\t\t\tif (!(\"style\" in proto)) Object.defineProperty(proto, \"style\", {\n\t\t\t\tget() {\n\t\t\t\t\tthis._style ??= {};\n\t\t\t\t\treturn this._style;\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t\tif (!(\"clientWidth\" in proto)) Object.defineProperty(proto, \"clientWidth\", {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.width || 512;\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t\tif (!(\"clientHeight\" in proto)) Object.defineProperty(proto, \"clientHeight\", {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.height || 512;\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t\tif (!(\"parentElement\" in proto)) Object.defineProperty(proto, \"parentElement\", {\n\t\t\t\tget() {\n\t\t\t\t\treturn dummyElement;\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t\tif (typeof proto.addEventListener === \"undefined\") proto.addEventListener = () => {};\n\t\t\tif (typeof proto.removeEventListener === \"undefined\") proto.removeEventListener = () => {};\n\t\t\tif (typeof proto.getAttribute === \"undefined\") proto.getAttribute = () => null;\n\t\t}\n\t}\n}\nasync function ensureWasmConfigured() {\n\tif (wasmConfigured) return;\n\tif (!(typeof window !== \"undefined\" && typeof document !== \"undefined\" && typeof document.createElement === \"function\" && typeof document.getElementById === \"function\")) {\n\t\tpolyfillHeadlessDOM();\n\t\tif (typeof globalThis.Response === \"function\") try {\n\t\t\tObject.defineProperty(globalThis.Response, Symbol.hasInstance, {\n\t\t\t\tvalue(instance) {\n\t\t\t\t\treturn instance && typeof instance === \"object\" && (instance.constructor?.name === \"Response\" || typeof instance.arrayBuffer === \"function\");\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t} catch {}\n\t\ttry {\n\t\t\tconst { createRequire: createRequire$1 } = await import(\n\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t/* @vite-ignore */\n\t\t\t\t\"node:module\"\n);\n\t\t\tconst fs$1 = await import(\n\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t/* @vite-ignore */\n\t\t\t\t\"node:fs/promises\"\n);\n\t\t\tconst nodePath = await import(\n\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t/* @vite-ignore */\n\t\t\t\t\"node:path\"\n);\n\t\t\tconst require = createRequire$1(import.meta.url);\n\t\t\tlet localWasmPath = null;\n\t\t\ttry {\n\t\t\t\tconst mainPath = require.resolve(\"@lottiefiles/dotlottie-web\");\n\t\t\t\tconst distIndex = mainPath.lastIndexOf(\"/dist/\");\n\t\t\t\tif (distIndex !== -1) localWasmPath = nodePath.join(mainPath.substring(0, distIndex), \"dist/dotlottie-player.wasm\");\n\t\t\t} catch {}\n\t\t\tif (localWasmPath) {\n\t\t\t\tconst wasmBase64 = (await fs$1.readFile(localWasmPath)).toString(\"base64\");\n\t\t\t\tDotLottie.setWasmUrl(`data:application/wasm;base64,${wasmBase64}`);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.warn(\"[LottieRenderer] Failed to configure headless WASM path:\", err);\n\t\t}\n\t}\n\twasmConfigured = true;\n}\nvar LottieLoader = class {\n\tcache = /* @__PURE__ */ new Map();\n\tasync load(src, width, height) {\n\t\tawait ensureWasmConfigured();\n\t\tconst resolvedWidth = Math.max(1, Math.ceil(width));\n\t\tconst resolvedHeight = Math.max(1, Math.ceil(height));\n\t\tconst key = `${src}@@${resolvedWidth}x${resolvedHeight}`;\n\t\tlet promise = this.cache.get(key);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tlet resolvedSrc = src;\n\t\t\t\ttry {\n\t\t\t\t\tlet lottieJson = null;\n\t\t\t\t\tconst isNode = typeof process !== \"undefined\" && Boolean(process.versions?.node);\n\t\t\t\t\tif (resolvedSrc.startsWith(\"data:application/json;base64,\")) {\n\t\t\t\t\t\tconst base64Data = resolvedSrc.split(\",\")[1];\n\t\t\t\t\t\tconst jsonStr = decodeBase64(base64Data);\n\t\t\t\t\t\tlottieJson = JSON.parse(jsonStr);\n\t\t\t\t\t} else if (resolvedSrc.startsWith(\"data:application/json,\")) {\n\t\t\t\t\t\tconst decodeData = decodeURIComponent(resolvedSrc.split(\",\")[1]);\n\t\t\t\t\t\tlottieJson = JSON.parse(decodeData);\n\t\t\t\t\t} else if (isNode && (resolvedSrc.startsWith(\"/\") || resolvedSrc.startsWith(\"file://\")) && resolvedSrc.endsWith(\".json\")) {\n\t\t\t\t\t\tlet filePath = resolvedSrc;\n\t\t\t\t\t\tif (filePath.startsWith(\"file://\")) try {\n\t\t\t\t\t\t\tfilePath = new URL(filePath).pathname;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tfilePath = filePath.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst jsonContent = await (await import(\n\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\"fs/promises\"\n)).readFile(filePath, \"utf-8\");\n\t\t\t\t\t\tlottieJson = JSON.parse(jsonContent);\n\t\t\t\t\t\tresolvedSrc = `data:application/json;base64,${Buffer.from(jsonContent).toString(\"base64\")}`;\n\t\t\t\t\t} else if (resolvedSrc.startsWith(\"http://\") || resolvedSrc.startsWith(\"https://\") || resolvedSrc.startsWith(\"/\")) {\n\t\t\t\t\t\tif (resolvedSrc.endsWith(\".json\") || resolvedSrc.includes(\"/assets/\")) {\n\t\t\t\t\t\t\tconst response = await fetch(resolveUrl(resolvedSrc));\n\t\t\t\t\t\t\tif (response.ok) lottieJson = await response.json();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lottieJson) {\n\t\t\t\t\t\tconst fonts = extractFontFamiliesFromLottie(lottieJson);\n\t\t\t\t\t\tif (fonts.length > 0) await Promise.all(fonts.map((family) => registerLottieFont(family)));\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.warn(`[LottieRenderer] Failed to load/register fonts for Lottie:`, err);\n\t\t\t\t}\n\t\t\t\tconst instance = new LottieInstance(resolvedSrc, resolvedWidth, resolvedHeight);\n\t\t\t\tawait instance.ready();\n\t\t\t\treturn instance;\n\t\t\t})();\n\t\t\tthis.cache.set(key, promise);\n\t\t\tpromise.catch(() => this.cache.delete(key));\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst lottieLoader = new LottieLoader();\nasync function drawLottieNode(ctx, pass, props) {\n\tconst resolvedWidth = Math.max(1, Math.ceil(props.dstRect.width));\n\tconst resolvedHeight = Math.max(1, Math.ceil(props.dstRect.height));\n\tconst instance = await lottieLoader.load(props.src, resolvedWidth, resolvedHeight);\n\tconst lottieFps = instance.fps;\n\tconst loopedFrame = Math.floor(props.frame * lottieFps / props.fps) % Math.max(1, instance.totalFrames);\n\tconst fitMode = props.fit || \"contain\";\n\tconst cacheKey = `${props.src}@@${loopedFrame}@@${resolvedWidth}x${resolvedHeight}@@${fitMode}`;\n\tlet tex = textureCache.acquire(cacheKey);\n\tif (!tex) {\n\t\tconst canvas = instance.renderFrame(loopedFrame, fitMode);\n\t\ttex = ctx.device.createTexture({\n\t\t\tsize: [instance.width, instance.height],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t\ttry {\n\t\t\tctx.device.queue.copyExternalImageToTexture({ source: canvas }, {\n\t\t\t\ttexture: tex,\n\t\t\t\tpremultipliedAlpha: true\n\t\t\t}, [instance.width, instance.height]);\n\t\t} catch {\n\t\t\tconst c2d = canvas.getContext(\"2d\");\n\t\t\tif (c2d) {\n\t\t\t\tconst imgData = c2d.getImageData(0, 0, instance.width, instance.height);\n\t\t\t\tconst pixelBuffer = new Uint8Array(imgData.data.buffer, imgData.data.byteOffset, imgData.data.byteLength);\n\t\t\t\tctx.device.queue.writeTexture({ texture: tex }, pixelBuffer, { bytesPerRow: instance.width * 4 }, [instance.width, instance.height]);\n\t\t\t} else {\n\t\t\t\tconst gl = canvas.getContext(\"webgl\") || canvas.getContext(\"experimental-webgl\");\n\t\t\t\tif (gl) {\n\t\t\t\t\tconst pixels = new Uint8Array(instance.width * instance.height * 4);\n\t\t\t\t\tgl.readPixels(0, 0, instance.width, instance.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\t\t\t\t\tconst flipped = new Uint8Array(pixels.length);\n\t\t\t\t\tconst bytesPerRow = instance.width * 4;\n\t\t\t\t\tfor (let y = 0; y < instance.height; y++) {\n\t\t\t\t\t\tconst srcOffset = y * bytesPerRow;\n\t\t\t\t\t\tconst dstOffset = (instance.height - 1 - y) * bytesPerRow;\n\t\t\t\t\t\tflipped.set(pixels.subarray(srcOffset, srcOffset + bytesPerRow), dstOffset);\n\t\t\t\t\t}\n\t\t\t\t\tctx.device.queue.writeTexture({ texture: tex }, flipped, { bytesPerRow }, [instance.width, instance.height]);\n\t\t\t\t} else console.error(\"[LottieRenderer] Could not acquire 2D or WebGL context to read pixels.\");\n\t\t\t}\n\t\t}\n\t\ttextureCache.set(cacheKey, tex, ctx.device);\n\t}\n\tctx.renderer.drawTexture(pass, tex, props.dstRect, {\n\t\topacity: props.opacity ?? 1,\n\t\ttransform: props.matrix\n\t});\n\ttextureCache.release(cacheKey);\n}\n\n//#endregion\n//#region src/nodes/media-decoder.ts\n/**\n* Base class for media decoders (Video/Audio) that manages shared Input resources\n* and provides robust, cached iterator access with seek-ahead invalidation.\n*/\nvar BaseMediaDecoder = class {\n\tinput = null;\n\tinitPromise = null;\n\titerator = null;\n\titeratorStartTimestamp = -1;\n\tcurrentFetchId = 0;\n\tfetchLock = Promise.resolve();\n\tdestroyed = false;\n\tconstructor(url, isHeadless) {\n\t\tthis.url = url;\n\t\tthis.isHeadless = isHeadless;\n\t}\n\tasync init() {\n\t\tif (this.input) return;\n\t\tif (this.initPromise) return this.initPromise;\n\t\tthis.destroyed = false;\n\t\tthis.initPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tconst input = await inputStore.acquire(this.url);\n\t\t\t\tif (this.destroyed) inputStore.release(this.url);\n\t\t\t\telse this.input = input;\n\t\t\t} catch (err) {\n\t\t\t\tthis.initPromise = null;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t})();\n\t\treturn this.initPromise;\n\t}\n\tdestroy() {\n\t\tthis.destroyed = true;\n\t\tthis.iterator?.return();\n\t\tif (this.input) {\n\t\t\tinputStore.release(this.url);\n\t\t\tthis.input = null;\n\t\t}\n\t\tthis.initPromise = null;\n\t\tthis.onDestroy();\n\t}\n};\nvar VideoDecoder = class extends BaseMediaDecoder {\n\tcanvasSink = null;\n\tvideoSampleSink = null;\n\tcurrentFrame = null;\n\tnextFrame = null;\n\tcurrentSample = null;\n\tnextSample = null;\n\theadlessQueue = [];\n\tisDecoding = false;\n\tnextRequest = null;\n\tpushHeadlessQueue(sample) {\n\t\tconst index = this.headlessQueue.findIndex((s) => s.timestamp > sample.timestamp);\n\t\tif (index === -1) this.headlessQueue.push(sample);\n\t\telse this.headlessQueue.splice(index, 0, sample);\n\t}\n\tasync fillHeadlessQueue(fetchId) {\n\t\tif (!this.iterator) return;\n\t\twhile (this.headlessQueue.length < 2) {\n\t\t\tconst result = await this.iterator.next();\n\t\t\tif (this.currentFetchId !== fetchId) {\n\t\t\t\tresult.value?.close?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (result.done || !result.value) break;\n\t\t\tthis.pushHeadlessQueue(result.value);\n\t\t}\n\t}\n\tasync closeIterator(iter) {\n\t\tif (!iter) return;\n\t\ttry {\n\t\t\tawait iter.return();\n\t\t} catch (_) {}\n\t}\n\tresetSinks() {\n\t\tconst iter = this.iterator;\n\t\tthis.iterator = null;\n\t\tif (iter) try {\n\t\t\titer.return();\n\t\t} catch (_) {}\n\t\tthis.canvasSink = null;\n\t\tthis.videoSampleSink = null;\n\t\tthis.currentFrame = null;\n\t\tthis.nextFrame = null;\n\t\tthis.currentSample?.close();\n\t\tthis.currentSample = null;\n\t\tthis.nextSample?.close();\n\t\tthis.nextSample = null;\n\t\tfor (const sample of this.headlessQueue) try {\n\t\t\tsample.close();\n\t\t} catch (_) {}\n\t\tthis.headlessQueue = [];\n\t\tthis.iteratorStartTimestamp = -1;\n\t}\n\tonDestroy() {\n\t\tthis.resetSinks();\n\t}\n\tasync startIterator(timestampSec, fetchId) {\n\t\tif (!this.canvasSink) return;\n\t\tconst safeTimestamp = Math.max(0, Number.isFinite(timestampSec) ? timestampSec : 0);\n\t\tconst prevIterator = this.iterator;\n\t\tthis.iterator = null;\n\t\tawait this.closeIterator(prevIterator);\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tthis.iterator = this.canvasSink.canvases(safeTimestamp);\n\t\tconst first = await this.iterator.next();\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tthis.currentFrame = first.value ?? null;\n\t\tconst second = await this.iterator.next();\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tthis.nextFrame = second.value ?? null;\n\t\tthis.iteratorStartTimestamp = safeTimestamp;\n\t}\n\tasync startIteratorHeadless(timestampSec, fetchId) {\n\t\tif (!this.videoSampleSink) return;\n\t\tconst safeTimestamp = Math.max(0, Number.isFinite(timestampSec) ? timestampSec : 0);\n\t\tconst prevIterator = this.iterator;\n\t\tthis.iterator = null;\n\t\tawait this.closeIterator(prevIterator);\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tfor (const sample of this.headlessQueue) sample.close();\n\t\tthis.headlessQueue = [];\n\t\tconst seekTime = Math.max(0, safeTimestamp - .1);\n\t\tthis.iterator = this.videoSampleSink.samples(seekTime);\n\t\tawait this.fillHeadlessQueue(fetchId);\n\t\tif (this.currentFetchId !== fetchId || this.destroyed) return;\n\t\tthis.iteratorStartTimestamp = safeTimestamp;\n\t}\n\tasync getFrame(timestampSec) {\n\t\tawait this.init();\n\t\tif (this.destroyed || !this.input) return null;\n\t\tconst safeTimestamp = Math.max(0, Number.isFinite(timestampSec) ? timestampSec : 0);\n\t\tif (this.isDecoding) {\n\t\t\tif (this.nextRequest) this.nextRequest.resolve(null);\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.nextRequest = {\n\t\t\t\t\ttimestampSec: safeTimestamp,\n\t\t\t\t\tresolve,\n\t\t\t\t\treject\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\treturn this.executeDecode(safeTimestamp);\n\t}\n\tasync executeDecode(timestampSec) {\n\t\tthis.isDecoding = true;\n\t\ttry {\n\t\t\treturn await this.performDecode(timestampSec);\n\t\t} finally {\n\t\t\tthis.isDecoding = false;\n\t\t\tif (this.nextRequest) {\n\t\t\t\tconst req = this.nextRequest;\n\t\t\t\tthis.nextRequest = null;\n\t\t\t\tthis.executeDecode(req.timestampSec).then(req.resolve).catch(req.reject);\n\t\t\t}\n\t\t}\n\t}\n\tasync performDecodeHeadless(safeTimestamp, fetchId) {\n\t\tif (!this.videoSampleSink) {\n\t\t\tif (this.destroyed || !this.input) return null;\n\t\t\tconst track = await this.input.getPrimaryVideoTrack();\n\t\t\tif (!track) return null;\n\t\t\tthis.videoSampleSink = new VideoSampleSink(track);\n\t\t}\n\t\tconst eps = 1e-4;\n\t\tif (!this.iterator || safeTimestamp < this.iteratorStartTimestamp - eps || this.headlessQueue.length > 0 && safeTimestamp < this.headlessQueue[0].timestamp - .01 || this.headlessQueue.length > 0 && safeTimestamp - this.headlessQueue[0].timestamp > 1) {\n\t\t\tawait this.startIteratorHeadless(safeTimestamp, fetchId);\n\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\t}\n\t\twhile (true) {\n\t\t\tawait this.fillHeadlessQueue(fetchId);\n\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\t\tif (this.headlessQueue.length >= 2) {\n\t\t\t\tif (this.headlessQueue[1].timestamp <= safeTimestamp + eps) {\n\t\t\t\t\tthis.headlessQueue.shift()?.close();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tconst currentSample = this.headlessQueue[0];\n\t\tif (!currentSample) return null;\n\t\tconst width = currentSample.displayWidth;\n\t\tconst height = currentSample.displayHeight;\n\t\tconst buffer = new Uint8Array(width * height * 4);\n\t\tawait currentSample.copyTo(buffer, { format: \"RGBA\" });\n\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tbuffer\n\t\t};\n\t}\n\tasync performDecodeInternal(safeTimestamp) {\n\t\tthis.currentFetchId++;\n\t\tconst fetchId = this.currentFetchId;\n\t\tif (this.isHeadless) return this.performDecodeHeadless(safeTimestamp, fetchId);\n\t\tif (!this.canvasSink) {\n\t\t\tif (this.destroyed || !this.input) return null;\n\t\t\tconst track = await this.input.getPrimaryVideoTrack();\n\t\t\tif (!track) return null;\n\t\t\tthis.canvasSink = new CanvasSink(track, {\n\t\t\t\tpoolSize: 3,\n\t\t\t\talpha: true\n\t\t\t});\n\t\t}\n\t\tconst eps = 1e-4;\n\t\tif (!this.iterator || safeTimestamp < this.iteratorStartTimestamp - eps || this.currentFrame && safeTimestamp < this.currentFrame.timestamp - .01 || this.currentFrame && safeTimestamp - this.currentFrame.timestamp > 1) {\n\t\t\tawait this.startIterator(safeTimestamp, fetchId);\n\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\t}\n\t\twhile (this.nextFrame && this.nextFrame.timestamp <= safeTimestamp + eps) {\n\t\t\tthis.currentFrame = this.nextFrame;\n\t\t\tthis.nextFrame = null;\n\t\t\tif (this.iterator) {\n\t\t\t\tconst result = await this.iterator.next();\n\t\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) return null;\n\t\t\t\tthis.nextFrame = result.value ?? null;\n\t\t\t}\n\t\t}\n\t\tif (!this.currentFrame) return null;\n\t\tconst canvas = this.currentFrame.canvas;\n\t\treturn {\n\t\t\twidth: canvas.width,\n\t\t\theight: canvas.height,\n\t\t\tcanvas\n\t\t};\n\t}\n\tasync performDecode(timestampSec) {\n\t\tconst safeTimestamp = Math.max(0, Number.isFinite(timestampSec) ? timestampSec : 0);\n\t\ttry {\n\t\t\treturn await this.performDecodeInternal(safeTimestamp);\n\t\t} catch (err) {\n\t\t\tconst errObj = err;\n\t\t\tif (errObj?.name === \"InputDisposedError\" || errObj?.message?.includes(\"disposed\") || this.destroyed || !this.input) return null;\n\t\t\tthis.resetSinks();\n\t\t\ttry {\n\t\t\t\tif (!this.isHeadless && this.input && !this.destroyed) {\n\t\t\t\t\tconst track = await this.input.getPrimaryVideoTrack();\n\t\t\t\t\tif (track && !this.destroyed) {\n\t\t\t\t\t\tthis.canvasSink = new CanvasSink(track, {\n\t\t\t\t\t\t\tpoolSize: 3,\n\t\t\t\t\t\t\talpha: true,\n\t\t\t\t\t\t\tdecoderOptions: { hardwareAcceleration: \"prefer-software\" }\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn await this.performDecodeInternal(safeTimestamp);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (_) {}\n\t\t\tthrow err;\n\t\t}\n\t}\n};\nvar AudioDecoder = class extends BaseMediaDecoder {\n\taudioSink = null;\n\tonDestroy() {\n\t\tthis.audioSink = null;\n\t}\n\tasync startIterator(timestampSec, _fetchId) {\n\t\tif (!this.audioSink) return;\n\t\tthis.iterator?.return();\n\t\tthis.iterator = this.audioSink.buffers(timestampSec);\n\t\tthis.iteratorStartTimestamp = timestampSec;\n\t}\n\tasync *getBuffers(timestampSec) {\n\t\ttry {\n\t\t\tawait this.init();\n\t\t\tif (this.destroyed || !this.input) return;\n\t\t\tif (!this.audioSink) {\n\t\t\t\tconst track = await this.input.getPrimaryAudioTrack();\n\t\t\t\tif (!track) return;\n\t\t\t\tthis.audioSink = new AudioBufferSink(track);\n\t\t\t}\n\t\t\tif (!this.iterator || Math.abs(timestampSec - this.iteratorStartTimestamp) > .05) {\n\t\t\t\tthis.currentFetchId++;\n\t\t\t\tawait this.startIterator(timestampSec, this.currentFetchId);\n\t\t\t}\n\t\t\tconst fetchId = this.currentFetchId;\n\t\t\tif (!this.iterator) return;\n\t\t\tfor await (const wrapped of this.iterator) {\n\t\t\t\tif (this.currentFetchId !== fetchId || this.destroyed || !this.input) break;\n\t\t\t\tthis.iteratorStartTimestamp = wrapped.timestamp + wrapped.duration;\n\t\t\t\tyield wrapped;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst errObj = err;\n\t\t\tif (errObj?.name === \"InputDisposedError\" || errObj?.message?.includes(\"disposed\") || this.destroyed || !this.input) return;\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tconst fetchId = this.currentFetchId;\n\t\t\tif (this.currentFetchId === fetchId) this.iterator = null;\n\t\t}\n\t}\n};\nvar MediaDecoderCache = class {\n\tvideoDecoders = /* @__PURE__ */ new Map();\n\taudioDecoders = /* @__PURE__ */ new Map();\n\tlastAccessed = /* @__PURE__ */ new Map();\n\ttouchKey(key) {\n\t\tthis.lastAccessed.set(key, Date.now());\n\t}\n\tdestroy() {\n\t\tfor (const decoder of this.videoDecoders.values()) try {\n\t\t\tdecoder.destroy();\n\t\t} catch (_) {}\n\t\tthis.videoDecoders.clear();\n\t\tfor (const decoder of this.audioDecoders.values()) try {\n\t\t\tdecoder.destroy();\n\t\t} catch (_) {}\n\t\tthis.audioDecoders.clear();\n\t\tthis.lastAccessed.clear();\n\t}\n\tprune(maxAgeMs = 3e5) {\n\t\tconst now = Date.now();\n\t\tfor (const [key, lastTime] of this.lastAccessed.entries()) if (now - lastTime > maxAgeMs) {\n\t\t\tconst videoDecoder = this.videoDecoders.get(key);\n\t\t\tif (videoDecoder) {\n\t\t\t\tvideoDecoder.destroy();\n\t\t\t\tthis.videoDecoders.delete(key);\n\t\t\t}\n\t\t\tconst audioDecoder = this.audioDecoders.get(key);\n\t\t\tif (audioDecoder) {\n\t\t\t\taudioDecoder.destroy();\n\t\t\t\tthis.audioDecoders.delete(key);\n\t\t\t}\n\t\t\tthis.lastAccessed.delete(key);\n\t\t}\n\t}\n\tgetVideo(url, isHeadless, nodeId) {\n\t\tconst key = `${url}-${isHeadless}-${nodeId ?? \"default\"}`;\n\t\tlet decoder = this.videoDecoders.get(key);\n\t\tif (!decoder) {\n\t\t\tdecoder = new VideoDecoder(url, isHeadless);\n\t\t\tthis.videoDecoders.set(key, decoder);\n\t\t}\n\t\tthis.touchKey(key);\n\t\tthis.prune();\n\t\treturn decoder;\n\t}\n\tgetAudio(url, nodeId) {\n\t\tconst key = `${url}-${nodeId ?? \"default\"}`;\n\t\tlet decoder = this.audioDecoders.get(key);\n\t\tif (!decoder) {\n\t\t\tdecoder = new AudioDecoder(url, false);\n\t\t\tthis.audioDecoders.set(key, decoder);\n\t\t}\n\t\tthis.touchKey(key);\n\t\tthis.prune();\n\t\treturn decoder;\n\t}\n\tclearNode(nodeId) {\n\t\tfor (const [key, decoder] of this.videoDecoders) if (key.includes(nodeId)) {\n\t\t\tdecoder.destroy();\n\t\t\tthis.videoDecoders.delete(key);\n\t\t\tthis.lastAccessed.delete(key);\n\t\t}\n\t\tfor (const [key, decoder] of this.audioDecoders) if (key.includes(nodeId)) {\n\t\t\tdecoder.destroy();\n\t\t\tthis.audioDecoders.delete(key);\n\t\t\tthis.lastAccessed.delete(key);\n\t\t}\n\t}\n};\nconst mediaDecoderCache = new MediaDecoderCache();\n\n//#endregion\n//#region src/nodes/signal.ts\nconst STATIC_SIGNAL_PREVIEW_SHADER = `\nstruct SignalUniforms {\n\tamplitude : f32,\n\toffset : f32,\n\tpreviewMode : f32,\n\ttime : f32,\n\twidth : f32,\n\theight : f32,\n\tamplitudeMin : f32,\n\tamplitudeMax : f32,\n\tduration : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : SignalUniforms;\n@group(1) @binding(0) var signalTex : texture_2d<f32>;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\t// Prevent compiler optimization/stripping of uniforms by reading all variables\n\tlet dummy_use = u.previewMode + u.width + u.height + u.duration;\n\tlet col_offset = vec3<f32>(dummy_use * 1e-10);\n\n\t// Dark background\n\tvar col = vec3<f32>(0.07, 0.07, 0.08) + col_offset;\n\n\tlet range = max(1e-4, u.amplitudeMax - u.amplitudeMin);\n\tlet zero_norm = clamp(select((0.0 - u.amplitudeMin) / range, 0.5, range <= 1e-4), 0.0, 1.0);\n\tlet y_zero = 0.5 - (zero_norm - 0.5) * 0.76;\n\n\t// Grid Lines\n\tlet grid_scroll = u.time * 0.1;\n\tlet uv10 = vec2<f32>(in.uv.x - grid_scroll, in.uv.y) * 10.0;\n\tlet fw10 = fwidth(uv10);\n\tlet gf = abs(fract(uv10 - 0.5) - 0.5) / fw10;\n\tlet fine = 1.0 - clamp(min(gf.x, gf.y), 0.0, 1.0);\n\tcol = mix(col, vec3<f32>(0.12, 0.12, 0.14), fine * 0.4);\n\n\tlet uv5 = vec2<f32>(in.uv.x - grid_scroll, in.uv.y) * 5.0;\n\tlet fw5 = fwidth(uv5);\n\tlet gc = abs(fract(uv5 - 0.5) - 0.5) / fw5;\n\tlet coarse = 1.0 - clamp(min(gc.x, gc.y), 0.0, 1.0);\n\tcol = mix(col, vec3<f32>(0.16, 0.16, 0.19), coarse * 0.5);\n\n\t// Zero axis\n\tlet axis_d = abs(in.uv.y - y_zero);\n\tlet axis_fw = fwidth(in.uv.y);\n\tlet axis_px = 1.0 - smoothstep(0.0, axis_fw * 1.5, axis_d);\n\n\t// Playhead position fixed at center 0.5 (where t == current frame time)\n\tlet playhead_x = 0.5;\n\n\t// Dimmer zero axis in the future (x > playhead_x)\n\tlet axis_strength = select(0.3, 0.65, in.uv.x <= playhead_x);\n\tcol = mix(col, vec3<f32>(0.24, 0.24, 0.28), axis_px * axis_strength);\n\n\t// Direct fetch without sampler: works unconditionally on all devices and rgba32float textures\n\tlet tex_dim = textureDimensions(signalTex);\n\tlet x_coord = clamp(u32(clamp(in.uv.x, 0.0, 1.0) * f32(tex_dim.x)), 0u, max(tex_dim.x, 1u) - 1u);\n\tlet raw_sample = textureLoad(signalTex, vec2<u32>(x_coord, 0u), 0);\n\tvar signal_val = raw_sample.r;\n\tif (u.previewMode == 1.0) {\n\t\tsignal_val = raw_sample.g; // beat channel\n\t} else if (u.previewMode == 2.0) {\n\t\tsignal_val = raw_sample.b; // bass channel\n\t} else if (u.previewMode == 3.0) {\n\t\tsignal_val = raw_sample.a; // energy channel\n\t}\n\n\t// Normalize the mapped signal value back to [0, 1] using min/max bounds\n\tlet norm_val = select((signal_val - u.amplitudeMin) / range, 0.5, range == 0.0);\n\n\t// Scale and offset waveform plot to fit viewport\n\tlet y_plot = 0.5 - (norm_val - 0.5) * 0.76;\n\tlet dist = abs(in.uv.y - y_plot);\n\n\t// Semi-transparent fill under the curve (more prominent in the past, very faint in the future)\n\tlet fill_lo = min(y_plot, y_zero);\n\tlet fill_hi = max(y_plot, y_zero);\n\tlet in_fill = step(fill_lo, in.uv.y) * step(in.uv.y, fill_hi);\n\tlet fill_alpha = select(0.04, 0.12, in.uv.x <= playhead_x);\n\tcol = mix(col, vec3<f32>(0.0, 0.72, 1.0), in_fill * fill_alpha);\n\n\t// Crisp Curve Line\n\tlet core_fw = fwidth(in.uv.y);\n\tlet core = 1.0 - smoothstep(0.5 * core_fw, 2.0 * core_fw, dist);\n\tlet curve_color = mix(vec3<f32>(0.3, 0.5, 0.6), vec3<f32>(0.0, 0.72, 1.0), select(0.5, 1.0, in.uv.x <= playhead_x));\n\tcol = mix(col, curve_color, core * 0.95);\n\n\t// Playhead line at playhead_x\n\tlet playhead_d = abs(in.uv.x - playhead_x);\n\tlet playhead_fw = fwidth(in.uv.x);\n\t\n\t// Soft glow around playhead\n\tlet glow = exp(-30.0 * playhead_d);\n\tcol = mix(col, vec3<f32>(1.0, 0.3, 0.2), glow * 0.2);\n\t\n\t// Sharp playhead line\n\tlet playhead_line = 1.0 - smoothstep(0.0, playhead_fw * 1.5, playhead_d);\n\tcol = mix(col, vec3<f32>(1.0, 0.35, 0.25), playhead_line * 0.95);\n\n\treturn vec4<f32>(clamp(col, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`;\nconst devicePipelineCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(12);\nfunction getDevicePipelines(device) {\n\tlet cache = devicePipelineCache.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdevicePipelineCache.set(device, cache);\n\t}\n\treturn cache;\n}\nasync function drawSignalNode(ctx, encoder, pass, props) {\n\tconst config$1 = props.signalConfig;\n\tif (!config$1) return;\n\tconst cfgRecord = config$1;\n\tconst nodeId = typeof props.nodeId === \"string\" && props.nodeId || typeof cfgRecord.nodeId === \"string\" && cfgRecord.nodeId || \"preview\";\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps ?? 24;\n\tconst width = props.width ?? 512;\n\tconst height = props.height ?? 512;\n\tconst elapsedMs = props.elapsedMs !== void 0 ? props.elapsedMs : frame / fps * 1e3;\n\tlet durationMs = props.durationMs !== void 0 ? props.durationMs : 0;\n\tconst cfgDuration = typeof config$1?.durationMs === \"number\" ? config$1.durationMs : 0;\n\tif (!durationMs && cfgDuration) durationMs = cfgDuration;\n\tlet durationSec = durationMs / 1e3;\n\tconst isMathNode = config$1.type === \"signal_math\" || Boolean(cfgRecord.operation) || cfgRecord.op === \"SignalMath\";\n\tconst isGateNode = config$1.type === \"gate\" || cfgRecord.op === \"SignalGate\";\n\tif (durationSec <= 0) {\n\t\tconst mathSigA = cfgRecord.signalA;\n\t\tconst gateSrcSig = cfgRecord.sourceSignal;\n\t\tconst regDuration = signalRegistry.getDuration?.(ctx.device, nodeId, props.renderId) || (isMathNode && mathSigA?.nodeId ? signalRegistry.getDuration?.(ctx.device, mathSigA.nodeId, props.renderId) : void 0) || (isGateNode && gateSrcSig?.nodeId ? signalRegistry.getDuration?.(ctx.device, gateSrcSig.nodeId, props.renderId) : void 0);\n\t\tif (regDuration && regDuration > 0) durationSec = regDuration;\n\t}\n\tconst elapsedTimeSec = elapsedMs / 1e3;\n\tawait signalRegistry.ensureAudioSourcesExtracted(ctx.device, config$1, fps, props.renderId);\n\tconst signalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, nodeId, elapsedTimeSec, durationSec, config$1, width, height, props.renderId, frame, fps);\n\tconst pipelines = getDevicePipelines(ctx.device);\n\tconst cacheKey = `preview_${ctx.renderer.format}`;\n\tlet pipeline = pipelines.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst shaderModule = ctx.device.createShaderModule({\n\t\t\tlabel: `signal_preview_static.wgsl`,\n\t\t\tcode: STATIC_SIGNAL_PREVIEW_SHADER\n\t\t});\n\t\tpipeline = ctx.device.createRenderPipeline({\n\t\t\tlabel: `SignalPreviewPipeline_static`,\n\t\t\tlayout: \"auto\",\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: ctx.renderer.format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tpipelines.set(cacheKey, pipeline);\n\t}\n\tlet previewModeInt = 0;\n\tif (!isMathNode && !isGateNode) {\n\t\tconst cfgObj = config$1;\n\t\tif (typeof cfgObj.channelIndex === \"number\") previewModeInt = cfgObj.channelIndex;\n\t\telse if (cfgObj.channel === \"beat\" || cfgObj.extractionMode === \"transient_beat\" || nodeId.endsWith(\"_beat\")) previewModeInt = 1;\n\t\telse if (cfgObj.channel === \"bass\" || cfgObj.extractionMode === \"bass\" || cfgObj.extractionMode === \"sub_bass\" || nodeId.endsWith(\"_bass\")) previewModeInt = 2;\n\t\telse if (cfgObj.channel === \"energy\" || cfgObj.extractionMode === \"rms_envelope\" || nodeId.endsWith(\"_energy\")) previewModeInt = 3;\n\t}\n\tconst calculatedStats = signalRegistry.getStats?.(nodeId) ?? (typeof cfgRecord.nodeId === \"string\" ? signalRegistry.getStats?.(cfgRecord.nodeId) : void 0);\n\tconst minVal = typeof calculatedStats?.min === \"number\" ? calculatedStats.min : typeof cfgRecord.amplitudeMin === \"number\" ? cfgRecord.amplitudeMin : (props.offset ?? 0) - (props.amplitude ?? 1);\n\tconst maxVal = typeof calculatedStats?.max === \"number\" ? calculatedStats.max : typeof cfgRecord.amplitudeMax === \"number\" ? cfgRecord.amplitudeMax : (props.offset ?? 0) + (props.amplitude ?? 1);\n\tuniformData[0] = props.amplitude ?? 1;\n\tuniformData[1] = props.offset ?? 0;\n\tuniformData[2] = previewModeInt;\n\tuniformData[3] = elapsedTimeSec;\n\tuniformData[4] = width;\n\tuniformData[5] = height;\n\tuniformData[6] = minVal;\n\tuniformData[7] = maxVal;\n\tuniformData[8] = durationSec;\n\tuniformData[9] = 0;\n\tuniformData[10] = 0;\n\tuniformData[11] = 0;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst bindGroup0 = ctx.device.createBindGroup({\n\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uBuffer }\n\t\t}]\n\t});\n\tconst bindGroup1 = ctx.device.createBindGroup({\n\t\tlayout: pipeline.getBindGroupLayout(1),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: signalView\n\t\t}]\n\t});\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup0);\n\tpass.setBindGroup(1, bindGroup1);\n\tpass.draw(4);\n}\n\n//#endregion\n//#region src/nodes/svg.ts\nvar SvgLoader = class {\n\tcache = /* @__PURE__ */ new Map();\n\tasync load(src, width, height, isHeadless) {\n\t\tconst resolvedWidth = Math.max(1, Math.ceil(width));\n\t\tconst resolvedHeight = Math.max(1, Math.ceil(height));\n\t\tconst key = `${src}-${resolvedWidth}-${resolvedHeight}-${isHeadless}`;\n\t\tlet promise = this.cache.get(key);\n\t\tif (!promise) {\n\t\t\tpromise = (async () => {\n\t\t\t\tlet text;\n\t\t\t\tif (src.startsWith(\"http://\") || src.startsWith(\"https://\") || src.startsWith(\"data:\") || !isHeadless) {\n\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SVG: ${src}`);\n\t\t\t\t\ttext = await res.text();\n\t\t\t\t} else {\n\t\t\t\t\tlet filePath = src;\n\t\t\t\t\tif (filePath.startsWith(\"file://\")) try {\n\t\t\t\t\t\tfilePath = new URL(filePath).pathname;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tfilePath = filePath.replace(/^file:\\/\\//, \"\");\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttext = await (await import(\n\t\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\t\"fs/promises\"\n)).readFile(filePath, \"utf-8\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tconst res = await fetch(src);\n\t\t\t\t\t\tif (!res.ok) throw new Error(`Failed to fetch SVG: ${src}`);\n\t\t\t\t\t\ttext = await res.text();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isHeadless) {\n\t\t\t\t\tconst { renderAsync } = await import(\n\t\t\t\t\t\t/* webpackIgnore: true */\n\t\t\t\t\t\t\"@resvg/resvg-js\"\n);\n\t\t\t\t\tconst rendered = await renderAsync(text, { fitTo: {\n\t\t\t\t\t\tmode: \"width\",\n\t\t\t\t\t\tvalue: resolvedWidth\n\t\t\t\t\t} });\n\t\t\t\t\treturn {\n\t\t\t\t\t\twidth: rendered.width,\n\t\t\t\t\t\theight: rendered.height,\n\t\t\t\t\t\tbuffer: new Uint8Array(rendered.pixels)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst blob = new Blob([text], { type: \"image/svg+xml\" });\n\t\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\t\tconst img = new Image();\n\t\t\t\tawait new Promise((resolve, reject) => {\n\t\t\t\t\timg.onload = () => resolve();\n\t\t\t\t\timg.onerror = () => reject(/* @__PURE__ */ new Error(`Failed to load SVG image: ${src}`));\n\t\t\t\t\timg.src = url;\n\t\t\t\t});\n\t\t\t\tconst canvas = new OffscreenCanvas(resolvedWidth, resolvedHeight);\n\t\t\t\tcanvas.getContext(\"2d\").drawImage(img, 0, 0, resolvedWidth, resolvedHeight);\n\t\t\t\tURL.revokeObjectURL(url);\n\t\t\t\treturn {\n\t\t\t\t\twidth: resolvedWidth,\n\t\t\t\t\theight: resolvedHeight,\n\t\t\t\t\tbitmap: await createImageBitmap(canvas)\n\t\t\t\t};\n\t\t\t})();\n\t\t\tthis.cache.set(key, promise);\n\t\t\tpromise.catch(() => this.cache.delete(key));\n\t\t}\n\t\treturn promise;\n\t}\n};\nconst svgLoader = new SvgLoader();\nasync function drawSvgNode(ctx, pass, props) {\n\tconst resolvedWidth = Math.max(1, Math.ceil(props.dstRect.width));\n\tconst resolvedHeight = Math.max(1, Math.ceil(props.dstRect.height));\n\tconst cacheKey = `${props.src}-${resolvedWidth}-${resolvedHeight}`;\n\tlet tex = textureCache.acquire(cacheKey);\n\tif (!tex) try {\n\t\tconst data = await svgLoader.load(props.src, resolvedWidth, resolvedHeight, props.isHeadless ?? false);\n\t\ttex = textureCache.acquire(cacheKey);\n\t\tif (!tex) {\n\t\t\ttex = ctx.device.createTexture({\n\t\t\t\tsize: [data.width, data.height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t\tif (data.bitmap) ctx.device.queue.copyExternalImageToTexture({ source: data.bitmap }, { texture: tex }, [data.width, data.height]);\n\t\t\telse if (data.buffer) ctx.device.queue.writeTexture({ texture: tex }, data.buffer, { bytesPerRow: data.width * 4 }, [data.width, data.height]);\n\t\t\ttextureCache.set(cacheKey, tex, ctx.device);\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(\"Failed to load SVG texture:\", err);\n\t\treturn;\n\t}\n\tctx.renderer.drawTexture(pass, tex, props.dstRect, {\n\t\topacity: props.opacity ?? 1,\n\t\ttransform: props.matrix\n\t});\n\ttextureCache.release(cacheKey);\n}\n\n//#endregion\n//#region src/nodes/video.ts\n/**\n* Tracks the most recently successfully uploaded texture key per node.\n* This is the key to YouTube-like behaviour: while the next frame is being\n* decoded we keep showing the last good frame instead of going blank.\n*/\nconst lastGoodFrameKey = /* @__PURE__ */ new Map();\n/**\n* Tracks the active source URL per node so we can invalidate and clear\n* lastGoodFrameKey when the input video changes.\n*/\nconst lastSourceUrl = /* @__PURE__ */ new Map();\n/**\n* Tracks in-flight decode promises per node so we never kick off a second\n* decode for the same timestamp while one is already running.\n*/\nconst pendingDecodes = /* @__PURE__ */ new Map();\n/**\n* Uploads a decoded frame into the GPU texture cache.\n* Returns the newly created GPUTexture, or null on failure.\n*/\nfunction uploadFrameToTexture(ctx, frameKey, frame, isHeadless) {\n\tif (isHeadless) {\n\t\tif (!frame.buffer) return null;\n\t\tconst tex = textureCache.create(frameKey, ctx.device, frame.width, frame.height);\n\t\tctx.device.queue.writeTexture({ texture: tex }, frame.buffer, { bytesPerRow: frame.width * 4 }, [frame.width, frame.height]);\n\t\treturn tex;\n\t} else {\n\t\tif (!frame.canvas) return null;\n\t\tconst tex = textureCache.create(frameKey, ctx.device, frame.width, frame.height);\n\t\tctx.device.queue.copyExternalImageToTexture({\n\t\t\tsource: frame.canvas,\n\t\t\tflipY: false\n\t\t}, {\n\t\t\ttexture: tex,\n\t\t\tpremultipliedAlpha: true\n\t\t}, [frame.width, frame.height]);\n\t\treturn tex;\n\t}\n}\n/**\n* Updates lastGoodFrameKey for a given node and immediately evicts the previous\n* frame texture from textureCache to prevent VRAM accumulation during export.\n*/\nfunction updateLastGoodFrame(nodeId, newKey, device) {\n\tconst prevKey = lastGoodFrameKey.get(nodeId);\n\tif (prevKey && prevKey !== newKey) {\n\t\ttextureCache.evict(prevKey, device);\n\t\ttextureCache.activeKeys.delete(prevKey);\n\t}\n\tlastGoodFrameKey.set(nodeId, newKey);\n\ttextureCache.activeKeys.add(newKey);\n}\nconst drawVideoNode = async (ctx, pass, props) => {\n\ttry {\n\t\tconst nodeId = props.nodeId ?? \"default\";\n\t\tconst currentSourceUrl = props.sourceUrl;\n\t\tif (lastSourceUrl.get(nodeId) !== currentSourceUrl) {\n\t\t\tlastSourceUrl.set(nodeId, currentSourceUrl);\n\t\t\tconst prevKey = lastGoodFrameKey.get(nodeId);\n\t\t\tif (prevKey) {\n\t\t\t\ttextureCache.evict(prevKey, ctx.device);\n\t\t\t\tlastGoodFrameKey.delete(nodeId);\n\t\t\t}\n\t\t}\n\t\tconst isHeadless = props.isHeadless ?? (typeof window === \"undefined\" || globalThis.__IS_HEADLESS_RENDERER__);\n\t\tconst decoder = mediaDecoderCache.getVideo(props.sourceUrl, isHeadless, nodeId);\n\t\tconst exactKey = props.frameKey;\n\t\tlet exactTex = textureCache.acquire(exactKey);\n\t\tif (!exactTex) if (!pendingDecodes.has(exactKey)) {\n\t\t\tconst delayHandle = `${nodeId}-${Math.random()}`;\n\t\t\tconst delays = globalThis.__GATEWAI_DELAYS__ || /* @__PURE__ */ new Set();\n\t\t\tglobalThis.__GATEWAI_DELAYS__ = delays;\n\t\t\tdelays.add(delayHandle);\n\t\t\tconst safeTimestampSec = Math.max(0, Number.isFinite(props.timestampSec) ? props.timestampSec : 0);\n\t\t\tconst decodePromise = decoder.getFrame(safeTimestampSec).then((frame) => {\n\t\t\t\tif (!frame) return;\n\t\t\t\tif (textureCache.acquire(exactKey)) {\n\t\t\t\t\ttextureCache.release(exactKey);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (uploadFrameToTexture(ctx, exactKey, frame, isHeadless)) updateLastGoodFrame(nodeId, exactKey, ctx.device);\n\t\t\t}).catch((err) => {\n\t\t\t\tconsole.error(\"[VideoNode] decode error:\", err);\n\t\t\t}).finally(() => {\n\t\t\t\tpendingDecodes.delete(exactKey);\n\t\t\t\tdelays.delete(delayHandle);\n\t\t\t});\n\t\t\tpendingDecodes.set(exactKey, decodePromise);\n\t\t\tconst isPlaying = props.isPlaying ?? true;\n\t\t\tconst shouldWait = isHeadless || props.forceWait || !isPlaying;\n\t\t\tif (!lastGoodFrameKey.has(nodeId) || shouldWait) {\n\t\t\t\tawait decodePromise;\n\t\t\t\texactTex = textureCache.acquire(exactKey);\n\t\t\t}\n\t\t} else {\n\t\t\tconst isPlaying = props.isPlaying ?? true;\n\t\t\tconst shouldWait = isHeadless || props.forceWait || !isPlaying;\n\t\t\tif (!lastGoodFrameKey.has(nodeId) || shouldWait) {\n\t\t\t\tawait pendingDecodes.get(exactKey);\n\t\t\t\texactTex = textureCache.acquire(exactKey);\n\t\t\t}\n\t\t}\n\t\telse updateLastGoodFrame(nodeId, exactKey, ctx.device);\n\t\tlet activeKey = null;\n\t\tlet texToDraw = null;\n\t\tif (exactTex) {\n\t\t\ttexToDraw = exactTex;\n\t\t\tactiveKey = exactKey;\n\t\t} else if (lastGoodFrameKey.has(nodeId)) {\n\t\t\tconst fallbackKey = lastGoodFrameKey.get(nodeId);\n\t\t\tconst fallbackTex = textureCache.acquire(fallbackKey);\n\t\t\tif (fallbackTex) {\n\t\t\t\ttexToDraw = fallbackTex;\n\t\t\t\tactiveKey = fallbackKey;\n\t\t\t}\n\t\t}\n\t\tif (texToDraw) ctx.renderer.drawTexture(pass, texToDraw, props.dstRect, {\n\t\t\topacity: props.opacity,\n\t\t\ttransform: props.matrix\n\t\t});\n\t\tif (activeKey) textureCache.release(activeKey);\n\t} catch (err) {\n\t\tconsole.error(\"[VideoNode] drawVideoNode error:\", err);\n\t}\n};\n/**\n* Call this when a video node is removed from the scene so we don't leak\n* stale entries in the fallback map.\n*/\nconst clearVideoNodeState = (nodeId, device) => {\n\tconst keysToDelete = [];\n\tfor (const key of lastGoodFrameKey.keys()) if (key === nodeId || key.startsWith(`${nodeId}-`)) keysToDelete.push(key);\n\tfor (const key of keysToDelete) {\n\t\tconst prevKey = lastGoodFrameKey.get(key);\n\t\tif (prevKey) {\n\t\t\ttextureCache.evict(prevKey, device);\n\t\t\ttextureCache.activeKeys.delete(prevKey);\n\t\t}\n\t\tlastGoodFrameKey.delete(key);\n\t\tlastSourceUrl.delete(key);\n\t}\n};\nconst clearAllVideoCache = (device) => {\n\tfor (const key of lastGoodFrameKey.values()) {\n\t\ttextureCache.evict(key, device);\n\t\ttextureCache.activeKeys.delete(key);\n\t}\n\tlastGoodFrameKey.clear();\n\tlastSourceUrl.clear();\n\tpendingDecodes.clear();\n};\n\n//#endregion\n//#region src/renderer2d/buffer-pool.ts\nvar BufferPool = class {\n\tbuffers = [];\n\tindex = 0;\n\tsize;\n\tusage;\n\tconstructor(size, usage) {\n\t\tthis.size = size;\n\t\tthis.usage = usage;\n\t}\n\tgetBuffer(device, data) {\n\t\tconst requiredSize = Math.max(this.size, data.byteLength);\n\t\tif (this.index >= this.buffers.length) {\n\t\t\tconst buf$1 = device.createBuffer({\n\t\t\t\tsize: requiredSize,\n\t\t\t\tusage: this.usage\n\t\t\t});\n\t\t\tthis.buffers.push(buf$1);\n\t\t}\n\t\tlet buf = this.buffers[this.index];\n\t\tif (buf.size < requiredSize) {\n\t\t\tconst oldBuf = buf;\n\t\t\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\ttry {\n\t\t\t\t\toldBuf.destroy();\n\t\t\t\t} catch {}\n\t\t\t});\n\t\t\tbuf = device.createBuffer({\n\t\t\t\tsize: requiredSize,\n\t\t\t\tusage: this.usage\n\t\t\t});\n\t\t\tthis.buffers[this.index] = buf;\n\t\t}\n\t\tthis.index++;\n\t\tdevice.queue.writeBuffer(buf, 0, data);\n\t\treturn buf;\n\t}\n\treset() {\n\t\tthis.index = 0;\n\t}\n\tdestroy() {\n\t\tfor (const buf of this.buffers) buf.destroy();\n\t\tthis.buffers = [];\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/uniform-bind-group-cache.ts\n/**\n* Caches GPUBindGroups for uniform buffers, keyed by GPUBuffer identity.\n*\n* BufferPool reuses the same GPUBuffer objects across frames (via reset()),\n* so bind groups remain valid. Uses WeakMap so entries are garbage-collected\n* when buffers are destroyed.\n*/\nvar UniformBindGroupCache = class {\n\tcache = /* @__PURE__ */ new WeakMap();\n\tgetBindGroup(device, layout, buffer) {\n\t\tlet bg = this.cache.get(buffer);\n\t\tif (!bg) {\n\t\t\tbg = device.createBindGroup({\n\t\t\t\tlayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer }\n\t\t\t\t}]\n\t\t\t});\n\t\t\tthis.cache.set(buffer, bg);\n\t\t}\n\t\treturn bg;\n\t}\n\tdestroy() {\n\t\tthis.cache = /* @__PURE__ */ new WeakMap();\n\t}\n};\n\n//#endregion\n//#region src/shaders/slug.ts\n/**\n* Slug glyph coverage (Lengyel, \"GPU-Centered Font Rendering Directly from\n* Glyph Outlines\", 2017), shared by the 2D and 3D text shaders. Coverage is\n* computed per screen pixel from the outline itself, so it stays crisp at any\n* scale or projection as long as the caller supplies the pixel footprint.\n*\n* The including shader declares `curvesTex : texture_2d<f32>` and\n* `bandsTex : texture_2d<u32>`.\n*/\nconst slugCoverageWgsl = `\nstruct SlugGlyph {\n\tglyphScale : vec2<f32>,\n\tbandScale : vec2<f32>,\n\tbandMax : vec2<u32>,\n\tbandsTexCoords : vec2<u32>,\n};\n\nconst epsilon : f32 = 0.0001;\n\n// One quadratic curve against the ray from the sample toward +x. Returns the\n// signed coverage (x) and the ray's weight (y): how close a crossing passes the\n// sample, in pixels. A ray running along an edge never crosses it near the\n// sample, weighs nothing, and so cannot impose its hard 0/1 answer.\nfn TraceRayCurveH(p1: vec2<f32>, p2: vec2<f32>, p3: vec2<f32>, pixelsPerEm: f32) -> vec2<f32> {\n\tif (max(max(p1.x, p2.x), p3.x) * pixelsPerEm < -0.5) {\n\t\treturn vec2<f32>(0.0);\n\t}\n\n\tvar cond1: u32 = 0u;\n\tif (p1.y > 0.0) { cond1 = 2u; }\n\tvar cond2: u32 = 0u;\n\tif (p2.y > 0.0) { cond2 = 4u; }\n\tvar cond3: u32 = 0u;\n\tif (p3.y > 0.0) { cond3 = 8u; }\n\n\tlet shift = cond1 + cond2 + cond3;\n\tlet code = (0x2E74u >> shift) & 3u;\n\tif (code == 0u) {\n\t\treturn vec2<f32>(0.0);\n\t}\n\n\tlet a = p1 - p2 * 2.0 + p3;\n\tlet b = p1 - p2;\n\tlet c = p1.y;\n\tlet ayr = 1.0 / a.y;\n\tlet d = sqrt(max(b.y * b.y - a.y * c, 0.0));\n\tvar t1 = (b.y - d) * ayr;\n\tvar t2 = (b.y + d) * ayr;\n\n\tif (abs(a.y) < epsilon) {\n\t\tlet val = c / (2.0 * b.y);\n\t\tt1 = val;\n\t\tt2 = val;\n\t}\n\n\tvar result = vec2<f32>(0.0);\n\n\tif ((code & 1u) != 0u) {\n\t\tlet x1 = ((a.x * t1 - b.x * 2.0) * t1 + p1.x) * pixelsPerEm;\n\t\tresult.x = result.x + clamp(x1 + 0.5, 0.0, 1.0);\n\t\tresult.y = max(result.y, clamp(1.0 - abs(x1) * 2.0, 0.0, 1.0));\n\t}\n\n\tif (code > 1u) {\n\t\tlet x2 = ((a.x * t2 - b.x * 2.0) * t2 + p1.x) * pixelsPerEm;\n\t\tresult.x = result.x - clamp(x2 + 0.5, 0.0, 1.0);\n\t\tresult.y = max(result.y, clamp(1.0 - abs(x2) * 2.0, 0.0, 1.0));\n\t}\n\n\treturn result;\n}\n\nfn TraceRayBandH(bandData: vec2<u32>, pixelsPerEm: f32, glyphScale: vec2<f32>, uv: vec2<f32>) -> vec2<f32> {\n\tvar coverage = vec2<f32>(0.0);\n\tfor (var curve: u32 = 0u; curve < bandData.x; curve = curve + 1u) {\n\t\tlet curveOffset = bandData.y + curve;\n\t\tlet coord = vec2<i32>(i32(curveOffset & 0xFFFu), i32(curveOffset >> 12u));\n\t\tlet curveLoc = vec2<i32>(textureLoad(bandsTex, coord, 0).xy);\n\n\t\tlet p12 = textureLoad(curvesTex, curveLoc, 0) / vec4<f32>(glyphScale, glyphScale) - vec4<f32>(uv, uv);\n\t\tlet p3 = textureLoad(curvesTex, vec2<i32>(curveLoc.x + 1, curveLoc.y), 0).xy / glyphScale - uv;\n\n\t\tlet max_x = max(max(p12.x, p12.z), p3.x);\n\t\tif (max_x * pixelsPerEm < -0.5) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlet hit = TraceRayCurveH(p12.xy, p12.zw, p3.xy, pixelsPerEm);\n\t\tcoverage = vec2<f32>(coverage.x + hit.x, max(coverage.y, hit.y));\n\t}\n\treturn coverage;\n}\n\nfn TraceRayBandV(bandData: vec2<u32>, pixelsPerEm: f32, glyphScale: vec2<f32>, uv: vec2<f32>) -> vec2<f32> {\n\tvar coverage = vec2<f32>(0.0);\n\tfor (var curve: u32 = 0u; curve < bandData.x; curve = curve + 1u) {\n\t\tlet curveOffset = bandData.y + curve;\n\t\tlet coord = vec2<i32>(i32(curveOffset & 0xFFFu), i32(curveOffset >> 12u));\n\t\tlet curveLoc = vec2<i32>(textureLoad(bandsTex, coord, 0).xy);\n\n\t\tlet p12 = textureLoad(curvesTex, curveLoc, 0) / vec4<f32>(glyphScale, glyphScale) - vec4<f32>(uv, uv);\n\t\tlet p3 = textureLoad(curvesTex, vec2<i32>(curveLoc.x + 1, curveLoc.y), 0).xy / glyphScale - uv;\n\n\t\tlet max_y = max(max(p12.y, p12.w), p3.y);\n\t\tif (max_y * pixelsPerEm < -0.5) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlet hit = TraceRayCurveH(p12.yx, p12.wz, p3.yx, pixelsPerEm);\n\t\tcoverage = vec2<f32>(coverage.x + hit.x, max(coverage.y, hit.y));\n\t}\n\treturn coverage;\n}\n\nfn sampleSlugCoverage(sampleUV: vec2<f32>, g: SlugGlyph, pixelsPerEm: vec2<f32>) -> f32 {\n\tlet bandIndex = vec2<u32>(clamp(vec2<u32>(sampleUV * g.bandScale), vec2<u32>(0u), g.bandMax));\n\tlet hBandOffset = g.bandsTexCoords.y * 4096u + g.bandsTexCoords.x + bandIndex.y;\n\tlet hCoord = vec2<i32>(i32(hBandOffset & 0xFFFu), i32(hBandOffset >> 12u));\n\tlet hBandData = textureLoad(bandsTex, hCoord, 0).xy;\n\n\tlet vBandOffset = g.bandsTexCoords.y * 4096u + g.bandsTexCoords.x + g.bandMax.y + 1u + bandIndex.x;\n\tlet vCoord = vec2<i32>(i32(vBandOffset & 0xFFFu), i32(vBandOffset >> 12u));\n\tlet vBandData = textureLoad(bandsTex, vCoord, 0).xy;\n\n\tlet x = TraceRayBandH(hBandData, pixelsPerEm.x, g.glyphScale, sampleUV);\n\tlet y = TraceRayBandV(vBandData, pixelsPerEm.y, g.glyphScale, sampleUV);\n\n\t// Each ray's coverage counts by how near it crosses an edge; where neither\n\t// does (deep inside or outside), the smaller answer is the safe one.\n\tlet covX = min(abs(x.x), 1.0);\n\tlet covY = min(abs(y.x), 1.0);\n\tlet weighted = (covX * x.y + covY * y.y) / max(x.y + y.y, 1.0 / 65536.0);\n\treturn clamp(max(weighted, min(covX, covY)), 0.0, 1.0);\n}\n\n// The glyph's premultiplied colour at uv; alpha 0 means discard. fw is the\n// pixel footprint in glyph uv, |d/dx| + |d/dy| (fwidth): the caller takes it in\n// uniform control flow. On a turned or foreshortened glyph it is wider than one\n// pixel along an axis, so that axis gets the soft ramp a box filter gives.\nfn shadeSlugGlyph(\n\tuv: vec2<f32>,\n\tfw: vec2<f32>,\n\tfragXY: vec2<f32>,\n\tg: SlugGlyph,\n\tcolor: vec4<f32>,\n\topacity: f32,\n\tblurAmount: f32,\n\tchromaticShift: f32,\n\tdissolveProgress: f32,\n) -> vec4<f32> {\n\tif (dissolveProgress > 0.001) {\n\t\tlet pCoord = uv * 320.0 + fragXY * 2.3;\n\t\tlet pNoise = fract(sin(dot(pCoord, vec2<f32>(12.9898, 78.233))) * 43758.5453);\n\t\tif (pNoise < dissolveProgress) {\n\t\t\treturn vec4<f32>(0.0);\n\t\t}\n\t}\n\n\tlet pixelsPerEm = max(vec2<f32>(1.0) / fw, vec2<f32>(1.0));\n\tlet ppem = min(pixelsPerEm.x, pixelsPerEm.y);\n\tlet gain = mix(1.0, 1.25, clamp((48.0 - ppem) / 36.0, 0.0, 1.0));\n\n\tif (abs(chromaticShift) > 0.001) {\n\t\tlet shiftUV = vec2<f32>(chromaticShift * 0.002, 0.0);\n\t\tlet rCov = sampleSlugCoverage(uv + shiftUV, g, pixelsPerEm);\n\t\tlet gCov = sampleSlugCoverage(uv, g, pixelsPerEm);\n\t\tlet bCov = sampleSlugCoverage(uv - shiftUV, g, pixelsPerEm);\n\n\t\tlet maxCov = max(max(rCov, gCov), bCov);\n\t\tlet cov = pow(clamp(maxCov, 0.0, 1.0), 1.0 / gain);\n\t\tlet alpha = color.a * opacity * cov;\n\t\tlet finalR = color.r * pow(clamp(rCov, 0.0, 1.0), 1.0 / gain);\n\t\tlet finalG = color.g * pow(clamp(gCov, 0.0, 1.0), 1.0 / gain);\n\t\tlet finalB = color.b * pow(clamp(bCov, 0.0, 1.0), 1.0 / gain);\n\t\treturn vec4<f32>(vec3<f32>(finalR, finalG, finalB) * (opacity * color.a), alpha);\n\t}\n\n\tvar slugAlpha = 0.0;\n\tif (blurAmount > 0.01) {\n\t\tlet step = fw * blurAmount * 0.3;\n\t\tfor (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {\n\t\t\tfor (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {\n\t\t\t\tlet offset = vec2<f32>(x_offset, y_offset) * step;\n\t\t\t\tslugAlpha = slugAlpha + sampleSlugCoverage(uv + offset, g, pixelsPerEm);\n\t\t\t}\n\t\t}\n\t\tslugAlpha = slugAlpha / 9.0;\n\t} else {\n\t\tslugAlpha = sampleSlugCoverage(uv, g, pixelsPerEm);\n\t}\n\n\tlet cov = pow(clamp(slugAlpha, 0.0, 1.0), 1.0 / gain);\n\tlet alpha = color.a * opacity * cov;\n\treturn vec4<f32>(color.rgb * alpha, alpha);\n}\n`;\nconst slugWgsl = `\nstruct Uniforms {\n\ttransformCol0 : vec4<f32>,\n\ttransformCol1 : vec4<f32>,\n\ttransformCol2 : vec4<f32>,\n\tparams : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = slant\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(1) @binding(0) var curvesTex : texture_2d<f32>;\n@group(1) @binding(1) var bandsTex : texture_2d<u32>;\n\n${slugCoverageWgsl}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n\t@location(1) @interpolate(flat) glyphScale : vec2<f32>,\n\t@location(2) @interpolate(flat) bandScale : vec2<f32>,\n\t@location(3) @interpolate(flat) bandMax : vec2<u32>,\n\t@location(4) @interpolate(flat) bandsTexCoords : vec2<u32>,\n\t@location(5) color : vec4<f32>,\n\t@location(6) @interpolate(flat) blurAmount : f32,\n\t@location(7) @interpolate(flat) chromaticShift : f32,\n\t@location(8) @interpolate(flat) dissolveProgress : f32,\n\t@location(9) @interpolate(flat) vfxParam : f32,\n};\n\nvar<private> pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(\n\tvec2<f32>(-1.0, -1.0),\n\tvec2<f32>(1.0, 1.0),\n\tvec2<f32>(-1.0, 1.0),\n\tvec2<f32>(-1.0, -1.0),\n\tvec2<f32>(1.0, -1.0),\n\tvec2<f32>(1.0, 1.0)\n);\n\n@vertex fn vs(\n\t@builtin(vertex_index) vertex_index : u32,\n\t@location(0) aScaleBias : vec4<f32>,\n\t@location(1) aGlyphBandScale : vec4<f32>,\n\t@location(2) aBandMaxTexCoords : vec4<f32>,\n\t@location(3) aAnim : vec4<f32>, // x = rotation, y = scale_mult, zw = translation\n\t@location(4) aColor : vec4<f32>,\n\t@location(5) aExtraParams : vec4<f32>,\n) -> VSOut {\n\tlet quad_pos = pos[vertex_index];\n\n\tlet angle = aAnim.x;\n\tlet scale_mult = aAnim.y;\n\tlet translation = aAnim.zw;\n\n\t// Dilate the glyph's quad by one screen pixel each side (Slug's dynamic\n\t// dilation): coverage ramps half a pixel past the outline, and pixels whose\n\t// centres fall just outside the bounding box must still be shaded, or a\n\t// turned glyph's edges are cut into a staircase.\n\tlet transform2 = mat2x2<f32>(u.transformCol0.xy, u.transformCol1.xy);\n\tlet pixelsPerUnit = sqrt(max(abs(determinant(transform2)), 1e-8));\n\tlet halfSize = max(abs(aScaleBias.xy * scale_mult), vec2<f32>(1e-4));\n\tlet grow = vec2<f32>(1.0) + (1.0 / pixelsPerUnit) / halfSize;\n\tlet uv = vec2<f32>(\n\t\tquad_pos.x * grow.x * 0.5 + 0.5,\n\t\t1.0 - (quad_pos.y * grow.y * 0.5 + 0.5),\n\t);\n\n\tlet local_pos = quad_pos * aScaleBias.xy * scale_mult * grow;\n\tlet slant = u.params.w;\n\tlet slanted_pos = vec2<f32>(\n\t\tlocal_pos.x - local_pos.y * slant,\n\t\tlocal_pos.y\n\t);\n\tlet rotated = vec2<f32>(\n\t\tslanted_pos.x * cos(angle) - slanted_pos.y * sin(angle),\n\t\tslanted_pos.x * sin(angle) + slanted_pos.y * cos(angle)\n\t);\n\n\tlet transformed = rotated + aScaleBias.zw + translation;\n\n\tlet transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n\tlet p = transform * vec3<f32>(transformed, 1.0);\n\n\tlet surfaceSize = u.params.yz;\n\tlet clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n\tlet clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n\tvar out : VSOut;\n\tout.pos = vec4<f32>(clipX, clipY, 0.0, 1.0);\n\tout.uv = uv;\n\tout.glyphScale = aGlyphBandScale.xy;\n\tout.bandScale = aGlyphBandScale.zw;\n\tout.bandMax = vec2<u32>(aBandMaxTexCoords.xy);\n\tout.bandsTexCoords = vec2<u32>(aBandMaxTexCoords.zw);\n\tout.color = aColor;\n\tout.blurAmount = aExtraParams.x;\n\tout.chromaticShift = aExtraParams.y;\n\tout.dissolveProgress = aExtraParams.z;\n\tout.vfxParam = aExtraParams.w;\n\n\treturn out;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet fw = max(abs(dpdx(in.uv)) + abs(dpdy(in.uv)), vec2<f32>(0.000001));\n\tlet glyph = SlugGlyph(in.glyphScale, in.bandScale, in.bandMax, in.bandsTexCoords);\n\tlet shaded = shadeSlugGlyph(\n\t\tin.uv,\n\t\tfw,\n\t\tin.pos.xy,\n\t\tglyph,\n\t\tin.color,\n\t\tu.params.x,\n\t\tin.blurAmount,\n\t\tin.chromaticShift,\n\t\tin.dissolveProgress,\n\t);\n\tif (shaded.a < 0.0001) {\n\t\tdiscard;\n\t}\n\treturn shaded;\n}\n`;\n\n//#endregion\n//#region src/slug/slug-pipeline.ts\nvar SlugPipeline = class {\n\tdevice;\n\tpipeline;\n\tuniformLayout;\n\ttextureLayout;\n\tuniformPool;\n\tinstancePool;\n\tuniformBindGroupCache = new UniformBindGroupCache();\n\tuniformData = new Float32Array(16);\n\tcaptured = null;\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(1024, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.instancePool = new BufferPool(131072, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"slug.wgsl\",\n\t\t\tcode: slugWgsl\n\t\t});\n\t\tthis.uniformLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"SlugUniformLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.textureLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"SlugTextureLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"unfilterable-float\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"uint\" }\n\t\t\t}]\n\t\t});\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"SlugPipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.uniformLayout, this.textureLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 96,\n\t\t\t\t\tstepMode: \"instance\",\n\t\t\t\t\tattributes: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\t\toffset: 16,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\t\toffset: 32,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 3,\n\t\t\t\t\t\t\toffset: 48,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 4,\n\t\t\t\t\t\t\toffset: 64,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 5,\n\t\t\t\t\t\t\toffset: 80,\n\t\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.instancePool.reset();\n\t}\n\t/**\n\t* Record glyph draws instead of issuing them, until endCapture: a 3D text\n\t* layer hands its glyphs to the 3D pass rather than rasterizing them.\n\t*/\n\tbeginCapture() {\n\t\tthis.captured = [];\n\t}\n\tendCapture() {\n\t\tconst batches = this.captured ?? [];\n\t\tthis.captured = null;\n\t\treturn batches;\n\t}\n\tdraw(pass, transformStack, font, instanceData, instanceCount, _color, surfaceWidth, surfaceHeight, opts) {\n\t\tif (instanceCount === 0) return;\n\t\tif (!font.curvesTex || !font.bandsTex) return;\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\tif (this.captured) {\n\t\t\tlet m = transformStack.getCurrent();\n\t\t\tif (opts?.transform) m = m.multiply(opts.transform);\n\t\t\tthis.captured.push({\n\t\t\t\tfont,\n\t\t\t\tinstances: instanceData.slice(0, instanceCount * 24),\n\t\t\t\tinstanceCount,\n\t\t\t\topacity,\n\t\t\t\tslant: opts?.customParam ?? 0,\n\t\t\t\ttransform: [\n\t\t\t\t\tm.a,\n\t\t\t\t\tm.b,\n\t\t\t\t\tm.c,\n\t\t\t\t\tm.d,\n\t\t\t\t\tm.e,\n\t\t\t\t\tm.f\n\t\t\t\t]\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\ttransformStack.packIntoBuffer(this.uniformData, opacity, surfaceWidth, surfaceHeight, opts?.transform, opts?.customParam);\n\t\tthis.encode(pass, font, instanceData, instanceCount);\n\t}\n\t/** Draw captured batches into a 2D pass, with the transforms they were captured under. */\n\tdrawBatches(pass, batches, surfaceWidth, surfaceHeight) {\n\t\tfor (const batch of batches) {\n\t\t\tconst [a, b, c, d, e, f] = batch.transform;\n\t\t\tthis.uniformData.set([\n\t\t\t\ta,\n\t\t\t\tb,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tc,\n\t\t\t\td,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\te,\n\t\t\t\tf,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t\tbatch.opacity,\n\t\t\t\tsurfaceWidth,\n\t\t\t\tsurfaceHeight,\n\t\t\t\tbatch.slant\n\t\t\t]);\n\t\t\tthis.encode(pass, batch.font, batch.instances, batch.instanceCount);\n\t\t}\n\t}\n\tencode(pass, font, instanceData, instanceCount) {\n\t\tif (!font.curvesTex || !font.bandsTex) return;\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, this.uniformData);\n\t\tconst instanceBuffer = this.instancePool.getBuffer(this.device, instanceData);\n\t\tconst textureBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.textureLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: font.curvesTex.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: font.bandsTex.createView()\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(this.pipeline);\n\t\tconst uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setBindGroup(1, textureBindGroup);\n\t\tpass.setVertexBuffer(0, instanceBuffer);\n\t\tpass.draw(6, instanceCount);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.instancePool.destroy();\n\t\tthis.uniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/bind-group-cache.ts\nvar BindGroupCache = class {\n\tcache = /* @__PURE__ */ new WeakMap();\n\tdualCache = /* @__PURE__ */ new WeakMap();\n\tgetBindGroup(device, layout, texture, sampler) {\n\t\tlet layoutMap = this.cache.get(texture);\n\t\tif (!layoutMap) {\n\t\t\tlayoutMap = /* @__PURE__ */ new Map();\n\t\t\tthis.cache.set(texture, layoutMap);\n\t\t}\n\t\tlet bg = layoutMap.get(layout);\n\t\tif (!bg) {\n\t\t\tbg = device.createBindGroup({\n\t\t\t\tlayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: texture.createView()\n\t\t\t\t}, {\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}]\n\t\t\t});\n\t\t\tlayoutMap.set(layout, bg);\n\t\t}\n\t\treturn bg;\n\t}\n\tgetCompositeBindGroup(device, layout, baseTexture, overlayTexture, sampler) {\n\t\tlet overlayWeakMap = this.dualCache.get(baseTexture);\n\t\tif (!overlayWeakMap) {\n\t\t\toverlayWeakMap = /* @__PURE__ */ new WeakMap();\n\t\t\tthis.dualCache.set(baseTexture, overlayWeakMap);\n\t\t}\n\t\tlet layoutMap = overlayWeakMap.get(overlayTexture);\n\t\tif (!layoutMap) {\n\t\t\tlayoutMap = /* @__PURE__ */ new Map();\n\t\t\toverlayWeakMap.set(overlayTexture, layoutMap);\n\t\t}\n\t\tlet bg = layoutMap.get(layout);\n\t\tif (!bg) {\n\t\t\tbg = device.createBindGroup({\n\t\t\t\tlayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: baseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: overlayTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tlayoutMap.set(layout, bg);\n\t\t}\n\t\treturn bg;\n\t}\n\tdestroy() {\n\t\tthis.cache = /* @__PURE__ */ new WeakMap();\n\t\tthis.dualCache = /* @__PURE__ */ new WeakMap();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/clip-stack.ts\nvar ClipStack = class {\n\tscissorStack = [];\n\tstencilStack = [];\n\tpushScissor(rect, surfaceWidth, surfaceHeight) {\n\t\tthis.scissorStack.push({\n\t\t\trect,\n\t\t\tsurfaceWidth,\n\t\t\tsurfaceHeight\n\t\t});\n\t}\n\tpopScissor() {\n\t\tif (this.scissorStack.length > 0) this.scissorStack.pop();\n\t}\n\tsaveScissors() {\n\t\treturn [...this.scissorStack];\n\t}\n\trestoreScissors(entries) {\n\t\tthis.scissorStack = [...entries];\n\t}\n\tclearScissors() {\n\t\tthis.scissorStack = [];\n\t}\n\tgetCurrentScissor(surfaceWidth, surfaceHeight) {\n\t\tconst entry = this.scissorStack[this.scissorStack.length - 1];\n\t\tif (!entry) return void 0;\n\t\tif (surfaceWidth !== void 0 && surfaceHeight !== void 0 && entry.surfaceWidth !== void 0 && entry.surfaceHeight !== void 0 && entry.surfaceWidth !== 0 && entry.surfaceHeight !== 0 && (entry.surfaceWidth !== surfaceWidth || entry.surfaceHeight !== surfaceHeight)) return;\n\t\treturn entry.rect;\n\t}\n\tpushStencilClip(path$1) {\n\t\tthis.stencilStack.push(path$1);\n\t}\n\tpopStencilClip() {\n\t\tif (this.stencilStack.length > 0) this.stencilStack.pop();\n\t}\n\tgetCurrentStencil() {\n\t\treturn this.stencilStack[this.stencilStack.length - 1];\n\t}\n\tapplyScissorToPass(pass, surfaceWidth, surfaceHeight) {\n\t\tconst current = this.getCurrentScissor(surfaceWidth, surfaceHeight);\n\t\tif (!current) {\n\t\t\tpass.setScissorRect(0, 0, Math.max(1, Math.floor(surfaceWidth)), Math.max(1, Math.floor(surfaceHeight)));\n\t\t\treturn;\n\t\t}\n\t\tconst x = Math.max(0, Math.floor(current.x));\n\t\tconst y = Math.max(0, Math.floor(current.y));\n\t\tconst right = Math.min(surfaceWidth, Math.ceil(current.x + current.width));\n\t\tconst bottom = Math.min(surfaceHeight, Math.ceil(current.y + current.height));\n\t\tconst width = Math.max(0, right - x);\n\t\tconst height = Math.max(0, bottom - y);\n\t\tif (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) pass.setScissorRect(0, 0, 1, 1);\n\t\telse {\n\t\t\tconst clampedWidth = Math.min(width, Math.max(0, surfaceWidth - x));\n\t\t\tconst clampedHeight = Math.min(height, Math.max(0, surfaceHeight - y));\n\t\t\tif (clampedWidth <= 0 || clampedHeight <= 0) pass.setScissorRect(0, 0, 1, 1);\n\t\t\telse pass.setScissorRect(Math.floor(x), Math.floor(y), Math.floor(clampedWidth), Math.floor(clampedHeight));\n\t\t}\n\t}\n\tdestroy() {\n\t\tthis.scissorStack = [];\n\t\tthis.stencilStack = [];\n\t}\n};\n\n//#endregion\n//#region src/shaders/composite.ts\nconst compositeWgsl = `\nstruct CompositeUniforms {\n\tblendMode : u32,\n\tpadding1 : u32,\n\tpadding2 : u32,\n\tpadding3 : u32,\n};\n\n@group(0) @binding(0) var<uniform> u : CompositeUniforms;\n@group(1) @binding(0) var baseTex : texture_2d<f32>;\n@group(1) @binding(1) var overlayTex : texture_2d<f32>;\n@group(1) @binding(2) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn lum(c: vec3<f32>) -> f32 {\n\treturn 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;\n}\n\nfn clip_color(c: vec3<f32>) -> vec3<f32> {\n\tlet l = lum(c);\n\tlet n = min(min(c.r, c.g), c.b);\n\tlet x = max(max(c.r, c.g), c.b);\n\tvar res = c;\n\tif (n < 0.0) {\n\t\tres = l + (((res - l) * l) / (l - n));\n\t}\n\tif (x > 1.0) {\n\t\tres = l + (((res - l) * (1.0 - l)) / (x - l));\n\t}\n\treturn res;\n}\n\nfn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet diff = l - lum(c);\n\treturn clip_color(c + vec3<f32>(diff));\n}\n\nfn sat(c: vec3<f32>) -> f32 {\n\treturn max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);\n}\n\nfn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {\n\tlet c_min = min(min(c.r, c.g), c.b);\n\tlet c_max = max(max(c.r, c.g), c.b);\n\tif (c_max <= c_min) {\n\t\treturn vec3<f32>(0.0);\n\t}\n\treturn (c - vec3<f32>(c_min)) * s / (c_max - c_min);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet d = textureSample(baseTex, samp, in.uv);\n\tlet s = textureSample(overlayTex, samp, in.uv);\n\tlet sa = s.a;\n\tlet da = d.a;\n\t\n\tswitch (u.blendMode) {\n\t\tcase 16u: { return d * sa; } // mask-in / destination-in\n\t\tcase 17u: { return d * (1.0 - sa); } // mask-out / destination-out\n\t\tcase 18u: { return s * da; } // source-in\n\t\tcase 19u: { return s * (1.0 - da); } // source-out\n\t\tcase 20u: { return s * da + d * (1.0 - sa); } // source-atop\n\t\tcase 21u: { return d + s * (1.0 - da); } // destination-over\n\t\tcase 22u: { return d * sa + s * (1.0 - da); } // destination-atop\n\t\tcase 23u: { return s + d; } // lighter\n\t\tcase 24u: { return s; } // copy\n\t\tcase 25u: { return s * (1.0 - da) + d * (1.0 - sa); } // xor\n\t\tdefault: {\n\t\t\tif (sa <= 0.0) { return d; }\n\t\t\tif (da <= 0.0) { return s; }\n\t\t}\n\t}\n\n\tlet s_rgb = select(s.rgb / sa, vec3<f32>(0.0), sa < 0.001);\n\tlet d_rgb = select(d.rgb / da, vec3<f32>(0.0), da < 0.001);\n\n\tvar b_rgb = s_rgb;\n\n\tswitch (u.blendMode) {\n\t\tcase 1u: { b_rgb = s_rgb * d_rgb; } // multiply\n\t\tcase 2u: { b_rgb = s_rgb + d_rgb - s_rgb * d_rgb; } // screen\n\t\tcase 3u: { // overlay\n\t\t\tb_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, d_rgb < vec3<f32>(0.5));\n\t\t}\n\t\tcase 4u: { b_rgb = min(s_rgb, d_rgb); } // darken\n\t\tcase 5u: { b_rgb = max(s_rgb, d_rgb); } // lighten\n\t\tcase 6u: { // color-dodge\n\t\t\tb_rgb = select(min(d_rgb / (1.0 - s_rgb), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb == vec3<f32>(1.0));\n\t\t}\n\t\tcase 7u: { // color-burn\n\t\t\tb_rgb = select(1.0 - min((1.0 - d_rgb) / s_rgb, vec3<f32>(1.0)), vec3<f32>(1.0), s_rgb == vec3<f32>(0.0));\n\t\t}\n\t\tcase 8u: { // hard-light\n\t\t\tb_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, s_rgb < vec3<f32>(0.5));\n\t\t}\n\t\tcase 9u: { // soft-light\n\t\t\tb_rgb = select(\n\t\t\t\td_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),\n\t\t\t\td_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),\n\t\t\t\ts_rgb <= vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 10u: { b_rgb = abs(d_rgb - s_rgb); } // difference\n\t\tcase 11u: { b_rgb = s_rgb + d_rgb - 2.0 * s_rgb * d_rgb; } // exclusion\n\t\tcase 12u: { b_rgb = set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb)); } // hue\n\t\tcase 13u: { b_rgb = set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb)); } // saturation\n\t\tcase 14u: { b_rgb = set_lum(s_rgb, lum(d_rgb)); } // color\n\t\tcase 15u: { b_rgb = set_lum(d_rgb, lum(s_rgb)); } // luminosity\n\t\tcase 16u: { return d * s.a; } // mask-in\n\t\tcase 17u: { return d * (1.0 - s.a); } // mask-out\n\t\tdefault: { b_rgb = s_rgb; } // normal\n\t}\n\n\tlet out_a = sa + da * (1.0 - sa);\n\tlet out_rgb = (1.0 - da) * s.rgb + (1.0 - sa) * d.rgb + sa * da * b_rgb;\n\n\treturn vec4<f32>(out_rgb, out_a);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/effect-pipeline.ts\nconst motionBlur2DWgsl = `\nstruct MotionBlur2DUniforms {\n vel: vec2<f32>,\n _pad: vec2<f32>,\n shutterFraction: f32,\n samples: f32,\n viewportWidth: f32,\n viewportHeight: f32,\n};\n\n@group(0) @binding(0) var<uniform> u: MotionBlur2DUniforms;\n@group(1) @binding(0) var sourceTexture: texture_2d<f32>;\n@group(1) @binding(1) var colorSampler: sampler;\n\n@vertex\nfn vs(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n var pos = array<vec2<f32>, 3>(\n vec2<f32>(-1.0, -3.0),\n vec2<f32>( 3.0, 1.0),\n vec2<f32>(-1.0, 1.0)\n );\n return vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n}\n\n@fragment\nfn fs(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {\n let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let sampleCount = u32(max(u.samples, 1.0));\n let velUV = u.vel * u.shutterFraction;\n let halfSamples = f32(sampleCount) * 0.5;\n \n var accum = vec4<f32>(0.0);\n var totalWeight = 0.0;\n \n for (var i = 0u; i < sampleCount; i = i + 1u) {\n let t = (f32(i) - halfSamples) / max(halfSamples, 1.0);\n let sampleUV = clamp(uv + velUV * t, vec2<f32>(0.0), vec2<f32>(1.0));\n let w = exp(-2.5 * t * t);\n accum += textureSampleLevel(sourceTexture, colorSampler, sampleUV, 0.0) * w;\n totalWeight += w;\n }\n \n return accum / max(totalWeight, 0.0001);\n}\n`;\nvar TexturePool = class {\n\ttextures = [];\n\ttexturesByKey = /* @__PURE__ */ new Map();\n\tindex = 0;\n\tgetTexture(device, width, height, format, exclude) {\n\t\tconst excludeSet = new Set(Array.isArray(exclude) ? exclude : exclude ? [exclude] : []);\n\t\tconst key = `${width}x${height}:${format}`;\n\t\tconst pool = this.texturesByKey.get(key);\n\t\tif (pool) for (let i = 0; i < pool.length; i++) {\n\t\t\tconst tex$1 = pool[i];\n\t\t\tif (!excludeSet.has(tex$1)) {\n\t\t\t\tpool.splice(i, 1);\n\t\t\t\tpool.unshift(tex$1);\n\t\t\t\tconst mainIdx = this.textures.indexOf(tex$1);\n\t\t\t\tif (mainIdx >= this.index) {\n\t\t\t\t\tthis.textures.splice(mainIdx, 1);\n\t\t\t\t\tthis.textures.splice(this.index, 0, tex$1);\n\t\t\t\t\tthis.index++;\n\t\t\t\t}\n\t\t\t\treturn tex$1;\n\t\t\t}\n\t\t}\n\t\tconst tex = device.createTexture({\n\t\t\tsize: [width, height],\n\t\t\tformat,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t});\n\t\tif (!this.texturesByKey.has(key)) this.texturesByKey.set(key, []);\n\t\tthis.texturesByKey.get(key).unshift(tex);\n\t\tthis.textures.splice(this.index, 0, tex);\n\t\tthis.index++;\n\t\treturn tex;\n\t}\n\treset() {\n\t\tthis.index = 0;\n\t}\n\tdestroy() {\n\t\tfor (const tex of this.textures) tex.destroy();\n\t\tthis.textures = [];\n\t\tthis.texturesByKey.clear();\n\t\tthis.index = 0;\n\t}\n};\nconst BLEND_MODE_MAP = {\n\tnormal: 0,\n\t\"source-over\": 0,\n\tmultiply: 1,\n\tscreen: 2,\n\toverlay: 3,\n\tdarken: 4,\n\tlighten: 5,\n\t\"color-dodge\": 6,\n\t\"color-burn\": 7,\n\t\"hard-light\": 8,\n\t\"soft-light\": 9,\n\tdifference: 10,\n\texclusion: 11,\n\thue: 12,\n\tsaturation: 13,\n\tcolor: 14,\n\tluminosity: 15,\n\t\"mask-in\": 16,\n\t\"destination-in\": 16,\n\t\"mask-out\": 17,\n\t\"destination-out\": 17,\n\t\"source-in\": 18,\n\t\"source-out\": 19,\n\t\"source-atop\": 20,\n\t\"destination-over\": 21,\n\t\"destination-atop\": 22,\n\tlighter: 23,\n\tcopy: 24,\n\txor: 25\n};\nvar EffectPipeline = class {\n\tdevice;\n\tcompositeUniformLayout;\n\tdualTextureLayout;\n\tmotionBlurUniformLayout;\n\tsingleTextureLayout;\n\tcompositePipeline;\n\tmotionBlurPipeline;\n\tcompositePool;\n\tmotionBlurPool;\n\ttexturePool;\n\tcompositeUniformBindGroupCache = new UniformBindGroupCache();\n\tmotionBlurUniformBindGroupCache = new UniformBindGroupCache();\n\tcompositeData = new Uint32Array(4);\n\tmotionBlurData = new Float32Array(8);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.compositePool = new BufferPool(1024, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.motionBlurPool = new BufferPool(1024, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.texturePool = new TexturePool();\n\t\tthis.compositeUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tthis.dualTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] });\n\t\tthis.motionBlurUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tthis.singleTextureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst compositePipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [this.compositeUniformLayout, this.dualTextureLayout] });\n\t\tconst compositeModule = device.createShaderModule({\n\t\t\tlabel: \"composite.wgsl\",\n\t\t\tcode: compositeWgsl\n\t\t});\n\t\tthis.compositePipeline = device.createRenderPipeline({\n\t\t\tlabel: \"CompositePipeline\",\n\t\t\tlayout: compositePipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: compositeModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: compositeModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tconst motionBlurPipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [this.motionBlurUniformLayout, this.singleTextureLayout] });\n\t\tconst motionBlurModule = device.createShaderModule({\n\t\t\tlabel: \"motion-blur-2d.wgsl\",\n\t\t\tcode: motionBlur2DWgsl\n\t\t});\n\t\tthis.motionBlurPipeline = device.createRenderPipeline({\n\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\tlayout: motionBlurPipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: motionBlurModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: motionBlurModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.compositePool.reset();\n\t\tthis.motionBlurPool.reset();\n\t\tthis.texturePool.reset();\n\t}\n\tgetTexture(device, width, height, format, exclude) {\n\t\treturn this.texturePool.getTexture(device, width, height, format, exclude);\n\t}\n\tgetBuffer(device, data) {\n\t\treturn this.compositePool.getBuffer(device, data);\n\t}\n\tcomposite(encoder, bindGroupCache, samplerCache, baseTex, overlayTex, mode, format, exclude) {\n\t\tconst sampler = samplerCache.getSampler(this.device);\n\t\tconst combinedExclude = [baseTex, overlayTex];\n\t\tif (exclude) if (Array.isArray(exclude)) combinedExclude.push(...exclude);\n\t\telse combinedExclude.push(exclude);\n\t\tconst outTex = this.texturePool.getTexture(this.device, baseTex.width, baseTex.height, format, combinedExclude);\n\t\tthis.compositeData[0] = BLEND_MODE_MAP[mode] ?? 0;\n\t\tconst buffer = this.compositePool.getBuffer(this.device, this.compositeData);\n\t\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: outTex.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tpass.setPipeline(this.compositePipeline);\n\t\tconst uniformBindGroup = this.compositeUniformBindGroupCache.getBindGroup(this.device, this.compositeUniformLayout, buffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tconst textureBindGroup = bindGroupCache.getCompositeBindGroup(this.device, this.dualTextureLayout, baseTex, overlayTex, sampler);\n\t\tpass.setBindGroup(1, textureBindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t\treturn outTex;\n\t}\n\tapplyMotionBlur(encoder, bindGroupCache, samplerCache, sourceTex, vx, vy, shutterAngle = 180, samples = 16, format, exclude) {\n\t\tif (Math.abs(vx) < .1 && Math.abs(vy) < .1 || shutterAngle <= 0) return sourceTex;\n\t\tconst sampler = samplerCache.getSampler(this.device);\n\t\tconst combinedExclude = [sourceTex];\n\t\tif (exclude) if (Array.isArray(exclude)) combinedExclude.push(...exclude);\n\t\telse combinedExclude.push(exclude);\n\t\tconst outTex = this.texturePool.getTexture(this.device, sourceTex.width, sourceTex.height, format, combinedExclude);\n\t\tthis.motionBlurData[0] = vx / sourceTex.width;\n\t\tthis.motionBlurData[1] = vy / sourceTex.height;\n\t\tthis.motionBlurData[2] = 0;\n\t\tthis.motionBlurData[3] = 0;\n\t\tthis.motionBlurData[4] = shutterAngle / 360;\n\t\tthis.motionBlurData[5] = samples;\n\t\tthis.motionBlurData[6] = sourceTex.width;\n\t\tthis.motionBlurData[7] = sourceTex.height;\n\t\tconst buffer = this.motionBlurPool.getBuffer(this.device, this.motionBlurData);\n\t\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: outTex.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tpass.setPipeline(this.motionBlurPipeline);\n\t\tconst uniformBindGroup = this.motionBlurUniformBindGroupCache.getBindGroup(this.device, this.motionBlurUniformLayout, buffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setBindGroup(1, bindGroupCache.getBindGroup(this.device, this.singleTextureLayout, sourceTex, sampler));\n\t\tpass.draw(3);\n\t\tpass.end();\n\t\treturn outTex;\n\t}\n\tdestroy() {\n\t\tthis.compositePool.destroy();\n\t\tthis.motionBlurPool.destroy();\n\t\tthis.texturePool.destroy();\n\t\tthis.compositeUniformBindGroupCache.destroy();\n\t\tthis.motionBlurUniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/path-geometry.ts\n/**\n* Sample a cubic bezier curve into linear segments.\n*/\nfunction sampleCubicBezier(p0, p1, p2, p3, steps = 24) {\n\tconst segments = [];\n\tlet prev = p0;\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst t = i / steps;\n\t\tconst mt = 1 - t;\n\t\tconst mt2 = mt * mt;\n\t\tconst mt3 = mt2 * mt;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t2 * t;\n\t\tconst curr = {\n\t\t\tx: mt3 * p0.x + 3 * mt2 * t * p1.x + 3 * mt * t2 * p2.x + t3 * p3.x,\n\t\t\ty: mt3 * p0.y + 3 * mt2 * t * p1.y + 3 * mt * t2 * p2.y + t3 * p3.y\n\t\t};\n\t\tsegments.push({\n\t\t\tp0: prev,\n\t\t\tp1: curr\n\t\t});\n\t\tprev = curr;\n\t}\n\treturn segments;\n}\n/**\n* Sample a quadratic bezier curve into linear segments.\n*/\nfunction sampleQuadraticBezier(p0, p1, p2, steps = 16) {\n\tconst segments = [];\n\tlet prev = p0;\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst t = i / steps;\n\t\tconst mt = 1 - t;\n\t\tconst mt2 = mt * mt;\n\t\tconst t2 = t * t;\n\t\tconst curr = {\n\t\t\tx: mt2 * p0.x + 2 * mt * t * p1.x + t2 * p2.x,\n\t\t\ty: mt2 * p0.y + 2 * mt * t * p1.y + t2 * p2.y\n\t\t};\n\t\tsegments.push({\n\t\t\tp0: prev,\n\t\t\tp1: curr\n\t\t});\n\t\tprev = curr;\n\t}\n\treturn segments;\n}\n/**\n* Sample an SVG elliptical arc (endpoint parameterization) into line segments.\n* Converts to centre parameterization per SVG 1.1 F.6.5, scaling the radii up\n* when they are too small to span the endpoints (F.6.6).\n*/\nfunction sampleSvgArc(p0, rxIn, ryIn, rotationDeg, largeArc, sweep, p1) {\n\tlet rx = Math.abs(rxIn);\n\tlet ry = Math.abs(ryIn);\n\tif (rx < 1e-9 || ry < 1e-9) return [{\n\t\tp0,\n\t\tp1\n\t}];\n\tif (Math.hypot(p1.x - p0.x, p1.y - p0.y) < 1e-9) return [];\n\tconst phi = rotationDeg * Math.PI / 180;\n\tconst cos = Math.cos(phi);\n\tconst sin = Math.sin(phi);\n\tconst dx = (p0.x - p1.x) / 2;\n\tconst dy = (p0.y - p1.y) / 2;\n\tconst x1 = cos * dx + sin * dy;\n\tconst y1 = -sin * dx + cos * dy;\n\tconst lambda = x1 * x1 / (rx * rx) + y1 * y1 / (ry * ry);\n\tif (lambda > 1) {\n\t\trx *= Math.sqrt(lambda);\n\t\try *= Math.sqrt(lambda);\n\t}\n\tconst num = rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1;\n\tconst den = rx * rx * y1 * y1 + ry * ry * x1 * x1;\n\tconst coef = (largeArc === sweep ? -1 : 1) * Math.sqrt(Math.max(0, num / den));\n\tconst cxp = coef * rx * y1 / ry;\n\tconst cyp = -coef * ry * x1 / rx;\n\tconst cx = cos * cxp - sin * cyp + (p0.x + p1.x) / 2;\n\tconst cy = sin * cxp + cos * cyp + (p0.y + p1.y) / 2;\n\tconst angle = (ux, uy, vx, vy) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n\tconst theta1 = angle(1, 0, (x1 - cxp) / rx, (y1 - cyp) / ry);\n\tlet delta = angle((x1 - cxp) / rx, (y1 - cyp) / ry, (-x1 - cxp) / rx, (-y1 - cyp) / ry);\n\tif (!sweep && delta > 0) delta -= 2 * Math.PI;\n\tif (sweep && delta < 0) delta += 2 * Math.PI;\n\tconst steps = Math.max(4, Math.ceil(Math.abs(delta) / (2 * Math.PI) * 64));\n\tconst segments = [];\n\tlet prev = p0;\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst t = theta1 + delta * i / steps;\n\t\tconst ex = rx * Math.cos(t);\n\t\tconst ey = ry * Math.sin(t);\n\t\tconst curr = i === steps ? p1 : {\n\t\t\tx: cos * ex - sin * ey + cx,\n\t\t\ty: sin * ex + cos * ey + cy\n\t\t};\n\t\tsegments.push({\n\t\t\tp0: prev,\n\t\t\tp1: curr\n\t\t});\n\t\tprev = curr;\n\t}\n\treturn segments;\n}\n/**\n* Parse an SVG path string (M, L, H, V, C, S, Q, T, A, Z) into line segments.\n*/\nfunction parseSvgPathToSegments(d) {\n\tconst segments = [];\n\tif (!d || typeof d !== \"string\") return segments;\n\tconst tokens = [];\n\tconst regex = /([a-df-z])|([-+]?(?:\\d*\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?)/gi;\n\tlet match;\n\twhile ((match = regex.exec(d)) !== null) if (match[1]) tokens.push(match[1]);\n\telse if (match[2]) tokens.push(parseFloat(match[2]));\n\tlet cursor = 0;\n\tlet current = {\n\t\tx: 0,\n\t\ty: 0\n\t};\n\tlet subpathStart = {\n\t\tx: 0,\n\t\ty: 0\n\t};\n\tlet lastCubicControl = null;\n\tlet lastQuadControl = null;\n\twhile (cursor < tokens.length) {\n\t\tconst cmdToken = tokens[cursor++];\n\t\tif (typeof cmdToken !== \"string\") continue;\n\t\tconst cmd = cmdToken;\n\t\tconst isRelative = cmd === cmd.toLowerCase();\n\t\tconst upper = cmd.toUpperCase();\n\t\tconst getNum = () => {\n\t\t\tif (cursor < tokens.length && typeof tokens[cursor] === \"number\") return tokens[cursor++];\n\t\t\treturn 0;\n\t\t};\n\t\tswitch (upper) {\n\t\t\tcase \"M\": {\n\t\t\t\tlet first = true;\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tif (first) {\n\t\t\t\t\t\tcurrent = {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsubpathStart = {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfirst = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsegments.push({\n\t\t\t\t\t\t\tp0: current,\n\t\t\t\t\t\t\tp1: {\n\t\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\t\ty\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcurrent = {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"L\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: current,\n\t\t\t\t\t\tp1: {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcurrent = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"H\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tif (isRelative) x += current.x;\n\t\t\t\t\tconst next = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty: current.y\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: current,\n\t\t\t\t\t\tp1: next\n\t\t\t\t\t});\n\t\t\t\t\tcurrent = next;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"V\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) y += current.y;\n\t\t\t\t\tconst next = {\n\t\t\t\t\t\tx: current.x,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push({\n\t\t\t\t\t\tp0: current,\n\t\t\t\t\t\tp1: next\n\t\t\t\t\t});\n\t\t\t\t\tcurrent = next;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"C\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x1 = getNum();\n\t\t\t\t\tlet y1 = getNum();\n\t\t\t\t\tlet x2 = getNum();\n\t\t\t\t\tlet y2 = getNum();\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx1 += current.x;\n\t\t\t\t\t\ty1 += current.y;\n\t\t\t\t\t\tx2 += current.x;\n\t\t\t\t\t\ty2 += current.y;\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tconst p1 = {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t};\n\t\t\t\t\tconst p2 = {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t};\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleCubicBezier(current, p1, p2, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t\tlastCubicControl = p2;\n\t\t\t\t}\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"S\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x2 = getNum();\n\t\t\t\t\tlet y2 = getNum();\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx2 += current.x;\n\t\t\t\t\t\ty2 += current.y;\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tlet p1;\n\t\t\t\t\tif (lastCubicControl) p1 = {\n\t\t\t\t\t\tx: 2 * current.x - lastCubicControl.x,\n\t\t\t\t\t\ty: 2 * current.y - lastCubicControl.y\n\t\t\t\t\t};\n\t\t\t\t\telse p1 = {\n\t\t\t\t\t\tx: current.x,\n\t\t\t\t\t\ty: current.y\n\t\t\t\t\t};\n\t\t\t\t\tconst p2 = {\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2\n\t\t\t\t\t};\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleCubicBezier(current, p1, p2, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t\tlastCubicControl = p2;\n\t\t\t\t}\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"Q\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x1 = getNum();\n\t\t\t\t\tlet y1 = getNum();\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx1 += current.x;\n\t\t\t\t\t\ty1 += current.y;\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tconst p1 = {\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1\n\t\t\t\t\t};\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleQuadraticBezier(current, p1, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t\tlastQuadControl = p1;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"T\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tlet p1;\n\t\t\t\t\tif (lastQuadControl) p1 = {\n\t\t\t\t\t\tx: 2 * current.x - lastQuadControl.x,\n\t\t\t\t\t\ty: 2 * current.y - lastQuadControl.y\n\t\t\t\t\t};\n\t\t\t\t\telse p1 = {\n\t\t\t\t\t\tx: current.x,\n\t\t\t\t\t\ty: current.y\n\t\t\t\t\t};\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleQuadraticBezier(current, p1, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t\tlastQuadControl = p1;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"A\":\n\t\t\t\twhile (cursor < tokens.length && typeof tokens[cursor] === \"number\") {\n\t\t\t\t\tconst rx = getNum();\n\t\t\t\t\tconst ry = getNum();\n\t\t\t\t\tconst rotation = getNum();\n\t\t\t\t\tconst largeArc = getNum() !== 0;\n\t\t\t\t\tconst sweep = getNum() !== 0;\n\t\t\t\t\tlet x = getNum();\n\t\t\t\t\tlet y = getNum();\n\t\t\t\t\tif (isRelative) {\n\t\t\t\t\t\tx += current.x;\n\t\t\t\t\t\ty += current.y;\n\t\t\t\t\t}\n\t\t\t\t\tconst end = {\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty\n\t\t\t\t\t};\n\t\t\t\t\tsegments.push(...sampleSvgArc(current, rx, ry, rotation, largeArc, sweep, end));\n\t\t\t\t\tcurrent = end;\n\t\t\t\t}\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tcase \"Z\":\n\t\t\t\tif (Math.hypot(current.x - subpathStart.x, current.y - subpathStart.y) > 1e-5) segments.push({\n\t\t\t\t\tp0: current,\n\t\t\t\t\tp1: subpathStart\n\t\t\t\t});\n\t\t\t\tcurrent = subpathStart;\n\t\t\t\tlastCubicControl = null;\n\t\t\t\tlastQuadControl = null;\n\t\t\t\tbreak;\n\t\t\tdefault: break;\n\t\t}\n\t}\n\treturn segments;\n}\n/**\n* Trim linear path segments using arc-length parameterization.\n* Supports [trimStart, trimEnd] normalized in [0, 1] with trimOffset (in degrees 0..360 or normalized 0..1).\n*/\nfunction trimPathSegments(segments, trimStart, trimEnd, trimOffset = 0) {\n\tif (segments.length === 0) return [];\n\tconst lengths = [];\n\tlet totalLength = 0;\n\tfor (const seg of segments) {\n\t\tconst len = Math.hypot(seg.p1.x - seg.p0.x, seg.p1.y - seg.p0.y);\n\t\tlengths.push(len);\n\t\ttotalLength += len;\n\t}\n\tif (totalLength < 1e-6) return [];\n\tconst normalizedOffset = Math.abs(trimOffset) > 1 ? trimOffset % 360 / 360 : trimOffset;\n\tlet s = (trimStart + normalizedOffset) % 1;\n\tlet e = (trimEnd + normalizedOffset) % 1;\n\tif (s < 0) s += 1;\n\tif (e < 0) e += 1;\n\tconst extractRange = (startDist, endDist) => {\n\t\tif (startDist >= endDist) return [];\n\t\tconst result = [];\n\t\tlet accumulated = 0;\n\t\tfor (let i = 0; i < segments.length; i++) {\n\t\t\tconst seg = segments[i];\n\t\t\tconst segLen = lengths[i];\n\t\t\tconst segStart = accumulated;\n\t\t\tconst segEnd = accumulated + segLen;\n\t\t\taccumulated = segEnd;\n\t\t\tif (segEnd <= startDist || segStart >= endDist || segLen < 1e-6) continue;\n\t\t\tconst t0 = Math.max(0, (startDist - segStart) / segLen);\n\t\t\tconst t1 = Math.min(1, (endDist - segStart) / segLen);\n\t\t\tif (t1 > t0) {\n\t\t\t\tconst p0 = {\n\t\t\t\t\tx: seg.p0.x + (seg.p1.x - seg.p0.x) * t0,\n\t\t\t\t\ty: seg.p0.y + (seg.p1.y - seg.p0.y) * t0\n\t\t\t\t};\n\t\t\t\tconst p1 = {\n\t\t\t\t\tx: seg.p0.x + (seg.p1.x - seg.p0.x) * t1,\n\t\t\t\t\ty: seg.p0.y + (seg.p1.y - seg.p0.y) * t1\n\t\t\t\t};\n\t\t\t\tresult.push({\n\t\t\t\t\tp0,\n\t\t\t\t\tp1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\tif (trimStart === 0 && trimEnd === 1 && trimOffset === 0) return [...segments];\n\tif (Math.abs(s - e) < 1e-5) return [];\n\tif (s <= e) return extractRange(s * totalLength, e * totalLength);\n\telse {\n\t\tconst part1 = extractRange(s * totalLength, totalLength);\n\t\tconst part2 = extractRange(0, e * totalLength);\n\t\treturn [...part1, ...part2];\n\t}\n}\n/**\n* Apply dash patterns along linear path segments.\n*/\nfunction dashPathSegments(segments, dashArray, dashOffset = 0) {\n\tif (segments.length === 0 || dashArray.length === 0) return segments;\n\tlet patternLength = 0;\n\tfor (const d of dashArray) patternLength += d;\n\tif (patternLength < 1e-5) return segments;\n\tlet totalLength = 0;\n\tconst lengths = [];\n\tfor (const seg of segments) {\n\t\tconst len = Math.hypot(seg.p1.x - seg.p0.x, seg.p1.y - seg.p0.y);\n\t\tlengths.push(len);\n\t\ttotalLength += len;\n\t}\n\tconst result = [];\n\tconst currentDist = (dashOffset % patternLength + patternLength) % patternLength;\n\tlet dashIdx = 0;\n\tlet isDraw = true;\n\tlet distInPattern = currentDist;\n\twhile (distInPattern > dashArray[dashIdx]) {\n\t\tdistInPattern -= dashArray[dashIdx];\n\t\tdashIdx = (dashIdx + 1) % dashArray.length;\n\t\tisDraw = !isDraw;\n\t}\n\tlet remainingInDash = dashArray[dashIdx] - distInPattern;\n\tlet distOnPath = 0;\n\twhile (distOnPath < totalLength) {\n\t\tconst runLen = Math.min(remainingInDash, totalLength - distOnPath);\n\t\tif (isDraw && runLen > 1e-4) {\n\t\t\tconst sub = trimPathSegments(segments, distOnPath / totalLength, (distOnPath + runLen) / totalLength);\n\t\t\tresult.push(...sub);\n\t\t}\n\t\tdistOnPath += runLen;\n\t\tdashIdx = (dashIdx + 1) % dashArray.length;\n\t\tisDraw = !isDraw;\n\t\tremainingInDash = dashArray[dashIdx];\n\t}\n\treturn result;\n}\nfunction buildRectPath(w, h, rTL = 0, rTR = 0, rBR = 0, rBL = 0) {\n\tconst maxR = Math.min(w / 2, h / 2);\n\tconst tl = Math.min(rTL, maxR);\n\tconst tr = Math.min(rTR, maxR);\n\tconst br = Math.min(rBR, maxR);\n\tconst bl = Math.min(rBL, maxR);\n\tif (tl === 0 && tr === 0 && br === 0 && bl === 0) return `M 0 0 L ${w} 0 L ${w} ${h} L 0 ${h} Z`;\n\treturn [\n\t\t`M ${tl} 0`,\n\t\t`L ${w - tr} 0`,\n\t\ttr > 0 ? `Q ${w} 0 ${w} ${tr}` : `L ${w} 0`,\n\t\t`L ${w} ${h - br}`,\n\t\tbr > 0 ? `Q ${w} ${h} ${w - br} ${h}` : `L ${w} ${h}`,\n\t\t`L ${bl} ${h}`,\n\t\tbl > 0 ? `Q 0 ${h} 0 ${h - bl}` : `L 0 ${h}`,\n\t\t`L 0 ${tl}`,\n\t\ttl > 0 ? `Q 0 0 ${tl} 0` : `L 0 0`,\n\t\t\"Z\"\n\t].join(\" \");\n}\nfunction buildCirclePath(w, h) {\n\tconst r = Math.min(w, h) / 2;\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst k = r * .5522847498;\n\treturn [\n\t\t`M ${cx} ${cy - r}`,\n\t\t`C ${cx + k} ${cy - r} ${cx + r} ${cy - k} ${cx + r} ${cy}`,\n\t\t`C ${cx + r} ${cy + k} ${cx + k} ${cy + r} ${cx} ${cy + r}`,\n\t\t`C ${cx - k} ${cy + r} ${cx - r} ${cy + k} ${cx - r} ${cy}`,\n\t\t`C ${cx - r} ${cy - k} ${cx - k} ${cy - r} ${cx} ${cy - r}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\nfunction buildEllipsePath(w, h) {\n\tconst rx = w / 2;\n\tconst ry = h / 2;\n\tconst cx = rx;\n\tconst cy = ry;\n\tconst kx = rx * .5522847498;\n\tconst ky = ry * .5522847498;\n\treturn [\n\t\t`M ${cx} ${cy - ry}`,\n\t\t`C ${cx + kx} ${cy - ry} ${cx + rx} ${cy - ky} ${cx + rx} ${cy}`,\n\t\t`C ${cx + rx} ${cy + ky} ${cx + kx} ${cy + ry} ${cx} ${cy + ry}`,\n\t\t`C ${cx - kx} ${cy + ry} ${cx - rx} ${cy + ky} ${cx - rx} ${cy}`,\n\t\t`C ${cx - rx} ${cy - ky} ${cx - kx} ${cy - ry} ${cx} ${cy - ry}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\nfunction buildPolygonPath(w, h, sides = 5) {\n\tconst n = Math.max(3, sides);\n\tconst r = Math.min(w, h) / 2;\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst points = [];\n\tfor (let i = 0; i < n; i++) {\n\t\tconst angle = -Math.PI / 2 + i * 2 * Math.PI / n;\n\t\tpoints.push({\n\t\t\tx: cx + r * Math.cos(angle),\n\t\t\ty: cy + r * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x} ${p.y}`).join(\" \") + \" Z\";\n}\nfunction buildStarPath(w, h, points = 5, innerRatio = .5) {\n\tconst n = Math.max(3, points);\n\tconst rOuter = Math.min(w, h) / 2;\n\tconst rInner = rOuter * Math.max(.01, Math.min(.99, innerRatio));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst coords = [];\n\tfor (let i = 0; i < n * 2; i++) {\n\t\tconst angle = -Math.PI / 2 + i * Math.PI / n;\n\t\tconst r = i % 2 === 0 ? rOuter : rInner;\n\t\tcoords.push({\n\t\t\tx: cx + r * Math.cos(angle),\n\t\t\ty: cy + r * Math.sin(angle)\n\t\t});\n\t}\n\treturn coords.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x} ${p.y}`).join(\" \") + \" Z\";\n}\nfunction buildArrowPath(w, h, headWidth = 40, headLength = 40, shaftWidth = 20) {\n\tconst hw = Math.min(headWidth, h);\n\tconst hl = Math.min(headLength, w);\n\tconst sw = Math.min(shaftWidth, hw);\n\tconst cy = h / 2;\n\treturn [\n\t\t`M 0 ${cy - sw / 2}`,\n\t\t`L ${w - hl} ${cy - sw / 2}`,\n\t\t`L ${w - hl} ${cy - hw / 2}`,\n\t\t`L ${w} ${cy}`,\n\t\t`L ${w - hl} ${cy + hw / 2}`,\n\t\t`L ${w - hl} ${cy + sw / 2}`,\n\t\t`L 0 ${cy + sw / 2}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\nfunction buildShapeSvgPath(config$1) {\n\tconst { shapeType, width, height } = config$1;\n\tswitch (shapeType) {\n\t\tcase \"rect\": return buildRectPath(width, height, config$1.cornerRadius ?? 0, config$1.cornerRadius ?? 0, config$1.cornerRadius ?? 0, config$1.cornerRadius ?? 0);\n\t\tcase \"circle\": return buildCirclePath(width, height);\n\t\tcase \"ellipse\": return buildEllipsePath(width, height);\n\t\tcase \"polygon\": return buildPolygonPath(width, height, config$1.polygonSides ?? 5);\n\t\tcase \"star\": return buildStarPath(width, height, config$1.starPoints ?? 5, config$1.starInnerRadiusRatio ?? .5);\n\t\tcase \"arrow\": return buildArrowPath(width, height, config$1.arrowHeadWidth ?? 40, config$1.arrowHeadLength ?? 40, config$1.arrowShaftWidth ?? 20);\n\t\tcase \"path\": return config$1.path ?? \"\";\n\t\tdefault: return \"\";\n\t}\n}\n/**\n* Triangulate a simple 2D polygon contour into an array of triangle vertices using ear clipping.\n*/\nfunction triangulatePolygon(contour) {\n\tif (contour.length < 3) return [];\n\tif (contour.length === 3) return [\n\t\tcontour[0],\n\t\tcontour[1],\n\t\tcontour[2]\n\t];\n\tconst points = [...contour];\n\tconst last = points[points.length - 1];\n\tconst first = points[0];\n\tif (Math.hypot(last.x - first.x, last.y - first.y) < 1e-5) points.pop();\n\tif (points.length < 3) return [];\n\tlet area = 0;\n\tfor (let i = 0; i < points.length; i++) {\n\t\tconst j = (i + 1) % points.length;\n\t\tarea += points[i].x * points[j].y - points[j].x * points[i].y;\n\t}\n\tif (area < 0) points.reverse();\n\tconst isPointInTriangle = (p, a, b, c) => {\n\t\tconst crossA = (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x);\n\t\tconst crossB = (c.x - b.x) * (p.y - b.y) - (c.y - b.y) * (p.x - b.x);\n\t\tconst crossC = (a.x - c.x) * (p.y - c.y) - (a.y - c.y) * (p.x - c.x);\n\t\treturn crossA >= -1e-6 && crossB >= -1e-6 && crossC >= -1e-6;\n\t};\n\tconst isEar = (prev, curr, next, rem$1) => {\n\t\tif ((curr.x - prev.x) * (next.y - prev.y) - (curr.y - prev.y) * (next.x - prev.x) <= 1e-7) return false;\n\t\tfor (const p of rem$1) {\n\t\t\tif (p === prev || p === curr || p === next) continue;\n\t\t\tif (isPointInTriangle(p, prev, curr, next)) return false;\n\t\t}\n\t\treturn true;\n\t};\n\tconst triangles = [];\n\tconst rem = [...points];\n\tlet attempts = 0;\n\tconst maxAttempts = rem.length * rem.length * 2;\n\twhile (rem.length > 3 && attempts < maxAttempts) {\n\t\tattempts++;\n\t\tlet earFound = false;\n\t\tfor (let i = 0; i < rem.length; i++) {\n\t\t\tconst prev = rem[(i - 1 + rem.length) % rem.length];\n\t\t\tconst curr = rem[i];\n\t\t\tconst next = rem[(i + 1) % rem.length];\n\t\t\tif (isEar(prev, curr, next, rem)) {\n\t\t\t\ttriangles.push(prev, curr, next);\n\t\t\t\trem.splice(i, 1);\n\t\t\t\tearFound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!earFound) {\n\t\t\ttriangles.push(rem[0], rem[1], rem[2]);\n\t\t\trem.splice(1, 1);\n\t\t}\n\t}\n\tif (rem.length === 3) triangles.push(rem[0], rem[1], rem[2]);\n\treturn triangles;\n}\n/**\n* Triangulate a shape geometry into a flat Float32Array of 2D vertex pairs [x, y, x, y, ...].\n*/\nfunction triangulateShape(config$1) {\n\tconst { shapeType, width: w, height: h } = config$1;\n\tif (shapeType === \"rect\") {\n\t\tconst cr = config$1.cornerRadius ?? 0;\n\t\tif (cr <= 0) return new Float32Array([\n\t\t\t0,\n\t\t\t0,\n\t\t\tw,\n\t\t\t0,\n\t\t\tw,\n\t\t\th,\n\t\t\t0,\n\t\t\t0,\n\t\t\tw,\n\t\t\th,\n\t\t\t0,\n\t\t\th\n\t\t]);\n\t\tconst tris = triangulatePolygon(parseSvgPathToSegments(buildRectPath(w, h, cr, cr, cr, cr)).map((s) => s.p0));\n\t\tconst out = new Float32Array(tris.length * 2);\n\t\tfor (let i = 0; i < tris.length; i++) {\n\t\t\tout[i * 2] = tris[i].x;\n\t\t\tout[i * 2 + 1] = tris[i].y;\n\t\t}\n\t\treturn out;\n\t}\n\tif (shapeType === \"circle\" || shapeType === \"ellipse\") {\n\t\tconst cx = w / 2;\n\t\tconst cy = h / 2;\n\t\tconst rx = shapeType === \"circle\" ? Math.min(w, h) / 2 : w / 2;\n\t\tconst ry = shapeType === \"circle\" ? rx : h / 2;\n\t\tconst steps = 48;\n\t\tconst out = new Float32Array(steps * 3 * 2);\n\t\tlet ptr = 0;\n\t\tfor (let i = 0; i < steps; i++) {\n\t\t\tconst a0 = i * 2 * Math.PI / steps;\n\t\t\tconst a1 = (i + 1) * 2 * Math.PI / steps;\n\t\t\tout[ptr++] = cx;\n\t\t\tout[ptr++] = cy;\n\t\t\tout[ptr++] = cx + rx * Math.cos(a0);\n\t\t\tout[ptr++] = cy + ry * Math.sin(a0);\n\t\t\tout[ptr++] = cx + rx * Math.cos(a1);\n\t\t\tout[ptr++] = cy + ry * Math.sin(a1);\n\t\t}\n\t\treturn out;\n\t}\n\tif (shapeType === \"polygon\") {\n\t\tconst n = Math.max(3, config$1.polygonSides ?? 5);\n\t\tconst r = Math.min(w, h) / 2;\n\t\tconst cx = w / 2;\n\t\tconst cy = h / 2;\n\t\tconst out = new Float32Array(n * 3 * 2);\n\t\tlet ptr = 0;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst a0 = -Math.PI / 2 + i * 2 * Math.PI / n;\n\t\t\tconst a1 = -Math.PI / 2 + (i + 1) * 2 * Math.PI / n;\n\t\t\tout[ptr++] = cx;\n\t\t\tout[ptr++] = cy;\n\t\t\tout[ptr++] = cx + r * Math.cos(a0);\n\t\t\tout[ptr++] = cy + r * Math.sin(a0);\n\t\t\tout[ptr++] = cx + r * Math.cos(a1);\n\t\t\tout[ptr++] = cy + r * Math.sin(a1);\n\t\t}\n\t\treturn out;\n\t}\n\tif (shapeType === \"star\") {\n\t\tconst n = Math.max(3, config$1.starPoints ?? 5);\n\t\tconst rOuter = Math.min(w, h) / 2;\n\t\tconst rInner = rOuter * Math.max(.01, Math.min(.99, config$1.starInnerRadiusRatio ?? .5));\n\t\tconst cx = w / 2;\n\t\tconst cy = h / 2;\n\t\tconst totalVerts = n * 2;\n\t\tconst out = new Float32Array(totalVerts * 3 * 2);\n\t\tlet ptr = 0;\n\t\tfor (let i = 0; i < totalVerts; i++) {\n\t\t\tconst a0 = -Math.PI / 2 + i * Math.PI / n;\n\t\t\tconst a1 = -Math.PI / 2 + (i + 1) * Math.PI / n;\n\t\t\tconst r0 = i % 2 === 0 ? rOuter : rInner;\n\t\t\tconst r1 = (i + 1) % 2 === 0 ? rOuter : rInner;\n\t\t\tout[ptr++] = cx;\n\t\t\tout[ptr++] = cy;\n\t\t\tout[ptr++] = cx + r0 * Math.cos(a0);\n\t\t\tout[ptr++] = cy + r0 * Math.sin(a0);\n\t\t\tout[ptr++] = cx + r1 * Math.cos(a1);\n\t\t\tout[ptr++] = cy + r1 * Math.sin(a1);\n\t\t}\n\t\treturn out;\n\t}\n\tif (shapeType === \"arrow\") {\n\t\tconst hw = Math.min(config$1.arrowHeadWidth ?? 40, h);\n\t\tconst hl = Math.min(config$1.arrowHeadLength ?? 40, w);\n\t\tconst sw = Math.min(config$1.arrowShaftWidth ?? 20, hw);\n\t\tconst cy = h / 2;\n\t\tconst x0 = 0;\n\t\tconst x1 = w - hl;\n\t\tconst x2 = w;\n\t\tconst yTopShaft = cy - sw / 2;\n\t\tconst yBotShaft = cy + sw / 2;\n\t\tconst yTopHead = cy - hw / 2;\n\t\tconst yBotHead = cy + hw / 2;\n\t\treturn new Float32Array([\n\t\t\tx0,\n\t\t\tyTopShaft,\n\t\t\tx1,\n\t\t\tyTopShaft,\n\t\t\tx1,\n\t\t\tyBotShaft,\n\t\t\tx0,\n\t\t\tyTopShaft,\n\t\t\tx1,\n\t\t\tyBotShaft,\n\t\t\tx0,\n\t\t\tyBotShaft,\n\t\t\tx1,\n\t\t\tyTopHead,\n\t\t\tx2,\n\t\t\tcy,\n\t\t\tx1,\n\t\t\tyBotHead\n\t\t]);\n\t}\n\tif (shapeType === \"path\" && config$1.path) {\n\t\tconst segments = parseSvgPathToSegments(config$1.path);\n\t\tif (segments.length === 0) return new Float32Array(0);\n\t\tconst tris = triangulatePolygon(segments.map((s) => s.p0));\n\t\tconst out = new Float32Array(tris.length * 2);\n\t\tfor (let i = 0; i < tris.length; i++) {\n\t\t\tout[i * 2] = tris[i].x;\n\t\t\tout[i * 2 + 1] = tris[i].y;\n\t\t}\n\t\treturn out;\n\t}\n\treturn new Float32Array(0);\n}\n\n//#endregion\n//#region src/shaders/path.ts\nconst pathWgsl = `\nstruct Uniforms {\n transformCol0 : vec4<f32>,\n transformCol1 : vec4<f32>,\n transformCol2 : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = strokeWidth\n color : vec4<f32>,\n style : vec4<f32>, // x = capType (0 = round, 1 = butt, 2 = square)\n p0 : vec2<f32>,\n p1 : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) localPos : vec2<f32>,\n};\n\n@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {\n let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n let p = transform * vec3<f32>(xy, 1.0);\n \n let surfaceSize = u.params.yz;\n let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);\n}\n\nfn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {\n let ba = b - a;\n let len = length(ba);\n if (len < 1e-6) {\n return length(p - a) - radius;\n }\n let dir = ba / len;\n let normal = vec2<f32>(-dir.y, dir.x);\n let pa = p - a;\n \n let proj = dot(pa, dir);\n let perp = abs(dot(pa, normal));\n \n if (capType > 0.5 && capType < 1.5) {\n // Butt cap: terminates strictly at endpoints a and b\n let dx = max(-proj, proj - len);\n let dy = perp - radius;\n let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));\n let inside = min(max(dx, dy), 0.0);\n return outside + inside;\n } else if (capType >= 1.5) {\n // Square cap: extends past endpoints a and b by radius\n let dx = max(-proj - radius, proj - (len + radius));\n let dy = perp - radius;\n let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));\n let inside = min(max(dx, dy), 0.0);\n return outside + inside;\n } else {\n // Round cap (default)\n let h = clamp(proj / len, 0.0, 1.0);\n return length(pa - ba * h) - radius;\n }\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let radius = u.params.w * 0.5;\n let d = sdSegmentWithCap(in.localPos, u.p0, u.p1, radius, u.style.x);\n \n let fw = max(fwidth(d), 1e-5);\n let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);\n let alpha = u.color.a * u.params.x * edgeAlpha;\n if (alpha <= 0.0) {\n discard;\n }\n \n return vec4<f32>(u.color.rgb * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/path-pipeline.ts\nvar PathPipeline = class {\n\tdevice;\n\tpipeline;\n\tmaxPipeline;\n\tuniformLayout;\n\tuniformPool;\n\tvertexPool;\n\tuniformBindGroupCache = new UniformBindGroupCache();\n\tscratchData = new Float32Array(28);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(4096, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.vertexPool = new BufferPool(4096, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"path.wgsl\",\n\t\t\tcode: pathWgsl\n\t\t});\n\t\tthis.uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"PathPipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.uniformLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 8,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t}]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tthis.maxPipeline = device.createRenderPipeline({\n\t\t\tlabel: \"PathPipeline.max\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.uniformLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 8,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t}]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one\",\n\t\t\t\t\t\t\toperation: \"max\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one\",\n\t\t\t\t\t\t\toperation: \"max\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.vertexPool.reset();\n\t}\n\tdrawPath(pass, transformStack, pathStr, color, strokeWidth, surfaceWidth, surfaceHeight, opts) {\n\t\tlet segments = parseSvgPathToSegments(pathStr);\n\t\tif (segments.length === 0) return;\n\t\tif (opts?.trimStart !== void 0 || opts?.trimEnd !== void 0 || opts?.trimOffset !== void 0) segments = trimPathSegments(segments, opts.trimStart ?? 0, opts.trimEnd ?? 1, opts.trimOffset ?? 0);\n\t\tif (opts?.strokeDashArray && opts.strokeDashArray.length > 0) segments = dashPathSegments(segments, opts.strokeDashArray, opts.strokeDashOffset ?? 0);\n\t\tif (segments.length === 0) return;\n\t\tconst c = parseColor(color);\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\tlet capType = 0;\n\t\tif (opts?.strokeLineCap === \"butt\") capType = 1;\n\t\telse if (opts?.strokeLineCap === \"square\") capType = 2;\n\t\tfor (const segment of segments) this.drawSegment(pass, transformStack, segment.p0, segment.p1, c, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts);\n\t}\n\tdrawSegments(pass, transformStack, segments, color, strokeWidth, surfaceWidth, surfaceHeight, opts) {\n\t\tlet activeSegments = segments;\n\t\tif (opts?.trimStart !== void 0 || opts?.trimEnd !== void 0 || opts?.trimOffset !== void 0) activeSegments = trimPathSegments(activeSegments, opts.trimStart ?? 0, opts.trimEnd ?? 1, opts.trimOffset ?? 0);\n\t\tif (opts?.strokeDashArray && opts.strokeDashArray.length > 0) activeSegments = dashPathSegments(activeSegments, opts.strokeDashArray, opts.strokeDashOffset ?? 0);\n\t\tif (activeSegments.length === 0) return;\n\t\tconst c = parseColor(color);\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\tlet capType = 0;\n\t\tif (opts?.strokeLineCap === \"butt\") capType = 1;\n\t\telse if (opts?.strokeLineCap === \"square\") capType = 2;\n\t\tfor (const segment of activeSegments) this.drawSegment(pass, transformStack, segment.p0, segment.p1, c, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts);\n\t}\n\tdrawSegment(pass, transformStack, p0, p1, color, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts) {\n\t\tconst data = this.scratchData;\n\t\ttransformStack.packIntoBuffer(data, opacity, surfaceWidth, surfaceHeight, opts?.transform);\n\t\tdata[15] = strokeWidth;\n\t\tdata[16] = color.r;\n\t\tdata[17] = color.g;\n\t\tdata[18] = color.b;\n\t\tdata[19] = color.a;\n\t\tdata[20] = capType;\n\t\tdata[21] = 0;\n\t\tdata[22] = 0;\n\t\tdata[23] = 0;\n\t\tdata[24] = p0.x;\n\t\tdata[25] = p0.y;\n\t\tdata[26] = p1.x;\n\t\tdata[27] = p1.y;\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, data);\n\t\tconst dx = p1.x - p0.x;\n\t\tconst dy = p1.y - p0.y;\n\t\tconst len = Math.sqrt(dx * dx + dy * dy);\n\t\tif (len < 1e-6) return;\n\t\tconst padding = strokeWidth * .5 + 2;\n\t\tconst nx = dx / len * padding;\n\t\tconst ny = dy / len * padding;\n\t\tconst px = -ny;\n\t\tconst py = nx;\n\t\tconst vertexData = new Float32Array([\n\t\t\tp0.x - nx - px,\n\t\t\tp0.y - ny - py,\n\t\t\tp0.x - nx + px,\n\t\t\tp0.y - ny + py,\n\t\t\tp1.x + nx - px,\n\t\t\tp1.y + ny - py,\n\t\t\tp1.x + nx + px,\n\t\t\tp1.y + ny + py\n\t\t]);\n\t\tconst vertexBuffer = this.vertexPool.getBuffer(this.device, vertexData);\n\t\tconst pipeline = opts?.blendMode === \"max\" ? this.maxPipeline : this.pipeline;\n\t\tpass.setPipeline(pipeline);\n\t\tconst uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setVertexBuffer(0, vertexBuffer);\n\t\tpass.draw(4);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.vertexPool.destroy();\n\t\tthis.uniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/quad.ts\nconst quadWgsl = `\nstruct Uniforms {\n\ttransformCol0 : vec4<f32>,\n\ttransformCol1 : vec4<f32>,\n\ttransformCol2 : vec4<f32>,\n\tparams : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = blurAmount\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@location(0) xy : vec2<f32>, @location(1) uv : vec2<f32>) -> VSOut {\n\tlet transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n\tlet p = transform * vec3<f32>(xy, 1.0);\n\t\n\tlet surfaceSize = u.params.yz;\n\tlet clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n\tlet clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n\treturn VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), uv);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet opacity = u.params.x;\n\tlet blurAmount = u.params.w;\n\n\tif (blurAmount > 0.01) {\n\t\tlet fdx = dpdx(in.uv);\n\t\tlet fdy = dpdy(in.uv);\n\t\tlet fw = max(max(abs(fdx), abs(fdy)), vec2<f32>(0.000001));\n\t\tlet step = fw * blurAmount * 0.3;\n\n\t\tvar color = vec4<f32>(0.0);\n\t\tvar totalWeight = 0.0;\n\t\tfor (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {\n\t\t\tfor (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {\n\t\t\t\tlet offset = vec2<f32>(x_offset, y_offset) * step;\n\t\t\t\tlet sampleColor = textureSample(tex, samp, in.uv + offset);\n\t\t\t\tcolor = color + sampleColor;\n\t\t\t\ttotalWeight = totalWeight + 1.0;\n\t\t\t}\n\t\t}\n\t\treturn (color / totalWeight) * opacity;\n\t} else {\n\t\tlet color = textureSample(tex, samp, in.uv);\n\t\treturn color * opacity;\n\t}\n}\n`;\n\n//#endregion\n//#region src/renderer2d/quad-pipeline.ts\nvar BufferPool$1 = class {\n\tbuffers = [];\n\tindex = 0;\n\tsize;\n\tusage;\n\tconstructor(size, usage) {\n\t\tthis.size = size;\n\t\tthis.usage = usage;\n\t}\n\tgetBuffer(device, data) {\n\t\tif (this.index >= this.buffers.length) {\n\t\t\tconst buf$1 = device.createBuffer({\n\t\t\t\tsize: this.size,\n\t\t\t\tusage: this.usage\n\t\t\t});\n\t\t\tthis.buffers.push(buf$1);\n\t\t}\n\t\tconst buf = this.buffers[this.index++];\n\t\tdevice.queue.writeBuffer(buf, 0, data);\n\t\treturn buf;\n\t}\n\treset() {\n\t\tthis.index = 0;\n\t}\n\tdestroy() {\n\t\tfor (const buf of this.buffers) buf.destroy();\n\t\tthis.buffers = [];\n\t}\n};\nvar QuadPipeline = class {\n\tdevice;\n\tpipeline;\n\tuniformLayout;\n\ttextureLayout;\n\tuniformPool;\n\tvertexPool;\n\tuniformBindGroupCache = new UniformBindGroupCache();\n\tuniformData = new Float32Array(16);\n\tvertexData = new Float32Array(16);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool$1(64, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.vertexPool = new BufferPool$1(64, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"quad.wgsl\",\n\t\t\tcode: quadWgsl\n\t\t});\n\t\tthis.uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tthis.textureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [this.uniformLayout, this.textureLayout] });\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"QuadPipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 16,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t}, {\n\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\toffset: 8,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t}]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.vertexPool.reset();\n\t}\n\tdraw(pass, bindGroupCache, transformStack, texture, sampler, src, dst, surfaceWidth, surfaceHeight, opts) {\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\ttransformStack.packIntoBuffer(this.uniformData, opacity, surfaceWidth, surfaceHeight, opts?.transform);\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, this.uniformData);\n\t\tconst u0 = src.x / texture.width;\n\t\tconst v0 = src.y / texture.height;\n\t\tconst u1 = (src.x + src.width) / texture.width;\n\t\tconst v1 = (src.y + src.height) / texture.height;\n\t\tthis.vertexData[0] = dst.x;\n\t\tthis.vertexData[1] = dst.y;\n\t\tthis.vertexData[2] = u0;\n\t\tthis.vertexData[3] = v0;\n\t\tthis.vertexData[4] = dst.x + dst.width;\n\t\tthis.vertexData[5] = dst.y;\n\t\tthis.vertexData[6] = u1;\n\t\tthis.vertexData[7] = v0;\n\t\tthis.vertexData[8] = dst.x;\n\t\tthis.vertexData[9] = dst.y + dst.height;\n\t\tthis.vertexData[10] = u0;\n\t\tthis.vertexData[11] = v1;\n\t\tthis.vertexData[12] = dst.x + dst.width;\n\t\tthis.vertexData[13] = dst.y + dst.height;\n\t\tthis.vertexData[14] = u1;\n\t\tthis.vertexData[15] = v1;\n\t\tconst vertexBuffer = this.vertexPool.getBuffer(this.device, this.vertexData);\n\t\tconst uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);\n\t\tconst textureBindGroup = bindGroupCache.getBindGroup(this.device, this.textureLayout, texture, sampler);\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setBindGroup(1, textureBindGroup);\n\t\tpass.setVertexBuffer(0, vertexBuffer);\n\t\tpass.draw(4);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.vertexPool.destroy();\n\t\tthis.uniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/sampler-cache.ts\nvar SamplerCache = class {\n\tsamplers = /* @__PURE__ */ new Map();\n\tlru = [];\n\tmaxCapacity;\n\tconstructor(maxCapacity = 32) {\n\t\tthis.maxCapacity = maxCapacity;\n\t}\n\tgetSampler(device, desc = {}) {\n\t\tconst maxAnisotropy = Math.max(1, Math.min(16, desc.maxAnisotropy ?? 4));\n\t\tconst key = `${desc.magFilter ?? \"linear\"}:${desc.minFilter ?? \"linear\"}:${desc.mipmapFilter ?? \"linear\"}:${desc.addressModeU ?? \"clamp-to-edge\"}:${desc.addressModeV ?? \"clamp-to-edge\"}:${maxAnisotropy}`;\n\t\tlet sampler = this.samplers.get(key);\n\t\tif (!sampler) {\n\t\t\tsampler = device.createSampler({\n\t\t\t\tmagFilter: desc.magFilter ?? \"linear\",\n\t\t\t\tminFilter: desc.minFilter ?? \"linear\",\n\t\t\t\tmipmapFilter: desc.mipmapFilter ?? \"linear\",\n\t\t\t\taddressModeU: desc.addressModeU ?? \"clamp-to-edge\",\n\t\t\t\taddressModeV: desc.addressModeV ?? \"clamp-to-edge\",\n\t\t\t\tmaxAnisotropy\n\t\t\t});\n\t\t\tif (this.samplers.size >= this.maxCapacity) {\n\t\t\t\tconst evictKey = this.lru.pop();\n\t\t\t\tif (evictKey) this.samplers.delete(evictKey);\n\t\t\t}\n\t\t\tthis.samplers.set(key, sampler);\n\t\t} else this.lru = this.lru.filter((k) => k !== key);\n\t\tthis.lru.unshift(key);\n\t\treturn sampler;\n\t}\n\tdestroy() {\n\t\tthis.samplers.clear();\n\t\tthis.lru = [];\n\t}\n};\n\n//#endregion\n//#region src/shaders/shape-fill.ts\nconst shapeFillWgsl = `\nstruct Uniforms {\n transformCol0 : vec4<f32>,\n transformCol1 : vec4<f32>,\n transformCol2 : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = fillType (0=solid, 1=linear, 2=radial)\n color : vec4<f32>, // solid color or gradient start\n color2 : vec4<f32>, // gradient end\n gradCoords : vec4<f32>, // linear: (x0, y0, x1, y1), radial: (cx, cy, radius, unused)\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) localPos : vec2<f32>,\n};\n\n@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {\n let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n let p = transform * vec3<f32>(xy, 1.0);\n \n let surfaceSize = u.params.yz;\n let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var outColor = u.color;\n let fillType = u.params.w;\n \n if (fillType > 0.5 && fillType < 1.5) {\n // Linear gradient between p0 and p1\n let p0 = u.gradCoords.xy;\n let p1 = u.gradCoords.zw;\n let d = p1 - p0;\n let lenSq = dot(d, d);\n let t = clamp(dot(in.localPos - p0, d) / max(lenSq, 1e-6), 0.0, 1.0);\n outColor = mix(u.color, u.color2, t);\n } else if (fillType >= 1.5) {\n // Radial gradient from center out to radius\n let center = u.gradCoords.xy;\n let radius = max(u.gradCoords.z, 1e-6);\n let dist = length(in.localPos - center);\n let t = clamp(dist / radius, 0.0, 1.0);\n outColor = mix(u.color, u.color2, t);\n }\n \n let alpha = outColor.a * u.params.x;\n if (alpha <= 0.0) {\n discard;\n }\n \n return vec4<f32>(outColor.rgb * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/shape-fill-pipeline.ts\nvar ShapeFillPipeline = class {\n\tdevice;\n\tpipeline;\n\tuniformLayout;\n\tuniformPool;\n\tvertexPool;\n\tuniformData = new Float32Array(28);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(2048, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.vertexPool = new BufferPool(8192, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"shape-fill.wgsl\",\n\t\t\tcode: shapeFillWgsl\n\t\t});\n\t\tthis.uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ShapeFillPipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.uniformLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 8,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t}]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.vertexPool.reset();\n\t}\n\tdraw(pass, transformStack, vertices, fill, bounds, surfaceWidth, surfaceHeight, opts) {\n\t\tif (vertices.length < 6 || fill.type === \"none\") return;\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\ttransformStack.packIntoBuffer(this.uniformData, opacity, surfaceWidth, surfaceHeight, opts?.transform);\n\t\tlet fillTypeNum = 0;\n\t\tif (fill.type === \"linear\") fillTypeNum = 1;\n\t\telse if (fill.type === \"radial\") fillTypeNum = 2;\n\t\tthis.uniformData[15] = fillTypeNum;\n\t\tconst c1 = parseColor(fill.color ?? \"#ffffff\");\n\t\tthis.uniformData[16] = c1.r;\n\t\tthis.uniformData[17] = c1.g;\n\t\tthis.uniformData[18] = c1.b;\n\t\tthis.uniformData[19] = c1.a;\n\t\tconst c2 = parseColor(fill.color2 ?? fill.color ?? \"#ffffff\");\n\t\tthis.uniformData[20] = c2.r;\n\t\tthis.uniformData[21] = c2.g;\n\t\tthis.uniformData[22] = c2.b;\n\t\tthis.uniformData[23] = c2.a;\n\t\tif (fillTypeNum === 1) {\n\t\t\tthis.uniformData[24] = fill.startX ?? bounds.x;\n\t\t\tthis.uniformData[25] = fill.startY ?? bounds.y;\n\t\t\tthis.uniformData[26] = fill.endX ?? bounds.x + bounds.width;\n\t\t\tthis.uniformData[27] = fill.endY ?? bounds.y + bounds.height;\n\t\t} else if (fillTypeNum === 2) {\n\t\t\tthis.uniformData[24] = fill.cx ?? bounds.x + bounds.width / 2;\n\t\t\tthis.uniformData[25] = fill.cy ?? bounds.y + bounds.height / 2;\n\t\t\tthis.uniformData[26] = fill.radius ?? Math.max(bounds.width, bounds.height) / 2;\n\t\t\tthis.uniformData[27] = 0;\n\t\t} else {\n\t\t\tthis.uniformData[24] = 0;\n\t\t\tthis.uniformData[25] = 0;\n\t\t\tthis.uniformData[26] = 0;\n\t\t\tthis.uniformData[27] = 0;\n\t\t}\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, this.uniformData);\n\t\tconst vertexBuffer = this.vertexPool.getBuffer(this.device, vertices);\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, this.device.createBindGroup({\n\t\t\tlayout: this.uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}));\n\t\tpass.setVertexBuffer(0, vertexBuffer);\n\t\tpass.draw(vertices.length / 2);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.vertexPool.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/solid.ts\nconst solidWgsl = `\nstruct Uniforms {\n transformCol0 : vec4<f32>,\n transformCol1 : vec4<f32>,\n transformCol2 : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = cornerRadius\n color : vec4<f32>,\n rect : vec4<f32>, // x, y, width, height\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) localPos : vec2<f32>,\n};\n\n@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {\n let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);\n let p = transform * vec3<f32>(xy, 1.0);\n \n let surfaceSize = u.params.yz;\n let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;\n let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;\n\n return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);\n}\n\nfn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {\n let q = abs(p) - b + r;\n return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let center = u.rect.xy + u.rect.zw * 0.5;\n let halfSize = u.rect.zw * 0.5;\n let radius = u.params.w;\n \n let d = sdRoundedRect(in.localPos - center, halfSize, radius);\n let edgeAlpha = 1.0 - smoothstep(0.0, 1.0, d);\n let alpha = u.color.a * u.params.x * edgeAlpha;\n if (alpha <= 0.0) {\n discard;\n }\n \n return vec4<f32>(u.color.rgb * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/solid-pipeline.ts\nvar SolidPipeline = class {\n\tdevice;\n\tpipeline;\n\tuniformLayout;\n\tuniformPool;\n\tvertexPool;\n\tuniformBindGroupCache = new UniformBindGroupCache();\n\tuniformData = new Float32Array(24);\n\tvertexData = new Float32Array(8);\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(1024, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.vertexPool = new BufferPool(256, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"solid.wgsl\",\n\t\t\tcode: solidWgsl\n\t\t});\n\t\tthis.uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"SolidPipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.uniformLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 8,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t}]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t\tthis.vertexPool.reset();\n\t}\n\tdraw(pass, transformStack, rect, color, surfaceWidth, surfaceHeight, cornerRadius = 0, opts) {\n\t\tconst c = parseColor(color);\n\t\tconst opacity = opts?.opacity ?? 1;\n\t\ttransformStack.packIntoBuffer(this.uniformData, opacity, surfaceWidth, surfaceHeight, opts?.transform);\n\t\tthis.uniformData[15] = cornerRadius;\n\t\tthis.uniformData[16] = c.r;\n\t\tthis.uniformData[17] = c.g;\n\t\tthis.uniformData[18] = c.b;\n\t\tthis.uniformData[19] = c.a;\n\t\tthis.uniformData[20] = rect.x;\n\t\tthis.uniformData[21] = rect.y;\n\t\tthis.uniformData[22] = rect.width;\n\t\tthis.uniformData[23] = rect.height;\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, this.uniformData);\n\t\tthis.vertexData[0] = rect.x;\n\t\tthis.vertexData[1] = rect.y;\n\t\tthis.vertexData[2] = rect.x + rect.width;\n\t\tthis.vertexData[3] = rect.y;\n\t\tthis.vertexData[4] = rect.x;\n\t\tthis.vertexData[5] = rect.y + rect.height;\n\t\tthis.vertexData[6] = rect.x + rect.width;\n\t\tthis.vertexData[7] = rect.y + rect.height;\n\t\tconst vertexBuffer = this.vertexPool.getBuffer(this.device, this.vertexData);\n\t\tpass.setPipeline(this.pipeline);\n\t\tconst uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);\n\t\tpass.setBindGroup(0, uniformBindGroup);\n\t\tpass.setVertexBuffer(0, vertexBuffer);\n\t\tpass.draw(4);\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t\tthis.vertexPool.destroy();\n\t\tthis.uniformBindGroupCache.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/transform-stack.ts\nvar TransformStack = class {\n\tstack = [new DOMMatrix()];\n\tpush(matrix) {\n\t\tconst next = this.stack[this.stack.length - 1].multiply(matrix);\n\t\tthis.stack.push(next);\n\t}\n\tpop() {\n\t\tif (this.stack.length > 1) this.stack.pop();\n\t}\n\tgetCurrent() {\n\t\treturn this.stack[this.stack.length - 1];\n\t}\n\tpackIntoBuffer(bufferData, opacity, surfaceWidth, surfaceHeight, localOverride, customParam) {\n\t\tlet m = this.getCurrent();\n\t\tif (localOverride) m = m.multiply(localOverride);\n\t\tbufferData[0] = m.a;\n\t\tbufferData[1] = m.b;\n\t\tbufferData[2] = 0;\n\t\tbufferData[3] = 0;\n\t\tbufferData[4] = m.c;\n\t\tbufferData[5] = m.d;\n\t\tbufferData[6] = 0;\n\t\tbufferData[7] = 0;\n\t\tbufferData[8] = m.e;\n\t\tbufferData[9] = m.f;\n\t\tbufferData[10] = 1;\n\t\tbufferData[11] = 0;\n\t\tbufferData[12] = opacity;\n\t\tbufferData[13] = surfaceWidth;\n\t\tbufferData[14] = surfaceHeight;\n\t\tbufferData[15] = customParam ?? 0;\n\t}\n\tdestroy() {\n\t\tthis.stack = [new DOMMatrix()];\n\t}\n};\n\n//#endregion\n//#region src/renderer2d/index.ts\nfunction premultiplyClearColor(color) {\n\tif (Array.isArray(color)) {\n\t\tconst a$1 = color[3] ?? 1;\n\t\treturn [\n\t\t\tcolor[0] * a$1,\n\t\t\tcolor[1] * a$1,\n\t\t\tcolor[2] * a$1,\n\t\t\ta$1\n\t\t];\n\t}\n\tif (\"r\" in color) {\n\t\tconst a$1 = color.a ?? 1;\n\t\treturn {\n\t\t\tr: color.r * a$1,\n\t\t\tg: color.g * a$1,\n\t\t\tb: color.b * a$1,\n\t\t\ta: a$1\n\t\t};\n\t}\n\tconst arr = Array.from(color);\n\tconst a = arr[3] ?? 1;\n\treturn [\n\t\tarr[0] * a,\n\t\tarr[1] * a,\n\t\tarr[2] * a,\n\t\ta\n\t];\n}\nconst deviceRenderer2DCache = /* @__PURE__ */ new WeakMap();\nfunction getRenderer2D(device, format) {\n\tlet r2d = deviceRenderer2DCache.get(device);\n\tif (!r2d || r2d.format !== format || r2d.isDestroyed) {\n\t\tr2d = new Renderer2D(device, format);\n\t\tdeviceRenderer2DCache.set(device, r2d);\n\t}\n\tr2d.resetPools();\n\treturn r2d;\n}\nvar Renderer2D = class {\n\tdevice;\n\ttransformStack = new TransformStack();\n\tclipStack = new ClipStack();\n\tquadPipeline;\n\tsolidPipeline;\n\tshapeFillPipeline;\n\tpathPipeline;\n\teffectPipeline;\n\tslugPipeline;\n\tbindGroupCache = new BindGroupCache();\n\tsamplerCache = new SamplerCache();\n\tformat;\n\tisDestroyed = false;\n\t/**\n\t* Non-glyph draws issued so far. A 3D text layer compares it across its\n\t* content to learn whether anything besides captured glyphs (a backdrop,\n\t* an emoji) landed in its texture.\n\t*/\n\trasterDrawCount = 0;\n\tsurfaceWidth = 0;\n\tsurfaceHeight = 0;\n\tlastEncoder = null;\n\tconstructor(device, format) {\n\t\tthis.device = device;\n\t\tthis.format = format;\n\t\tthis.quadPipeline = new QuadPipeline(device, format);\n\t\tthis.solidPipeline = new SolidPipeline(device, format);\n\t\tthis.shapeFillPipeline = new ShapeFillPipeline(device, format);\n\t\tthis.pathPipeline = new PathPipeline(device, format);\n\t\tthis.effectPipeline = new EffectPipeline(device, format);\n\t\tthis.slugPipeline = new SlugPipeline(device, format);\n\t}\n\tbeginFrame(encoder, targetView, clearColor = {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, surfaceWidth, surfaceHeight, loadOp = \"clear\") {\n\t\tthis.surfaceWidth = surfaceWidth;\n\t\tthis.surfaceHeight = surfaceHeight;\n\t\tif (encoder !== this.lastEncoder) {\n\t\t\tthis.lastEncoder = encoder;\n\t\t\tthis.resetPools();\n\t\t}\n\t\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: targetView,\n\t\t\tclearValue: premultiplyClearColor(clearColor),\n\t\t\tloadOp,\n\t\t\tstoreOp: \"store\"\n\t\t}] });\n\t\tthis.clipStack.applyScissorToPass(pass, surfaceWidth, surfaceHeight);\n\t\treturn pass;\n\t}\n\tendFrame(_encoder) {}\n\tresetPools() {\n\t\tthis.quadPipeline.resetPools();\n\t\tthis.solidPipeline.resetPools();\n\t\tthis.shapeFillPipeline.resetPools();\n\t\tthis.pathPipeline.resetPools();\n\t\tif (this.effectPipeline) this.effectPipeline.resetPools();\n\t\tthis.slugPipeline.resetPools();\n\t\ttextureCache.prune(this.device);\n\t}\n\tdrawTexture(pass, tex, dst, opts) {\n\t\tconst sampler = this.samplerCache.getSampler(this.device);\n\t\tconst src = {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: tex.width,\n\t\t\theight: tex.height\n\t\t};\n\t\tthis.rasterDrawCount++;\n\t\tthis.quadPipeline.draw(pass, this.bindGroupCache, this.transformStack, tex, sampler, src, dst, this.surfaceWidth, this.surfaceHeight, opts);\n\t}\n\tdrawTextureRegion(pass, tex, src, dst, opts) {\n\t\tconst sampler = this.samplerCache.getSampler(this.device);\n\t\tthis.rasterDrawCount++;\n\t\tthis.quadPipeline.draw(pass, this.bindGroupCache, this.transformStack, tex, sampler, src, dst, this.surfaceWidth, this.surfaceHeight, opts);\n\t}\n\tdrawRect(pass, rect, color, cornerRadius = 0, opts) {\n\t\tlet cr = 0;\n\t\tlet effectiveOpts = opts;\n\t\tif (typeof cornerRadius === \"object\" && cornerRadius !== null) {\n\t\t\teffectiveOpts = cornerRadius;\n\t\t\tcr = 0;\n\t\t} else if (typeof cornerRadius === \"number\") cr = cornerRadius;\n\t\tthis.rasterDrawCount++;\n\t\tthis.solidPipeline.draw(pass, this.transformStack, rect, color, this.surfaceWidth, this.surfaceHeight, cr, effectiveOpts);\n\t}\n\tdrawPath(pass, pathStr, color, strokeWidth, opts) {\n\t\tthis.rasterDrawCount++;\n\t\tthis.pathPipeline.drawPath(pass, this.transformStack, pathStr, color, strokeWidth, this.surfaceWidth, this.surfaceHeight, opts);\n\t}\n\tdrawShapeFill(pass, vertices, fill, bounds, opts) {\n\t\tthis.rasterDrawCount++;\n\t\tthis.shapeFillPipeline.draw(pass, this.transformStack, vertices, fill, bounds, this.surfaceWidth, this.surfaceHeight, opts);\n\t}\n\tdrawShape(pass, config$1, fill, stroke, opts) {\n\t\tconst bounds = {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: config$1.width,\n\t\t\theight: config$1.height\n\t\t};\n\t\tif (fill && fill.type !== \"none\") {\n\t\t\tconst tris = triangulateShape(config$1);\n\t\t\tif (tris.length > 0) {\n\t\t\t\tthis.drawShapeFill(pass, tris, fill, bounds, opts);\n\t\t\t\tif ((!stroke || !stroke.width || stroke.width <= 0) && (fill.type ?? \"solid\") === \"solid\" && fill.color) {\n\t\t\t\t\tconst svgPath = buildShapeSvgPath(config$1);\n\t\t\t\t\tif (svgPath) this.drawPath(pass, svgPath, fill.color, 1, {\n\t\t\t\t\t\t...opts,\n\t\t\t\t\t\tstrokeLineCap: \"round\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (stroke && stroke.width && stroke.width > 0 && stroke.color) {\n\t\t\tconst svgPath = buildShapeSvgPath(config$1);\n\t\t\tif (svgPath) this.drawPath(pass, svgPath, stroke.color, stroke.width, {\n\t\t\t\t...opts,\n\t\t\t\tstrokeLineCap: stroke.cap,\n\t\t\t\ttrimStart: stroke.trimStart,\n\t\t\t\ttrimEnd: stroke.trimEnd,\n\t\t\t\ttrimOffset: stroke.trimOffset,\n\t\t\t\tstrokeDashArray: stroke.dashArray,\n\t\t\t\tstrokeDashOffset: stroke.dashOffset\n\t\t\t});\n\t\t}\n\t}\n\tdrawRRect(pass, rrect, color, opts) {\n\t\tthis.drawRect(pass, rrect.rect, color, rrect.rx, opts);\n\t}\n\tgetTemporaryTexture(width, height, exclude) {\n\t\treturn this.effectPipeline.getTexture(this.device, width, height, this.format, exclude);\n\t}\n\tgetTemporaryBuffer(data) {\n\t\treturn this.effectPipeline.getBuffer(this.device, data);\n\t}\n\tcomposite(encoder, base, overlay, mode, exclude) {\n\t\treturn this.effectPipeline.composite(encoder, this.bindGroupCache, this.samplerCache, base, overlay, mode, this.format, exclude);\n\t}\n\tapplyMotionBlur(encoder, sourceTex, vx, vy, shutterAngle = 180, samples = 16, exclude) {\n\t\treturn this.effectPipeline.applyMotionBlur(encoder, this.bindGroupCache, this.samplerCache, sourceTex, vx, vy, shutterAngle, samples, this.format, exclude);\n\t}\n\tgetCurrentTransform() {\n\t\treturn this.transformStack.getCurrent();\n\t}\n\tgetTransformStack() {\n\t\treturn this.transformStack;\n\t}\n\tgetSurfaceWidth() {\n\t\treturn this.surfaceWidth;\n\t}\n\tgetSurfaceHeight() {\n\t\treturn this.surfaceHeight;\n\t}\n\tpushIdentity() {\n\t\tconst current = this.transformStack.getCurrent();\n\t\tthis.pushTransform(current.inverse());\n\t}\n\tpushTransform(matrix) {\n\t\tthis.transformStack.push(matrix);\n\t}\n\tpopTransform() {\n\t\tthis.transformStack.pop();\n\t}\n\tpushScissor(rect) {\n\t\tthis.clipStack.pushScissor(rect, this.surfaceWidth, this.surfaceHeight);\n\t}\n\tpushScissorLocal(rect) {\n\t\tconst m = this.transformStack.getCurrent();\n\t\tconst points = [\n\t\t\tm.transformPoint(new DOMPoint(rect.x, rect.y)),\n\t\t\tm.transformPoint(new DOMPoint(rect.x + rect.width, rect.y)),\n\t\t\tm.transformPoint(new DOMPoint(rect.x, rect.y + rect.height)),\n\t\t\tm.transformPoint(new DOMPoint(rect.x + rect.width, rect.y + rect.height))\n\t\t];\n\t\tconst xs = points.map((p) => p.x);\n\t\tconst ys = points.map((p) => p.y);\n\t\tlet x = Math.min(...xs);\n\t\tlet y = Math.min(...ys);\n\t\tlet width = Math.max(...xs) - x;\n\t\tlet height = Math.max(...ys) - y;\n\t\tconst current = this.clipStack.getCurrentScissor(this.surfaceWidth, this.surfaceHeight);\n\t\tif (current) {\n\t\t\tconst x1 = Math.max(x, current.x);\n\t\t\tconst y1 = Math.max(y, current.y);\n\t\t\tconst x2 = Math.min(x + width, current.x + current.width);\n\t\t\tconst y2 = Math.min(y + height, current.y + current.height);\n\t\t\tx = x1;\n\t\t\ty = y1;\n\t\t\twidth = Math.max(0, x2 - x1);\n\t\t\theight = Math.max(0, y2 - y1);\n\t\t}\n\t\tthis.clipStack.pushScissor({\n\t\t\tx,\n\t\t\ty,\n\t\t\twidth,\n\t\t\theight\n\t\t}, this.surfaceWidth, this.surfaceHeight);\n\t}\n\tpopScissor() {\n\t\tthis.clipStack.popScissor();\n\t}\n\tsuspendScissors() {\n\t\tconst saved = this.clipStack.saveScissors();\n\t\tthis.clipStack.clearScissors();\n\t\treturn saved;\n\t}\n\tresumeScissors(saved) {\n\t\tthis.clipStack.restoreScissors(saved);\n\t}\n\tpushStencilClip(path$1) {\n\t\tthis.clipStack.pushStencilClip(path$1);\n\t}\n\tpopStencilClip() {\n\t\tthis.clipStack.popStencilClip();\n\t}\n\tdestroy() {\n\t\tthis.isDestroyed = true;\n\t\tthis.transformStack.destroy();\n\t\tthis.clipStack.destroy();\n\t\tthis.bindGroupCache.destroy();\n\t\tthis.samplerCache.destroy();\n\t\tthis.quadPipeline.destroy();\n\t\tthis.solidPipeline.destroy();\n\t\tthis.shapeFillPipeline.destroy();\n\t\tthis.pathPipeline.destroy();\n\t\tthis.effectPipeline.destroy();\n\t\tthis.slugPipeline.destroy();\n\t\tthis.lastEncoder = null;\n\t}\n};\n\n//#endregion\n//#region src/surface-provider.ts\nvar BrowserSurfaceProvider = class {\n\tcolorFormat;\n\tcontext;\n\tdevice;\n\tcanvas;\n\trenderTarget;\n\tstagingBuffer = null;\n\tstagingBufferSize = 0;\n\tconstructor(device, canvas) {\n\t\tthis.device = device;\n\t\tthis.canvas = canvas;\n\t\tthis.colorFormat = typeof navigator !== \"undefined\" && \"gpu\" in navigator && navigator.gpu && typeof navigator.gpu.getPreferredCanvasFormat === \"function\" ? navigator.gpu.getPreferredCanvasFormat() : \"rgba8unorm\";\n\t\tthis.context = canvas.getContext(\"webgpu\");\n\t\tthis.context.configure({\n\t\t\tdevice,\n\t\t\tformat: this.colorFormat,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST,\n\t\t\talphaMode: \"premultiplied\"\n\t\t});\n\t\tthis.checkRenderTarget();\n\t}\n\tcheckRenderTarget() {\n\t\tif (!this.renderTarget || this.renderTarget.width !== this.canvas.width || this.renderTarget.height !== this.canvas.height) {\n\t\t\tif (this.renderTarget) {\n\t\t\t\tconst toDestroy = this.renderTarget;\n\t\t\t\tthis.device.queue.onSubmittedWorkDone().then(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttoDestroy.destroy();\n\t\t\t\t\t} catch (_) {}\n\t\t\t\t}).catch(() => {});\n\t\t\t}\n\t\t\tthis.renderTarget = this.device.createTexture({\n\t\t\t\tsize: [this.canvas.width, this.canvas.height],\n\t\t\t\tformat: this.colorFormat,\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\tif (this.stagingBuffer) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.stagingBuffer.destroy();\n\t\t\t\t} catch (_) {}\n\t\t\t\tthis.stagingBuffer = null;\n\t\t\t\tthis.stagingBufferSize = 0;\n\t\t\t}\n\t\t}\n\t}\n\tget width() {\n\t\treturn this.canvas.width;\n\t}\n\tget height() {\n\t\treturn this.canvas.height;\n\t}\n\tgetCurrentTextureView() {\n\t\tthis.checkRenderTarget();\n\t\treturn this.renderTarget.createView();\n\t}\n\tgetCurrentTexture() {\n\t\tthis.checkRenderTarget();\n\t\treturn this.renderTarget;\n\t}\n\tpresent() {\n\t\tthis.checkRenderTarget();\n\t\ttry {\n\t\t\tconst canvasTexture = this.context.getCurrentTexture();\n\t\t\tconst encoder = this.device.createCommandEncoder();\n\t\t\tencoder.copyTextureToTexture({ texture: this.renderTarget }, { texture: canvasTexture }, [this.width, this.height]);\n\t\t\tthis.device.queue.submit([encoder.finish()]);\n\t\t} catch (err) {\n\t\t\tconsole.warn(\"Failed to copy render target to canvas context on present:\", err);\n\t\t}\n\t}\n\tasync readPixels() {\n\t\tthis.checkRenderTarget();\n\t\tconst unpaddedBytesPerRow = this.width * 4;\n\t\tconst align = 256;\n\t\tconst bytesPerRow = Math.ceil(unpaddedBytesPerRow / align) * align;\n\t\tconst bufferSize = bytesPerRow * this.height;\n\t\tif (!this.stagingBuffer || this.stagingBufferSize !== bufferSize) {\n\t\t\tif (this.stagingBuffer) try {\n\t\t\t\tthis.stagingBuffer.destroy();\n\t\t\t} catch (_) {}\n\t\t\tthis.stagingBuffer = this.device.createBuffer({\n\t\t\t\tsize: bufferSize,\n\t\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t\t\t});\n\t\t\tthis.stagingBufferSize = bufferSize;\n\t\t}\n\t\tconst encoder = this.device.createCommandEncoder();\n\t\tencoder.copyTextureToBuffer({ texture: this.renderTarget }, {\n\t\t\tbuffer: this.stagingBuffer,\n\t\t\tbytesPerRow\n\t\t}, [this.width, this.height]);\n\t\tthis.device.queue.submit([encoder.finish()]);\n\t\tawait this.stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedRange = this.stagingBuffer.getMappedRange();\n\t\tconst data = new Uint8ClampedArray(unpaddedBytesPerRow * this.height);\n\t\tconst sourceView = new Uint8Array(mappedRange);\n\t\tif (bytesPerRow === unpaddedBytesPerRow) data.set(sourceView);\n\t\telse for (let y = 0; y < this.height; y++) {\n\t\t\tconst srcOffset = y * bytesPerRow;\n\t\t\tconst dstOffset = y * unpaddedBytesPerRow;\n\t\t\tdata.set(sourceView.subarray(srcOffset, srcOffset + unpaddedBytesPerRow), dstOffset);\n\t\t}\n\t\tthis.stagingBuffer.unmap();\n\t\tif (this.colorFormat === \"bgra8unorm\") for (let i = 0; i < data.length; i += 4) {\n\t\t\tconst r = data[i];\n\t\t\tdata[i] = data[i + 2];\n\t\t\tdata[i + 2] = r;\n\t\t}\n\t\treturn data;\n\t}\n\tdestroy() {\n\t\tif (this.renderTarget) try {\n\t\t\tthis.renderTarget.destroy();\n\t\t} catch (_) {}\n\t\tthis.stagingBuffer = null;\n\t\tthis.stagingBufferSize = 0;\n\t}\n};\nvar NodeSurfaceProvider = class {\n\twidth;\n\theight;\n\tcolorFormat = \"rgba8unorm\";\n\tdevice;\n\trenderTarget;\n\tstagingBuffer;\n\tbytesPerRow;\n\tunpaddedBytesPerRow;\n\tconstructor(device, width, height) {\n\t\tthis.device = device;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.renderTarget = device.createTexture({\n\t\t\tsize: [width, height],\n\t\t\tformat: this.colorFormat,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t\t});\n\t\tthis.unpaddedBytesPerRow = width * 4;\n\t\tconst align = 256;\n\t\tthis.bytesPerRow = Math.ceil(this.unpaddedBytesPerRow / align) * align;\n\t\tconst bufferSize = this.bytesPerRow * height;\n\t\tthis.stagingBuffer = device.createBuffer({\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t\t});\n\t}\n\tgetCurrentTextureView() {\n\t\treturn this.renderTarget.createView();\n\t}\n\tgetCurrentTexture() {\n\t\treturn this.renderTarget;\n\t}\n\tpresent() {}\n\tasync readPixels() {\n\t\tconst encoder = this.device.createCommandEncoder();\n\t\tencoder.copyTextureToBuffer({ texture: this.renderTarget }, {\n\t\t\tbuffer: this.stagingBuffer,\n\t\t\tbytesPerRow: this.bytesPerRow\n\t\t}, [this.width, this.height]);\n\t\tthis.device.queue.submit([encoder.finish()]);\n\t\tawait this.device.queue.onSubmittedWorkDone();\n\t\tawait this.stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedRange = this.stagingBuffer.getMappedRange();\n\t\tconst data = new Uint8ClampedArray(this.unpaddedBytesPerRow * this.height);\n\t\tconst sourceView = new Uint8Array(mappedRange);\n\t\tif (this.bytesPerRow === this.unpaddedBytesPerRow) data.set(sourceView);\n\t\telse for (let y = 0; y < this.height; y++) {\n\t\t\tconst srcOffset = y * this.bytesPerRow;\n\t\t\tconst dstOffset = y * this.unpaddedBytesPerRow;\n\t\t\tdata.set(sourceView.subarray(srcOffset, srcOffset + this.unpaddedBytesPerRow), dstOffset);\n\t\t}\n\t\tthis.stagingBuffer.unmap();\n\t\treturn data;\n\t}\n\tdestroy() {\n\t\tif (this.renderTarget) try {\n\t\t\tthis.renderTarget.destroy();\n\t\t} catch (_) {}\n\t\tthis.stagingBuffer = null;\n\t}\n};\n\n//#endregion\n//#region src/render-context.tsx\nconst RenderContext = createContext(null);\nconst useRenderContext = () => {\n\tconst context = useContext(RenderContext);\n\tif (!context) throw new Error(\"useRenderContext must be used within a RenderProvider\");\n\treturn context;\n};\nconst RenderProvider = ({ width = 1920, height = 1080, children }) => {\n\tconst canvasRef = useRef(null);\n\tconst [contextValue, setContextValue] = useState(null);\n\tuseEffect(() => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas) return;\n\t\tlet isMounted = true;\n\t\tlet renderer = null;\n\t\tlet surface = null;\n\t\tconst initDevice = () => {\n\t\t\tensureDevice().then((device) => {\n\t\t\t\tif (!isMounted) return;\n\t\t\t\tsurface = new BrowserSurfaceProvider(device, canvas);\n\t\t\t\trenderer = new Renderer2D(device, surface.colorFormat);\n\t\t\t\tsetContextValue({\n\t\t\t\t\tdevice,\n\t\t\t\t\trenderer,\n\t\t\t\t\tsurface\n\t\t\t\t});\n\t\t\t\tdevice.lost.then((lostInfo) => {\n\t\t\t\t\tif (!isMounted) return;\n\t\t\t\t\tif (lostInfo.reason === \"destroyed\") return;\n\t\t\t\t\ttextureCache.destroy();\n\t\t\t\t\tSlugFontCache.destroy();\n\t\t\t\t\tinitDevice();\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\t\tinitDevice();\n\t\treturn () => {\n\t\t\tisMounted = false;\n\t\t\tif (renderer) renderer.destroy();\n\t\t\tif (surface) surface.destroy();\n\t\t\ttextureCache.destroy();\n\t\t\tSlugFontCache.destroy();\n\t\t};\n\t}, []);\n\treturn /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(\"canvas\", {\n\t\tref: canvasRef,\n\t\twidth,\n\t\theight,\n\t\tstyle: {\n\t\t\twidth: \"100%\",\n\t\t\theight: \"100%\"\n\t\t}\n\t}), contextValue && /* @__PURE__ */ jsx(RenderContext.Provider, {\n\t\tvalue: contextValue,\n\t\tchildren\n\t})] });\n};\n\n//#endregion\n//#region src/renderer2d/text-atlas.ts\nvar TextAtlas = class {\n\tdevice;\n\ttexture;\n\tcache = /* @__PURE__ */ new Map();\n\tcurrentX = 0;\n\tcurrentY = 0;\n\trowHeight = 0;\n\tatlasSize = 8192;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.texture = device.createTexture({\n\t\t\tsize: [this.atlasSize, this.atlasSize],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t}\n\tget size() {\n\t\treturn this.atlasSize;\n\t}\n\tget(key) {\n\t\treturn this.cache.get(key);\n\t}\n\tgetTexture() {\n\t\treturn this.texture;\n\t}\n\tupload(key, canvas) {\n\t\tconst width = canvas.width;\n\t\tconst height = canvas.height;\n\t\tif (width > this.atlasSize || height > this.atlasSize) throw new Error(\"Text dimensions exceed atlas size\");\n\t\tif (this.currentX + width > this.atlasSize) {\n\t\t\tthis.currentX = 0;\n\t\t\tthis.currentY += this.rowHeight;\n\t\t\tthis.rowHeight = 0;\n\t\t}\n\t\tif (this.currentY + height > this.atlasSize) {\n\t\t\tthis.currentX = 0;\n\t\t\tthis.currentY = 0;\n\t\t\tthis.rowHeight = 0;\n\t\t\tthis.cache.clear();\n\t\t}\n\t\tthis.rowHeight = Math.max(this.rowHeight, height);\n\t\tconst region = {\n\t\t\tx: this.currentX,\n\t\t\ty: this.currentY,\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t\tthis.currentX += width;\n\t\ttry {\n\t\t\tthis.device.queue.copyExternalImageToTexture({ source: canvas }, {\n\t\t\t\ttexture: this.texture,\n\t\t\t\torigin: [\n\t\t\t\t\tregion.x,\n\t\t\t\t\tregion.y,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tpremultipliedAlpha: true\n\t\t\t}, [width, height]);\n\t\t} catch {\n\t\t\tconst imgData = canvas.getContext(\"2d\").getImageData(0, 0, width, height);\n\t\t\tthis.device.queue.writeTexture({\n\t\t\t\ttexture: this.texture,\n\t\t\t\torigin: [\n\t\t\t\t\tregion.x,\n\t\t\t\t\tregion.y,\n\t\t\t\t\t0\n\t\t\t\t]\n\t\t\t}, imgData.data, { bytesPerRow: width * 4 }, [width, height]);\n\t\t}\n\t\tconst atlasRegion = { src: region };\n\t\tthis.cache.set(key, atlasRegion);\n\t\treturn atlasRegion;\n\t}\n\tdestroy() {\n\t\tthis.texture.destroy();\n\t\tthis.cache.clear();\n\t\tthis.currentX = 0;\n\t\tthis.currentY = 0;\n\t\tthis.rowHeight = 0;\n\t}\n};\n\n//#endregion\n//#region src/shaders/audio-mesh-displace.ts\n/**\n* @file audio-mesh-displace.ts\n* WGSL compute shader for audio FFT & latent vector 3D mesh vertex displacement.\n* Processes 16-float (64-byte) vertex streams in parallel at 256 threads per workgroup.\n*/\nconst audioMeshDisplaceWgsl = `\nstruct AudioLatentBuffer {\n fftBins : array<f32, 1024>,\n bassEnergy : f32,\n drumTransient : f32,\n vocalEnergy : f32,\n timeMs : f32,\n};\n\nstruct DeformParams {\n mode : u32, // 0 = normal_extrusion, 1 = radial_pulse, 2 = harmonic_wave, 3 = twist, 4 = ripple\n freqMinBin : u32,\n freqMaxBin : u32,\n vertexCount : u32,\n amplitudeMultiplier : f32,\n damping : f32,\n timeMs : f32,\n pad : f32,\n};\n\nstruct VertexData {\n // 16 floats = 64 bytes per vertex\n f : array<f32, 16>,\n};\n\n@group(0) @binding(0) var<storage, read> audio : AudioLatentBuffer;\n@group(0) @binding(1) var<uniform> params : DeformParams;\n@group(0) @binding(2) var<storage, read> srcVertices : array<VertexData>;\n@group(0) @binding(3) var<storage, read_write> dstVertices : array<VertexData>;\n\n@compute @workgroup_size(256)\nfn cs_displace(@builtin(global_invocation_id) gid : vec3<u32>) {\n let idx = gid.x;\n if (idx >= params.vertexCount) {\n return;\n }\n\n let src = srcVertices[idx];\n var outV = src;\n\n // Extract attributes\n let pos = vec3<f32>(src.f[0], src.f[1], src.f[2]);\n let uv = vec2<f32>(src.f[3], src.f[4]);\n var norm = vec3<f32>(src.f[5], src.f[6], src.f[7]);\n\n let normLen = length(norm);\n if (normLen > 0.0001) {\n norm = norm / normLen;\n } else {\n norm = vec3<f32>(0.0, 1.0, 0.0);\n }\n\n // Determine frequency bin\n let minBin = max(0u, params.freqMinBin);\n let maxBin = min(1023u, max(minBin, params.freqMaxBin));\n let freqNorm = clamp(uv.x, 0.0, 1.0);\n let binIdx = u32(clamp(f32(minBin) + freqNorm * f32(maxBin - minBin), 0.0, 1023.0));\n let freqAmplitude = audio.fftBins[binIdx];\n\n var displacedPos = pos;\n var displacedNorm = norm;\n\n if (params.mode == 0u) {\n // Mode 0: normal_extrusion\n let bassOsc = sin(params.timeMs * 0.01 + pos.y * 0.5);\n let displacementMag = (freqAmplitude * 45.0 + audio.bassEnergy * 20.0 * bassOsc) * params.amplitudeMultiplier;\n displacedPos = pos + norm * displacementMag;\n\n // Dynamic normal perturbation based on spatial gradient\n let tangentDelta = cos(params.timeMs * 0.01 + pos.y * 0.5) * 0.5 * audio.bassEnergy * params.amplitudeMultiplier;\n var perturbed = norm + vec3<f32>(0.0, -tangentDelta * 0.05, 0.0);\n let pLen = length(perturbed);\n if (pLen > 0.0001) {\n displacedNorm = perturbed / pLen;\n }\n } else if (params.mode == 1u) {\n // Mode 1: radial_pulse\n let rLen = length(pos);\n var dir = norm;\n if (rLen > 0.0001) {\n dir = pos / rLen;\n }\n let pulse = (audio.bassEnergy * 35.0 + audio.drumTransient * 45.0) * params.amplitudeMultiplier;\n let dampingFactor = exp(-max(0.0, params.damping) * rLen * 0.01);\n displacedPos = pos + dir * (pulse * dampingFactor);\n displacedNorm = norm;\n } else if (params.mode == 3u) {\n // Mode 3: twist. Each slice turns about Y by its height times the\n // twist rate; a resting twist plus the bass, so it winds on the drop.\n let rate = (0.35 + audio.bassEnergy) * 0.004 * params.amplitudeMultiplier;\n let a = pos.y * rate;\n let c = cos(a);\n let s = sin(a);\n displacedPos = vec3<f32>(c * pos.x - s * pos.z, pos.y, s * pos.x + c * pos.z);\n displacedNorm = vec3<f32>(c * norm.x - s * norm.z, norm.y, s * norm.x + c * norm.z);\n } else if (params.mode == 4u) {\n // Mode 4: ripple. Concentric waves travel out across XY from the\n // origin, struck harder by the drums and fading with distance.\n let r = length(pos.xy);\n let phase = r * 0.05 - params.timeMs * 0.015;\n let height = (6.0 + audio.drumTransient * 28.0 + audio.bassEnergy * 10.0) * params.amplitudeMultiplier;\n let fade = exp(-max(0.0, params.damping) * r * 0.002);\n displacedPos = pos + norm * (sin(phase) * height * fade);\n // The wave's slope tilts the normal toward the travel direction.\n var radial = vec3<f32>(0.0, 0.0, 0.0);\n if (r > 0.0001) {\n radial = vec3<f32>(pos.x / r, pos.y / r, 0.0);\n }\n let slope = cos(phase) * 0.05 * height * fade;\n var perturbed = norm - radial * slope;\n let pLen = length(perturbed);\n if (pLen > 0.0001) {\n displacedNorm = perturbed / pLen;\n }\n } else {\n // Mode 2: harmonic_wave\n let wavePhase = params.timeMs * 0.005 + pos.y * 0.2;\n let wave = (sin(wavePhase) * audio.bassEnergy * 25.0 + cos(wavePhase * 2.0 + pos.x * 0.1) * freqAmplitude * 20.0) * params.amplitudeMultiplier;\n displacedPos = pos + norm * wave;\n\n let dWaveDy = cos(wavePhase) * 0.2 * audio.bassEnergy * 25.0 * params.amplitudeMultiplier;\n var perturbed = norm - vec3<f32>(0.0, dWaveDy * 0.03, 0.0);\n let pLen = length(perturbed);\n if (pLen > 0.0001) {\n displacedNorm = perturbed / pLen;\n }\n }\n\n // Write deformed position and normal\n outV.f[0] = displacedPos.x;\n outV.f[1] = displacedPos.y;\n outV.f[2] = displacedPos.z;\n\n outV.f[5] = displacedNorm.x;\n outV.f[6] = displacedNorm.y;\n outV.f[7] = displacedNorm.z;\n\n dstVertices[idx] = outV;\n}\n`;\n\n//#endregion\n//#region src/shaders/color-matrix.ts\nconst colorMatrixWgsl = `\nstruct ColorMatrixUniforms {\n\trow0 : vec4<f32>,\n\trow1 : vec4<f32>,\n\trow2 : vec4<f32>,\n\trow3 : vec4<f32>,\n\ttrans : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorMatrixUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSample(tex, samp, in.uv);\n\tvar rgba = vec4<f32>(c.rgb, c.a);\n\tif (c.a > 0.0) {\n\t\trgba = vec4<f32>(c.rgb / c.a, c.a);\n\t}\n\n\tlet r = dot(u.row0, rgba) + u.trans.x;\n\tlet g = dot(u.row1, rgba) + u.trans.y;\n\tlet b = dot(u.row2, rgba) + u.trans.z;\n\tlet a = dot(u.row3, rgba) + u.trans.w;\n\n\tlet outAlpha = clamp(a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n`;\n\n//#endregion\n//#region src/shaders/lut-viewer.ts\nconst lutViewerWgsl = `\nstruct Uniforms {\n\trotation: vec2f,\n\tzoom: f32,\n\taspect: f32,\n}\n\n@group(0) @binding(0) var<uniform> uniforms: Uniforms;\n\nstruct VertexInput {\n\t@location(0) pos: vec3f,\n\t@location(1) color: vec3f,\n}\n\nstruct VertexOutput {\n\t@builtin(position) clip_position: vec4f,\n\t@location(0) color: vec3f,\n\t@location(1) uv: vec2f,\n}\n\nfn rotateY(pos: vec3f, angle: f32) -> vec3f {\n\tlet s = sin(angle);\n\tlet c = cos(angle);\n\treturn vec3f(pos.x * c - pos.z * s, pos.y, pos.x * s + pos.z * c);\n}\n\nfn rotateX(pos: vec3f, angle: f32) -> vec3f {\n\tlet s = sin(angle);\n\tlet c = cos(angle);\n\treturn vec3f(pos.x, pos.y * c - pos.z * s, pos.y * s + pos.z * c);\n}\n\n@vertex\nfn vs_main(\n\tinput: VertexInput,\n\t@builtin(vertex_index) vertex_index: u32,\n) -> VertexOutput {\n\tvar out: VertexOutput;\n\n\tvar quad_pos = array<vec2f, 6>(\n\t\tvec2f(-0.5, -0.5),\n\t\tvec2f( 0.5, -0.5),\n\t\tvec2f(-0.5, 0.5),\n\t\tvec2f(-0.5, 0.5),\n\t\tvec2f( 0.5, -0.5),\n\t\tvec2f( 0.5, 0.5)\n\t);\n\tlet offset = quad_pos[vertex_index];\n\n\tvar rotated = rotateY(input.pos, uniforms.rotation.x);\n\trotated = rotateX(rotated, uniforms.rotation.y);\n\n\tlet camera_pos = vec3f(0.0, 0.0, uniforms.zoom);\n\tlet view_pos = rotated - camera_pos;\n\n\tlet point_size = 0.02;\n\tlet billboard_pos = view_pos + vec3f(offset * point_size, 0.0);\n\n\tlet f = 2.414;\n\tlet near = 0.1;\n\tlet far = 10.0;\n\n\tout.clip_position = vec4f(\n\t\t(billboard_pos.x * f) / uniforms.aspect,\n\t\tbillboard_pos.y * f,\n\t\tbillboard_pos.z * (far / (near - far)) + (far * near / (near - far)),\n\t\t-billboard_pos.z\n\t);\n\tout.color = input.color;\n\tout.uv = offset;\n\treturn out;\n}\n\n@fragment\nfn fs_main(input: VertexOutput) -> @location(0) vec4f {\n\tlet dist = dot(input.uv, input.uv);\n\tif (dist > 0.25) {\n\t\tdiscard;\n\t}\n\tlet alpha = smoothstep(0.25, 0.22, dist);\n\treturn vec4f(input.color, alpha);\n}\n\nvar<private> cube_vertices: array<vec3f, 24> = array<vec3f, 24>(\n\tvec3f(-0.5, -0.5, -0.5), vec3f( 0.5, -0.5, -0.5),\n\tvec3f( 0.5, -0.5, -0.5), vec3f( 0.5, 0.5, -0.5),\n\tvec3f( 0.5, 0.5, -0.5), vec3f(-0.5, 0.5, -0.5),\n\tvec3f(-0.5, 0.5, -0.5), vec3f(-0.5, -0.5, -0.5),\n\n\tvec3f(-0.5, -0.5, 0.5), vec3f( 0.5, -0.5, 0.5),\n\tvec3f( 0.5, -0.5, 0.5), vec3f( 0.5, 0.5, 0.5),\n\tvec3f( 0.5, 0.5, 0.5), vec3f(-0.5, 0.5, 0.5),\n\tvec3f(-0.5, 0.5, 0.5), vec3f(-0.5, -0.5, 0.5),\n\n\tvec3f(-0.5, -0.5, -0.5), vec3f(-0.5, -0.5, 0.5),\n\tvec3f( 0.5, -0.5, -0.5), vec3f( 0.5, -0.5, 0.5),\n\tvec3f( 0.5, 0.5, -0.5), vec3f( 0.5, 0.5, 0.5),\n\tvec3f(-0.5, 0.5, -0.5), vec3f(-0.5, 0.5, 0.5)\n);\n\n@vertex\nfn vs_wireframe(\n\t@builtin(vertex_index) vertex_index: u32,\n) -> @builtin(position) vec4f {\n\tlet pos = cube_vertices[vertex_index];\n\tvar rotated = rotateY(pos, uniforms.rotation.x);\n\trotated = rotateX(rotated, uniforms.rotation.y);\n\tlet view_pos = rotated - vec3f(0.0, 0.0, uniforms.zoom);\n\n\tlet f = 2.414;\n\tlet near = 0.1;\n\tlet far = 10.0;\n\n\treturn vec4f(\n\t\t(view_pos.x * f) / uniforms.aspect,\n\t\tview_pos.y * f,\n\t\tview_pos.z * (far / (near - far)) + (far * near / (near - far)),\n\t\t-view_pos.z\n\t);\n}\n\n@fragment\nfn fs_wireframe() -> @location(0) vec4f {\n\treturn vec4f(1.0, 1.0, 1.0, 0.25);\n}\n`;\n\n//#endregion\n//#region src/shaders/motion-blur.ts\n/**\n* @file packages/webgpu-renderers/src/shaders/motion-blur.ts\n* WGSL Shader Module for Velocity-Directed Line Integral Camera Motion Blur.\n*/\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n shutterFraction: f32, // shutterAngle / 360.0\n sampleCount: u32, // e.g. 16\n maxVelocity: f32, // in pixels\n tileDilation: u32,\n viewportWidth: f32,\n viewportHeight: f32,\n depthThreshold: f32,\n curveType: u32, // 0: box, 1: gaussian, 2: triangle\n};\n\n@group(0) @binding(0) var colorTexture: texture_2d<f32>;\n@group(0) @binding(1) var velocityTexture: texture_2d<f32>;\n@group(0) @binding(2) var depthTexture: texture_depth_2d;\n@group(0) @binding(3) var colorSampler: sampler;\n@group(0) @binding(4) var<uniform> u: MotionBlurUniforms;\n\nfn computeVertexPos(vertexIndex: u32) -> vec4<f32> {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0)\n );\n return vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n}\n\n@vertex\nfn vs(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n return computeVertexPos(vertexIndex);\n}\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n return computeVertexPos(vertexIndex);\n}\n\nfn executeMotionBlur(pos: vec4<f32>) -> vec4<f32> {\n let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let centerDepth = textureLoad(depthTexture, vec2<i32>(pos.xy), 0);\n let rawVel = textureSampleLevel(velocityTexture, colorSampler, uv, 0.0).xy;\n \n // Scale velocity by shutter exposure fraction\n var vel = rawVel * u.shutterFraction;\n let speed = length(vel);\n \n if (speed < 0.5) {\n return textureSampleLevel(colorTexture, colorSampler, uv, 0.0);\n }\n \n // Clamp to configured max velocity limit\n if (speed > u.maxVelocity) {\n vel = (vel / speed) * u.maxVelocity;\n }\n \n let velUV = vel / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let halfSamples = f32(u.sampleCount) * 0.5;\n \n var accumColor = vec4<f32>(0.0);\n var totalWeight = 0.0;\n \n for (var i = 0u; i < u.sampleCount; i = i + 1u) {\n let t = (f32(i) - halfSamples) / halfSamples;\n let sampleUV = uv + velUV * t;\n \n if (sampleUV.x < 0.0 || sampleUV.x > 1.0 || sampleUV.y < 0.0 || sampleUV.y > 1.0) {\n continue;\n }\n \n let sampleDepth = textureSampleLevel(depthTexture, colorSampler, sampleUV, 0);\n let depthDelta = abs(sampleDepth - centerDepth);\n let depthWeight = clamp(1.0 - depthDelta / max(u.depthThreshold, 0.0001), 0.05, 1.0);\n \n var curveW = 1.0;\n if (u.curveType == 1u) {\n curveW = exp(-2.5 * t * t);\n } else if (u.curveType == 2u) {\n curveW = 1.0 - abs(t);\n }\n \n let w = curveW * depthWeight;\n let sampleCol = textureSampleLevel(colorTexture, colorSampler, sampleUV, 0.0);\n \n accumColor += sampleCol * w;\n totalWeight += w;\n }\n \n if (totalWeight <= 0.0) {\n return textureSampleLevel(colorTexture, colorSampler, uv, 0.0);\n }\n \n return accumColor / totalWeight;\n}\n\n@fragment\nfn fs(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {\n return executeMotionBlur(pos);\n}\n\n@fragment\nfn fs_motion_blur(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {\n return executeMotionBlur(pos);\n}\n`;\n\n//#endregion\n//#region src/shaders/pbr-glass.ts\n/**\n* @file shaders/pbr-glass.ts\n* @module @gitframes/webgpu-renderers/shaders/pbr-glass\n*\n* WebGPU PBR Glass, Acrylic & Frosted Glass Refraction WGSL Shader.\n* Features Schlick Fresnel grazing rim reflectance, Snell's law refraction,\n* chromatic dispersion ray splitting (RGB), and roughness-based MIP blurring.\n*/\nconst pbrGlassWgsl = `\nstruct CameraUniforms {\n viewMatrix: mat4x4<f32>,\n projMatrix: mat4x4<f32>,\n viewProjMatrix: mat4x4<f32>,\n invViewProjMatrix: mat4x4<f32>,\n cameraPos: vec3<f32>,\n near: f32,\n cameraDir: vec3<f32>,\n far: f32,\n dofParams: vec4<f32>,\n screenParams: vec4<f32>,\n};\n\nstruct ModelUniforms {\n modelMatrix: mat4x4<f32>,\n normalMatrix: mat4x4<f32>,\n colorTint: vec4<f32>,\n params: vec4<f32>, // opacity, borderRadius, twoSided, unused\n};\n\nstruct GlassUniforms {\n // 0..15: ior, roughness, f0, transmission\n ior: f32,\n roughness: f32,\n f0: f32,\n transmission: f32,\n // 16..31: dispersion, envIntensity, fresnelPower, unused\n dispersion: f32,\n envIntensity: f32,\n fresnelPower: f32,\n _pad0: f32,\n // 32..47: viewportWidth, viewportHeight, unused, unused\n viewportWidth: f32,\n viewportHeight: f32,\n _pad1: f32,\n _pad2: f32,\n // 48..63: tint (r, g, b, a)\n tintColor: vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> camera: CameraUniforms;\n@group(1) @binding(0) var<uniform> model: ModelUniforms;\n@group(2) @binding(0) var<uniform> glass: GlassUniforms;\n@group(3) @binding(0) var backdropSampler: sampler;\n@group(3) @binding(1) var backdropTexture: texture_2d<f32>;\n\nstruct VertexInput {\n @location(0) position: vec3<f32>,\n @location(1) uv: vec2<f32>,\n @location(2) normal: vec3<f32>,\n};\n\nstruct VertexOutput {\n @builtin(position) clipPos: vec4<f32>,\n @location(0) worldPos: vec3<f32>,\n @location(1) worldNormal: vec3<f32>,\n @location(2) uv: vec2<f32>,\n};\n\n@vertex\nfn vs_main(in: VertexInput) -> VertexOutput {\n var out: VertexOutput;\n let worldPos4 = model.modelMatrix * vec4<f32>(in.position, 1.0);\n out.worldPos = worldPos4.xyz;\n let normal4 = model.normalMatrix * vec4<f32>(in.normal, 0.0);\n out.worldNormal = normalize(normal4.xyz);\n out.uv = in.uv;\n out.clipPos = camera.viewProjMatrix * worldPos4;\n return out;\n}\n\n@fragment\nfn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {\n let V = normalize(camera.cameraPos - in.worldPos);\n var N = normalize(in.worldNormal);\n \n // Dynamic normal flip for two-sided surfaces viewed from behind\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n \n let NdotV = max(dot(N, V), 0.0001);\n \n // 1. Schlick Fresnel Reflectance\n let F = glass.f0 + (1.0 - glass.f0) * pow(1.0 - NdotV, max(1.0, glass.fresnelPower));\n \n // 2. Refraction Ray Direction with Chromatic Dispersion\n let ior = max(1.0, glass.ior);\n let disp = max(0.0, glass.dispersion);\n let eta_g = 1.0 / ior;\n let eta_r = 1.0 / max(1.0, ior - disp);\n let eta_b = 1.0 / (ior + disp);\n \n let R_refl = reflect(-V, N);\n let R_refr_r = refract(-V, N, eta_r);\n let R_refr_g = refract(-V, N, eta_g);\n let R_refr_b = refract(-V, N, eta_b);\n \n let screenUv = in.clipPos.xy / vec2<f32>(glass.viewportWidth, glass.viewportHeight);\n \n // 3. Screen-Space Refraction Lookup with Chromatic Aberration Offset\n let refractOffsetScale = 0.035 * (1.0 - glass.roughness * 0.4);\n let uv_r = clamp(screenUv + R_refr_r.xy * refractOffsetScale, vec2<f32>(0.001), vec2<f32>(0.999));\n let uv_g = clamp(screenUv + R_refr_g.xy * refractOffsetScale, vec2<f32>(0.001), vec2<f32>(0.999));\n let uv_b = clamp(screenUv + R_refr_b.xy * refractOffsetScale, vec2<f32>(0.001), vec2<f32>(0.999));\n \n // Roughness mip/jitter level\n let mipLevel = glass.roughness * 5.0;\n let sampleR = textureSampleLevel(backdropTexture, backdropSampler, uv_r, mipLevel).r;\n let sampleG = textureSampleLevel(backdropTexture, backdropSampler, uv_g, mipLevel).g;\n let sampleB = textureSampleLevel(backdropTexture, backdropSampler, uv_b, mipLevel).b;\n \n let transmittedColor = vec3<f32>(sampleR, sampleG, sampleB) * glass.tintColor.rgb * model.colorTint.rgb;\n \n // 4. Procedural Studio HDRI Environment Reflection (Warm key + cool rim highlights)\n let envAngle = atan2(R_refl.z, R_refl.x);\n let envElevation = R_refl.y;\n let studioKey = pow(max(0.0, dot(R_refl, normalize(vec3<f32>(0.6, 0.8, -0.5)))), 32.0) * 1.5;\n let studioRim = pow(max(0.0, dot(R_refl, normalize(vec3<f32>(-0.7, 0.3, 0.6)))), 16.0) * 0.8;\n let ambientSky = mix(vec3<f32>(0.92, 0.94, 0.98), vec3<f32>(0.98, 0.96, 0.92), envElevation * 0.5 + 0.5);\n let envColor = (ambientSky * 0.6 + vec3<f32>(1.0, 0.98, 0.95) * studioKey + vec3<f32>(0.85, 0.92, 1.0) * studioRim) * glass.envIntensity;\n \n // 5. Energy-Conserving Blend with Premultiplied Alpha\n let blendedRGB = mix(transmittedColor, envColor, F);\n let alpha = clamp((F + (1.0 - glass.transmission) * 0.6) * model.params.x, 0.0, 1.0);\n \n return vec4<f32>(blendedRGB * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/shaders/ssao.ts\n/**\n* @file packages/webgpu-renderers/src/shaders/ssao.ts\n* WGSL Shader Module for Screen-Space Ambient Occlusion (SSAO) & Bilateral Cross-Blur.\n*/\nconst ssaoWgsl = `\nstruct SSAOUniforms {\n projMatrix: mat4x4<f32>,\n invProjMatrix: mat4x4<f32>,\n viewMatrix: mat4x4<f32>,\n radius: f32,\n bias: f32,\n intensity: f32,\n sampleCount: u32,\n viewportWidth: f32,\n viewportHeight: f32,\n};\n\n@group(0) @binding(0) var depthTexture: texture_depth_2d;\n@group(0) @binding(1) var normalTexture: texture_2d<f32>;\n@group(0) @binding(2) var noiseTexture: texture_2d<f32>;\n@group(0) @binding(3) var colorSampler: sampler;\n@group(0) @binding(4) var<storage, read> kernelSamples: array<vec4<f32>>;\n@group(0) @binding(5) var<uniform> u: SSAOUniforms;\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0)\n );\n return vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n}\n\nfn reconstructViewPos(uv: vec2<f32>, depth: f32) -> vec3<f32> {\n let clipPos = vec4<f32>(uv.x * 2.0 - 1.0, (1.0 - uv.y) * 2.0 - 1.0, depth, 1.0);\n let viewPos = u.invProjMatrix * clipPos;\n return viewPos.xyz / viewPos.w;\n}\n\n@fragment\nfn fs_ssao(@builtin(position) pos: vec4<f32>) -> @location(0) f32 {\n let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let depth = textureSampleLevel(depthTexture, colorSampler, uv, 0);\n \n if (depth >= 1.0) {\n return 1.0;\n }\n \n let rawNormal = textureSampleLevel(normalTexture, colorSampler, uv, 0.0).xyz;\n let normal = normalize(rawNormal * 2.0 - 1.0);\n let viewPos = reconstructViewPos(uv, depth);\n \n let noiseUV = pos.xy / 4.0;\n let randomVec = normalize(textureSampleLevel(noiseTexture, colorSampler, noiseUV, 0.0).xyz * 2.0 - 1.0);\n \n let tangent = normalize(randomVec - normal * dot(randomVec, normal));\n let bitangent = cross(normal, tangent);\n let TBN = mat3x3<f32>(tangent, bitangent, normal);\n \n var occlusion = 0.0;\n let count = min(u.sampleCount, arrayLength(&kernelSamples));\n \n for (var i = 0u; i < count; i = i + 1u) {\n let sampleDir = TBN * kernelSamples[i].xyz;\n let samplePos = viewPos + sampleDir * u.radius;\n \n let offset = u.projMatrix * vec4<f32>(samplePos, 1.0);\n var sampleUV = vec2<f32>(\n (offset.x / offset.w) * 0.5 + 0.5,\n (1.0 - (offset.y / offset.w)) * 0.5\n );\n \n if (sampleUV.x < 0.0 || sampleUV.x > 1.0 || sampleUV.y < 0.0 || sampleUV.y > 1.0) {\n continue;\n }\n \n let sampleDepthVal = textureSampleLevel(depthTexture, colorSampler, sampleUV, 0);\n let sampleViewZ = reconstructViewPos(sampleUV, sampleDepthVal).z;\n \n let rangeCheck = smoothstep(0.0, 1.0, u.radius / max(abs(viewPos.z - sampleViewZ), 0.001));\n if (sampleViewZ >= samplePos.z + u.bias) {\n occlusion += rangeCheck;\n }\n }\n \n let ao = 1.0 - (occlusion / f32(max(count, 1u))) * u.intensity;\n return clamp(ao, 0.0, 1.0);\n}\n`;\nconst ssaoBlurWgsl = `\nstruct BlurUniforms {\n viewportWidth: f32,\n viewportHeight: f32,\n blurRadius: i32,\n depthThreshold: f32,\n};\n\n@group(0) @binding(0) var ssaoTexture: texture_2d<f32>;\n@group(0) @binding(1) var depthTexture: texture_depth_2d;\n@group(0) @binding(2) var colorSampler: sampler;\n@group(0) @binding(3) var<uniform> u: BlurUniforms;\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0)\n );\n return vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n}\n\n@fragment\nfn fs_blur(@builtin(position) pos: vec4<f32>) -> @location(0) f32 {\n let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let centerDepth = textureSampleLevel(depthTexture, colorSampler, uv, 0);\n let centerAO = textureSampleLevel(ssaoTexture, colorSampler, uv, 0.0).r;\n \n if (centerDepth >= 1.0) {\n return 1.0;\n }\n \n var result = 0.0;\n var totalWeight = 0.0;\n let texelSize = 1.0 / vec2<f32>(u.viewportWidth, u.viewportHeight);\n let r = u.blurRadius;\n \n for (var x = -r; x <= r; x = x + 1) {\n for (var y = -r; y <= r; y = y + 1) {\n let offsetUV = uv + vec2<f32>(f32(x), f32(y)) * texelSize;\n let sampleDepth = textureSampleLevel(depthTexture, colorSampler, offsetUV, 0);\n let depthDelta = abs(sampleDepth - centerDepth);\n \n let spatialW = exp(-f32(x * x + y * y) / f32(2 * r * r));\n let depthW = clamp(1.0 - depthDelta / max(u.depthThreshold, 0.0001), 0.0, 1.0);\n let w = spatialW * depthW;\n \n let sampleAO = textureSampleLevel(ssaoTexture, colorSampler, offsetUV, 0.0).r;\n result += sampleAO * w;\n totalWeight += w;\n }\n }\n \n if (totalWeight <= 0.0) {\n return centerAO;\n }\n return result / totalWeight;\n}\n`;\n\n//#endregion\n//#region src/signals/video-resolver.ts\nconst GLOBAL_WEBGPU_REGISTRY_KEY = Symbol.for(\"gatewai.webgpuRegistry\");\nconst GLOBAL_ANALYSIS_STORE_KEY = Symbol.for(\"gatewai.videoAnalysisStore\");\nasync function resolveVideoSignalValue(_device, ctx, encoder, sd, frame, fps, drawChild) {\n\tif (!sd || sd.type !== \"generator\" || !sd.nodeType) return 0;\n\tconst g$1 = globalThis;\n\tconst webgpuRegistry = g$1[GLOBAL_WEBGPU_REGISTRY_KEY];\n\tif (!webgpuRegistry) return 0;\n\tconst renderer = webgpuRegistry.get(sd.nodeType);\n\tif (!renderer) return 0;\n\tconst key = `${sd.nodeId}-${frame}`;\n\tconst analysisStore = g$1[GLOBAL_ANALYSIS_STORE_KEY];\n\tif (!analysisStore || !analysisStore.has(key)) {\n\t\tconst virtualMedia = {\n\t\t\ttype: \"layer\",\n\t\t\toperation: {\n\t\t\t\tid: sd.nodeId,\n\t\t\t\top: sd.nodeType,\n\t\t\t\tsmoothing: sd.smoothing,\n\t\t\t\tgain: sd.gain,\n\t\t\t\toffset: sd.offset,\n\t\t\t\tinputs: {}\n\t\t\t},\n\t\t\tchildren: sd.input ? [sd.input] : []\n\t\t};\n\t\tawait renderer({\n\t\t\tctx,\n\t\t\tencoder,\n\t\t\tpass: { end: () => {} },\n\t\t\ttargetView: null,\n\t\t\ttargetTexture: null,\n\t\t\ttargetWidth: 256,\n\t\t\ttargetHeight: 256,\n\t\t\tprops: {\n\t\t\t\trenderId: sd.nodeId,\n\t\t\t\tvirtualMedia,\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\tcontainerWidth: 256,\n\t\t\t\tcontainerHeight: 256\n\t\t\t},\n\t\t\tdrawChild\n\t\t});\n\t}\n\tif (!analysisStore) return 0;\n\tconst cached$1 = analysisStore.get(key);\n\tif (!cached$1) return 0;\n\treturn (cached$1[sd.channel] ?? 0) * sd.gain + sd.offset;\n}\n\n//#endregion\n//#region src/slug/slug-loader.ts\nconst SLUGGISH_HEADER_DATA = \"SLUGGISH\";\nconst TEXTURE_WIDTH = 4096;\nvar SlugLoader = class {\n\tstatic parse(device, buffer) {\n\t\tconst startTime = performance.now();\n\t\tconst dataView = new DataView(buffer);\n\t\tlet offset = 0;\n\t\tconst headerBytes = new Uint8Array(buffer, offset, 8);\n\t\tlet headerStr = \"\";\n\t\tfor (let i = 0; i < 8; i++) headerStr += String.fromCharCode(headerBytes[i]);\n\t\tif (headerStr !== SLUGGISH_HEADER_DATA) throw new Error(`Invalid header found (${headerStr} instead of ${SLUGGISH_HEADER_DATA})`);\n\t\toffset += 8;\n\t\tconst codePointCount = dataView.getUint16(offset, true);\n\t\toffset += 2;\n\t\tconst codePoints = /* @__PURE__ */ new Map();\n\t\tfor (let i = 0; i < codePointCount; i++) {\n\t\t\tconst cp = {\n\t\t\t\tcodePoint: dataView.getUint32(offset, true),\n\t\t\t\twidth: dataView.getUint32(offset + 4, true),\n\t\t\t\theight: dataView.getUint32(offset + 8, true),\n\t\t\t\tadvanceWidth: dataView.getUint32(offset + 12, true),\n\t\t\t\tbearingX: dataView.getInt32(offset + 16, true),\n\t\t\t\tbearingY: dataView.getInt32(offset + 20, true),\n\t\t\t\tbandCount: dataView.getUint32(offset + 24, true),\n\t\t\t\tbandDimX: dataView.getUint32(offset + 28, true),\n\t\t\t\tbandDimY: dataView.getUint32(offset + 32, true),\n\t\t\t\tbandsTexCoordX: dataView.getUint16(offset + 36, true),\n\t\t\t\tbandsTexCoordY: dataView.getUint16(offset + 38, true)\n\t\t\t};\n\t\t\tcodePoints.set(cp.codePoint, cp);\n\t\t\toffset += 40;\n\t\t}\n\t\tconst curvesTexWidth = dataView.getUint16(offset, true);\n\t\toffset += 2;\n\t\tconst curvesTexHeight = dataView.getUint16(offset, true);\n\t\toffset += 2;\n\t\tconst curvesTexBytes = dataView.getUint32(offset, true);\n\t\toffset += 4;\n\t\tif (curvesTexWidth === 0 || curvesTexHeight === 0 || curvesTexBytes === 0 || curvesTexWidth !== TEXTURE_WIDTH) throw new Error(\"Invalid curves texture dimensions\");\n\t\tconst curvesTexels = curvesTexWidth * curvesTexHeight;\n\t\tconst curvesData = new Float32Array(curvesTexels * 4);\n\t\tconst curvesBuffer = buffer.slice(offset, offset + curvesTexBytes);\n\t\tconst incomingCurvesData = new Float32Array(curvesBuffer);\n\t\tcurvesData.set(incomingCurvesData);\n\t\toffset += curvesTexBytes;\n\t\tconst bandsTexWidth = dataView.getUint16(offset, true);\n\t\toffset += 2;\n\t\tconst bandsTexHeight = dataView.getUint16(offset, true);\n\t\toffset += 2;\n\t\tconst bandsTexBytes = dataView.getUint32(offset, true);\n\t\toffset += 4;\n\t\tif (bandsTexWidth === 0 || bandsTexHeight === 0 || bandsTexBytes === 0 || bandsTexWidth !== TEXTURE_WIDTH) throw new Error(\"Invalid bands texture dimensions\");\n\t\tconst bandsTexels = bandsTexWidth * bandsTexHeight;\n\t\tconst bandsData = new Uint32Array(bandsTexels * 2);\n\t\tconst bandsBuffer = buffer.slice(offset, offset + bandsTexBytes);\n\t\tconst incomingBandsData = new Uint32Array(bandsBuffer);\n\t\tbandsData.set(incomingBandsData);\n\t\toffset += bandsTexBytes;\n\t\tlet ascender = 0;\n\t\tlet descender = 0;\n\t\tlet lineGap = 0;\n\t\tlet unitsPerEm = 0;\n\t\tif (offset + 16 <= buffer.byteLength) {\n\t\t\tascender = dataView.getInt32(offset, true);\n\t\t\toffset += 4;\n\t\t\tdescender = dataView.getInt32(offset, true);\n\t\t\toffset += 4;\n\t\t\tlineGap = dataView.getInt32(offset, true);\n\t\t\toffset += 4;\n\t\t\tunitsPerEm = dataView.getInt32(offset, true);\n\t\t\toffset += 4;\n\t\t}\n\t\tconst curvesTex = device.createTexture({\n\t\t\tlabel: \"SlugCurvesTexture\",\n\t\t\tsize: [curvesTexWidth, curvesTexHeight],\n\t\t\tformat: \"rgba32float\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeTexture({ texture: curvesTex }, curvesData, { bytesPerRow: curvesTexWidth * 16 }, [curvesTexWidth, curvesTexHeight]);\n\t\tconst bandsTex = device.createTexture({\n\t\t\tlabel: \"SlugBandsTexture\",\n\t\t\tsize: [bandsTexWidth, bandsTexHeight],\n\t\t\tformat: \"rg32uint\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeTexture({ texture: bandsTex }, bandsData, { bytesPerRow: bandsTexWidth * 8 }, [bandsTexWidth, bandsTexHeight]);\n\t\tconst elapsed = performance.now() - startTime;\n\t\tconsole.log(`[SlugLoader] Parsed slug binary (${codePoints.size} glyphs) in ${elapsed.toFixed(2)}ms`);\n\t\treturn {\n\t\t\tcodePoints,\n\t\t\tcurvesTex,\n\t\t\tbandsTex,\n\t\t\tascender,\n\t\t\tdescender,\n\t\t\tlineGap,\n\t\t\tunitsPerEm\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/utils.ts\nif (typeof globalThis !== \"undefined\") globalThis.__GATEWAI_DELAYS__ = globalThis.__GATEWAI_DELAYS__ || /* @__PURE__ */ new Set();\nconst hasDelayRender = () => {\n\treturn useMemo(() => {\n\t\tlet nextHandle = 0;\n\t\treturn {\n\t\t\tdelayRender: (_msg) => {\n\t\t\t\tconst h = nextHandle++;\n\t\t\t\tif (typeof globalThis !== \"undefined\") globalThis.__GATEWAI_DELAYS__.add(h);\n\t\t\t\treturn h;\n\t\t\t},\n\t\t\tcontinueRender: (h) => {\n\t\t\t\tif (typeof globalThis !== \"undefined\") globalThis.__GATEWAI_DELAYS__.delete(h);\n\t\t\t}\n\t\t};\n\t}, []);\n};\nfunction withTempTexture(device, desc, fn) {\n\tconst tex = device.createTexture(desc);\n\ttry {\n\t\treturn fn(tex);\n\t} finally {\n\t\ttex.destroy();\n\t}\n}\n\n//#endregion\n//#region src/math3d/vector3.ts\nconst Vector3Math = {\n\tcreate(x = 0, y = 0, z = 0) {\n\t\treturn [\n\t\t\tx,\n\t\t\ty,\n\t\t\tz\n\t\t];\n\t},\n\tcopy(v) {\n\t\treturn [\n\t\t\tv[0],\n\t\t\tv[1],\n\t\t\tv[2]\n\t\t];\n\t},\n\tset(out, x, y, z) {\n\t\tout[0] = x;\n\t\tout[1] = y;\n\t\tout[2] = z;\n\t\treturn out;\n\t},\n\tadd(a, b) {\n\t\treturn [\n\t\t\ta[0] + b[0],\n\t\t\ta[1] + b[1],\n\t\t\ta[2] + b[2]\n\t\t];\n\t},\n\tsubtract(a, b) {\n\t\treturn [\n\t\t\ta[0] - b[0],\n\t\t\ta[1] - b[1],\n\t\t\ta[2] - b[2]\n\t\t];\n\t},\n\tmultiplyScalar(v, s) {\n\t\treturn [\n\t\t\tv[0] * s,\n\t\t\tv[1] * s,\n\t\t\tv[2] * s\n\t\t];\n\t},\n\tdot(a, b) {\n\t\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n\t},\n\tcross(a, b) {\n\t\treturn [\n\t\t\ta[1] * b[2] - a[2] * b[1],\n\t\t\ta[2] * b[0] - a[0] * b[2],\n\t\t\ta[0] * b[1] - a[1] * b[0]\n\t\t];\n\t},\n\tlengthSq(v) {\n\t\treturn v[0] * v[0] + v[1] * v[1] + v[2] * v[2];\n\t},\n\tlength(v) {\n\t\treturn Math.hypot(v[0], v[1], v[2]);\n\t},\n\tdistance(a, b) {\n\t\treturn Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);\n\t},\n\tnormalize(v) {\n\t\tconst len = Math.hypot(v[0], v[1], v[2]);\n\t\tif (len === 0) return [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tconst inv = 1 / len;\n\t\treturn [\n\t\t\tv[0] * inv,\n\t\t\tv[1] * inv,\n\t\t\tv[2] * inv\n\t\t];\n\t},\n\tlerp(a, b, t) {\n\t\treturn [\n\t\t\ta[0] + (b[0] - a[0]) * t,\n\t\t\ta[1] + (b[1] - a[1]) * t,\n\t\t\ta[2] + (b[2] - a[2]) * t\n\t\t];\n\t},\n\tequals(a, b, epsilon = 1e-6) {\n\t\treturn Math.abs(a[0] - b[0]) <= epsilon && Math.abs(a[1] - b[1]) <= epsilon && Math.abs(a[2] - b[2]) <= epsilon;\n\t}\n};\n\n//#endregion\n//#region src/math3d/matrix4.ts\n/**\n* Column-major 4x4 matrix mathematics for WebGPU 3D rendering and camera projections.\n* Memory layout matches WGSL `mat4x4<f32>`:\n* [ 0, 4, 8, 12 ]\n* [ 1, 5, 9, 13 ]\n* [ 2, 6, 10, 14 ]\n* [ 3, 7, 11, 15 ]\n*/\nconst Matrix4Math = {\n\tidentity() {\n\t\treturn [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\tcopy(m) {\n\t\treturn [...m];\n\t},\n\tmultiply(a, b) {\n\t\tconst out = new Array(16);\n\t\tfor (let row = 0; row < 4; row++) for (let col = 0; col < 4; col++) out[col * 4 + row] = a[0 + row] * b[col * 4 + 0] + a[4 + row] * b[col * 4 + 1] + a[8 + row] * b[col * 4 + 2] + a[12 + row] * b[col * 4 + 3];\n\t\treturn out;\n\t},\n\ttranslate(tx, ty, tz = 0) {\n\t\treturn [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\ttx,\n\t\t\tty,\n\t\t\ttz,\n\t\t\t1\n\t\t];\n\t},\n\tscale(sx, sy, sz = 1) {\n\t\treturn [\n\t\t\tsx,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tsy,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tsz,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateX(rad) {\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\treturn [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tc,\n\t\t\ts,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-s,\n\t\t\tc,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateY(rad) {\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\treturn [\n\t\t\tc,\n\t\t\t0,\n\t\t\t-s,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\ts,\n\t\t\t0,\n\t\t\tc,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateZ(rad) {\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\treturn [\n\t\t\tc,\n\t\t\ts,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-s,\n\t\t\tc,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateAxis(axis, rad) {\n\t\tconst norm = Vector3Math.normalize(axis);\n\t\tconst x = norm[0];\n\t\tconst y = norm[1];\n\t\tconst z = norm[2];\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\tconst t = 1 - c;\n\t\treturn [\n\t\t\tt * x * x + c,\n\t\t\tt * x * y + s * z,\n\t\t\tt * x * z - s * y,\n\t\t\t0,\n\t\t\tt * x * y - s * z,\n\t\t\tt * y * y + c,\n\t\t\tt * y * z + s * x,\n\t\t\t0,\n\t\t\tt * x * z + s * y,\n\t\t\tt * y * z - s * x,\n\t\t\tt * z * z + c,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\tlookAt(eye, target, up = [\n\t\t0,\n\t\t-1,\n\t\t0\n\t]) {\n\t\tlet f = Vector3Math.subtract(target, eye);\n\t\tif (Vector3Math.lengthSq(f) === 0) f = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t\telse f = Vector3Math.normalize(f);\n\t\tlet r = Vector3Math.cross(f, up);\n\t\tif (Vector3Math.lengthSq(r) === 0) r = [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\telse r = Vector3Math.normalize(r);\n\t\tconst u = Vector3Math.cross(r, f);\n\t\treturn [\n\t\t\tr[0],\n\t\t\tu[0],\n\t\t\tf[0],\n\t\t\t0,\n\t\t\tr[1],\n\t\t\tu[1],\n\t\t\tf[1],\n\t\t\t0,\n\t\t\tr[2],\n\t\t\tu[2],\n\t\t\tf[2],\n\t\t\t0,\n\t\t\t-Vector3Math.dot(r, eye),\n\t\t\t-Vector3Math.dot(u, eye),\n\t\t\t-Vector3Math.dot(f, eye),\n\t\t\t1\n\t\t];\n\t},\n\tperspective(fovYRad, aspect, near, far) {\n\t\tconst f = 1 / Math.tan(fovYRad / 2);\n\t\tconst rangeInv = 1 / (far - near);\n\t\treturn [\n\t\t\tf / aspect,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tf,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tfar * rangeInv,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-near * far * rangeInv,\n\t\t\t0\n\t\t];\n\t},\n\torthographic(left, right, bottom, top, near, far) {\n\t\tconst lr = 1 / (right - left);\n\t\tconst bt = 1 / (top - bottom);\n\t\tconst nf = 1 / (far - near);\n\t\treturn [\n\t\t\t2 * lr,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t2 * bt,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tnf,\n\t\t\t0,\n\t\t\t-(right + left) * lr,\n\t\t\t-(top + bottom) * bt,\n\t\t\t-near * nf,\n\t\t\t1\n\t\t];\n\t},\n\tinvert(m) {\n\t\tconst inv = new Array(16);\n\t\tinv[0] = m[5] * m[10] * m[15] - m[5] * m[11] * m[14] - m[9] * m[6] * m[15] + m[9] * m[7] * m[14] + m[13] * m[6] * m[11] - m[13] * m[7] * m[10];\n\t\tinv[4] = -m[4] * m[10] * m[15] + m[4] * m[11] * m[14] + m[8] * m[6] * m[15] - m[8] * m[7] * m[14] - m[12] * m[6] * m[11] + m[12] * m[7] * m[10];\n\t\tinv[8] = m[4] * m[9] * m[15] - m[4] * m[11] * m[13] - m[8] * m[5] * m[15] + m[8] * m[7] * m[13] + m[12] * m[5] * m[11] - m[12] * m[7] * m[9];\n\t\tinv[12] = -m[4] * m[9] * m[14] + m[4] * m[10] * m[13] + m[8] * m[5] * m[14] - m[8] * m[6] * m[13] - m[12] * m[5] * m[10] + m[12] * m[6] * m[9];\n\t\tinv[1] = -m[1] * m[10] * m[15] + m[1] * m[11] * m[14] + m[9] * m[2] * m[15] - m[9] * m[3] * m[14] - m[13] * m[2] * m[11] + m[13] * m[3] * m[10];\n\t\tinv[5] = m[0] * m[10] * m[15] - m[0] * m[11] * m[14] - m[8] * m[2] * m[15] + m[8] * m[3] * m[14] + m[12] * m[2] * m[11] - m[12] * m[3] * m[10];\n\t\tinv[9] = -m[0] * m[9] * m[15] + m[0] * m[11] * m[13] + m[8] * m[1] * m[15] - m[8] * m[3] * m[13] - m[12] * m[1] * m[11] + m[12] * m[3] * m[9];\n\t\tinv[13] = m[0] * m[9] * m[14] - m[0] * m[10] * m[13] - m[8] * m[1] * m[14] + m[8] * m[2] * m[13] + m[12] * m[1] * m[10] - m[12] * m[2] * m[9];\n\t\tinv[2] = m[1] * m[6] * m[15] - m[1] * m[7] * m[14] - m[5] * m[2] * m[15] + m[5] * m[3] * m[14] + m[13] * m[2] * m[7] - m[13] * m[3] * m[6];\n\t\tinv[6] = -m[0] * m[6] * m[15] + m[0] * m[7] * m[14] + m[4] * m[2] * m[15] - m[4] * m[3] * m[14] - m[12] * m[2] * m[7] + m[12] * m[3] * m[6];\n\t\tinv[10] = m[0] * m[5] * m[15] - m[0] * m[7] * m[13] - m[4] * m[1] * m[15] + m[4] * m[3] * m[13] + m[12] * m[1] * m[7] - m[12] * m[3] * m[5];\n\t\tinv[14] = -m[0] * m[5] * m[14] + m[0] * m[6] * m[13] + m[4] * m[1] * m[14] - m[4] * m[2] * m[13] - m[12] * m[1] * m[6] + m[12] * m[2] * m[5];\n\t\tinv[3] = -m[1] * m[6] * m[11] + m[1] * m[7] * m[10] + m[5] * m[2] * m[11] - m[5] * m[3] * m[10] - m[9] * m[2] * m[7] + m[9] * m[3] * m[6];\n\t\tinv[7] = m[0] * m[6] * m[11] - m[0] * m[7] * m[10] - m[4] * m[2] * m[11] + m[4] * m[3] * m[10] + m[8] * m[2] * m[7] - m[8] * m[3] * m[6];\n\t\tinv[11] = -m[0] * m[5] * m[11] + m[0] * m[7] * m[9] + m[4] * m[1] * m[11] - m[4] * m[3] * m[9] - m[8] * m[1] * m[7] + m[8] * m[3] * m[5];\n\t\tinv[15] = m[0] * m[5] * m[10] - m[0] * m[6] * m[9] - m[4] * m[1] * m[10] + m[4] * m[2] * m[9] + m[8] * m[1] * m[6] - m[8] * m[2] * m[5];\n\t\tlet det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];\n\t\tif (Math.abs(det) < 1e-12) return null;\n\t\tdet = 1 / det;\n\t\tfor (let i = 0; i < 16; i++) inv[i] *= det;\n\t\treturn inv;\n\t},\n\ttranspose(m) {\n\t\treturn [\n\t\t\tm[0],\n\t\t\tm[4],\n\t\t\tm[8],\n\t\t\tm[12],\n\t\t\tm[1],\n\t\t\tm[5],\n\t\t\tm[9],\n\t\t\tm[13],\n\t\t\tm[2],\n\t\t\tm[6],\n\t\t\tm[10],\n\t\t\tm[14],\n\t\t\tm[3],\n\t\t\tm[7],\n\t\t\tm[11],\n\t\t\tm[15]\n\t\t];\n\t},\n\tprojectPoint(m, p) {\n\t\tconst x = p[0];\n\t\tconst y = p[1];\n\t\tconst z = p[2];\n\t\tconst X = m[0] * x + m[4] * y + m[8] * z + m[12];\n\t\tconst Y = m[1] * x + m[5] * y + m[9] * z + m[13];\n\t\tconst Z = m[2] * x + m[6] * y + m[10] * z + m[14];\n\t\tconst W = m[3] * x + m[7] * y + m[11] * z + m[15];\n\t\tconst wInv = Math.abs(W) > 1e-6 ? 1 / W : 1;\n\t\treturn [\n\t\t\tX * wInv,\n\t\t\tY * wInv,\n\t\t\tZ * wInv\n\t\t];\n\t},\n\tprojectRectangle(m, width, height) {\n\t\treturn [\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t]),\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\twidth,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t]),\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\t0\n\t\t\t]),\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\t0,\n\t\t\t\theight,\n\t\t\t\t0\n\t\t\t])\n\t\t];\n\t},\n\ttoFloat32Array(m) {\n\t\treturn new Float32Array(m);\n\t}\n};\n\n//#endregion\n//#region src/math3d/camera3d.ts\n/**\n* Camera 3D mathematics, kinematics, and projection solver.\n* Provides unified View-Projection matrices, LookAt target tracking,\n* spherical orbit turntable, multi-octave camera shake, and rack-focus CoC solvers.\n*/\n/** Smooth multi-harmonic procedural continuous noise */\nfunction smoothHarmonicNoise(t, seed, octaves = 3) {\n\tlet total = 0;\n\tlet frequency = 1;\n\tlet amplitude = 1;\n\tlet maxAmp = 0;\n\tfor (let i = 0; i < octaves; i++) {\n\t\tconst s1 = Math.sin(t * frequency * 2 * Math.PI + seed + i * 1.7);\n\t\tconst s2 = Math.cos(t * frequency * 1.414 * Math.PI + seed * 2.1 + i * .9);\n\t\ttotal += (s1 * .6 + s2 * .4) * amplitude;\n\t\tmaxAmp += amplitude;\n\t\tfrequency *= 2;\n\t\tamplitude *= .5;\n\t}\n\treturn maxAmp > 0 ? total / maxAmp : 0;\n}\nconst Camera3D = {\n\tcreateDefaultCamera(width, height, fovDegrees = 50) {\n\t\tconst fovRad = fovDegrees * Math.PI / 180;\n\t\tconst distance = height / 2 / Math.tan(fovRad / 2);\n\t\treturn {\n\t\t\teye: [\n\t\t\t\twidth / 2,\n\t\t\t\theight / 2,\n\t\t\t\t-distance\n\t\t\t],\n\t\t\ttarget: [\n\t\t\t\twidth / 2,\n\t\t\t\theight / 2,\n\t\t\t\t0\n\t\t\t],\n\t\t\tup: [\n\t\t\t\t0,\n\t\t\t\t-1,\n\t\t\t\t0\n\t\t\t],\n\t\t\tfov: fovDegrees,\n\t\t\taspect: Math.max(1e-4, width / height),\n\t\t\tnear: 1,\n\t\t\tfar: 5e4,\n\t\t\tzoom: 1,\n\t\t\tfocusDistance: distance,\n\t\t\tfStop: 2.8,\n\t\t\tmaxBlurRadius: 32\n\t\t};\n\t},\n\tcomputeViewMatrix(camera) {\n\t\treturn Matrix4Math.lookAt(camera.eye, camera.target, camera.up);\n\t},\n\tcomputeProjectionMatrix(camera) {\n\t\tconst fovRad = camera.fov * Math.PI / 180;\n\t\tconst p = Matrix4Math.perspective(fovRad, camera.aspect, camera.near, camera.far);\n\t\tif (camera.zoom !== 1 && camera.zoom > 0) {\n\t\t\tp[0] *= camera.zoom;\n\t\t\tp[5] *= camera.zoom;\n\t\t}\n\t\treturn p;\n\t},\n\tcomputeViewProjectionMatrix(camera) {\n\t\tconst v = Camera3D.computeViewMatrix(camera);\n\t\tconst p = Camera3D.computeProjectionMatrix(camera);\n\t\treturn Matrix4Math.multiply(p, v);\n\t},\n\tdolly(eye, target, deltaDistance) {\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(target, eye));\n\t\tconst move = Vector3Math.multiplyScalar(forward, deltaDistance);\n\t\treturn {\n\t\t\teye: Vector3Math.add(eye, move),\n\t\t\ttarget\n\t\t};\n\t},\n\ttruckPedestal(eye, target, up, deltaX, deltaY) {\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(target, eye));\n\t\tconst right = Vector3Math.normalize(Vector3Math.cross(forward, up));\n\t\tconst trueUp = Vector3Math.cross(right, forward);\n\t\tconst moveX = Vector3Math.multiplyScalar(right, deltaX);\n\t\tconst moveY = Vector3Math.multiplyScalar(trueUp, deltaY);\n\t\tconst totalMove = Vector3Math.add(moveX, moveY);\n\t\treturn {\n\t\t\teye: Vector3Math.add(eye, totalMove),\n\t\t\ttarget: Vector3Math.add(target, totalMove)\n\t\t};\n\t},\n\torbit(target, radius, azimuthDeg, elevationDeg) {\n\t\tconst azRad = azimuthDeg * Math.PI / 180;\n\t\tconst elRad = elevationDeg * Math.PI / 180;\n\t\tconst cosEl = Math.cos(elRad);\n\t\tconst sinEl = Math.sin(elRad);\n\t\tconst cosAz = Math.cos(azRad);\n\t\tconst sinAz = Math.sin(azRad);\n\t\treturn [\n\t\t\ttarget[0] + radius * cosEl * sinAz,\n\t\t\ttarget[1] - radius * sinEl,\n\t\t\ttarget[2] - radius * cosEl * cosAz\n\t\t];\n\t},\n\tapplyOrientation(pose, pitchDeg, yawDeg, rollDeg) {\n\t\tif (pitchDeg === 0 && yawDeg === 0 && rollDeg === 0) return pose;\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(pose.target, pose.eye));\n\t\tconst right = Vector3Math.normalize(Vector3Math.cross(forward, pose.up));\n\t\tconst trueUp = Vector3Math.cross(right, forward);\n\t\tconst dist = Vector3Math.distance(pose.eye, pose.target);\n\t\tlet fwd = forward;\n\t\tlet up = trueUp;\n\t\tif (yawDeg !== 0) {\n\t\t\tconst yawRad = yawDeg * Math.PI / 180;\n\t\t\tconst cosY = Math.cos(yawRad);\n\t\t\tconst sinY = Math.sin(yawRad);\n\t\t\tfwd = Vector3Math.normalize(Vector3Math.subtract(Vector3Math.multiplyScalar(fwd, cosY), Vector3Math.multiplyScalar(right, sinY)));\n\t\t}\n\t\tconst currentRight = Vector3Math.normalize(Vector3Math.cross(fwd, up));\n\t\tif (pitchDeg !== 0) {\n\t\t\tconst pitchRad = pitchDeg * Math.PI / 180;\n\t\t\tconst cosP = Math.cos(pitchRad);\n\t\t\tconst sinP = Math.sin(pitchRad);\n\t\t\tfwd = Vector3Math.normalize(Vector3Math.add(Vector3Math.multiplyScalar(fwd, cosP), Vector3Math.multiplyScalar(up, sinP)));\n\t\t\tup = Vector3Math.normalize(Vector3Math.cross(currentRight, fwd));\n\t\t}\n\t\tif (rollDeg !== 0) {\n\t\t\tconst rollRad = rollDeg * Math.PI / 180;\n\t\t\tconst cosR = Math.cos(rollRad);\n\t\t\tconst sinR = Math.sin(rollRad);\n\t\t\tup = Vector3Math.normalize(Vector3Math.add(Vector3Math.multiplyScalar(up, cosR), Vector3Math.multiplyScalar(currentRight, sinR)));\n\t\t}\n\t\tconst newTarget = Vector3Math.add(pose.eye, Vector3Math.multiplyScalar(fwd, dist));\n\t\treturn {\n\t\t\t...pose,\n\t\t\ttarget: newTarget,\n\t\t\tup\n\t\t};\n\t},\n\tapplyCameraShake(pose, timeSeconds, options) {\n\t\tconst { translationAmplitude, rotationAmplitude, frequency = 2.5, octaves = 3, seed = 42 } = options;\n\t\tif (translationAmplitude <= 0 && rotationAmplitude <= 0) return pose;\n\t\tconst t = timeSeconds * frequency;\n\t\tconst dx = smoothHarmonicNoise(t, seed, octaves) * translationAmplitude;\n\t\tconst dy = smoothHarmonicNoise(t, seed + 101.5, octaves) * translationAmplitude;\n\t\tconst dz = smoothHarmonicNoise(t, seed + 203.7, octaves) * (translationAmplitude * .5);\n\t\tconst rotX = smoothHarmonicNoise(t, seed + 307.1, octaves) * rotationAmplitude;\n\t\tconst rotY = smoothHarmonicNoise(t, seed + 409.3, octaves) * rotationAmplitude;\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(pose.target, pose.eye));\n\t\tconst right = Vector3Math.normalize(Vector3Math.cross(forward, pose.up));\n\t\tconst trueUp = Vector3Math.cross(right, forward);\n\t\tconst disp = Vector3Math.add(Vector3Math.multiplyScalar(right, dx), Vector3Math.add(Vector3Math.multiplyScalar(trueUp, dy), Vector3Math.multiplyScalar(forward, dz)));\n\t\tconst newEye = Vector3Math.add(pose.eye, disp);\n\t\tconst newTarget = Vector3Math.add(pose.target, Vector3Math.add(Vector3Math.multiplyScalar(right, rotY * 10), Vector3Math.multiplyScalar(trueUp, rotX * 10)));\n\t\treturn {\n\t\t\t...pose,\n\t\t\teye: newEye,\n\t\t\ttarget: newTarget\n\t\t};\n\t},\n\tcomputeCircleOfConfusion(depth, focusDistance, focalLengthMm, fStop, maxBlurRadius = 32) {\n\t\tif (focusDistance <= 0 || fStop <= 0 || depth <= 0) return 0;\n\t\tconst delta = Math.abs(depth - focusDistance);\n\t\tconst aperture = focalLengthMm / fStop;\n\t\tconst coc = delta / depth * aperture * .5;\n\t\treturn Math.min(maxBlurRadius, Math.max(0, coc));\n\t},\n\tcomputeCameraFrustumPlanes(vp) {\n\t\tconst normalizePlane = (p) => {\n\t\t\tconst len = Math.hypot(p[0], p[1], p[2]);\n\t\t\tif (len === 0) return p;\n\t\t\treturn [\n\t\t\t\tp[0] / len,\n\t\t\t\tp[1] / len,\n\t\t\t\tp[2] / len,\n\t\t\t\tp[3] / len\n\t\t\t];\n\t\t};\n\t\treturn {\n\t\t\tleft: normalizePlane([\n\t\t\t\tvp[3] + vp[0],\n\t\t\t\tvp[7] + vp[4],\n\t\t\t\tvp[11] + vp[8],\n\t\t\t\tvp[15] + vp[12]\n\t\t\t]),\n\t\t\tright: normalizePlane([\n\t\t\t\tvp[3] - vp[0],\n\t\t\t\tvp[7] - vp[4],\n\t\t\t\tvp[11] - vp[8],\n\t\t\t\tvp[15] - vp[12]\n\t\t\t]),\n\t\t\tbottom: normalizePlane([\n\t\t\t\tvp[3] + vp[1],\n\t\t\t\tvp[7] + vp[5],\n\t\t\t\tvp[11] + vp[9],\n\t\t\t\tvp[15] + vp[13]\n\t\t\t]),\n\t\t\ttop: normalizePlane([\n\t\t\t\tvp[3] - vp[1],\n\t\t\t\tvp[7] - vp[5],\n\t\t\t\tvp[11] - vp[9],\n\t\t\t\tvp[15] - vp[13]\n\t\t\t]),\n\t\t\tnear: normalizePlane([\n\t\t\t\tvp[2],\n\t\t\t\tvp[6],\n\t\t\t\tvp[10],\n\t\t\t\tvp[14]\n\t\t\t]),\n\t\t\tfar: normalizePlane([\n\t\t\t\tvp[3] - vp[2],\n\t\t\t\tvp[7] - vp[6],\n\t\t\t\tvp[11] - vp[10],\n\t\t\t\tvp[15] - vp[14]\n\t\t\t])\n\t\t};\n\t},\n\tisBoxInFrustum(min, max, planes) {\n\t\tconst planeList = [\n\t\t\tplanes.left,\n\t\t\tplanes.right,\n\t\t\tplanes.bottom,\n\t\t\tplanes.top,\n\t\t\tplanes.near,\n\t\t\tplanes.far\n\t\t];\n\t\tfor (const p of planeList) {\n\t\t\tconst px = p[0] > 0 ? max[0] : min[0];\n\t\t\tconst py = p[1] > 0 ? max[1] : min[1];\n\t\t\tconst pz = p[2] > 0 ? max[2] : min[2];\n\t\t\tif (p[0] * px + p[1] * py + p[2] * pz + p[3] < 0) return false;\n\t\t}\n\t\treturn true;\n\t}\n};\n\n//#endregion\n//#region src/math3d/path3d.ts\n/**\n* 3D Path Mathematical Curves, Arc-Length Lookup Tables, and Rotation-Minimizing Frames (RMF).\n* Provides uniform-velocity parameterization and smooth tangent/normal kinematics along 3D curves.\n*/\nvar Path3D = class Path3D {\n\tsamples = [];\n\tframes = [];\n\ttotalLength = 0;\n\tconstructor(samples) {\n\t\tif (samples.length < 2) throw new Error(\"Path3D requires at least 2 coordinate samples\");\n\t\tthis.samples = samples;\n\t\tthis.totalLength = samples[samples.length - 1].distance;\n\t\tthis.computeRotationMinimizingFrames();\n\t}\n\t/**\n\t* Computes continuous Rotation-Minimizing Frames (RMF) along the path\n\t* using the Double Reflection Method (Wang et al. 2008), preventing gimbal flips.\n\t*/\n\tcomputeRotationMinimizingFrames() {\n\t\tconst count = this.samples.length;\n\t\tthis.frames = new Array(count);\n\t\tconst t0 = this.samples[0].tangent;\n\t\tlet upRef = [\n\t\t\t0,\n\t\t\t-1,\n\t\t\t0\n\t\t];\n\t\tif (Math.abs(Vector3Math.dot(t0, upRef)) > .95) upRef = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t\tlet n0 = Vector3Math.normalize(Vector3Math.subtract(upRef, Vector3Math.multiplyScalar(t0, Vector3Math.dot(upRef, t0))));\n\t\tif (Vector3Math.lengthSq(n0) < 1e-4) n0 = [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tlet b0 = Vector3Math.normalize(Vector3Math.cross(t0, n0));\n\t\tthis.frames[0] = {\n\t\t\tnormal: n0,\n\t\t\tbinormal: b0,\n\t\t\trotation: this.eulerFromFrame(t0, n0, b0)\n\t\t};\n\t\tfor (let i = 0; i < count - 1; i++) {\n\t\t\tconst x0 = this.samples[i].position;\n\t\t\tconst x1 = this.samples[i + 1].position;\n\t\t\tconst t_i = this.samples[i].tangent;\n\t\t\tconst t_next = this.samples[i + 1].tangent;\n\t\t\tconst n_i = this.frames[i].normal;\n\t\t\tconst v1 = Vector3Math.subtract(x1, x0);\n\t\t\tconst c1 = Vector3Math.dot(v1, v1);\n\t\t\tlet n_next;\n\t\t\tif (c1 > 1e-8) {\n\t\t\t\tconst t_i_L = Vector3Math.subtract(t_i, Vector3Math.multiplyScalar(v1, 2 * Vector3Math.dot(v1, t_i) / c1));\n\t\t\t\tconst n_i_L = Vector3Math.subtract(n_i, Vector3Math.multiplyScalar(v1, 2 * Vector3Math.dot(v1, n_i) / c1));\n\t\t\t\tconst v2 = Vector3Math.subtract(t_next, t_i_L);\n\t\t\t\tconst c2 = Vector3Math.dot(v2, v2);\n\t\t\t\tif (c2 > 1e-8) n_next = Vector3Math.subtract(n_i_L, Vector3Math.multiplyScalar(v2, 2 * Vector3Math.dot(v2, n_i_L) / c2));\n\t\t\t\telse n_next = n_i_L;\n\t\t\t} else n_next = n_i;\n\t\t\tn_next = Vector3Math.normalize(Vector3Math.subtract(n_next, Vector3Math.multiplyScalar(t_next, Vector3Math.dot(t_next, n_next))));\n\t\t\tconst b_next = Vector3Math.normalize(Vector3Math.cross(t_next, n_next));\n\t\t\tthis.frames[i + 1] = {\n\t\t\t\tnormal: n_next,\n\t\t\t\tbinormal: b_next,\n\t\t\t\trotation: this.eulerFromFrame(t_next, n_next, b_next)\n\t\t\t};\n\t\t}\n\t}\n\t/**\n\t* Extracts pitch, yaw, roll Euler angles in degrees from the orthonormal frame.\n\t*/\n\teulerFromFrame(tangent, normal, _binormal) {\n\t\treturn [\n\t\t\tMath.asin(Math.max(-1, Math.min(1, -tangent[1]))) * (180 / Math.PI),\n\t\t\tMath.atan2(tangent[0], tangent[2]) * (180 / Math.PI),\n\t\t\tMath.atan2(normal[0], normal[1]) * (180 / Math.PI)\n\t\t];\n\t}\n\t/**\n\t* Evaluates point, tangent, normal, binormal, and rotation at normalized progress u in [0, 1].\n\t* Progression moves with constant velocity along the arc length of the path.\n\t*/\n\tgetPointAt(u) {\n\t\tconst targetDist = Math.max(0, Math.min(1, u)) * this.totalLength;\n\t\treturn this.getPointAtDistance(targetDist);\n\t}\n\t/**\n\t* Evaluates point along path by absolute arc-length distance in pixels.\n\t*/\n\tgetPointAtDistance(distance) {\n\t\tconst d = Math.max(0, Math.min(this.totalLength, distance));\n\t\tconst count = this.samples.length;\n\t\tlet low = 0;\n\t\tlet high = count - 1;\n\t\twhile (low < high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (this.samples[mid].distance < d) low = mid + 1;\n\t\t\telse high = mid;\n\t\t}\n\t\tconst idx1 = Math.max(1, low);\n\t\tconst idx0 = idx1 - 1;\n\t\tconst s0 = this.samples[idx0];\n\t\tconst s1 = this.samples[idx1];\n\t\tconst segLen = s1.distance - s0.distance;\n\t\tconst alpha = segLen > 1e-6 ? (d - s0.distance) / segLen : 0;\n\t\tconst position = Vector3Math.lerp(s0.position, s1.position, alpha);\n\t\tconst tangent = Vector3Math.normalize(Vector3Math.lerp(s0.tangent, s1.tangent, alpha));\n\t\tconst f0 = this.frames[idx0];\n\t\tconst f1 = this.frames[idx1];\n\t\tconst normal = Vector3Math.normalize(Vector3Math.lerp(f0.normal, f1.normal, alpha));\n\t\tconst binormal = Vector3Math.normalize(Vector3Math.cross(tangent, normal));\n\t\tconst rotation = [\n\t\t\tf0.rotation[0] + (f1.rotation[0] - f0.rotation[0]) * alpha,\n\t\t\tf0.rotation[1] + (f1.rotation[1] - f0.rotation[1]) * alpha,\n\t\t\tf0.rotation[2] + (f1.rotation[2] - f0.rotation[2]) * alpha\n\t\t];\n\t\treturn {\n\t\t\tposition,\n\t\t\ttangent,\n\t\t\tnormal,\n\t\t\tbinormal,\n\t\t\tdistance: d,\n\t\t\tt: this.totalLength > 0 ? d / this.totalLength : 0,\n\t\t\trotation\n\t\t};\n\t}\n\t/**\n\t* Creates a smooth Catmull-Rom spline path interpolating through 3D waypoints.\n\t*/\n\tstatic catmullRom(waypoints, options = {}) {\n\t\tif (waypoints.length < 2) throw new Error(\"Catmull-Rom spline requires at least 2 waypoints\");\n\t\tconst closed = Boolean(options.closed);\n\t\tconst samplesPerSegment = options.samplesPerSegment ?? 40;\n\t\tconst pts = [];\n\t\tif (closed) {\n\t\t\tpts.push(waypoints[waypoints.length - 1]);\n\t\t\tpts.push(...waypoints);\n\t\t\tpts.push(waypoints[0]);\n\t\t\tpts.push(waypoints[1]);\n\t\t} else {\n\t\t\tconst pFirst = waypoints[0];\n\t\t\tconst pSecond = waypoints[1];\n\t\t\tconst pLast = waypoints[waypoints.length - 1];\n\t\t\tconst pPrevLast = waypoints[waypoints.length - 2];\n\t\t\tpts.push(Vector3Math.subtract(pFirst, Vector3Math.subtract(pSecond, pFirst)));\n\t\t\tpts.push(...waypoints);\n\t\t\tpts.push(Vector3Math.add(pLast, Vector3Math.subtract(pLast, pPrevLast)));\n\t\t}\n\t\tconst numSegments = closed ? waypoints.length : waypoints.length - 1;\n\t\tconst rawSamples = [];\n\t\tfor (let s = 0; s < numSegments; s++) {\n\t\t\tconst p0 = pts[s];\n\t\t\tconst p1 = pts[s + 1];\n\t\t\tconst p2 = pts[s + 2];\n\t\t\tconst p3 = pts[s + 3];\n\t\t\tconst steps = s === numSegments - 1 ? samplesPerSegment : samplesPerSegment - 1;\n\t\t\tfor (let step = 0; step <= steps; step++) {\n\t\t\t\tconst t = step / samplesPerSegment;\n\t\t\t\tconst t2 = t * t;\n\t\t\t\tconst t3 = t2 * t;\n\t\t\t\tconst a0 = -.5 * t3 + t2 - .5 * t;\n\t\t\t\tconst a1 = 1.5 * t3 - 2.5 * t2 + 1;\n\t\t\t\tconst a2 = -1.5 * t3 + 2 * t2 + .5 * t;\n\t\t\t\tconst a3 = .5 * t3 - .5 * t2;\n\t\t\t\tconst pos = [\n\t\t\t\t\ta0 * p0[0] + a1 * p1[0] + a2 * p2[0] + a3 * p3[0],\n\t\t\t\t\ta0 * p0[1] + a1 * p1[1] + a2 * p2[1] + a3 * p3[1],\n\t\t\t\t\ta0 * p0[2] + a1 * p1[2] + a2 * p2[2] + a3 * p3[2]\n\t\t\t\t];\n\t\t\t\tconst da0 = -1.5 * t2 + 2 * t - .5;\n\t\t\t\tconst da1 = 4.5 * t2 - 5 * t;\n\t\t\t\tconst da2 = -4.5 * t2 + 4 * t + .5;\n\t\t\t\tconst da3 = 1.5 * t2 - 1 * t;\n\t\t\t\tconst tanVel = [\n\t\t\t\t\tda0 * p0[0] + da1 * p1[0] + da2 * p2[0] + da3 * p3[0],\n\t\t\t\t\tda0 * p0[1] + da1 * p1[1] + da2 * p2[1] + da3 * p3[1],\n\t\t\t\t\tda0 * p0[2] + da1 * p1[2] + da2 * p2[2] + da3 * p3[2]\n\t\t\t\t];\n\t\t\t\tconst tangent = Vector3Math.normalize(tanVel);\n\t\t\t\trawSamples.push({\n\t\t\t\t\tposition: pos,\n\t\t\t\t\ttangent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tlet cumulativeDist = 0;\n\t\tconst samples = [{\n\t\t\tposition: rawSamples[0].position,\n\t\t\ttangent: rawSamples[0].tangent,\n\t\t\tdistance: 0\n\t\t}];\n\t\tfor (let i = 1; i < rawSamples.length; i++) {\n\t\t\tconst d = Vector3Math.distance(rawSamples[i].position, rawSamples[i - 1].position);\n\t\t\tcumulativeDist += d;\n\t\t\tsamples.push({\n\t\t\t\tposition: rawSamples[i].position,\n\t\t\t\ttangent: rawSamples[i].tangent,\n\t\t\t\tdistance: cumulativeDist\n\t\t\t});\n\t\t}\n\t\treturn new Path3D(samples);\n\t}\n\t/**\n\t* Creates a continuous 3D path from a chain of cubic Bezier segments.\n\t*/\n\tstatic bezier(segments, samplesPerSegment = 50) {\n\t\tif (segments.length === 0) throw new Error(\"Bezier path requires at least 1 segment\");\n\t\tconst rawSamples = [];\n\t\tfor (let s = 0; s < segments.length; s++) {\n\t\t\tconst seg = segments[s];\n\t\t\tconst steps = s === segments.length - 1 ? samplesPerSegment : samplesPerSegment - 1;\n\t\t\tfor (let step = 0; step <= steps; step++) {\n\t\t\t\tconst t = step / samplesPerSegment;\n\t\t\t\tconst u = 1 - t;\n\t\t\t\tconst uu = u * u;\n\t\t\t\tconst uuu = uu * u;\n\t\t\t\tconst tt = t * t;\n\t\t\t\tconst ttt = tt * t;\n\t\t\t\tconst pos = [\n\t\t\t\t\tuuu * seg.p0[0] + 3 * uu * t * seg.p1[0] + 3 * u * tt * seg.p2[0] + ttt * seg.p3[0],\n\t\t\t\t\tuuu * seg.p0[1] + 3 * uu * t * seg.p1[1] + 3 * u * tt * seg.p2[1] + ttt * seg.p3[1],\n\t\t\t\t\tuuu * seg.p0[2] + 3 * uu * t * seg.p1[2] + 3 * u * tt * seg.p2[2] + ttt * seg.p3[2]\n\t\t\t\t];\n\t\t\t\tconst tanVel = [\n\t\t\t\t\t3 * uu * (seg.p1[0] - seg.p0[0]) + 6 * u * t * (seg.p2[0] - seg.p1[0]) + 3 * tt * (seg.p3[0] - seg.p2[0]),\n\t\t\t\t\t3 * uu * (seg.p1[1] - seg.p0[1]) + 6 * u * t * (seg.p2[1] - seg.p1[1]) + 3 * tt * (seg.p3[1] - seg.p2[1]),\n\t\t\t\t\t3 * uu * (seg.p1[2] - seg.p0[2]) + 6 * u * t * (seg.p2[2] - seg.p1[2]) + 3 * tt * (seg.p3[2] - seg.p2[2])\n\t\t\t\t];\n\t\t\t\tconst tangent = Vector3Math.normalize(tanVel);\n\t\t\t\trawSamples.push({\n\t\t\t\t\tposition: pos,\n\t\t\t\t\ttangent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tlet cumulativeDist = 0;\n\t\tconst samples = [{\n\t\t\tposition: rawSamples[0].position,\n\t\t\ttangent: rawSamples[0].tangent,\n\t\t\tdistance: 0\n\t\t}];\n\t\tfor (let i = 1; i < rawSamples.length; i++) {\n\t\t\tcumulativeDist += Vector3Math.distance(rawSamples[i].position, rawSamples[i - 1].position);\n\t\t\tsamples.push({\n\t\t\t\tposition: rawSamples[i].position,\n\t\t\t\ttangent: rawSamples[i].tangent,\n\t\t\t\tdistance: cumulativeDist\n\t\t\t});\n\t\t}\n\t\treturn new Path3D(samples);\n\t}\n\t/**\n\t* Creates a 3D volumetric helix / spiral path.\n\t*/\n\tstatic helix(options) {\n\t\tconst { center, radius, pitch, turns, axis = \"z\", samplesPerTurn = 60 } = options;\n\t\tconst totalSamples = Math.max(10, Math.round(turns * samplesPerTurn));\n\t\tconst rawSamples = [];\n\t\tfor (let i = 0; i <= totalSamples; i++) {\n\t\t\tconst progress = i / totalSamples;\n\t\t\tconst theta = progress * turns * Math.PI * 2;\n\t\t\tconst axial = (progress - .5) * pitch * turns;\n\t\t\tconst c = Math.cos(theta);\n\t\t\tconst s = Math.sin(theta);\n\t\t\tlet pos;\n\t\t\tlet tanVel;\n\t\t\tif (axis === \"z\") {\n\t\t\t\tpos = [\n\t\t\t\t\tcenter[0] + radius * c,\n\t\t\t\t\tcenter[1] + radius * s,\n\t\t\t\t\tcenter[2] + axial\n\t\t\t\t];\n\t\t\t\ttanVel = [\n\t\t\t\t\t-radius * s,\n\t\t\t\t\tradius * c,\n\t\t\t\t\tpitch * turns / (turns * Math.PI * 2)\n\t\t\t\t];\n\t\t\t} else if (axis === \"y\") {\n\t\t\t\tpos = [\n\t\t\t\t\tcenter[0] + radius * c,\n\t\t\t\t\tcenter[1] + axial,\n\t\t\t\t\tcenter[2] + radius * s\n\t\t\t\t];\n\t\t\t\ttanVel = [\n\t\t\t\t\t-radius * s,\n\t\t\t\t\tpitch * turns / (turns * Math.PI * 2),\n\t\t\t\t\tradius * c\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tpos = [\n\t\t\t\t\tcenter[0] + axial,\n\t\t\t\t\tcenter[1] + radius * c,\n\t\t\t\t\tcenter[2] + radius * s\n\t\t\t\t];\n\t\t\t\ttanVel = [\n\t\t\t\t\tpitch * turns / (turns * Math.PI * 2),\n\t\t\t\t\t-radius * s,\n\t\t\t\t\tradius * c\n\t\t\t\t];\n\t\t\t}\n\t\t\trawSamples.push({\n\t\t\t\tposition: pos,\n\t\t\t\ttangent: Vector3Math.normalize(tanVel)\n\t\t\t});\n\t\t}\n\t\tlet cumulativeDist = 0;\n\t\tconst samples = [{\n\t\t\tposition: rawSamples[0].position,\n\t\t\ttangent: rawSamples[0].tangent,\n\t\t\tdistance: 0\n\t\t}];\n\t\tfor (let i = 1; i < rawSamples.length; i++) {\n\t\t\tcumulativeDist += Vector3Math.distance(rawSamples[i].position, rawSamples[i - 1].position);\n\t\t\tsamples.push({\n\t\t\t\tposition: rawSamples[i].position,\n\t\t\t\ttangent: rawSamples[i].tangent,\n\t\t\t\tdistance: cumulativeDist\n\t\t\t});\n\t\t}\n\t\treturn new Path3D(samples);\n\t}\n\t/**\n\t* Creates a 3D circular or arc orbit path.\n\t*/\n\tstatic circle(options) {\n\t\tconst { center, radius, startAngleDeg = 0, endAngleDeg = 360, samples = 128 } = options;\n\t\tconst startRad = startAngleDeg * Math.PI / 180;\n\t\tconst endRad = endAngleDeg * Math.PI / 180;\n\t\tconst rawSamples = [];\n\t\tfor (let i = 0; i <= samples; i++) {\n\t\t\tconst theta = startRad + (endRad - startRad) * (i / samples);\n\t\t\tconst c = Math.cos(theta);\n\t\t\tconst s = Math.sin(theta);\n\t\t\tconst pos = [\n\t\t\t\tcenter[0] + radius * c,\n\t\t\t\tcenter[1],\n\t\t\t\tcenter[2] + radius * s\n\t\t\t];\n\t\t\tconst tanVel = [\n\t\t\t\t-radius * s,\n\t\t\t\t0,\n\t\t\t\tradius * c\n\t\t\t];\n\t\t\trawSamples.push({\n\t\t\t\tposition: pos,\n\t\t\t\ttangent: Vector3Math.normalize(tanVel)\n\t\t\t});\n\t\t}\n\t\tlet cumulativeDist = 0;\n\t\tconst pathSamples = [{\n\t\t\tposition: rawSamples[0].position,\n\t\t\ttangent: rawSamples[0].tangent,\n\t\t\tdistance: 0\n\t\t}];\n\t\tfor (let i = 1; i < rawSamples.length; i++) {\n\t\t\tcumulativeDist += Vector3Math.distance(rawSamples[i].position, rawSamples[i - 1].position);\n\t\t\tpathSamples.push({\n\t\t\t\tposition: rawSamples[i].position,\n\t\t\t\ttangent: rawSamples[i].tangent,\n\t\t\t\tdistance: cumulativeDist\n\t\t\t});\n\t\t}\n\t\treturn new Path3D(pathSamples);\n\t}\n};\n\n//#endregion\n//#region src/math3d/light3d.ts\n/**\n* WebGPU 3D Lighting & Material Shading engine.\n* Supports Ambient, Directional, Point, and Spot light sources,\n* normal matrix computation for non-uniform surface scaling,\n* and binary uniform buffer packing for WGSL shaders.\n*/\nconst MAX_LIGHTS = 8;\nconst LIGHT_UNIFORM_SIZE_BYTES = 544;\n/**\n* Parses CSS / hex / rgb color strings, arrays, or color objects into normalized linear [r, g, b] floats in [0, 1].\n*/\nfunction parseColorToRgb(color) {\n\tif (!color) return [\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tif (Array.isArray(color)) {\n\t\tconst r = color[0] ?? 1;\n\t\tconst g$1 = color[1] ?? 1;\n\t\tconst b = color[2] ?? 1;\n\t\treturn [\n\t\t\tr > 1 ? r / 255 : r,\n\t\t\tg$1 > 1 ? g$1 / 255 : g$1,\n\t\t\tb > 1 ? b / 255 : b\n\t\t];\n\t}\n\tif (typeof color === \"object\" && color !== null) {\n\t\tconst r = color.r ?? 1;\n\t\tconst g$1 = color.g ?? 1;\n\t\tconst b = color.b ?? 1;\n\t\treturn [\n\t\t\tr > 1 ? r / 255 : r,\n\t\t\tg$1 > 1 ? g$1 / 255 : g$1,\n\t\t\tb > 1 ? b / 255 : b\n\t\t];\n\t}\n\tif (typeof color !== \"string\") return [\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tconst str = color.trim().toLowerCase();\n\tif (str.startsWith(\"#\")) {\n\t\tconst hex = str.slice(1);\n\t\tif (hex.length === 3) return [\n\t\t\tNumber.parseInt(hex[0] + hex[0], 16) / 255,\n\t\t\tNumber.parseInt(hex[1] + hex[1], 16) / 255,\n\t\t\tNumber.parseInt(hex[2] + hex[2], 16) / 255\n\t\t];\n\t\tif (hex.length >= 6) return [\n\t\t\tNumber.parseInt(hex.slice(0, 2), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(2, 4), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(4, 6), 16) / 255\n\t\t];\n\t}\n\tconst rgbMatch = str.match(/rgba?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/);\n\tif (rgbMatch) {\n\t\tconst r = Number.parseFloat(rgbMatch[1]) / 255;\n\t\tconst g$1 = Number.parseFloat(rgbMatch[2]) / 255;\n\t\tconst b = Number.parseFloat(rgbMatch[3]) / 255;\n\t\treturn [\n\t\t\tMath.max(0, Math.min(1, r)),\n\t\t\tMath.max(0, Math.min(1, g$1)),\n\t\t\tMath.max(0, Math.min(1, b))\n\t\t];\n\t}\n\tconst hslMatch = str.match(/hsla?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%?\\s*,\\s*([\\d.]+)%?/);\n\tif (hslMatch) return hslToRgb(Number.parseFloat(hslMatch[1]) / 360, Number.parseFloat(hslMatch[2]) / 100, Number.parseFloat(hslMatch[3]) / 100);\n\treturn [\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n}\nfunction hslToRgb(h, s, l) {\n\tif (s === 0) return [\n\t\tl,\n\t\tl,\n\t\tl\n\t];\n\tconst hue2rgb = (p$1, q$1, t) => {\n\t\tlet tt = t;\n\t\tif (tt < 0) tt += 1;\n\t\tif (tt > 1) tt -= 1;\n\t\tif (tt < 1 / 6) return p$1 + (q$1 - p$1) * 6 * tt;\n\t\tif (tt < 1 / 2) return q$1;\n\t\tif (tt < 2 / 3) return p$1 + (q$1 - p$1) * (2 / 3 - tt) * 6;\n\t\treturn p$1;\n\t};\n\tconst q = l < .5 ? l * (1 + s) : l + s - l * s;\n\tconst p = 2 * l - q;\n\treturn [\n\t\thue2rgb(p, q, h + 1 / 3),\n\t\thue2rgb(p, q, h),\n\t\thue2rgb(p, q, h - 1 / 3)\n\t];\n}\nconst Light3D = {\n\tcomputeNormalMatrix(modelMatrix) {\n\t\tconst inv = Matrix4Math.invert(modelMatrix);\n\t\tif (!inv) return Matrix4Math.identity();\n\t\treturn [\n\t\t\tinv[0],\n\t\t\tinv[4],\n\t\t\tinv[8],\n\t\t\t0,\n\t\t\tinv[1],\n\t\t\tinv[5],\n\t\t\tinv[9],\n\t\t\t0,\n\t\t\tinv[2],\n\t\t\tinv[6],\n\t\t\tinv[10],\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\tprocessLight(opt) {\n\t\tconst color = parseColorToRgb(opt.color);\n\t\tconst intensity = opt.intensity ?? 1;\n\t\tconst posX = opt.position ? opt.position[0] : opt.x ?? 0;\n\t\tconst posY = opt.position ? opt.position[1] : opt.y ?? 0;\n\t\tconst posZ = opt.position ? opt.position[2] : opt.z ?? 0;\n\t\tconst kind = opt.lightType ?? opt.type ?? \"directional\";\n\t\tlet typeVal = 1;\n\t\tif (kind === \"ambient\") typeVal = 0;\n\t\telse if (kind === \"directional\") typeVal = 1;\n\t\telse if (kind === \"point\") typeVal = 2;\n\t\telse if (kind === \"spot\") typeVal = 3;\n\t\tlet dir = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1\n\t\t];\n\t\tif (opt.direction) dir = Vector3Math.normalize(opt.direction);\n\t\telse if (opt.target || opt.targetX !== void 0 || opt.targetY !== void 0 || opt.targetZ !== void 0) {\n\t\t\tconst target = [\n\t\t\t\topt.target ? opt.target[0] : opt.targetX ?? posX,\n\t\t\t\topt.target ? opt.target[1] : opt.targetY ?? posY,\n\t\t\t\topt.target ? opt.target[2] : opt.targetZ ?? posZ\n\t\t\t];\n\t\t\tconst fromLight = Vector3Math.subtract(target, [\n\t\t\t\tposX,\n\t\t\t\tposY,\n\t\t\t\tposZ\n\t\t\t]);\n\t\t\tif (Vector3Math.length(fromLight) > 1e-4) dir = Vector3Math.normalize(fromLight);\n\t\t}\n\t\tconst radius = Math.max(1, opt.radius ?? 1e3);\n\t\tconst decay = opt.decay ?? 2;\n\t\tconst angleDeg = Math.max(.1, Math.min(180, opt.angle ?? 45));\n\t\tconst penumbraFrac = Math.max(0, Math.min(1, opt.penumbra ?? .2));\n\t\tconst outerRad = angleDeg * Math.PI / 180;\n\t\tconst innerRad = outerRad * (1 - penumbraFrac);\n\t\tconst cosOuter = Math.cos(outerRad);\n\t\tconst cosInner = Math.cos(innerRad);\n\t\treturn {\n\t\t\tposType: [\n\t\t\t\tposX,\n\t\t\t\tposY,\n\t\t\t\tposZ,\n\t\t\t\ttypeVal\n\t\t\t],\n\t\t\tdirRadius: [\n\t\t\t\tdir[0],\n\t\t\t\tdir[1],\n\t\t\t\tdir[2],\n\t\t\t\tradius\n\t\t\t],\n\t\t\tcolorIntensity: [\n\t\t\t\tcolor[0],\n\t\t\t\tcolor[1],\n\t\t\t\tcolor[2],\n\t\t\t\tintensity\n\t\t\t],\n\t\t\tspotParams: [\n\t\t\t\tcosOuter,\n\t\t\t\tcosInner,\n\t\t\t\tdecay,\n\t\t\t\t0\n\t\t\t]\n\t\t};\n\t},\n\tpackLightsUniforms(lights) {\n\t\tconst buffer = new Float32Array(LIGHT_UNIFORM_SIZE_BYTES / 4);\n\t\tif (!lights || lights.length === 0) {\n\t\t\tbuffer[4] = 0;\n\t\t\tbuffer[5] = 0;\n\t\t\treturn buffer;\n\t\t}\n\t\tlet ambientR = 0;\n\t\tlet ambientG = 0;\n\t\tlet ambientB = 0;\n\t\tconst directLights = [];\n\t\tfor (const l of lights) if ((l.lightType ?? l.type) === \"ambient\") {\n\t\t\tconst col = parseColorToRgb(l.color);\n\t\t\tconst int$1 = l.intensity ?? 1;\n\t\t\tambientR += col[0] * int$1;\n\t\t\tambientG += col[1] * int$1;\n\t\t\tambientB += col[2] * int$1;\n\t\t} else if (directLights.length < MAX_LIGHTS) directLights.push(Light3D.processLight(l));\n\t\tbuffer[0] = ambientR;\n\t\tbuffer[1] = ambientG;\n\t\tbuffer[2] = ambientB;\n\t\tbuffer[3] = 1;\n\t\tbuffer[4] = directLights.length;\n\t\tbuffer[5] = 1;\n\t\tbuffer[6] = 0;\n\t\tbuffer[7] = 0;\n\t\tlet offset = 8;\n\t\tfor (let i = 0; i < MAX_LIGHTS; i++) {\n\t\t\tif (i < directLights.length) {\n\t\t\t\tconst dl = directLights[i];\n\t\t\t\tbuffer[offset + 0] = dl.posType[0];\n\t\t\t\tbuffer[offset + 1] = dl.posType[1];\n\t\t\t\tbuffer[offset + 2] = dl.posType[2];\n\t\t\t\tbuffer[offset + 3] = dl.posType[3];\n\t\t\t\tbuffer[offset + 4] = dl.dirRadius[0];\n\t\t\t\tbuffer[offset + 5] = dl.dirRadius[1];\n\t\t\t\tbuffer[offset + 6] = dl.dirRadius[2];\n\t\t\t\tbuffer[offset + 7] = dl.dirRadius[3];\n\t\t\t\tbuffer[offset + 8] = dl.colorIntensity[0];\n\t\t\t\tbuffer[offset + 9] = dl.colorIntensity[1];\n\t\t\t\tbuffer[offset + 10] = dl.colorIntensity[2];\n\t\t\t\tbuffer[offset + 11] = dl.colorIntensity[3];\n\t\t\t\tbuffer[offset + 12] = dl.spotParams[0];\n\t\t\t\tbuffer[offset + 13] = dl.spotParams[1];\n\t\t\t\tbuffer[offset + 14] = dl.spotParams[2];\n\t\t\t\tbuffer[offset + 15] = dl.spotParams[3];\n\t\t\t} else for (let j = 0; j < 16; j++) buffer[offset + j] = 0;\n\t\t\toffset += 16;\n\t\t}\n\t\treturn buffer;\n\t}\n};\n\n//#endregion\n//#region src/loaders/obj-loader.ts\nvar ObjLoader = class ObjLoader {\n\t/**\n\t* Parses Wavefront .obj text content (and optional .mtl text) into Model3DData.\n\t*/\n\tstatic parse(objText, mtlTextOrOptions, maybeOptions) {\n\t\tconst options = typeof mtlTextOrOptions === \"object\" && mtlTextOrOptions !== null ? mtlTextOrOptions : maybeOptions ?? {};\n\t\tconst mtlText = typeof mtlTextOrOptions === \"string\" ? mtlTextOrOptions : options.mtlText;\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawUvs = [];\n\t\tconst meshBuilders = [];\n\t\tlet currentBuilder = {\n\t\t\tmaterialName: \"default\",\n\t\t\tfaces: []\n\t\t};\n\t\tmeshBuilders.push(currentBuilder);\n\t\tconst materials = {};\n\t\tif (mtlText) Object.assign(materials, ObjLoader.parseMtl(mtlText));\n\t\tconst lines = objText.split(/\\r?\\n/);\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i]?.trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst cmd = parts[0]?.toLowerCase();\n\t\t\tif (cmd === \"mtllib\") {\n\t\t\t\tconst mtlFileName = parts.slice(1).join(\" \").trim();\n\t\t\t\tif (options.basePath && typeof fs !== \"undefined\" && fs.existsSync) try {\n\t\t\t\t\tconst resolvedMtlPath = path.resolve(options.basePath, mtlFileName);\n\t\t\t\t\tif (fs.existsSync(resolvedMtlPath)) {\n\t\t\t\t\t\tconst content = fs.readFileSync(resolvedMtlPath, \"utf-8\");\n\t\t\t\t\t\tObject.assign(materials, ObjLoader.parseMtl(content));\n\t\t\t\t\t}\n\t\t\t\t} catch (_) {}\n\t\t\t} else if (cmd === \"v\") {\n\t\t\t\tconst x = Number.parseFloat(parts[1] ?? \"0\");\n\t\t\t\tconst y = Number.parseFloat(parts[2] ?? \"0\");\n\t\t\t\tconst z = Number.parseFloat(parts[3] ?? \"0\");\n\t\t\t\trawPositions.push([\n\t\t\t\t\tx,\n\t\t\t\t\ty,\n\t\t\t\t\tz\n\t\t\t\t]);\n\t\t\t} else if (cmd === \"vn\") {\n\t\t\t\tconst nx = Number.parseFloat(parts[1] ?? \"0\");\n\t\t\t\tconst ny = Number.parseFloat(parts[2] ?? \"0\");\n\t\t\t\tconst nz = Number.parseFloat(parts[3] ?? \"0\");\n\t\t\t\trawNormals.push([\n\t\t\t\t\tnx,\n\t\t\t\t\tny,\n\t\t\t\t\tnz\n\t\t\t\t]);\n\t\t\t} else if (cmd === \"vt\") {\n\t\t\t\tconst u = Number.parseFloat(parts[1] ?? \"0\");\n\t\t\t\tconst v = parts[2] !== void 0 ? Number.parseFloat(parts[2]) : 0;\n\t\t\t\trawUvs.push([u, v]);\n\t\t\t} else if (cmd === \"usemtl\") {\n\t\t\t\tconst matName = parts[1] ?? \"default\";\n\t\t\t\tif (currentBuilder.faces.length > 0) {\n\t\t\t\t\tcurrentBuilder = {\n\t\t\t\t\t\tmaterialName: matName,\n\t\t\t\t\t\tfaces: []\n\t\t\t\t\t};\n\t\t\t\t\tmeshBuilders.push(currentBuilder);\n\t\t\t\t} else currentBuilder.materialName = matName;\n\t\t\t} else if (cmd === \"f\") {\n\t\t\t\tconst faceVertices = [];\n\t\t\t\tfor (let p = 1; p < parts.length; p++) {\n\t\t\t\t\tconst vertDef = parts[p];\n\t\t\t\t\tif (!vertDef) continue;\n\t\t\t\t\tconst indices = vertDef.split(\"/\");\n\t\t\t\t\tlet vIdx = Number.parseInt(indices[0] ?? \"0\", 10);\n\t\t\t\t\tlet vtIdx = indices[1] && indices[1].length > 0 ? Number.parseInt(indices[1], 10) : 0;\n\t\t\t\t\tlet vnIdx = indices[2] && indices[2].length > 0 ? Number.parseInt(indices[2], 10) : 0;\n\t\t\t\t\tif (vIdx < 0) vIdx = rawPositions.length + vIdx + 1;\n\t\t\t\t\tif (vtIdx < 0) vtIdx = rawUvs.length + vtIdx + 1;\n\t\t\t\t\tif (vnIdx < 0) vnIdx = rawNormals.length + vnIdx + 1;\n\t\t\t\t\tfaceVertices.push({\n\t\t\t\t\t\tv: vIdx - 1,\n\t\t\t\t\t\tvt: vtIdx - 1,\n\t\t\t\t\t\tvn: vnIdx - 1\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (faceVertices.length >= 3) for (let k = 1; k < faceVertices.length - 1; k++) {\n\t\t\t\t\tconst v0 = faceVertices[0];\n\t\t\t\t\tconst v1 = faceVertices[k];\n\t\t\t\t\tconst v2 = faceVertices[k + 1];\n\t\t\t\t\tif (v0 && v1 && v2) currentBuilder.faces.push([\n\t\t\t\t\t\tv0,\n\t\t\t\t\t\tv1,\n\t\t\t\t\t\tv2\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlet minX = Infinity;\n\t\tlet minY = Infinity;\n\t\tlet minZ = Infinity;\n\t\tlet maxX = -Infinity;\n\t\tlet maxY = -Infinity;\n\t\tlet maxZ = -Infinity;\n\t\tfor (const pos of rawPositions) {\n\t\t\tconst [px, py, pz] = pos;\n\t\t\tif (px === void 0 || py === void 0 || pz === void 0) continue;\n\t\t\tif (px < minX) minX = px;\n\t\t\tif (py < minY) minY = py;\n\t\t\tif (pz < minZ) minZ = pz;\n\t\t\tif (px > maxX) maxX = px;\n\t\t\tif (py > maxY) maxY = py;\n\t\t\tif (pz > maxZ) maxZ = pz;\n\t\t}\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = -1;\n\t\t\tminY = -1;\n\t\t\tminZ = -1;\n\t\t\tmaxX = 1;\n\t\t\tmaxY = 1;\n\t\t\tmaxZ = 1;\n\t\t}\n\t\tlet centerX = (minX + maxX) * .5;\n\t\tlet centerY = (minY + maxY) * .5;\n\t\tlet centerZ = (minZ + maxZ) * .5;\n\t\tlet sizeX = Math.max(1e-4, maxX - minX);\n\t\tlet sizeY = Math.max(1e-4, maxY - minY);\n\t\tlet sizeZ = Math.max(1e-4, maxZ - minZ);\n\t\tconst maxDim = Math.max(sizeX, sizeY, sizeZ);\n\t\tlet scaleMultiplier = 1;\n\t\tif (options.normalizeSize && options.normalizeSize > 0) scaleMultiplier = options.normalizeSize / maxDim;\n\t\tif (typeof options.scale === \"number\") scaleMultiplier *= options.scale;\n\t\tconst shouldCenter = options.center ?? false;\n\t\tconst offsetX = shouldCenter ? centerX : 0;\n\t\tconst offsetY = shouldCenter ? centerY : 0;\n\t\tconst offsetZ = shouldCenter ? centerZ : 0;\n\t\tconst meshes = [];\n\t\tfor (let bIdx = 0; bIdx < meshBuilders.length; bIdx++) {\n\t\t\tconst builder = meshBuilders[bIdx];\n\t\t\tif (!builder || builder.faces.length === 0) continue;\n\t\t\tconst vertexMap = /* @__PURE__ */ new Map();\n\t\t\tconst positions = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\t\t\tconst indices = [];\n\t\t\tlet hasParsedNormals = false;\n\t\t\tfor (const tri of builder.faces) for (const vert of tri) {\n\t\t\t\tconst key = `${vert.v}_${vert.vt}_${vert.vn}`;\n\t\t\t\tlet outIndex = vertexMap.get(key);\n\t\t\t\tif (outIndex === void 0) {\n\t\t\t\t\toutIndex = positions.length / 3;\n\t\t\t\t\tvertexMap.set(key, outIndex);\n\t\t\t\t\tconst rawPos = rawPositions[vert.v] ?? [\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0\n\t\t\t\t\t];\n\t\t\t\t\tconst px = ((rawPos[0] ?? 0) - offsetX) * scaleMultiplier;\n\t\t\t\t\tconst py = ((rawPos[1] ?? 0) - offsetY) * scaleMultiplier;\n\t\t\t\t\tconst pz = ((rawPos[2] ?? 0) - offsetZ) * scaleMultiplier;\n\t\t\t\t\tpositions.push(px, py, pz);\n\t\t\t\t\tif (vert.vt >= 0 && rawUvs[vert.vt]) {\n\t\t\t\t\t\tconst uv = rawUvs[vert.vt];\n\t\t\t\t\t\tuvs.push(uv[0] ?? 0, 1 - (uv[1] ?? 0));\n\t\t\t\t\t} else uvs.push(0, 0);\n\t\t\t\t\tif (vert.vn >= 0 && rawNormals[vert.vn]) {\n\t\t\t\t\t\thasParsedNormals = true;\n\t\t\t\t\t\tconst norm = rawNormals[vert.vn];\n\t\t\t\t\t\tnormals.push(norm[0] ?? 0, norm[1] ?? 0, norm[2] ?? 0);\n\t\t\t\t\t} else normals.push(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tindices.push(outIndex);\n\t\t\t}\n\t\t\tif (!hasParsedNormals || options.smoothNormals) {\n\t\t\t\tconst computedNormals = new Float32Array(positions.length);\n\t\t\t\tfor (let i = 0; i < indices.length; i += 3) {\n\t\t\t\t\tconst i0 = indices[i];\n\t\t\t\t\tconst i1 = indices[i + 1];\n\t\t\t\t\tconst i2 = indices[i + 2];\n\t\t\t\t\tconst p0 = [\n\t\t\t\t\t\tpositions[i0 * 3],\n\t\t\t\t\t\tpositions[i0 * 3 + 1],\n\t\t\t\t\t\tpositions[i0 * 3 + 2]\n\t\t\t\t\t];\n\t\t\t\t\tconst p1 = [\n\t\t\t\t\t\tpositions[i1 * 3],\n\t\t\t\t\t\tpositions[i1 * 3 + 1],\n\t\t\t\t\t\tpositions[i1 * 3 + 2]\n\t\t\t\t\t];\n\t\t\t\t\tconst p2 = [\n\t\t\t\t\t\tpositions[i2 * 3],\n\t\t\t\t\t\tpositions[i2 * 3 + 1],\n\t\t\t\t\t\tpositions[i2 * 3 + 2]\n\t\t\t\t\t];\n\t\t\t\t\tconst edge1 = Vector3Math.subtract(p1, p0);\n\t\t\t\t\tconst edge2 = Vector3Math.subtract(p2, p0);\n\t\t\t\t\tconst faceNormal = Vector3Math.cross(edge1, edge2);\n\t\t\t\t\tcomputedNormals[i0 * 3] += faceNormal[0];\n\t\t\t\t\tcomputedNormals[i0 * 3 + 1] += faceNormal[1];\n\t\t\t\t\tcomputedNormals[i0 * 3 + 2] += faceNormal[2];\n\t\t\t\t\tcomputedNormals[i1 * 3] += faceNormal[0];\n\t\t\t\t\tcomputedNormals[i1 * 3 + 1] += faceNormal[1];\n\t\t\t\t\tcomputedNormals[i1 * 3 + 2] += faceNormal[2];\n\t\t\t\t\tcomputedNormals[i2 * 3] += faceNormal[0];\n\t\t\t\t\tcomputedNormals[i2 * 3 + 1] += faceNormal[1];\n\t\t\t\t\tcomputedNormals[i2 * 3 + 2] += faceNormal[2];\n\t\t\t\t}\n\t\t\t\tfor (let v = 0; v < positions.length / 3; v++) {\n\t\t\t\t\tconst nx = computedNormals[v * 3];\n\t\t\t\t\tconst ny = computedNormals[v * 3 + 1];\n\t\t\t\t\tconst nz = computedNormals[v * 3 + 2];\n\t\t\t\t\tconst len = Math.hypot(nx, ny, nz) || 1;\n\t\t\t\t\tnormals[v * 3] = nx / len;\n\t\t\t\t\tnormals[v * 3 + 1] = ny / len;\n\t\t\t\t\tnormals[v * 3 + 2] = nz / len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst indexArray = positions.length / 3 > 65535 ? new Uint32Array(indices) : new Uint16Array(indices);\n\t\t\tmeshes.push({\n\t\t\t\tid: `mesh_${bIdx}`,\n\t\t\t\tname: builder.materialName,\n\t\t\t\tpositions: new Float32Array(positions),\n\t\t\t\tnormals: new Float32Array(normals),\n\t\t\t\tuvs: new Float32Array(uvs),\n\t\t\t\tindices: indexArray,\n\t\t\t\tmaterialName: builder.materialName\n\t\t\t});\n\t\t}\n\t\tconst finalMinX = (minX - offsetX) * scaleMultiplier;\n\t\tconst finalMinY = (minY - offsetY) * scaleMultiplier;\n\t\tconst finalMinZ = (minZ - offsetZ) * scaleMultiplier;\n\t\tconst finalMaxX = (maxX - offsetX) * scaleMultiplier;\n\t\tconst finalMaxY = (maxY - offsetY) * scaleMultiplier;\n\t\tconst finalMaxZ = (maxZ - offsetZ) * scaleMultiplier;\n\t\tconst finalSizeX = finalMaxX - finalMinX;\n\t\tconst finalSizeY = finalMaxY - finalMinY;\n\t\tconst finalSizeZ = finalMaxZ - finalMinZ;\n\t\tconst finalCenterX = (finalMinX + finalMaxX) * .5;\n\t\tconst finalCenterY = (finalMinY + finalMaxY) * .5;\n\t\tconst finalCenterZ = (finalMinZ + finalMaxZ) * .5;\n\t\tconst sphereRadius = Math.hypot(finalSizeX, finalSizeY, finalSizeZ) * .5;\n\t\treturn {\n\t\t\tmeshes,\n\t\t\tmaterials,\n\t\t\tanimations: [],\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tfinalMinX,\n\t\t\t\t\tfinalMinY,\n\t\t\t\t\tfinalMinZ\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tfinalMaxX,\n\t\t\t\t\tfinalMaxY,\n\t\t\t\t\tfinalMaxZ\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\tfinalCenterX,\n\t\t\t\t\tfinalCenterY,\n\t\t\t\t\tfinalCenterZ\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tfinalSizeX,\n\t\t\t\t\tfinalSizeY,\n\t\t\t\t\tfinalSizeZ\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: sphereRadius\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t* Parses Wavefront .mtl material text into Material3D dictionary.\n\t*/\n\tstatic parseMtl(mtlText) {\n\t\tconst materials = {};\n\t\tlet currentMat = null;\n\t\tconst lines = mtlText.split(/\\r?\\n/);\n\t\tfor (const rawLine of lines) {\n\t\t\tconst line = rawLine.trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst cmd = parts[0]?.toLowerCase();\n\t\t\tif (cmd === \"newmtl\") {\n\t\t\t\tconst name = parts[1] ?? \"default\";\n\t\t\t\tcurrentMat = {\n\t\t\t\t\tname,\n\t\t\t\t\tdiffuseColor: [\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1\n\t\t\t\t\t],\n\t\t\t\t\tspecularColor: [\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t1\n\t\t\t\t\t],\n\t\t\t\t\tambientColor: [\n\t\t\t\t\t\t.2,\n\t\t\t\t\t\t.2,\n\t\t\t\t\t\t.2\n\t\t\t\t\t],\n\t\t\t\t\tshininess: 32,\n\t\t\t\t\topacity: 1\n\t\t\t\t};\n\t\t\t\tmaterials[name] = currentMat;\n\t\t\t} else if (currentMat) {\n\t\t\t\tif (cmd === \"kd\") {\n\t\t\t\t\tconst r = Number.parseFloat(parts[1] ?? \"1\");\n\t\t\t\t\tconst g$1 = Number.parseFloat(parts[2] ?? \"1\");\n\t\t\t\t\tconst b = Number.parseFloat(parts[3] ?? \"1\");\n\t\t\t\t\tcurrentMat.diffuseColor = [\n\t\t\t\t\t\tr,\n\t\t\t\t\t\tg$1,\n\t\t\t\t\t\tb,\n\t\t\t\t\t\tcurrentMat.diffuseColor?.[3] ?? 1\n\t\t\t\t\t];\n\t\t\t\t} else if (cmd === \"ks\") {\n\t\t\t\t\tconst r = Number.parseFloat(parts[1] ?? \"1\");\n\t\t\t\t\tconst g$1 = Number.parseFloat(parts[2] ?? \"1\");\n\t\t\t\t\tconst b = Number.parseFloat(parts[3] ?? \"1\");\n\t\t\t\t\tcurrentMat.specularColor = [\n\t\t\t\t\t\tr,\n\t\t\t\t\t\tg$1,\n\t\t\t\t\t\tb\n\t\t\t\t\t];\n\t\t\t\t\tcurrentMat.specularIntensity = (r + g$1 + b) / 3;\n\t\t\t\t} else if (cmd === \"ka\") {\n\t\t\t\t\tconst r = Number.parseFloat(parts[1] ?? \"0.2\");\n\t\t\t\t\tconst g$1 = Number.parseFloat(parts[2] ?? \"0.2\");\n\t\t\t\t\tconst b = Number.parseFloat(parts[3] ?? \"0.2\");\n\t\t\t\t\tcurrentMat.ambientColor = [\n\t\t\t\t\t\tr,\n\t\t\t\t\t\tg$1,\n\t\t\t\t\t\tb\n\t\t\t\t\t];\n\t\t\t\t} else if (cmd === \"ns\") currentMat.shininess = Number.parseFloat(parts[1] ?? \"32\");\n\t\t\t\telse if (cmd === \"d\" || cmd === \"tr\") {\n\t\t\t\t\tconst val = Number.parseFloat(parts[1] ?? \"1\");\n\t\t\t\t\tcurrentMat.opacity = cmd === \"d\" ? val : 1 - val;\n\t\t\t\t\tif (currentMat.diffuseColor) currentMat.diffuseColor[3] = currentMat.opacity;\n\t\t\t\t} else if (cmd === \"map_kd\") currentMat.diffuseTexture = parts.slice(1).join(\" \");\n\t\t\t\telse if (cmd === \"map_bump\" || cmd === \"bump\") currentMat.normalTexture = parts.slice(1).join(\" \");\n\t\t\t}\n\t\t}\n\t\treturn materials;\n\t}\n};\nfunction parseOBJ(objText, mtlText, options = {}) {\n\treturn ObjLoader.parse(objText, mtlText, options);\n}\nfunction parseMTL(mtlText) {\n\treturn ObjLoader.parseMtl(mtlText);\n}\nfunction loadOBJ(srcOrData, mtlText, options = {}) {\n\tlet text;\n\tif (typeof srcOrData !== \"string\") text = new TextDecoder().decode(srcOrData);\n\telse {\n\t\tconst trimmed = srcOrData.trim();\n\t\tif (!(trimmed.startsWith(\"v \") || trimmed.startsWith(\"#\") || trimmed.includes(\"\\nv \") || trimmed.includes(\"\\rv \")) && typeof fs !== \"undefined\" && fs.existsSync) try {\n\t\t\tlet filePath = srcOrData.startsWith(\"file://\") ? srcOrData.slice(7) : srcOrData;\n\t\t\ttry {\n\t\t\t\tfilePath = decodeURIComponent(filePath);\n\t\t\t} catch (_) {}\n\t\t\tif (fs.existsSync(filePath)) {\n\t\t\t\ttext = fs.readFileSync(filePath, \"utf-8\");\n\t\t\t\toptions = {\n\t\t\t\t\tbasePath: options.basePath ?? path.dirname(filePath),\n\t\t\t\t\t...options\n\t\t\t\t};\n\t\t\t} else text = srcOrData;\n\t\t} catch (_) {\n\t\t\ttext = srcOrData;\n\t\t}\n\t\telse text = srcOrData;\n\t}\n\treturn ObjLoader.parse(text, mtlText, options);\n}\n\n//#endregion\n//#region src/loaders/fbx-loader.ts\nvar FbxLoader = class FbxLoader {\n\tstatic FBX_KTIME = 46186158e3;\n\t/**\n\t* Parses binary or text FBX buffer/string into Model3DData.\n\t*/\n\tstatic parse(bufferOrString, options = {}) {\n\t\tconst rootNode = typeof bufferOrString === \"string\" ? FbxLoader.parseAscii(bufferOrString) : FbxLoader.isBinary(bufferOrString) ? FbxLoader.parseBinary(bufferOrString) : FbxLoader.parseAscii(new TextDecoder().decode(bufferOrString));\n\t\treturn FbxLoader.buildModelFromTree(rootNode, options);\n\t}\n\tstatic isBinary(buffer) {\n\t\tconst view = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (view.length < 27) return false;\n\t\tconst header = \"Kaydara FBX Binary \\0\u001a\\0\";\n\t\tfor (let i = 0; i < 23; i++) if (view[i] !== header.charCodeAt(i)) return false;\n\t\treturn true;\n\t}\n\t/**\n\t* Parses Binary FBX 7.x/6.x format.\n\t*/\n\tstatic parseBinary(buffer) {\n\t\tconst u8 = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tconst view = new DataView(u8.buffer, u8.byteOffset, u8.byteLength);\n\t\tconst is64Bit = view.getUint32(23, true) >= 7500;\n\t\tlet offset = 27;\n\t\tconst root = {\n\t\t\tname: \"Root\",\n\t\t\tprops: [],\n\t\t\tchildren: []\n\t\t};\n\t\tconst readNode = () => {\n\t\t\tif (offset >= u8.byteLength) return null;\n\t\t\tlet endOffset;\n\t\t\tlet numProperties;\n\t\t\tlet nameLen;\n\t\t\tif (is64Bit) {\n\t\t\t\tif (offset + 25 > u8.byteLength) return null;\n\t\t\t\tendOffset = Number(view.getBigUint64(offset, true));\n\t\t\t\tnumProperties = Number(view.getBigUint64(offset + 8, true));\n\t\t\t\tnameLen = view.getUint8(offset + 24);\n\t\t\t\toffset += 25;\n\t\t\t} else {\n\t\t\t\tif (offset + 13 > u8.byteLength) return null;\n\t\t\t\tendOffset = view.getUint32(offset, true);\n\t\t\t\tnumProperties = view.getUint32(offset + 4, true);\n\t\t\t\tnameLen = view.getUint8(offset + 12);\n\t\t\t\toffset += 13;\n\t\t\t}\n\t\t\tif (endOffset === 0) return null;\n\t\t\tconst name = new TextDecoder().decode(u8.subarray(offset, offset + nameLen));\n\t\t\toffset += nameLen;\n\t\t\tconst props = [];\n\t\t\tfor (let p = 0; p < numProperties; p++) {\n\t\t\t\tconst typeCode = String.fromCharCode(u8[offset]);\n\t\t\t\toffset += 1;\n\t\t\t\tswitch (typeCode) {\n\t\t\t\t\tcase \"Y\":\n\t\t\t\t\t\tprops.push(view.getInt16(offset, true));\n\t\t\t\t\t\toffset += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"C\":\n\t\t\t\t\tcase \"B\":\n\t\t\t\t\t\tprops.push(view.getUint8(offset) !== 0);\n\t\t\t\t\t\toffset += 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"I\":\n\t\t\t\t\t\tprops.push(view.getInt32(offset, true));\n\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"F\":\n\t\t\t\t\t\tprops.push(view.getFloat32(offset, true));\n\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tprops.push(view.getFloat64(offset, true));\n\t\t\t\t\t\toffset += 8;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"L\":\n\t\t\t\t\t\tprops.push(Number(view.getBigInt64(offset, true)));\n\t\t\t\t\t\toffset += 8;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"S\": {\n\t\t\t\t\t\tconst len = view.getUint32(offset, true);\n\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\tconst str = new TextDecoder().decode(u8.subarray(offset, offset + len));\n\t\t\t\t\t\tprops.push(str);\n\t\t\t\t\t\toffset += len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"R\": {\n\t\t\t\t\t\tconst len = view.getUint32(offset, true);\n\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\tconst raw = u8.subarray(offset, offset + len);\n\t\t\t\t\t\tprops.push(raw);\n\t\t\t\t\t\toffset += len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"f\":\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\tcase \"i\":\n\t\t\t\t\tcase \"l\":\n\t\t\t\t\tcase \"b\":\n\t\t\t\t\tcase \"c\": {\n\t\t\t\t\t\tconst arrayLen = view.getUint32(offset, true);\n\t\t\t\t\t\tconst encoding = view.getUint32(offset + 4, true);\n\t\t\t\t\t\tconst compressedLen = view.getUint32(offset + 8, true);\n\t\t\t\t\t\toffset += 12;\n\t\t\t\t\t\tlet arrayBuffer;\n\t\t\t\t\t\tif (encoding === 1) {\n\t\t\t\t\t\t\tarrayBuffer = inflateSync(u8.subarray(offset, offset + compressedLen));\n\t\t\t\t\t\t\toffset += compressedLen;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst totalBytes = arrayLen * (typeCode === \"d\" || typeCode === \"l\" ? 8 : typeCode === \"f\" || typeCode === \"i\" ? 4 : 1);\n\t\t\t\t\t\t\tarrayBuffer = u8.subarray(offset, offset + totalBytes);\n\t\t\t\t\t\t\toffset += totalBytes;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst arrayView = new DataView(arrayBuffer.buffer, arrayBuffer.byteOffset, arrayBuffer.byteLength);\n\t\t\t\t\t\tif (typeCode === \"f\") {\n\t\t\t\t\t\t\tconst arr = new Float32Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = arrayView.getFloat32(k * 4, true);\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else if (typeCode === \"d\") {\n\t\t\t\t\t\t\tconst arr = new Float64Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = arrayView.getFloat64(k * 8, true);\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else if (typeCode === \"i\") {\n\t\t\t\t\t\t\tconst arr = new Int32Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = arrayView.getInt32(k * 4, true);\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else if (typeCode === \"l\") {\n\t\t\t\t\t\t\tconst arr = new Float64Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = Number(arrayView.getBigInt64(k * 8, true));\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else if (typeCode === \"b\") {\n\t\t\t\t\t\t\tconst arr = new Uint8Array(arrayLen);\n\t\t\t\t\t\t\tfor (let k = 0; k < arrayLen; k++) arr[k] = arrayView.getUint8(k);\n\t\t\t\t\t\t\tprops.push(arr);\n\t\t\t\t\t\t} else props.push(arrayBuffer);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst children = [];\n\t\t\twhile (offset < endOffset) {\n\t\t\t\tconst child = readNode();\n\t\t\t\tif (child) children.push(child);\n\t\t\t\telse break;\n\t\t\t}\n\t\t\toffset = endOffset;\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tprops,\n\t\t\t\tchildren\n\t\t\t};\n\t\t};\n\t\twhile (offset < u8.byteLength - (is64Bit ? 25 : 13)) {\n\t\t\tconst node = readNode();\n\t\t\tif (node) root.children.push(node);\n\t\t\telse break;\n\t\t}\n\t\treturn root;\n\t}\n\t/**\n\t* Parses ASCII FBX format.\n\t*/\n\tstatic parseAscii(text) {\n\t\tconst root = {\n\t\t\tname: \"Root\",\n\t\t\tprops: [],\n\t\t\tchildren: []\n\t\t};\n\t\tconst stack = [root];\n\t\tconst lines = text.split(/\\r?\\n/);\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i]?.trim();\n\t\t\tif (!line || line.startsWith(\";\")) continue;\n\t\t\tif (line === \"}\") {\n\t\t\t\tif (stack.length > 1) stack.pop();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst colonIdx = line.indexOf(\":\");\n\t\t\tif (colonIdx === -1) continue;\n\t\t\tconst name = line.substring(0, colonIdx).trim();\n\t\t\tconst rest = line.substring(colonIdx + 1).trim();\n\t\t\tconst hasBrace = rest.endsWith(\"{\");\n\t\t\tconst propStr = hasBrace ? rest.slice(0, -1).trim() : rest;\n\t\t\tconst props = [];\n\t\t\tif (propStr) {\n\t\t\t\tconst rawProps = propStr.split(\",\").map((p) => p.trim());\n\t\t\t\tfor (const p of rawProps) if (p.startsWith(\"\\\"\") && p.endsWith(\"\\\"\")) props.push(p.slice(1, -1));\n\t\t\t\telse if (!Number.isNaN(Number(p))) props.push(Number(p));\n\t\t\t\telse props.push(p);\n\t\t\t}\n\t\t\tconst node = {\n\t\t\t\tname,\n\t\t\t\tprops,\n\t\t\t\tchildren: []\n\t\t\t};\n\t\t\tconst parent = stack[stack.length - 1];\n\t\t\tif (parent) parent.children.push(node);\n\t\t\tif (hasBrace) stack.push(node);\n\t\t}\n\t\treturn root;\n\t}\n\t/**\n\t* Builds ready-to-render Model3DData from parsed FBX node tree.\n\t*/\n\tstatic buildModelFromTree(root, options = {}) {\n\t\tconst objectsNode = root.children.find((c) => c.name === \"Objects\");\n\t\tconst connectionsNode = root.children.find((c) => c.name === \"Connections\");\n\t\tconst objects = /* @__PURE__ */ new Map();\n\t\tif (objectsNode) for (const child of objectsNode.children) {\n\t\t\tconst id = child.props[0] ?? 0;\n\t\t\tconst parts = String(child.props[1] ?? \"\").split(\"::\");\n\t\t\tconst name = parts.length > 1 ? parts[1] : parts[0];\n\t\t\tconst type = String(child.props[2] ?? child.name);\n\t\t\tobjects.set(id, {\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\ttype,\n\t\t\t\tnode: child\n\t\t\t});\n\t\t}\n\t\tconst connections = [];\n\t\tif (connectionsNode) {\n\t\t\tfor (const connNode of connectionsNode.children) if (connNode.name === \"C\" || connNode.name === \"Connect\") {\n\t\t\t\tconst mode = String(connNode.props[0]);\n\t\t\t\tconst childId = connNode.props[1] ?? 0;\n\t\t\t\tconst parentId = connNode.props[2] ?? 0;\n\t\t\t\tconst propName = mode === \"OP\" ? String(connNode.props[3]) : void 0;\n\t\t\t\tconnections.push({\n\t\t\t\t\tchildId,\n\t\t\t\t\tparentId,\n\t\t\t\t\tpropName\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst meshes = [];\n\t\tconst materials = {};\n\t\tfunction extractArrayProp(node) {\n\t\t\tif (!node) return [];\n\t\t\tif (node.props[0] instanceof Float32Array || node.props[0] instanceof Float64Array || node.props[0] instanceof Int32Array || Array.isArray(node.props[0])) return node.props[0];\n\t\t\tconst aChild = node.children.find((c) => c.name === \"a\");\n\t\t\tif (aChild && aChild.props.length > 0) return aChild.props;\n\t\t\tif (Array.isArray(node.props) && node.props.length > 0 && typeof node.props[0] === \"number\") return node.props;\n\t\t\treturn [];\n\t\t}\n\t\tfor (const [id, entry] of objects) if (entry.node.name === \"Geometry\" && (entry.type === \"Mesh\" || entry.node.props[2] === \"Mesh\" || entry.type === \"\")) {\n\t\t\tconst geomNode = entry.node;\n\t\t\tconst verticesNode = geomNode.children.find((c) => c.name === \"Vertices\");\n\t\t\tconst indicesNode = geomNode.children.find((c) => c.name === \"PolygonVertexIndex\");\n\t\t\tconst normalLayer = geomNode.children.find((c) => c.name === \"LayerElementNormal\");\n\t\t\tconst uvLayer = geomNode.children.find((c) => c.name === \"LayerElementUV\");\n\t\t\tif (!verticesNode || !indicesNode) continue;\n\t\t\tconst rawVerts = extractArrayProp(verticesNode);\n\t\t\tconst rawPolyIndices = extractArrayProp(indicesNode);\n\t\t\tconst normalsNode = normalLayer?.children.find((c) => c.name === \"Normals\");\n\t\t\tconst rawNormals = extractArrayProp(normalsNode);\n\t\t\tconst uvsNode = uvLayer?.children.find((c) => c.name === \"UV\");\n\t\t\tconst uvIndexNode = uvLayer?.children.find((c) => c.name === \"UVIndex\");\n\t\t\tconst rawUvs = extractArrayProp(uvsNode);\n\t\t\tconst rawUvIndices = extractArrayProp(uvIndexNode);\n\t\t\tconst triangles = [];\n\t\t\tconst triVertexIndexSequence = [];\n\t\t\tlet polygon = [];\n\t\t\tfor (let i = 0; i < rawPolyIndices.length; i++) {\n\t\t\t\tconst idx = rawPolyIndices[i];\n\t\t\t\tif (idx < 0) {\n\t\t\t\t\tpolygon.push(-(idx + 1));\n\t\t\t\t\ttriVertexIndexSequence.push(i);\n\t\t\t\t\tif (polygon.length >= 3) for (let k = 1; k < polygon.length - 1; k++) triangles.push([\n\t\t\t\t\t\tpolygon[0],\n\t\t\t\t\t\tpolygon[k],\n\t\t\t\t\t\tpolygon[k + 1]\n\t\t\t\t\t]);\n\t\t\t\t\tpolygon = [];\n\t\t\t\t} else {\n\t\t\t\t\tpolygon.push(idx);\n\t\t\t\t\ttriVertexIndexSequence.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst outPositions = [];\n\t\t\tconst outNormals = [];\n\t\t\tconst outUvs = [];\n\t\t\tconst outIndices = [];\n\t\t\tfor (let t = 0; t < triangles.length; t++) {\n\t\t\t\tconst tri = triangles[t];\n\t\t\t\tfor (let v = 0; v < 3; v++) {\n\t\t\t\t\tconst vertIdx = tri[v];\n\t\t\t\t\tconst outIdx = outPositions.length / 3;\n\t\t\t\t\tconst px = rawVerts[vertIdx * 3] ?? 0;\n\t\t\t\t\tconst py = rawVerts[vertIdx * 3 + 1] ?? 0;\n\t\t\t\t\tconst pz = rawVerts[vertIdx * 3 + 2] ?? 0;\n\t\t\t\t\toutPositions.push(px, py, pz);\n\t\t\t\t\tif (rawNormals.length > 0) {\n\t\t\t\t\t\tconst nx = rawNormals[vertIdx * 3] ?? 0;\n\t\t\t\t\t\tconst ny = rawNormals[vertIdx * 3 + 1] ?? 0;\n\t\t\t\t\t\tconst nz = rawNormals[vertIdx * 3 + 2] ?? 0;\n\t\t\t\t\t\toutNormals.push(nx, ny, nz);\n\t\t\t\t\t} else outNormals.push(0, 0, 1);\n\t\t\t\t\tif (rawUvs.length > 0) {\n\t\t\t\t\t\tlet uvIdx = vertIdx;\n\t\t\t\t\t\tif (rawUvIndices.length > 0) uvIdx = rawUvIndices[vertIdx] ?? vertIdx;\n\t\t\t\t\t\tconst u = rawUvs[uvIdx * 2] ?? 0;\n\t\t\t\t\t\tconst v$1 = rawUvs[uvIdx * 2 + 1] ?? 0;\n\t\t\t\t\t\toutUvs.push(u, 1 - v$1);\n\t\t\t\t\t} else outUvs.push(0, 0);\n\t\t\t\t\toutIndices.push(outIdx);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (rawNormals.length === 0 || options.smoothNormals) {\n\t\t\t\tconst computedNormals = new Float32Array(outPositions.length);\n\t\t\t\tfor (let i = 0; i < outIndices.length; i += 3) {\n\t\t\t\t\tconst i0 = outIndices[i];\n\t\t\t\t\tconst i1 = outIndices[i + 1];\n\t\t\t\t\tconst i2 = outIndices[i + 2];\n\t\t\t\t\tconst p0 = [\n\t\t\t\t\t\toutPositions[i0 * 3],\n\t\t\t\t\t\toutPositions[i0 * 3 + 1],\n\t\t\t\t\t\toutPositions[i0 * 3 + 2]\n\t\t\t\t\t];\n\t\t\t\t\tconst p1 = [\n\t\t\t\t\t\toutPositions[i1 * 3],\n\t\t\t\t\t\toutPositions[i1 * 3 + 1],\n\t\t\t\t\t\toutPositions[i1 * 3 + 2]\n\t\t\t\t\t];\n\t\t\t\t\tconst p2 = [\n\t\t\t\t\t\toutPositions[i2 * 3],\n\t\t\t\t\t\toutPositions[i2 * 3 + 1],\n\t\t\t\t\t\toutPositions[i2 * 3 + 2]\n\t\t\t\t\t];\n\t\t\t\t\tconst edge1 = Vector3Math.subtract(p1, p0);\n\t\t\t\t\tconst edge2 = Vector3Math.subtract(p2, p0);\n\t\t\t\t\tconst faceNormal = Vector3Math.cross(edge1, edge2);\n\t\t\t\t\tcomputedNormals[i0 * 3] += faceNormal[0];\n\t\t\t\t\tcomputedNormals[i0 * 3 + 1] += faceNormal[1];\n\t\t\t\t\tcomputedNormals[i0 * 3 + 2] += faceNormal[2];\n\t\t\t\t\tcomputedNormals[i1 * 3] += faceNormal[0];\n\t\t\t\t\tcomputedNormals[i1 * 3 + 1] += faceNormal[1];\n\t\t\t\t\tcomputedNormals[i1 * 3 + 2] += faceNormal[2];\n\t\t\t\t\tcomputedNormals[i2 * 3] += faceNormal[0];\n\t\t\t\t\tcomputedNormals[i2 * 3 + 1] += faceNormal[1];\n\t\t\t\t\tcomputedNormals[i2 * 3 + 2] += faceNormal[2];\n\t\t\t\t}\n\t\t\t\tfor (let v = 0; v < outPositions.length / 3; v++) {\n\t\t\t\t\tconst nx = computedNormals[v * 3];\n\t\t\t\t\tconst ny = computedNormals[v * 3 + 1];\n\t\t\t\t\tconst nz = computedNormals[v * 3 + 2];\n\t\t\t\t\tconst len = Math.hypot(nx, ny, nz) || 1;\n\t\t\t\t\toutNormals[v * 3] = nx / len;\n\t\t\t\t\toutNormals[v * 3 + 1] = ny / len;\n\t\t\t\t\toutNormals[v * 3 + 2] = nz / len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst skinConn = connections.find((c) => c.parentId === id && objects.get(c.childId)?.type === \"Deformer\" && objects.get(c.childId)?.node.props[2] === \"Skin\");\n\t\t\tlet jointIndices;\n\t\t\tlet jointWeights;\n\t\t\tif (skinConn) {\n\t\t\t\tconst numVerts = outPositions.length / 3;\n\t\t\t\tjointIndices = new Float32Array(numVerts * 4);\n\t\t\t\tjointWeights = new Float32Array(numVerts * 4);\n\t\t\t\tconnections.filter((c) => c.parentId === skinConn.childId && objects.get(c.childId)?.type === \"Deformer\" && objects.get(c.childId)?.node.props[2] === \"Cluster\").forEach((cc, boneIdx) => {\n\t\t\t\t\tconst clusterNode = objects.get(cc.childId)?.node;\n\t\t\t\t\tconst indexesNode = clusterNode?.children.find((c) => c.name === \"Indexes\");\n\t\t\t\t\tconst weightsNode = clusterNode?.children.find((c) => c.name === \"Weights\");\n\t\t\t\t\tif (indexesNode && weightsNode) {\n\t\t\t\t\t\tconst cIndexes = extractArrayProp(indexesNode);\n\t\t\t\t\t\tconst cWeights = extractArrayProp(weightsNode);\n\t\t\t\t\t\tfor (let k = 0; k < cIndexes.length; k++) {\n\t\t\t\t\t\t\tconst weight = cWeights[k] ?? 0;\n\t\t\t\t\t\t\tfor (let v = 0; v < numVerts; v++) for (let slot = 0; slot < 4; slot++) if (jointWeights[v * 4 + slot] === 0) {\n\t\t\t\t\t\t\t\tjointIndices[v * 4 + slot] = boneIdx;\n\t\t\t\t\t\t\t\tjointWeights[v * 4 + slot] = weight;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst isLarge = outPositions.length / 3 > 65535;\n\t\t\tmeshes.push({\n\t\t\t\tid: `fbx_mesh_${id}`,\n\t\t\t\tname: entry.name,\n\t\t\t\tpositions: new Float32Array(outPositions),\n\t\t\t\tnormals: new Float32Array(outNormals),\n\t\t\t\tuvs: new Float32Array(outUvs),\n\t\t\t\tindices: isLarge ? new Uint32Array(outIndices) : new Uint16Array(outIndices),\n\t\t\t\tjointIndices,\n\t\t\t\tjointWeights,\n\t\t\t\tmaterialName: entry.name\n\t\t\t});\n\t\t}\n\t\tfor (const [, entry] of objects) if (entry.node.name === \"Material\") {\n\t\t\tconst props70 = entry.node.children.find((c) => c.name === \"Properties70\");\n\t\t\tlet diffuseColor = [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t];\n\t\t\tlet shininess = 32;\n\t\t\tlet opacity = 1;\n\t\t\tif (props70) {\n\t\t\t\tfor (const p of props70.children) if (p.name === \"P\") {\n\t\t\t\t\tconst pName = String(p.props[0]);\n\t\t\t\t\tif (pName === \"DiffuseColor\" || pName === \"Color\") diffuseColor = [\n\t\t\t\t\t\tNumber(p.props[4] ?? 1),\n\t\t\t\t\t\tNumber(p.props[5] ?? 1),\n\t\t\t\t\t\tNumber(p.props[6] ?? 1),\n\t\t\t\t\t\t1\n\t\t\t\t\t];\n\t\t\t\t\telse if (pName === \"Shininess\" || pName === \"ShininessExponent\") shininess = Number(p.props[4] ?? 32);\n\t\t\t\t\telse if (pName === \"Opacity\") {\n\t\t\t\t\t\topacity = Number(p.props[4] ?? 1);\n\t\t\t\t\t\tdiffuseColor[3] = opacity;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaterials[entry.name] = {\n\t\t\t\tname: entry.name,\n\t\t\t\tdiffuseColor,\n\t\t\t\tshininess,\n\t\t\t\topacity\n\t\t\t};\n\t\t}\n\t\tconst animations = [];\n\t\tfor (const [id, entry] of objects) if (entry.node.name === \"AnimationStack\") {\n\t\t\tconst stackName = entry.name || \"Take 001\";\n\t\t\tconst tracks = [];\n\t\t\tconst layerConn = connections.find((c) => c.parentId === id && objects.get(c.childId)?.node.name === \"AnimationLayer\");\n\t\t\tif (layerConn) {\n\t\t\t\tconst curveNodeConns = connections.filter((c) => c.parentId === layerConn.childId && objects.get(c.childId)?.node.name === \"AnimationCurveNode\");\n\t\t\t\tconst groups = /* @__PURE__ */ new Map();\n\t\t\t\tfor (const cnc of curveNodeConns) {\n\t\t\t\t\tconst curveNodeObj = objects.get(cnc.childId);\n\t\t\t\t\tif (!curveNodeObj) continue;\n\t\t\t\t\tconst modelConn = connections.find((c) => c.childId === curveNodeObj.id && objects.get(c.parentId)?.node.name === \"Model\");\n\t\t\t\t\tconst targetModel = modelConn ? objects.get(modelConn.parentId) : void 0;\n\t\t\t\t\tconst kind = transformKindFromProperty(modelConn?.propName) ?? transformKindFromProperty(curveNodeObj.name);\n\t\t\t\t\tif (!kind) continue;\n\t\t\t\t\tconst key = `${targetModel?.id ?? curveNodeObj.id}|${kind}`;\n\t\t\t\t\tlet group = groups.get(key);\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconst model = targetModel?.node;\n\t\t\t\t\t\tgroup = {\n\t\t\t\t\t\t\tnodeName: targetModel?.name ?? curveNodeObj.name,\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tdefaults: staticTransform(model, curveNodeObj.node, kind),\n\t\t\t\t\t\t\tchannels: [\n\t\t\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\t\tvoid 0\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t};\n\t\t\t\t\t\tgroups.set(key, group);\n\t\t\t\t\t}\n\t\t\t\t\tconnections.filter((c) => c.parentId === curveNodeObj.id && objects.get(c.childId)?.node.name === \"AnimationCurve\").forEach((cc, order) => {\n\t\t\t\t\t\tconst axis = axisFromProperty(cc.propName) ?? order;\n\t\t\t\t\t\tif (axis > 2) return;\n\t\t\t\t\t\tconst curveObj = objects.get(cc.childId)?.node;\n\t\t\t\t\t\tconst times = extractArrayProp(curveObj?.children.find((c) => c.name === \"KeyTime\"));\n\t\t\t\t\t\tconst values = extractArrayProp(curveObj?.children.find((c) => c.name === \"KeyValueFloat\"));\n\t\t\t\t\t\tconst n = Math.min(times.length, values.length);\n\t\t\t\t\t\tif (n === 0) return;\n\t\t\t\t\t\tgroup.channels[axis] = {\n\t\t\t\t\t\t\ttimes: Array.from(times.slice(0, n), (t) => Number(t)),\n\t\t\t\t\t\t\tvalues: Array.from(values.slice(0, n), (v) => Number(v))\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const group of groups.values()) {\n\t\t\t\t\tconst track = buildTransformTrack(group);\n\t\t\t\t\tif (track) tracks.push(track);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet maxDuration = 1;\n\t\t\tfor (const t of tracks) if (t.times.length > 0) {\n\t\t\t\tconst lastT = t.times[t.times.length - 1] ?? 0;\n\t\t\t\tif (lastT > maxDuration) maxDuration = lastT;\n\t\t\t}\n\t\t\tanimations.push({\n\t\t\t\tname: stackName,\n\t\t\t\tduration: maxDuration,\n\t\t\t\tfps: 30,\n\t\t\t\ttracks\n\t\t\t});\n\t\t}\n\t\tlet minX = Infinity;\n\t\tlet minY = Infinity;\n\t\tlet minZ = Infinity;\n\t\tlet maxX = -Infinity;\n\t\tlet maxY = -Infinity;\n\t\tlet maxZ = -Infinity;\n\t\tfor (const mesh of meshes) for (let i = 0; i < mesh.positions.length; i += 3) {\n\t\t\tconst x = mesh.positions[i];\n\t\t\tconst y = mesh.positions[i + 1];\n\t\t\tconst z = mesh.positions[i + 2];\n\t\t\tif (x < minX) minX = x;\n\t\t\tif (y < minY) minY = y;\n\t\t\tif (z < minZ) minZ = z;\n\t\t\tif (x > maxX) maxX = x;\n\t\t\tif (y > maxY) maxY = y;\n\t\t\tif (z > maxZ) maxZ = z;\n\t\t}\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = -1;\n\t\t\tminY = -1;\n\t\t\tminZ = -1;\n\t\t\tmaxX = 1;\n\t\t\tmaxY = 1;\n\t\t\tmaxZ = 1;\n\t\t}\n\t\tconst sizeX = maxX - minX;\n\t\tconst sizeY = maxY - minY;\n\t\tconst sizeZ = maxZ - minZ;\n\t\tconst centerX = (minX + maxX) * .5;\n\t\tconst centerY = (minY + maxY) * .5;\n\t\tconst centerZ = (minZ + maxZ) * .5;\n\t\tconst sphereRadius = Math.hypot(sizeX, sizeY, sizeZ) * .5;\n\t\treturn {\n\t\t\tmeshes,\n\t\t\tmaterials,\n\t\t\tanimations,\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tminX,\n\t\t\t\t\tminY,\n\t\t\t\t\tminZ\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tmaxX,\n\t\t\t\t\tmaxY,\n\t\t\t\t\tmaxZ\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\tcenterX,\n\t\t\t\t\tcenterY,\n\t\t\t\t\tcenterZ\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tsizeX,\n\t\t\t\t\tsizeY,\n\t\t\t\t\tsizeZ\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: sphereRadius\n\t\t\t}\n\t\t};\n\t}\n};\n/**\n* Classifies a curve node from its OP connection property (\"Lcl Translation\",\n* \"Lcl Rotation\", \"Lcl Scaling\") or, failing that, its short name (\"T\", \"R\", \"S\").\n*/\nfunction transformKindFromProperty(name) {\n\tswitch (name) {\n\t\tcase \"Lcl Translation\":\n\t\tcase \"T\": return \"T\";\n\t\tcase \"Lcl Rotation\":\n\t\tcase \"R\": return \"R\";\n\t\tcase \"Lcl Scaling\":\n\t\tcase \"S\": return \"S\";\n\t\tdefault: return;\n\t}\n}\n/** Channel index of a curve from its curve-node connection property (\"d|X\" → 0). */\nfunction axisFromProperty(name) {\n\tswitch (name) {\n\t\tcase \"d|X\": return 0;\n\t\tcase \"d|Y\": return 1;\n\t\tcase \"d|Z\": return 2;\n\t\tdefault: return;\n\t}\n}\n/** Numeric values of a Properties70 `P` entry (they start at props[4]). */\nfunction readProperty70(node, name) {\n\tconst p = (node?.children.find((c) => c.name === \"Properties70\"))?.children.find((c) => c.name === \"P\" && c.props[0] === name);\n\tif (!p) return void 0;\n\treturn p.props.slice(4).map((v) => Number(v));\n}\n/** A model's rest value for one transform, used where a channel has no curve. */\nfunction staticTransform(model, curveNode, kind) {\n\tconst fallback = kind === \"S\" ? 1 : 0;\n\tconst modelProp = readProperty70(model, kind === \"T\" ? \"Lcl Translation\" : kind === \"R\" ? \"Lcl Rotation\" : \"Lcl Scaling\");\n\tconst out = [\n\t\tfallback,\n\t\tfallback,\n\t\tfallback\n\t];\n\tfor (let axis = 0; axis < 3; axis++) {\n\t\tconst fromModel = modelProp?.[axis];\n\t\tconst fromCurveNode = readProperty70(curveNode, `d|${\"XYZ\"[axis]}`)?.[0];\n\t\tconst value = fromModel ?? fromCurveNode;\n\t\tif (value !== void 0 && Number.isFinite(value)) out[axis] = value;\n\t}\n\treturn out;\n}\n/** FBX EOrder enum (Model \"RotationOrder\"): axes in the order they are applied. */\nconst FBX_ROTATION_ORDERS = [\n\t\"XYZ\",\n\t\"XZY\",\n\t\"YZX\",\n\t\"YXZ\",\n\t\"ZXY\",\n\t\"ZYX\"\n];\nfunction rotationOrder(model) {\n\treturn FBX_ROTATION_ORDERS[readProperty70(model, \"RotationOrder\")?.[0] ?? 0] ?? \"XYZ\";\n}\n/**\n* Euler degrees → [x, y, z, w] quaternion. FBX applies the axes in `order`\n* (XYZ: X first, so R = Rz·Ry·Rx).\n*/\nfunction fbxEulerToQuat(degrees, order = \"XYZ\") {\n\tlet q = [\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1\n\t];\n\tfor (const axisName of order) {\n\t\tconst axis = \"XYZ\".indexOf(axisName);\n\t\tconst half = (degrees[axis] ?? 0) * Math.PI / 360;\n\t\tconst s = Math.sin(half);\n\t\tconst a = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tMath.cos(half)\n\t\t];\n\t\ta[axis] = s;\n\t\tq = [\n\t\t\ta[3] * q[0] + a[0] * q[3] + a[1] * q[2] - a[2] * q[1],\n\t\t\ta[3] * q[1] - a[0] * q[2] + a[1] * q[3] + a[2] * q[0],\n\t\t\ta[3] * q[2] + a[0] * q[1] - a[1] * q[0] + a[2] * q[3],\n\t\t\ta[3] * q[3] - a[0] * q[0] - a[1] * q[1] - a[2] * q[2]\n\t\t];\n\t}\n\treturn q;\n}\n/** Linear sample of a curve at `t` (KTime ticks), clamped to its ends. */\nfunction sampleCurve(curve, t) {\n\tconst { times, values } = curve;\n\tconst last = times.length - 1;\n\tif (t <= times[0]) return values[0];\n\tif (t >= times[last]) return values[last];\n\tlet k = 0;\n\twhile (k < last - 1 && times[k + 1] <= t) k++;\n\tconst t0 = times[k];\n\tconst t1 = times[k + 1];\n\tconst u = t1 > t0 ? (t - t0) / (t1 - t0) : 0;\n\treturn values[k] + (values[k + 1] - values[k]) * u;\n}\n/**\n* Merges a transform's X/Y/Z curves onto one sorted key set: channels without\n* a key at some time are interpolated, channels without a curve keep the\n* static value. Rotations become quaternions in the model's RotationOrder.\n*/\nfunction buildTransformTrack(group) {\n\tconst keySet = /* @__PURE__ */ new Set();\n\tfor (const channel of group.channels) for (const t of channel?.times ?? []) keySet.add(t);\n\tif (keySet.size === 0) return void 0;\n\tconst keys = [...keySet].sort((a, b) => a - b);\n\tconst times = new Float32Array(keys.length);\n\tconst isRotation = group.kind === \"R\";\n\tconst values = new Float32Array(keys.length * (isRotation ? 4 : 3));\n\tconst order = isRotation ? rotationOrder(group.model) : \"XYZ\";\n\tlet prev;\n\tkeys.forEach((key, k) => {\n\t\ttimes[k] = key / FbxLoader.FBX_KTIME;\n\t\tconst v = [\n\t\t\t0,\n\t\t\t1,\n\t\t\t2\n\t\t].map((axis) => {\n\t\t\tconst channel = group.channels[axis];\n\t\t\treturn channel ? sampleCurve(channel, key) : group.defaults[axis];\n\t\t});\n\t\tif (!isRotation) {\n\t\t\tvalues.set(v, k * 3);\n\t\t\treturn;\n\t\t}\n\t\tconst q = fbxEulerToQuat(v, order);\n\t\tif (prev && prev[0] * q[0] + prev[1] * q[1] + prev[2] * q[2] + prev[3] * q[3] < 0) for (let i = 0; i < 4; i++) q[i] = -q[i];\n\t\tprev = q;\n\t\tvalues.set(q, k * 4);\n\t});\n\treturn {\n\t\tnodeName: group.nodeName,\n\t\ttimes,\n\t\ttranslations: group.kind === \"T\" ? values : void 0,\n\t\trotations: isRotation ? values : void 0,\n\t\tscales: group.kind === \"S\" ? values : void 0\n\t};\n}\nfunction parseFBX(bufferOrText, options = {}) {\n\treturn FbxLoader.parse(bufferOrText, options);\n}\nfunction loadFBX(srcOrData, options = {}) {\n\tlet data = srcOrData;\n\tif (typeof srcOrData === \"string\") {\n\t\tconst trimmed = srcOrData.trim();\n\t\tif (!(trimmed.includes(\"FBXHeaderExtension\") || trimmed.includes(\"Kaydara FBX\")) && typeof fs !== \"undefined\" && fs.existsSync) try {\n\t\t\tlet filePath = srcOrData.startsWith(\"file://\") ? srcOrData.slice(7) : srcOrData;\n\t\t\ttry {\n\t\t\t\tfilePath = decodeURIComponent(filePath);\n\t\t\t} catch (_) {}\n\t\t\tif (fs.existsSync(filePath)) {\n\t\t\t\tconst buf = fs.readFileSync(filePath);\n\t\t\t\tdata = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n\t\t\t}\n\t\t} catch (_) {}\n\t}\n\treturn FbxLoader.parse(data, options);\n}\n\n//#endregion\n//#region src/loaders/stl-loader.ts\nvar StlLoader = class StlLoader {\n\t/**\n\t* Checks if buffer is Binary STL or ASCII STL.\n\t*/\n\tstatic isBinary(buffer) {\n\t\tconst bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (bytes.length < 84) return false;\n\t\tconst triangleCount = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(80, true);\n\t\tconst expectedBinarySize = 84 + triangleCount * 50;\n\t\tif (bytes.length === expectedBinarySize) return true;\n\t\tconst checkLength = Math.min(bytes.length, 512);\n\t\tfor (let i = 0; i < checkLength; i++) {\n\t\t\tconst b = bytes[i];\n\t\t\tif (b > 127 || b < 32 && b !== 9 && b !== 10 && b !== 13) return true;\n\t\t}\n\t\tconst headerText = new TextDecoder(\"utf-8\").decode(bytes.subarray(0, 80)).trim();\n\t\tif (headerText.startsWith(\"solid\") && !headerText.includes(\"\\n\")) return bytes.length >= 84 + triangleCount * 50;\n\t\treturn !headerText.startsWith(\"solid\");\n\t}\n\t/**\n\t* Parses STL data (binary Uint8Array/ArrayBuffer or ASCII string) into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tif (typeof data === \"string\") return StlLoader.parseAscii(data, options);\n\t\tconst bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\tif (StlLoader.isBinary(bytes)) return StlLoader.parseBinary(bytes, options);\n\t\tconst text = new TextDecoder(\"utf-8\").decode(bytes);\n\t\treturn StlLoader.parseAscii(text, options);\n\t}\n\t/**\n\t* Parses Binary STL.\n\t*/\n\tstatic parseBinary(bytes, options = {}) {\n\t\tconst view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\t\tconst triangleCount = view.getUint32(80, true);\n\t\tconst positions = [];\n\t\tconst normals = [];\n\t\tconst indices = [];\n\t\tlet offset = 84;\n\t\tfor (let i = 0; i < triangleCount; i++) {\n\t\t\tif (offset + 50 > bytes.byteLength) break;\n\t\t\tconst nx = view.getFloat32(offset, true);\n\t\t\tconst ny = view.getFloat32(offset + 4, true);\n\t\t\tconst nz = view.getFloat32(offset + 8, true);\n\t\t\toffset += 12;\n\t\t\tconst v0x = view.getFloat32(offset, true);\n\t\t\tconst v0y = view.getFloat32(offset + 4, true);\n\t\t\tconst v0z = view.getFloat32(offset + 8, true);\n\t\t\toffset += 12;\n\t\t\tconst v1x = view.getFloat32(offset, true);\n\t\t\tconst v1y = view.getFloat32(offset + 4, true);\n\t\t\tconst v1z = view.getFloat32(offset + 8, true);\n\t\t\toffset += 12;\n\t\t\tconst v2x = view.getFloat32(offset, true);\n\t\t\tconst v2y = view.getFloat32(offset + 4, true);\n\t\t\tconst v2z = view.getFloat32(offset + 8, true);\n\t\t\toffset += 12;\n\t\t\toffset += 2;\n\t\t\tlet finalNx = nx;\n\t\t\tlet finalNy = ny;\n\t\t\tlet finalNz = nz;\n\t\t\tif (finalNx === 0 && finalNy === 0 && finalNz === 0) {\n\t\t\t\tconst e1 = Vector3Math.subtract([\n\t\t\t\t\tv1x,\n\t\t\t\t\tv1y,\n\t\t\t\t\tv1z\n\t\t\t\t], [\n\t\t\t\t\tv0x,\n\t\t\t\t\tv0y,\n\t\t\t\t\tv0z\n\t\t\t\t]);\n\t\t\t\tconst e2 = Vector3Math.subtract([\n\t\t\t\t\tv2x,\n\t\t\t\t\tv2y,\n\t\t\t\t\tv2z\n\t\t\t\t], [\n\t\t\t\t\tv0x,\n\t\t\t\t\tv0y,\n\t\t\t\t\tv0z\n\t\t\t\t]);\n\t\t\t\tconst fn = Vector3Math.normalize(Vector3Math.cross(e1, e2));\n\t\t\t\tfinalNx = fn[0];\n\t\t\t\tfinalNy = fn[1];\n\t\t\t\tfinalNz = fn[2];\n\t\t\t}\n\t\t\tconst startIdx = positions.length / 3;\n\t\t\tpositions.push(v0x, v0y, v0z, v1x, v1y, v1z, v2x, v2y, v2z);\n\t\t\tnormals.push(finalNx, finalNy, finalNz, finalNx, finalNy, finalNz, finalNx, finalNy, finalNz);\n\t\t\tindices.push(startIdx, startIdx + 1, startIdx + 2);\n\t\t}\n\t\treturn StlLoader.finalizeModel(positions, normals, indices, options);\n\t}\n\t/**\n\t* Parses ASCII STL text.\n\t*/\n\tstatic parseAscii(text, options = {}) {\n\t\tconst positions = [];\n\t\tconst normals = [];\n\t\tconst indices = [];\n\t\tconst lines = text.split(/\\r?\\n/);\n\t\tlet currentNormal = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t\tlet currentVerts = [];\n\t\tfor (const rawLine of lines) {\n\t\t\tconst line = rawLine.trim();\n\t\t\tif (!line) continue;\n\t\t\tif (line.startsWith(\"facet normal\")) {\n\t\t\t\tconst parts = line.split(/\\s+/);\n\t\t\t\tcurrentNormal = [\n\t\t\t\t\tNumber.parseFloat(parts[2] ?? \"0\") || 0,\n\t\t\t\t\tNumber.parseFloat(parts[3] ?? \"0\") || 0,\n\t\t\t\t\tNumber.parseFloat(parts[4] ?? \"0\") || 0\n\t\t\t\t];\n\t\t\t\tcurrentVerts = [];\n\t\t\t} else if (line.startsWith(\"vertex\")) {\n\t\t\t\tconst parts = line.split(/\\s+/);\n\t\t\t\tconst x = Number.parseFloat(parts[1] ?? \"0\") || 0;\n\t\t\t\tconst y = Number.parseFloat(parts[2] ?? \"0\") || 0;\n\t\t\t\tconst z = Number.parseFloat(parts[3] ?? \"0\") || 0;\n\t\t\t\tcurrentVerts.push([\n\t\t\t\t\tx,\n\t\t\t\t\ty,\n\t\t\t\t\tz\n\t\t\t\t]);\n\t\t\t} else if (line.startsWith(\"endfacet\")) {\n\t\t\t\tif (currentVerts.length >= 3) {\n\t\t\t\t\tconst v0 = currentVerts[0];\n\t\t\t\t\tconst v1 = currentVerts[1];\n\t\t\t\t\tconst v2 = currentVerts[2];\n\t\t\t\t\tlet fn = currentNormal;\n\t\t\t\t\tif (fn[0] === 0 && fn[1] === 0 && fn[2] === 0) {\n\t\t\t\t\t\tconst e1 = Vector3Math.subtract(v1, v0);\n\t\t\t\t\t\tconst e2 = Vector3Math.subtract(v2, v0);\n\t\t\t\t\t\tfn = Vector3Math.normalize(Vector3Math.cross(e1, e2));\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 1; i < currentVerts.length - 1; i++) {\n\t\t\t\t\t\tconst vi = currentVerts[i];\n\t\t\t\t\t\tconst viNext = currentVerts[i + 1];\n\t\t\t\t\t\tconst startIdx = positions.length / 3;\n\t\t\t\t\t\tpositions.push(v0[0], v0[1], v0[2], vi[0], vi[1], vi[2], viNext[0], viNext[1], viNext[2]);\n\t\t\t\t\t\tnormals.push(fn[0], fn[1], fn[2], fn[0], fn[1], fn[2], fn[0], fn[1], fn[2]);\n\t\t\t\t\t\tindices.push(startIdx, startIdx + 1, startIdx + 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurrentVerts = [];\n\t\t\t}\n\t\t}\n\t\treturn StlLoader.finalizeModel(positions, normals, indices, options);\n\t}\n\tstatic finalizeModel(rawPositions, rawNormals, rawIndices, options = {}) {\n\t\tlet minX = Infinity;\n\t\tlet minY = Infinity;\n\t\tlet minZ = Infinity;\n\t\tlet maxX = -Infinity;\n\t\tlet maxY = -Infinity;\n\t\tlet maxZ = -Infinity;\n\t\tfor (let i = 0; i < rawPositions.length; i += 3) {\n\t\t\tconst x = rawPositions[i];\n\t\t\tconst y = rawPositions[i + 1];\n\t\t\tconst z = rawPositions[i + 2];\n\t\t\tif (x < minX) minX = x;\n\t\t\tif (x > maxX) maxX = x;\n\t\t\tif (y < minY) minY = y;\n\t\t\tif (y > maxY) maxY = y;\n\t\t\tif (z < minZ) minZ = z;\n\t\t\tif (z > maxZ) maxZ = z;\n\t\t}\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = minY = minZ = 0;\n\t\t\tmaxX = maxY = maxZ = 0;\n\t\t}\n\t\tconst centerX = (minX + maxX) * .5;\n\t\tconst centerY = (minY + maxY) * .5;\n\t\tconst centerZ = (minZ + maxZ) * .5;\n\t\tconst sizeX = maxX - minX;\n\t\tconst sizeY = maxY - minY;\n\t\tconst sizeZ = maxZ - minZ;\n\t\tconst maxDimension = Math.max(sizeX, sizeY, sizeZ, 1e-4);\n\t\tlet scaleMultiplier = 1;\n\t\tif (options.normalizeSize && options.normalizeSize > 0) scaleMultiplier = options.normalizeSize / maxDimension;\n\t\tlet scaleX = scaleMultiplier;\n\t\tlet scaleY = scaleMultiplier;\n\t\tlet scaleZ = scaleMultiplier;\n\t\tif (typeof options.scale === \"number\") {\n\t\t\tscaleX *= options.scale;\n\t\t\tscaleY *= options.scale;\n\t\t\tscaleZ *= options.scale;\n\t\t} else if (Array.isArray(options.scale)) {\n\t\t\tscaleX *= options.scale[0];\n\t\t\tscaleY *= options.scale[1];\n\t\t\tscaleZ *= options.scale[2];\n\t\t}\n\t\tconst offsetX = options.center ? centerX : 0;\n\t\tconst offsetY = options.center ? centerY : 0;\n\t\tconst offsetZ = options.center ? centerZ : 0;\n\t\tconst positions = new Float32Array(rawPositions.length);\n\t\tconst uvs = new Float32Array(rawPositions.length / 3 * 2);\n\t\tfor (let i = 0; i < rawPositions.length; i += 3) {\n\t\t\tconst px = (rawPositions[i] - offsetX) * scaleX;\n\t\t\tconst py = (rawPositions[i + 1] - offsetY) * scaleY;\n\t\t\tconst pz = (rawPositions[i + 2] - offsetZ) * scaleZ;\n\t\t\tpositions[i] = px;\n\t\t\tpositions[i + 1] = py;\n\t\t\tpositions[i + 2] = pz;\n\t\t\tconst uvIdx = i / 3 * 2;\n\t\t\tuvs[uvIdx] = sizeX > 0 ? (rawPositions[i] - minX) / sizeX : 0;\n\t\t\tuvs[uvIdx + 1] = sizeY > 0 ? (rawPositions[i + 1] - minY) / sizeY : 0;\n\t\t}\n\t\tconst indexArray = positions.length / 3 > 65535 ? new Uint32Array(rawIndices) : new Uint16Array(rawIndices);\n\t\tconst defaultMaterial = {\n\t\t\tname: \"stl_default\",\n\t\t\tdiffuseColor: [\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t.85,\n\t\t\t\t1\n\t\t\t],\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .5,\n\t\t\t...options.defaultMaterial\n\t\t};\n\t\tconst meshes = [{\n\t\t\tid: \"stl_mesh_0\",\n\t\t\tname: \"stl_geometry\",\n\t\t\tpositions,\n\t\t\tnormals: new Float32Array(rawNormals),\n\t\t\tuvs,\n\t\t\tindices: indexArray,\n\t\t\tmaterialName: \"stl_default\"\n\t\t}];\n\t\tconst finalMinX = (minX - offsetX) * scaleX;\n\t\tconst finalMinY = (minY - offsetY) * scaleY;\n\t\tconst finalMinZ = (minZ - offsetZ) * scaleZ;\n\t\tconst finalMaxX = (maxX - offsetX) * scaleX;\n\t\tconst finalMaxY = (maxY - offsetY) * scaleY;\n\t\tconst finalMaxZ = (maxZ - offsetZ) * scaleZ;\n\t\treturn {\n\t\t\tname: \"STL_Model\",\n\t\t\tmeshes,\n\t\t\tmaterials: { stl_default: defaultMaterial },\n\t\t\tanimations: [],\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tfinalMinX,\n\t\t\t\t\tfinalMinY,\n\t\t\t\t\tfinalMinZ\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tfinalMaxX,\n\t\t\t\t\tfinalMaxY,\n\t\t\t\t\tfinalMaxZ\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t(finalMinX + finalMaxX) * .5,\n\t\t\t\t\t(finalMinY + finalMaxY) * .5,\n\t\t\t\t\t(finalMinZ + finalMaxZ) * .5\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tfinalMaxX - finalMinX,\n\t\t\t\t\tfinalMaxY - finalMinY,\n\t\t\t\t\tfinalMaxZ - finalMinZ\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: Math.hypot(finalMaxX - finalMinX, finalMaxY - finalMinY, finalMaxZ - finalMinZ) * .5\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t* Loads an STL file synchronously or asynchronously from a path or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return StlLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\treturn StlLoader.parse(buf, options);\n\t\t}\n\t\treturn StlLoader.parse(srcOrData, options);\n\t}\n};\nfunction parseSTL(data, options = {}) {\n\treturn StlLoader.parse(data, options);\n}\nfunction loadSTL(srcOrData, options = {}) {\n\treturn StlLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/loaders/ply-loader.ts\nvar PlyLoader = class PlyLoader {\n\t/**\n\t* Parses PLY data (ASCII string or binary buffer) into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tconst bytes = typeof data === \"string\" ? new TextEncoder().encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\tconst headerText = PlyLoader.extractHeader(bytes);\n\t\tconst header = PlyLoader.parseHeader(headerText.text);\n\t\tif (header.format === \"ascii\") {\n\t\t\tconst bodyText = new TextDecoder(\"utf-8\").decode(bytes.subarray(headerText.endOffset));\n\t\t\treturn PlyLoader.parseAsciiBody(header, bodyText, options);\n\t\t}\n\t\tconst isLittleEndian = header.format === \"binary_little_endian\";\n\t\treturn PlyLoader.parseBinaryBody(header, bytes.subarray(headerText.endOffset), isLittleEndian, options);\n\t}\n\tstatic extractHeader(bytes) {\n\t\tconst searchLen = Math.min(bytes.length, 1e4);\n\t\tconst slice = bytes.subarray(0, searchLen);\n\t\tconst str = new TextDecoder(\"utf-8\").decode(slice);\n\t\tconst endIdx = str.indexOf(\"end_header\");\n\t\tif (endIdx === -1) throw new Error(\"Invalid PLY file: 'end_header' marker not found\");\n\t\tlet newlineOffset = str.indexOf(\"\\n\", endIdx);\n\t\tif (newlineOffset === -1) newlineOffset = endIdx + 10;\n\t\telse newlineOffset += 1;\n\t\treturn {\n\t\t\ttext: str.substring(0, newlineOffset),\n\t\t\tendOffset: newlineOffset\n\t\t};\n\t}\n\tstatic parseHeader(headerStr) {\n\t\tconst lines = headerStr.split(/\\r?\\n/);\n\t\tlet format = \"ascii\";\n\t\tlet version$1 = \"1.0\";\n\t\tconst elements = [];\n\t\tlet currentElement = null;\n\t\tfor (const rawLine of lines) {\n\t\t\tconst line = rawLine.trim();\n\t\t\tif (!line || line.startsWith(\"comment\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst cmd = parts[0]?.toLowerCase();\n\t\t\tif (cmd === \"ply\") continue;\n\t\t\tif (cmd === \"format\") {\n\t\t\t\tconst fmt = parts[1]?.toLowerCase();\n\t\t\t\tif (fmt === \"binary_little_endian\") format = \"binary_little_endian\";\n\t\t\t\telse if (fmt === \"binary_big_endian\") format = \"binary_big_endian\";\n\t\t\t\telse format = \"ascii\";\n\t\t\t\tversion$1 = parts[2] ?? \"1.0\";\n\t\t\t} else if (cmd === \"element\") {\n\t\t\t\tcurrentElement = {\n\t\t\t\t\tname: parts[1] ?? \"\",\n\t\t\t\t\tcount: Number.parseInt(parts[2] ?? \"0\", 10),\n\t\t\t\t\tproperties: []\n\t\t\t\t};\n\t\t\t\telements.push(currentElement);\n\t\t\t} else if (cmd === \"property\" && currentElement) if (parts[1]?.toLowerCase() === \"list\") currentElement.properties.push({\n\t\t\t\tname: parts[4] ?? \"\",\n\t\t\t\ttype: \"list\",\n\t\t\t\tisList: true,\n\t\t\t\tcountType: parts[2] ?? \"uchar\",\n\t\t\t\titemType: parts[3] ?? \"int\"\n\t\t\t});\n\t\t\telse currentElement.properties.push({\n\t\t\t\tname: parts[2] ?? \"\",\n\t\t\t\ttype: parts[1]?.toLowerCase() ?? \"float\"\n\t\t\t});\n\t\t\telse if (cmd === \"end_header\") break;\n\t\t}\n\t\treturn {\n\t\t\tformat,\n\t\t\tversion: version$1,\n\t\t\telements\n\t\t};\n\t}\n\tstatic parseAsciiBody(header, bodyText, options) {\n\t\tconst vertexElement = header.elements.find((e) => e.name === \"vertex\");\n\t\tconst faceElement = header.elements.find((e) => e.name === \"face\");\n\t\tconst vertexCount = vertexElement?.count ?? 0;\n\t\tconst faceCount = faceElement?.count ?? 0;\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawUvs = [];\n\t\tconst rawColors = [];\n\t\tconst rawIndices = [];\n\t\tconst vProps = vertexElement?.properties ?? [];\n\t\tconst xIdx = vProps.findIndex((p) => p.name === \"x\");\n\t\tconst yIdx = vProps.findIndex((p) => p.name === \"y\");\n\t\tconst zIdx = vProps.findIndex((p) => p.name === \"z\");\n\t\tconst nxIdx = vProps.findIndex((p) => p.name === \"nx\");\n\t\tconst nyIdx = vProps.findIndex((p) => p.name === \"ny\");\n\t\tconst nzIdx = vProps.findIndex((p) => p.name === \"nz\");\n\t\tconst uIdx = vProps.findIndex((p) => p.name === \"u\" || p.name === \"s\" || p.name === \"texture_u\");\n\t\tconst vCoordIdx = vProps.findIndex((p) => p.name === \"v\" || p.name === \"t\" || p.name === \"texture_v\");\n\t\tconst rIdx = vProps.findIndex((p) => p.name === \"red\" || p.name === \"r\");\n\t\tconst gIdx = vProps.findIndex((p) => p.name === \"green\" || p.name === \"g\");\n\t\tconst bIdx = vProps.findIndex((p) => p.name === \"blue\" || p.name === \"b\");\n\t\tconst aIdx = vProps.findIndex((p) => p.name === \"alpha\" || p.name === \"a\");\n\t\tconst hasNormals = nxIdx !== -1 && nyIdx !== -1 && nzIdx !== -1;\n\t\tconst hasColors = rIdx !== -1 && gIdx !== -1 && bIdx !== -1;\n\t\tconst hasUvs = uIdx !== -1 && vCoordIdx !== -1;\n\t\tconst lines = bodyText.trim().split(/\\r?\\n/);\n\t\tlet lineIdx = 0;\n\t\tfor (let v = 0; v < vertexCount; v++) {\n\t\t\tif (lineIdx >= lines.length) break;\n\t\t\tconst line = lines[lineIdx++]?.trim();\n\t\t\tif (!line) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst x = Number.parseFloat(parts[xIdx] ?? \"0\") || 0;\n\t\t\tconst y = Number.parseFloat(parts[yIdx] ?? \"0\") || 0;\n\t\t\tconst z = Number.parseFloat(parts[zIdx] ?? \"0\") || 0;\n\t\t\trawPositions.push(x, y, z);\n\t\t\tif (hasNormals) {\n\t\t\t\tconst nx = Number.parseFloat(parts[nxIdx] ?? \"0\") || 0;\n\t\t\t\tconst ny = Number.parseFloat(parts[nyIdx] ?? \"0\") || 0;\n\t\t\t\tconst nz = Number.parseFloat(parts[nzIdx] ?? \"0\") || 0;\n\t\t\t\trawNormals.push(nx, ny, nz);\n\t\t\t} else rawNormals.push(0, 0, 0);\n\t\t\tif (hasUvs) {\n\t\t\t\tconst u = Number.parseFloat(parts[uIdx] ?? \"0\") || 0;\n\t\t\t\tconst vCoord = Number.parseFloat(parts[vCoordIdx] ?? \"0\") || 0;\n\t\t\t\trawUvs.push(u, 1 - vCoord);\n\t\t\t} else rawUvs.push(0, 0);\n\t\t\tif (hasColors) {\n\t\t\t\tconst r = (Number.parseFloat(parts[rIdx] ?? \"255\") || 0) / 255;\n\t\t\t\tconst g$1 = (Number.parseFloat(parts[gIdx] ?? \"255\") || 0) / 255;\n\t\t\t\tconst b = (Number.parseFloat(parts[bIdx] ?? \"255\") || 0) / 255;\n\t\t\t\tconst a = aIdx !== -1 ? (Number.parseFloat(parts[aIdx] ?? \"255\") || 0) / 255 : 1;\n\t\t\t\trawColors.push(r, g$1, b, a);\n\t\t\t}\n\t\t}\n\t\tfor (let f = 0; f < faceCount; f++) {\n\t\t\tif (lineIdx >= lines.length) break;\n\t\t\tconst line = lines[lineIdx++]?.trim();\n\t\t\tif (!line) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst n = Number.parseInt(parts[0] ?? \"0\", 10);\n\t\t\tif (n >= 3) {\n\t\t\t\tconst v0 = Number.parseInt(parts[1] ?? \"0\", 10);\n\t\t\t\tfor (let i = 1; i < n - 1; i++) {\n\t\t\t\t\tconst v1 = Number.parseInt(parts[i + 1] ?? \"0\", 10);\n\t\t\t\t\tconst v2 = Number.parseInt(parts[i + 2] ?? \"0\", 10);\n\t\t\t\t\trawIndices.push(v0, v1, v2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn PlyLoader.finalizeModel(rawPositions, rawNormals, rawUvs, hasColors ? rawColors : void 0, rawIndices, hasNormals, options);\n\t}\n\tstatic parseBinaryBody(header, bodyBytes, isLittleEndian, options) {\n\t\tconst view = new DataView(bodyBytes.buffer, bodyBytes.byteOffset, bodyBytes.byteLength);\n\t\tlet offset = 0;\n\t\tconst vertexElement = header.elements.find((e) => e.name === \"vertex\");\n\t\tconst faceElement = header.elements.find((e) => e.name === \"face\");\n\t\tconst vertexCount = vertexElement?.count ?? 0;\n\t\tconst faceCount = faceElement?.count ?? 0;\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawUvs = [];\n\t\tconst rawColors = [];\n\t\tconst rawIndices = [];\n\t\tconst vProps = vertexElement?.properties ?? [];\n\t\tconst hasNormals = vProps.some((p) => p.name === \"nx\");\n\t\tconst hasColors = vProps.some((p) => p.name === \"red\" || p.name === \"r\");\n\t\tconst readType = (typeStr) => {\n\t\t\tlet val = 0;\n\t\t\tswitch (typeStr.toLowerCase()) {\n\t\t\t\tcase \"char\":\n\t\t\t\tcase \"int8\":\n\t\t\t\t\tval = view.getInt8(offset);\n\t\t\t\t\toffset += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"uchar\":\n\t\t\t\tcase \"uint8\":\n\t\t\t\t\tval = view.getUint8(offset);\n\t\t\t\t\toffset += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"short\":\n\t\t\t\tcase \"int16\":\n\t\t\t\t\tval = view.getInt16(offset, isLittleEndian);\n\t\t\t\t\toffset += 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ushort\":\n\t\t\t\tcase \"uint16\":\n\t\t\t\t\tval = view.getUint16(offset, isLittleEndian);\n\t\t\t\t\toffset += 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"int\":\n\t\t\t\tcase \"int32\":\n\t\t\t\t\tval = view.getInt32(offset, isLittleEndian);\n\t\t\t\t\toffset += 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"uint\":\n\t\t\t\tcase \"uint32\":\n\t\t\t\t\tval = view.getUint32(offset, isLittleEndian);\n\t\t\t\t\toffset += 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"float\":\n\t\t\t\tcase \"float32\":\n\t\t\t\t\tval = view.getFloat32(offset, isLittleEndian);\n\t\t\t\t\toffset += 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"double\":\n\t\t\t\tcase \"float64\":\n\t\t\t\t\tval = view.getFloat64(offset, isLittleEndian);\n\t\t\t\t\toffset += 8;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tval = view.getFloat32(offset, isLittleEndian);\n\t\t\t\t\toffset += 4;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn val;\n\t\t};\n\t\tfor (let v = 0; v < vertexCount; v++) {\n\t\t\tlet x = 0, y = 0, z = 0;\n\t\t\tlet nx = 0, ny = 0, nz = 0;\n\t\t\tlet u = 0, vCoord = 0;\n\t\t\tlet r = 1, g$1 = 1, b = 1, a = 1;\n\t\t\tfor (const prop of vProps) {\n\t\t\t\tconst val = readType(prop.type);\n\t\t\t\tconst pName = prop.name.toLowerCase();\n\t\t\t\tif (pName === \"x\") x = val;\n\t\t\t\telse if (pName === \"y\") y = val;\n\t\t\t\telse if (pName === \"z\") z = val;\n\t\t\t\telse if (pName === \"nx\") nx = val;\n\t\t\t\telse if (pName === \"ny\") ny = val;\n\t\t\t\telse if (pName === \"nz\") nz = val;\n\t\t\t\telse if (pName === \"u\" || pName === \"s\") u = val;\n\t\t\t\telse if (pName === \"v\" || pName === \"t\") vCoord = val;\n\t\t\t\telse if (pName === \"red\" || pName === \"r\") r = prop.type.includes(\"int\") ? val / 255 : val;\n\t\t\t\telse if (pName === \"green\" || pName === \"g\") g$1 = prop.type.includes(\"int\") ? val / 255 : val;\n\t\t\t\telse if (pName === \"blue\" || pName === \"b\") b = prop.type.includes(\"int\") ? val / 255 : val;\n\t\t\t\telse if (pName === \"alpha\" || pName === \"a\") a = prop.type.includes(\"int\") ? val / 255 : val;\n\t\t\t}\n\t\t\trawPositions.push(x, y, z);\n\t\t\trawNormals.push(nx, ny, nz);\n\t\t\trawUvs.push(u, 1 - vCoord);\n\t\t\tif (hasColors) rawColors.push(r, g$1, b, a);\n\t\t}\n\t\tconst listProp = (faceElement?.properties ?? []).find((p) => p.isList);\n\t\tfor (let f = 0; f < faceCount; f++) {\n\t\t\tif (offset >= bodyBytes.byteLength) break;\n\t\t\tif (listProp) {\n\t\t\t\tconst count = readType(listProp.countType ?? \"uchar\");\n\t\t\t\tconst verts = [];\n\t\t\t\tfor (let k = 0; k < count; k++) verts.push(readType(listProp.itemType ?? \"int\"));\n\t\t\t\tif (verts.length >= 3) {\n\t\t\t\t\tconst v0 = verts[0];\n\t\t\t\t\tfor (let i = 1; i < verts.length - 1; i++) rawIndices.push(v0, verts[i], verts[i + 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn PlyLoader.finalizeModel(rawPositions, rawNormals, rawUvs, hasColors ? rawColors : void 0, rawIndices, hasNormals, options);\n\t}\n\tstatic finalizeModel(rawPositions, rawNormals, rawUvs, rawColors, rawIndices, hasNormals, options) {\n\t\tif (!hasNormals || options.smoothNormals) {\n\t\t\tfor (let i = 0; i < rawIndices.length; i += 3) {\n\t\t\t\tconst i0 = rawIndices[i];\n\t\t\t\tconst i1 = rawIndices[i + 1];\n\t\t\t\tconst i2 = rawIndices[i + 2];\n\t\t\t\tconst p0 = [\n\t\t\t\t\trawPositions[i0 * 3],\n\t\t\t\t\trawPositions[i0 * 3 + 1],\n\t\t\t\t\trawPositions[i0 * 3 + 2]\n\t\t\t\t];\n\t\t\t\tconst p1 = [\n\t\t\t\t\trawPositions[i1 * 3],\n\t\t\t\t\trawPositions[i1 * 3 + 1],\n\t\t\t\t\trawPositions[i1 * 3 + 2]\n\t\t\t\t];\n\t\t\t\tconst p2 = [\n\t\t\t\t\trawPositions[i2 * 3],\n\t\t\t\t\trawPositions[i2 * 3 + 1],\n\t\t\t\t\trawPositions[i2 * 3 + 2]\n\t\t\t\t];\n\t\t\t\tconst e1 = Vector3Math.subtract(p1, p0);\n\t\t\t\tconst e2 = Vector3Math.subtract(p2, p0);\n\t\t\t\tconst fn = Vector3Math.cross(e1, e2);\n\t\t\t\trawNormals[i0 * 3] += fn[0];\n\t\t\t\trawNormals[i0 * 3 + 1] += fn[1];\n\t\t\t\trawNormals[i0 * 3 + 2] += fn[2];\n\t\t\t\trawNormals[i1 * 3] += fn[0];\n\t\t\t\trawNormals[i1 * 3 + 1] += fn[1];\n\t\t\t\trawNormals[i1 * 3 + 2] += fn[2];\n\t\t\t\trawNormals[i2 * 3] += fn[0];\n\t\t\t\trawNormals[i2 * 3 + 1] += fn[1];\n\t\t\t\trawNormals[i2 * 3 + 2] += fn[2];\n\t\t\t}\n\t\t\tfor (let i = 0; i < rawNormals.length; i += 3) {\n\t\t\t\tconst nx = rawNormals[i];\n\t\t\t\tconst ny = rawNormals[i + 1];\n\t\t\t\tconst nz = rawNormals[i + 2];\n\t\t\t\tconst len = Math.hypot(nx, ny, nz) || 1;\n\t\t\t\trawNormals[i] = nx / len;\n\t\t\t\trawNormals[i + 1] = ny / len;\n\t\t\t\trawNormals[i + 2] = nz / len;\n\t\t\t}\n\t\t}\n\t\tlet minX = Infinity, minY = Infinity, minZ = Infinity;\n\t\tlet maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;\n\t\tfor (let i = 0; i < rawPositions.length; i += 3) {\n\t\t\tconst x = rawPositions[i];\n\t\t\tconst y = rawPositions[i + 1];\n\t\t\tconst z = rawPositions[i + 2];\n\t\t\tif (x < minX) minX = x;\n\t\t\tif (x > maxX) maxX = x;\n\t\t\tif (y < minY) minY = y;\n\t\t\tif (y > maxY) maxY = y;\n\t\t\tif (z < minZ) minZ = z;\n\t\t\tif (z > maxZ) maxZ = z;\n\t\t}\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = minY = minZ = 0;\n\t\t\tmaxX = maxY = maxZ = 0;\n\t\t}\n\t\tconst centerX = (minX + maxX) * .5;\n\t\tconst centerY = (minY + maxY) * .5;\n\t\tconst centerZ = (minZ + maxZ) * .5;\n\t\tconst sizeX = maxX - minX;\n\t\tconst sizeY = maxY - minY;\n\t\tconst sizeZ = maxZ - minZ;\n\t\tconst maxDimension = Math.max(sizeX, sizeY, sizeZ, 1e-4);\n\t\tlet scaleMultiplier = 1;\n\t\tif (options.normalizeSize && options.normalizeSize > 0) scaleMultiplier = options.normalizeSize / maxDimension;\n\t\tlet scaleX = scaleMultiplier;\n\t\tlet scaleY = scaleMultiplier;\n\t\tlet scaleZ = scaleMultiplier;\n\t\tif (typeof options.scale === \"number\") {\n\t\t\tscaleX *= options.scale;\n\t\t\tscaleY *= options.scale;\n\t\t\tscaleZ *= options.scale;\n\t\t} else if (Array.isArray(options.scale)) {\n\t\t\tscaleX *= options.scale[0];\n\t\t\tscaleY *= options.scale[1];\n\t\t\tscaleZ *= options.scale[2];\n\t\t}\n\t\tconst offsetX = options.center ? centerX : 0;\n\t\tconst offsetY = options.center ? centerY : 0;\n\t\tconst offsetZ = options.center ? centerZ : 0;\n\t\tconst positions = new Float32Array(rawPositions.length);\n\t\tfor (let i = 0; i < rawPositions.length; i += 3) {\n\t\t\tpositions[i] = (rawPositions[i] - offsetX) * scaleX;\n\t\t\tpositions[i + 1] = (rawPositions[i + 1] - offsetY) * scaleY;\n\t\t\tpositions[i + 2] = (rawPositions[i + 2] - offsetZ) * scaleZ;\n\t\t}\n\t\tconst indexArray = positions.length / 3 > 65535 ? new Uint32Array(rawIndices) : new Uint16Array(rawIndices);\n\t\tconst defaultMaterial = {\n\t\t\tname: \"ply_default\",\n\t\t\tdiffuseColor: [\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t.85,\n\t\t\t\t1\n\t\t\t],\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .5,\n\t\t\t...options.defaultMaterial\n\t\t};\n\t\tconst meshes = [{\n\t\t\tid: \"ply_mesh_0\",\n\t\t\tname: \"ply_geometry\",\n\t\t\tpositions,\n\t\t\tnormals: new Float32Array(rawNormals),\n\t\t\tuvs: new Float32Array(rawUvs),\n\t\t\tcolors: rawColors ? new Float32Array(rawColors) : void 0,\n\t\t\tindices: indexArray,\n\t\t\tmaterialName: \"ply_default\"\n\t\t}];\n\t\tconst finalMinX = (minX - offsetX) * scaleX;\n\t\tconst finalMinY = (minY - offsetY) * scaleY;\n\t\tconst finalMinZ = (minZ - offsetZ) * scaleZ;\n\t\tconst finalMaxX = (maxX - offsetX) * scaleX;\n\t\tconst finalMaxY = (maxY - offsetY) * scaleY;\n\t\tconst finalMaxZ = (maxZ - offsetZ) * scaleZ;\n\t\treturn {\n\t\t\tname: \"PLY_Model\",\n\t\t\tmeshes,\n\t\t\tmaterials: { ply_default: defaultMaterial },\n\t\t\tanimations: [],\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tfinalMinX,\n\t\t\t\t\tfinalMinY,\n\t\t\t\t\tfinalMinZ\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tfinalMaxX,\n\t\t\t\t\tfinalMaxY,\n\t\t\t\t\tfinalMaxZ\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t(finalMinX + finalMaxX) * .5,\n\t\t\t\t\t(finalMinY + finalMaxY) * .5,\n\t\t\t\t\t(finalMinZ + finalMaxZ) * .5\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tfinalMaxX - finalMinX,\n\t\t\t\t\tfinalMaxY - finalMinY,\n\t\t\t\t\tfinalMaxZ - finalMinZ\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: Math.hypot(finalMaxX - finalMinX, finalMaxY - finalMinY, finalMaxZ - finalMinZ) * .5\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t* Loads a PLY file synchronously or asynchronously from a path or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return PlyLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\treturn PlyLoader.parse(buf, options);\n\t\t}\n\t\treturn PlyLoader.parse(srcOrData, options);\n\t}\n};\nfunction parsePLY(data, options = {}) {\n\treturn PlyLoader.parse(data, options);\n}\nfunction loadPLY(srcOrData, options = {}) {\n\treturn PlyLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/loaders/pose.ts\n/**\n* Poses a model's scene graph (glTF semantics): samples an animation clip's\n* translation / rotation / scale tracks at a time, composes the node\n* hierarchy into model-space matrices, and turns a skin's joints into the\n* joint matrices the mesh shader blends (joint world × inverse bind).\n*/\n/** Joints per skin the mesh shader holds (mesh3d.wgsl jointMatrices). */\nconst MAX_JOINTS = 128;\n/** Column-major translate · rotate(quaternion) · scale. */\nfunction trsMatrix(t, q, s) {\n\tconst [x, y, z, w] = q;\n\tconst xx = x * x;\n\tconst yy = y * y;\n\tconst zz = z * z;\n\tconst xy = x * y;\n\tconst xz = x * z;\n\tconst yz = y * z;\n\tconst wx = w * x;\n\tconst wy = w * y;\n\tconst wz = w * z;\n\treturn [\n\t\t(1 - 2 * (yy + zz)) * s[0],\n\t\t2 * (xy + wz) * s[0],\n\t\t2 * (xz - wy) * s[0],\n\t\t0,\n\t\t2 * (xy - wz) * s[1],\n\t\t(1 - 2 * (xx + zz)) * s[1],\n\t\t2 * (yz + wx) * s[1],\n\t\t0,\n\t\t2 * (xz + wy) * s[2],\n\t\t2 * (yz - wx) * s[2],\n\t\t(1 - 2 * (xx + yy)) * s[2],\n\t\t0,\n\t\tt[0],\n\t\tt[1],\n\t\tt[2],\n\t\t1\n\t];\n}\nfunction normalizeQuat(q) {\n\tconst len = Math.hypot(q[0], q[1], q[2], q[3]) || 1;\n\treturn [\n\t\tq[0] / len,\n\t\tq[1] / len,\n\t\tq[2] / len,\n\t\tq[3] / len\n\t];\n}\nfunction slerp(a, b, t) {\n\tlet cos = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n\tconst sign = cos < 0 ? -1 : 1;\n\tcos *= sign;\n\tif (cos > .9995) return normalizeQuat([\n\t\ta[0] + (sign * b[0] - a[0]) * t,\n\t\ta[1] + (sign * b[1] - a[1]) * t,\n\t\ta[2] + (sign * b[2] - a[2]) * t,\n\t\ta[3] + (sign * b[3] - a[3]) * t\n\t]);\n\tconst theta = Math.acos(cos);\n\tconst sin = Math.sin(theta);\n\tconst wa = Math.sin((1 - t) * theta) / sin;\n\tconst wb = sign * Math.sin(t * theta) / sin;\n\treturn [\n\t\ta[0] * wa + b[0] * wb,\n\t\ta[1] * wa + b[1] * wb,\n\t\ta[2] * wa + b[2] * wb,\n\t\ta[3] * wa + b[3] * wb\n\t];\n}\n/** Index of the last keyframe at or before `time` (binary search). */\nfunction keyBefore(times, time$2) {\n\tlet lo = 0;\n\tlet hi = times.length - 1;\n\twhile (lo < hi) {\n\t\tconst mid = lo + hi + 1 >> 1;\n\t\tif ((times[mid] ?? 0) <= time$2) lo = mid;\n\t\telse hi = mid - 1;\n\t}\n\treturn lo;\n}\n/** Element `k` (of `size` components) of a track's values; cubic tracks store [in, value, out] triples. */\nfunction valueAt(values, k, size, cubic, part = 1) {\n\tconst at = cubic ? (k * 3 + part) * size : k * size;\n\treturn Array.from(values.subarray(at, at + size));\n}\nfunction sampleChannel(track, values, size, time$2) {\n\tconst { times } = track;\n\tconst cubic = track.interpolation === \"cubic\";\n\tconst last = times.length - 1;\n\tif (time$2 <= (times[0] ?? 0)) return valueAt(values, 0, size, cubic);\n\tif (time$2 >= (times[last] ?? 0)) return valueAt(values, last, size, cubic);\n\tconst k = keyBefore(times, time$2);\n\tif (track.interpolation === \"step\") return valueAt(values, k, size, cubic);\n\tconst t0 = times[k] ?? 0;\n\tconst dt = (times[k + 1] ?? t0) - t0;\n\tconst u = dt > 0 ? (time$2 - t0) / dt : 0;\n\tconst a = valueAt(values, k, size, cubic);\n\tconst b = valueAt(values, k + 1, size, cubic);\n\tif (cubic) {\n\t\tconst outA = valueAt(values, k, size, true, 2);\n\t\tconst inB = valueAt(values, k + 1, size, true, 0);\n\t\tconst u2 = u * u;\n\t\tconst u3 = u2 * u;\n\t\tconst out = a.map((p0, i) => (2 * u3 - 3 * u2 + 1) * p0 + (u3 - 2 * u2 + u) * dt * (outA[i] ?? 0) + (-2 * u3 + 3 * u2) * (b[i] ?? 0) + (u3 - u2) * dt * (inB[i] ?? 0));\n\t\treturn size === 4 ? normalizeQuat(out) : out;\n\t}\n\tif (size === 4) return slerp(a, b, u);\n\treturn a.map((v, i) => v + ((b[i] ?? v) - v) * u);\n}\n/** Each node's local matrix with the clip's tracks applied at `time` (seconds). */\nfunction localMatrices(nodes, clip, time$2) {\n\tconst t = nodes.map((n) => [...n.translation]);\n\tconst r = nodes.map((n) => [...n.rotation]);\n\tconst s = nodes.map((n) => [...n.scale]);\n\tconst byName = new Map(nodes.map((n, i) => [n.name, i]));\n\tfor (const track of clip?.tracks ?? []) {\n\t\tconst i = track.node ?? byName.get(track.nodeName);\n\t\tif (i === void 0 || !track.times.length) continue;\n\t\tif (track.translations) t[i] = sampleChannel(track, track.translations, 3, time$2);\n\t\tif (track.rotations) r[i] = sampleChannel(track, track.rotations, 4, time$2);\n\t\tif (track.scales) s[i] = sampleChannel(track, track.scales, 3, time$2);\n\t}\n\treturn nodes.map((n, i) => n.matrix ?? trsMatrix(t[i], r[i], s[i]));\n}\n/**\n* Model-space matrix of every node, posed by `clip` at `time` seconds (the\n* rest pose without a clip). Parents may follow their children in the list.\n*/\nfunction poseNodes(model, clip, time$2) {\n\tconst nodes = model.nodes ?? [];\n\tconst local = localMatrices(nodes, clip, time$2);\n\tconst world = new Array(nodes.length);\n\tconst resolve = (i) => {\n\t\tconst done = world[i];\n\t\tif (done) return done;\n\t\tconst parent = nodes[i].parent;\n\t\tconst m = parent < 0 ? local[i] : Matrix4Math.multiply(resolve(parent), local[i]);\n\t\tworld[i] = m;\n\t\treturn m;\n\t};\n\treturn nodes.map((_, i) => resolve(i));\n}\n/** The joint matrices of one skin for a posed scene graph, padded with identity to MAX_JOINTS. */\nfunction jointMatrices(model, skinIndex, world) {\n\tconst skin = model.skins?.[skinIndex];\n\tif (!skin) throw new Error(`model has no skin ${skinIndex}`);\n\tconst out = new Float32Array(MAX_JOINTS * 16);\n\tfor (let j = 0; j < MAX_JOINTS; j++) {\n\t\tconst node = skin.joints[j];\n\t\tif (node === void 0) {\n\t\t\tout.set(Matrix4Math.identity(), j * 16);\n\t\t\tcontinue;\n\t\t}\n\t\tconst ibm = Array.from(skin.inverseBindMatrices.subarray(j * 16, j * 16 + 16));\n\t\tout.set(Matrix4Math.multiply(world[node], ibm), j * 16);\n\t}\n\treturn out;\n}\n\n//#endregion\n//#region src/loaders/gltf-loader.ts\nconst COMPONENTS = {\n\tSCALAR: 1,\n\tVEC2: 2,\n\tVEC3: 3,\n\tVEC4: 4,\n\tMAT2: 4,\n\tMAT3: 9,\n\tMAT4: 16\n};\nconst COMPONENT_BYTES = {\n\t5120: 1,\n\t5121: 1,\n\t5122: 2,\n\t5123: 2,\n\t5125: 4,\n\t5126: 4\n};\n/** Reads one component; normalized integers map to [0, 1] (unsigned) or [-1, 1] (signed). */\nfunction componentReader(componentType, normalized = false) {\n\tswitch (componentType) {\n\t\tcase 5120: return normalized ? (dv, at) => Math.max(dv.getInt8(at) / 127, -1) : (dv, at) => dv.getInt8(at);\n\t\tcase 5121: return normalized ? (dv, at) => dv.getUint8(at) / 255 : (dv, at) => dv.getUint8(at);\n\t\tcase 5122: return normalized ? (dv, at) => Math.max(dv.getInt16(at, true) / 32767, -1) : (dv, at) => dv.getInt16(at, true);\n\t\tcase 5123: return normalized ? (dv, at) => dv.getUint16(at, true) / 65535 : (dv, at) => dv.getUint16(at, true);\n\t\tcase 5125: return (dv, at) => dv.getUint32(at, true);\n\t\tdefault: return (dv, at) => dv.getFloat32(at, true);\n\t}\n}\nconst GLB_MAGIC = 1179937895;\nconst CHUNK_TYPE_JSON = 1313821514;\nconst CHUNK_TYPE_BIN = 5130562;\nvar GltfLoader = class GltfLoader {\n\t/**\n\t* Checks if the given buffer starts with the GLB binary container magic bytes.\n\t*/\n\tstatic isGlb(buffer) {\n\t\tconst bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (bytes.length < 12) return false;\n\t\treturn new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(0, true) === GLB_MAGIC;\n\t}\n\t/**\n\t* Parses glTF or GLB data into Model3DData.\n\t*/\n\tstatic parse(data, options = {}, basePath) {\n\t\tlet doc;\n\t\tconst binaryBuffers = [];\n\t\tif (typeof data === \"string\") try {\n\t\t\tdoc = JSON.parse(data);\n\t\t} catch (err) {\n\t\t\tthrow new Error(`Failed to parse glTF JSON: ${String(err)}`);\n\t\t}\n\t\telse {\n\t\t\tconst bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\t\tif (GltfLoader.isGlb(bytes)) {\n\t\t\t\tconst glb = GltfLoader.unpackGlb(bytes);\n\t\t\t\tdoc = glb.doc;\n\t\t\t\tif (glb.binBuffer) binaryBuffers.push(glb.binBuffer);\n\t\t\t} else {\n\t\t\t\tconst text = new TextDecoder(\"utf-8\").decode(bytes);\n\t\t\t\tdoc = JSON.parse(text);\n\t\t\t}\n\t\t}\n\t\tif (doc.buffers) for (let i = 0; i < doc.buffers.length; i++) {\n\t\t\tif (i === 0 && binaryBuffers.length > 0) continue;\n\t\t\tconst buf = doc.buffers[i];\n\t\t\tif (buf.uri) {\n\t\t\t\tif (buf.uri.startsWith(\"data:\")) {\n\t\t\t\t\tconst base64Index = buf.uri.indexOf(\"base64,\");\n\t\t\t\t\tif (base64Index !== -1) {\n\t\t\t\t\t\tconst b64 = buf.uri.substring(base64Index + 7);\n\t\t\t\t\t\tconst rawBuf = Buffer.from(b64, \"base64\");\n\t\t\t\t\t\tbinaryBuffers[i] = new Uint8Array(rawBuf.buffer, rawBuf.byteOffset, rawBuf.byteLength);\n\t\t\t\t\t}\n\t\t\t\t} else if (basePath) {\n\t\t\t\t\tconst resolved = path.isAbsolute(buf.uri) ? buf.uri : path.join(basePath, buf.uri);\n\t\t\t\t\tif (fs.existsSync(resolved)) {\n\t\t\t\t\t\tconst fileBuf = fs.readFileSync(resolved);\n\t\t\t\t\t\tbinaryBuffers[i] = new Uint8Array(fileBuf.buffer, fileBuf.byteOffset, fileBuf.byteLength);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn GltfLoader.buildModel(doc, binaryBuffers, options, basePath);\n\t}\n\tstatic unpackGlb(bytes) {\n\t\tconst view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\t\tconst magic = view.getUint32(0, true);\n\t\tconst totalLength = view.getUint32(8, true);\n\t\tif (magic !== GLB_MAGIC) throw new Error(\"Invalid GLB header: magic mismatch\");\n\t\tlet offset = 12;\n\t\tlet doc = null;\n\t\tlet binBuffer;\n\t\twhile (offset < totalLength && offset < bytes.byteLength) {\n\t\t\tconst chunkLength = view.getUint32(offset, true);\n\t\t\tconst chunkType = view.getUint32(offset + 4, true);\n\t\t\toffset += 8;\n\t\t\tconst chunkData = bytes.subarray(offset, offset + chunkLength);\n\t\t\toffset += chunkLength;\n\t\t\tif (chunkType === CHUNK_TYPE_JSON) {\n\t\t\t\tconst jsonStr = new TextDecoder(\"utf-8\").decode(chunkData);\n\t\t\t\tdoc = JSON.parse(jsonStr);\n\t\t\t} else if (chunkType === CHUNK_TYPE_BIN) binBuffer = chunkData;\n\t\t}\n\t\tif (!doc) throw new Error(\"Invalid GLB: JSON chunk not found\");\n\t\treturn {\n\t\t\tdoc,\n\t\t\tbinBuffer\n\t\t};\n\t}\n\t/**\n\t* Reads an accessor as floats: honours interleaved views (byteStride) and\n\t* normalized integer components. Integer data that is not normalized\n\t* (joint indices) keeps its values.\n\t*/\n\tstatic readFloats(doc, binaryBuffers, accessorIndex) {\n\t\tconst accessor = doc.accessors?.[accessorIndex];\n\t\tif (!accessor) throw new Error(`Accessor ${accessorIndex} not found`);\n\t\tconst itemSize = COMPONENTS[accessor.type] ?? 1;\n\t\tconst out = new Float32Array(accessor.count * itemSize);\n\t\tif (accessor.bufferView === void 0) return {\n\t\t\tdata: out,\n\t\t\titemSize,\n\t\t\tcount: accessor.count\n\t\t};\n\t\tconst view = doc.bufferViews?.[accessor.bufferView];\n\t\tif (!view) throw new Error(`BufferView ${accessor.bufferView} not found`);\n\t\tconst raw = binaryBuffers[view.buffer];\n\t\tif (!raw) throw new Error(`Binary buffer ${view.buffer} not loaded`);\n\t\tconst bytes = COMPONENT_BYTES[accessor.componentType] ?? 4;\n\t\tconst stride = view.byteStride ?? bytes * itemSize;\n\t\tconst dv = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);\n\t\tconst base = (view.byteOffset ?? 0) + (accessor.byteOffset ?? 0);\n\t\tconst read = componentReader(accessor.componentType, accessor.normalized);\n\t\tfor (let i = 0; i < accessor.count; i++) for (let c = 0; c < itemSize; c++) out[i * itemSize + c] = read(dv, base + i * stride + c * bytes);\n\t\treturn {\n\t\t\tdata: out,\n\t\t\titemSize,\n\t\t\tcount: accessor.count\n\t\t};\n\t}\n\tstatic readIndices(doc, binaryBuffers, accessorIndex) {\n\t\tconst { data } = GltfLoader.readFloats(doc, binaryBuffers, accessorIndex);\n\t\treturn data.reduce((m, v) => v > m ? v : m, 0) > 65535 ? Uint32Array.from(data) : Uint16Array.from(data);\n\t}\n\t/** An image's encoded bytes, from the binary chunk, a data URI or a file next to the model. */\n\tstatic imageBytes(doc, binaryBuffers, imageIndex, basePath) {\n\t\tconst image = doc.images?.[imageIndex];\n\t\tif (!image) return void 0;\n\t\tif (image.bufferView !== void 0) {\n\t\t\tconst view = doc.bufferViews?.[image.bufferView];\n\t\t\tconst raw = view ? binaryBuffers[view.buffer] : void 0;\n\t\t\tif (!view || !raw) return void 0;\n\t\t\tconst start = view.byteOffset ?? 0;\n\t\t\treturn {\n\t\t\t\tbytes: raw.subarray(start, start + view.byteLength),\n\t\t\t\tmime: image.mimeType ?? \"image/png\"\n\t\t\t};\n\t\t}\n\t\tif (!image.uri) return void 0;\n\t\tif (image.uri.startsWith(\"data:\")) {\n\t\t\tconst comma = image.uri.indexOf(\",\");\n\t\t\tconst mime = image.uri.slice(5, image.uri.indexOf(\";\"));\n\t\t\treturn {\n\t\t\t\tbytes: new Uint8Array(Buffer.from(image.uri.slice(comma + 1), \"base64\")),\n\t\t\t\tmime\n\t\t\t};\n\t\t}\n\t\tif (!basePath) return void 0;\n\t\tconst file = path.isAbsolute(image.uri) ? image.uri : path.join(basePath, decodeURIComponent(image.uri));\n\t\tif (!fs.existsSync(file)) return void 0;\n\t\tconst ext = path.extname(file).toLowerCase();\n\t\treturn {\n\t\t\tbytes: new Uint8Array(fs.readFileSync(file)),\n\t\t\tmime: image.mimeType ?? (ext === \".png\" ? \"image/png\" : \"image/jpeg\")\n\t\t};\n\t}\n\tstatic buildMaterial(doc, binaryBuffers, mat, name, basePath) {\n\t\tconst pbr = mat.pbrMetallicRoughness;\n\t\tconst baseColor = pbr?.baseColorFactor ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tconst material = {\n\t\t\tname,\n\t\t\tdiffuseColor: baseColor,\n\t\t\troughness: pbr?.roughnessFactor ?? .5,\n\t\t\tmetallic: pbr?.metallicFactor ?? 0,\n\t\t\tshininess: 32 * (1 - (pbr?.roughnessFactor ?? .5)),\n\t\t\topacity: baseColor[3] ?? 1,\n\t\t\ttwoSided: mat.doubleSided ?? true,\n\t\t\talphaMode: mat.alphaMode === \"MASK\" ? \"mask\" : mat.alphaMode === \"BLEND\" ? \"blend\" : \"opaque\",\n\t\t\talphaCutoff: mat.alphaMode === \"MASK\" ? mat.alphaCutoff ?? .5 : 0\n\t\t};\n\t\tconst mtoon = mat.extensions?.VRMC_materials_mtoon;\n\t\tif (mtoon) {\n\t\t\tmaterial.shading = \"toon\";\n\t\t\tmaterial.shadeColor = mtoon.shadeColorFactor ?? [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t];\n\t\t} else if (mat.extensions?.KHR_materials_unlit) material.shading = \"unlit\";\n\t\tconst texRef = pbr?.baseColorTexture;\n\t\tconst texture = texRef ? doc.textures?.[texRef.index] : void 0;\n\t\tif (texture?.source !== void 0) {\n\t\t\tconst image = GltfLoader.imageBytes(doc, binaryBuffers, texture.source, basePath);\n\t\t\tif (image) {\n\t\t\t\tmaterial.diffuseTextureBuffer = image.bytes;\n\t\t\t\tmaterial.diffuseTextureMime = image.mime;\n\t\t\t\tconst wrap = texture.sampler !== void 0 ? doc.samplers?.[texture.sampler]?.wrapS : void 0;\n\t\t\t\tmaterial.textureWrap = wrap === 33071 ? \"clamp\" : wrap === 33648 ? \"mirror\" : \"repeat\";\n\t\t\t}\n\t\t}\n\t\treturn material;\n\t}\n\tstatic buildNodes(doc) {\n\t\tconst nodes = (doc.nodes ?? []).map((n, i) => ({\n\t\t\tname: n.name ?? `node_${i}`,\n\t\t\tparent: -1,\n\t\t\ttranslation: n.translation ?? [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t],\n\t\t\trotation: n.rotation ?? [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t1\n\t\t\t],\n\t\t\tscale: n.scale ?? [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t],\n\t\t\tmatrix: n.matrix ? n.matrix : void 0\n\t\t}));\n\t\t(doc.nodes ?? []).forEach((n, i) => {\n\t\t\tfor (const c of n.children ?? []) {\n\t\t\t\tconst child = nodes[c];\n\t\t\t\tif (child) child.parent = i;\n\t\t\t}\n\t\t});\n\t\treturn nodes;\n\t}\n\tstatic buildAnimations(doc, binaryBuffers, nodes) {\n\t\treturn (doc.animations ?? []).map((animDef, animIdx) => {\n\t\t\tconst tracks = [];\n\t\t\tlet duration$2 = 0;\n\t\t\tfor (const chan of animDef.channels) {\n\t\t\t\tconst sampler = animDef.samplers[chan.sampler];\n\t\t\t\tconst node = chan.target.node;\n\t\t\t\tif (!sampler || node === void 0 || chan.target.path === \"weights\") continue;\n\t\t\t\tconst times = GltfLoader.readFloats(doc, binaryBuffers, sampler.input).data;\n\t\t\t\tconst values = GltfLoader.readFloats(doc, binaryBuffers, sampler.output).data;\n\t\t\t\tduration$2 = Math.max(duration$2, times[times.length - 1] ?? 0);\n\t\t\t\tconst track = {\n\t\t\t\t\tnodeName: nodes[node]?.name ?? `node_${node}`,\n\t\t\t\t\tnode,\n\t\t\t\t\ttimes,\n\t\t\t\t\tinterpolation: sampler.interpolation === \"STEP\" ? \"step\" : sampler.interpolation === \"CUBICSPLINE\" ? \"cubic\" : \"linear\"\n\t\t\t\t};\n\t\t\t\tif (chan.target.path === \"translation\") track.translations = values;\n\t\t\t\telse if (chan.target.path === \"rotation\") track.rotations = values;\n\t\t\t\telse track.scales = values;\n\t\t\t\ttracks.push(track);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tname: animDef.name ?? `Animation_${animIdx}`,\n\t\t\t\tduration: duration$2 > 0 ? duration$2 : 1,\n\t\t\t\tfps: 30,\n\t\t\t\ttracks\n\t\t\t};\n\t\t});\n\t}\n\tstatic buildModel(doc, binaryBuffers, options, basePath) {\n\t\tconst materialKeys = (doc.materials ?? []).map((mat, idx, all) => {\n\t\t\tconst name = mat.name ?? `material_${idx}`;\n\t\t\treturn all.findIndex((m, j) => (m.name ?? `material_${j}`) === name) === idx ? name : `${name}#${idx}`;\n\t\t});\n\t\tconst materials = {};\n\t\t(doc.materials ?? []).forEach((mat, idx) => {\n\t\t\tconst key = materialKeys[idx];\n\t\t\tmaterials[key] = GltfLoader.buildMaterial(doc, binaryBuffers, mat, key, basePath);\n\t\t});\n\t\tconst nodes = GltfLoader.buildNodes(doc);\n\t\tconst skins = (doc.skins ?? []).map((skin) => ({\n\t\t\tjoints: skin.joints,\n\t\t\tinverseBindMatrices: skin.inverseBindMatrices !== void 0 ? GltfLoader.readFloats(doc, binaryBuffers, skin.inverseBindMatrices).data : Float32Array.from(skin.joints.flatMap(() => Matrix4Math.identity()))\n\t\t}));\n\t\tconst animations = GltfLoader.buildAnimations(doc, binaryBuffers, nodes);\n\t\tconst placed = (doc.nodes ?? []).flatMap((n, node) => n.mesh !== void 0 ? [{\n\t\t\tmesh: n.mesh,\n\t\t\tnode,\n\t\t\tskin: n.skin\n\t\t}] : []);\n\t\tconst instances = placed.length > 0 ? placed : (doc.meshes ?? []).map((_, mesh) => ({ mesh }));\n\t\tconst model = {\n\t\t\tname: \"glTF_Model\",\n\t\t\tmeshes: [],\n\t\t\tmaterials,\n\t\t\tnodes,\n\t\t\tskins,\n\t\t\tanimations,\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: 0\n\t\t\t}\n\t\t};\n\t\tconst rest = poseNodes(model, void 0, 0);\n\t\tlet minX = Infinity, minY = Infinity, minZ = Infinity;\n\t\tlet maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;\n\t\tconst grow = (x, y, z) => {\n\t\t\tif (x < minX) minX = x;\n\t\t\tif (x > maxX) maxX = x;\n\t\t\tif (y < minY) minY = y;\n\t\t\tif (y > maxY) maxY = y;\n\t\t\tif (z < minZ) minZ = z;\n\t\t\tif (z > maxZ) maxZ = z;\n\t\t};\n\t\tfor (const inst of instances) {\n\t\t\tconst meshDef = doc.meshes?.[inst.mesh];\n\t\t\tif (!meshDef) continue;\n\t\t\tmeshDef.primitives.forEach((prim, primIdx) => {\n\t\t\t\tif (prim.attributes.POSITION === void 0) return;\n\t\t\t\tif (prim.mode !== void 0 && prim.mode !== 4) return;\n\t\t\t\tconst read = (acc) => acc === void 0 ? void 0 : GltfLoader.readFloats(doc, binaryBuffers, acc);\n\t\t\t\tconst pos = read(prim.attributes.POSITION);\n\t\t\t\tconst numVerts = pos.count;\n\t\t\t\tconst colors = read(prim.attributes.COLOR_0);\n\t\t\t\tlet rgba;\n\t\t\t\tif (colors) {\n\t\t\t\t\trgba = new Float32Array(numVerts * 4).fill(1);\n\t\t\t\t\tfor (let v = 0; v < numVerts; v++) for (let c = 0; c < colors.itemSize; c++) rgba[v * 4 + c] = colors.data[v * colors.itemSize + c] ?? 1;\n\t\t\t\t}\n\t\t\t\tlet indices;\n\t\t\t\tif (prim.indices !== void 0) indices = GltfLoader.readIndices(doc, binaryBuffers, prim.indices);\n\t\t\t\telse {\n\t\t\t\t\tindices = numVerts > 65535 ? new Uint32Array(numVerts) : new Uint16Array(numVerts);\n\t\t\t\t\tfor (let i = 0; i < numVerts; i++) indices[i] = i;\n\t\t\t\t}\n\t\t\t\tconst skinned = inst.skin !== void 0 && prim.attributes.JOINTS_0 !== void 0;\n\t\t\t\tconst place = !skinned && inst.node !== void 0 ? rest[inst.node] : void 0;\n\t\t\t\tfor (let i = 0; i < numVerts; i++) {\n\t\t\t\t\tconst x = pos.data[i * 3];\n\t\t\t\t\tconst y = pos.data[i * 3 + 1];\n\t\t\t\t\tconst z = pos.data[i * 3 + 2];\n\t\t\t\t\tif (place) {\n\t\t\t\t\t\tconst p = Matrix4Math.projectPoint(place, [\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tz\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tgrow(p[0], p[1], p[2]);\n\t\t\t\t\t} else grow(x, y, z);\n\t\t\t\t}\n\t\t\t\tmodel.meshes.push({\n\t\t\t\t\tid: `gltf_mesh_${inst.mesh}_${primIdx}${inst.node !== void 0 ? `_n${inst.node}` : \"\"}`,\n\t\t\t\t\tname: meshDef.name ?? `Mesh_${inst.mesh}`,\n\t\t\t\t\tpositions: pos.data,\n\t\t\t\t\tnormals: read(prim.attributes.NORMAL)?.data ?? new Float32Array(numVerts * 3),\n\t\t\t\t\tuvs: read(prim.attributes.TEXCOORD_0)?.data ?? new Float32Array(numVerts * 2),\n\t\t\t\t\tcolors: rgba,\n\t\t\t\t\tjointIndices: skinned ? read(prim.attributes.JOINTS_0)?.data : void 0,\n\t\t\t\t\tjointWeights: skinned ? read(prim.attributes.WEIGHTS_0)?.data : void 0,\n\t\t\t\t\tindices,\n\t\t\t\t\tmaterialName: prim.material !== void 0 ? materialKeys[prim.material] : void 0,\n\t\t\t\t\tnode: inst.node,\n\t\t\t\t\tskin: skinned ? inst.skin : void 0\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tfor (const skin of skins) if (skin.joints.length > MAX_JOINTS) throw new Error(`glTF skin has ${skin.joints.length} joints; the mesh shader holds ${MAX_JOINTS}`);\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = minY = minZ = 0;\n\t\t\tmaxX = maxY = maxZ = 0;\n\t\t}\n\t\tconst maxDimension = Math.max(maxX - minX, maxY - minY, maxZ - minZ, 1e-4);\n\t\tconst fit = options.normalizeSize && options.normalizeSize > 0 ? options.normalizeSize / maxDimension : 1;\n\t\tconst extra = typeof options.scale === \"number\" ? [\n\t\t\toptions.scale,\n\t\t\toptions.scale,\n\t\t\toptions.scale\n\t\t] : options.scale ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tconst scale = [\n\t\t\tfit * extra[0],\n\t\t\tfit * extra[1],\n\t\t\tfit * extra[2]\n\t\t];\n\t\tconst offset = options.center ? [\n\t\t\t(minX + maxX) * .5,\n\t\t\t(minY + maxY) * .5,\n\t\t\t(minZ + maxZ) * .5\n\t\t] : [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tmodel.rootTransform = Matrix4Math.multiply(Matrix4Math.scale(scale[0], scale[1], scale[2]), Matrix4Math.translate(-offset[0], -offset[1], -offset[2]));\n\t\tconst lo = [\n\t\t\t(minX - offset[0]) * scale[0],\n\t\t\t(minY - offset[1]) * scale[1],\n\t\t\t(minZ - offset[2]) * scale[2]\n\t\t];\n\t\tconst hi = [\n\t\t\t(maxX - offset[0]) * scale[0],\n\t\t\t(maxY - offset[1]) * scale[1],\n\t\t\t(maxZ - offset[2]) * scale[2]\n\t\t];\n\t\tmodel.bounds = {\n\t\t\tmin: lo,\n\t\t\tmax: hi,\n\t\t\tcenter: [\n\t\t\t\t(lo[0] + hi[0]) * .5,\n\t\t\t\t(lo[1] + hi[1]) * .5,\n\t\t\t\t(lo[2] + hi[2]) * .5\n\t\t\t],\n\t\t\tsize: [\n\t\t\t\thi[0] - lo[0],\n\t\t\t\thi[1] - lo[1],\n\t\t\t\thi[2] - lo[2]\n\t\t\t],\n\t\t\tboundingSphereRadius: Math.hypot(hi[0] - lo[0], hi[1] - lo[1], hi[2] - lo[2]) * .5\n\t\t};\n\t\treturn model;\n\t}\n\t/**\n\t* Loads a glTF / GLB file synchronously or asynchronously from a path or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return GltfLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\tconst basePath = path.dirname(cleanPath);\n\t\t\treturn GltfLoader.parse(buf, options, basePath);\n\t\t}\n\t\treturn GltfLoader.parse(srcOrData, options);\n\t}\n};\nfunction parseGLTF(data, options = {}) {\n\treturn GltfLoader.parse(data, options);\n}\nfunction loadGLTF(srcOrData, options = {}) {\n\treturn GltfLoader.load(srcOrData, options);\n}\nfunction parseGLB(data, options = {}) {\n\treturn GltfLoader.parse(data, options);\n}\nfunction loadGLB(srcOrData, options = {}) {\n\treturn GltfLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/loaders/vox-loader.ts\nconst DEFAULT_PALETTE = [[\n\t0,\n\t0,\n\t0,\n\t0\n], ...Array.from({ length: 255 }, (_, i) => {\n\tconst val = (i + 1) / 256;\n\treturn [\n\t\tval,\n\t\tval,\n\t\tval,\n\t\t1\n\t];\n})];\nvar VoxLoader = class VoxLoader {\n\t/**\n\t* Checks if buffer is MagicaVoxel VOX format.\n\t*/\n\tstatic isVox(buffer) {\n\t\tconst bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (bytes.length < 8) return false;\n\t\treturn new TextDecoder(\"ascii\").decode(bytes.subarray(0, 4)) === \"VOX \";\n\t}\n\t/**\n\t* Parses MagicaVoxel VOX buffer into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tconst bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\tconst view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\t\tif (new TextDecoder(\"ascii\").decode(bytes.subarray(0, 4)) !== \"VOX \") throw new Error(\"Invalid VOX file: magic mismatch\");\n\t\tlet offset = 8;\n\t\tlet sizeX = 16, sizeY = 16, sizeZ = 16;\n\t\tconst voxels = [];\n\t\tconst palette = [...DEFAULT_PALETTE];\n\t\twhile (offset + 12 <= bytes.byteLength) {\n\t\t\tconst chunkId = new TextDecoder(\"ascii\").decode(bytes.subarray(offset, offset + 4));\n\t\t\tconst contentSize = view.getUint32(offset + 4, true);\n\t\t\toffset += 12;\n\t\t\tconst chunkDataOffset = offset;\n\t\t\tif (chunkId === \"SIZE\") {\n\t\t\t\tsizeX = view.getUint32(chunkDataOffset, true);\n\t\t\t\tsizeY = view.getUint32(chunkDataOffset + 4, true);\n\t\t\t\tsizeZ = view.getUint32(chunkDataOffset + 8, true);\n\t\t\t} else if (chunkId === \"XYZI\") {\n\t\t\t\tconst numVoxels = view.getUint32(chunkDataOffset, true);\n\t\t\t\tlet vOffset = chunkDataOffset + 4;\n\t\t\t\tfor (let i = 0; i < numVoxels; i++) {\n\t\t\t\t\tif (vOffset + 4 > bytes.byteLength) break;\n\t\t\t\t\tconst x = view.getUint8(vOffset);\n\t\t\t\t\tconst y = view.getUint8(vOffset + 1);\n\t\t\t\t\tconst z = view.getUint8(vOffset + 2);\n\t\t\t\t\tconst colorIndex = view.getUint8(vOffset + 3);\n\t\t\t\t\tvOffset += 4;\n\t\t\t\t\tvoxels.push({\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t\tz,\n\t\t\t\t\t\tcolorIndex\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (chunkId === \"RGBA\") for (let i = 0; i < 256; i++) {\n\t\t\t\tconst cOffset = chunkDataOffset + i * 4;\n\t\t\t\tif (cOffset + 4 > bytes.byteLength) break;\n\t\t\t\tconst r = view.getUint8(cOffset) / 255;\n\t\t\t\tconst g$1 = view.getUint8(cOffset + 1) / 255;\n\t\t\t\tconst b = view.getUint8(cOffset + 2) / 255;\n\t\t\t\tconst a = view.getUint8(cOffset + 3) / 255;\n\t\t\t\tconst paletteIdx = i === 255 ? 0 : i + 1;\n\t\t\t\tpalette[paletteIdx] = [\n\t\t\t\t\tr,\n\t\t\t\t\tg$1,\n\t\t\t\t\tb,\n\t\t\t\t\ta\n\t\t\t\t];\n\t\t\t}\n\t\t\toffset += contentSize;\n\t\t}\n\t\treturn VoxLoader.buildModel(voxels, palette, sizeX, sizeY, sizeZ, options);\n\t}\n\tstatic buildModel(voxels, palette, _sizeX, _sizeY, _sizeZ, options) {\n\t\tconst voxelSet = /* @__PURE__ */ new Set();\n\t\tvoxels.forEach((v) => voxelSet.add(`${v.x},${v.y},${v.z}`));\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawColors = [];\n\t\tconst rawUvs = [];\n\t\tconst rawIndices = [];\n\t\tconst addQuad = (p0, p1, p2, p3, normal, color) => {\n\t\t\tconst startIdx = rawPositions.length / 3;\n\t\t\trawPositions.push(...p0, ...p1, ...p2, ...p3);\n\t\t\trawNormals.push(...normal, ...normal, ...normal, ...normal);\n\t\t\trawColors.push(...color, ...color, ...color, ...color);\n\t\t\trawUvs.push(0, 0, 1, 0, 1, 1, 0, 1);\n\t\t\trawIndices.push(startIdx, startIdx + 1, startIdx + 2, startIdx, startIdx + 2, startIdx + 3);\n\t\t};\n\t\tfor (const v of voxels) {\n\t\t\tconst { x, y, z, colorIndex } = v;\n\t\t\tconst color = palette[colorIndex] ?? [\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t1\n\t\t\t];\n\t\t\tconst vx = x;\n\t\t\tconst vy = -z;\n\t\t\tconst vz = y;\n\t\t\tif (!voxelSet.has(`${x + 1},${y},${z}`)) addQuad([\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x - 1},${y},${z}`)) addQuad([\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\t-1,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x},${y},${z + 1}`)) addQuad([\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\t0,\n\t\t\t\t-1,\n\t\t\t\t0\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x},${y},${z - 1}`)) addQuad([\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\t0,\n\t\t\t\t1,\n\t\t\t\t0\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x},${y + 1},${z}`)) addQuad([\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz + 1\n\t\t\t], [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t1\n\t\t\t], color);\n\t\t\tif (!voxelSet.has(`${x},${y - 1},${z}`)) addQuad([\n\t\t\t\tvx,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy - 1,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\tvx + 1,\n\t\t\t\tvy,\n\t\t\t\tvz\n\t\t\t], [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t-1\n\t\t\t], color);\n\t\t}\n\t\tlet minX = Infinity, minY = Infinity, minZ = Infinity;\n\t\tlet maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;\n\t\tfor (let i = 0; i < rawPositions.length; i += 3) {\n\t\t\tconst x = rawPositions[i];\n\t\t\tconst y = rawPositions[i + 1];\n\t\t\tconst z = rawPositions[i + 2];\n\t\t\tif (x < minX) minX = x;\n\t\t\tif (x > maxX) maxX = x;\n\t\t\tif (y < minY) minY = y;\n\t\t\tif (y > maxY) maxY = y;\n\t\t\tif (z < minZ) minZ = z;\n\t\t\tif (z > maxZ) maxZ = z;\n\t\t}\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = minY = minZ = 0;\n\t\t\tmaxX = maxY = maxZ = 0;\n\t\t}\n\t\tconst centerX = (minX + maxX) * .5;\n\t\tconst centerY = (minY + maxY) * .5;\n\t\tconst centerZ = (minZ + maxZ) * .5;\n\t\tconst sizeBoxX = maxX - minX;\n\t\tconst sizeBoxY = maxY - minY;\n\t\tconst sizeBoxZ = maxZ - minZ;\n\t\tconst maxDimension = Math.max(sizeBoxX, sizeBoxY, sizeBoxZ, 1e-4);\n\t\tlet scaleMultiplier = 1;\n\t\tif (options.normalizeSize && options.normalizeSize > 0) scaleMultiplier = options.normalizeSize / maxDimension;\n\t\tlet scaleX = scaleMultiplier;\n\t\tlet scaleY = scaleMultiplier;\n\t\tlet scaleZ = scaleMultiplier;\n\t\tif (typeof options.scale === \"number\") {\n\t\t\tscaleX *= options.scale;\n\t\t\tscaleY *= options.scale;\n\t\t\tscaleZ *= options.scale;\n\t\t} else if (Array.isArray(options.scale)) {\n\t\t\tscaleX *= options.scale[0];\n\t\t\tscaleY *= options.scale[1];\n\t\t\tscaleZ *= options.scale[2];\n\t\t}\n\t\tconst offsetX = options.center ? centerX : 0;\n\t\tconst offsetY = options.center ? centerY : 0;\n\t\tconst offsetZ = options.center ? centerZ : 0;\n\t\tconst positions = new Float32Array(rawPositions.length);\n\t\tfor (let i = 0; i < rawPositions.length; i += 3) {\n\t\t\tpositions[i] = (rawPositions[i] - offsetX) * scaleX;\n\t\t\tpositions[i + 1] = (rawPositions[i + 1] - offsetY) * scaleY;\n\t\t\tpositions[i + 2] = (rawPositions[i + 2] - offsetZ) * scaleZ;\n\t\t}\n\t\tconst indexArray = positions.length / 3 > 65535 ? new Uint32Array(rawIndices) : new Uint16Array(rawIndices);\n\t\tconst defaultMaterial = {\n\t\t\tname: \"vox_default\",\n\t\t\tdiffuseColor: [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1\n\t\t\t],\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .4,\n\t\t\t...options.defaultMaterial\n\t\t};\n\t\tconst meshes = [{\n\t\t\tid: \"vox_mesh_0\",\n\t\t\tname: \"vox_geometry\",\n\t\t\tpositions,\n\t\t\tnormals: new Float32Array(rawNormals),\n\t\t\tuvs: new Float32Array(rawUvs),\n\t\t\tcolors: new Float32Array(rawColors),\n\t\t\tindices: indexArray,\n\t\t\tmaterialName: \"vox_default\"\n\t\t}];\n\t\tconst finalMinX = (minX - offsetX) * scaleX;\n\t\tconst finalMinY = (minY - offsetY) * scaleY;\n\t\tconst finalMinZ = (minZ - offsetZ) * scaleZ;\n\t\tconst finalMaxX = (maxX - offsetX) * scaleX;\n\t\tconst finalMaxY = (maxY - offsetY) * scaleY;\n\t\tconst finalMaxZ = (maxZ - offsetZ) * scaleZ;\n\t\treturn {\n\t\t\tname: \"VOX_Model\",\n\t\t\tmeshes,\n\t\t\tmaterials: { vox_default: defaultMaterial },\n\t\t\tanimations: [],\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tfinalMinX,\n\t\t\t\t\tfinalMinY,\n\t\t\t\t\tfinalMinZ\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tfinalMaxX,\n\t\t\t\t\tfinalMaxY,\n\t\t\t\t\tfinalMaxZ\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t(finalMinX + finalMaxX) * .5,\n\t\t\t\t\t(finalMinY + finalMaxY) * .5,\n\t\t\t\t\t(finalMinZ + finalMaxZ) * .5\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tfinalMaxX - finalMinX,\n\t\t\t\t\tfinalMaxY - finalMinY,\n\t\t\t\t\tfinalMaxZ - finalMinZ\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: Math.hypot(finalMaxX - finalMinX, finalMaxY - finalMinY, finalMaxZ - finalMinZ) * .5\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t* Loads a MagicaVoxel VOX file from a buffer, path, or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return VoxLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\treturn VoxLoader.parse(buf, options);\n\t\t}\n\t\tthrow new Error(\"VOX files must be binary buffers or local file paths\");\n\t}\n};\nfunction parseVOX(data, options = {}) {\n\treturn VoxLoader.parse(data, options);\n}\nfunction loadVOX(srcOrData, options = {}) {\n\treturn VoxLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/loaders/3ds-loader.ts\nconst CHUNK_MAIN = 19789;\nconst CHUNK_3D_EDITOR = 15677;\nconst CHUNK_OBJECT = 16384;\nconst CHUNK_TRIMESH = 16640;\nconst CHUNK_VERTICES = 16656;\nconst CHUNK_FACES = 16672;\nconst CHUNK_TEXCOORDS = 16704;\nconst CHUNK_MATERIAL = 45055;\nconst CHUNK_MATNAME = 40960;\nconst CHUNK_MATDIFFUSE = 40992;\nconst CHUNK_RGB_FLOAT = 16;\nconst CHUNK_RGB_BYTE = 17;\nvar ThreeDSLoader = class ThreeDSLoader {\n\t/**\n\t* Checks if buffer is 3DS binary format.\n\t*/\n\tstatic is3DS(buffer) {\n\t\tconst bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n\t\tif (bytes.length < 6) return false;\n\t\treturn new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint16(0, true) === CHUNK_MAIN;\n\t}\n\t/**\n\t* Parses 3DS binary buffer into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tconst bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n\t\tconst view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\t\tif (view.getUint16(0, true) !== CHUNK_MAIN) throw new Error(\"Invalid 3DS file: 0x4D4D magic mismatch\");\n\t\tconst meshes = [];\n\t\tconst materials = {};\n\t\tThreeDSLoader.readChunk(view, 0, bytes.byteLength, meshes, materials);\n\t\treturn ThreeDSLoader.buildModel(meshes, materials, options);\n\t}\n\tstatic readChunk(view, startOffset, endOffset, meshes, materials, currentObjectName = \"Object\") {\n\t\tlet offset = startOffset;\n\t\twhile (offset + 6 <= endOffset && offset + 6 <= view.byteLength) {\n\t\t\tconst chunkId = view.getUint16(offset, true);\n\t\t\tconst chunkLength = view.getUint32(offset + 2, true);\n\t\t\tif (chunkLength < 6) break;\n\t\t\tconst nextChunkOffset = offset + chunkLength;\n\t\t\tconst contentStart = offset + 6;\n\t\t\tconst contentEnd = Math.min(nextChunkOffset, endOffset, view.byteLength);\n\t\t\tswitch (chunkId) {\n\t\t\t\tcase CHUNK_MAIN:\n\t\t\t\tcase CHUNK_3D_EDITOR:\n\t\t\t\t\tThreeDSLoader.readChunk(view, contentStart, contentEnd, meshes, materials, currentObjectName);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CHUNK_OBJECT: {\n\t\t\t\t\tlet nameEnd = contentStart;\n\t\t\t\t\twhile (nameEnd < contentEnd && view.getUint8(nameEnd) !== 0) nameEnd++;\n\t\t\t\t\tconst objBytes = new Uint8Array(view.buffer, view.byteOffset + contentStart, nameEnd - contentStart);\n\t\t\t\t\tconst objName = new TextDecoder(\"ascii\").decode(objBytes) || \"Object\";\n\t\t\t\t\tThreeDSLoader.readChunk(view, nameEnd + 1, contentEnd, meshes, materials, objName);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CHUNK_TRIMESH: {\n\t\t\t\t\tconst mesh = {\n\t\t\t\t\t\tname: currentObjectName,\n\t\t\t\t\t\tpositions: [],\n\t\t\t\t\t\tindices: [],\n\t\t\t\t\t\tuvs: []\n\t\t\t\t\t};\n\t\t\t\t\tThreeDSLoader.readTriMesh(view, contentStart, contentEnd, mesh, materials);\n\t\t\t\t\tif (mesh.positions.length > 0 && mesh.indices.length > 0) meshes.push(mesh);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CHUNK_MATERIAL:\n\t\t\t\t\tThreeDSLoader.readMaterial(view, contentStart, contentEnd, materials);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t\toffset = nextChunkOffset;\n\t\t}\n\t}\n\tstatic readTriMesh(view, startOffset, endOffset, mesh, _materials) {\n\t\tlet offset = startOffset;\n\t\twhile (offset + 6 <= endOffset) {\n\t\t\tconst chunkId = view.getUint16(offset, true);\n\t\t\tconst chunkLength = view.getUint32(offset + 2, true);\n\t\t\tif (chunkLength < 6) break;\n\t\t\tconst nextChunkOffset = offset + chunkLength;\n\t\t\tconst contentStart = offset + 6;\n\t\t\tif (chunkId === CHUNK_VERTICES) {\n\t\t\t\tconst numVerts = view.getUint16(contentStart, true);\n\t\t\t\tlet vOffset = contentStart + 2;\n\t\t\t\tfor (let i = 0; i < numVerts; i++) {\n\t\t\t\t\tif (vOffset + 12 > endOffset) break;\n\t\t\t\t\tconst x = view.getFloat32(vOffset, true);\n\t\t\t\t\tconst y = view.getFloat32(vOffset + 4, true);\n\t\t\t\t\tconst z = view.getFloat32(vOffset + 8, true);\n\t\t\t\t\tmesh.positions.push(x, y, z);\n\t\t\t\t\tvOffset += 12;\n\t\t\t\t}\n\t\t\t} else if (chunkId === CHUNK_FACES) {\n\t\t\t\tconst numFaces = view.getUint16(contentStart, true);\n\t\t\t\tlet fOffset = contentStart + 2;\n\t\t\t\tfor (let i = 0; i < numFaces; i++) {\n\t\t\t\t\tif (fOffset + 8 > endOffset) break;\n\t\t\t\t\tconst a = view.getUint16(fOffset, true);\n\t\t\t\t\tconst b = view.getUint16(fOffset + 2, true);\n\t\t\t\t\tconst c = view.getUint16(fOffset + 4, true);\n\t\t\t\t\tmesh.indices.push(a, b, c);\n\t\t\t\t\tfOffset += 8;\n\t\t\t\t}\n\t\t\t} else if (chunkId === CHUNK_TEXCOORDS) {\n\t\t\t\tconst numCoords = view.getUint16(contentStart, true);\n\t\t\t\tlet tOffset = contentStart + 2;\n\t\t\t\tfor (let i = 0; i < numCoords; i++) {\n\t\t\t\t\tif (tOffset + 8 > endOffset) break;\n\t\t\t\t\tconst u = view.getFloat32(tOffset, true);\n\t\t\t\t\tconst v = view.getFloat32(tOffset + 4, true);\n\t\t\t\t\tmesh.uvs.push(u, 1 - v);\n\t\t\t\t\ttOffset += 8;\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset = nextChunkOffset;\n\t\t}\n\t}\n\tstatic readMaterial(view, startOffset, endOffset, materials) {\n\t\tlet offset = startOffset;\n\t\tlet matName = \"Material\";\n\t\tlet diffuseColor = [\n\t\t\t.8,\n\t\t\t.8,\n\t\t\t.8,\n\t\t\t1\n\t\t];\n\t\twhile (offset + 6 <= endOffset) {\n\t\t\tconst chunkId = view.getUint16(offset, true);\n\t\t\tconst chunkLength = view.getUint32(offset + 2, true);\n\t\t\tif (chunkLength < 6) break;\n\t\t\tconst nextChunkOffset = offset + chunkLength;\n\t\t\tconst contentStart = offset + 6;\n\t\t\tif (chunkId === CHUNK_MATNAME) {\n\t\t\t\tlet nameEnd = contentStart;\n\t\t\t\twhile (nameEnd < nextChunkOffset && view.getUint8(nameEnd) !== 0) nameEnd++;\n\t\t\t\tconst nameBytes = new Uint8Array(view.buffer, view.byteOffset + contentStart, nameEnd - contentStart);\n\t\t\t\tmatName = new TextDecoder(\"ascii\").decode(nameBytes) || matName;\n\t\t\t} else if (chunkId === CHUNK_MATDIFFUSE) {\n\t\t\t\tif (contentStart + 6 <= nextChunkOffset) {\n\t\t\t\t\tconst colorSubId = view.getUint16(contentStart, true);\n\t\t\t\t\tif (colorSubId === CHUNK_RGB_FLOAT && contentStart + 18 <= nextChunkOffset) diffuseColor = [\n\t\t\t\t\t\tview.getFloat32(contentStart + 6, true),\n\t\t\t\t\t\tview.getFloat32(contentStart + 10, true),\n\t\t\t\t\t\tview.getFloat32(contentStart + 14, true),\n\t\t\t\t\t\t1\n\t\t\t\t\t];\n\t\t\t\t\telse if (colorSubId === CHUNK_RGB_BYTE && contentStart + 9 <= nextChunkOffset) diffuseColor = [\n\t\t\t\t\t\tview.getUint8(contentStart + 6) / 255,\n\t\t\t\t\t\tview.getUint8(contentStart + 7) / 255,\n\t\t\t\t\t\tview.getUint8(contentStart + 8) / 255,\n\t\t\t\t\t\t1\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset = nextChunkOffset;\n\t\t}\n\t\tmaterials[matName] = {\n\t\t\tname: matName,\n\t\t\tdiffuseColor,\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .5\n\t\t};\n\t}\n\tstatic buildModel(rawMeshes, materials, options) {\n\t\tlet minX = Infinity, minY = Infinity, minZ = Infinity;\n\t\tlet maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;\n\t\tfor (const m of rawMeshes) for (let i = 0; i < m.positions.length; i += 3) {\n\t\t\tconst x = m.positions[i];\n\t\t\tconst y = m.positions[i + 1];\n\t\t\tconst z = m.positions[i + 2];\n\t\t\tif (x < minX) minX = x;\n\t\t\tif (x > maxX) maxX = x;\n\t\t\tif (y < minY) minY = y;\n\t\t\tif (y > maxY) maxY = y;\n\t\t\tif (z < minZ) minZ = z;\n\t\t\tif (z > maxZ) maxZ = z;\n\t\t}\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = minY = minZ = 0;\n\t\t\tmaxX = maxY = maxZ = 0;\n\t\t}\n\t\tconst centerX = (minX + maxX) * .5;\n\t\tconst centerY = (minY + maxY) * .5;\n\t\tconst centerZ = (minZ + maxZ) * .5;\n\t\tconst sizeX = maxX - minX;\n\t\tconst sizeY = maxY - minY;\n\t\tconst sizeZ = maxZ - minZ;\n\t\tconst maxDimension = Math.max(sizeX, sizeY, sizeZ, 1e-4);\n\t\tlet scaleMultiplier = 1;\n\t\tif (options.normalizeSize && options.normalizeSize > 0) scaleMultiplier = options.normalizeSize / maxDimension;\n\t\tlet scaleX = scaleMultiplier;\n\t\tlet scaleY = scaleMultiplier;\n\t\tlet scaleZ = scaleMultiplier;\n\t\tif (typeof options.scale === \"number\") {\n\t\t\tscaleX *= options.scale;\n\t\t\tscaleY *= options.scale;\n\t\t\tscaleZ *= options.scale;\n\t\t} else if (Array.isArray(options.scale)) {\n\t\t\tscaleX *= options.scale[0];\n\t\t\tscaleY *= options.scale[1];\n\t\t\tscaleZ *= options.scale[2];\n\t\t}\n\t\tconst offsetX = options.center ? centerX : 0;\n\t\tconst offsetY = options.center ? centerY : 0;\n\t\tconst offsetZ = options.center ? centerZ : 0;\n\t\tconst meshes = rawMeshes.map((m, idx) => {\n\t\t\tconst positions = new Float32Array(m.positions.length);\n\t\t\tfor (let i = 0; i < m.positions.length; i += 3) {\n\t\t\t\tpositions[i] = (m.positions[i] - offsetX) * scaleX;\n\t\t\t\tpositions[i + 1] = (m.positions[i + 1] - offsetY) * scaleY;\n\t\t\t\tpositions[i + 2] = (m.positions[i + 2] - offsetZ) * scaleZ;\n\t\t\t}\n\t\t\tconst normals = new Float32Array(m.positions.length);\n\t\t\tfor (let i = 0; i < m.indices.length; i += 3) {\n\t\t\t\tconst i0 = m.indices[i];\n\t\t\t\tconst i1 = m.indices[i + 1];\n\t\t\t\tconst i2 = m.indices[i + 2];\n\t\t\t\tconst p0 = [\n\t\t\t\t\tpositions[i0 * 3],\n\t\t\t\t\tpositions[i0 * 3 + 1],\n\t\t\t\t\tpositions[i0 * 3 + 2]\n\t\t\t\t];\n\t\t\t\tconst p1 = [\n\t\t\t\t\tpositions[i1 * 3],\n\t\t\t\t\tpositions[i1 * 3 + 1],\n\t\t\t\t\tpositions[i1 * 3 + 2]\n\t\t\t\t];\n\t\t\t\tconst p2 = [\n\t\t\t\t\tpositions[i2 * 3],\n\t\t\t\t\tpositions[i2 * 3 + 1],\n\t\t\t\t\tpositions[i2 * 3 + 2]\n\t\t\t\t];\n\t\t\t\tconst e1 = Vector3Math.subtract(p1, p0);\n\t\t\t\tconst e2 = Vector3Math.subtract(p2, p0);\n\t\t\t\tconst fn = Vector3Math.cross(e1, e2);\n\t\t\t\tnormals[i0 * 3] += fn[0];\n\t\t\t\tnormals[i0 * 3 + 1] += fn[1];\n\t\t\t\tnormals[i0 * 3 + 2] += fn[2];\n\t\t\t\tnormals[i1 * 3] += fn[0];\n\t\t\t\tnormals[i1 * 3 + 1] += fn[1];\n\t\t\t\tnormals[i1 * 3 + 2] += fn[2];\n\t\t\t\tnormals[i2 * 3] += fn[0];\n\t\t\t\tnormals[i2 * 3 + 1] += fn[1];\n\t\t\t\tnormals[i2 * 3 + 2] += fn[2];\n\t\t\t}\n\t\t\tfor (let i = 0; i < normals.length; i += 3) {\n\t\t\t\tconst nx = normals[i];\n\t\t\t\tconst ny = normals[i + 1];\n\t\t\t\tconst nz = normals[i + 2];\n\t\t\t\tconst len = Math.hypot(nx, ny, nz) || 1;\n\t\t\t\tnormals[i] = nx / len;\n\t\t\t\tnormals[i + 1] = ny / len;\n\t\t\t\tnormals[i + 2] = nz / len;\n\t\t\t}\n\t\t\tconst uvs = m.uvs.length === m.positions.length / 3 * 2 ? new Float32Array(m.uvs) : new Float32Array(m.positions.length / 3 * 2);\n\t\t\tconst indexArray = positions.length / 3 > 65535 ? new Uint32Array(m.indices) : new Uint16Array(m.indices);\n\t\t\treturn {\n\t\t\t\tid: `3ds_mesh_${idx}`,\n\t\t\t\tname: m.name,\n\t\t\t\tpositions,\n\t\t\t\tnormals,\n\t\t\t\tuvs,\n\t\t\t\tindices: indexArray,\n\t\t\t\tmaterialName: m.materialName\n\t\t\t};\n\t\t});\n\t\tconst finalMinX = (minX - offsetX) * scaleX;\n\t\tconst finalMinY = (minY - offsetY) * scaleY;\n\t\tconst finalMinZ = (minZ - offsetZ) * scaleZ;\n\t\tconst finalMaxX = (maxX - offsetX) * scaleX;\n\t\tconst finalMaxY = (maxY - offsetY) * scaleY;\n\t\tconst finalMaxZ = (maxZ - offsetZ) * scaleZ;\n\t\treturn {\n\t\t\tname: \"3DS_Model\",\n\t\t\tmeshes,\n\t\t\tmaterials,\n\t\t\tanimations: [],\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tfinalMinX,\n\t\t\t\t\tfinalMinY,\n\t\t\t\t\tfinalMinZ\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tfinalMaxX,\n\t\t\t\t\tfinalMaxY,\n\t\t\t\t\tfinalMaxZ\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t(finalMinX + finalMaxX) * .5,\n\t\t\t\t\t(finalMinY + finalMaxY) * .5,\n\t\t\t\t\t(finalMinZ + finalMaxZ) * .5\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tfinalMaxX - finalMinX,\n\t\t\t\t\tfinalMaxY - finalMinY,\n\t\t\t\t\tfinalMaxZ - finalMinZ\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: Math.hypot(finalMaxX - finalMinX, finalMaxY - finalMinY, finalMaxZ - finalMinZ) * .5\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t* Loads a 3DS file from a buffer, path, or URL.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return ThreeDSLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst buf = fs.readFileSync(cleanPath);\n\t\t\treturn ThreeDSLoader.parse(buf, options);\n\t\t}\n\t\tthrow new Error(\"3DS files must be binary buffers or local file paths\");\n\t}\n};\nfunction parse3DS(data, options = {}) {\n\treturn ThreeDSLoader.parse(data, options);\n}\nfunction load3DS(srcOrData, options = {}) {\n\treturn ThreeDSLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/loaders/off-loader.ts\nvar OffLoader = class OffLoader {\n\t/**\n\t* Parses OFF text into Model3DData.\n\t*/\n\tstatic parse(data, options = {}) {\n\t\tconst lines = (typeof data === \"string\" ? data : new TextDecoder(\"utf-8\").decode(data instanceof Uint8Array ? data : new Uint8Array(data))).split(/\\r?\\n/);\n\t\tlet lineIdx = 0;\n\t\twhile (lineIdx < lines.length && (!lines[lineIdx].trim() || lines[lineIdx].trim().startsWith(\"#\"))) lineIdx++;\n\t\tif (lineIdx >= lines.length) throw new Error(\"Empty OFF file\");\n\t\tlet headerLine = lines[lineIdx++].trim();\n\t\tlet hasNormals = false;\n\t\tlet hasColors = false;\n\t\tif (headerLine.startsWith(\"NOFF\") || headerLine.startsWith(\"STOFF\")) hasNormals = true;\n\t\telse if (headerLine.startsWith(\"COFF\")) hasColors = true;\n\t\telse if (!headerLine.startsWith(\"OFF\")) throw new Error(\"Invalid OFF header: missing 'OFF'\");\n\t\theaderLine = headerLine.replace(/^(?:ST|CO|NO|C|N)?OFF\\s*/i, \"\").trim();\n\t\tlet numVertices = 0;\n\t\tlet numFaces = 0;\n\t\tif (headerLine.length > 0) {\n\t\t\tconst parts = headerLine.split(/\\s+/);\n\t\t\tnumVertices = Number.parseInt(parts[0] ?? \"0\", 10);\n\t\t\tnumFaces = Number.parseInt(parts[1] ?? \"0\", 10);\n\t\t} else while (lineIdx < lines.length) {\n\t\t\tconst line = lines[lineIdx++].trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tnumVertices = Number.parseInt(parts[0] ?? \"0\", 10);\n\t\t\tnumFaces = Number.parseInt(parts[1] ?? \"0\", 10);\n\t\t\tbreak;\n\t\t}\n\t\tconst rawPositions = [];\n\t\tconst rawNormals = [];\n\t\tconst rawColors = [];\n\t\tconst rawUvs = [];\n\t\tconst rawIndices = [];\n\t\tlet readVerts = 0;\n\t\twhile (lineIdx < lines.length && readVerts < numVertices) {\n\t\t\tconst line = lines[lineIdx++].trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst x = Number.parseFloat(parts[0] ?? \"0\") || 0;\n\t\t\tconst y = Number.parseFloat(parts[1] ?? \"0\") || 0;\n\t\t\tconst z = Number.parseFloat(parts[2] ?? \"0\") || 0;\n\t\t\trawPositions.push(x, y, z);\n\t\t\tlet propOffset = 3;\n\t\t\tif (hasNormals) {\n\t\t\t\tconst nx = Number.parseFloat(parts[propOffset] ?? \"0\") || 0;\n\t\t\t\tconst ny = Number.parseFloat(parts[propOffset + 1] ?? \"0\") || 0;\n\t\t\t\tconst nz = Number.parseFloat(parts[propOffset + 2] ?? \"0\") || 0;\n\t\t\t\trawNormals.push(nx, ny, nz);\n\t\t\t\tpropOffset += 3;\n\t\t\t} else rawNormals.push(0, 0, 0);\n\t\t\tif (hasColors && parts.length > propOffset) {\n\t\t\t\tconst r = (Number.parseFloat(parts[propOffset] ?? \"255\") || 0) / (Number.parseFloat(parts[propOffset] ?? \"255\") > 1 ? 255 : 1);\n\t\t\t\tconst g$1 = (Number.parseFloat(parts[propOffset + 1] ?? \"255\") || 0) / (Number.parseFloat(parts[propOffset + 1] ?? \"255\") > 1 ? 255 : 1);\n\t\t\t\tconst b = (Number.parseFloat(parts[propOffset + 2] ?? \"255\") || 0) / (Number.parseFloat(parts[propOffset + 2] ?? \"255\") > 1 ? 255 : 1);\n\t\t\t\tconst a = parts.length > propOffset + 3 ? Number.parseFloat(parts[propOffset + 3] ?? \"1\") || 1 : 1;\n\t\t\t\trawColors.push(r, g$1, b, a);\n\t\t\t}\n\t\t\trawUvs.push(0, 0);\n\t\t\treadVerts++;\n\t\t}\n\t\tlet readFaces = 0;\n\t\twhile (lineIdx < lines.length && readFaces < numFaces) {\n\t\t\tconst line = lines[lineIdx++].trim();\n\t\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\t\tconst parts = line.split(/\\s+/);\n\t\t\tconst n = Number.parseInt(parts[0] ?? \"0\", 10);\n\t\t\tif (n >= 3) {\n\t\t\t\tconst v0 = Number.parseInt(parts[1] ?? \"0\", 10);\n\t\t\t\tfor (let i = 1; i < n - 1; i++) {\n\t\t\t\t\tconst v1 = Number.parseInt(parts[i + 1] ?? \"0\", 10);\n\t\t\t\t\tconst v2 = Number.parseInt(parts[i + 2] ?? \"0\", 10);\n\t\t\t\t\trawIndices.push(v0, v1, v2);\n\t\t\t\t}\n\t\t\t}\n\t\t\treadFaces++;\n\t\t}\n\t\tif (!hasNormals || options.smoothNormals) {\n\t\t\tfor (let i = 0; i < rawIndices.length; i += 3) {\n\t\t\t\tconst i0 = rawIndices[i];\n\t\t\t\tconst i1 = rawIndices[i + 1];\n\t\t\t\tconst i2 = rawIndices[i + 2];\n\t\t\t\tconst p0 = [\n\t\t\t\t\trawPositions[i0 * 3],\n\t\t\t\t\trawPositions[i0 * 3 + 1],\n\t\t\t\t\trawPositions[i0 * 3 + 2]\n\t\t\t\t];\n\t\t\t\tconst p1 = [\n\t\t\t\t\trawPositions[i1 * 3],\n\t\t\t\t\trawPositions[i1 * 3 + 1],\n\t\t\t\t\trawPositions[i1 * 3 + 2]\n\t\t\t\t];\n\t\t\t\tconst p2 = [\n\t\t\t\t\trawPositions[i2 * 3],\n\t\t\t\t\trawPositions[i2 * 3 + 1],\n\t\t\t\t\trawPositions[i2 * 3 + 2]\n\t\t\t\t];\n\t\t\t\tconst e1 = Vector3Math.subtract(p1, p0);\n\t\t\t\tconst e2 = Vector3Math.subtract(p2, p0);\n\t\t\t\tconst fn = Vector3Math.cross(e1, e2);\n\t\t\t\trawNormals[i0 * 3] += fn[0];\n\t\t\t\trawNormals[i0 * 3 + 1] += fn[1];\n\t\t\t\trawNormals[i0 * 3 + 2] += fn[2];\n\t\t\t\trawNormals[i1 * 3] += fn[0];\n\t\t\t\trawNormals[i1 * 3 + 1] += fn[1];\n\t\t\t\trawNormals[i1 * 3 + 2] += fn[2];\n\t\t\t\trawNormals[i2 * 3] += fn[0];\n\t\t\t\trawNormals[i2 * 3 + 1] += fn[1];\n\t\t\t\trawNormals[i2 * 3 + 2] += fn[2];\n\t\t\t}\n\t\t\tfor (let i = 0; i < rawNormals.length; i += 3) {\n\t\t\t\tconst nx = rawNormals[i];\n\t\t\t\tconst ny = rawNormals[i + 1];\n\t\t\t\tconst nz = rawNormals[i + 2];\n\t\t\t\tconst len = Math.hypot(nx, ny, nz) || 1;\n\t\t\t\trawNormals[i] = nx / len;\n\t\t\t\trawNormals[i + 1] = ny / len;\n\t\t\t\trawNormals[i + 2] = nz / len;\n\t\t\t}\n\t\t}\n\t\tlet minX = Infinity, minY = Infinity, minZ = Infinity;\n\t\tlet maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;\n\t\tfor (let i = 0; i < rawPositions.length; i += 3) {\n\t\t\tconst x = rawPositions[i];\n\t\t\tconst y = rawPositions[i + 1];\n\t\t\tconst z = rawPositions[i + 2];\n\t\t\tif (x < minX) minX = x;\n\t\t\tif (x > maxX) maxX = x;\n\t\t\tif (y < minY) minY = y;\n\t\t\tif (y > maxY) maxY = y;\n\t\t\tif (z < minZ) minZ = z;\n\t\t\tif (z > maxZ) maxZ = z;\n\t\t}\n\t\tif (!Number.isFinite(minX)) {\n\t\t\tminX = minY = minZ = 0;\n\t\t\tmaxX = maxY = maxZ = 0;\n\t\t}\n\t\tconst centerX = (minX + maxX) * .5;\n\t\tconst centerY = (minY + maxY) * .5;\n\t\tconst centerZ = (minZ + maxZ) * .5;\n\t\tconst sizeX = maxX - minX;\n\t\tconst sizeY = maxY - minY;\n\t\tconst sizeZ = maxZ - minZ;\n\t\tconst maxDimension = Math.max(sizeX, sizeY, sizeZ, 1e-4);\n\t\tlet scaleMultiplier = 1;\n\t\tif (options.normalizeSize && options.normalizeSize > 0) scaleMultiplier = options.normalizeSize / maxDimension;\n\t\tlet scaleX = scaleMultiplier;\n\t\tlet scaleY = scaleMultiplier;\n\t\tlet scaleZ = scaleMultiplier;\n\t\tif (typeof options.scale === \"number\") {\n\t\t\tscaleX *= options.scale;\n\t\t\tscaleY *= options.scale;\n\t\t\tscaleZ *= options.scale;\n\t\t} else if (Array.isArray(options.scale)) {\n\t\t\tscaleX *= options.scale[0];\n\t\t\tscaleY *= options.scale[1];\n\t\t\tscaleZ *= options.scale[2];\n\t\t}\n\t\tconst offsetX = options.center ? centerX : 0;\n\t\tconst offsetY = options.center ? centerY : 0;\n\t\tconst offsetZ = options.center ? centerZ : 0;\n\t\tconst positions = new Float32Array(rawPositions.length);\n\t\tfor (let i = 0; i < rawPositions.length; i += 3) {\n\t\t\tpositions[i] = (rawPositions[i] - offsetX) * scaleX;\n\t\t\tpositions[i + 1] = (rawPositions[i + 1] - offsetY) * scaleY;\n\t\t\tpositions[i + 2] = (rawPositions[i + 2] - offsetZ) * scaleZ;\n\t\t}\n\t\tconst indexArray = positions.length / 3 > 65535 ? new Uint32Array(rawIndices) : new Uint16Array(rawIndices);\n\t\tconst defaultMaterial = {\n\t\t\tname: \"off_default\",\n\t\t\tdiffuseColor: [\n\t\t\t\t.8,\n\t\t\t\t.8,\n\t\t\t\t.85,\n\t\t\t\t1\n\t\t\t],\n\t\t\tshininess: 32,\n\t\t\tspecularIntensity: .5,\n\t\t\t...options.defaultMaterial\n\t\t};\n\t\tconst meshes = [{\n\t\t\tid: \"off_mesh_0\",\n\t\t\tname: \"off_geometry\",\n\t\t\tpositions,\n\t\t\tnormals: new Float32Array(rawNormals),\n\t\t\tuvs: new Float32Array(rawUvs),\n\t\t\tcolors: hasColors ? new Float32Array(rawColors) : void 0,\n\t\t\tindices: indexArray,\n\t\t\tmaterialName: \"off_default\"\n\t\t}];\n\t\tconst finalMinX = (minX - offsetX) * scaleX;\n\t\tconst finalMinY = (minY - offsetY) * scaleY;\n\t\tconst finalMinZ = (minZ - offsetZ) * scaleZ;\n\t\tconst finalMaxX = (maxX - offsetX) * scaleX;\n\t\tconst finalMaxY = (maxY - offsetY) * scaleY;\n\t\tconst finalMaxZ = (maxZ - offsetZ) * scaleZ;\n\t\treturn {\n\t\t\tname: \"OFF_Model\",\n\t\t\tmeshes,\n\t\t\tmaterials: { off_default: defaultMaterial },\n\t\t\tanimations: [],\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tfinalMinX,\n\t\t\t\t\tfinalMinY,\n\t\t\t\t\tfinalMinZ\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tfinalMaxX,\n\t\t\t\t\tfinalMaxY,\n\t\t\t\t\tfinalMaxZ\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t(finalMinX + finalMaxX) * .5,\n\t\t\t\t\t(finalMinY + finalMaxY) * .5,\n\t\t\t\t\t(finalMinZ + finalMaxZ) * .5\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tfinalMaxX - finalMinX,\n\t\t\t\t\tfinalMaxY - finalMinY,\n\t\t\t\t\tfinalMaxZ - finalMinZ\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: Math.hypot(finalMaxX - finalMinX, finalMaxY - finalMinY, finalMaxZ - finalMinZ) * .5\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t* Loads an OFF file from a string, buffer, or path.\n\t*/\n\tstatic load(srcOrData, options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return OffLoader.parse(srcOrData, options);\n\t\tif (srcOrData.startsWith(\"/\") || srcOrData.startsWith(\"./\") || srcOrData.startsWith(\"../\") || srcOrData.startsWith(\"file://\")) {\n\t\t\tconst cleanPath = srcOrData.startsWith(\"file://\") ? srcOrData.replace(\"file://\", \"\") : srcOrData;\n\t\t\tconst text = fs.readFileSync(cleanPath, \"utf-8\");\n\t\t\treturn OffLoader.parse(text, options);\n\t\t}\n\t\treturn OffLoader.parse(srcOrData, options);\n\t}\n};\nfunction parseOFF(data, options = {}) {\n\treturn OffLoader.parse(data, options);\n}\nfunction loadOFF(srcOrData, options = {}) {\n\treturn OffLoader.load(srcOrData, options);\n}\n\n//#endregion\n//#region src/renderer3d/audio-mesh-deform-pipeline.ts\n/** Shader mode ids (audio-mesh-displace.wgsl). */\nconst DEFORM_MODES = {\n\tnormal_extrusion: 0,\n\tradial_pulse: 1,\n\tharmonic_wave: 2,\n\ttwist: 3,\n\tripple: 4\n};\nvar AudioMeshDeformPipeline = class {\n\tdevice;\n\tpipeline;\n\tbindGroupLayout;\n\tuniformPool;\n\tdeformedBuffers = /* @__PURE__ */ new WeakMap();\n\tuniformData = /* @__PURE__ */ new ArrayBuffer(32);\n\tuniformUint32 = new Uint32Array(this.uniformData);\n\tuniformFloat32 = new Float32Array(this.uniformData);\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.uniformPool = new BufferPool(32, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.bindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"AudioMeshDeformBindGroupLayout\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\t\tbuffer: { type: \"read-only-storage\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\t\tbuffer: { type: \"read-only-storage\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"audioMeshDisplace.wgsl\",\n\t\t\tcode: audioMeshDisplaceWgsl\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({\n\t\t\tlabel: \"AudioMeshDeformPipelineLayout\",\n\t\t\tbindGroupLayouts: [this.bindGroupLayout]\n\t\t});\n\t\tthis.pipeline = device.createComputePipeline({\n\t\t\tlabel: \"AudioMeshDeformComputePipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"cs_displace\"\n\t\t\t}\n\t\t});\n\t}\n\tgetOrCreateDeformedBuffer(srcBuffer, byteLength) {\n\t\tlet dst = this.deformedBuffers.get(srcBuffer);\n\t\tif (!dst || dst.size < byteLength) {\n\t\t\tdst?.destroy();\n\t\t\tdst = this.device.createBuffer({\n\t\t\t\tlabel: \"DeformedMeshVertexBuffer\",\n\t\t\t\tsize: Math.max(64, Math.ceil(byteLength / 4) * 4),\n\t\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC\n\t\t\t});\n\t\t\tthis.deformedBuffers.set(srcBuffer, dst);\n\t\t}\n\t\treturn dst;\n\t}\n\texecute(encoder, srcVertexBuffer, options) {\n\t\tconst { config: config$1, audioLatentBuffer, vertexCount, timeMs = 0, sampleRate = 48e3 } = options;\n\t\tconst byteLength = vertexCount * 64;\n\t\tconst dstVertexBuffer = this.getOrCreateDeformedBuffer(srcVertexBuffer, byteLength);\n\t\tconst modeInt = DEFORM_MODES[config$1.mode] ?? 0;\n\t\tconst hzPerBin = sampleRate / 2048;\n\t\tconst minHz = config$1.frequencyRange ? config$1.frequencyRange[0] : 20;\n\t\tconst maxHz = config$1.frequencyRange ? config$1.frequencyRange[1] : 120;\n\t\tconst minBin = Math.max(0, Math.min(1023, Math.round(minHz / hzPerBin)));\n\t\tconst maxBin = Math.max(minBin, Math.min(1023, Math.round(maxHz / hzPerBin)));\n\t\tconst amp = typeof config$1.amplitudeMultiplier === \"number\" ? config$1.amplitudeMultiplier : typeof config$1.amplitudeMultiplier?.value === \"number\" ? config$1.amplitudeMultiplier.value : 1;\n\t\tconst damping = config$1.damping ?? 0;\n\t\tthis.uniformUint32[0] = modeInt;\n\t\tthis.uniformUint32[1] = minBin;\n\t\tthis.uniformUint32[2] = maxBin;\n\t\tthis.uniformUint32[3] = vertexCount;\n\t\tthis.uniformFloat32[4] = amp;\n\t\tthis.uniformFloat32[5] = damping;\n\t\tthis.uniformFloat32[6] = timeMs;\n\t\tthis.uniformFloat32[7] = 0;\n\t\tconst uniformBuffer = this.uniformPool.getBuffer(this.device, new Uint8Array(this.uniformData));\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.bindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: audioLatentBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: srcVertexBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: dstVertexBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst computePass = encoder.beginComputePass({ label: \"AudioMeshDeformComputePass\" });\n\t\tcomputePass.setPipeline(this.pipeline);\n\t\tcomputePass.setBindGroup(0, bindGroup);\n\t\tconst workgroups = Math.ceil(vertexCount / 256);\n\t\tcomputePass.dispatchWorkgroups(workgroups);\n\t\tcomputePass.end();\n\t\treturn dstVertexBuffer;\n\t}\n\tresetPools() {\n\t\tthis.uniformPool.reset();\n\t}\n\tdestroy() {\n\t\tthis.uniformPool.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer3d/glass-pipeline.ts\n/**\n* @file renderer3d/glass-pipeline.ts\n* @module @gitframes/webgpu-renderers/renderer3d/glass-pipeline\n*\n* WebGPU Pipeline for PBR Glass, Acrylic, Frosted & Metallic Refraction rendering.\n*/\nvar GlassPipeline = class {\n\tdevice;\n\tpipeline;\n\tcameraLayout;\n\tmodelLayout;\n\tglassLayout;\n\tbackdropLayout;\n\tmodelPool;\n\tglassPool;\n\tvertexBuffer;\n\tindexBuffer;\n\tmodelData = new Float32Array(40);\n\tglassData = new Float32Array(16);\n\tconstructor(device, format, depthFormat = \"depth24plus\", cameraLayout) {\n\t\tthis.device = device;\n\t\tthis.modelPool = new BufferPool(160, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.glassPool = new BufferPool(64, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"pbr-glass.wgsl\",\n\t\t\tcode: pbrGlassWgsl\n\t\t});\n\t\tthis.cameraLayout = cameraLayout ?? device.createBindGroupLayout({\n\t\t\tlabel: \"GlassCameraLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.modelLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"GlassModelLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.glassLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"GlassUniformLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.backdropLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"GlassBackdropLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t}]\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\tthis.cameraLayout,\n\t\t\tthis.modelLayout,\n\t\t\tthis.glassLayout,\n\t\t\tthis.backdropLayout\n\t\t] });\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"PBRGlassPipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs_main\",\n\t\t\t\tbuffers: [{\n\t\t\t\t\tarrayStride: 32,\n\t\t\t\t\tattributes: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\t\toffset: 12,\n\t\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\t\toffset: 20,\n\t\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}]\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs_main\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tdepthStencil: {\n\t\t\t\tformat: depthFormat,\n\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\tdepthCompare: \"less-equal\"\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t}\n\t\t});\n\t\tconst vertices = new Float32Array([\n\t\t\t-.5,\n\t\t\t-.5,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t.5,\n\t\t\t-.5,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t.5,\n\t\t\t.5,\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t-.5,\n\t\t\t.5,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1\n\t\t]);\n\t\tconst indices = new Uint16Array([\n\t\t\t0,\n\t\t\t1,\n\t\t\t2,\n\t\t\t0,\n\t\t\t2,\n\t\t\t3\n\t\t]);\n\t\tthis.vertexBuffer = device.createBuffer({\n\t\t\tsize: vertices.byteLength,\n\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(this.vertexBuffer.getMappedRange()).set(vertices);\n\t\tthis.vertexBuffer.unmap();\n\t\tthis.indexBuffer = device.createBuffer({\n\t\t\tsize: indices.byteLength,\n\t\t\tusage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Uint16Array(this.indexBuffer.getMappedRange()).set(indices);\n\t\tthis.indexBuffer.unmap();\n\t}\n\tresetPools() {\n\t\tthis.modelPool.reset();\n\t\tthis.glassPool.reset();\n\t}\n\tdraw(pass, cameraBindGroup, backdropTexture, sampler, data) {\n\t\tconst mat = data.modelMatrix;\n\t\tfor (let i = 0; i < 16; i++) this.modelData[i] = mat[i] ?? 0;\n\t\tconst norm = data.normalMatrix ?? mat;\n\t\tfor (let i = 0; i < 16; i++) this.modelData[16 + i] = norm[i] ?? 0;\n\t\tconst tint = data.colorTint ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tthis.modelData[32] = tint[0];\n\t\tthis.modelData[33] = tint[1];\n\t\tthis.modelData[34] = tint[2];\n\t\tthis.modelData[35] = tint[3];\n\t\tthis.modelData[36] = data.opacity ?? 1;\n\t\tthis.modelData[37] = 0;\n\t\tthis.modelData[38] = 1;\n\t\tthis.modelData[39] = 0;\n\t\tconst modelBuffer = this.modelPool.getBuffer(this.device, this.modelData);\n\t\tthis.glassData[0] = data.ior ?? 1.49;\n\t\tthis.glassData[1] = data.roughness ?? .15;\n\t\tthis.glassData[2] = data.f0 ?? .04;\n\t\tthis.glassData[3] = data.transmission ?? .92;\n\t\tthis.glassData[4] = data.dispersion ?? .015;\n\t\tthis.glassData[5] = data.envIntensity ?? .65;\n\t\tthis.glassData[6] = data.fresnelPower ?? 5;\n\t\tthis.glassData[7] = 0;\n\t\tthis.glassData[8] = data.viewportWidth;\n\t\tthis.glassData[9] = data.viewportHeight;\n\t\tthis.glassData[10] = 0;\n\t\tthis.glassData[11] = 0;\n\t\tconst glassTint = data.tintColor ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tthis.glassData[12] = glassTint[0];\n\t\tthis.glassData[13] = glassTint[1];\n\t\tthis.glassData[14] = glassTint[2];\n\t\tthis.glassData[15] = glassTint[3];\n\t\tconst glassBuffer = this.glassPool.getBuffer(this.device, this.glassData);\n\t\tconst modelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.modelLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: modelBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst glassBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.glassLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: glassBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst backdropBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.backdropLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sampler\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: backdropTexture.createView()\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, cameraBindGroup);\n\t\tpass.setBindGroup(1, modelBindGroup);\n\t\tpass.setBindGroup(2, glassBindGroup);\n\t\tpass.setBindGroup(3, backdropBindGroup);\n\t\tpass.setVertexBuffer(0, this.vertexBuffer);\n\t\tpass.setIndexBuffer(this.indexBuffer, \"uint16\");\n\t\tpass.drawIndexed(6);\n\t}\n\tdestroy() {\n\t\tthis.modelPool.destroy();\n\t\tthis.glassPool.destroy();\n\t\tthis.vertexBuffer.destroy();\n\t\tthis.indexBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/mesh3d.ts\n/**\n* WebGPU WGSL shaders for 3D static and skinned meshes.\n* Supports GPU Linear Blend Skinning (up to 128 bones),\n* Multi-Light Blinn-Phong illumination (Ambient, Directional, Point, Spot) or toon shading,\n* alpha-cutoff (glTF MASK) materials,\n* Material parameters, normal transformations, and linear depth MRT output for Bokeh DoF.\n*/\nconst mesh3dWgsl = `\nstruct CameraUniforms {\n viewMatrix : mat4x4<f32>,\n projMatrix : mat4x4<f32>,\n viewProjMatrix : mat4x4<f32>,\n invViewProjMatrix : mat4x4<f32>,\n cameraPos : vec4<f32>, // xyz = eye, w = near\n cameraDir : vec4<f32>, // xyz = forward, w = far\n dofParams : vec4<f32>, // x = focusDistance, y = fStop, z = maxBlurRadius, w = dofEnabled\n screenParams : vec4<f32>, // x = surfaceWidth, y = surfaceHeight, z = time, w = unused\n};\n\nstruct ModelUniforms {\n modelMatrix : mat4x4<f32>,\n normalMatrix : mat4x4<f32>,\n colorTint : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = twoSided (1.0 = yes), z = isSkinned (1.0 = yes), w = wireframe\n materialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit, 2=toon)\n shade : vec4<f32>, // rgb = toon shadow-side color multiplier, a = alpha cutoff (0 = none)\n};\n\nstruct SkinningUniforms {\n jointMatrices : array<mat4x4<f32>, 128>,\n};\n\nstruct GPULight {\n posType : vec4<f32>, // xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot)\n dirRadius : vec4<f32>, // xyz = normalized direction, w = radius / range\n colorIntensity : vec4<f32>, // rgb = linear color, w = intensity\n spotParams : vec4<f32>, // x = cos(outer), y = cos(inner), z = decay, w = unused\n};\n\nstruct LightsUniforms {\n ambientColor : vec4<f32>, // rgb = ambient color * intensity, w = unused\n params : vec4<f32>, // x = numLights, y = hasLights (1.0 = lit, 0.0 = unlit), z = unused, w = unused\n lights : array<GPULight, 8>,\n};\n\n@group(0) @binding(0) var<uniform> cam : CameraUniforms;\n@group(1) @binding(0) var<uniform> model : ModelUniforms;\n@group(1) @binding(1) var<uniform> skinning : SkinningUniforms;\n@group(2) @binding(0) var texSampler : sampler;\n@group(2) @binding(1) var mainTex : texture_2d<f32>;\n@group(3) @binding(0) var<uniform> lights : LightsUniforms;\n\nstruct VertexInput {\n @location(0) position : vec3<f32>,\n @location(1) uv : vec2<f32>,\n @location(2) normal : vec3<f32>,\n @location(3) joints : vec4<f32>,\n @location(4) weights : vec4<f32>,\n};\n\nstruct VertexOutput {\n @builtin(position) clipPos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n @location(1) worldPos : vec3<f32>,\n @location(2) worldNormal : vec3<f32>,\n @location(3) linearDepth : f32,\n};\n\n@vertex\nfn vs_main(in: VertexInput) -> VertexOutput {\n var out: VertexOutput;\n\n var localPos = in.position;\n var localNorm = in.normal;\n\n // Linear Blend Skinning (LBS) on GPU\n if (model.params.z > 0.5) {\n let j0 = i32(in.joints.x);\n let j1 = i32(in.joints.y);\n let j2 = i32(in.joints.z);\n let j3 = i32(in.joints.w);\n\n let w0 = in.weights.x;\n let w1 = in.weights.y;\n let w2 = in.weights.z;\n let w3 = in.weights.w;\n\n let totalWeight = w0 + w1 + w2 + w3;\n if (totalWeight > 0.001) {\n let skinMat = skinning.jointMatrices[j0] * w0 +\n skinning.jointMatrices[j1] * w1 +\n skinning.jointMatrices[j2] * w2 +\n skinning.jointMatrices[j3] * w3;\n\n let pos4 = skinMat * vec4<f32>(in.position, 1.0);\n localPos = pos4.xyz;\n\n let norm4 = skinMat * vec4<f32>(in.normal, 0.0);\n localNorm = normalize(norm4.xyz);\n }\n }\n\n let worldPos4 = model.modelMatrix * vec4<f32>(localPos, 1.0);\n out.worldPos = worldPos4.xyz;\n\n let norm4 = model.normalMatrix * vec4<f32>(localNorm, 0.0);\n out.worldNormal = normalize(norm4.xyz);\n\n out.clipPos = cam.viewProjMatrix * worldPos4;\n out.uv = in.uv;\n\n out.linearDepth = dot(worldPos4.xyz - cam.cameraPos.xyz, cam.cameraDir.xyz);\n return out;\n}\n\n// Toon (MToon-style): the base color as authored where the light reaches,\n// the shade color past a soft terminator. Highlights stay out: the texture\n// already paints them.\nfn toonLighting(in: VertexOutput, baseColor: vec3<f32>) -> vec3<f32> {\n var N = normalize(in.worldNormal);\n let V = normalize(cam.cameraPos.xyz - in.worldPos);\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n var lit = 0.0;\n let numLights = i32(lights.params.x);\n for (var i = 0; i < 8; i++) {\n if (i >= numLights) {\n break;\n }\n let light = lights.lights[i];\n let lightType = light.posType.w;\n var L = vec3<f32>(0.0, 0.0, 1.0);\n if (lightType > 0.5 && lightType < 1.5) {\n L = normalize(-light.dirRadius.xyz);\n } else if (lightType >= 1.5) {\n L = normalize(light.posType.xyz - in.worldPos);\n } else {\n continue;\n }\n let terminator = smoothstep(-0.05, 0.2, dot(N, L));\n lit = max(lit, terminator * min(light.colorIntensity.w, 1.0));\n }\n return baseColor * mix(model.shade.rgb, vec3<f32>(1.0), lit);\n}\n\nfn calculateLighting(in: VertexOutput, isFront: bool, baseColor: vec3<f32>) -> vec3<f32> {\n if (lights.params.y < 0.5 || model.materialParams.w < 0.5) {\n return baseColor;\n }\n if (model.materialParams.w > 1.5) {\n return toonLighting(in, baseColor);\n }\n\n var N = normalize(in.worldNormal);\n let V = normalize(cam.cameraPos.xyz - in.worldPos);\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n\n let shininess = max(1.0, model.materialParams.x);\n let specularInt = model.materialParams.y;\n let ambientInt = model.materialParams.z;\n\n var totalIllumination = baseColor * (lights.ambientColor.rgb * ambientInt);\n\n let numLights = i32(lights.params.x);\n for (var i = 0; i < 8; i++) {\n if (i >= numLights) {\n break;\n }\n let light = lights.lights[i];\n let lightType = light.posType.w;\n let lightColor = light.colorIntensity.rgb;\n let intensity = light.colorIntensity.w;\n\n var L = vec3<f32>(0.0, 0.0, 1.0);\n var attenuation = 1.0;\n\n if (lightType > 0.5 && lightType < 1.5) {\n // Directional Light\n L = normalize(-light.dirRadius.xyz);\n } else if (lightType >= 1.5) {\n // Point or Spot Light\n let toLight = light.posType.xyz - in.worldPos;\n let dist = length(toLight);\n let radius = max(1.0, light.dirRadius.w);\n if (dist > radius) {\n continue;\n }\n L = normalize(toLight);\n\n let dNorm = clamp(dist / radius, 0.0, 1.0);\n let decay = max(0.5, light.spotParams.z);\n attenuation = pow(clamp(1.0 - dNorm, 0.0, 1.0), decay);\n\n if (lightType > 2.5) {\n // Spot Light\n let spotDir = normalize(light.dirRadius.xyz);\n let cosAngle = dot(-L, spotDir);\n let cosOuter = light.spotParams.x;\n let cosInner = light.spotParams.y;\n\n if (cosAngle < cosOuter) {\n continue;\n }\n let spotFalloff = smoothstep(cosOuter, cosInner, cosAngle);\n attenuation *= spotFalloff;\n }\n } else {\n continue;\n }\n\n let NdotL = max(dot(N, L), 0.0);\n let diffuse = baseColor * lightColor * (NdotL * intensity * attenuation);\n\n var specular = vec3<f32>(0.0);\n if (NdotL > 0.0 && specularInt > 0.001) {\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specFactor = pow(NdotH, shininess);\n specular = lightColor * (specFactor * specularInt * intensity * attenuation);\n }\n\n totalIllumination += diffuse + specular;\n }\n\n return totalIllumination;\n}\n\nstruct MrtOutput {\n @location(0) color : vec4<f32>,\n @location(1) depth : vec4<f32>,\n};\n\n@fragment\nfn fs_mrt(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtOutput {\n if (!isFront && model.params.y < 0.5) {\n discard;\n }\n\n var texColor = textureSample(mainTex, texSampler, in.uv);\n if (texColor.a < model.shade.a) {\n discard;\n }\n let alpha = texColor.a * model.params.x * model.colorTint.a;\n if (alpha <= 0.001) {\n discard;\n }\n\n let baseRgb = texColor.rgb * model.colorTint.rgb;\n let litRgb = calculateLighting(in, isFront, baseRgb);\n let premulColor = vec4<f32>(litRgb * alpha, alpha);\n\n var out: MrtOutput;\n out.color = premulColor;\n out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);\n return out;\n}\n\n@fragment\nfn fs_single(in: VertexOutput, @builtin(front_facing) isFront: bool) -> @location(0) vec4<f32> {\n if (!isFront && model.params.y < 0.5) {\n discard;\n }\n\n var texColor = textureSample(mainTex, texSampler, in.uv);\n if (texColor.a < model.shade.a) {\n discard;\n }\n let alpha = texColor.a * model.params.x * model.colorTint.a;\n if (alpha <= 0.001) {\n discard;\n }\n\n let baseRgb = texColor.rgb * model.colorTint.rgb;\n let litRgb = calculateLighting(in, isFront, baseRgb);\n return vec4<f32>(litRgb * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/renderer3d/mesh3d-pipeline.ts\nvar Mesh3DPipeline = class {\n\tdevice;\n\tpipelineSingle;\n\tpipelineMrt;\n\tcameraLayout;\n\tmodelLayout;\n\ttextureLayout;\n\tlightsLayout;\n\tmodelPool;\n\tskinningPool;\n\tdefaultWhiteTexture;\n\tdefaultSkinningBuffer;\n\tmodelData = new Float32Array(48);\n\tconstructor(device, format, depthFormat = \"depth24plus\", cameraLayout, lightsLayout, sampleCount = 1) {\n\t\tthis.device = device;\n\t\tthis.modelPool = new BufferPool(192, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.skinningPool = new BufferPool(8192, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"mesh3d.wgsl\",\n\t\t\tcode: mesh3dWgsl\n\t\t});\n\t\tthis.cameraLayout = cameraLayout ?? device.createBindGroupLayout({\n\t\t\tlabel: \"Mesh3DCameraLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.modelLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Mesh3DModelLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.textureLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Mesh3DTextureLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t}]\n\t\t});\n\t\tthis.lightsLayout = lightsLayout ?? device.createBindGroupLayout({\n\t\t\tlabel: \"Mesh3DLightsLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\tthis.cameraLayout,\n\t\t\tthis.modelLayout,\n\t\t\tthis.textureLayout,\n\t\t\tthis.lightsLayout\n\t\t] });\n\t\tconst vertexState = {\n\t\t\tmodule,\n\t\t\tentryPoint: \"vs_main\",\n\t\t\tbuffers: [{\n\t\t\t\tarrayStride: 64,\n\t\t\t\tattributes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\toffset: 12,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\toffset: 20,\n\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 3,\n\t\t\t\t\t\toffset: 32,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 4,\n\t\t\t\t\t\toffset: 48,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}]\n\t\t};\n\t\tthis.pipelineSingle = device.createRenderPipeline({\n\t\t\tlabel: \"Mesh3DPipelineSingle\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: vertexState,\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs_single\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tdepthStencil: {\n\t\t\t\tformat: depthFormat,\n\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\tdepthCompare: \"less-equal\"\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t},\n\t\t\tmultisample: { count: sampleCount }\n\t\t});\n\t\tthis.pipelineMrt = device.createRenderPipeline({\n\t\t\tlabel: \"Mesh3DPipelineMrt\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: vertexState,\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs_mrt\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, { format: \"rgba16float\" }]\n\t\t\t},\n\t\t\tdepthStencil: {\n\t\t\t\tformat: depthFormat,\n\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\tdepthCompare: \"less-equal\"\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t},\n\t\t\tmultisample: { count: sampleCount }\n\t\t});\n\t\tthis.defaultWhiteTexture = device.createTexture({\n\t\t\tlabel: \"Mesh3DDefaultWhiteTexture\",\n\t\t\tsize: {\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t},\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeTexture({ texture: this.defaultWhiteTexture }, new Uint8Array([\n\t\t\t255,\n\t\t\t255,\n\t\t\t255,\n\t\t\t255\n\t\t]), {\n\t\t\tbytesPerRow: 4,\n\t\t\trowsPerImage: 1\n\t\t}, {\n\t\t\twidth: 1,\n\t\t\theight: 1\n\t\t});\n\t\tconst idMatrices = new Float32Array(2048);\n\t\tfor (let b = 0; b < 128; b++) {\n\t\t\tidMatrices[b * 16] = 1;\n\t\t\tidMatrices[b * 16 + 5] = 1;\n\t\t\tidMatrices[b * 16 + 10] = 1;\n\t\t\tidMatrices[b * 16 + 15] = 1;\n\t\t}\n\t\tthis.defaultSkinningBuffer = device.createBuffer({\n\t\t\tsize: 8192,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(this.defaultSkinningBuffer.getMappedRange()).set(idMatrices);\n\t\tthis.defaultSkinningBuffer.unmap();\n\t}\n\tresetPools() {\n\t\tthis.modelPool.reset();\n\t\tthis.skinningPool.reset();\n\t}\n\tdraw(pass, cameraBindGroup, lightsBindGroup, meshBuffers, texture, sampler, data, useMrt = false) {\n\t\tconst mat = data.modelMatrix;\n\t\tfor (let i = 0; i < 16; i++) this.modelData[i] = mat[i] ?? 0;\n\t\tconst norm = data.normalMatrix ?? mat;\n\t\tfor (let i = 0; i < 16; i++) this.modelData[16 + i] = norm[i] ?? 0;\n\t\tconst tint = data.colorTint ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tthis.modelData[32] = tint[0];\n\t\tthis.modelData[33] = tint[1];\n\t\tthis.modelData[34] = tint[2];\n\t\tthis.modelData[35] = tint[3];\n\t\tthis.modelData[36] = data.opacity ?? 1;\n\t\tthis.modelData[37] = data.twoSided ? 1 : 0;\n\t\tthis.modelData[38] = data.isSkinned ? 1 : 0;\n\t\tthis.modelData[39] = data.wireframe ? 1 : 0;\n\t\tconst shininess = data.roughness !== void 0 ? Math.max(1, (1 - data.roughness) * 128) : data.shininess ?? 32;\n\t\tconst specInt = data.metallic !== void 0 ? data.metallic : data.specularIntensity ?? .5;\n\t\tconst ambientInt = data.ambientIntensity ?? 1;\n\t\tconst materialMode = data.material === \"unlit\" ? 0 : data.material === \"toon\" ? 2 : 1;\n\t\tthis.modelData[40] = shininess;\n\t\tthis.modelData[41] = specInt;\n\t\tthis.modelData[42] = ambientInt;\n\t\tthis.modelData[43] = materialMode;\n\t\tconst shade = data.shadeColor ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tthis.modelData[44] = shade[0];\n\t\tthis.modelData[45] = shade[1];\n\t\tthis.modelData[46] = shade[2];\n\t\tthis.modelData[47] = data.alphaCutoff ?? 0;\n\t\tconst modelBuffer = this.modelPool.getBuffer(this.device, this.modelData);\n\t\tconst skinningBuffer = data.isSkinned && data.skinningMatrices ? this.skinningPool.getBuffer(this.device, data.skinningMatrices) : this.defaultSkinningBuffer;\n\t\tconst modelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.modelLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: modelBuffer }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: skinningBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst actualTexture = texture ?? this.defaultWhiteTexture;\n\t\tconst textureBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.textureLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sampler\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: actualTexture.createView()\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(useMrt ? this.pipelineMrt : this.pipelineSingle);\n\t\tpass.setBindGroup(0, cameraBindGroup);\n\t\tpass.setBindGroup(1, modelBindGroup);\n\t\tpass.setBindGroup(2, textureBindGroup);\n\t\tpass.setBindGroup(3, lightsBindGroup);\n\t\tpass.setVertexBuffer(0, meshBuffers.vertexBuffer);\n\t\tpass.setIndexBuffer(meshBuffers.indexBuffer, meshBuffers.indexFormat);\n\t\tpass.drawIndexed(meshBuffers.indexCount);\n\t}\n\tdestroy() {\n\t\tthis.modelPool.destroy();\n\t\tthis.skinningPool.destroy();\n\t\tthis.defaultWhiteTexture.destroy();\n\t\tthis.defaultSkinningBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer3d/motion-blur-pipeline.ts\n/**\n* @file packages/webgpu-renderers/src/renderer3d/motion-blur-pipeline.ts\n* WebGPU render pipeline for camera shutter motion blur using screen-space velocity buffers.\n*/\nvar MotionBlurPipeline = class {\n\tdevice;\n\tpipeline;\n\tbindGroupLayout;\n\tuniformBuffer;\n\tsampler;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"motion-blur-shader\",\n\t\t\tcode: motionBlurWgsl\n\t\t});\n\t\tthis.bindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"motion-blur-bgl\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"depth\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({\n\t\t\tlabel: \"motion-blur-layout\",\n\t\t\tbindGroupLayouts: [this.bindGroupLayout]\n\t\t});\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"motion-blur-pipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs_main\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs_motion_blur\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tlabel: \"motion-blur-uniforms\",\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tthis.sampler = device.createSampler({\n\t\t\tlabel: \"motion-blur-sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t});\n\t}\n\trender(commandEncoder, colorView, velocityView, depthView, targetView, options) {\n\t\tconst shutterFraction = (options.shutterAngle ?? 180) / 360;\n\t\tconst sampleCount = options.sampleCount ?? 16;\n\t\tconst maxVelocity = options.maxVelocity ?? 64;\n\t\tconst depthThreshold = options.depthThreshold ?? .05;\n\t\tconst curveType = options.curveType === \"box\" ? 0 : options.curveType === \"triangle\" ? 2 : 1;\n\t\tconst uniformData$2 = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst f32View = new Float32Array(uniformData$2);\n\t\tconst u32View = new Uint32Array(uniformData$2);\n\t\tf32View[0] = shutterFraction;\n\t\tu32View[1] = sampleCount;\n\t\tf32View[2] = maxVelocity;\n\t\tu32View[3] = 16;\n\t\tf32View[4] = options.width;\n\t\tf32View[5] = options.height;\n\t\tf32View[6] = depthThreshold;\n\t\tu32View[7] = curveType;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData$2);\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"motion-blur-bg\",\n\t\t\tlayout: this.bindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: colorView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: velocityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: depthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginRenderPass({\n\t\t\tlabel: \"motion-blur-pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: targetView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(4);\n\t\tpass.end();\n\t}\n\tdestroy() {\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/lighting3d.ts\n/**\n* Camera and light uniforms plus Blinn-Phong lighting shared by the 3D quad\n* and 3D text shaders, so text on a plane is lit exactly like a textured quad.\n* The including shader declares `cam : CameraUniforms` and\n* `lights : LightsUniforms`.\n*/\nconst lighting3dWgsl = `\nstruct CameraUniforms {\n viewMatrix : mat4x4<f32>,\n projMatrix : mat4x4<f32>,\n viewProjMatrix : mat4x4<f32>,\n invViewProjMatrix : mat4x4<f32>,\n cameraPos : vec4<f32>, // xyz = eye, w = near\n cameraDir : vec4<f32>, // xyz = forward, w = far\n dofParams : vec4<f32>, // x = focusDistance, y = fStop, z = maxBlurRadius, w = dofEnabled\n screenParams : vec4<f32>, // x = surfaceWidth, y = surfaceHeight, z = time, w = unused\n};\n\nstruct GPULight {\n posType : vec4<f32>, // xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot)\n dirRadius : vec4<f32>, // xyz = normalized direction, w = radius / range\n colorIntensity : vec4<f32>, // rgb = linear color, w = intensity\n spotParams : vec4<f32>, // x = cos(outer), y = cos(inner), z = decay, w = unused\n};\n\nstruct LightsUniforms {\n ambientColor : vec4<f32>, // rgb = ambient color * intensity, w = unused\n params : vec4<f32>, // x = numLights, y = hasLights (1.0 = lit, 0.0 = unlit), z = unused, w = unused\n lights : array<GPULight, 8>,\n};\n\nfn applyLighting3D(worldPos: vec3<f32>, worldNormal: vec3<f32>, baseColor: vec3<f32>, material: vec4<f32>) -> vec3<f32> {\n // If no lights in scene or unlit material mode, return unlit base color\n if (lights.params.y < 0.5 || material.w < 0.5) {\n return baseColor;\n }\n \n var N = normalize(worldNormal);\n let V = normalize(cam.cameraPos.xyz - worldPos);\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n \n let shininess = max(1.0, material.x);\n let specularInt = material.y;\n let ambientInt = material.z;\n \n // 1. Ambient component\n var totalIllumination = baseColor * (lights.ambientColor.rgb * ambientInt);\n \n let numLights = i32(lights.params.x);\n for (var i = 0; i < 8; i++) {\n if (i >= numLights) {\n break;\n }\n let light = lights.lights[i];\n let lightType = light.posType.w; // 1 = directional, 2 = point, 3 = spot\n let lightColor = light.colorIntensity.rgb;\n let intensity = light.colorIntensity.w;\n \n var L = vec3<f32>(0.0, 0.0, 1.0);\n var attenuation = 1.0;\n \n if (lightType > 0.5 && lightType < 1.5) {\n // Directional Light\n L = normalize(-light.dirRadius.xyz);\n } else if (lightType >= 1.5) {\n // Point or Spot Light\n let toLight = light.posType.xyz - worldPos;\n let dist = length(toLight);\n let radius = max(1.0, light.dirRadius.w);\n if (dist > radius) {\n continue;\n }\n L = normalize(toLight);\n \n // Distance attenuation\n let dNorm = clamp(dist / radius, 0.0, 1.0);\n let decay = max(0.5, light.spotParams.z);\n attenuation = pow(clamp(1.0 - dNorm, 0.0, 1.0), decay);\n \n if (lightType > 2.5) {\n // Spot Light cone angle and penumbra falloff\n let spotDir = normalize(light.dirRadius.xyz);\n let cosAngle = dot(-L, spotDir);\n let cosOuter = light.spotParams.x;\n let cosInner = light.spotParams.y;\n \n if (cosAngle < cosOuter) {\n continue;\n }\n let spotFalloff = smoothstep(cosOuter, cosInner, cosAngle);\n attenuation *= spotFalloff;\n }\n } else {\n continue;\n }\n \n // Diffuse Lambertian\n let NdotL = max(dot(N, L), 0.0);\n let diffuse = baseColor * lightColor * (NdotL * intensity * attenuation);\n \n // Specular Blinn-Phong\n var specular = vec3<f32>(0.0);\n if (NdotL > 0.0 && specularInt > 0.001) {\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specFactor = pow(NdotH, shininess);\n specular = lightColor * (specFactor * specularInt * intensity * attenuation);\n }\n \n totalIllumination += diffuse + specular;\n }\n \n return totalIllumination;\n}\n`;\n\n//#endregion\n//#region src/shaders/quad3d.ts\n/**\n* WebGPU WGSL shaders for 3D textured quads transformed by Camera View-Projection matrices.\n* Supports Ambient, Directional, Point, and Spot lights with Blinn-Phong specular shading,\n* normal matrix transformations for non-uniform scaling, and linear depth MRT output.\n*/\nconst quad3dWgsl = `\n${lighting3dWgsl}\nstruct ModelUniforms {\n modelMatrix : mat4x4<f32>,\n normalMatrix : mat4x4<f32>,\n colorTint : vec4<f32>,\n borderColor : vec4<f32>,\n params : vec4<f32>, // x = opacity, y = borderRadius, z = twoSided (1.0 = yes), w = borderWidth\n dimensions : vec4<f32>, // x = width, y = height, zw = texture extent the layer covers (0 = whole texture)\n materialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit)\n};\n\n@group(0) @binding(0) var<uniform> cam : CameraUniforms;\n@group(1) @binding(0) var<uniform> model : ModelUniforms;\n@group(2) @binding(0) var texSampler : sampler;\n@group(2) @binding(1) var mainTex : texture_2d<f32>;\n@group(3) @binding(0) var<uniform> lights : LightsUniforms;\n\nstruct VertexInput {\n @location(0) position : vec3<f32>,\n @location(1) uv : vec2<f32>,\n @location(2) normal : vec3<f32>,\n};\n\nstruct VertexOutput {\n @builtin(position) clipPos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n @location(1) worldPos : vec3<f32>,\n @location(2) worldNormal : vec3<f32>,\n @location(3) linearDepth : f32,\n @location(4) localPos : vec2<f32>,\n};\n\n@vertex\nfn vs_main(in: VertexInput) -> VertexOutput {\n var out: VertexOutput;\n \n let hasDimensions = model.dimensions.x > 0.0 && model.dimensions.y > 0.0;\n var pad = 0.0;\n if (hasDimensions) {\n let viewPos = cam.viewMatrix * model.modelMatrix * vec4<f32>(0.0, 0.0, 0.0, 1.0);\n let viewDepth = max(abs(viewPos.z), 0.1);\n let projScale = max(cam.projMatrix[1][1], 0.001);\n let worldPx = (2.0 * viewDepth) / max(cam.screenParams.y * projScale, 0.001);\n pad = max(4.0 * worldPx, 4.0);\n }\n let scalePad = select(vec2<f32>(1.0), 1.0 + vec2<f32>(2.0 * pad) / model.dimensions.xy, hasDimensions);\n \n let paddedPos = vec3<f32>(in.position.xy * scalePad, in.position.z);\n let worldPos4 = model.modelMatrix * vec4<f32>(paddedPos, 1.0);\n out.worldPos = worldPos4.xyz;\n \n // Normal transformed by 3x3 normal matrix\n let norm4 = model.normalMatrix * vec4<f32>(in.normal, 0.0);\n out.worldNormal = normalize(norm4.xyz);\n \n out.clipPos = cam.viewProjMatrix * worldPos4;\n \n out.localPos = in.position.xy * (model.dimensions.xy + vec2<f32>(2.0 * pad));\n // A layer of fractional size renders into a texture rounded up to whole\n // pixels: map the quad onto the part it covers, not the whole texture,\n // or the content is stretched by up to a pixel and resampled off-grid.\n let uvExtent = select(model.dimensions.zw, vec2<f32>(1.0), model.dimensions.zw <= vec2<f32>(0.0));\n out.uv = select(in.uv, (out.localPos / model.dimensions.xy + vec2<f32>(0.5)) * uvExtent, hasDimensions);\n \n // Linear camera depth along optical viewing axis\n out.linearDepth = dot(worldPos4.xyz - cam.cameraPos.xyz, cam.cameraDir.xyz);\n return out;\n}\n\nfn calculateLighting(in: VertexOutput, isFront: bool, baseColor: vec3<f32>) -> vec3<f32> {\n return applyLighting3D(in.worldPos, in.worldNormal, baseColor, model.materialParams);\n}\n\nfn sdRoundedRectWithNormal(p: vec2<f32>, b: vec2<f32>, r: f32) -> vec3<f32> {\n let q = abs(p) - b + vec2<f32>(r);\n let sx = select(1.0, -1.0, p.x < 0.0);\n let sy = select(1.0, -1.0, p.y < 0.0);\n let s = vec2<f32>(sx, sy);\n \n // Outside corner arc region\n if (q.x > 0.0 && q.y > 0.0) {\n let l = length(q);\n let n = select(vec2<f32>(0.0, 1.0), q / l, l > 0.0001);\n return vec3<f32>(l - r, s * n);\n }\n \n // Straight edges or interior\n if (q.x > q.y) {\n let dist = q.x - r;\n return vec3<f32>(dist, s.x, 0.0);\n } else {\n let dist = q.y - r;\n return vec3<f32>(dist, 0.0, s.y);\n }\n}\n\nstruct MrtOutput {\n @location(0) color : vec4<f32>,\n @location(1) depth : vec4<f32>,\n};\n\n@fragment\nfn fs_mrt(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtOutput {\n // One-sided quads cull against their declared normal, not the hardware\n // winding: the Y-down view basis mirrors winding, so front_facing reads\n // camera-facing quads as back faces.\n if (model.params.z < 0.5 && dot(in.worldNormal, cam.cameraPos.xyz - in.worldPos) < 0.0) {\n discard;\n }\n \n var outerAlpha = 1.0;\n var borderFactor = 0.0;\n let br = model.params.y;\n let borderWidth = model.params.w;\n let hasDimensions = model.dimensions.x > 0.0 && model.dimensions.y > 0.0;\n \n if (hasDimensions) {\n let halfSize = model.dimensions.xy * 0.5;\n let normData = sdRoundedRectWithNormal(in.localPos, halfSize, br);\n \n let uvDx = dpdx(in.localPos);\n let uvDy = dpdy(in.localPos);\n \n let dPdx = normData.y * uvDx.x + normData.z * uvDx.y;\n let dPdy = normData.y * uvDy.x + normData.z * uvDy.y;\n let gradLen = max(sqrt(dPdx * dPdx + dPdy * dPdy), 0.001);\n \n let distPixel = normData.x / gradLen;\n outerAlpha = clamp(0.5 - distPixel, 0.0, 1.0);\n if (outerAlpha <= 0.001) {\n discard;\n }\n \n if (borderWidth > 0.0 && model.borderColor.a > 0.0) {\n let borderWidthPixel = max(borderWidth / gradLen, 0.0);\n let innerAlpha = clamp(0.5 - (distPixel + borderWidthPixel), 0.0, 1.0);\n borderFactor = clamp(outerAlpha - innerAlpha, 0.0, 1.0) * model.borderColor.a;\n }\n }\n \n let clampedUv = clamp(in.uv, vec2<f32>(0.0), vec2<f32>(1.0));\n let dxUV = dpdx(in.uv);\n let dyUV = dpdy(in.uv);\n var texColor = textureSampleGrad(mainTex, texSampler, clampedUv, dxUV, dyUV);\n let texAlpha = texColor.a;\n \n let unmultipliedRgb = select(texColor.rgb / texAlpha, texColor.rgb, texAlpha < 0.001);\n let baseRgb = mix(unmultipliedRgb * model.colorTint.rgb, model.borderColor.rgb, borderFactor);\n let alpha = mix(texAlpha, 1.0, borderFactor) * model.params.x * model.colorTint.a * outerAlpha;\n if (alpha <= 0.001) {\n discard;\n }\n \n let litRgb = calculateLighting(in, isFront, baseRgb);\n let premulColor = vec4<f32>(litRgb * alpha, alpha);\n \n var out: MrtOutput;\n out.color = premulColor;\n out.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);\n return out;\n}\n\n@fragment\nfn fs_single(in: VertexOutput, @builtin(front_facing) isFront: bool) -> @location(0) vec4<f32> {\n // One-sided quads cull against their declared normal, not the hardware\n // winding: the Y-down view basis mirrors winding, so front_facing reads\n // camera-facing quads as back faces.\n if (model.params.z < 0.5 && dot(in.worldNormal, cam.cameraPos.xyz - in.worldPos) < 0.0) {\n discard;\n }\n \n var outerAlpha = 1.0;\n var borderFactor = 0.0;\n let br = model.params.y;\n let borderWidth = model.params.w;\n let hasDimensions = model.dimensions.x > 0.0 && model.dimensions.y > 0.0;\n \n if (hasDimensions) {\n let halfSize = model.dimensions.xy * 0.5;\n let normData = sdRoundedRectWithNormal(in.localPos, halfSize, br);\n \n let uvDx = dpdx(in.localPos);\n let uvDy = dpdy(in.localPos);\n \n let dPdx = normData.y * uvDx.x + normData.z * uvDx.y;\n let dPdy = normData.y * uvDy.x + normData.z * uvDy.y;\n let gradLen = max(sqrt(dPdx * dPdx + dPdy * dPdy), 0.001);\n \n let distPixel = normData.x / gradLen;\n outerAlpha = clamp(0.5 - distPixel, 0.0, 1.0);\n if (outerAlpha <= 0.001) {\n discard;\n }\n \n if (borderWidth > 0.0 && model.borderColor.a > 0.0) {\n let borderWidthPixel = max(borderWidth / gradLen, 0.0);\n let innerAlpha = clamp(0.5 - (distPixel + borderWidthPixel), 0.0, 1.0);\n borderFactor = clamp(outerAlpha - innerAlpha, 0.0, 1.0) * model.borderColor.a;\n }\n }\n \n let clampedUv = clamp(in.uv, vec2<f32>(0.0), vec2<f32>(1.0));\n let dxUV = dpdx(in.uv);\n let dyUV = dpdy(in.uv);\n var texColor = textureSampleGrad(mainTex, texSampler, clampedUv, dxUV, dyUV);\n let texAlpha = texColor.a;\n \n let unmultipliedRgb = select(texColor.rgb / texAlpha, texColor.rgb, texAlpha < 0.001);\n let baseRgb = mix(unmultipliedRgb * model.colorTint.rgb, model.borderColor.rgb, borderFactor);\n let alpha = mix(texAlpha, 1.0, borderFactor) * model.params.x * model.colorTint.a * outerAlpha;\n if (alpha <= 0.001) {\n discard;\n }\n \n let litRgb = calculateLighting(in, isFront, baseRgb);\n return vec4<f32>(litRgb * alpha, alpha);\n}\n`;\n\n//#endregion\n//#region src/renderer3d/quad3d-pipeline.ts\n/** [shininess, specularIntensity, ambientIntensity, materialMode] as the 3D shaders' lighting reads them. */\nfunction packMaterialParams(data) {\n\treturn [\n\t\tdata.roughness !== void 0 ? Math.max(1, (1 - data.roughness) * 128) : data.shininess ?? 32,\n\t\tdata.metallic !== void 0 ? data.metallic : data.specularIntensity ?? .5,\n\t\tdata.ambientIntensity ?? 1,\n\t\tdata.material === \"unlit\" ? 0 : 1\n\t];\n}\nvar Quad3DPipeline = class {\n\tdevice;\n\tpipelineSingle;\n\tpipelineMrt;\n\tcameraLayout;\n\tmodelLayout;\n\ttextureLayout;\n\tlightsLayout;\n\tmodelPool;\n\tvertexBuffer;\n\tindexBuffer;\n\tmodelData = new Float32Array(52);\n\tconstructor(device, format, depthFormat = \"depth24plus\", sampleCount = 1) {\n\t\tthis.device = device;\n\t\tthis.modelPool = new BufferPool(208, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"quad3d.wgsl\",\n\t\t\tcode: quad3dWgsl\n\t\t});\n\t\tthis.cameraLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Quad3DCameraLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.modelLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Quad3DModelLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.textureLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Quad3DTextureLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t}]\n\t\t});\n\t\tthis.lightsLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Quad3DLightsLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\tthis.cameraLayout,\n\t\t\tthis.modelLayout,\n\t\t\tthis.textureLayout,\n\t\t\tthis.lightsLayout\n\t\t] });\n\t\tconst vertexState = {\n\t\t\tmodule,\n\t\t\tentryPoint: \"vs_main\",\n\t\t\tbuffers: [{\n\t\t\t\tarrayStride: 32,\n\t\t\t\tattributes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\toffset: 12,\n\t\t\t\t\t\tformat: \"float32x2\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\toffset: 20,\n\t\t\t\t\t\tformat: \"float32x3\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}]\n\t\t};\n\t\tthis.pipelineSingle = device.createRenderPipeline({\n\t\t\tlabel: \"Quad3DPipelineSingle\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: vertexState,\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs_single\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tdepthStencil: {\n\t\t\t\tformat: depthFormat,\n\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\tdepthCompare: \"less-equal\"\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t},\n\t\t\tmultisample: { count: sampleCount }\n\t\t});\n\t\tthis.pipelineMrt = device.createRenderPipeline({\n\t\t\tlabel: \"Quad3DPipelineMrt\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: vertexState,\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs_mrt\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, { format: \"rgba16float\" }]\n\t\t\t},\n\t\t\tdepthStencil: {\n\t\t\t\tformat: depthFormat,\n\t\t\t\tdepthWriteEnabled: true,\n\t\t\t\tdepthCompare: \"less-equal\"\n\t\t\t},\n\t\t\tprimitive: {\n\t\t\t\ttopology: \"triangle-list\",\n\t\t\t\tcullMode: \"none\"\n\t\t\t},\n\t\t\tmultisample: { count: sampleCount }\n\t\t});\n\t\tconst vertices = new Float32Array([\n\t\t\t-.5,\n\t\t\t-.5,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t.5,\n\t\t\t-.5,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t.5,\n\t\t\t.5,\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1,\n\t\t\t-.5,\n\t\t\t.5,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1\n\t\t]);\n\t\tconst indices = new Uint16Array([\n\t\t\t0,\n\t\t\t1,\n\t\t\t2,\n\t\t\t0,\n\t\t\t2,\n\t\t\t3\n\t\t]);\n\t\tthis.vertexBuffer = device.createBuffer({\n\t\t\tsize: vertices.byteLength,\n\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(this.vertexBuffer.getMappedRange()).set(vertices);\n\t\tthis.vertexBuffer.unmap();\n\t\tthis.indexBuffer = device.createBuffer({\n\t\t\tsize: indices.byteLength,\n\t\t\tusage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Uint16Array(this.indexBuffer.getMappedRange()).set(indices);\n\t\tthis.indexBuffer.unmap();\n\t}\n\tresetPools() {\n\t\tthis.modelPool.reset();\n\t}\n\tdraw(pass, cameraBindGroup, lightsBindGroup, texture, sampler, data, useMrt = false) {\n\t\tconst mat = data.modelMatrix;\n\t\tfor (let i = 0; i < 16; i++) this.modelData[i] = mat[i] ?? 0;\n\t\tconst norm = data.normalMatrix ?? mat;\n\t\tfor (let i = 0; i < 16; i++) this.modelData[16 + i] = norm[i] ?? 0;\n\t\tconst tint = data.colorTint ?? [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t];\n\t\tthis.modelData[32] = tint[0];\n\t\tthis.modelData[33] = tint[1];\n\t\tthis.modelData[34] = tint[2];\n\t\tthis.modelData[35] = tint[3];\n\t\tconst bColor = data.borderColor ?? [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tthis.modelData[36] = bColor[0];\n\t\tthis.modelData[37] = bColor[1];\n\t\tthis.modelData[38] = bColor[2];\n\t\tthis.modelData[39] = bColor[3];\n\t\tthis.modelData[40] = data.opacity ?? 1;\n\t\tthis.modelData[41] = data.borderRadius ?? 0;\n\t\tthis.modelData[42] = data.twoSided ? 1 : 0;\n\t\tthis.modelData[43] = data.borderWidth ?? 0;\n\t\tthis.modelData[44] = data.width ?? 0;\n\t\tthis.modelData[45] = data.height ?? 0;\n\t\tthis.modelData[46] = data.textureExtent?.[0] ?? 0;\n\t\tthis.modelData[47] = data.textureExtent?.[1] ?? 0;\n\t\tthis.modelData.set(packMaterialParams(data), 48);\n\t\tconst modelBuffer = this.modelPool.getBuffer(this.device, this.modelData);\n\t\tconst modelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.modelLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: modelBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst textureBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.textureLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sampler\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: texture.createView()\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(useMrt ? this.pipelineMrt : this.pipelineSingle);\n\t\tpass.setBindGroup(0, cameraBindGroup);\n\t\tpass.setBindGroup(1, modelBindGroup);\n\t\tpass.setBindGroup(2, textureBindGroup);\n\t\tpass.setBindGroup(3, lightsBindGroup);\n\t\tpass.setVertexBuffer(0, this.vertexBuffer);\n\t\tpass.setIndexBuffer(this.indexBuffer, \"uint16\");\n\t\tpass.drawIndexed(6);\n\t}\n\tdestroy() {\n\t\tthis.modelPool.destroy();\n\t\tthis.vertexBuffer.destroy();\n\t\tthis.indexBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/dof-bokeh.ts\n/**\n* WebGPU WGSL shader for bilateral Poisson-disc bokeh Depth-of-Field post-processing.\n* Reads color and linear depth targets to produce photorealistic optical lens blur.\n*/\nconst dofBokehWgsl = `\nstruct CameraUniforms {\n viewMatrix : mat4x4<f32>,\n projMatrix : mat4x4<f32>,\n viewProjMatrix : mat4x4<f32>,\n invViewProjMatrix : mat4x4<f32>,\n cameraPos : vec4<f32>, // xyz = eye, w = near\n cameraDir : vec4<f32>, // xyz = forward, w = far\n dofParams : vec4<f32>, // x = focusDistance, y = fStop, z = maxBlurRadius, w = dofEnabled\n screenParams : vec4<f32>, // x = surfaceWidth, y = surfaceHeight, z = time, w = unused\n};\n\n@group(0) @binding(0) var<uniform> cam : CameraUniforms;\n@group(0) @binding(1) var samp : sampler;\n@group(0) @binding(2) var colorTex : texture_2d<f32>;\n@group(0) @binding(3) var depthTex : texture_2d<f32>;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs_fullscreen(@builtin(vertex_index) vid : u32) -> VSOut {\n var out: VSOut;\n // Fullscreen triangle covering [-1, 1] NDC\n var coord = vec2<f32>(-1.0, -1.0);\n if (vid == 1u) {\n coord = vec2<f32>(3.0, -1.0);\n } else if (vid == 2u) {\n coord = vec2<f32>(-1.0, 3.0);\n }\n out.pos = vec4<f32>(coord, 0.0, 1.0);\n out.uv = coord * 0.5 + 0.5;\n out.uv.y = 1.0 - out.uv.y; // Flip Y for texture coordinates\n return out;\n}\n\nfn computeCoC(depth: f32) -> f32 {\n let focusDist = cam.dofParams.x;\n let maxBlur = cam.dofParams.z;\n if (focusDist <= 0.0 || maxBlur <= 0.0) {\n return 0.0;\n }\n let delta = abs(depth - focusDist);\n // Smooth non-linear ramp around focus plane\n return clamp((delta / (focusDist * 0.5 + 1.0)) * maxBlur, 0.0, maxBlur);\n}\n\n@fragment\nfn fs_dof(in: VSOut) -> @location(0) vec4<f32> {\n let centerColor = textureSampleLevel(colorTex, samp, in.uv, 0.0);\n let centerDepth = textureSampleLevel(depthTex, samp, in.uv, 0.0).r;\n let coc = computeCoC(centerDepth);\n \n // Skip if DoF is disabled or blur is negligible\n if (cam.dofParams.w < 0.5 || coc < 0.5) {\n return centerColor;\n }\n \n var accumColor = centerColor;\n var totalWeight = 1.0;\n \n let NUM_SAMPLES = 24;\n let GOLDEN_ANGLE = 2.39996323;\n let texelSize = 1.0 / cam.screenParams.xy;\n \n for (var i = 1; i <= NUM_SAMPLES; i = i + 1) {\n let theta = f32(i) * GOLDEN_ANGLE;\n let r = sqrt(f32(i) / f32(NUM_SAMPLES)) * coc;\n let offset = vec2<f32>(cos(theta), sin(theta)) * r * texelSize;\n \n let sampleUV = in.uv + offset;\n let sampleColor = textureSampleLevel(colorTex, samp, sampleUV, 0.0);\n let sampleDepth = textureSampleLevel(depthTex, samp, sampleUV, 0.0).r;\n let sampleCoC = computeCoC(sampleDepth);\n \n // Depth-aware bilateral rejection: prevent background bleed onto sharp foreground\n let depthDiff = sampleDepth - centerDepth;\n let weight = select(\n smoothstep(-10.0, 0.0, depthDiff) * clamp(sampleCoC / coc, 0.2, 1.0),\n 1.0,\n depthDiff >= 0.0\n );\n \n accumColor = accumColor + sampleColor * weight;\n totalWeight = totalWeight + weight;\n }\n \n return accumColor / totalWeight;\n}\n`;\n\n//#endregion\n//#region src/shaders/slug3d.ts\n/**\n* Slug glyphs drawn straight into the 3D scene: each glyph quad is placed on\n* its layer's plane by the camera's view-projection, and coverage is solved\n* per screen pixel from the outline. Text stays sharp at any distance or\n* angle, with no intermediate texture to magnify or minify.\n*/\nconst slug3dWgsl = `\n${lighting3dWgsl}\n\nstruct TextModelUniforms {\n\tmodelMatrix : mat4x4<f32>, // paragraph px -> world\n\tnormalMatrix : mat4x4<f32>,\n\tparams : vec4<f32>, // x = opacity, y = slant, z = twoSided (1.0 = yes), w = pull toward the eye\n\tmaterialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit)\n};\n\n@group(0) @binding(0) var<uniform> cam : CameraUniforms;\n@group(1) @binding(0) var<uniform> model : TextModelUniforms;\n@group(2) @binding(0) var curvesTex : texture_2d<f32>;\n@group(2) @binding(1) var bandsTex : texture_2d<u32>;\n@group(3) @binding(0) var<uniform> lights : LightsUniforms;\n\n${slugCoverageWgsl}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n\t@location(1) @interpolate(flat) glyphScale : vec2<f32>,\n\t@location(2) @interpolate(flat) bandScale : vec2<f32>,\n\t@location(3) @interpolate(flat) bandMax : vec2<u32>,\n\t@location(4) @interpolate(flat) bandsTexCoords : vec2<u32>,\n\t@location(5) color : vec4<f32>,\n\t@location(6) @interpolate(flat) fx : vec4<f32>, // x = blur, y = chromatic shift, z = dissolve, w = vfx\n\t@location(7) worldPos : vec3<f32>,\n\t@location(8) @interpolate(flat) worldNormal : vec3<f32>,\n\t@location(9) linearDepth : f32,\n};\n\nvar<private> pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(\n\tvec2<f32>(-1.0, -1.0),\n\tvec2<f32>(1.0, 1.0),\n\tvec2<f32>(-1.0, 1.0),\n\tvec2<f32>(-1.0, -1.0),\n\tvec2<f32>(1.0, -1.0),\n\tvec2<f32>(1.0, 1.0)\n);\n\n// Screen pixels moved per paragraph unit along the axis whose clip-space step\n// is dc, at clip position c: the derivative of the perspective divide.\nfn pixelsPerUnitAlong(c: vec4<f32>, dc: vec4<f32>) -> vec2<f32> {\n\tlet w = max(c.w, 1e-4);\n\treturn (dc.xy * w - c.xy * dc.w) / (w * w) * 0.5 * cam.screenParams.xy;\n}\n\n@vertex fn vs(\n\t@builtin(vertex_index) vertex_index : u32,\n\t@location(0) aScaleBias : vec4<f32>,\n\t@location(1) aGlyphBandScale : vec4<f32>,\n\t@location(2) aBandMaxTexCoords : vec4<f32>,\n\t@location(3) aAnim : vec4<f32>, // x = rotation, y = scale_mult, zw = translation\n\t@location(4) aColor : vec4<f32>,\n\t@location(5) aExtraParams : vec4<f32>,\n) -> VSOut {\n\tlet quad_pos = pos[vertex_index];\n\tlet angle = aAnim.x;\n\tlet scale_mult = aAnim.y;\n\tlet origin = aScaleBias.zw + aAnim.zw;\n\tlet slant = model.params.y;\n\tlet rot = mat2x2<f32>(cos(angle), sin(angle), -sin(angle), cos(angle));\n\tlet shear = mat2x2<f32>(1.0, 0.0, -slant, 1.0);\n\tlet glyphToParagraph = rot * shear;\n\n\tlet clipFromParagraph = cam.viewProjMatrix * model.modelMatrix;\n\n\t// Slug's dynamic dilation, under perspective: grow the quad by one screen\n\t// pixel so edge pixels whose centres fall just outside the outline's box\n\t// are still shaded. The pixel is measured at this corner through the\n\t// projection's Jacobian, along the paragraph direction that gets the fewest\n\t// pixels (its smallest singular value), so foreshortened sides are covered.\n\tlet corner = origin + glyphToParagraph * (quad_pos * aScaleBias.xy * scale_mult);\n\tlet cornerClip = clipFromParagraph * vec4<f32>(corner, 0.0, 1.0);\n\tlet jx = pixelsPerUnitAlong(cornerClip, clipFromParagraph[0]);\n\tlet jy = pixelsPerUnitAlong(cornerClip, clipFromParagraph[1]);\n\tlet e = dot(jx, jx) + dot(jy, jy);\n\tlet det = jx.x * jy.y - jx.y * jy.x;\n\tlet minPixelsPerUnit = sqrt(max(0.5 * (e - sqrt(max(e * e - 4.0 * det * det, 0.0))), 0.0));\n\tlet halfSize = max(abs(aScaleBias.xy * scale_mult), vec2<f32>(1e-4));\n\t// Bounded at three times the glyph: seen nearly edge-on a pixel spans\n\t// most of the paragraph, and the glyph is a sliver either way.\n\tlet dilation = min(vec2<f32>(1.0 / max(minPixelsPerUnit, 1e-6)), halfSize * 2.0);\n\tlet grow = vec2<f32>(1.0) + dilation / halfSize;\n\n\tlet paragraphPos = origin + glyphToParagraph * (quad_pos * aScaleBias.xy * scale_mult * grow);\n\tlet world4 = model.modelMatrix * vec4<f32>(paragraphPos, 0.0, 1.0);\n\t// Slide toward the eye along the view ray: the same pixel, a nearer depth.\n\t// Passes stacked on one plane (shadow, stroke, fill, a backdrop) resolve\n\t// by draw order instead of z-fighting.\n\tlet world = world4.xyz + (cam.cameraPos.xyz - world4.xyz) * model.params.w;\n\n\tvar out : VSOut;\n\tout.pos = cam.viewProjMatrix * vec4<f32>(world, 1.0);\n\tout.uv = vec2<f32>(\n\t\tquad_pos.x * grow.x * 0.5 + 0.5,\n\t\t1.0 - (quad_pos.y * grow.y * 0.5 + 0.5),\n\t);\n\tout.glyphScale = aGlyphBandScale.xy;\n\tout.bandScale = aGlyphBandScale.zw;\n\tout.bandMax = vec2<u32>(aBandMaxTexCoords.xy);\n\tout.bandsTexCoords = vec2<u32>(aBandMaxTexCoords.zw);\n\tout.color = aColor;\n\tout.fx = aExtraParams;\n\tout.worldPos = world4.xyz;\n\tout.worldNormal = normalize((model.normalMatrix * vec4<f32>(0.0, 0.0, -1.0, 0.0)).xyz);\n\tout.linearDepth = dot(world4.xyz - cam.cameraPos.xyz, cam.cameraDir.xyz);\n\treturn out;\n}\n\n// Lit, premultiplied glyph colour; alpha 0 means discard.\nfn shadeText(in : VSOut, fw : vec2<f32>) -> vec4<f32> {\n\t// One-sided text culls against its plane's normal, as one-sided quads do.\n\tif (model.params.z < 0.5 && dot(in.worldNormal, cam.cameraPos.xyz - in.worldPos) < 0.0) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\tlet glyph = SlugGlyph(in.glyphScale, in.bandScale, in.bandMax, in.bandsTexCoords);\n\tlet shaded = shadeSlugGlyph(\n\t\tin.uv,\n\t\tfw,\n\t\tin.pos.xy,\n\t\tglyph,\n\t\tin.color,\n\t\tmodel.params.x,\n\t\tin.fx.x,\n\t\tin.fx.y,\n\t\tin.fx.z,\n\t);\n\tif (shaded.a < 0.0001) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\tlet lit = applyLighting3D(in.worldPos, in.worldNormal, shaded.rgb / shaded.a, model.materialParams);\n\treturn vec4<f32>(lit * shaded.a, shaded.a);\n}\n\n@fragment fn fs_single(in : VSOut) -> @location(0) vec4<f32> {\n\tlet fw = max(abs(dpdx(in.uv)) + abs(dpdy(in.uv)), vec2<f32>(0.000001));\n\tlet color = shadeText(in, fw);\n\tif (color.a < 0.0001) {\n\t\tdiscard;\n\t}\n\treturn color;\n}\n\nstruct MrtOutput {\n\t@location(0) color : vec4<f32>,\n\t@location(1) depth : vec4<f32>,\n};\n\n@fragment fn fs_mrt(in : VSOut) -> MrtOutput {\n\tlet fw = max(abs(dpdx(in.uv)) + abs(dpdy(in.uv)), vec2<f32>(0.000001));\n\tlet color = shadeText(in, fw);\n\tif (color.a < 0.0001) {\n\t\tdiscard;\n\t}\n\tvar out : MrtOutput;\n\tout.color = color;\n\tout.depth = vec4<f32>(in.linearDepth, 0.0, 0.0, 1.0);\n\treturn out;\n}\n`;\n\n//#endregion\n//#region src/renderer3d/slug3d-pipeline.ts\nconst INSTANCE_FLOATS = 24;\n/** Slug glyphs in the 3D pass: depth-tested, lit and resolution independent. */\nvar Slug3DPipeline = class {\n\tdevice;\n\tpipelineSingle;\n\tpipelineMrt;\n\tmodelLayout;\n\tfontLayout;\n\tmodelPool;\n\tinstancePool;\n\tfontBindGroups = /* @__PURE__ */ new WeakMap();\n\tmodelData = new Float32Array(40);\n\tconstructor(device, format, depthFormat, cameraLayout, lightsLayout, sampleCount = 1) {\n\t\tthis.device = device;\n\t\tthis.modelPool = new BufferPool(160, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.instancePool = new BufferPool(65536, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"slug3d.wgsl\",\n\t\t\tcode: slug3dWgsl\n\t\t});\n\t\tthis.modelLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Slug3DModelLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.fontLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"Slug3DFontLayout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"unfilterable-float\" }\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"uint\" }\n\t\t\t}]\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\tcameraLayout,\n\t\t\tthis.modelLayout,\n\t\t\tthis.fontLayout,\n\t\t\tlightsLayout\n\t\t] });\n\t\tconst vertex = {\n\t\t\tmodule,\n\t\t\tentryPoint: \"vs\",\n\t\t\tbuffers: [{\n\t\t\t\tarrayStride: INSTANCE_FLOATS * 4,\n\t\t\t\tstepMode: \"instance\",\n\t\t\t\tattributes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 0,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 1,\n\t\t\t\t\t\toffset: 16,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 2,\n\t\t\t\t\t\toffset: 32,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 3,\n\t\t\t\t\t\toffset: 48,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 4,\n\t\t\t\t\t\toffset: 64,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tshaderLocation: 5,\n\t\t\t\t\t\toffset: 80,\n\t\t\t\t\t\tformat: \"float32x4\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}]\n\t\t};\n\t\tconst blend = {\n\t\t\tcolor: {\n\t\t\t\tsrcFactor: \"one\",\n\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\toperation: \"add\"\n\t\t\t},\n\t\t\talpha: {\n\t\t\t\tsrcFactor: \"one\",\n\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\toperation: \"add\"\n\t\t\t}\n\t\t};\n\t\tconst depthStencil = {\n\t\t\tformat: depthFormat,\n\t\t\tdepthWriteEnabled: true,\n\t\t\tdepthCompare: \"less-equal\"\n\t\t};\n\t\tconst primitive = {\n\t\t\ttopology: \"triangle-list\",\n\t\t\tcullMode: \"none\"\n\t\t};\n\t\tconst multisample = { count: sampleCount };\n\t\tthis.pipelineSingle = device.createRenderPipeline({\n\t\t\tlabel: \"Slug3DPipelineSingle\",\n\t\t\tlayout,\n\t\t\tvertex,\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs_single\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend\n\t\t\t\t}]\n\t\t\t},\n\t\t\tdepthStencil,\n\t\t\tprimitive,\n\t\t\tmultisample\n\t\t});\n\t\tthis.pipelineMrt = device.createRenderPipeline({\n\t\t\tlabel: \"Slug3DPipelineMrt\",\n\t\t\tlayout,\n\t\t\tvertex,\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs_mrt\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend\n\t\t\t\t}, { format: \"rgba16float\" }]\n\t\t\t},\n\t\t\tdepthStencil,\n\t\t\tprimitive,\n\t\t\tmultisample\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.modelPool.reset();\n\t\tthis.instancePool.reset();\n\t}\n\tdraw(pass, cameraBindGroup, lightsBindGroup, font, instances, instanceCount, data, useMrt = false) {\n\t\tif (instanceCount === 0 || !font.curvesTex || !font.bandsTex) return;\n\t\tthis.modelData.set(data.modelMatrix, 0);\n\t\tthis.modelData.set(data.normalMatrix, 16);\n\t\tthis.modelData[32] = data.opacity;\n\t\tthis.modelData[33] = data.slant;\n\t\tthis.modelData[34] = data.twoSided ? 1 : 0;\n\t\tthis.modelData[35] = data.depthPull;\n\t\tthis.modelData.set(packMaterialParams(data), 36);\n\t\tconst modelBuffer = this.modelPool.getBuffer(this.device, this.modelData);\n\t\tconst modelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.modelLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: modelBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst instanceBuffer = this.instancePool.getBuffer(this.device, instances.subarray(0, instanceCount * INSTANCE_FLOATS));\n\t\tpass.setPipeline(useMrt ? this.pipelineMrt : this.pipelineSingle);\n\t\tpass.setBindGroup(0, cameraBindGroup);\n\t\tpass.setBindGroup(1, modelBindGroup);\n\t\tpass.setBindGroup(2, this.fontBindGroup(font.curvesTex, font.bandsTex));\n\t\tpass.setBindGroup(3, lightsBindGroup);\n\t\tpass.setVertexBuffer(0, instanceBuffer);\n\t\tpass.draw(6, instanceCount);\n\t}\n\t/** A font's textures live as long as the font: bind them once, not per draw. */\n\tfontBindGroup(curves, bands) {\n\t\tlet bindGroup = this.fontBindGroups.get(curves);\n\t\tif (!bindGroup) {\n\t\t\tbindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.fontLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: curves.createView()\n\t\t\t\t}, {\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: bands.createView()\n\t\t\t\t}]\n\t\t\t});\n\t\t\tthis.fontBindGroups.set(curves, bindGroup);\n\t\t}\n\t\treturn bindGroup;\n\t}\n\tdestroy() {\n\t\tthis.modelPool.destroy();\n\t\tthis.instancePool.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer3d/renderer3d.ts\nconst ADDRESS_MODES = {\n\trepeat: \"repeat\",\n\tclamp: \"clamp-to-edge\",\n\tmirror: \"mirror-repeat\"\n};\n/**\n* How far, as a fraction of the distance to the eye, each pass stacked on a\n* text plane slides toward it. Large enough for depth24 to separate passes\n* out to a few thousand px from the camera, small enough to never be seen.\n*/\nconst TEXT_STACK_PULL = 5e-4;\nvar Renderer3D = class {\n\tdevice;\n\tformat;\n\tquad3dPipeline;\n\tslug3dPipeline;\n\tmesh3dPipeline;\n\taudioMeshDeformPipeline;\n\tdofPipeline;\n\tdofBindGroupLayout;\n\tcameraPool;\n\tlightsPool;\n\tcameraUniformBindGroupCache = new UniformBindGroupCache();\n\tlightsUniformBindGroupCache = new UniformBindGroupCache();\n\tsamplerCache = new SamplerCache();\n\tdepthTexture = null;\n\tlinearDepthTexture = null;\n\tmsaaColorTexture = null;\n\tmsaaLinearDepthTexture = null;\n\tcameraUniformData = new Float32Array(80);\n\tmeshBuffersCache = /* @__PURE__ */ new WeakMap();\n\tmaterialTextures = /* @__PURE__ */ new WeakMap();\n\t/** Parsed models by source and load options: a model file is read once, not every frame. */\n\tmodelCache = /* @__PURE__ */ new Map();\n\tlastCameraPose = null;\n\tlastCameraBuffer = null;\n\t/**\n\t* Samples per pixel in the 3D pass. Mesh silhouettes (extruded text,\n\t* models) are rasterized triangles: without MSAA every edge is a hard\n\t* stair-step. 4 is the count every WebGPU device supports; 1 turns it off.\n\t*/\n\tsampleCount;\n\tconstructor(device, format, sampleCount = 4) {\n\t\tthis.device = device;\n\t\tthis.format = format;\n\t\tthis.sampleCount = sampleCount;\n\t\tthis.quad3dPipeline = new Quad3DPipeline(device, format, \"depth24plus\", sampleCount);\n\t\tthis.slug3dPipeline = new Slug3DPipeline(device, format, \"depth24plus\", this.quad3dPipeline.cameraLayout, this.quad3dPipeline.lightsLayout, sampleCount);\n\t\tthis.mesh3dPipeline = new Mesh3DPipeline(device, format, \"depth24plus\", this.quad3dPipeline.cameraLayout, this.quad3dPipeline.lightsLayout, sampleCount);\n\t\tthis.audioMeshDeformPipeline = new AudioMeshDeformPipeline(device);\n\t\tthis.cameraPool = new BufferPool(320, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.lightsPool = new BufferPool(LIGHT_UNIFORM_SIZE_BYTES, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tconst dofModule = device.createShaderModule({\n\t\t\tlabel: \"dof-bokeh.wgsl\",\n\t\t\tcode: dofBokehWgsl\n\t\t});\n\t\tthis.dofBindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"DoFBindGroupLayout\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tthis.dofPipeline = device.createRenderPipeline({\n\t\t\tlabel: \"DoFBokehPipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.dofBindGroupLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: dofModule,\n\t\t\t\tentryPoint: \"vs_fullscreen\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: dofModule,\n\t\t\t\tentryPoint: \"fs_dof\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t});\n\t}\n\tresetPools() {\n\t\tthis.cameraPool.reset();\n\t\tthis.lightsPool.reset();\n\t\tthis.quad3dPipeline.resetPools();\n\t\tthis.slug3dPipeline.resetPools();\n\t\tthis.mesh3dPipeline.resetPools();\n\t\tthis.audioMeshDeformPipeline.resetPools();\n\t}\n\tgetOrCreateDepthTexture(width, height) {\n\t\tif (!this.depthTexture || this.depthTexture.width !== width || this.depthTexture.height !== height) {\n\t\t\tthis.depthTexture?.destroy();\n\t\t\tthis.depthTexture = this.device.createTexture({\n\t\t\t\tlabel: \"Renderer3DDepthTexture\",\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"depth24plus\",\n\t\t\t\tsampleCount: this.sampleCount,\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t}\n\t\treturn this.depthTexture;\n\t}\n\tgetOrCreateMsaaTexture(current, label, format, width, height) {\n\t\tif (current && current.width === width && current.height === height) return current;\n\t\tcurrent?.destroy();\n\t\treturn this.device.createTexture({\n\t\t\tlabel,\n\t\t\tsize: {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t},\n\t\t\tformat,\n\t\t\tsampleCount: this.sampleCount,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t}\n\tgetOrCreateLinearDepthTexture(width, height) {\n\t\tif (!this.linearDepthTexture || this.linearDepthTexture.width !== width || this.linearDepthTexture.height !== height) {\n\t\t\tthis.linearDepthTexture?.destroy();\n\t\t\tthis.linearDepthTexture = this.device.createTexture({\n\t\t\t\tlabel: \"Renderer3DLinearDepthTexture\",\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t}\n\t\treturn this.linearDepthTexture;\n\t}\n\tpackCameraUniforms(camera, surfaceWidth, surfaceHeight, time$2 = 0) {\n\t\tif (this.lastCameraPose && this.lastCameraBuffer && this.lastCameraPose.eye[0] === camera.eye[0] && this.lastCameraPose.eye[1] === camera.eye[1] && this.lastCameraPose.eye[2] === camera.eye[2] && this.lastCameraPose.target[0] === camera.target[0] && this.lastCameraPose.target[1] === camera.target[1] && this.lastCameraPose.target[2] === camera.target[2] && this.lastCameraPose.up[0] === camera.up[0] && this.lastCameraPose.up[1] === camera.up[1] && this.lastCameraPose.up[2] === camera.up[2] && this.lastCameraPose.fov === camera.fov && this.lastCameraPose.near === camera.near && this.lastCameraPose.far === camera.far) return this.lastCameraBuffer;\n\t\tconst view = Camera3D.computeViewMatrix(camera);\n\t\tconst proj = Camera3D.computeProjectionMatrix(camera);\n\t\tconst viewProj = Camera3D.computeViewProjectionMatrix(camera);\n\t\tconst invViewProj = Matrix4Math.invert(viewProj) ?? Matrix4Math.identity();\n\t\tthis.cameraUniformData.set(view, 0);\n\t\tthis.cameraUniformData.set(proj, 16);\n\t\tthis.cameraUniformData.set(viewProj, 32);\n\t\tthis.cameraUniformData.set(invViewProj, 48);\n\t\tthis.cameraUniformData[64] = camera.eye[0];\n\t\tthis.cameraUniformData[65] = camera.eye[1];\n\t\tthis.cameraUniformData[66] = camera.eye[2];\n\t\tthis.cameraUniformData[67] = camera.near;\n\t\tconst fwd = Vector3Math.normalize(Vector3Math.subtract(camera.target, camera.eye));\n\t\tthis.cameraUniformData[68] = fwd[0];\n\t\tthis.cameraUniformData[69] = fwd[1];\n\t\tthis.cameraUniformData[70] = fwd[2];\n\t\tthis.cameraUniformData[71] = camera.far;\n\t\tthis.cameraUniformData[72] = camera.focusDistance ?? 1e3;\n\t\tthis.cameraUniformData[73] = camera.fStop ?? 2.8;\n\t\tthis.cameraUniformData[74] = camera.maxBlurRadius ?? 32;\n\t\tthis.cameraUniformData[75] = camera.focusDistance !== void 0 ? 1 : 0;\n\t\tthis.cameraUniformData[76] = surfaceWidth;\n\t\tthis.cameraUniformData[77] = surfaceHeight;\n\t\tthis.cameraUniformData[78] = time$2;\n\t\tthis.cameraUniformData[79] = 0;\n\t\tconst buffer = this.cameraPool.getBuffer(this.device, this.cameraUniformData);\n\t\tthis.lastCameraPose = camera;\n\t\tthis.lastCameraBuffer = buffer;\n\t\treturn buffer;\n\t}\n\tcreateCameraBindGroup(cameraBuffer) {\n\t\treturn this.cameraUniformBindGroupCache.getBindGroup(this.device, this.quad3dPipeline.cameraLayout, cameraBuffer);\n\t}\n\tgetOrCreateLightsBuffer(lights) {\n\t\tconst lightsData = Light3D.packLightsUniforms(lights ?? []);\n\t\treturn this.lightsPool.getBuffer(this.device, lightsData);\n\t}\n\tbeginPass(encoder, colorTargetView, surfaceWidth, surfaceHeight, camera, loadOp = \"clear\", clearColor = {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, linearDepthTargetView, lights) {\n\t\tconst depthTex = this.getOrCreateDepthTexture(surfaceWidth, surfaceHeight);\n\t\tconst cameraBuffer = this.packCameraUniforms(camera, surfaceWidth, surfaceHeight);\n\t\tconst cameraBindGroup = this.createCameraBindGroup(cameraBuffer);\n\t\tconst lightsBuffer = this.getOrCreateLightsBuffer(lights);\n\t\tconst lightsBindGroup = this.lightsUniformBindGroupCache.getBindGroup(this.device, this.quad3dPipeline.lightsLayout, lightsBuffer);\n\t\tconst msaa = this.sampleCount > 1;\n\t\tif (msaa && loadOp === \"load\") throw new Error(\"Renderer3D.beginPass: loadOp 'load' needs a Renderer3D built with sampleCount 1\");\n\t\tconst attach = (view, msaaTex, clearValue, attachmentLoadOp) => msaaTex ? {\n\t\t\tview: msaaTex.createView(),\n\t\t\tresolveTarget: view,\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"discard\",\n\t\t\tclearValue\n\t\t} : {\n\t\t\tview,\n\t\t\tloadOp: attachmentLoadOp,\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue\n\t\t};\n\t\tif (msaa) this.msaaColorTexture = this.getOrCreateMsaaTexture(this.msaaColorTexture, \"Renderer3DMsaaColor\", this.format, surfaceWidth, surfaceHeight);\n\t\tconst colorAttachments = [attach(colorTargetView, msaa ? this.msaaColorTexture : null, clearColor, loadOp)];\n\t\tif (linearDepthTargetView) {\n\t\t\tif (msaa) this.msaaLinearDepthTexture = this.getOrCreateMsaaTexture(this.msaaLinearDepthTexture, \"Renderer3DMsaaLinearDepth\", \"rgba16float\", surfaceWidth, surfaceHeight);\n\t\t\tcolorAttachments.push(attach(linearDepthTargetView, msaa ? this.msaaLinearDepthTexture : null, {\n\t\t\t\tr: camera.far,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 1\n\t\t\t}, \"clear\"));\n\t\t}\n\t\treturn {\n\t\t\tpass: encoder.beginRenderPass({\n\t\t\t\tcolorAttachments,\n\t\t\t\tdepthStencilAttachment: {\n\t\t\t\t\tview: depthTex.createView(),\n\t\t\t\t\tdepthClearValue: 1,\n\t\t\t\t\tdepthLoadOp: \"clear\",\n\t\t\t\t\tdepthStoreOp: msaa ? \"discard\" : \"store\"\n\t\t\t\t}\n\t\t\t}),\n\t\t\tcameraBindGroup,\n\t\t\tcameraBuffer,\n\t\t\tlightsBindGroup\n\t\t};\n\t}\n\t/**\n\t* A layer's unit quad ([-0.5, 0.5] square) in world space:\n\t* T(pos) * Rz * Ry * Rx * S(w * sx, h * sy, sz) * T(0.5 - ax, 0.5 - ay, 0).\n\t*/\n\tquadModelMatrix(opts) {\n\t\tif (opts.modelMatrix) return opts.modelMatrix;\n\t\tconst { position, width, height, rotation = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t], scale = [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t], anchor = [.5, .5] } = opts;\n\t\tlet m = Matrix4Math.identity();\n\t\tm = Matrix4Math.multiply(m, Matrix4Math.translate(position[0], position[1], position[2]));\n\t\tconst rxRad = rotation[0] * Math.PI / 180;\n\t\tconst ryRad = rotation[1] * Math.PI / 180;\n\t\tconst rzRad = rotation[2] * Math.PI / 180;\n\t\tif (rzRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateZ(rzRad));\n\t\tif (ryRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateY(ryRad));\n\t\tif (rxRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateX(rxRad));\n\t\tconst sx = width * scale[0];\n\t\tconst sy = height * scale[1];\n\t\tconst sz = scale[2];\n\t\tm = Matrix4Math.multiply(m, Matrix4Math.scale(sx, sy, sz));\n\t\tconst pivotX = .5 - anchor[0];\n\t\tconst pivotY = .5 - anchor[1];\n\t\tif (pivotX !== 0 || pivotY !== 0) m = Matrix4Math.multiply(m, Matrix4Math.translate(pivotX, pivotY, 0));\n\t\treturn m;\n\t}\n\t/**\n\t* Draw a text layer's captured Slug glyphs on the plane its texture quad\n\t* would cover. Glyph coverage is solved per screen pixel, so the text is\n\t* as sharp at a glancing angle or up close as it is flat on screen.\n\t* `stackBase` is how many passes already sit on this plane (a backdrop\n\t* quad): each batch draws just in front of the one before.\n\t*/\n\tdrawSlugText(pass, cameraBindGroup, lightsBindGroup, batches, opts, stackBase = 0, useMrt = false) {\n\t\tconst { width, height } = opts;\n\t\tif (!(width > 0 && height > 0)) return;\n\t\tconst quad = this.quadModelMatrix(opts);\n\t\tconst normalMatrix = opts.normalMatrix ?? Light3D.computeNormalMatrix(quad);\n\t\tconst layerToWorld = Matrix4Math.multiply(quad, Matrix4Math.multiply(Matrix4Math.translate(-.5, -.5, 0), Matrix4Math.scale(1 / width, 1 / height, 1)));\n\t\tfor (let i = 0; i < batches.length; i++) {\n\t\t\tconst batch = batches[i];\n\t\t\tconst [a, b, c, d, e, f] = batch.transform;\n\t\t\tconst paragraphToLayer = [\n\t\t\t\ta,\n\t\t\t\tb,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tc,\n\t\t\t\td,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t\te,\n\t\t\t\tf,\n\t\t\t\t0,\n\t\t\t\t1\n\t\t\t];\n\t\t\tthis.slug3dPipeline.draw(pass, cameraBindGroup, lightsBindGroup, batch.font, batch.instances, batch.instanceCount, {\n\t\t\t\tmodelMatrix: Matrix4Math.multiply(layerToWorld, paragraphToLayer),\n\t\t\t\tnormalMatrix,\n\t\t\t\topacity: batch.opacity * (opts.opacity ?? 1),\n\t\t\t\tslant: batch.slant,\n\t\t\t\ttwoSided: opts.twoSided ?? true,\n\t\t\t\tdepthPull: TEXT_STACK_PULL * (stackBase + i + 1),\n\t\t\t\tmaterial: opts.material,\n\t\t\t\tshininess: opts.shininess ?? 32,\n\t\t\t\troughness: opts.roughness,\n\t\t\t\tspecularIntensity: opts.specularIntensity ?? .5,\n\t\t\t\tambientIntensity: opts.ambientIntensity ?? 1,\n\t\t\t\tmetallic: opts.metallic\n\t\t\t}, useMrt);\n\t\t}\n\t}\n\tdrawTextureQuad(pass, cameraBindGroup, lightsBindGroup, texture, opts, useMrt = false) {\n\t\tconst { width, height, opacity = 1, colorTint = [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t], borderColor, borderWidth = 0, borderRadius = 0, twoSided = true, material = \"lit\", shininess = 32, roughness, specularIntensity = .5, ambientIntensity = 1, metallic } = opts;\n\t\tconst m = this.quadModelMatrix(opts);\n\t\tconst normalMatrix = opts.normalMatrix ?? Light3D.computeNormalMatrix(m);\n\t\tconst sampler = this.samplerCache.getSampler(this.device);\n\t\tlet parsedBorderColor;\n\t\tif (borderColor) if (Array.isArray(borderColor)) parsedBorderColor = borderColor;\n\t\telse {\n\t\t\tconst c = parseColor(borderColor);\n\t\t\tparsedBorderColor = [\n\t\t\t\tc.r,\n\t\t\t\tc.g,\n\t\t\t\tc.b,\n\t\t\t\tc.a\n\t\t\t];\n\t\t}\n\t\tthis.quad3dPipeline.draw(pass, cameraBindGroup, lightsBindGroup, texture, sampler, {\n\t\t\tmodelMatrix: m,\n\t\t\tnormalMatrix,\n\t\t\tcolorTint,\n\t\t\tborderColor: parsedBorderColor,\n\t\t\tborderWidth,\n\t\t\topacity,\n\t\t\tborderRadius,\n\t\t\ttwoSided,\n\t\t\twidth,\n\t\t\theight,\n\t\t\ttextureExtent: opts.textureExtent,\n\t\t\tmaterial,\n\t\t\tshininess,\n\t\t\troughness,\n\t\t\tspecularIntensity,\n\t\t\tambientIntensity,\n\t\t\tmetallic\n\t\t}, useMrt);\n\t}\n\tgetOrCreateMeshBuffers(mesh) {\n\t\tlet cached$1 = this.meshBuffersCache.get(mesh);\n\t\tif (cached$1) return cached$1;\n\t\tconst numVerts = mesh.positions.length / 3;\n\t\tconst vertexData = new Float32Array(numVerts * 16);\n\t\tfor (let i = 0; i < numVerts; i++) {\n\t\t\tconst offset = i * 16;\n\t\t\tvertexData[offset] = mesh.positions[i * 3] ?? 0;\n\t\t\tvertexData[offset + 1] = mesh.positions[i * 3 + 1] ?? 0;\n\t\t\tvertexData[offset + 2] = mesh.positions[i * 3 + 2] ?? 0;\n\t\t\tvertexData[offset + 3] = mesh.uvs[i * 2] ?? 0;\n\t\t\tvertexData[offset + 4] = mesh.uvs[i * 2 + 1] ?? 0;\n\t\t\tvertexData[offset + 5] = mesh.normals[i * 3] ?? 0;\n\t\t\tvertexData[offset + 6] = mesh.normals[i * 3 + 1] ?? 0;\n\t\t\tvertexData[offset + 7] = mesh.normals[i * 3 + 2] ?? 1;\n\t\t\tif (mesh.jointIndices) {\n\t\t\t\tvertexData[offset + 8] = mesh.jointIndices[i * 4] ?? 0;\n\t\t\t\tvertexData[offset + 9] = mesh.jointIndices[i * 4 + 1] ?? 0;\n\t\t\t\tvertexData[offset + 10] = mesh.jointIndices[i * 4 + 2] ?? 0;\n\t\t\t\tvertexData[offset + 11] = mesh.jointIndices[i * 4 + 3] ?? 0;\n\t\t\t} else {\n\t\t\t\tvertexData[offset + 8] = 0;\n\t\t\t\tvertexData[offset + 9] = 0;\n\t\t\t\tvertexData[offset + 10] = 0;\n\t\t\t\tvertexData[offset + 11] = 0;\n\t\t\t}\n\t\t\tif (mesh.jointWeights) {\n\t\t\t\tvertexData[offset + 12] = mesh.jointWeights[i * 4] ?? 0;\n\t\t\t\tvertexData[offset + 13] = mesh.jointWeights[i * 4 + 1] ?? 0;\n\t\t\t\tvertexData[offset + 14] = mesh.jointWeights[i * 4 + 2] ?? 0;\n\t\t\t\tvertexData[offset + 15] = mesh.jointWeights[i * 4 + 3] ?? 0;\n\t\t\t} else {\n\t\t\t\tvertexData[offset + 12] = 0;\n\t\t\t\tvertexData[offset + 13] = 0;\n\t\t\t\tvertexData[offset + 14] = 0;\n\t\t\t\tvertexData[offset + 15] = 0;\n\t\t\t}\n\t\t}\n\t\tconst alignedVertexByteLength = Math.ceil(vertexData.byteLength / 4) * 4;\n\t\tconst vertexBuffer = this.device.createBuffer({\n\t\t\tsize: Math.max(4, alignedVertexByteLength),\n\t\t\tusage: GPUBufferUsage.VERTEX | GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tnew Float32Array(vertexBuffer.getMappedRange()).set(vertexData);\n\t\tvertexBuffer.unmap();\n\t\tconst is32Bit = mesh.indices instanceof Uint32Array;\n\t\tconst alignedIndexByteLength = Math.ceil(mesh.indices.byteLength / 4) * 4;\n\t\tconst indexBuffer = this.device.createBuffer({\n\t\t\tsize: Math.max(4, alignedIndexByteLength),\n\t\t\tusage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,\n\t\t\tmappedAtCreation: true\n\t\t});\n\t\tif (is32Bit) new Uint32Array(indexBuffer.getMappedRange()).set(mesh.indices);\n\t\telse new Uint16Array(indexBuffer.getMappedRange()).set(mesh.indices);\n\t\tindexBuffer.unmap();\n\t\tcached$1 = {\n\t\t\tvertexBuffer,\n\t\t\tindexBuffer,\n\t\t\tindexCount: mesh.indices.length,\n\t\t\tindexFormat: is32Bit ? \"uint32\" : \"uint16\"\n\t\t};\n\t\tthis.meshBuffersCache.set(mesh, cached$1);\n\t\treturn cached$1;\n\t}\n\tdeformMesh(encoder, mesh, audioDeform) {\n\t\tconst meshBuffers = this.getOrCreateMeshBuffers(mesh);\n\t\tconst numVerts = mesh.positions.length / 3;\n\t\treturn {\n\t\t\tvertexBuffer: this.audioMeshDeformPipeline.execute(encoder, meshBuffers.vertexBuffer, {\n\t\t\t\tconfig: audioDeform.config,\n\t\t\t\taudioLatentBuffer: audioDeform.latentBuffer,\n\t\t\t\tvertexCount: numVerts,\n\t\t\t\ttimeMs: audioDeform.timeMs,\n\t\t\t\tsampleRate: audioDeform.sampleRate\n\t\t\t}),\n\t\t\tindexBuffer: meshBuffers.indexBuffer,\n\t\t\tindexCount: meshBuffers.indexCount,\n\t\t\tindexFormat: meshBuffers.indexFormat\n\t\t};\n\t}\n\tdrawMesh3D(pass, cameraBindGroup, lightsBindGroup, meshOrBuffers, texture, opts = {}, useMrt = false) {\n\t\tconst meshBuffers = \"vertexBuffer\" in meshOrBuffers ? meshOrBuffers : this.getOrCreateMeshBuffers(meshOrBuffers);\n\t\tconst { position = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t], rotation = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t], scale = [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t], opacity = 1, colorTint = [\n\t\t\t1,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t], twoSided = true, wireframe = false, isSkinned = false, skinningMatrices, material = \"lit\", shadeColor, alphaCutoff, textureWrap = \"clamp\", shininess = 32, roughness, specularIntensity = .5, ambientIntensity = 1, metallic } = opts;\n\t\tlet m;\n\t\tif (opts.modelMatrix) m = opts.modelMatrix;\n\t\telse {\n\t\t\tm = Matrix4Math.identity();\n\t\t\tm = Matrix4Math.multiply(m, Matrix4Math.translate(position[0], position[1], position[2]));\n\t\t\tconst rxRad = rotation[0] * Math.PI / 180;\n\t\t\tconst ryRad = rotation[1] * Math.PI / 180;\n\t\t\tconst rzRad = rotation[2] * Math.PI / 180;\n\t\t\tif (rzRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateZ(rzRad));\n\t\t\tif (ryRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateY(ryRad));\n\t\t\tif (rxRad !== 0) m = Matrix4Math.multiply(m, Matrix4Math.rotateX(rxRad));\n\t\t\tm = Matrix4Math.multiply(m, Matrix4Math.scale(scale[0], scale[1], scale[2]));\n\t\t}\n\t\tconst normalMatrix = opts.normalMatrix ?? Light3D.computeNormalMatrix(m);\n\t\tconst address = ADDRESS_MODES[textureWrap];\n\t\tconst sampler = this.samplerCache.getSampler(this.device, {\n\t\t\taddressModeU: address,\n\t\t\taddressModeV: address\n\t\t});\n\t\tthis.mesh3dPipeline.draw(pass, cameraBindGroup, lightsBindGroup, meshBuffers, texture, sampler, {\n\t\t\tmodelMatrix: m,\n\t\t\tnormalMatrix,\n\t\t\tcolorTint,\n\t\t\topacity,\n\t\t\ttwoSided,\n\t\t\twireframe,\n\t\t\tisSkinned,\n\t\t\tskinningMatrices,\n\t\t\tmaterial,\n\t\t\tshadeColor,\n\t\t\talphaCutoff,\n\t\t\tshininess,\n\t\t\troughness,\n\t\t\tspecularIntensity,\n\t\t\tambientIntensity,\n\t\t\tmetallic\n\t\t}, useMrt);\n\t}\n\tloadModel(srcOrData, format = \"auto\", options = {}) {\n\t\tif (typeof srcOrData !== \"string\") return loadModel3D(srcOrData, format, options);\n\t\tconst key = `${format}|${JSON.stringify(options)}|${srcOrData}`;\n\t\tlet model = this.modelCache.get(key);\n\t\tif (!model) {\n\t\t\tmodel = loadModel3D(srcOrData, format, options);\n\t\t\tthis.modelCache.set(key, model);\n\t\t}\n\t\treturn model;\n\t}\n\t/**\n\t* The material's diffuse texture on the GPU, decoded once with a full mip\n\t* chain (a character's 2K maps are drawn a few hundred pixels tall).\n\t*/\n\tmaterialTexture(material) {\n\t\tlet pending = this.materialTextures.get(material);\n\t\tif (!pending) {\n\t\t\tpending = this.uploadMaterialTexture(material);\n\t\t\tthis.materialTextures.set(material, pending);\n\t\t}\n\t\treturn pending;\n\t}\n\tasync uploadMaterialTexture(material) {\n\t\tconst encoded = material.diffuseTextureBuffer;\n\t\tif (!encoded) return void 0;\n\t\tconst sharp = (await import(\n\t\t\t/* webpackIgnore: true */\n\t\t\t\"sharp\"\n)).default;\n\t\tconst source = Buffer.from(encoded instanceof Uint8Array ? encoded : new Uint8Array(encoded));\n\t\tconst { width, height } = await sharp(source).metadata();\n\t\tif (!width || !height) return void 0;\n\t\tconst mipLevelCount = Math.floor(Math.log2(Math.max(width, height))) + 1;\n\t\tconst texture = this.device.createTexture({\n\t\t\tlabel: `Material:${material.name}`,\n\t\t\tsize: {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t},\n\t\t\tmipLevelCount,\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tfor (let level = 0; level < mipLevelCount; level++) {\n\t\t\tconst w = Math.max(1, width >> level);\n\t\t\tconst h = Math.max(1, height >> level);\n\t\t\tconst data = await sharp(source).ensureAlpha().resize(w, h, { fit: \"fill\" }).raw().toBuffer();\n\t\t\tthis.device.queue.writeTexture({\n\t\t\t\ttexture,\n\t\t\t\tmipLevel: level\n\t\t\t}, data, {\n\t\t\t\tbytesPerRow: w * 4,\n\t\t\t\trowsPerImage: h\n\t\t\t}, {\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t});\n\t\t}\n\t\treturn texture;\n\t}\n\tapplyDepthOfField(encoder, sourceColorTex, depthTex, destView, cameraBuffer) {\n\t\tconst sampler = this.samplerCache.getSampler(this.device);\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.dofBindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: cameraBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sourceColorTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: depthTex.createView()\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: destView,\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tpass.setPipeline(this.dofPipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.draw(3);\n\t\tpass.end();\n\t}\n\tdestroy() {\n\t\tthis.depthTexture?.destroy();\n\t\tthis.linearDepthTexture?.destroy();\n\t\tthis.msaaColorTexture?.destroy();\n\t\tthis.msaaLinearDepthTexture?.destroy();\n\t\tthis.quad3dPipeline.destroy();\n\t\tthis.slug3dPipeline.destroy();\n\t\tthis.mesh3dPipeline.destroy();\n\t\tthis.cameraPool.destroy();\n\t\tthis.lightsPool.destroy();\n\t\tthis.cameraUniformBindGroupCache.destroy();\n\t\tthis.lightsUniformBindGroupCache.destroy();\n\t}\n};\nfunction loadModel3D(srcOrData, format = \"auto\", options = {}) {\n\tif (format === \"gltf\" || format === \"glb\") return loadGLTF(srcOrData, options);\n\tif (format === \"stl\") return loadSTL(srcOrData, options);\n\tif (format === \"ply\") return loadPLY(srcOrData, options);\n\tif (format === \"vox\") return loadVOX(srcOrData, options);\n\tif (format === \"3ds\") return load3DS(srcOrData, options);\n\tif (format === \"off\") return loadOFF(srcOrData, options);\n\tif (format === \"fbx\") return loadFBX(srcOrData, options);\n\tif (format === \"obj\") return loadOBJ(srcOrData, void 0, options);\n\tconst isBinary = typeof srcOrData !== \"string\";\n\tconst srcStr = typeof srcOrData === \"string\" ? srcOrData.trim() : \"\";\n\tconst lowerSrc = srcStr.toLowerCase();\n\tif (lowerSrc.endsWith(\".glb\") || lowerSrc.endsWith(\".gltf\")) return loadGLTF(srcOrData, options);\n\tif (lowerSrc.endsWith(\".stl\")) return loadSTL(srcOrData, options);\n\tif (lowerSrc.endsWith(\".ply\")) return loadPLY(srcOrData, options);\n\tif (lowerSrc.endsWith(\".vox\")) return loadVOX(srcOrData, options);\n\tif (lowerSrc.endsWith(\".3ds\")) return load3DS(srcOrData, options);\n\tif (lowerSrc.endsWith(\".off\")) return loadOFF(srcOrData, options);\n\tif (lowerSrc.endsWith(\".fbx\")) return loadFBX(srcOrData, options);\n\tif (lowerSrc.endsWith(\".obj\")) return loadOBJ(srcOrData, void 0, options);\n\tif (isBinary) {\n\t\tconst bytes = srcOrData instanceof Uint8Array ? srcOrData : new Uint8Array(srcOrData);\n\t\tif (GltfLoader.isGlb(bytes)) return loadGLB(bytes, options);\n\t\tif (FbxLoader.isBinary(bytes)) return loadFBX(bytes, options);\n\t\tif (VoxLoader.isVox(bytes)) return loadVOX(bytes, options);\n\t\tif (ThreeDSLoader.is3DS(bytes)) return load3DS(bytes, options);\n\t\tif (bytes.length >= 3 && bytes[0] === 112 && bytes[1] === 108 && bytes[2] === 121) return loadPLY(bytes, options);\n\t\tif (StlLoader.isBinary(bytes)) return loadSTL(bytes, options);\n\t\treturn loadOBJ(bytes, void 0, options);\n\t}\n\tif (srcStr.startsWith(\"{\") && (srcStr.includes(\"\\\"asset\\\"\") || srcStr.includes(\"\\\"meshes\\\"\"))) return loadGLTF(srcStr, options);\n\tif (srcStr.startsWith(\"ply\") || srcStr.startsWith(\"PLY\")) return loadPLY(srcStr, options);\n\tif (srcStr.startsWith(\"OFF\") || srcStr.startsWith(\"NOFF\") || srcStr.startsWith(\"COFF\")) return loadOFF(srcStr, options);\n\tif (srcStr.includes(\"FBXHeaderExtension\") || srcStr.includes(\"Kaydara FBX\")) return loadFBX(srcStr, options);\n\tif (srcStr.startsWith(\"solid\") && srcStr.includes(\"facet\")) return loadSTL(srcStr, options);\n\treturn loadOBJ(srcOrData, void 0, options);\n}\n\n//#endregion\n//#region src/renderer3d/shadow-pipeline.ts\n/**\n* @file packages/webgpu-renderers/src/renderer3d/shadow-pipeline.ts\n* Directional and Point Light Shadow Map Generator with Percentage Closer Filtering (PCF).\n*/\nvar ShadowPipeline = class {\n\tshadowDepthTexture;\n\tshadowDepthView;\n\tshadowComparisonSampler;\n\tlightViewProjMatrix;\n\tconstructor(device, resolution = 2048) {\n\t\tthis.lightViewProjMatrix = Matrix4Math.identity();\n\t\tthis.shadowDepthTexture = device.createTexture({\n\t\t\tlabel: \"shadow-depth-map\",\n\t\t\tsize: [\n\t\t\t\tresolution,\n\t\t\t\tresolution,\n\t\t\t\t1\n\t\t\t],\n\t\t\tformat: \"depth32float\",\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n\t\t});\n\t\tthis.shadowDepthView = this.shadowDepthTexture.createView({ label: \"shadow-depth-view\" });\n\t\tthis.shadowComparisonSampler = device.createSampler({\n\t\t\tlabel: \"shadow-pcf-sampler\",\n\t\t\tcompare: \"less-equal\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t});\n\t}\n\tcomputeDirectionalLightMatrix(lightPos, targetPos, orthoSize = 2e3, near = 10, far = 4e3) {\n\t\tconst viewMatrix = Matrix4Math.lookAt(lightPos, targetPos, [\n\t\t\t0,\n\t\t\t1,\n\t\t\t0\n\t\t]);\n\t\tconst half = orthoSize * .5;\n\t\tconst projMatrix = Matrix4Math.orthographic(-half, half, -half, half, near, far);\n\t\tthis.lightViewProjMatrix = Matrix4Math.multiply(projMatrix, viewMatrix);\n\t\treturn this.lightViewProjMatrix;\n\t}\n\tdestroy() {\n\t\tthis.shadowDepthTexture.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer3d/ssao-pipeline.ts\n/**\n* @file packages/webgpu-renderers/src/renderer3d/ssao-pipeline.ts\n* WebGPU render pipeline for Screen-Space Ambient Occlusion (SSAO) and Bilateral Cross-Blur.\n*/\nvar SSAOPipeline = class {\n\tdevice;\n\tssaoPipeline;\n\tblurPipeline;\n\tssaoBindGroupLayout;\n\tblurBindGroupLayout;\n\tssaoUniformBuffer;\n\tblurUniformBuffer;\n\tkernelBuffer;\n\tnoiseTexture;\n\tsampler;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.noiseTexture = device.createTexture({\n\t\t\tlabel: \"ssao-noise-tex\",\n\t\t\tsize: [\n\t\t\t\t4,\n\t\t\t\t4,\n\t\t\t\t1\n\t\t\t],\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t});\n\t\tconst noiseData = new Uint8Array(64);\n\t\tfor (let i = 0; i < 16; i++) {\n\t\t\tnoiseData[i * 4 + 0] = Math.floor(Math.random() * 255);\n\t\t\tnoiseData[i * 4 + 1] = Math.floor(Math.random() * 255);\n\t\t\tnoiseData[i * 4 + 2] = 128;\n\t\t\tnoiseData[i * 4 + 3] = 255;\n\t\t}\n\t\tdevice.queue.writeTexture({ texture: this.noiseTexture }, noiseData, { bytesPerRow: 16 }, [\n\t\t\t4,\n\t\t\t4,\n\t\t\t1\n\t\t]);\n\t\tconst kernelFloats = new Float32Array(128);\n\t\tfor (let i = 0; i < 32; i++) {\n\t\t\tconst u1 = Math.random();\n\t\t\tconst u2 = Math.random();\n\t\t\tconst theta = Math.acos(Math.sqrt(1 - u1));\n\t\t\tconst phi = 2 * Math.PI * u2;\n\t\t\tlet scale = (i + 1) / 32;\n\t\t\tscale = .1 + .9 * (scale * scale);\n\t\t\tkernelFloats[i * 4 + 0] = Math.sin(theta) * Math.cos(phi) * scale;\n\t\t\tkernelFloats[i * 4 + 1] = Math.sin(theta) * Math.sin(phi) * scale;\n\t\t\tkernelFloats[i * 4 + 2] = Math.cos(theta) * scale;\n\t\t\tkernelFloats[i * 4 + 3] = 0;\n\t\t}\n\t\tthis.kernelBuffer = device.createBuffer({\n\t\t\tlabel: \"ssao-kernel-buffer\",\n\t\t\tsize: kernelFloats.byteLength,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tdevice.queue.writeBuffer(this.kernelBuffer, 0, kernelFloats);\n\t\tconst ssaoShader = device.createShaderModule({\n\t\t\tlabel: \"ssao-shader\",\n\t\t\tcode: ssaoWgsl\n\t\t});\n\t\tthis.ssaoBindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"ssao-bgl\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"depth\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"read-only-storage\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tthis.ssaoPipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ssao-eval-pipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.ssaoBindGroupLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: ssaoShader,\n\t\t\t\tentryPoint: \"vs_main\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: ssaoShader,\n\t\t\t\tentryPoint: \"fs_ssao\",\n\t\t\t\ttargets: [{ format: \"r8unorm\" }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tthis.ssaoUniformBuffer = device.createBuffer({\n\t\t\tlabel: \"ssao-uniforms\",\n\t\t\tsize: 256,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tconst blurShader = device.createShaderModule({\n\t\t\tlabel: \"ssao-blur-shader\",\n\t\t\tcode: ssaoBlurWgsl\n\t\t});\n\t\tthis.blurBindGroupLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"ssao-blur-bgl\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"depth\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tthis.blurPipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ssao-blur-pipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [this.blurBindGroupLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: blurShader,\n\t\t\t\tentryPoint: \"vs_main\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: blurShader,\n\t\t\t\tentryPoint: \"fs_blur\",\n\t\t\t\ttargets: [{ format: \"r8unorm\" }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tthis.blurUniformBuffer = device.createBuffer({\n\t\t\tlabel: \"ssao-blur-uniforms\",\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tthis.sampler = device.createSampler({\n\t\t\tlabel: \"ssao-sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"repeat\",\n\t\t\taddressModeV: \"repeat\"\n\t\t});\n\t}\n\trender(commandEncoder, depthView, normalView, rawAOView, finalAOView, options) {\n\t\tconst invProj = options.invProjMatrix ?? Matrix4Math.invert(options.projMatrix) ?? Matrix4Math.identity();\n\t\tconst uBuf = new Float32Array(64);\n\t\tuBuf.set(options.projMatrix, 0);\n\t\tuBuf.set(invProj, 16);\n\t\tuBuf.set(options.viewMatrix, 32);\n\t\tuBuf[48] = options.radius ?? 45;\n\t\tuBuf[49] = options.bias ?? .025;\n\t\tuBuf[50] = options.intensity ?? 1.5;\n\t\tnew Uint32Array(uBuf.buffer)[51] = options.kernelSamples ?? 16;\n\t\tuBuf[52] = options.width;\n\t\tuBuf[53] = options.height;\n\t\tthis.device.queue.writeBuffer(this.ssaoUniformBuffer, 0, uBuf);\n\t\tconst ssaoBG = this.device.createBindGroup({\n\t\t\tlabel: \"ssao-eval-bg\",\n\t\t\tlayout: this.ssaoBindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: depthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: normalView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: this.noiseTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: this.kernelBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: { buffer: this.ssaoUniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass1 = commandEncoder.beginRenderPass({\n\t\t\tlabel: \"ssao-eval-pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: rawAOView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 1,\n\t\t\t\t\tg: 1,\n\t\t\t\t\tb: 1,\n\t\t\t\t\ta: 1\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass1.setPipeline(this.ssaoPipeline);\n\t\tpass1.setBindGroup(0, ssaoBG);\n\t\tpass1.draw(4);\n\t\tpass1.end();\n\t\tconst bBuf = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst bf32 = new Float32Array(bBuf);\n\t\tconst bi32 = new Int32Array(bBuf);\n\t\tbf32[0] = options.width;\n\t\tbf32[1] = options.height;\n\t\tbi32[2] = options.blurRadius ?? 4;\n\t\tbf32[3] = options.depthThreshold ?? .05;\n\t\tthis.device.queue.writeBuffer(this.blurUniformBuffer, 0, bBuf);\n\t\tconst blurBG = this.device.createBindGroup({\n\t\t\tlabel: \"ssao-blur-bg\",\n\t\t\tlayout: this.blurBindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: rawAOView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: depthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: this.sampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: this.blurUniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass2 = commandEncoder.beginRenderPass({\n\t\t\tlabel: \"ssao-blur-pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: finalAOView,\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 1,\n\t\t\t\t\tg: 1,\n\t\t\t\t\tb: 1,\n\t\t\t\t\ta: 1\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass2.setPipeline(this.blurPipeline);\n\t\tpass2.setBindGroup(0, blurBG);\n\t\tpass2.draw(4);\n\t\tpass2.end();\n\t}\n\tdestroy() {\n\t\tthis.ssaoUniformBuffer.destroy();\n\t\tthis.blurUniformBuffer.destroy();\n\t\tthis.noiseTexture.destroy();\n\t}\n};\n\n//#endregion\n//#region src/renderer3d/text-extruder.ts\nfunction parseHexOrRgbColor(colorStr) {\n\tconst c = colorStr.trim();\n\tif (c.startsWith(\"#\")) {\n\t\tconst hex = c.slice(1);\n\t\tif (hex.length === 3) return [\n\t\t\tNumber.parseInt(hex[0] + hex[0], 16) / 255,\n\t\t\tNumber.parseInt(hex[1] + hex[1], 16) / 255,\n\t\t\tNumber.parseInt(hex[2] + hex[2], 16) / 255,\n\t\t\t1\n\t\t];\n\t\tif (hex.length === 6) return [\n\t\t\tNumber.parseInt(hex.slice(0, 2), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(2, 4), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(4, 6), 16) / 255,\n\t\t\t1\n\t\t];\n\t\tif (hex.length === 8) return [\n\t\t\tNumber.parseInt(hex.slice(0, 2), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(2, 4), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(4, 6), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(6, 8), 16) / 255\n\t\t];\n\t}\n\tif (c.startsWith(\"rgb\")) {\n\t\tconst parts = c.replace(/rgba?\\(/, \"\").replace(/\\)/, \"\").split(\",\").map((p) => Number.parseFloat(p.trim()));\n\t\treturn [\n\t\t\t(parts[0] ?? 0) / 255,\n\t\t\t(parts[1] ?? 0) / 255,\n\t\t\t(parts[2] ?? 0) / 255,\n\t\t\tparts[3] !== void 0 ? parts[3] : 1\n\t\t];\n\t}\n\treturn [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n}\nfunction computeContourSignedArea(contour) {\n\tlet area = 0;\n\tconst len = contour.length;\n\tfor (let i = 0; i < len; i++) {\n\t\tconst j = (i + 1) % len;\n\t\tarea += contour[i].x * contour[j].y - contour[j].x * contour[i].y;\n\t}\n\treturn area / 2;\n}\nfunction isPointInsidePolygon(p, poly) {\n\tlet inside = false;\n\tconst len = poly.length;\n\tfor (let i = 0, j = len - 1; i < len; j = i++) {\n\t\tconst xi = poly[i].x;\n\t\tconst yi = poly[i].y;\n\t\tconst xj = poly[j].x;\n\t\tconst yj = poly[j].y;\n\t\tif (yi > p.y !== yj > p.y && p.x < (xj - xi) * (p.y - yi) / (yj - yi) + xi) inside = !inside;\n\t}\n\treturn inside;\n}\nconst DEFAULT_CURVE_TOLERANCE = .1;\nconst MAX_CURVE_SEGMENTS = 64;\n/**\n* Segments needed for a polyline through n uniform steps of a curve to stay\n* within `tolerance`: the chord error is at most max|B''| / (8 n^2).\n*/\nfunction curveSegmentCount(maxSecondDerivative, flattening) {\n\tif (flattening.segments !== void 0) return flattening.segments;\n\tconst n = Math.ceil(Math.sqrt(maxSecondDerivative / (8 * flattening.tolerance)));\n\treturn Math.min(MAX_CURVE_SEGMENTS, Math.max(1, n));\n}\nfunction processCurveQuadratic(p0, cp, end, flattening, out) {\n\tconst segments = curveSegmentCount(2 * Math.hypot(p0.x - 2 * cp.x + end.x, p0.y - 2 * cp.y + end.y), flattening);\n\tfor (let s = 1; s <= segments; s++) {\n\t\tconst t = s / segments;\n\t\tconst mt = 1 - t;\n\t\tout.push({\n\t\t\tx: mt * mt * p0.x + 2 * mt * t * cp.x + t * t * end.x,\n\t\t\ty: mt * mt * p0.y + 2 * mt * t * cp.y + t * t * end.y\n\t\t});\n\t}\n}\nfunction processCurveCubic(p0, cp1, cp2, end, flattening, out) {\n\tconst segments = curveSegmentCount(6 * Math.max(Math.hypot(p0.x - 2 * cp1.x + cp2.x, p0.y - 2 * cp1.y + cp2.y), Math.hypot(cp1.x - 2 * cp2.x + end.x, cp1.y - 2 * cp2.y + end.y)), flattening);\n\tfor (let s = 1; s <= segments; s++) {\n\t\tconst t = s / segments;\n\t\tconst mt = 1 - t;\n\t\tout.push({\n\t\t\tx: mt * mt * mt * p0.x + 3 * mt * mt * t * cp1.x + 3 * mt * t * t * cp2.x + t * t * t * end.x,\n\t\t\ty: mt * mt * mt * p0.y + 3 * mt * mt * t * cp1.y + 3 * mt * t * t * cp2.y + t * t * t * end.y\n\t\t});\n\t}\n}\nfunction extractGlyphContours(glyph, glyphX, glyphY, scale, flattening) {\n\tconst svg = glyph.path?.toSVG();\n\tif (!svg) return [];\n\tlet edges;\n\ttry {\n\t\tedges = new Path2D(svg).simplify().edges;\n\t} catch {\n\t\treturn [];\n\t}\n\tconst contours = [];\n\tlet curr = {\n\t\tx: 0,\n\t\ty: 0\n\t};\n\tlet current = [];\n\tconst finishCurrent = () => {\n\t\tif (current.length >= 3) {\n\t\t\tconst first = current[0];\n\t\t\tconst last = current[current.length - 1];\n\t\t\tif (Math.hypot(last.x - first.x, last.y - first.y) < 1e-4) current.pop();\n\t\t\tif (current.length >= 3) contours.push(current);\n\t\t}\n\t\tcurrent = [];\n\t};\n\tfor (const edge of edges) {\n\t\tconst name = edge[0];\n\t\tconst args = edge.slice(1);\n\t\tif (name === \"moveTo\") {\n\t\t\tfinishCurrent();\n\t\t\tcurr = {\n\t\t\t\tx: (glyphX + args[0]) * scale,\n\t\t\t\ty: -(glyphY + args[1]) * scale\n\t\t\t};\n\t\t\tcurrent = [curr];\n\t\t} else if (name === \"lineTo\") {\n\t\t\tcurr = {\n\t\t\t\tx: (glyphX + args[0]) * scale,\n\t\t\t\ty: -(glyphY + args[1]) * scale\n\t\t\t};\n\t\t\tcurrent.push(curr);\n\t\t} else if (name === \"quadraticCurveTo\") {\n\t\t\tconst cp = {\n\t\t\t\tx: (glyphX + args[0]) * scale,\n\t\t\t\ty: -(glyphY + args[1]) * scale\n\t\t\t};\n\t\t\tconst end = {\n\t\t\t\tx: (glyphX + args[2]) * scale,\n\t\t\t\ty: -(glyphY + args[3]) * scale\n\t\t\t};\n\t\t\tprocessCurveQuadratic(curr, cp, end, flattening, current);\n\t\t\tcurr = end;\n\t\t} else if (name === \"bezierCurveTo\") {\n\t\t\tconst cp1 = {\n\t\t\t\tx: (glyphX + args[0]) * scale,\n\t\t\t\ty: -(glyphY + args[1]) * scale\n\t\t\t};\n\t\t\tconst cp2 = {\n\t\t\t\tx: (glyphX + args[2]) * scale,\n\t\t\t\ty: -(glyphY + args[3]) * scale\n\t\t\t};\n\t\t\tconst end = {\n\t\t\t\tx: (glyphX + args[4]) * scale,\n\t\t\t\ty: -(glyphY + args[5]) * scale\n\t\t\t};\n\t\t\tprocessCurveCubic(curr, cp1, cp2, end, flattening, current);\n\t\t\tcurr = end;\n\t\t} else if (name === \"closePath\") finishCurrent();\n\t}\n\tfinishCurrent();\n\treturn contours;\n}\n/** Side-wall segments meeting at more than this angle (30°) keep a hard edge. */\nconst SIDE_CREASE_COS = Math.cos(30 * Math.PI / 180);\n/**\n* Group a glyph's contours into filled outlines and their holes by nesting\n* depth: a contour inside an even number of others is an outline (the ring\n* of \"O\", or the \"R\" sitting in the counter of \"®\"), one inside an odd number\n* is a hole of the smallest outline around it.\n*/\nfunction organizeGlyphPolygons(glyphContours) {\n\tconst contours = glyphContours.map((contour) => ({\n\t\tcontour,\n\t\tarea: Math.abs(computeContourSignedArea(contour))\n\t}));\n\tcontours.sort((a, b) => b.area - a.area);\n\tconst containers = contours.map(() => []);\n\tfor (let i = 0; i < contours.length; i++) {\n\t\tconst inner = contours[i].contour;\n\t\tconst mid = inner[Math.floor(inner.length / 2)];\n\t\tfor (let j = 0; j < i; j++) {\n\t\t\tif (contours[j].area <= contours[i].area) continue;\n\t\t\tconst outer = contours[j].contour;\n\t\t\tif (isPointInsidePolygon(inner[0], outer) || isPointInsidePolygon(mid, outer)) containers[i].push(j);\n\t\t}\n\t}\n\tconst polygons = [];\n\tconst polygonOf = /* @__PURE__ */ new Map();\n\tfor (let i = 0; i < contours.length; i++) {\n\t\tconst around = containers[i];\n\t\tif (around.length % 2 === 0) {\n\t\t\tconst poly = {\n\t\t\t\touter: contours[i].contour,\n\t\t\t\tholes: []\n\t\t\t};\n\t\t\tpolygons.push(poly);\n\t\t\tpolygonOf.set(i, poly);\n\t\t} else polygonOf.get(around[around.length - 1])?.holes.push(contours[i].contour);\n\t}\n\treturn polygons;\n}\n/**\n* A glyph's outlines are flattened and sorted into outlines and holes once per\n* font, size and flattening, at the glyph origin; each use gets a translated\n* copy (callers reorder and move the points they are given).\n*/\nconst glyphOutlineCache = /* @__PURE__ */ new WeakMap();\nfunction glyphPolygonsAt(font, glyph, glyphX, glyphY, scale, flattening) {\n\tlet byGlyph = glyphOutlineCache.get(font);\n\tif (!byGlyph) {\n\t\tbyGlyph = /* @__PURE__ */ new Map();\n\t\tglyphOutlineCache.set(font, byGlyph);\n\t}\n\tconst key = `${glyph.id}|${scale}|${flattening.segments ?? \"\"}|${flattening.tolerance}`;\n\tlet atOrigin = byGlyph.get(key);\n\tif (!atOrigin) {\n\t\tatOrigin = organizeGlyphPolygons(extractGlyphContours(glyph, 0, 0, scale, flattening));\n\t\tbyGlyph.set(key, atOrigin);\n\t}\n\tconst dx = glyphX * scale;\n\tconst dy = -glyphY * scale;\n\tconst moved = (c) => c.map((p) => ({\n\t\tx: p.x + dx,\n\t\ty: p.y + dy\n\t}));\n\treturn atOrigin.map((poly) => ({\n\t\touter: moved(poly.outer),\n\t\tholes: poly.holes.map(moved)\n\t}));\n}\nfunction generateExtrudedTextGeometry(options) {\n\tconst font = options.font;\n\tconst fontSize = options.fontSize ?? 48;\n\tconst depth = options.depth ?? 20;\n\tconst halfDepth = depth / 2;\n\tconst flattening = {\n\t\tsegments: options.curveSegments !== void 0 ? Math.max(2, options.curveSegments) : void 0,\n\t\ttolerance: Math.max(.001, options.curveTolerance ?? DEFAULT_CURVE_TOLERANCE)\n\t};\n\tconst scale = fontSize / (font.unitsPerEm || 1e3);\n\tconst run = font.layout(options.text);\n\tlet cursorX = 0;\n\tconst polygons = [];\n\tfor (let i = 0; i < run.glyphs.length; i++) {\n\t\tconst glyph = run.glyphs[i];\n\t\tconst pos = run.positions[i];\n\t\tconst glyphPolys = glyphPolygonsAt(font, glyph, cursorX + (pos.xOffset ?? 0), pos.yOffset ?? 0, scale, flattening);\n\t\tfor (const gp of glyphPolys) polygons.push(gp);\n\t\tcursorX += (pos.xAdvance ?? glyph.advanceWidth ?? 0) + (options.letterSpacing ? options.letterSpacing / scale : 0);\n\t}\n\tlet minX = Number.POSITIVE_INFINITY;\n\tlet maxX = Number.NEGATIVE_INFINITY;\n\tlet minY = Number.POSITIVE_INFINITY;\n\tlet maxY = Number.NEGATIVE_INFINITY;\n\tfor (const poly of polygons) {\n\t\tfor (const p of poly.outer) {\n\t\t\tif (p.x < minX) minX = p.x;\n\t\t\tif (p.x > maxX) maxX = p.x;\n\t\t\tif (p.y < minY) minY = p.y;\n\t\t\tif (p.y > maxY) maxY = p.y;\n\t\t}\n\t\tfor (const hole of poly.holes) for (const p of hole) {\n\t\t\tif (p.x < minX) minX = p.x;\n\t\t\tif (p.x > maxX) maxX = p.x;\n\t\t\tif (p.y < minY) minY = p.y;\n\t\t\tif (p.y > maxY) maxY = p.y;\n\t\t}\n\t}\n\tif (!Number.isFinite(minX)) {\n\t\tminX = 0;\n\t\tmaxX = 0;\n\t\tminY = 0;\n\t\tmaxY = 0;\n\t}\n\tconst w = maxX - minX;\n\tconst h = maxY - minY;\n\tlet alignOffsetX = (minX + maxX) / 2;\n\tif (options.align === \"left\" || options.align === \"start\") alignOffsetX = minX;\n\tif (options.align === \"right\" || options.align === \"end\") alignOffsetX = maxX;\n\tlet alignOffsetY = (minY + maxY) / 2;\n\tif (options.verticalAlign === \"top\") alignOffsetY = minY;\n\tif (options.verticalAlign === \"bottom\") alignOffsetY = maxY;\n\tfor (const poly of polygons) {\n\t\tfor (const p of poly.outer) {\n\t\t\tp.x -= alignOffsetX;\n\t\t\tp.y -= alignOffsetY;\n\t\t}\n\t\tfor (const hole of poly.holes) for (const p of hole) {\n\t\t\tp.x -= alignOffsetX;\n\t\t\tp.y -= alignOffsetY;\n\t\t}\n\t}\n\tminX -= alignOffsetX;\n\tmaxX -= alignOffsetX;\n\tminY -= alignOffsetY;\n\tmaxY -= alignOffsetY;\n\tconst frontPositions = [];\n\tconst frontNormals = [];\n\tconst frontUvs = [];\n\tconst frontIndices = [];\n\tconst sidePositions = [];\n\tconst sideNormals = [];\n\tconst sideUvs = [];\n\tconst sideIndices = [];\n\tconst addColumn = (p, n, u) => {\n\t\tconst index = sidePositions.length / 3;\n\t\tsidePositions.push(p.x, p.y, halfDepth, p.x, p.y, -halfDepth);\n\t\tsideNormals.push(n.x, n.y, 0, n.x, n.y, 0);\n\t\tsideUvs.push(u, 0, u, 1);\n\t\treturn index;\n\t};\n\tconst addSideWall = (contour) => {\n\t\tconst pts = contour.filter((p, k) => {\n\t\t\tconst next = contour[(k + 1) % contour.length];\n\t\t\treturn Math.hypot(next.x - p.x, next.y - p.y) >= 1e-6;\n\t\t});\n\t\tconst count = pts.length;\n\t\tif (count < 2) return;\n\t\tconst edgeLengths = [];\n\t\tconst faceNormals = pts.map((p, k) => {\n\t\t\tconst next = pts[(k + 1) % count];\n\t\t\tconst len = Math.hypot(next.x - p.x, next.y - p.y);\n\t\t\tedgeLengths.push(len);\n\t\t\treturn {\n\t\t\t\tx: (next.y - p.y) / len,\n\t\t\t\ty: -(next.x - p.x) / len\n\t\t\t};\n\t\t});\n\t\tconst perimeter = edgeLengths.reduce((a, b) => a + b, 0);\n\t\tconst startColumn = [];\n\t\tconst endColumn = [];\n\t\tlet along = 0;\n\t\tfor (let k = 0; k < count; k++) {\n\t\t\tconst incoming = faceNormals[(k - 1 + count) % count];\n\t\t\tconst outgoing = faceNormals[k];\n\t\t\tconst u = along / perimeter;\n\t\t\tconst sx = incoming.x + outgoing.x;\n\t\t\tconst sy = incoming.y + outgoing.y;\n\t\t\tconst averaged = incoming.x * outgoing.x + incoming.y * outgoing.y >= SIDE_CREASE_COS ? {\n\t\t\t\tx: sx / Math.hypot(sx, sy),\n\t\t\t\ty: sy / Math.hypot(sx, sy)\n\t\t\t} : null;\n\t\t\tif (averaged && k > 0) startColumn[k] = endColumn[k] = addColumn(pts[k], averaged, u);\n\t\t\telse {\n\t\t\t\tendColumn[k] = addColumn(pts[k], averaged ?? incoming, k === 0 ? 1 : u);\n\t\t\t\tstartColumn[k] = addColumn(pts[k], averaged ?? outgoing, u);\n\t\t\t}\n\t\t\talong += edgeLengths[k];\n\t\t}\n\t\tfor (let k = 0; k < count; k++) {\n\t\t\tconst a = startColumn[k];\n\t\t\tconst b = endColumn[(k + 1) % count];\n\t\t\tsideIndices.push(a, b + 1, b);\n\t\t\tsideIndices.push(a, a + 1, b + 1);\n\t\t}\n\t};\n\tfor (const poly of polygons) {\n\t\tconst outer = poly.outer;\n\t\tif (computeContourSignedArea(outer) < 0) outer.reverse();\n\t\tfor (const hole of poly.holes) if (computeContourSignedArea(hole) > 0) hole.reverse();\n\t\tconst earcutCoords = [];\n\t\tconst holeIndices = [];\n\t\tfor (const p of outer) earcutCoords.push(p.x, p.y);\n\t\tfor (const hole of poly.holes) {\n\t\t\tholeIndices.push(earcutCoords.length / 2);\n\t\t\tfor (const p of hole) earcutCoords.push(p.x, p.y);\n\t\t}\n\t\tconst triangles = earcut(earcutCoords, holeIndices, 2);\n\t\tconst vertCount = earcutCoords.length / 2;\n\t\tconst frontBaseIdx = frontPositions.length / 3;\n\t\tfor (let v = 0; v < vertCount; v++) {\n\t\t\tconst vx = earcutCoords[v * 2];\n\t\t\tconst vy = earcutCoords[v * 2 + 1];\n\t\t\tfrontPositions.push(vx, vy, -halfDepth);\n\t\t\tfrontNormals.push(0, 0, -1);\n\t\t\tfrontUvs.push((vx - minX) / (w || 1), (vy - minY) / (h || 1));\n\t\t}\n\t\tfor (let t = 0; t < triangles.length; t += 3) frontIndices.push(frontBaseIdx + triangles[t], frontBaseIdx + triangles[t + 2], frontBaseIdx + triangles[t + 1]);\n\t\tconst backBaseIdx = frontPositions.length / 3;\n\t\tfor (let v = 0; v < vertCount; v++) {\n\t\t\tconst vx = earcutCoords[v * 2];\n\t\t\tconst vy = earcutCoords[v * 2 + 1];\n\t\t\tfrontPositions.push(vx, vy, halfDepth);\n\t\t\tfrontNormals.push(0, 0, 1);\n\t\t\tfrontUvs.push((vx - minX) / (w || 1), (vy - minY) / (h || 1));\n\t\t}\n\t\tfor (let t = 0; t < triangles.length; t += 3) frontIndices.push(backBaseIdx + triangles[t], backBaseIdx + triangles[t + 1], backBaseIdx + triangles[t + 2]);\n\t\taddSideWall(outer);\n\t\tfor (const hole of poly.holes) addSideWall(hole);\n\t}\n\tconst frontColor = parseHexOrRgbColor(options.fill ?? \"#ffffff\");\n\tconst sideColor = parseHexOrRgbColor(options.bevelColor ?? options.fill ?? \"#ffffff\");\n\tconst frontMaterial = {\n\t\tname: \"front-material\",\n\t\tdiffuseColor: frontColor,\n\t\tshading: options.material ?? \"lit\",\n\t\tshininess: options.shininess ?? 32,\n\t\troughness: options.roughness,\n\t\tmetallic: options.metallic,\n\t\ttwoSided: true\n\t};\n\tconst sideMaterial = {\n\t\tname: \"side-material\",\n\t\tdiffuseColor: sideColor,\n\t\tshading: options.material ?? \"lit\",\n\t\tshininess: options.shininess ?? 32,\n\t\troughness: options.roughness,\n\t\tmetallic: options.metallic,\n\t\ttwoSided: true\n\t};\n\tconst meshes = [];\n\tif (frontIndices.length > 0) meshes.push({\n\t\tid: \"text-front-mesh\",\n\t\tname: \"front\",\n\t\tpositions: new Float32Array(frontPositions),\n\t\tnormals: new Float32Array(frontNormals),\n\t\tuvs: new Float32Array(frontUvs),\n\t\tindices: frontPositions.length / 3 > 65535 ? new Uint32Array(frontIndices) : new Uint16Array(frontIndices),\n\t\tmaterialName: \"front-material\"\n\t});\n\tif (sideIndices.length > 0) meshes.push({\n\t\tid: \"text-side-mesh\",\n\t\tname: \"side\",\n\t\tpositions: new Float32Array(sidePositions),\n\t\tnormals: new Float32Array(sideNormals),\n\t\tuvs: new Float32Array(sideUvs),\n\t\tindices: sidePositions.length / 3 > 65535 ? new Uint32Array(sideIndices) : new Uint16Array(sideIndices),\n\t\tmaterialName: \"side-material\"\n\t});\n\treturn {\n\t\tmodelData: {\n\t\t\tname: `extruded-text-${options.text}`,\n\t\t\tmeshes,\n\t\t\tmaterials: {\n\t\t\t\t\"front-material\": frontMaterial,\n\t\t\t\t\"side-material\": sideMaterial\n\t\t\t},\n\t\t\tanimations: [],\n\t\t\tbounds: {\n\t\t\t\tmin: [\n\t\t\t\t\tminX,\n\t\t\t\t\tminY,\n\t\t\t\t\t-halfDepth\n\t\t\t\t],\n\t\t\t\tmax: [\n\t\t\t\t\tmaxX,\n\t\t\t\t\tmaxY,\n\t\t\t\t\thalfDepth\n\t\t\t\t],\n\t\t\t\tcenter: [\n\t\t\t\t\t(minX + maxX) / 2,\n\t\t\t\t\t(minY + maxY) / 2,\n\t\t\t\t\t0\n\t\t\t\t],\n\t\t\t\tsize: [\n\t\t\t\t\tw,\n\t\t\t\t\th,\n\t\t\t\t\tdepth\n\t\t\t\t],\n\t\t\t\tboundingSphereRadius: Math.hypot(w, h, depth) / 2\n\t\t\t}\n\t\t},\n\t\tbounds: {\n\t\t\tminX,\n\t\t\tmaxX,\n\t\t\tminY,\n\t\t\tmaxY,\n\t\t\twidth: w,\n\t\t\theight: h,\n\t\t\tdepth\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/shaders/screen-space-relight.ts\n/**\n* @file shaders/screen-space-relight.ts\n* Screen-Space Normal Map 3D Relighting WGSL Shader\n* Casts dynamic multi-light Blinn-Phong illumination (Ambient, Directional, Point, Spot)\n* across 2D generative video and media layers using reconstructed surface normals.\n*/\nconst screenSpaceRelightWgsl = `\nstruct RelightMaterialUniforms {\n // vec4 0\n roughness : f32,\n specularStrength : f32,\n metallic : f32,\n ambientIntensity : f32,\n\n // vec4 1\n depthScale : f32,\n depthInvert : f32,\n hasNormalMap : f32,\n volumetricDensity: f32,\n\n // vec4 2\n viewportWidth : f32,\n viewportHeight : f32,\n shininess : f32,\n opacity : f32,\n\n // vec4 3\n layerX : f32,\n layerY : f32,\n _pad0 : f32,\n _pad1 : f32,\n};\n\nstruct GPULight {\n posType : vec4<f32>, // xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot)\n dirRadius : vec4<f32>, // xyz = normalized direction, w = radius\n colorIntensity : vec4<f32>, // rgb = linear color, w = intensity\n spotParams : vec4<f32>, // x = cos(outer), y = cos(inner), z = decay, w = 0\n};\n\nstruct LightsUniforms {\n ambientColor : vec4<f32>,\n params : vec4<f32>, // x = lightCount, y = hasLights (1=lit, 0=unlit)\n lights : array<GPULight, 8>,\n};\n\n@group(0) @binding(0) var<uniform> mat : RelightMaterialUniforms;\n@group(1) @binding(0) var<uniform> lights : LightsUniforms;\n\n@group(2) @binding(0) var albedoTex : texture_2d<f32>;\n@group(2) @binding(1) var albedoSamp : sampler;\n@group(2) @binding(2) var normalTex : texture_2d<f32>;\n@group(2) @binding(3) var normalSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n let albedo = textureSampleLevel(albedoTex, albedoSamp, in.uv, 0.0);\n if (albedo.a <= 0.001) {\n return vec4<f32>(0.0);\n }\n\n // Normal unpacking: [0, 1] -> [-1, 1]\n var N = vec3<f32>(0.0, 0.0, 1.0);\n if (mat.hasNormalMap > 0.5) {\n let rawNormal = textureSampleLevel(normalTex, normalSamp, in.uv, 0.0).xyz;\n let unpacked = rawNormal * 2.0 - 1.0;\n N = normalize(vec3<f32>(unpacked.x, unpacked.y, max(unpacked.z, 0.05)));\n }\n\n let V = vec3<f32>(0.0, 0.0, 1.0);\n let pSurface = vec3<f32>(\n mat.layerX + in.uv.x * mat.viewportWidth,\n mat.layerY + in.uv.y * mat.viewportHeight,\n 0.0\n );\n\n // If scene lights are not declared, output base albedo unmodified\n if (lights.params.y < 0.5) {\n return vec4<f32>(albedo.rgb * mat.opacity, albedo.a * mat.opacity);\n }\n\n let numLights = u32(min(lights.params.x, 8.0));\n var ambientAccum = lights.ambientColor.rgb * mat.ambientIntensity;\n var directDiffuseAccum = vec3<f32>(0.0);\n var directSpecularAccum = vec3<f32>(0.0);\n\n let roughness = clamp(mat.roughness, 0.02, 1.0);\n let specPower = max(2.0, 2.0 / (roughness * roughness) - 2.0);\n\n for (var i = 0u; i < 8u; i = i + 1u) {\n if (i >= numLights) {\n break;\n }\n\n let light = lights.lights[i];\n let lightType = light.posType.w;\n let lightColor = light.colorIntensity.rgb;\n let intensity = light.colorIntensity.w;\n\n var L = vec3<f32>(0.0, 0.0, 1.0);\n var attenuation: f32 = 1.0;\n\n if (lightType > 0.5 && lightType < 1.5) {\n // Directional Light\n L = normalize(-light.dirRadius.xyz);\n } else if (lightType >= 1.5) {\n // Point or Spot Light\n let lightPosCanvas = light.posType.xyz;\n let toLight = lightPosCanvas - pSurface;\n let dist = length(toLight);\n let radius = max(10.0, light.dirRadius.w);\n\n if (dist > radius * 2.0) {\n continue;\n }\n\n L = normalize(toLight);\n let dNorm = clamp(dist / radius, 0.0, 1.0);\n let decay = max(0.5, light.spotParams.z);\n attenuation = pow(clamp(1.0 - dNorm, 0.0, 1.0), decay) / (1.0 + dNorm * dNorm);\n\n if (lightType > 2.5) {\n // Spot Light\n let spotDir = normalize(light.dirRadius.xyz);\n let cosAngle = dot(-L, spotDir);\n let cosOuter = light.spotParams.x;\n let cosInner = light.spotParams.y;\n\n if (cosAngle < cosOuter) {\n continue;\n }\n let spotFalloff = smoothstep(cosOuter, cosInner, cosAngle);\n attenuation *= spotFalloff;\n }\n } else {\n // Ambient light in array\n ambientAccum += lightColor * (intensity * mat.ambientIntensity);\n continue;\n }\n\n let NdotL = max(dot(N, L), 0.0);\n let diffuse = lightColor * (NdotL * intensity * attenuation);\n directDiffuseAccum += diffuse;\n\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specularFactor = pow(NdotH, specPower) * mat.specularStrength * intensity * attenuation;\n let specColor = mix(lightColor, lightColor * albedo.rgb, mat.metallic);\n directSpecularAccum += specColor * specularFactor;\n }\n\n let finalColor = albedo.rgb * (ambientAccum + directDiffuseAccum) + directSpecularAccum;\n let outOpacity = albedo.a * mat.opacity;\n\n // Premultiplied alpha return\n return vec4<f32>(finalColor * outOpacity, outOpacity);\n}\n`;\n\n//#endregion\n//#region src/renderer2d/screen-space-relight-pipeline.ts\n/**\n* @file renderer2d/screen-space-relight-pipeline.ts\n* WebGPU Render Pipeline for Screen-Space Normal 3D Relighting\n* Evaluates dynamic scene lights (Ambient, Directional, Point, Spot) against 2D albedo\n* and surface normal maps in real-time.\n*/\nvar ScreenSpaceRelightPipeline = class {\n\tdevice;\n\tformat;\n\tmaterialLayout;\n\tlightsLayout;\n\ttexturesLayout;\n\tpipeline;\n\tmaterialPool;\n\tlinearSampler;\n\tdefaultFlatNormalTex;\n\tconstructor(device, format = \"rgba8unorm\") {\n\t\tthis.device = device;\n\t\tthis.format = format;\n\t\tthis.materialPool = new BufferPool(64, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);\n\t\tthis.linearSampler = device.createSampler({\n\t\t\tlabel: \"relight_linear_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t\tthis.materialLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"relight_material_layout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.lightsLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"relight_lights_layout\",\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t}]\n\t\t});\n\t\tthis.texturesLayout = device.createBindGroupLayout({\n\t\t\tlabel: \"relight_textures_layout\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"screen_space_relight.wgsl\",\n\t\t\tcode: screenSpaceRelightWgsl\n\t\t});\n\t\tconst pipelineLayout = device.createPipelineLayout({\n\t\t\tlabel: \"screen_space_relight_pipeline_layout\",\n\t\t\tbindGroupLayouts: [\n\t\t\t\tthis.materialLayout,\n\t\t\t\tthis.lightsLayout,\n\t\t\t\tthis.texturesLayout\n\t\t\t]\n\t\t});\n\t\tthis.pipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ScreenSpaceRelightPipeline\",\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t}\n\tgetOrCreateDefaultFlatNormalTexture() {\n\t\tif (!this.defaultFlatNormalTex) {\n\t\t\tthis.defaultFlatNormalTex = this.device.createTexture({\n\t\t\t\tlabel: \"default_flat_normal\",\n\t\t\t\tsize: [2, 2],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t\t\t});\n\t\t\tconst flatNormals = new Uint8Array([\n\t\t\t\t128,\n\t\t\t\t128,\n\t\t\t\t255,\n\t\t\t\t255,\n\t\t\t\t128,\n\t\t\t\t128,\n\t\t\t\t255,\n\t\t\t\t255,\n\t\t\t\t128,\n\t\t\t\t128,\n\t\t\t\t255,\n\t\t\t\t255,\n\t\t\t\t128,\n\t\t\t\t128,\n\t\t\t\t255,\n\t\t\t\t255\n\t\t\t]);\n\t\t\tthis.device.queue.writeTexture({ texture: this.defaultFlatNormalTex }, flatNormals, {\n\t\t\t\tbytesPerRow: 8,\n\t\t\t\trowsPerImage: 2\n\t\t\t}, [2, 2]);\n\t\t}\n\t\treturn this.defaultFlatNormalTex;\n\t}\n\tresetPools() {\n\t\tthis.materialPool.reset();\n\t}\n\texecute(encoder, targetView, albedoTexture, normalTexture, lightsBuffer, options, loadOp = \"clear\") {\n\t\tconst matData = new Float32Array(16);\n\t\tmatData[0] = options.roughness ?? .35;\n\t\tmatData[1] = options.specularStrength ?? .7;\n\t\tmatData[2] = options.metallic ?? 0;\n\t\tmatData[3] = options.ambientIntensity ?? .5;\n\t\tmatData[4] = options.depthScale ?? 1;\n\t\tmatData[5] = 0;\n\t\tmatData[6] = normalTexture ? 1 : 0;\n\t\tmatData[7] = 0;\n\t\tmatData[8] = options.viewportWidth;\n\t\tmatData[9] = options.viewportHeight;\n\t\tmatData[10] = 32;\n\t\tmatData[11] = options.opacity ?? 1;\n\t\tmatData[12] = options.layerX ?? 0;\n\t\tmatData[13] = options.layerY ?? 0;\n\t\tmatData[14] = 0;\n\t\tmatData[15] = 0;\n\t\tconst matBuffer = this.materialPool.getBuffer(this.device, matData);\n\t\tconst matBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.materialLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: matBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst lightsBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.lightsLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: lightsBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst actualNormalTex = normalTexture ?? this.getOrCreateDefaultFlatNormalTexture();\n\t\tconst texturesBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.texturesLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: albedoTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.linearSampler\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: actualNormalTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.linearSampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tlabel: \"screen_space_relight_render_pass\",\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: targetView,\n\t\t\t\tloadOp,\n\t\t\t\tstoreOp: \"store\",\n\t\t\t\tclearValue: {\n\t\t\t\t\tr: 0,\n\t\t\t\t\tg: 0,\n\t\t\t\t\tb: 0,\n\t\t\t\t\ta: 0\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\tpass.setPipeline(this.pipeline);\n\t\tpass.setBindGroup(0, matBindGroup);\n\t\tpass.setBindGroup(1, lightsBindGroup);\n\t\tpass.setBindGroup(2, texturesBindGroup);\n\t\tpass.draw(4, 1, 0, 0);\n\t\tpass.end();\n\t}\n\tdestroy() {\n\t\tthis.materialPool.destroy();\n\t\tthis.defaultFlatNormalTex?.destroy();\n\t}\n};\n\n//#endregion\nexport { AETextAnimatorSchema, AUDIO_BIQUAD_FILTER_SHADER, AUDIO_FEATURE_EXTRACTION_SHADER, AUDIO_LATENT_BUFFER_SIZE, AUDIO_PACE_INTEGRAL_SHADER, AUDIO_SIGNAL_TO_TEXTURE_SHADER, AdvancedTextAnimatorBuilder, AdvancedTextAnimatorSchema, AnchorGroupingSchema, AnchorPresetSchema, AnimatableGlyphPropsSchema, AudioDecoder, AudioLatentEngine, AudioLatentTrackCache, AudioMeshDeformPipeline, AudioSignalComputePipeline, AudioSpectrumTypographySchema, BrowserSurfaceProvider, BufferPool, Camera3D, ChartGPUEngineBridge, ChromaticGlitchConfigSchema, CubicBezierSegmentSchema, DynamicStrokePropertiesSchema, EffectPipeline, EnhancedTextNodeSchema, ExpressionSelectorSchema, ExtendedGlyphPropertiesSchema, FFT_SIZE, FbxLoader, GlassPipeline, GltfLoader, GlyphAnchorGroupingSchema, GlyphAnchorPointSchema, HeadlessChartCanvasElementMock, HeadlessChartContainerMock, HeadlessGPUCanvasContextMock, KineticMarqueeConfigSchema, LIGHT_UNIFORM_SIZE_BYTES, Light3D, LineSpacingDynamicsSchema, LongShadowConfigSchema, LutStore, MAX_JOINTS, MAX_LIGHTS, Matrix4Math, Mesh3DPipeline, MotionBlurPipeline, NUM_BINS, NodeSurfaceProvider, ObjLoader, OffLoader, ParticleDissolveConfigSchema, Path3D, PlyLoader, Quad3DPipeline, RenderProvider, Renderer2D, Renderer3D, SSAOPipeline, STATIC_AUDIO_SIGNAL_PREVIEW_SHADER, STATIC_SIGNAL_PREVIEW_SHADER, ScreenSpaceRelightPipeline, SelectorBasedOnSchema, SelectorModeSchema, SelectorShapeSchema, SelectorUnitsSchema, ShadowPipeline, ShapeFillPipeline, SignalRegistry, SkewPropertiesSchema, SlugFontCache, SlugGenerator, SlugGeometry, SlugLoader, SlugPipeline, Spatial3DPropertiesSchema, SpringPhysicsSchema, StlLoader, TextAnchorConfigSchema, TextAnimatorBuilder, TextAtlas, TextCursorConfigSchema, TextCursorStyleSchema, TextPathBuilder, TextPathOptionsSchema, TextPathSourceSchema, TextRangeSelectorSchema, TextScrambleConfigSchema, TextSelectorSchema, TextSignalSelectorSchema, TextWigglySelectorSchema, TextureCache, ThreeDSLoader, TypewriterAnimatorSchema, TypingCadenceSchema, VariableFontAxesSchema, Vec2Schema, Vector3Math, VideoDecoder, VolumetricFormationConfigSchema, VolumetricFormationModeSchema, VoxLoader, WebGPUAudioProcessor, acquireDevice, applyGlyphAnimators, audioMeshDisplaceWgsl, buildArrowPath, buildCirclePath, buildEllipsePath, buildPathLUT, buildPolygonPath, buildRectPath, buildShapeSvgPath, buildStarPath, buildUniformBufferLayout, buildWGSLSignalFn, chartBridgeCache, clearAllVideoCache, clearVideoNodeState, colorMatrixWgsl, compositeWgsl, computeAnchorPivotOffset, computeAnimatorProgress, computeContourSignedArea, computeFFT2048, computeLineLeadingDisplacement, computeRangeSelectorWeight, dashPathSegments, deterministicWigglyNoise, distanceToCurveParameter, drawAudioSignalExtractorNode, drawCaptionNode, drawChartNode, drawGifNode, drawImageNode, drawLottieNode, drawParagraphNode, drawSignalNode, drawSvgNode, drawVideoNode, ellipseToCubicBeziers, ensureDevice, evaluateAEAnimatorWeight, evaluateCubicBezier, evaluateCubicBezierDerivative, evaluateEasing, evaluateExpressionSelector, evaluateMarqueeOffset, evaluateSelectorCombination, evaluateSkewMatrix, evaluateSpringProgress, evaluateTypewriterState, evaluateVolumetricFormation, fbxEulerToQuat, generateArcLengthLUT, generateExtrudedTextGeometry, generatePathSegments, generateWGSLFromConfig, getActiveCaptionCue, getDevice, getHeadlessFontData, getHeadlessFontPath, getRenderer2D, getScramblePool, getShuffledOrder, gifLoader, hasDelayRender, imageLoader, initHeadlessWebGPU, inputStore, isPointInsidePolygon, jointMatrices, load3DS, loadFBX, loadGLB, loadGLTF, loadModel3D, loadOBJ, loadOFF, loadPLY, loadSTL, loadVOX, lottieLoader, lutStore, lutViewerWgsl, measureMaxCaptionHeight, mediaDecoderCache, motionBlurWgsl, packMaterialParams, parse3DS, parseColor, parseColorToRgb, parseFBX, parseGLB, parseGLTF, parseHexOrRgbColor, parseMTL, parseOBJ, parseOFF, parsePLY, parseSTL, parseSrt, parseStateFromFnBody, parseSvgPathToCubicBeziers, parseSvgPathToSegments, parseVOX, pathWgsl, pbrGlassWgsl, poseNodes, premultiplyColor, registerHeadlessFont, resetDeviceInstance, resolveVideoSignalValue, sampleAudioSpectrumScale, sampleCubicBezier, sampleCurveGeometry, samplePathChainGeometry, sampleQuadraticBezier, sampleSvgArc, screenSpaceRelightWgsl, shaderStore, shapeFillWgsl, signalRegistry, slerp, solidWgsl, srtLoader, ssaoBlurWgsl, ssaoWgsl, svgArcToCubicBeziers, svgLoader, textureCache, triangulatePolygon, triangulateShape, trimPathSegments, trsMatrix, useRenderContext, waveToCubicBeziers, withTempTexture };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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AM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACxI,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACzI,MAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACzI,MAAI,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,M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,KAAK;GACL,EAAE,CAAC;EACJ,MAAM,cAAc;GACnB;GACA,YAAY;GACZ,SAAS,CAAC;IACT,aAAa;IACb,YAAY;KACX;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;MACC,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACR;KACD;IACD,CAAC;GACF;AACD,OAAK,iBAAiB,OAAO,qBAAqB;GACjD,OAAO;GACP,QAAQ;GACR,QAAQ;GACR,UAAU;IACT;IACA,YAAY;IACZ,SAAS,CAAC;KACT;KACA,OAAO;MACN,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD;KACD,CAAC;IACF;GACD,cAAc;IACb,QAAQ;IACR,mBAAmB;IACnB,cAAc;IACd;GACD,WAAW;IACV,UAAU;IACV,UAAU;IACV;GACD,aAAa,EAAE,OAAO,aAAa;GACnC,CAAC;AACF,OAAK,cAAc,OAAO,qBAAqB;GAC9C,OAAO;GACP,QAAQ;GACR,QAAQ;GACR,UAAU;IACT;IACA,YAAY;IACZ,SAAS,CAAC;KACT;KACA,OAAO;MACN,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD,OAAO;OACN,WAAW;OACX,WAAW;OACX,WAAW;OACX;MACD;KACD,EAAE,EAAE,QAAQ,eAAe,CAAC;IAC7B;GACD,cAAc;IACb,QAAQ;IACR,mBAAmB;IACnB,cAAc;IACd;GACD,WAAW;IACV,UAAU;IACV,UAAU;IACV;GACD,aAAa,EAAE,OAAO,aAAa;GACnC,CAAC;EACF,MAAM,WAAW,IAAI,aAAa;GACjC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,CAAC;EACF,MAAM,UAAU,IAAI,YAAY;GAC/B;GACA;GACA;GACA;GACA;GACA;GACA,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"}