@canvasengine/presets 2.0.0-beta.6 → 2.0.0-beta.61
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.
- package/dist/Bar.d.ts +14 -0
- package/dist/Bar.d.ts.map +1 -0
- package/dist/Button.d.ts +1 -0
- package/dist/Button.d.ts.map +1 -0
- package/dist/FogOfWar.d.ts +38 -0
- package/dist/FogOfWar.d.ts.map +1 -0
- package/dist/Footprints.d.ts +50 -0
- package/dist/Footprints.d.ts.map +1 -0
- package/dist/Loading.d.ts +94 -0
- package/dist/Loading.d.ts.map +1 -0
- package/dist/NightAmbiant.d.ts +141 -0
- package/dist/NightAmbiant.d.ts.map +1 -0
- package/dist/Particle.d.ts +2 -0
- package/dist/Particle.d.ts.map +1 -0
- package/dist/SpriteShadows.d.ts +60 -0
- package/dist/SpriteShadows.d.ts.map +1 -0
- package/dist/Tilemap/Tile.d.ts +23 -0
- package/dist/Tilemap/Tile.d.ts.map +1 -0
- package/dist/Tilemap/TileGroup.d.ts +62 -0
- package/dist/Tilemap/TileGroup.d.ts.map +1 -0
- package/dist/Tilemap/TileSet.d.ts +11 -0
- package/dist/Tilemap/TileSet.d.ts.map +1 -0
- package/dist/Tilemap/index.d.ts +2 -0
- package/dist/Tilemap/index.d.ts.map +1 -0
- package/dist/Weathers/fog.d.ts +4 -0
- package/dist/Weathers/fog.d.ts.map +1 -0
- package/dist/Weathers/index.d.ts +382 -0
- package/dist/Weathers/index.d.ts.map +1 -0
- package/dist/Weathers/rain.d.ts +3 -0
- package/dist/Weathers/rain.d.ts.map +1 -0
- package/dist/Weathers/snow.d.ts +7 -0
- package/dist/Weathers/snow.d.ts.map +1 -0
- package/dist/fx/Fx.d.ts +2 -0
- package/dist/fx/Fx.d.ts.map +1 -0
- package/dist/fx/index.d.ts +5 -0
- package/dist/fx/index.d.ts.map +1 -0
- package/dist/fx/presets.d.ts +365 -0
- package/dist/fx/presets.d.ts.map +1 -0
- package/dist/fx/runtime.d.ts +28 -0
- package/dist/fx/runtime.d.ts.map +1 -0
- package/dist/fx/textures.d.ts +7 -0
- package/dist/fx/textures.d.ts.map +1 -0
- package/dist/fx/types.d.ts +93 -0
- package/dist/fx/types.d.ts.map +1 -0
- package/dist/fx/utils.d.ts +10 -0
- package/dist/fx/utils.d.ts.map +1 -0
- package/dist/index.d.ts +11 -54
- package/dist/index.d.ts.map +1 -0
- package/dist/index.global.js +579 -0
- package/dist/index.global.js.map +1 -0
- package/dist/index.js +5356 -764
- package/dist/index.js.map +1 -1
- package/package.json +35 -16
- package/src/Bar.ts +0 -87
- package/src/Button.ts +0 -0
- package/src/DrawMap/index.ts +0 -60
- package/src/Joystick.ts +0 -284
- package/src/NightAmbiant.ts +0 -116
- package/src/Particle.ts +0 -50
- package/src/Tilemap/Tile.ts +0 -79
- package/src/Tilemap/TileGroup.ts +0 -207
- package/src/Tilemap/TileLayer.ts +0 -162
- package/src/Tilemap/TileSet.ts +0 -41
- package/src/Tilemap/index.ts +0 -79
- package/src/index.ts +0 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.global.js","names":["Tile","__defProp","__defNormalProp","__publicField","Geometry","Buffer","BufferUsage","__defProp","__defNormalProp","__publicField","UniformGroup","Matrix","Buffer","BufferUsage","NOOP","ExtensionType","__defProp","__defNormalProp","__publicField","Buffer","BufferUsage","UniformGroup","Texture","BindGroup","__defProp","__defNormalProp","__publicField","Shader","GlProgram","UniformGroup","ExtensionType","__defProp","__defNormalProp","__publicField","Shader","GpuProgram","BindGroup","ExtensionType","__defProp","__defNormalProp","__publicField","ViewContainer","State","Bounds","TextureSource","Texture","groupD8","Container","Texture"],"sources":["../src/Bar.ts","../src/fx/presets.ts","../src/fx/textures.ts","../src/fx/utils.ts","../src/fx/runtime.ts","../src/fx/Fx.ts","../src/Particle.ts","../src/NightAmbiant.ts","../src/Loading.ts","../../tiled/dist/index.js","../../../node_modules/.pnpm/@canvasengine+tilemap@5.0.1_pixi.js@8.9.2/node_modules/@canvasengine/tilemap/lib/settings.mjs","../../../node_modules/.pnpm/@canvasengine+tilemap@5.0.1_pixi.js@8.9.2/node_modules/@canvasengine/tilemap/lib/TilemapGeometry.mjs","../../../node_modules/.pnpm/@canvasengine+tilemap@5.0.1_pixi.js@8.9.2/node_modules/@canvasengine/tilemap/lib/TilemapPipe.mjs","../../../node_modules/.pnpm/@canvasengine+tilemap@5.0.1_pixi.js@8.9.2/node_modules/@canvasengine/tilemap/lib/TileTextureArray.mjs","../../../node_modules/.pnpm/@canvasengine+tilemap@5.0.1_pixi.js@8.9.2/node_modules/@canvasengine/tilemap/lib/gl_tilemap.mjs","../../../node_modules/.pnpm/@canvasengine+tilemap@5.0.1_pixi.js@8.9.2/node_modules/@canvasengine/tilemap/lib/gpu_tilemap.mjs","../../../node_modules/.pnpm/@canvasengine+tilemap@5.0.1_pixi.js@8.9.2/node_modules/@canvasengine/tilemap/lib/Tilemap.mjs","../../../node_modules/.pnpm/@canvasengine+tilemap@5.0.1_pixi.js@8.9.2/node_modules/@canvasengine/tilemap/lib/CompositeTilemap.mjs","../../../node_modules/.pnpm/@canvasengine+tilemap@5.0.1_pixi.js@8.9.2/node_modules/@canvasengine/tilemap/lib/index.mjs","../src/Tilemap/Tile.ts","../src/Tilemap/TileLayer.ts","../src/Tilemap/TileSet.ts","../src/Tilemap/index.ts","../src/Weathers/snow.ts","../src/Weathers/fog.ts","../src/Weathers/index.ts","../src/FogOfWar.ts","../src/SpriteShadows.ts","../src/Footprints.ts"],"sourcesContent":["import { Graphics, h, useProps } from \"canvasengine\";\nimport * as PIXI from \"pixi.js\";\n\ninterface BarProps {\n backgroundColor?: string;\n foregroundColor?: string;\n value: number;\n maxValue: number;\n width: number;\n height: number;\n border?: any;\n innerMargin?: number;\n borderRadius?: number;\n}\n\nfunction componentToHex(c) {\n var hex = c.toString(16);\n return hex.length == 1 ? \"0\" + hex : hex;\n}\n\nfunction rgbToHex(r, g, b) {\n return \"#\" + componentToHex(r) + componentToHex(g) + componentToHex(b);\n}\n\nexport function Bar(opts: BarProps) {\n const {\n width,\n height,\n value,\n maxValue,\n backgroundColor,\n foregroundColor,\n border,\n innerMargin,\n borderRadius,\n } = useProps(opts, {\n backgroundColor: \"#000000\",\n foregroundColor: \"#FFFFFF\",\n innerMargin: 0,\n borderRadius: 0,\n });\n\n return h(\n Graphics,\n {\n ...opts,\n width,\n height,\n draw(graphics: any) {\n if (borderRadius()) {\n graphics.roundRect(0, 0, width(), height(), borderRadius());\n } else {\n graphics.rect(0, 0, width(), height());\n }\n if (border) {\n graphics.stroke(border);\n }\n graphics.fill(backgroundColor());\n },\n },\n h(Graphics, {\n width,\n height,\n draw(graphics: any) {\n const margin = innerMargin();\n const _borderRadius = borderRadius();\n const w = Math.max(\n 0,\n Math.min(\n width() - 2 * margin,\n (value() / maxValue()) * (width() - 2 * margin)\n )\n );\n const h = height() - 2 * margin;\n if (borderRadius) {\n graphics.roundRect(margin, margin, w, h, _borderRadius);\n } else {\n graphics.rect(margin, margin, w, h);\n }\n const color = foregroundColor();\n if (color.startsWith(\"rgba\")) {\n const [r, g, b, a] = color.match(/\\d+(\\.\\d+)?/g).map(Number);\n graphics.fill({ color: rgbToHex(r, g, b), alpha: a });\n } else {\n graphics.fill(color);\n }\n },\n })\n );\n}\n","import type { FxPreset } from \"./types\";\n\nexport const FX_PRESETS = {\n hitSpark: {\n duration: 180,\n emitters: [\n {\n burst: 18,\n angle: [0, 360],\n speed: [120, 340],\n particle: {\n shape: \"spark\",\n lifetime: [160, 340],\n color: [\"#fff4a8\", \"#ff7a2f\"],\n alpha: [1, 0],\n scale: [0.18, 0],\n rotationSpeed: [-480, 480],\n blendMode: \"add\",\n ease: \"outCubic\",\n },\n },\n ],\n },\n slashSpark: {\n duration: 160,\n emitters: [\n {\n burst: 22,\n angle: [-12, 12],\n speed: [180, 430],\n spreadX: 10,\n spreadY: 3,\n particle: {\n shape: \"spark\",\n lifetime: [110, 260],\n color: [\"#ffffff\", \"#ffcf5a\"],\n alpha: [1, 0],\n scale: [0.16, 0],\n rotation: [-8, 8],\n rotationSpeed: [-260, 260],\n blendMode: \"add\",\n ease: \"outCubic\",\n },\n },\n {\n burst: 8,\n angle: [150, 210],\n speed: [60, 160],\n particle: {\n shape: \"star\",\n lifetime: [140, 320],\n color: [\"#fff8cc\", \"#ff8f3d\"],\n alpha: [0.85, 0],\n scale: [0.12, 0.4],\n blendMode: \"add\",\n ease: \"outQuad\",\n },\n },\n ],\n },\n impactBurst: {\n duration: 260,\n emitters: [\n {\n burst: 24,\n angle: [0, 360],\n speed: [130, 280],\n particle: {\n shape: \"spark\",\n lifetime: [180, 420],\n color: [\"#fff3ba\", \"#d64d27\"],\n alpha: [1, 0],\n scale: [0.2, 0],\n rotationSpeed: [-360, 360],\n blendMode: \"add\",\n ease: \"outCubic\",\n },\n },\n {\n burst: 10,\n angle: [0, 360],\n speed: [30, 90],\n particle: {\n shape: \"softCircle\",\n lifetime: [220, 520],\n color: [\"#ffd18a\", \"#6d3a2a\"],\n alpha: [0.38, 0],\n scale: [0.28, 1.15],\n ease: \"outQuad\",\n },\n },\n ],\n },\n smokePuff: {\n duration: 260,\n emitters: [\n {\n burst: 16,\n angle: [-130, -50],\n speed: [12, 58],\n spreadX: 10,\n spreadY: 6,\n gravity: -10,\n particle: {\n shape: \"softCircle\",\n lifetime: [520, 940],\n color: [\"#8f8f8f\", \"#4f4f4f\"],\n alpha: [0.38, 0],\n scale: [0.45, 1.85],\n rotationSpeed: [-40, 40],\n ease: \"outQuad\",\n },\n },\n ],\n },\n dustStep: {\n duration: 160,\n emitters: [\n {\n burst: 10,\n angle: [-170, -10],\n speed: [18, 86],\n spreadX: 8,\n spreadY: 3,\n particle: {\n shape: \"softCircle\",\n lifetime: [260, 520],\n color: \"#b99a6a\",\n alpha: [0.26, 0],\n scale: [0.22, 0.9],\n ease: \"outQuad\",\n },\n },\n ],\n },\n dashDust: {\n duration: 220,\n emitters: [\n {\n burst: 22,\n angle: [155, 205],\n speed: [70, 190],\n spreadX: 18,\n spreadY: 5,\n particle: {\n shape: \"softCircle\",\n lifetime: [300, 640],\n color: [\"#cfb07c\", \"#8f744f\"],\n alpha: [0.34, 0],\n scale: [0.28, 1.2],\n ease: \"outCubic\",\n },\n },\n {\n burst: 9,\n angle: [168, 192],\n speed: [150, 330],\n spreadX: 10,\n particle: {\n shape: \"spark\",\n lifetime: [120, 280],\n color: \"#d9c08a\",\n alpha: [0.42, 0],\n scale: [0.12, 0],\n ease: \"outCubic\",\n },\n },\n ],\n },\n magicBurst: {\n duration: 360,\n emitters: [\n {\n burst: 32,\n angle: [0, 360],\n speed: [70, 220],\n particle: {\n shape: \"star\",\n lifetime: [420, 840],\n color: [\"#77e5ff\", \"#b970ff\"],\n alpha: [0.95, 0],\n scale: [0.18, 0.75],\n rotationSpeed: [-220, 220],\n blendMode: \"add\",\n ease: \"outCubic\",\n },\n },\n ],\n },\n healPulse: {\n duration: 520,\n emitters: [\n {\n burst: 18,\n angle: [-120, -60],\n speed: [28, 86],\n spreadX: 20,\n spreadY: 10,\n gravity: -16,\n particle: {\n shape: \"star\",\n lifetime: [520, 980],\n color: [\"#d9ffe6\", \"#55e68a\"],\n alpha: [0.85, 0],\n scale: [0.18, 0.62],\n rotationSpeed: [-120, 120],\n blendMode: \"add\",\n ease: \"outQuad\",\n },\n },\n {\n burst: 10,\n angle: [-105, -75],\n speed: [12, 42],\n spreadX: 16,\n particle: {\n shape: \"softCircle\",\n lifetime: [620, 1100],\n color: [\"#9fffc5\", \"#3edc7c\"],\n alpha: [0.3, 0],\n scale: [0.3, 1.0],\n blendMode: \"add\",\n ease: \"outQuad\",\n },\n },\n ],\n },\n campfire: {\n duration: 1000,\n emitters: [\n {\n loop: true,\n rate: 38,\n angle: [-110, -70],\n speed: [16, 54],\n spreadX: 8,\n spreadY: 3,\n particle: {\n shape: \"softCircle\",\n lifetime: [360, 720],\n color: [\"#ffd36d\", \"#ff4b1f\"],\n alpha: [0.8, 0],\n scale: [0.25, 1.05],\n blendMode: \"add\",\n ease: \"outQuad\",\n },\n },\n {\n loop: true,\n rate: 12,\n angle: [-115, -65],\n speed: [10, 30],\n particle: {\n shape: \"softCircle\",\n lifetime: [620, 1100],\n color: \"#555555\",\n alpha: [0.18, 0],\n scale: [0.35, 1.4],\n ease: \"outQuad\",\n },\n },\n ],\n },\n torchFire: {\n duration: 1000,\n emitters: [\n {\n loop: true,\n rate: 24,\n angle: [-104, -76],\n speed: [12, 42],\n spreadX: 4,\n spreadY: 2,\n particle: {\n shape: \"softCircle\",\n lifetime: [280, 560],\n color: [\"#fff09a\", \"#ff5a22\"],\n alpha: [0.75, 0],\n scale: [0.16, 0.72],\n blendMode: \"add\",\n ease: \"outQuad\",\n },\n },\n {\n loop: true,\n rate: 7,\n angle: [-112, -68],\n speed: [8, 26],\n particle: {\n shape: \"softCircle\",\n lifetime: [520, 960],\n color: \"#4f4f4f\",\n alpha: [0.13, 0],\n scale: [0.22, 0.9],\n ease: \"outQuad\",\n },\n },\n ],\n },\n pickup: {\n duration: 320,\n emitters: [\n {\n burst: 14,\n angle: [210, 330],\n speed: [70, 170],\n particle: {\n shape: \"star\",\n lifetime: [260, 620],\n color: [\"#ffffff\", \"#ffe66d\"],\n alpha: [1, 0],\n scale: [0.2, 0.65],\n blendMode: \"add\",\n ease: \"outCubic\",\n },\n },\n ],\n },\n levelUp: {\n duration: 820,\n emitters: [\n {\n burst: 30,\n angle: [-105, -75],\n speed: [80, 210],\n spreadX: 34,\n spreadY: 10,\n gravity: -24,\n particle: {\n shape: \"star\",\n lifetime: [620, 1180],\n color: [\"#ffffff\", \"#ffe870\"],\n alpha: [1, 0],\n scale: [0.16, 0.8],\n rotationSpeed: [-180, 180],\n blendMode: \"add\",\n ease: \"outCubic\",\n },\n },\n {\n duration: 420,\n rate: 36,\n angle: [-98, -82],\n speed: [90, 180],\n spreadX: 26,\n particle: {\n shape: \"spark\",\n lifetime: [420, 840],\n color: [\"#fff8c8\", \"#66d9ff\"],\n alpha: [0.75, 0],\n scale: [0.12, 0],\n blendMode: \"add\",\n ease: \"outCubic\",\n },\n },\n ],\n },\n explosionSmall: {\n duration: 280,\n emitters: [\n {\n burst: 28,\n angle: [0, 360],\n speed: [120, 300],\n particle: {\n shape: \"softCircle\",\n lifetime: [300, 720],\n color: [\"#fff1a6\", \"#d34b24\"],\n alpha: [1, 0],\n scale: [0.25, 1.15],\n blendMode: \"add\",\n ease: \"outCubic\",\n },\n },\n ],\n },\n} satisfies Record<string, FxPreset>;\n","import { Assets, Texture } from \"pixi.js\";\nimport type { FxParticleConfig, FxShape } from \"./types\";\n\nconst shapeTextures = new Map<FxShape, Texture>();\nconst imageTextures = new Map<string, Promise<Texture> | Texture>();\n\nexport function getShapeTexture(shape: FxShape = \"softCircle\"): Texture {\n if (!shapeTextures.has(shape)) {\n shapeTextures.set(shape, createShapeTexture(shape));\n }\n return shapeTextures.get(shape)!;\n}\n\nfunction createShapeTexture(shape: FxShape): Texture {\n if (typeof document === \"undefined\") return Texture.WHITE;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = shape === \"spark\" ? 64 : 48;\n canvas.height = shape === \"spark\" ? 16 : 48;\n const context = canvas.getContext(\"2d\");\n if (!context) return Texture.WHITE;\n\n context.clearRect(0, 0, canvas.width, canvas.height);\n context.fillStyle = \"#ffffff\";\n context.strokeStyle = \"#ffffff\";\n\n if (shape === \"spark\") {\n const gradient = context.createLinearGradient(0, 0, canvas.width, 0);\n gradient.addColorStop(0, \"rgba(255,255,255,0)\");\n gradient.addColorStop(0.22, \"rgba(255,255,255,1)\");\n gradient.addColorStop(1, \"rgba(255,255,255,0)\");\n context.strokeStyle = gradient;\n context.lineWidth = 4;\n context.lineCap = \"round\";\n context.beginPath();\n context.moveTo(3, canvas.height / 2);\n context.lineTo(canvas.width - 3, canvas.height / 2);\n context.stroke();\n } else if (shape === \"square\") {\n context.fillRect(8, 8, 32, 32);\n } else if (shape === \"star\") {\n drawStar(context, 24, 24, 5, 20, 8);\n } else if (shape === \"circle\") {\n context.beginPath();\n context.arc(24, 24, 18, 0, Math.PI * 2);\n context.fill();\n } else {\n const gradient = context.createRadialGradient(24, 24, 2, 24, 24, 22);\n gradient.addColorStop(0, \"rgba(255,255,255,1)\");\n gradient.addColorStop(0.45, \"rgba(255,255,255,0.72)\");\n gradient.addColorStop(1, \"rgba(255,255,255,0)\");\n context.fillStyle = gradient;\n context.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n return Texture.from(canvas);\n}\n\nfunction drawStar(\n context: CanvasRenderingContext2D,\n x: number,\n y: number,\n points: number,\n outerRadius: number,\n innerRadius: number\n) {\n context.beginPath();\n for (let i = 0; i < points * 2; i++) {\n const radius = i % 2 === 0 ? outerRadius : innerRadius;\n const angle = (i * Math.PI) / points - Math.PI / 2;\n const px = x + Math.cos(angle) * radius;\n const py = y + Math.sin(angle) * radius;\n if (i === 0) context.moveTo(px, py);\n else context.lineTo(px, py);\n }\n context.closePath();\n context.fill();\n}\n\nexport async function preloadParticleTextures(config: FxParticleConfig = {}) {\n const loads: Promise<any>[] = [];\n if (config.image && !imageTextures.has(config.image)) {\n const promise = Assets.load(config.image) as Promise<Texture>;\n imageTextures.set(config.image, promise);\n loads.push(\n promise.then((texture) => {\n imageTextures.set(config.image!, texture);\n })\n );\n }\n if (config.spritesheet) {\n loads.push(Promise.resolve(Assets.load(config.spritesheet)));\n }\n await Promise.all(loads);\n}\n\nexport async function preloadPresetTextures(preset) {\n await Promise.all(\n (preset?.emitters ?? []).map((emitter) => preloadParticleTextures(emitter.particle))\n );\n}\n\nexport function getParticleTextures(config: FxParticleConfig = {}, random = Math.random): Texture[] {\n if (config.texture) return [config.texture];\n if (config.frames?.length) {\n const frames = config.frames.map((frame) => Texture.from(frame));\n if (config.frameMode === \"random\") {\n return [frames[Math.floor(random() * frames.length)] ?? frames[0]];\n }\n return frames;\n }\n if (config.frame) return [Texture.from(config.frame)];\n if (config.image) {\n const cached = imageTextures.get(config.image);\n if (cached && !(cached instanceof Promise)) return [cached];\n return [];\n }\n return [getShapeTexture(config.shape)];\n}\n","import type { FxColor, FxRange } from \"./types\";\n\nexport function resolveValue<T>(value: T | (() => T)): T {\n return typeof value === \"function\" ? (value as () => T)() : value;\n}\n\nexport function createRandom(seed = Date.now()) {\n let state = seed >>> 0;\n return () => {\n state = (state * 1664525 + 1013904223) >>> 0;\n return state / 4294967296;\n };\n}\n\nexport function rangeValue(value: FxRange | undefined, random: () => number, fallback: number): number {\n if (value === undefined) return fallback;\n if (Array.isArray(value)) {\n return value[0] + (value[1] - value[0]) * random();\n }\n return value;\n}\n\nexport function normalizeAngle(value: FxRange | undefined, random: () => number): number {\n return (rangeValue(value, random, 0) * Math.PI) / 180;\n}\n\nexport function colorToNumber(value: FxColor | undefined, fallback = 0xffffff): number {\n if (value === undefined) return fallback;\n if (typeof value === \"number\") return value;\n const hex = value.trim().replace(\"#\", \"\");\n if (hex.length === 3) {\n return parseInt(hex.split(\"\").map((char) => char + char).join(\"\"), 16);\n }\n return parseInt(hex, 16);\n}\n\nexport function lerp(start: number, end: number, progress: number): number {\n return start + (end - start) * progress;\n}\n\nexport function lerpColor(start: number, end: number, progress: number): number {\n const sr = (start >> 16) & 255;\n const sg = (start >> 8) & 255;\n const sb = start & 255;\n const er = (end >> 16) & 255;\n const eg = (end >> 8) & 255;\n const eb = end & 255;\n const r = Math.round(lerp(sr, er, progress));\n const g = Math.round(lerp(sg, eg, progress));\n const b = Math.round(lerp(sb, eb, progress));\n return (r << 16) + (g << 8) + b;\n}\n\nexport function easeValue(name: string | undefined, progress: number): number {\n const t = Math.max(0, Math.min(1, progress));\n if (name === \"outQuad\") return 1 - (1 - t) * (1 - t);\n if (name === \"outCubic\") return 1 - Math.pow(1 - t, 3);\n if (name === \"inQuad\") return t * t;\n return t;\n}\n\n","import { Container, Sprite, Texture } from \"pixi.js\";\nimport type {\n FxEmitterConfig,\n FxInstance,\n FxParticle,\n FxParticleConfig,\n FxPreset,\n FxRuntimeOptions,\n} from \"./types\";\nimport { getParticleTextures, getShapeTexture, preloadPresetTextures } from \"./textures\";\nimport {\n colorToNumber,\n createRandom,\n easeValue,\n lerp,\n lerpColor,\n normalizeAngle,\n rangeValue,\n} from \"./utils\";\n\ntype RuntimeEmitter = FxEmitterConfig & {\n elapsed: number;\n emittedBurst: boolean;\n carry: number;\n particles: FxParticle[];\n};\n\ntype RuntimeInstance = FxInstance & {\n emitters: RuntimeEmitter[];\n options: FxRuntimeOptions;\n};\n\nexport class FxRuntime {\n private instances = new Set<RuntimeInstance>();\n private pool: Sprite[] = [];\n private random: () => number;\n private maxParticles: number;\n private activeCount = 0;\n\n constructor(options: { seed?: number; maxParticles?: number } = {}) {\n this.random = createRandom(options.seed);\n this.maxParticles = options.maxParticles ?? 600;\n }\n\n async preload(preset: FxPreset) {\n await preloadPresetTextures(preset);\n }\n\n spawn(container: Container, preset: FxPreset, options: FxRuntimeOptions & { loop?: boolean } = {}): FxInstance {\n const instance: RuntimeInstance = {\n container,\n preset,\n elapsed: 0,\n loop: Boolean(options.loop),\n complete: false,\n activeParticles: 0,\n emitters: preset.emitters.map((emitter) => ({\n ...emitter,\n elapsed: 0,\n emittedBurst: false,\n carry: 0,\n particles: [],\n })),\n options,\n stop: () => {\n instance.loop = false;\n instance.complete = true;\n instance.emitters.forEach((emitter) => {\n emitter.duration = 0;\n emitter.loop = false;\n });\n },\n };\n\n this.instances.add(instance);\n options.onStart?.(instance);\n return instance;\n }\n\n update(deltaMs: number) {\n const delta = Number.isFinite(deltaMs) ? Math.max(0, deltaMs) : 0;\n for (const instance of Array.from(this.instances)) {\n this.updateInstance(instance, delta);\n }\n }\n\n clear() {\n for (const instance of Array.from(this.instances)) {\n this.recycleInstance(instance);\n }\n this.instances.clear();\n }\n\n get activeInstances() {\n return this.instances.size;\n }\n\n private updateInstance(instance: RuntimeInstance, deltaMs: number) {\n instance.elapsed += deltaMs;\n const delay = instance.preset.delay ?? 0;\n if (instance.elapsed < delay) return;\n\n let hasLiveParticles = false;\n let hasEmitting = false;\n\n for (const emitter of instance.emitters) {\n this.updateEmitter(instance, emitter, deltaMs);\n hasLiveParticles ||= emitter.particles.length > 0;\n hasEmitting ||= this.isEmitterActive(instance, emitter);\n }\n\n instance.activeParticles = instance.emitters.reduce(\n (count, emitter) => count + emitter.particles.length,\n 0\n );\n\n if (!hasEmitting && !hasLiveParticles) {\n instance.complete = true;\n }\n\n if (instance.complete && !hasLiveParticles) {\n this.instances.delete(instance);\n instance.options.onComplete?.(instance);\n }\n }\n\n private updateEmitter(instance: RuntimeInstance, emitter: RuntimeEmitter, deltaMs: number) {\n emitter.elapsed += deltaMs;\n const delay = emitter.delay ?? 0;\n if (emitter.elapsed >= delay && this.isEmitterActive(instance, emitter)) {\n if (emitter.burst && !emitter.emittedBurst) {\n for (let i = 0; i < emitter.burst; i++) this.spawnParticle(instance, emitter);\n emitter.emittedBurst = true;\n }\n\n if (emitter.rate) {\n emitter.carry += (emitter.rate * deltaMs) / 1000;\n const count = Math.floor(emitter.carry);\n emitter.carry -= count;\n for (let i = 0; i < count; i++) this.spawnParticle(instance, emitter);\n }\n }\n\n for (let i = emitter.particles.length - 1; i >= 0; i--) {\n const particle = emitter.particles[i];\n particle.age += deltaMs;\n if (particle.age >= particle.lifetime) {\n this.recycleParticle(instance.container, particle);\n emitter.particles.splice(i, 1);\n } else {\n this.updateParticle(particle, deltaMs);\n }\n }\n }\n\n private isEmitterActive(instance: RuntimeInstance, emitter: RuntimeEmitter) {\n if (instance.complete) return false;\n const delay = emitter.delay ?? 0;\n const elapsed = emitter.elapsed - delay;\n if (elapsed < 0) return false;\n if (emitter.burst && !emitter.emittedBurst) return true;\n if (instance.loop || emitter.loop) return true;\n const duration = emitter.duration ?? instance.preset.duration ?? 0;\n return elapsed <= duration;\n }\n\n private spawnParticle(instance: RuntimeInstance, emitter: RuntimeEmitter) {\n const maxParticles = emitter.maxParticles ?? instance.options.maxParticles ?? this.maxParticles;\n if (this.activeCount >= maxParticles || emitter.particles.length >= maxParticles) return;\n\n const particleConfig = emitter.particle ?? {};\n const textures = getParticleTextures(particleConfig, this.random);\n if (!textures.length) {\n if (instance.options.missingTexture === \"skip\") return;\n if (instance.options.missingTexture === \"error\") {\n throw new Error(\"Fx particle texture is not loaded\");\n }\n textures.push(getShapeTexture(particleConfig.shape));\n }\n\n const sprite = this.pool.pop() ?? new Sprite(Texture.WHITE);\n sprite.texture = textures[0];\n sprite.visible = true;\n sprite.anchor.set(particleConfig.anchor?.x ?? 0.5, particleConfig.anchor?.y ?? 0.5);\n sprite.x = (emitter.x ?? 0) + rangeValue([-(emitter.spreadX ?? 0), emitter.spreadX ?? 0], this.random, 0);\n sprite.y = (emitter.y ?? 0) + rangeValue([-(emitter.spreadY ?? 0), emitter.spreadY ?? 0], this.random, 0);\n sprite.rotation = (rangeValue(particleConfig.rotation, this.random, 0) * Math.PI) / 180;\n sprite.blendMode = (particleConfig.blendMode ?? \"normal\") as any;\n\n const angle = normalizeAngle(emitter.angle, this.random);\n const speed = rangeValue(emitter.speed, this.random, 0);\n const alpha = particleConfig.alpha ?? [1, 0];\n const scale = particleConfig.scale ?? [1, 0];\n const tint = particleConfig.tint ?? particleConfig.color ?? 0xffffff;\n const startTint = colorToNumber(Array.isArray(tint) ? tint[0] : tint);\n const endTint = colorToNumber(Array.isArray(tint) ? tint[1] : tint, startTint);\n const startScale = rangeValue(Array.isArray(scale) ? scale[0] : scale, this.random, 1);\n const endScale = Array.isArray(scale) ? rangeValue(scale[1], this.random, 0) : startScale;\n const startAlpha = rangeValue(Array.isArray(alpha) ? alpha[0] : alpha, this.random, 1);\n const endAlpha = Array.isArray(alpha) ? rangeValue(alpha[1], this.random, 0) : startAlpha;\n\n sprite.alpha = startAlpha;\n sprite.tint = startTint;\n sprite.scale.set(startScale);\n instance.container.addChild(sprite);\n\n const particle: FxParticle = {\n sprite,\n age: 0,\n lifetime: rangeValue(particleConfig.lifetime, this.random, 600),\n vx: Math.cos(angle) * speed,\n vy: Math.sin(angle) * speed,\n ax: emitter.accelerationX ?? 0,\n ay: emitter.accelerationY ?? 0,\n gravity: emitter.gravity ?? 0,\n startAlpha,\n endAlpha,\n startScale,\n endScale,\n startTint,\n endTint,\n rotationSpeed: (rangeValue(particleConfig.rotationSpeed, this.random, 0) * Math.PI) / 180,\n frameRate: particleConfig.frameRate ?? 12,\n frames: textures,\n ease: particleConfig.ease ?? \"linear\",\n };\n emitter.particles.push(particle);\n this.activeCount++;\n instance.options.onParticleSpawn?.(particle);\n }\n\n private updateParticle(particle: FxParticle, deltaMs: number) {\n const seconds = deltaMs / 1000;\n const progress = particle.age / particle.lifetime;\n const eased = easeValue(particle.ease, progress);\n particle.vx += particle.ax * seconds;\n particle.vy += (particle.ay + particle.gravity) * seconds;\n particle.sprite.x += particle.vx * seconds;\n particle.sprite.y += particle.vy * seconds;\n particle.sprite.rotation += particle.rotationSpeed * seconds;\n particle.sprite.alpha = lerp(particle.startAlpha, particle.endAlpha, eased);\n particle.sprite.scale.set(lerp(particle.startScale, particle.endScale, eased));\n particle.sprite.tint = lerpColor(particle.startTint, particle.endTint, eased);\n\n if (particle.frames.length > 1) {\n const frame = Math.min(\n particle.frames.length - 1,\n Math.floor((particle.age / 1000) * particle.frameRate) % particle.frames.length\n );\n particle.sprite.texture = particle.frames[frame];\n }\n }\n\n private recycleParticle(container: Container, particle: FxParticle) {\n container.removeChild(particle.sprite);\n particle.sprite.visible = false;\n particle.sprite.alpha = 1;\n particle.sprite.tint = 0xffffff;\n particle.sprite.scale.set(1);\n this.pool.push(particle.sprite);\n this.activeCount = Math.max(0, this.activeCount - 1);\n }\n\n private recycleInstance(instance: RuntimeInstance) {\n for (const emitter of instance.emitters) {\n for (const particle of emitter.particles) {\n this.recycleParticle(instance.container, particle);\n }\n emitter.particles = [];\n }\n }\n\n}\n","import { Container, h, mount, on, tick, useProps } from \"canvasengine\";\nimport type { Container as PixiContainer } from \"pixi.js\";\nimport { FX_PRESETS } from \"./presets\";\nimport { FxRuntime } from \"./runtime\";\nimport type { FxPreset } from \"./types\";\n\nconst valueOf = (value) => (typeof value === \"function\" ? value() : value);\n\nfunction resolvePreset(name, preset): FxPreset {\n const directPreset = valueOf(preset);\n if (directPreset) return directPreset;\n const presetName = valueOf(name);\n const found = FX_PRESETS[presetName];\n if (!found) {\n throw new Error(`Unknown Fx preset: ${presetName}`);\n }\n return found;\n}\n\nexport function Fx(options) {\n const {\n name,\n preset,\n trigger,\n autostart,\n loop,\n enabled,\n x,\n y,\n rotation,\n scale,\n alpha,\n seed,\n maxParticles,\n timeScale,\n preload,\n missingTexture,\n onStart,\n onComplete,\n onParticleSpawn,\n ...containerProps\n } = useProps(options, {\n name: \"hitSpark\",\n autostart: false,\n loop: false,\n enabled: true,\n x: 0,\n y: 0,\n rotation: 0,\n scale: 1,\n alpha: 1,\n timeScale: 1,\n preload: true,\n missingTexture: \"shape\",\n });\n\n let container: PixiContainer | undefined;\n let localRuntime = new FxRuntime({\n seed: valueOf(seed),\n maxParticles: valueOf(maxParticles),\n });\n\n const spawn = async (config = {}) => {\n if (!container || !valueOf(enabled)) return;\n const selectedPreset = resolvePreset(name, preset);\n if (valueOf(preload)) {\n await localRuntime.preload(selectedPreset);\n }\n const instance = localRuntime.spawn(container, selectedPreset, {\n loop: valueOf(loop),\n seed: valueOf(seed),\n maxParticles: valueOf(maxParticles),\n missingTexture: valueOf(missingTexture),\n onStart,\n onComplete,\n onParticleSpawn,\n ...config,\n });\n return instance;\n };\n\n mount((element) => {\n container = element.componentInstance as unknown as PixiContainer;\n if (valueOf(autostart) || valueOf(loop)) {\n spawn();\n }\n return () => {\n localRuntime.clear();\n };\n });\n\n if (trigger?.listen) {\n on(trigger, async (config) => {\n await spawn(config);\n });\n }\n\n tick(({ deltaTime }) => {\n localRuntime.update((deltaTime ?? 16.67) * valueOf(timeScale));\n });\n\n return h(Container, {\n ...containerProps,\n x,\n y,\n rotation,\n scale,\n alpha,\n });\n}\n","import { Fx } from \"./fx\";\n\nexport function Particle(options) {\n const { emit, ...props } = options;\n return Fx({\n ...props,\n trigger: props.trigger ?? emit,\n });\n}\n","import { Filter } from \"pixi.js\";\nimport { Container, effect, h, mount, useProps } from \"canvasengine\";\nimport fragmentShader from './shaders/nightSpot.frag.glsl?raw';\nimport vertexShader from './shaders/defaultFilter.vert.glsl?raw';\n\nconst MAX_SPOTS = 24;\nconst SPOT_RADIUS_PX = 180;\n/** Darkness outside the spot (0 = no darkening, 1 = black). */\nconst DARKNESS = 0.75;\n/** Fog: distance from player (0-1) where fog starts. */\nconst FOG_RADIUS = 0.5;\n/** Fog: width of the fog transition (smoothstep). */\nconst FOG_SOFTNESS = 0.35;\n/** Fog color (RGB, linear 0-1). Dark blue-gray for night. */\nconst FOG_COLOR = new Float32Array([0.08, 0.08, 0.14]);\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\nconst clampDarkness = (value: number) => clamp(value, 0, 1);\n\ntype PointLike = { x: number; y: number };\ntype BoundsLike = { x: number; y: number; width: number; height: number };\ntype ScreenPointLike = { x: number; y: number };\ntype ReactiveValue<T> = T | (() => T);\ntype ViewportLike = {\n getVisibleBounds?: () => BoundsLike | null | undefined;\n toScreen?: (x: number, y: number) => ScreenPointLike;\n};\ntype NightUniformValues = {\n uSpots: Float32Array;\n uDarkness: number;\n uDarkColor: Float32Array;\n uFogColor: Float32Array;\n uFogRadius: number;\n uFogSoftness: number;\n};\nexport type NightSpot = PointLike & {\n radius?: number;\n intensity?: number;\n flicker?: boolean;\n flickerSpeed?: number;\n pulse?: boolean;\n pulseSpeed?: number;\n phase?: number;\n};\n\nexport type NightSpotInput = {\n x: ReactiveValue<number>;\n y: ReactiveValue<number>;\n radius?: ReactiveValue<number>;\n intensity?: ReactiveValue<number>;\n flicker?: ReactiveValue<boolean>;\n flickerSpeed?: ReactiveValue<number>;\n pulse?: ReactiveValue<boolean>;\n pulseSpeed?: ReactiveValue<number>;\n phase?: ReactiveValue<number>;\n};\n\n/**\n * Color input type supporting hex string, number, or RGB array.\n * \n * @example\n * ```ts\n * // Hex string\n * const color1: ColorInput = \"#0a1020\";\n * // Number\n * const color2: ColorInput = 0x0a1020;\n * // RGB tuple (0-255)\n * const color3: ColorInput = [10, 16, 32];\n * // Normalized RGB (0-1)\n * const color4: ColorInput = [0.04, 0.06, 0.12];\n * ```\n */\nexport type ColorInput = string | number | [number, number, number];\n\nexport type NightAmbiantProps = {\n /** Main reactive list of light spots. */\n lightSpots?: ReactiveValue<Array<NightSpotInput | NightSpot>>;\n /** Alias for `lightSpots` for compatibility. */\n spots?: ReactiveValue<Array<NightSpotInput | NightSpot>>;\n /** Darkness intensity outside light spots (0 = no darkening, 1 = full black). Default: 0.75 */\n darkness?: ReactiveValue<number>;\n /** Tint color applied in dark zones. Default: \"#000000\" */\n darkColor?: ReactiveValue<ColorInput>;\n /** Fog color around light spots. Default: \"#141424\" */\n fogColor?: ReactiveValue<ColorInput>;\n /** Distance from light center where fog starts (0-1). Default: 0.5 */\n fogRadius?: ReactiveValue<number>;\n /** Width of the fog transition. Default: 0.35 */\n fogSoftness?: ReactiveValue<number>;\n};\n\nexport type NightFilter = Filter & {\n setLightWorldPosition: (position: PointLike | null) => void;\n getLightWorldPosition: () => PointLike | null;\n setSpots: (spots: NightSpot[]) => void;\n getSpots: () => NightSpot[];\n syncLightToViewport: () => void;\n setDarkness: (value: number) => void;\n setDarkColor: (color: ColorInput) => void;\n setFogColor: (color: ColorInput) => void;\n setFogRadius: (value: number) => void;\n setFogSoftness: (value: number) => void;\n};\n\n/**\n * Parses a color input (hex string, number, or RGB array) into a normalized Float32Array [r, g, b].\n * \n * @param color - The color input to parse\n * @returns A Float32Array with normalized RGB values (0-1)\n * \n * @example\n * ```ts\n * parseColor(\"#ff0000\"); // Float32Array [1, 0, 0]\n * parseColor(0x00ff00); // Float32Array [0, 1, 0]\n * parseColor([0, 0, 255]); // Float32Array [0, 0, 1]\n * parseColor([0.5, 0.5, 0.5]); // Float32Array [0.5, 0.5, 0.5]\n * ```\n */\nconst parseColor = (color: ColorInput): Float32Array => {\n if (typeof color === \"string\") {\n // Parse hex string (#RGB, #RRGGBB)\n let hex = color.replace(/^#/, \"\");\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n const num = parseInt(hex, 16);\n return new Float32Array([\n ((num >> 16) & 0xff) / 255,\n ((num >> 8) & 0xff) / 255,\n (num & 0xff) / 255,\n ]);\n }\n if (typeof color === \"number\") {\n return new Float32Array([\n ((color >> 16) & 0xff) / 255,\n ((color >> 8) & 0xff) / 255,\n (color & 0xff) / 255,\n ]);\n }\n if (Array.isArray(color) && color.length >= 3) {\n // If values are > 1, assume 0-255 range\n const isNormalized = color.every((c) => c <= 1);\n return new Float32Array(\n isNormalized ? color : color.map((c) => c / 255)\n );\n }\n return new Float32Array([0, 0, 0]);\n};\n\n/**\n * Creates a night filter with configurable light spots, darkness, and fog effects.\n * \n * The filter renders a dark overlay with circular light spots that illuminate areas.\n * It supports multiple spots with individual intensity, radius, flicker, and pulse effects.\n * \n * @param viewport - Optional viewport for world-to-screen coordinate conversion\n * @param options - Configuration options for the filter\n * @returns A NightFilter instance with methods to control the effect\n * \n * @example\n * ```ts\n * const filter = createNightFilter(viewport, {\n * spots: [{ x: 100, y: 100, radius: 200, intensity: 1.0 }],\n * darkness: 0.8,\n * darkColor: \"#0a1020\",\n * fogColor: \"#141a2a\",\n * });\n * container.filters = [filter];\n * ```\n */\nexport function createNightFilter(\n viewport?: ViewportLike,\n options?: {\n lightWorldPosition?: PointLike | null;\n spots?: NightSpot[];\n getBounds?: () => BoundsLike | null | undefined;\n darkness?: number;\n darkColor?: ColorInput;\n fogColor?: ColorInput;\n fogRadius?: number;\n fogSoftness?: number;\n }\n): NightFilter {\n const uSpots = new Float32Array(MAX_SPOTS * 4);\n const uSpotsUniform = { value: uSpots, type: 'vec4<f32>' as const, size: MAX_SPOTS };\n const uDarkness = { value: clampDarkness(options?.darkness ?? DARKNESS), type: 'f32' as const };\n const uFogColor = { value: options?.fogColor ? parseColor(options.fogColor) : FOG_COLOR, type: 'vec3<f32>' as const };\n const uFogRadius = { value: options?.fogRadius ?? FOG_RADIUS, type: 'f32' as const };\n const uFogSoftness = { value: options?.fogSoftness ?? FOG_SOFTNESS, type: 'f32' as const };\n const uDarkColor = { value: options?.darkColor ? parseColor(options.darkColor) : new Float32Array([0, 0, 0]), type: 'vec3<f32>' as const };\n \n let customSpots: NightSpot[] = options?.spots ? [...options.spots] : [];\n let lightWorldPosition: PointLike | null = options?.lightWorldPosition ?? null;\n\n const nightFilter = Filter.from({\n gl: {\n vertex: vertexShader,\n fragment: fragmentShader,\n },\n resources: {\n nightUniforms: {\n uSpots: uSpotsUniform,\n uDarkness,\n uDarkColor,\n uFogColor,\n uFogRadius,\n uFogSoftness,\n },\n },\n });\n const nightUniforms = (nightFilter as any).resources.nightUniforms.uniforms as NightUniformValues;\n\n const nowSeconds = () => Date.now() / 1000;\n const setColorUniform = (name: \"uDarkColor\" | \"uFogColor\", color: Float32Array) => {\n const current = nightUniforms[name];\n if (current instanceof Float32Array && current.length >= color.length) {\n current.set(color);\n } else {\n nightUniforms[name] = color;\n }\n };\n\n const getActiveSpots = (): NightSpot[] => {\n if (!lightWorldPosition) return customSpots;\n return [{ x: lightWorldPosition.x, y: lightWorldPosition.y }, ...customSpots];\n };\n\n const syncLightToViewport = () => {\n const activeSpots = getActiveSpots();\n const spotCount = Math.min(activeSpots.length, MAX_SPOTS);\n const bounds = viewport?.getVisibleBounds?.() ?? options?.getBounds?.();\n const hasBounds = !!bounds && bounds.width > 0 && bounds.height > 0;\n const toScreen = viewport?.toScreen?.bind(viewport);\n const canUseViewportScreen = hasBounds && typeof toScreen === \"function\";\n let viewportOriginX = 0;\n let viewportOriginY = 0;\n if (canUseViewportScreen) {\n const origin = toScreen(bounds.x, bounds.y);\n if (isFiniteNumber(origin?.x) && isFiniteNumber(origin?.y)) {\n viewportOriginX = origin.x;\n viewportOriginY = origin.y;\n }\n }\n const time = nowSeconds();\n\n uSpots.fill(0);\n for (let i = 0; i < spotCount; i++) {\n const spot = activeSpots[i];\n const radiusPx = spot.radius ?? SPOT_RADIUS_PX;\n const intensityBase = clamp(spot.intensity ?? 1, 0, 2);\n const phase = spot.phase ?? i * 0.7;\n let intensity = intensityBase;\n\n if (spot.flicker) {\n const flickerSpeed = spot.flickerSpeed ?? 12;\n intensity *= 0.88 + 0.12 * Math.sin(time * flickerSpeed + phase);\n }\n if (spot.pulse) {\n const pulseSpeed = spot.pulseSpeed ?? 2;\n intensity *= 0.8 + 0.2 * Math.sin(time * pulseSpeed + phase);\n }\n\n let x = spot.x;\n let y = spot.y;\n let radius = radiusPx;\n\n if (canUseViewportScreen) {\n const point = toScreen!(spot.x, spot.y);\n x = point.x - viewportOriginX;\n y = point.y - viewportOriginY;\n } else if (hasBounds) {\n x = spot.x - bounds.x;\n y = spot.y - bounds.y;\n }\n\n const base = i * 4;\n uSpots[base] = x;\n uSpots[base + 1] = y;\n uSpots[base + 2] = radius;\n uSpots[base + 3] = clamp(intensity, 0, 2);\n }\n\n nightUniforms.uSpots = uSpots;\n };\n\n const originalApply = nightFilter.apply.bind(nightFilter);\n nightFilter.apply = ((...args: any[]) => {\n // Keep the spot anchored in world space while the viewport moves/zooms.\n syncLightToViewport();\n return originalApply(...args);\n }) as typeof nightFilter.apply;\n\n const extendedFilter = nightFilter as NightFilter;\n extendedFilter.setLightWorldPosition = (position: PointLike | null) => {\n lightWorldPosition = position;\n syncLightToViewport();\n };\n extendedFilter.getLightWorldPosition = () => lightWorldPosition;\n extendedFilter.setSpots = (spots: NightSpot[]) => {\n customSpots = [...spots];\n syncLightToViewport();\n };\n extendedFilter.getSpots = () => getActiveSpots().map((spot) => ({ ...spot }));\n extendedFilter.syncLightToViewport = syncLightToViewport;\n extendedFilter.setDarkness = (value: number) => {\n nightUniforms.uDarkness = clampDarkness(value);\n };\n extendedFilter.setDarkColor = (color: ColorInput) => {\n setColorUniform(\"uDarkColor\", parseColor(color));\n };\n extendedFilter.setFogColor = (color: ColorInput) => {\n setColorUniform(\"uFogColor\", parseColor(color));\n };\n extendedFilter.setFogRadius = (value: number) => {\n nightUniforms.uFogRadius = value;\n };\n extendedFilter.setFogSoftness = (value: number) => {\n nightUniforms.uFogSoftness = value;\n };\n\n syncLightToViewport();\n\n return extendedFilter;\n}\n\nconst resolveReactiveValue = <T>(value: ReactiveValue<T> | undefined): T | undefined => {\n if (typeof value === \"function\") return (value as () => T)();\n return value;\n};\n\nconst isFiniteNumber = (value: unknown): value is number =>\n typeof value === \"number\" && Number.isFinite(value);\n\nconst resolveSpot = (spot: NightSpotInput | NightSpot): NightSpot | null => {\n const source = resolveReactiveValue(spot as ReactiveValue<NightSpotInput | NightSpot>);\n if (!source) return null;\n\n const x = resolveReactiveValue(source.x as ReactiveValue<number> | undefined);\n const y = resolveReactiveValue(source.y as ReactiveValue<number> | undefined);\n if (!isFiniteNumber(x) || !isFiniteNumber(y)) return null;\n\n const radius = resolveReactiveValue(source.radius as ReactiveValue<number> | undefined);\n const intensity = resolveReactiveValue(source.intensity as ReactiveValue<number> | undefined);\n const flickerSpeed = resolveReactiveValue(source.flickerSpeed as ReactiveValue<number> | undefined);\n const pulseSpeed = resolveReactiveValue(source.pulseSpeed as ReactiveValue<number> | undefined);\n const phase = resolveReactiveValue(source.phase as ReactiveValue<number> | undefined);\n\n return {\n x,\n y,\n radius: isFiniteNumber(radius) ? radius : undefined,\n intensity: isFiniteNumber(intensity) ? intensity : undefined,\n flicker: !!resolveReactiveValue(source.flicker as ReactiveValue<boolean> | undefined),\n flickerSpeed: isFiniteNumber(flickerSpeed) ? flickerSpeed : undefined,\n pulse: !!resolveReactiveValue(source.pulse as ReactiveValue<boolean> | undefined),\n pulseSpeed: isFiniteNumber(pulseSpeed) ? pulseSpeed : undefined,\n phase: isFiniteNumber(phase) ? phase : undefined,\n };\n};\n\nconst resolveSpots = (\n spots: ReactiveValue<Array<NightSpotInput | NightSpot>> | undefined\n): NightSpot[] => {\n const list = resolveReactiveValue(spots);\n if (!Array.isArray(list)) return [];\n return list.map(resolveSpot).filter((spot): spot is NightSpot => !!spot);\n};\n\nconst toBoundsLike = (target: any): BoundsLike | null => {\n if (!target) return null;\n if (typeof target.getVisibleBounds === \"function\") {\n const bounds = target.getVisibleBounds();\n if (bounds) return bounds;\n }\n if (typeof target.getLocalBounds === \"function\") {\n const bounds = target.getLocalBounds();\n if (bounds) return bounds;\n }\n if (isFiniteNumber(target.width) && isFiniteNumber(target.height)) {\n return { x: 0, y: 0, width: target.width, height: target.height };\n }\n return null;\n};\n\n/**\n * Night ambiance component that adds a dark overlay with dynamic light spots.\n * \n * This component creates a night-time atmosphere with configurable darkness,\n * fog effects, and multiple light sources. It automatically attaches to a\n * Viewport if present in context, otherwise to the parent container.\n * \n * All props are reactive and support signal/function values.\n * \n * @param options - Configuration options for the night ambiance effect\n * \n * @example\n * ```html\n * <Viewport worldWidth={2048} worldHeight={2048} screen>\n * <NightAmbiant\n * lightSpots={lightSpots}\n * darkness={0.8}\n * darkColor=\"#0a1020\"\n * fogColor=\"#141a2a\"\n * />\n * </Viewport>\n * ```\n */\nexport function NightAmbiant(options: NightAmbiantProps = {}) {\n const props = useProps(options);\n const spotsSource = () =>\n (props.lightSpots as ReactiveValue<Array<NightSpotInput | NightSpot>> | undefined) ??\n (props.spots as ReactiveValue<Array<NightSpotInput | NightSpot>> | undefined);\n\n mount((element) => {\n const context = element.props.context;\n const viewport = context?.viewport as ViewportLike | undefined;\n const target: any = viewport ?? element.parent?.componentInstance;\n if (!target) return;\n const canvasSizeSignal = context?.canvasSize as (() => { width: number; height: number }) | undefined;\n\n const resolveFilterBounds = (): BoundsLike | null => {\n // Outside a Viewport, use the reactive canvas size to avoid stale fixed widths.\n if (!viewport && typeof canvasSizeSignal === \"function\") {\n const size = canvasSizeSignal();\n if (size && isFiniteNumber(size.width) && isFiniteNumber(size.height) && size.width > 0 && size.height > 0) {\n return { x: 0, y: 0, width: size.width, height: size.height };\n }\n }\n return toBoundsLike(target);\n };\n\n // Resolve initial values for filter options\n const initialDarkness = resolveReactiveValue(props.darkness as ReactiveValue<number> | undefined);\n const initialDarkColor = resolveReactiveValue(props.darkColor as ReactiveValue<ColorInput> | undefined);\n const initialFogColor = resolveReactiveValue(props.fogColor as ReactiveValue<ColorInput> | undefined);\n const initialFogRadius = resolveReactiveValue(props.fogRadius as ReactiveValue<number> | undefined);\n const initialFogSoftness = resolveReactiveValue(props.fogSoftness as ReactiveValue<number> | undefined);\n\n const nightFilter = createNightFilter(viewport, {\n spots: resolveSpots(spotsSource()),\n getBounds: resolveFilterBounds,\n darkness: isFiniteNumber(initialDarkness) ? initialDarkness : undefined,\n darkColor: initialDarkColor ?? undefined,\n fogColor: initialFogColor ?? undefined,\n fogRadius: isFiniteNumber(initialFogRadius) ? initialFogRadius : undefined,\n fogSoftness: isFiniteNumber(initialFogSoftness) ? initialFogSoftness : undefined,\n });\n\n const currentFilters = Array.isArray(target.filters) ? target.filters : [];\n if (!currentFilters.includes(nightFilter)) {\n target.filters = [...currentFilters, nightFilter];\n }\n\n // Reactive effect for spots\n effect(() => {\n nightFilter.setSpots(resolveSpots(spotsSource()));\n });\n\n // Reactive effect for darkness\n effect(() => {\n const value = resolveReactiveValue(props.darkness as ReactiveValue<number> | undefined);\n if (isFiniteNumber(value)) {\n nightFilter.setDarkness(value);\n }\n });\n\n // Reactive effect for dark color\n effect(() => {\n const value = resolveReactiveValue(props.darkColor as ReactiveValue<ColorInput> | undefined);\n if (value !== undefined) {\n nightFilter.setDarkColor(value);\n }\n });\n\n // Reactive effect for fog color\n effect(() => {\n const value = resolveReactiveValue(props.fogColor as ReactiveValue<ColorInput> | undefined);\n if (value !== undefined) {\n nightFilter.setFogColor(value);\n }\n });\n\n // Reactive effect for fog radius\n effect(() => {\n const value = resolveReactiveValue(props.fogRadius as ReactiveValue<number> | undefined);\n if (isFiniteNumber(value)) {\n nightFilter.setFogRadius(value);\n }\n });\n\n // Reactive effect for fog softness\n effect(() => {\n const value = resolveReactiveValue(props.fogSoftness as ReactiveValue<number> | undefined);\n if (isFiniteNumber(value)) {\n nightFilter.setFogSoftness(value);\n }\n });\n\n return () => {\n const filters = Array.isArray(target.filters) ? target.filters : [];\n const nextFilters = filters.filter((filter) => filter !== nightFilter);\n target.filters = nextFilters.length > 0 ? nextFilters : null;\n };\n });\n\n return h(Container);\n}\n","import { Graphics, Container, h, useProps, tick, signal, effect, mount } from \"canvasengine\";\nimport * as PIXI from \"pixi.js\";\n\n/**\n * Loading Component Props\n */\nexport interface LoadingProps {\n /**\n * Size of the loading spinner (radius in pixels)\n * @default 30\n */\n size?: number;\n /**\n * Color of the spinner segments\n * @default \"#3498db\"\n */\n color?: string;\n /**\n * Background color of the spinner (optional)\n */\n backgroundColor?: string;\n /**\n * Rotation speed in degrees per second\n * @default 180\n */\n speed?: number;\n /**\n * Number of segments in the spinner\n * @default 8\n */\n segments?: number;\n /**\n * Width of each segment\n * @default 3\n */\n segmentWidth?: number;\n /**\n * Alpha value for inactive segments (0-1)\n * @default 0.15\n */\n inactiveAlpha?: number;\n}\n\n/**\n * Loading Component\n * \n * Creates an animated circular loading spinner with customizable appearance and rotation speed.\n * The spinner consists of multiple segments that rotate continuously, creating a smooth loading indicator.\n * \n * ## Design\n * \n * The component uses a Graphics element to draw multiple segments arranged in a circle:\n * - **Segments**: Multiple radial segments that create a circular pattern\n * - **Rotation animation**: Continuous rotation using the tick system for smooth animation\n * - **Alpha variation**: Active segments are fully opaque while inactive segments have reduced opacity\n * - **Customizable**: Size, color, speed, and number of segments can be adjusted\n * \n * @param {LoadingProps} opts - Configuration options for the loading spinner\n * \n * @example\n * ```tsx\n * // Basic usage with default settings\n * <Loading />\n * \n * // Custom size and color\n * <Loading \n * size={50}\n * color=\"#e74c3c\"\n * />\n * \n * // Fast spinning loader\n * <Loading \n * speed={360}\n * segments={12}\n * />\n * \n * // Large loader with background\n * <Loading \n * size={80}\n * color=\"#2ecc71\"\n * backgroundColor=\"#ecf0f1\"\n * segmentWidth={5}\n * />\n * \n * // Using signals for dynamic control\n * const loaderSize = signal(30);\n * const loaderSpeed = signal(180);\n * \n * <Loading \n * size={loaderSize}\n * speed={loaderSpeed}\n * />\n * ```\n * \n * @returns {JSX.Element} A container with an animated loading spinner\n */\nexport function Loading(opts: LoadingProps = {}) {\n const {\n size = 30,\n color = \"#3498db\",\n backgroundColor,\n speed = 180,\n segments = 8,\n segmentWidth = 3,\n inactiveAlpha = 0.15,\n } = useProps(opts, {\n size: 30,\n color: \"#3498db\",\n speed: 180,\n segments: 8,\n segmentWidth: 3,\n inactiveAlpha: 0.15,\n });\n\n const rotation = signal(0);\n\n // Animation loop using tick\n tick(({ deltaTime }) => {\n const speedValue = typeof speed === \"function\" ? speed() : speed;\n const rotationIncrement = (speedValue * deltaTime) / 1000;\n rotation.set(rotation() + rotationIncrement);\n });\n\n const draw = (graphics: PIXI.Graphics) => {\n const sizeValue = typeof size === \"function\" ? size() : size;\n const colorValue = typeof color === \"function\" ? color() : color;\n const backgroundColorValue = backgroundColor\n ? typeof backgroundColor === \"function\"\n ? backgroundColor()\n : backgroundColor\n : null;\n const segmentsValue = typeof segments === \"function\" ? segments() : segments;\n const segmentWidthValue =\n typeof segmentWidth === \"function\" ? segmentWidth() : segmentWidth;\n const inactiveAlphaValue =\n typeof inactiveAlpha === \"function\" ? inactiveAlpha() : inactiveAlpha;\n const rotationValue = rotation();\n\n // Draw background circle if specified\n if (backgroundColorValue) {\n graphics.circle(0, 0, sizeValue).fill(backgroundColorValue);\n }\n\n // Draw spinner segments with fade effect\n const angleStep = 360 / segmentsValue;\n const innerRadius = sizeValue * 0.4; // Inner radius of the spinner\n const outerRadius = sizeValue; // Outer radius of the spinner\n\n for (let i = 0; i < segmentsValue; i++) {\n const segmentBaseAngle = i * angleStep;\n \n // Calculate opacity based on how close this segment is to the rotation point\n // The rotation point acts as the \"bright spot\" that fades out\n const normalizedRotation = ((rotationValue % 360) + 360) % 360;\n let angleDiff = Math.abs(normalizedRotation - segmentBaseAngle);\n \n // Handle wrap-around (shorter distance)\n if (angleDiff > 180) {\n angleDiff = 360 - angleDiff;\n }\n \n // Create distinct fade effect: segments near rotation point are bright,\n // fading out quickly for more contrast\n const fadeRange = 120; // Reduced range for sharper fade\n let fadeProgress = angleDiff / fadeRange;\n \n // Apply stronger easing for more distinct opacity difference (cubic ease-out)\n fadeProgress = Math.min(1, fadeProgress);\n fadeProgress = fadeProgress * fadeProgress * fadeProgress; // Cubic easing for sharper contrast\n \n const opacity = inactiveAlphaValue + (1 - fadeProgress) * (1 - inactiveAlphaValue);\n\n // Draw segment at fixed position (not rotating with the spinner)\n const angle = segmentBaseAngle * (Math.PI / 180);\n const segmentAngle = angleStep * (Math.PI / 180);\n const startAngle = angle - segmentAngle / 2;\n const endAngle = angle + segmentAngle / 2;\n\n // Draw segment from inner to outer radius\n graphics\n .arc(0, 0, innerRadius, startAngle, endAngle)\n .arc(0, 0, outerRadius, endAngle, startAngle, true)\n .fill({ color: colorValue, alpha: opacity });\n }\n };\n\n // Calculate width and height based on size (diameter)\n const sizeValue = typeof size === \"function\" ? size() : size;\n const diameter = sizeValue * 2;\n const widthSignal = typeof size === \"function\" \n ? signal(diameter)\n : signal(diameter);\n const heightSignal = typeof size === \"function\"\n ? signal(diameter)\n : signal(diameter);\n\n // Update width/height when size changes\n if (typeof size === \"function\") {\n effect(() => {\n const s = size();\n widthSignal.set(s * 2);\n heightSignal.set(s * 2);\n });\n }\n\n return h(Container, opts as any, [\n h(Graphics, {\n draw\n }),\n ]);\n}\n","//#region \\0rolldown/runtime.js\nvar __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);\n//#endregion\n//#region src/types/Layer.ts\nvar TiledLayerType = /* @__PURE__ */ function(TiledLayerType) {\n\tTiledLayerType[\"Tile\"] = \"tilelayer\";\n\tTiledLayerType[\"ObjectGroup\"] = \"objectgroup\";\n\tTiledLayerType[\"Image\"] = \"imagelayer\";\n\tTiledLayerType[\"Group\"] = \"group\";\n\treturn TiledLayerType;\n}({});\n//#endregion\n//#region src/utils.ts\nfunction isTiledFormat(val) {\n\treturn typeof val == \"object\" && val.version && val.orientation;\n}\n/**\n* Join path segments with forward slashes\n* @param {...string} segments - Path segments to join\n* @returns {string} Joined path\n* @example\n* joinPath('base', 'static', 'file.json') // returns 'base/static/file.json'\n*/\nfunction joinPath(...segments) {\n\treturn segments.filter((segment) => segment && segment.length > 0).join(\"/\").replace(/\\/+/g, \"/\");\n}\n//#endregion\n//#region __vite-browser-external\nvar require___vite_browser_external = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = {};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/sax@1.4.1/node_modules/sax/lib/sax.js\nvar require_sax = /* @__PURE__ */ __commonJSMin(((exports) => {\n\t(function(sax) {\n\t\tsax.parser = function(strict, opt) {\n\t\t\treturn new SAXParser(strict, opt);\n\t\t};\n\t\tsax.SAXParser = SAXParser;\n\t\tsax.SAXStream = SAXStream;\n\t\tsax.createStream = createStream;\n\t\tsax.MAX_BUFFER_LENGTH = 64 * 1024;\n\t\tvar buffers = [\n\t\t\t\"comment\",\n\t\t\t\"sgmlDecl\",\n\t\t\t\"textNode\",\n\t\t\t\"tagName\",\n\t\t\t\"doctype\",\n\t\t\t\"procInstName\",\n\t\t\t\"procInstBody\",\n\t\t\t\"entity\",\n\t\t\t\"attribName\",\n\t\t\t\"attribValue\",\n\t\t\t\"cdata\",\n\t\t\t\"script\"\n\t\t];\n\t\tsax.EVENTS = [\n\t\t\t\"text\",\n\t\t\t\"processinginstruction\",\n\t\t\t\"sgmldeclaration\",\n\t\t\t\"doctype\",\n\t\t\t\"comment\",\n\t\t\t\"opentagstart\",\n\t\t\t\"attribute\",\n\t\t\t\"opentag\",\n\t\t\t\"closetag\",\n\t\t\t\"opencdata\",\n\t\t\t\"cdata\",\n\t\t\t\"closecdata\",\n\t\t\t\"error\",\n\t\t\t\"end\",\n\t\t\t\"ready\",\n\t\t\t\"script\",\n\t\t\t\"opennamespace\",\n\t\t\t\"closenamespace\"\n\t\t];\n\t\tfunction SAXParser(strict, opt) {\n\t\t\tif (!(this instanceof SAXParser)) return new SAXParser(strict, opt);\n\t\t\tvar parser = this;\n\t\t\tclearBuffers(parser);\n\t\t\tparser.q = parser.c = \"\";\n\t\t\tparser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH;\n\t\t\tparser.opt = opt || {};\n\t\t\tparser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags;\n\t\t\tparser.looseCase = parser.opt.lowercase ? \"toLowerCase\" : \"toUpperCase\";\n\t\t\tparser.tags = [];\n\t\t\tparser.closed = parser.closedRoot = parser.sawRoot = false;\n\t\t\tparser.tag = parser.error = null;\n\t\t\tparser.strict = !!strict;\n\t\t\tparser.noscript = !!(strict || parser.opt.noscript);\n\t\t\tparser.state = S.BEGIN;\n\t\t\tparser.strictEntities = parser.opt.strictEntities;\n\t\t\tparser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES);\n\t\t\tparser.attribList = [];\n\t\t\tif (parser.opt.xmlns) parser.ns = Object.create(rootNS);\n\t\t\tif (parser.opt.unquotedAttributeValues === void 0) parser.opt.unquotedAttributeValues = !strict;\n\t\t\tparser.trackPosition = parser.opt.position !== false;\n\t\t\tif (parser.trackPosition) parser.position = parser.line = parser.column = 0;\n\t\t\temit(parser, \"onready\");\n\t\t}\n\t\tif (!Object.create) Object.create = function(o) {\n\t\t\tfunction F() {}\n\t\t\tF.prototype = o;\n\t\t\treturn new F();\n\t\t};\n\t\tif (!Object.keys) Object.keys = function(o) {\n\t\t\tvar a = [];\n\t\t\tfor (var i in o) if (o.hasOwnProperty(i)) a.push(i);\n\t\t\treturn a;\n\t\t};\n\t\tfunction checkBufferLength(parser) {\n\t\t\tvar maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10);\n\t\t\tvar maxActual = 0;\n\t\t\tfor (var i = 0, l = buffers.length; i < l; i++) {\n\t\t\t\tvar len = parser[buffers[i]].length;\n\t\t\t\tif (len > maxAllowed) switch (buffers[i]) {\n\t\t\t\t\tcase \"textNode\":\n\t\t\t\t\t\tcloseText(parser);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"cdata\":\n\t\t\t\t\t\temitNode(parser, \"oncdata\", parser.cdata);\n\t\t\t\t\t\tparser.cdata = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"script\":\n\t\t\t\t\t\temitNode(parser, \"onscript\", parser.script);\n\t\t\t\t\t\tparser.script = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: error(parser, \"Max buffer length exceeded: \" + buffers[i]);\n\t\t\t\t}\n\t\t\t\tmaxActual = Math.max(maxActual, len);\n\t\t\t}\n\t\t\tparser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH - maxActual + parser.position;\n\t\t}\n\t\tfunction clearBuffers(parser) {\n\t\t\tfor (var i = 0, l = buffers.length; i < l; i++) parser[buffers[i]] = \"\";\n\t\t}\n\t\tfunction flushBuffers(parser) {\n\t\t\tcloseText(parser);\n\t\t\tif (parser.cdata !== \"\") {\n\t\t\t\temitNode(parser, \"oncdata\", parser.cdata);\n\t\t\t\tparser.cdata = \"\";\n\t\t\t}\n\t\t\tif (parser.script !== \"\") {\n\t\t\t\temitNode(parser, \"onscript\", parser.script);\n\t\t\t\tparser.script = \"\";\n\t\t\t}\n\t\t}\n\t\tSAXParser.prototype = {\n\t\t\tend: function() {\n\t\t\t\tend(this);\n\t\t\t},\n\t\t\twrite,\n\t\t\tresume: function() {\n\t\t\t\tthis.error = null;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tclose: function() {\n\t\t\t\treturn this.write(null);\n\t\t\t},\n\t\t\tflush: function() {\n\t\t\t\tflushBuffers(this);\n\t\t\t}\n\t\t};\n\t\tvar Stream;\n\t\ttry {\n\t\t\tStream = require___vite_browser_external().Stream;\n\t\t} catch (ex) {\n\t\t\tStream = function() {};\n\t\t}\n\t\tif (!Stream) Stream = function() {};\n\t\tvar streamWraps = sax.EVENTS.filter(function(ev) {\n\t\t\treturn ev !== \"error\" && ev !== \"end\";\n\t\t});\n\t\tfunction createStream(strict, opt) {\n\t\t\treturn new SAXStream(strict, opt);\n\t\t}\n\t\tfunction SAXStream(strict, opt) {\n\t\t\tif (!(this instanceof SAXStream)) return new SAXStream(strict, opt);\n\t\t\tStream.apply(this);\n\t\t\tthis._parser = new SAXParser(strict, opt);\n\t\t\tthis.writable = true;\n\t\t\tthis.readable = true;\n\t\t\tvar me = this;\n\t\t\tthis._parser.onend = function() {\n\t\t\t\tme.emit(\"end\");\n\t\t\t};\n\t\t\tthis._parser.onerror = function(er) {\n\t\t\t\tme.emit(\"error\", er);\n\t\t\t\tme._parser.error = null;\n\t\t\t};\n\t\t\tthis._decoder = null;\n\t\t\tstreamWraps.forEach(function(ev) {\n\t\t\t\tObject.defineProperty(me, \"on\" + ev, {\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn me._parser[\"on\" + ev];\n\t\t\t\t\t},\n\t\t\t\t\tset: function(h) {\n\t\t\t\t\t\tif (!h) {\n\t\t\t\t\t\t\tme.removeAllListeners(ev);\n\t\t\t\t\t\t\tme._parser[\"on\" + ev] = h;\n\t\t\t\t\t\t\treturn h;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tme.on(ev, h);\n\t\t\t\t\t},\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: false\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tSAXStream.prototype = Object.create(Stream.prototype, { constructor: { value: SAXStream } });\n\t\tSAXStream.prototype.write = function(data) {\n\t\t\tif (typeof Buffer === \"function\" && typeof Buffer.isBuffer === \"function\" && Buffer.isBuffer(data)) {\n\t\t\t\tif (!this._decoder) {\n\t\t\t\t\tvar SD = require___vite_browser_external().StringDecoder;\n\t\t\t\t\tthis._decoder = new SD(\"utf8\");\n\t\t\t\t}\n\t\t\t\tdata = this._decoder.write(data);\n\t\t\t}\n\t\t\tthis._parser.write(data.toString());\n\t\t\tthis.emit(\"data\", data);\n\t\t\treturn true;\n\t\t};\n\t\tSAXStream.prototype.end = function(chunk) {\n\t\t\tif (chunk && chunk.length) this.write(chunk);\n\t\t\tthis._parser.end();\n\t\t\treturn true;\n\t\t};\n\t\tSAXStream.prototype.on = function(ev, handler) {\n\t\t\tvar me = this;\n\t\t\tif (!me._parser[\"on\" + ev] && streamWraps.indexOf(ev) !== -1) me._parser[\"on\" + ev] = function() {\n\t\t\t\tvar args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments);\n\t\t\t\targs.splice(0, 0, ev);\n\t\t\t\tme.emit.apply(me, args);\n\t\t\t};\n\t\t\treturn Stream.prototype.on.call(me, ev, handler);\n\t\t};\n\t\tvar CDATA = \"[CDATA[\";\n\t\tvar DOCTYPE = \"DOCTYPE\";\n\t\tvar XML_NAMESPACE = \"http://www.w3.org/XML/1998/namespace\";\n\t\tvar XMLNS_NAMESPACE = \"http://www.w3.org/2000/xmlns/\";\n\t\tvar rootNS = {\n\t\t\txml: XML_NAMESPACE,\n\t\t\txmlns: XMLNS_NAMESPACE\n\t\t};\n\t\tvar nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/;\n\t\tvar nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/;\n\t\tvar entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/;\n\t\tvar entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/;\n\t\tfunction isWhitespace(c) {\n\t\t\treturn c === \" \" || c === \"\\n\" || c === \"\\r\" || c === \"\t\";\n\t\t}\n\t\tfunction isQuote(c) {\n\t\t\treturn c === \"\\\"\" || c === \"'\";\n\t\t}\n\t\tfunction isAttribEnd(c) {\n\t\t\treturn c === \">\" || isWhitespace(c);\n\t\t}\n\t\tfunction isMatch(regex, c) {\n\t\t\treturn regex.test(c);\n\t\t}\n\t\tfunction notMatch(regex, c) {\n\t\t\treturn !isMatch(regex, c);\n\t\t}\n\t\tvar S = 0;\n\t\tsax.STATE = {\n\t\t\tBEGIN: S++,\n\t\t\tBEGIN_WHITESPACE: S++,\n\t\t\tTEXT: S++,\n\t\t\tTEXT_ENTITY: S++,\n\t\t\tOPEN_WAKA: S++,\n\t\t\tSGML_DECL: S++,\n\t\t\tSGML_DECL_QUOTED: S++,\n\t\t\tDOCTYPE: S++,\n\t\t\tDOCTYPE_QUOTED: S++,\n\t\t\tDOCTYPE_DTD: S++,\n\t\t\tDOCTYPE_DTD_QUOTED: S++,\n\t\t\tCOMMENT_STARTING: S++,\n\t\t\tCOMMENT: S++,\n\t\t\tCOMMENT_ENDING: S++,\n\t\t\tCOMMENT_ENDED: S++,\n\t\t\tCDATA: S++,\n\t\t\tCDATA_ENDING: S++,\n\t\t\tCDATA_ENDING_2: S++,\n\t\t\tPROC_INST: S++,\n\t\t\tPROC_INST_BODY: S++,\n\t\t\tPROC_INST_ENDING: S++,\n\t\t\tOPEN_TAG: S++,\n\t\t\tOPEN_TAG_SLASH: S++,\n\t\t\tATTRIB: S++,\n\t\t\tATTRIB_NAME: S++,\n\t\t\tATTRIB_NAME_SAW_WHITE: S++,\n\t\t\tATTRIB_VALUE: S++,\n\t\t\tATTRIB_VALUE_QUOTED: S++,\n\t\t\tATTRIB_VALUE_CLOSED: S++,\n\t\t\tATTRIB_VALUE_UNQUOTED: S++,\n\t\t\tATTRIB_VALUE_ENTITY_Q: S++,\n\t\t\tATTRIB_VALUE_ENTITY_U: S++,\n\t\t\tCLOSE_TAG: S++,\n\t\t\tCLOSE_TAG_SAW_WHITE: S++,\n\t\t\tSCRIPT: S++,\n\t\t\tSCRIPT_ENDING: S++\n\t\t};\n\t\tsax.XML_ENTITIES = {\n\t\t\t\"amp\": \"&\",\n\t\t\t\"gt\": \">\",\n\t\t\t\"lt\": \"<\",\n\t\t\t\"quot\": \"\\\"\",\n\t\t\t\"apos\": \"'\"\n\t\t};\n\t\tsax.ENTITIES = {\n\t\t\t\"amp\": \"&\",\n\t\t\t\"gt\": \">\",\n\t\t\t\"lt\": \"<\",\n\t\t\t\"quot\": \"\\\"\",\n\t\t\t\"apos\": \"'\",\n\t\t\t\"AElig\": 198,\n\t\t\t\"Aacute\": 193,\n\t\t\t\"Acirc\": 194,\n\t\t\t\"Agrave\": 192,\n\t\t\t\"Aring\": 197,\n\t\t\t\"Atilde\": 195,\n\t\t\t\"Auml\": 196,\n\t\t\t\"Ccedil\": 199,\n\t\t\t\"ETH\": 208,\n\t\t\t\"Eacute\": 201,\n\t\t\t\"Ecirc\": 202,\n\t\t\t\"Egrave\": 200,\n\t\t\t\"Euml\": 203,\n\t\t\t\"Iacute\": 205,\n\t\t\t\"Icirc\": 206,\n\t\t\t\"Igrave\": 204,\n\t\t\t\"Iuml\": 207,\n\t\t\t\"Ntilde\": 209,\n\t\t\t\"Oacute\": 211,\n\t\t\t\"Ocirc\": 212,\n\t\t\t\"Ograve\": 210,\n\t\t\t\"Oslash\": 216,\n\t\t\t\"Otilde\": 213,\n\t\t\t\"Ouml\": 214,\n\t\t\t\"THORN\": 222,\n\t\t\t\"Uacute\": 218,\n\t\t\t\"Ucirc\": 219,\n\t\t\t\"Ugrave\": 217,\n\t\t\t\"Uuml\": 220,\n\t\t\t\"Yacute\": 221,\n\t\t\t\"aacute\": 225,\n\t\t\t\"acirc\": 226,\n\t\t\t\"aelig\": 230,\n\t\t\t\"agrave\": 224,\n\t\t\t\"aring\": 229,\n\t\t\t\"atilde\": 227,\n\t\t\t\"auml\": 228,\n\t\t\t\"ccedil\": 231,\n\t\t\t\"eacute\": 233,\n\t\t\t\"ecirc\": 234,\n\t\t\t\"egrave\": 232,\n\t\t\t\"eth\": 240,\n\t\t\t\"euml\": 235,\n\t\t\t\"iacute\": 237,\n\t\t\t\"icirc\": 238,\n\t\t\t\"igrave\": 236,\n\t\t\t\"iuml\": 239,\n\t\t\t\"ntilde\": 241,\n\t\t\t\"oacute\": 243,\n\t\t\t\"ocirc\": 244,\n\t\t\t\"ograve\": 242,\n\t\t\t\"oslash\": 248,\n\t\t\t\"otilde\": 245,\n\t\t\t\"ouml\": 246,\n\t\t\t\"szlig\": 223,\n\t\t\t\"thorn\": 254,\n\t\t\t\"uacute\": 250,\n\t\t\t\"ucirc\": 251,\n\t\t\t\"ugrave\": 249,\n\t\t\t\"uuml\": 252,\n\t\t\t\"yacute\": 253,\n\t\t\t\"yuml\": 255,\n\t\t\t\"copy\": 169,\n\t\t\t\"reg\": 174,\n\t\t\t\"nbsp\": 160,\n\t\t\t\"iexcl\": 161,\n\t\t\t\"cent\": 162,\n\t\t\t\"pound\": 163,\n\t\t\t\"curren\": 164,\n\t\t\t\"yen\": 165,\n\t\t\t\"brvbar\": 166,\n\t\t\t\"sect\": 167,\n\t\t\t\"uml\": 168,\n\t\t\t\"ordf\": 170,\n\t\t\t\"laquo\": 171,\n\t\t\t\"not\": 172,\n\t\t\t\"shy\": 173,\n\t\t\t\"macr\": 175,\n\t\t\t\"deg\": 176,\n\t\t\t\"plusmn\": 177,\n\t\t\t\"sup1\": 185,\n\t\t\t\"sup2\": 178,\n\t\t\t\"sup3\": 179,\n\t\t\t\"acute\": 180,\n\t\t\t\"micro\": 181,\n\t\t\t\"para\": 182,\n\t\t\t\"middot\": 183,\n\t\t\t\"cedil\": 184,\n\t\t\t\"ordm\": 186,\n\t\t\t\"raquo\": 187,\n\t\t\t\"frac14\": 188,\n\t\t\t\"frac12\": 189,\n\t\t\t\"frac34\": 190,\n\t\t\t\"iquest\": 191,\n\t\t\t\"times\": 215,\n\t\t\t\"divide\": 247,\n\t\t\t\"OElig\": 338,\n\t\t\t\"oelig\": 339,\n\t\t\t\"Scaron\": 352,\n\t\t\t\"scaron\": 353,\n\t\t\t\"Yuml\": 376,\n\t\t\t\"fnof\": 402,\n\t\t\t\"circ\": 710,\n\t\t\t\"tilde\": 732,\n\t\t\t\"Alpha\": 913,\n\t\t\t\"Beta\": 914,\n\t\t\t\"Gamma\": 915,\n\t\t\t\"Delta\": 916,\n\t\t\t\"Epsilon\": 917,\n\t\t\t\"Zeta\": 918,\n\t\t\t\"Eta\": 919,\n\t\t\t\"Theta\": 920,\n\t\t\t\"Iota\": 921,\n\t\t\t\"Kappa\": 922,\n\t\t\t\"Lambda\": 923,\n\t\t\t\"Mu\": 924,\n\t\t\t\"Nu\": 925,\n\t\t\t\"Xi\": 926,\n\t\t\t\"Omicron\": 927,\n\t\t\t\"Pi\": 928,\n\t\t\t\"Rho\": 929,\n\t\t\t\"Sigma\": 931,\n\t\t\t\"Tau\": 932,\n\t\t\t\"Upsilon\": 933,\n\t\t\t\"Phi\": 934,\n\t\t\t\"Chi\": 935,\n\t\t\t\"Psi\": 936,\n\t\t\t\"Omega\": 937,\n\t\t\t\"alpha\": 945,\n\t\t\t\"beta\": 946,\n\t\t\t\"gamma\": 947,\n\t\t\t\"delta\": 948,\n\t\t\t\"epsilon\": 949,\n\t\t\t\"zeta\": 950,\n\t\t\t\"eta\": 951,\n\t\t\t\"theta\": 952,\n\t\t\t\"iota\": 953,\n\t\t\t\"kappa\": 954,\n\t\t\t\"lambda\": 955,\n\t\t\t\"mu\": 956,\n\t\t\t\"nu\": 957,\n\t\t\t\"xi\": 958,\n\t\t\t\"omicron\": 959,\n\t\t\t\"pi\": 960,\n\t\t\t\"rho\": 961,\n\t\t\t\"sigmaf\": 962,\n\t\t\t\"sigma\": 963,\n\t\t\t\"tau\": 964,\n\t\t\t\"upsilon\": 965,\n\t\t\t\"phi\": 966,\n\t\t\t\"chi\": 967,\n\t\t\t\"psi\": 968,\n\t\t\t\"omega\": 969,\n\t\t\t\"thetasym\": 977,\n\t\t\t\"upsih\": 978,\n\t\t\t\"piv\": 982,\n\t\t\t\"ensp\": 8194,\n\t\t\t\"emsp\": 8195,\n\t\t\t\"thinsp\": 8201,\n\t\t\t\"zwnj\": 8204,\n\t\t\t\"zwj\": 8205,\n\t\t\t\"lrm\": 8206,\n\t\t\t\"rlm\": 8207,\n\t\t\t\"ndash\": 8211,\n\t\t\t\"mdash\": 8212,\n\t\t\t\"lsquo\": 8216,\n\t\t\t\"rsquo\": 8217,\n\t\t\t\"sbquo\": 8218,\n\t\t\t\"ldquo\": 8220,\n\t\t\t\"rdquo\": 8221,\n\t\t\t\"bdquo\": 8222,\n\t\t\t\"dagger\": 8224,\n\t\t\t\"Dagger\": 8225,\n\t\t\t\"bull\": 8226,\n\t\t\t\"hellip\": 8230,\n\t\t\t\"permil\": 8240,\n\t\t\t\"prime\": 8242,\n\t\t\t\"Prime\": 8243,\n\t\t\t\"lsaquo\": 8249,\n\t\t\t\"rsaquo\": 8250,\n\t\t\t\"oline\": 8254,\n\t\t\t\"frasl\": 8260,\n\t\t\t\"euro\": 8364,\n\t\t\t\"image\": 8465,\n\t\t\t\"weierp\": 8472,\n\t\t\t\"real\": 8476,\n\t\t\t\"trade\": 8482,\n\t\t\t\"alefsym\": 8501,\n\t\t\t\"larr\": 8592,\n\t\t\t\"uarr\": 8593,\n\t\t\t\"rarr\": 8594,\n\t\t\t\"darr\": 8595,\n\t\t\t\"harr\": 8596,\n\t\t\t\"crarr\": 8629,\n\t\t\t\"lArr\": 8656,\n\t\t\t\"uArr\": 8657,\n\t\t\t\"rArr\": 8658,\n\t\t\t\"dArr\": 8659,\n\t\t\t\"hArr\": 8660,\n\t\t\t\"forall\": 8704,\n\t\t\t\"part\": 8706,\n\t\t\t\"exist\": 8707,\n\t\t\t\"empty\": 8709,\n\t\t\t\"nabla\": 8711,\n\t\t\t\"isin\": 8712,\n\t\t\t\"notin\": 8713,\n\t\t\t\"ni\": 8715,\n\t\t\t\"prod\": 8719,\n\t\t\t\"sum\": 8721,\n\t\t\t\"minus\": 8722,\n\t\t\t\"lowast\": 8727,\n\t\t\t\"radic\": 8730,\n\t\t\t\"prop\": 8733,\n\t\t\t\"infin\": 8734,\n\t\t\t\"ang\": 8736,\n\t\t\t\"and\": 8743,\n\t\t\t\"or\": 8744,\n\t\t\t\"cap\": 8745,\n\t\t\t\"cup\": 8746,\n\t\t\t\"int\": 8747,\n\t\t\t\"there4\": 8756,\n\t\t\t\"sim\": 8764,\n\t\t\t\"cong\": 8773,\n\t\t\t\"asymp\": 8776,\n\t\t\t\"ne\": 8800,\n\t\t\t\"equiv\": 8801,\n\t\t\t\"le\": 8804,\n\t\t\t\"ge\": 8805,\n\t\t\t\"sub\": 8834,\n\t\t\t\"sup\": 8835,\n\t\t\t\"nsub\": 8836,\n\t\t\t\"sube\": 8838,\n\t\t\t\"supe\": 8839,\n\t\t\t\"oplus\": 8853,\n\t\t\t\"otimes\": 8855,\n\t\t\t\"perp\": 8869,\n\t\t\t\"sdot\": 8901,\n\t\t\t\"lceil\": 8968,\n\t\t\t\"rceil\": 8969,\n\t\t\t\"lfloor\": 8970,\n\t\t\t\"rfloor\": 8971,\n\t\t\t\"lang\": 9001,\n\t\t\t\"rang\": 9002,\n\t\t\t\"loz\": 9674,\n\t\t\t\"spades\": 9824,\n\t\t\t\"clubs\": 9827,\n\t\t\t\"hearts\": 9829,\n\t\t\t\"diams\": 9830\n\t\t};\n\t\tObject.keys(sax.ENTITIES).forEach(function(key) {\n\t\t\tvar e = sax.ENTITIES[key];\n\t\t\tvar s = typeof e === \"number\" ? String.fromCharCode(e) : e;\n\t\t\tsax.ENTITIES[key] = s;\n\t\t});\n\t\tfor (var s in sax.STATE) sax.STATE[sax.STATE[s]] = s;\n\t\tS = sax.STATE;\n\t\tfunction emit(parser, event, data) {\n\t\t\tparser[event] && parser[event](data);\n\t\t}\n\t\tfunction emitNode(parser, nodeType, data) {\n\t\t\tif (parser.textNode) closeText(parser);\n\t\t\temit(parser, nodeType, data);\n\t\t}\n\t\tfunction closeText(parser) {\n\t\t\tparser.textNode = textopts(parser.opt, parser.textNode);\n\t\t\tif (parser.textNode) emit(parser, \"ontext\", parser.textNode);\n\t\t\tparser.textNode = \"\";\n\t\t}\n\t\tfunction textopts(opt, text) {\n\t\t\tif (opt.trim) text = text.trim();\n\t\t\tif (opt.normalize) text = text.replace(/\\s+/g, \" \");\n\t\t\treturn text;\n\t\t}\n\t\tfunction error(parser, er) {\n\t\t\tcloseText(parser);\n\t\t\tif (parser.trackPosition) er += \"\\nLine: \" + parser.line + \"\\nColumn: \" + parser.column + \"\\nChar: \" + parser.c;\n\t\t\ter = new Error(er);\n\t\t\tparser.error = er;\n\t\t\temit(parser, \"onerror\", er);\n\t\t\treturn parser;\n\t\t}\n\t\tfunction end(parser) {\n\t\t\tif (parser.sawRoot && !parser.closedRoot) strictFail(parser, \"Unclosed root tag\");\n\t\t\tif (parser.state !== S.BEGIN && parser.state !== S.BEGIN_WHITESPACE && parser.state !== S.TEXT) error(parser, \"Unexpected end\");\n\t\t\tcloseText(parser);\n\t\t\tparser.c = \"\";\n\t\t\tparser.closed = true;\n\t\t\temit(parser, \"onend\");\n\t\t\tSAXParser.call(parser, parser.strict, parser.opt);\n\t\t\treturn parser;\n\t\t}\n\t\tfunction strictFail(parser, message) {\n\t\t\tif (typeof parser !== \"object\" || !(parser instanceof SAXParser)) throw new Error(\"bad call to strictFail\");\n\t\t\tif (parser.strict) error(parser, message);\n\t\t}\n\t\tfunction newTag(parser) {\n\t\t\tif (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]();\n\t\t\tvar parent = parser.tags[parser.tags.length - 1] || parser;\n\t\t\tvar tag = parser.tag = {\n\t\t\t\tname: parser.tagName,\n\t\t\t\tattributes: {}\n\t\t\t};\n\t\t\tif (parser.opt.xmlns) tag.ns = parent.ns;\n\t\t\tparser.attribList.length = 0;\n\t\t\temitNode(parser, \"onopentagstart\", tag);\n\t\t}\n\t\tfunction qname(name, attribute) {\n\t\t\tvar qualName = name.indexOf(\":\") < 0 ? [\"\", name] : name.split(\":\");\n\t\t\tvar prefix = qualName[0];\n\t\t\tvar local = qualName[1];\n\t\t\tif (attribute && name === \"xmlns\") {\n\t\t\t\tprefix = \"xmlns\";\n\t\t\t\tlocal = \"\";\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tprefix,\n\t\t\t\tlocal\n\t\t\t};\n\t\t}\n\t\tfunction attrib(parser) {\n\t\t\tif (!parser.strict) parser.attribName = parser.attribName[parser.looseCase]();\n\t\t\tif (parser.attribList.indexOf(parser.attribName) !== -1 || parser.tag.attributes.hasOwnProperty(parser.attribName)) {\n\t\t\t\tparser.attribName = parser.attribValue = \"\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parser.opt.xmlns) {\n\t\t\t\tvar qn = qname(parser.attribName, true);\n\t\t\t\tvar prefix = qn.prefix;\n\t\t\t\tvar local = qn.local;\n\t\t\t\tif (prefix === \"xmlns\") if (local === \"xml\" && parser.attribValue !== XML_NAMESPACE) strictFail(parser, \"xml: prefix must be bound to \" + XML_NAMESPACE + \"\\nActual: \" + parser.attribValue);\n\t\t\t\telse if (local === \"xmlns\" && parser.attribValue !== XMLNS_NAMESPACE) strictFail(parser, \"xmlns: prefix must be bound to \" + XMLNS_NAMESPACE + \"\\nActual: \" + parser.attribValue);\n\t\t\t\telse {\n\t\t\t\t\tvar tag = parser.tag;\n\t\t\t\t\tvar parent = parser.tags[parser.tags.length - 1] || parser;\n\t\t\t\t\tif (tag.ns === parent.ns) tag.ns = Object.create(parent.ns);\n\t\t\t\t\ttag.ns[local] = parser.attribValue;\n\t\t\t\t}\n\t\t\t\tparser.attribList.push([parser.attribName, parser.attribValue]);\n\t\t\t} else {\n\t\t\t\tparser.tag.attributes[parser.attribName] = parser.attribValue;\n\t\t\t\temitNode(parser, \"onattribute\", {\n\t\t\t\t\tname: parser.attribName,\n\t\t\t\t\tvalue: parser.attribValue\n\t\t\t\t});\n\t\t\t}\n\t\t\tparser.attribName = parser.attribValue = \"\";\n\t\t}\n\t\tfunction openTag(parser, selfClosing) {\n\t\t\tif (parser.opt.xmlns) {\n\t\t\t\tvar tag = parser.tag;\n\t\t\t\tvar qn = qname(parser.tagName);\n\t\t\t\ttag.prefix = qn.prefix;\n\t\t\t\ttag.local = qn.local;\n\t\t\t\ttag.uri = tag.ns[qn.prefix] || \"\";\n\t\t\t\tif (tag.prefix && !tag.uri) {\n\t\t\t\t\tstrictFail(parser, \"Unbound namespace prefix: \" + JSON.stringify(parser.tagName));\n\t\t\t\t\ttag.uri = qn.prefix;\n\t\t\t\t}\n\t\t\t\tvar parent = parser.tags[parser.tags.length - 1] || parser;\n\t\t\t\tif (tag.ns && parent.ns !== tag.ns) Object.keys(tag.ns).forEach(function(p) {\n\t\t\t\t\temitNode(parser, \"onopennamespace\", {\n\t\t\t\t\t\tprefix: p,\n\t\t\t\t\t\turi: tag.ns[p]\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tfor (var i = 0, l = parser.attribList.length; i < l; i++) {\n\t\t\t\t\tvar nv = parser.attribList[i];\n\t\t\t\t\tvar name = nv[0];\n\t\t\t\t\tvar value = nv[1];\n\t\t\t\t\tvar qualName = qname(name, true);\n\t\t\t\t\tvar prefix = qualName.prefix;\n\t\t\t\t\tvar local = qualName.local;\n\t\t\t\t\tvar uri = prefix === \"\" ? \"\" : tag.ns[prefix] || \"\";\n\t\t\t\t\tvar a = {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tlocal,\n\t\t\t\t\t\turi\n\t\t\t\t\t};\n\t\t\t\t\tif (prefix && prefix !== \"xmlns\" && !uri) {\n\t\t\t\t\t\tstrictFail(parser, \"Unbound namespace prefix: \" + JSON.stringify(prefix));\n\t\t\t\t\t\ta.uri = prefix;\n\t\t\t\t\t}\n\t\t\t\t\tparser.tag.attributes[name] = a;\n\t\t\t\t\temitNode(parser, \"onattribute\", a);\n\t\t\t\t}\n\t\t\t\tparser.attribList.length = 0;\n\t\t\t}\n\t\t\tparser.tag.isSelfClosing = !!selfClosing;\n\t\t\tparser.sawRoot = true;\n\t\t\tparser.tags.push(parser.tag);\n\t\t\temitNode(parser, \"onopentag\", parser.tag);\n\t\t\tif (!selfClosing) {\n\t\t\t\tif (!parser.noscript && parser.tagName.toLowerCase() === \"script\") parser.state = S.SCRIPT;\n\t\t\t\telse parser.state = S.TEXT;\n\t\t\t\tparser.tag = null;\n\t\t\t\tparser.tagName = \"\";\n\t\t\t}\n\t\t\tparser.attribName = parser.attribValue = \"\";\n\t\t\tparser.attribList.length = 0;\n\t\t}\n\t\tfunction closeTag(parser) {\n\t\t\tif (!parser.tagName) {\n\t\t\t\tstrictFail(parser, \"Weird empty close tag.\");\n\t\t\t\tparser.textNode += \"</>\";\n\t\t\t\tparser.state = S.TEXT;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parser.script) {\n\t\t\t\tif (parser.tagName !== \"script\") {\n\t\t\t\t\tparser.script += \"</\" + parser.tagName + \">\";\n\t\t\t\t\tparser.tagName = \"\";\n\t\t\t\t\tparser.state = S.SCRIPT;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\temitNode(parser, \"onscript\", parser.script);\n\t\t\t\tparser.script = \"\";\n\t\t\t}\n\t\t\tvar t = parser.tags.length;\n\t\t\tvar tagName = parser.tagName;\n\t\t\tif (!parser.strict) tagName = tagName[parser.looseCase]();\n\t\t\tvar closeTo = tagName;\n\t\t\twhile (t--) if (parser.tags[t].name !== closeTo) strictFail(parser, \"Unexpected close tag\");\n\t\t\telse break;\n\t\t\tif (t < 0) {\n\t\t\t\tstrictFail(parser, \"Unmatched closing tag: \" + parser.tagName);\n\t\t\t\tparser.textNode += \"</\" + parser.tagName + \">\";\n\t\t\t\tparser.state = S.TEXT;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tparser.tagName = tagName;\n\t\t\tvar s = parser.tags.length;\n\t\t\twhile (s-- > t) {\n\t\t\t\tvar tag = parser.tag = parser.tags.pop();\n\t\t\t\tparser.tagName = parser.tag.name;\n\t\t\t\temitNode(parser, \"onclosetag\", parser.tagName);\n\t\t\t\tvar x = {};\n\t\t\t\tfor (var i in tag.ns) x[i] = tag.ns[i];\n\t\t\t\tvar parent = parser.tags[parser.tags.length - 1] || parser;\n\t\t\t\tif (parser.opt.xmlns && tag.ns !== parent.ns) Object.keys(tag.ns).forEach(function(p) {\n\t\t\t\t\tvar n = tag.ns[p];\n\t\t\t\t\temitNode(parser, \"onclosenamespace\", {\n\t\t\t\t\t\tprefix: p,\n\t\t\t\t\t\turi: n\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (t === 0) parser.closedRoot = true;\n\t\t\tparser.tagName = parser.attribValue = parser.attribName = \"\";\n\t\t\tparser.attribList.length = 0;\n\t\t\tparser.state = S.TEXT;\n\t\t}\n\t\tfunction parseEntity(parser) {\n\t\t\tvar entity = parser.entity;\n\t\t\tvar entityLC = entity.toLowerCase();\n\t\t\tvar num;\n\t\t\tvar numStr = \"\";\n\t\t\tif (parser.ENTITIES[entity]) return parser.ENTITIES[entity];\n\t\t\tif (parser.ENTITIES[entityLC]) return parser.ENTITIES[entityLC];\n\t\t\tentity = entityLC;\n\t\t\tif (entity.charAt(0) === \"#\") if (entity.charAt(1) === \"x\") {\n\t\t\t\tentity = entity.slice(2);\n\t\t\t\tnum = parseInt(entity, 16);\n\t\t\t\tnumStr = num.toString(16);\n\t\t\t} else {\n\t\t\t\tentity = entity.slice(1);\n\t\t\t\tnum = parseInt(entity, 10);\n\t\t\t\tnumStr = num.toString(10);\n\t\t\t}\n\t\t\tentity = entity.replace(/^0+/, \"\");\n\t\t\tif (isNaN(num) || numStr.toLowerCase() !== entity) {\n\t\t\t\tstrictFail(parser, \"Invalid character entity\");\n\t\t\t\treturn \"&\" + parser.entity + \";\";\n\t\t\t}\n\t\t\treturn String.fromCodePoint(num);\n\t\t}\n\t\tfunction beginWhiteSpace(parser, c) {\n\t\t\tif (c === \"<\") {\n\t\t\t\tparser.state = S.OPEN_WAKA;\n\t\t\t\tparser.startTagPosition = parser.position;\n\t\t\t} else if (!isWhitespace(c)) {\n\t\t\t\tstrictFail(parser, \"Non-whitespace before first tag.\");\n\t\t\t\tparser.textNode = c;\n\t\t\t\tparser.state = S.TEXT;\n\t\t\t}\n\t\t}\n\t\tfunction charAt(chunk, i) {\n\t\t\tvar result = \"\";\n\t\t\tif (i < chunk.length) result = chunk.charAt(i);\n\t\t\treturn result;\n\t\t}\n\t\tfunction write(chunk) {\n\t\t\tvar parser = this;\n\t\t\tif (this.error) throw this.error;\n\t\t\tif (parser.closed) return error(parser, \"Cannot write after close. Assign an onready handler.\");\n\t\t\tif (chunk === null) return end(parser);\n\t\t\tif (typeof chunk === \"object\") chunk = chunk.toString();\n\t\t\tvar i = 0;\n\t\t\tvar c = \"\";\n\t\t\twhile (true) {\n\t\t\t\tc = charAt(chunk, i++);\n\t\t\t\tparser.c = c;\n\t\t\t\tif (!c) break;\n\t\t\t\tif (parser.trackPosition) {\n\t\t\t\t\tparser.position++;\n\t\t\t\t\tif (c === \"\\n\") {\n\t\t\t\t\t\tparser.line++;\n\t\t\t\t\t\tparser.column = 0;\n\t\t\t\t\t} else parser.column++;\n\t\t\t\t}\n\t\t\t\tswitch (parser.state) {\n\t\t\t\t\tcase S.BEGIN:\n\t\t\t\t\t\tparser.state = S.BEGIN_WHITESPACE;\n\t\t\t\t\t\tif (c === \"\") continue;\n\t\t\t\t\t\tbeginWhiteSpace(parser, c);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.BEGIN_WHITESPACE:\n\t\t\t\t\t\tbeginWhiteSpace(parser, c);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.TEXT:\n\t\t\t\t\t\tif (parser.sawRoot && !parser.closedRoot) {\n\t\t\t\t\t\t\tvar starti = i - 1;\n\t\t\t\t\t\t\twhile (c && c !== \"<\" && c !== \"&\") {\n\t\t\t\t\t\t\t\tc = charAt(chunk, i++);\n\t\t\t\t\t\t\t\tif (c && parser.trackPosition) {\n\t\t\t\t\t\t\t\t\tparser.position++;\n\t\t\t\t\t\t\t\t\tif (c === \"\\n\") {\n\t\t\t\t\t\t\t\t\t\tparser.line++;\n\t\t\t\t\t\t\t\t\t\tparser.column = 0;\n\t\t\t\t\t\t\t\t\t} else parser.column++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tparser.textNode += chunk.substring(starti, i - 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c === \"<\" && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\n\t\t\t\t\t\t\tparser.state = S.OPEN_WAKA;\n\t\t\t\t\t\t\tparser.startTagPosition = parser.position;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) strictFail(parser, \"Text data outside of root node.\");\n\t\t\t\t\t\t\tif (c === \"&\") parser.state = S.TEXT_ENTITY;\n\t\t\t\t\t\t\telse parser.textNode += c;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.SCRIPT:\n\t\t\t\t\t\tif (c === \"<\") parser.state = S.SCRIPT_ENDING;\n\t\t\t\t\t\telse parser.script += c;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.SCRIPT_ENDING:\n\t\t\t\t\t\tif (c === \"/\") parser.state = S.CLOSE_TAG;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tparser.script += \"<\" + c;\n\t\t\t\t\t\t\tparser.state = S.SCRIPT;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.OPEN_WAKA:\n\t\t\t\t\t\tif (c === \"!\") {\n\t\t\t\t\t\t\tparser.state = S.SGML_DECL;\n\t\t\t\t\t\t\tparser.sgmlDecl = \"\";\n\t\t\t\t\t\t} else if (isWhitespace(c)) {} else if (isMatch(nameStart, c)) {\n\t\t\t\t\t\t\tparser.state = S.OPEN_TAG;\n\t\t\t\t\t\t\tparser.tagName = c;\n\t\t\t\t\t\t} else if (c === \"/\") {\n\t\t\t\t\t\t\tparser.state = S.CLOSE_TAG;\n\t\t\t\t\t\t\tparser.tagName = \"\";\n\t\t\t\t\t\t} else if (c === \"?\") {\n\t\t\t\t\t\t\tparser.state = S.PROC_INST;\n\t\t\t\t\t\t\tparser.procInstName = parser.procInstBody = \"\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstrictFail(parser, \"Unencoded <\");\n\t\t\t\t\t\t\tif (parser.startTagPosition + 1 < parser.position) {\n\t\t\t\t\t\t\t\tvar pad = parser.position - parser.startTagPosition;\n\t\t\t\t\t\t\t\tc = new Array(pad).join(\" \") + c;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tparser.textNode += \"<\" + c;\n\t\t\t\t\t\t\tparser.state = S.TEXT;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.SGML_DECL:\n\t\t\t\t\t\tif (parser.sgmlDecl + c === \"--\") {\n\t\t\t\t\t\t\tparser.state = S.COMMENT;\n\t\t\t\t\t\t\tparser.comment = \"\";\n\t\t\t\t\t\t\tparser.sgmlDecl = \"\";\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (parser.doctype && parser.doctype !== true && parser.sgmlDecl) {\n\t\t\t\t\t\t\tparser.state = S.DOCTYPE_DTD;\n\t\t\t\t\t\t\tparser.doctype += \"<!\" + parser.sgmlDecl + c;\n\t\t\t\t\t\t\tparser.sgmlDecl = \"\";\n\t\t\t\t\t\t} else if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n\t\t\t\t\t\t\temitNode(parser, \"onopencdata\");\n\t\t\t\t\t\t\tparser.state = S.CDATA;\n\t\t\t\t\t\t\tparser.sgmlDecl = \"\";\n\t\t\t\t\t\t\tparser.cdata = \"\";\n\t\t\t\t\t\t} else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n\t\t\t\t\t\t\tparser.state = S.DOCTYPE;\n\t\t\t\t\t\t\tif (parser.doctype || parser.sawRoot) strictFail(parser, \"Inappropriately located doctype declaration\");\n\t\t\t\t\t\t\tparser.doctype = \"\";\n\t\t\t\t\t\t\tparser.sgmlDecl = \"\";\n\t\t\t\t\t\t} else if (c === \">\") {\n\t\t\t\t\t\t\temitNode(parser, \"onsgmldeclaration\", parser.sgmlDecl);\n\t\t\t\t\t\t\tparser.sgmlDecl = \"\";\n\t\t\t\t\t\t\tparser.state = S.TEXT;\n\t\t\t\t\t\t} else if (isQuote(c)) {\n\t\t\t\t\t\t\tparser.state = S.SGML_DECL_QUOTED;\n\t\t\t\t\t\t\tparser.sgmlDecl += c;\n\t\t\t\t\t\t} else parser.sgmlDecl += c;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.SGML_DECL_QUOTED:\n\t\t\t\t\t\tif (c === parser.q) {\n\t\t\t\t\t\t\tparser.state = S.SGML_DECL;\n\t\t\t\t\t\t\tparser.q = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparser.sgmlDecl += c;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.DOCTYPE:\n\t\t\t\t\t\tif (c === \">\") {\n\t\t\t\t\t\t\tparser.state = S.TEXT;\n\t\t\t\t\t\t\temitNode(parser, \"ondoctype\", parser.doctype);\n\t\t\t\t\t\t\tparser.doctype = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparser.doctype += c;\n\t\t\t\t\t\t\tif (c === \"[\") parser.state = S.DOCTYPE_DTD;\n\t\t\t\t\t\t\telse if (isQuote(c)) {\n\t\t\t\t\t\t\t\tparser.state = S.DOCTYPE_QUOTED;\n\t\t\t\t\t\t\t\tparser.q = c;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.DOCTYPE_QUOTED:\n\t\t\t\t\t\tparser.doctype += c;\n\t\t\t\t\t\tif (c === parser.q) {\n\t\t\t\t\t\t\tparser.q = \"\";\n\t\t\t\t\t\t\tparser.state = S.DOCTYPE;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.DOCTYPE_DTD:\n\t\t\t\t\t\tif (c === \"]\") {\n\t\t\t\t\t\t\tparser.doctype += c;\n\t\t\t\t\t\t\tparser.state = S.DOCTYPE;\n\t\t\t\t\t\t} else if (c === \"<\") {\n\t\t\t\t\t\t\tparser.state = S.OPEN_WAKA;\n\t\t\t\t\t\t\tparser.startTagPosition = parser.position;\n\t\t\t\t\t\t} else if (isQuote(c)) {\n\t\t\t\t\t\t\tparser.doctype += c;\n\t\t\t\t\t\t\tparser.state = S.DOCTYPE_DTD_QUOTED;\n\t\t\t\t\t\t\tparser.q = c;\n\t\t\t\t\t\t} else parser.doctype += c;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.DOCTYPE_DTD_QUOTED:\n\t\t\t\t\t\tparser.doctype += c;\n\t\t\t\t\t\tif (c === parser.q) {\n\t\t\t\t\t\t\tparser.state = S.DOCTYPE_DTD;\n\t\t\t\t\t\t\tparser.q = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.COMMENT:\n\t\t\t\t\t\tif (c === \"-\") parser.state = S.COMMENT_ENDING;\n\t\t\t\t\t\telse parser.comment += c;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.COMMENT_ENDING:\n\t\t\t\t\t\tif (c === \"-\") {\n\t\t\t\t\t\t\tparser.state = S.COMMENT_ENDED;\n\t\t\t\t\t\t\tparser.comment = textopts(parser.opt, parser.comment);\n\t\t\t\t\t\t\tif (parser.comment) emitNode(parser, \"oncomment\", parser.comment);\n\t\t\t\t\t\t\tparser.comment = \"\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparser.comment += \"-\" + c;\n\t\t\t\t\t\t\tparser.state = S.COMMENT;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.COMMENT_ENDED:\n\t\t\t\t\t\tif (c !== \">\") {\n\t\t\t\t\t\t\tstrictFail(parser, \"Malformed comment\");\n\t\t\t\t\t\t\tparser.comment += \"--\" + c;\n\t\t\t\t\t\t\tparser.state = S.COMMENT;\n\t\t\t\t\t\t} else if (parser.doctype && parser.doctype !== true) parser.state = S.DOCTYPE_DTD;\n\t\t\t\t\t\telse parser.state = S.TEXT;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.CDATA:\n\t\t\t\t\t\tif (c === \"]\") parser.state = S.CDATA_ENDING;\n\t\t\t\t\t\telse parser.cdata += c;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.CDATA_ENDING:\n\t\t\t\t\t\tif (c === \"]\") parser.state = S.CDATA_ENDING_2;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tparser.cdata += \"]\" + c;\n\t\t\t\t\t\t\tparser.state = S.CDATA;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.CDATA_ENDING_2:\n\t\t\t\t\t\tif (c === \">\") {\n\t\t\t\t\t\t\tif (parser.cdata) emitNode(parser, \"oncdata\", parser.cdata);\n\t\t\t\t\t\t\temitNode(parser, \"onclosecdata\");\n\t\t\t\t\t\t\tparser.cdata = \"\";\n\t\t\t\t\t\t\tparser.state = S.TEXT;\n\t\t\t\t\t\t} else if (c === \"]\") parser.cdata += \"]\";\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tparser.cdata += \"]]\" + c;\n\t\t\t\t\t\t\tparser.state = S.CDATA;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.PROC_INST:\n\t\t\t\t\t\tif (c === \"?\") parser.state = S.PROC_INST_ENDING;\n\t\t\t\t\t\telse if (isWhitespace(c)) parser.state = S.PROC_INST_BODY;\n\t\t\t\t\t\telse parser.procInstName += c;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.PROC_INST_BODY:\n\t\t\t\t\t\tif (!parser.procInstBody && isWhitespace(c)) continue;\n\t\t\t\t\t\telse if (c === \"?\") parser.state = S.PROC_INST_ENDING;\n\t\t\t\t\t\telse parser.procInstBody += c;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.PROC_INST_ENDING:\n\t\t\t\t\t\tif (c === \">\") {\n\t\t\t\t\t\t\temitNode(parser, \"onprocessinginstruction\", {\n\t\t\t\t\t\t\t\tname: parser.procInstName,\n\t\t\t\t\t\t\t\tbody: parser.procInstBody\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tparser.procInstName = parser.procInstBody = \"\";\n\t\t\t\t\t\t\tparser.state = S.TEXT;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparser.procInstBody += \"?\" + c;\n\t\t\t\t\t\t\tparser.state = S.PROC_INST_BODY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.OPEN_TAG:\n\t\t\t\t\t\tif (isMatch(nameBody, c)) parser.tagName += c;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnewTag(parser);\n\t\t\t\t\t\t\tif (c === \">\") openTag(parser);\n\t\t\t\t\t\t\telse if (c === \"/\") parser.state = S.OPEN_TAG_SLASH;\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (!isWhitespace(c)) strictFail(parser, \"Invalid character in tag name\");\n\t\t\t\t\t\t\t\tparser.state = S.ATTRIB;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.OPEN_TAG_SLASH:\n\t\t\t\t\t\tif (c === \">\") {\n\t\t\t\t\t\t\topenTag(parser, true);\n\t\t\t\t\t\t\tcloseTag(parser);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstrictFail(parser, \"Forward-slash in opening tag not followed by >\");\n\t\t\t\t\t\t\tparser.state = S.ATTRIB;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.ATTRIB:\n\t\t\t\t\t\tif (isWhitespace(c)) continue;\n\t\t\t\t\t\telse if (c === \">\") openTag(parser);\n\t\t\t\t\t\telse if (c === \"/\") parser.state = S.OPEN_TAG_SLASH;\n\t\t\t\t\t\telse if (isMatch(nameStart, c)) {\n\t\t\t\t\t\t\tparser.attribName = c;\n\t\t\t\t\t\t\tparser.attribValue = \"\";\n\t\t\t\t\t\t\tparser.state = S.ATTRIB_NAME;\n\t\t\t\t\t\t} else strictFail(parser, \"Invalid attribute name\");\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.ATTRIB_NAME:\n\t\t\t\t\t\tif (c === \"=\") parser.state = S.ATTRIB_VALUE;\n\t\t\t\t\t\telse if (c === \">\") {\n\t\t\t\t\t\t\tstrictFail(parser, \"Attribute without value\");\n\t\t\t\t\t\t\tparser.attribValue = parser.attribName;\n\t\t\t\t\t\t\tattrib(parser);\n\t\t\t\t\t\t\topenTag(parser);\n\t\t\t\t\t\t} else if (isWhitespace(c)) parser.state = S.ATTRIB_NAME_SAW_WHITE;\n\t\t\t\t\t\telse if (isMatch(nameBody, c)) parser.attribName += c;\n\t\t\t\t\t\telse strictFail(parser, \"Invalid attribute name\");\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.ATTRIB_NAME_SAW_WHITE:\n\t\t\t\t\t\tif (c === \"=\") parser.state = S.ATTRIB_VALUE;\n\t\t\t\t\t\telse if (isWhitespace(c)) continue;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tstrictFail(parser, \"Attribute without value\");\n\t\t\t\t\t\t\tparser.tag.attributes[parser.attribName] = \"\";\n\t\t\t\t\t\t\tparser.attribValue = \"\";\n\t\t\t\t\t\t\temitNode(parser, \"onattribute\", {\n\t\t\t\t\t\t\t\tname: parser.attribName,\n\t\t\t\t\t\t\t\tvalue: \"\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tparser.attribName = \"\";\n\t\t\t\t\t\t\tif (c === \">\") openTag(parser);\n\t\t\t\t\t\t\telse if (isMatch(nameStart, c)) {\n\t\t\t\t\t\t\t\tparser.attribName = c;\n\t\t\t\t\t\t\t\tparser.state = S.ATTRIB_NAME;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstrictFail(parser, \"Invalid attribute name\");\n\t\t\t\t\t\t\t\tparser.state = S.ATTRIB;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.ATTRIB_VALUE:\n\t\t\t\t\t\tif (isWhitespace(c)) continue;\n\t\t\t\t\t\telse if (isQuote(c)) {\n\t\t\t\t\t\t\tparser.q = c;\n\t\t\t\t\t\t\tparser.state = S.ATTRIB_VALUE_QUOTED;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!parser.opt.unquotedAttributeValues) error(parser, \"Unquoted attribute value\");\n\t\t\t\t\t\t\tparser.state = S.ATTRIB_VALUE_UNQUOTED;\n\t\t\t\t\t\t\tparser.attribValue = c;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.ATTRIB_VALUE_QUOTED:\n\t\t\t\t\t\tif (c !== parser.q) {\n\t\t\t\t\t\t\tif (c === \"&\") parser.state = S.ATTRIB_VALUE_ENTITY_Q;\n\t\t\t\t\t\t\telse parser.attribValue += c;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tattrib(parser);\n\t\t\t\t\t\tparser.q = \"\";\n\t\t\t\t\t\tparser.state = S.ATTRIB_VALUE_CLOSED;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.ATTRIB_VALUE_CLOSED:\n\t\t\t\t\t\tif (isWhitespace(c)) parser.state = S.ATTRIB;\n\t\t\t\t\t\telse if (c === \">\") openTag(parser);\n\t\t\t\t\t\telse if (c === \"/\") parser.state = S.OPEN_TAG_SLASH;\n\t\t\t\t\t\telse if (isMatch(nameStart, c)) {\n\t\t\t\t\t\t\tstrictFail(parser, \"No whitespace between attributes\");\n\t\t\t\t\t\t\tparser.attribName = c;\n\t\t\t\t\t\t\tparser.attribValue = \"\";\n\t\t\t\t\t\t\tparser.state = S.ATTRIB_NAME;\n\t\t\t\t\t\t} else strictFail(parser, \"Invalid attribute name\");\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.ATTRIB_VALUE_UNQUOTED:\n\t\t\t\t\t\tif (!isAttribEnd(c)) {\n\t\t\t\t\t\t\tif (c === \"&\") parser.state = S.ATTRIB_VALUE_ENTITY_U;\n\t\t\t\t\t\t\telse parser.attribValue += c;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tattrib(parser);\n\t\t\t\t\t\tif (c === \">\") openTag(parser);\n\t\t\t\t\t\telse parser.state = S.ATTRIB;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.CLOSE_TAG:\n\t\t\t\t\t\tif (!parser.tagName) if (isWhitespace(c)) continue;\n\t\t\t\t\t\telse if (notMatch(nameStart, c)) if (parser.script) {\n\t\t\t\t\t\t\tparser.script += \"</\" + c;\n\t\t\t\t\t\t\tparser.state = S.SCRIPT;\n\t\t\t\t\t\t} else strictFail(parser, \"Invalid tagname in closing tag.\");\n\t\t\t\t\t\telse parser.tagName = c;\n\t\t\t\t\t\telse if (c === \">\") closeTag(parser);\n\t\t\t\t\t\telse if (isMatch(nameBody, c)) parser.tagName += c;\n\t\t\t\t\t\telse if (parser.script) {\n\t\t\t\t\t\t\tparser.script += \"</\" + parser.tagName;\n\t\t\t\t\t\t\tparser.tagName = \"\";\n\t\t\t\t\t\t\tparser.state = S.SCRIPT;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!isWhitespace(c)) strictFail(parser, \"Invalid tagname in closing tag\");\n\t\t\t\t\t\t\tparser.state = S.CLOSE_TAG_SAW_WHITE;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.CLOSE_TAG_SAW_WHITE:\n\t\t\t\t\t\tif (isWhitespace(c)) continue;\n\t\t\t\t\t\tif (c === \">\") closeTag(parser);\n\t\t\t\t\t\telse strictFail(parser, \"Invalid characters in closing tag\");\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase S.TEXT_ENTITY:\n\t\t\t\t\tcase S.ATTRIB_VALUE_ENTITY_Q:\n\t\t\t\t\tcase S.ATTRIB_VALUE_ENTITY_U:\n\t\t\t\t\t\tvar returnState;\n\t\t\t\t\t\tvar buffer;\n\t\t\t\t\t\tswitch (parser.state) {\n\t\t\t\t\t\t\tcase S.TEXT_ENTITY:\n\t\t\t\t\t\t\t\treturnState = S.TEXT;\n\t\t\t\t\t\t\t\tbuffer = \"textNode\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase S.ATTRIB_VALUE_ENTITY_Q:\n\t\t\t\t\t\t\t\treturnState = S.ATTRIB_VALUE_QUOTED;\n\t\t\t\t\t\t\t\tbuffer = \"attribValue\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase S.ATTRIB_VALUE_ENTITY_U:\n\t\t\t\t\t\t\t\treturnState = S.ATTRIB_VALUE_UNQUOTED;\n\t\t\t\t\t\t\t\tbuffer = \"attribValue\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c === \";\") {\n\t\t\t\t\t\t\tvar parsedEntity = parseEntity(parser);\n\t\t\t\t\t\t\tif (parser.opt.unparsedEntities && !Object.values(sax.XML_ENTITIES).includes(parsedEntity)) {\n\t\t\t\t\t\t\t\tparser.entity = \"\";\n\t\t\t\t\t\t\t\tparser.state = returnState;\n\t\t\t\t\t\t\t\tparser.write(parsedEntity);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tparser[buffer] += parsedEntity;\n\t\t\t\t\t\t\t\tparser.entity = \"\";\n\t\t\t\t\t\t\t\tparser.state = returnState;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) parser.entity += c;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tstrictFail(parser, \"Invalid character in entity name\");\n\t\t\t\t\t\t\tparser[buffer] += \"&\" + parser.entity + c;\n\t\t\t\t\t\t\tparser.entity = \"\";\n\t\t\t\t\t\t\tparser.state = returnState;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tdefault: throw new Error(parser, \"Unknown state: \" + parser.state);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (parser.position >= parser.bufferCheckPosition) checkBufferLength(parser);\n\t\t\treturn parser;\n\t\t}\n\t\t/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n\t\t/* istanbul ignore next */\n\t\tif (!String.fromCodePoint) (function() {\n\t\t\tvar stringFromCharCode = String.fromCharCode;\n\t\t\tvar floor = Math.floor;\n\t\t\tvar fromCodePoint = function() {\n\t\t\t\tvar MAX_SIZE = 16384;\n\t\t\t\tvar codeUnits = [];\n\t\t\t\tvar highSurrogate;\n\t\t\t\tvar lowSurrogate;\n\t\t\t\tvar index = -1;\n\t\t\t\tvar length = arguments.length;\n\t\t\t\tif (!length) return \"\";\n\t\t\t\tvar result = \"\";\n\t\t\t\twhile (++index < length) {\n\t\t\t\t\tvar codePoint = Number(arguments[index]);\n\t\t\t\t\tif (!isFinite(codePoint) || codePoint < 0 || codePoint > 1114111 || floor(codePoint) !== codePoint) throw RangeError(\"Invalid code point: \" + codePoint);\n\t\t\t\t\tif (codePoint <= 65535) codeUnits.push(codePoint);\n\t\t\t\t\telse {\n\t\t\t\t\t\tcodePoint -= 65536;\n\t\t\t\t\t\thighSurrogate = (codePoint >> 10) + 55296;\n\t\t\t\t\t\tlowSurrogate = codePoint % 1024 + 56320;\n\t\t\t\t\t\tcodeUnits.push(highSurrogate, lowSurrogate);\n\t\t\t\t\t}\n\t\t\t\t\tif (index + 1 === length || codeUnits.length > MAX_SIZE) {\n\t\t\t\t\t\tresult += stringFromCharCode.apply(null, codeUnits);\n\t\t\t\t\t\tcodeUnits.length = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t};\n\t\t\t/* istanbul ignore next */\n\t\t\tif (Object.defineProperty) Object.defineProperty(String, \"fromCodePoint\", {\n\t\t\t\tvalue: fromCodePoint,\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t\telse String.fromCodePoint = fromCodePoint;\n\t\t})();\n\t})(typeof exports === \"undefined\" ? exports.sax = {} : exports);\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/xml-js@1.6.11/node_modules/xml-js/lib/array-helper.js\nvar require_array_helper = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = { isArray: function(value) {\n\t\tif (Array.isArray) return Array.isArray(value);\n\t\treturn Object.prototype.toString.call(value) === \"[object Array]\";\n\t} };\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/xml-js@1.6.11/node_modules/xml-js/lib/options-helper.js\nvar require_options_helper = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar isArray = require_array_helper().isArray;\n\tmodule.exports = {\n\t\tcopyOptions: function(options) {\n\t\t\tvar key, copy = {};\n\t\t\tfor (key in options) if (options.hasOwnProperty(key)) copy[key] = options[key];\n\t\t\treturn copy;\n\t\t},\n\t\tensureFlagExists: function(item, options) {\n\t\t\tif (!(item in options) || typeof options[item] !== \"boolean\") options[item] = false;\n\t\t},\n\t\tensureSpacesExists: function(options) {\n\t\t\tif (!(\"spaces\" in options) || typeof options.spaces !== \"number\" && typeof options.spaces !== \"string\") options.spaces = 0;\n\t\t},\n\t\tensureAlwaysArrayExists: function(options) {\n\t\t\tif (!(\"alwaysArray\" in options) || typeof options.alwaysArray !== \"boolean\" && !isArray(options.alwaysArray)) options.alwaysArray = false;\n\t\t},\n\t\tensureKeyExists: function(key, options) {\n\t\t\tif (!(key + \"Key\" in options) || typeof options[key + \"Key\"] !== \"string\") options[key + \"Key\"] = options.compact ? \"_\" + key : key;\n\t\t},\n\t\tcheckFnExists: function(key, options) {\n\t\t\treturn key + \"Fn\" in options;\n\t\t}\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/xml-js@1.6.11/node_modules/xml-js/lib/xml2js.js\nvar require_xml2js = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar sax = require_sax();\n\tvar expat = {\n\t\ton: function() {},\n\t\tparse: function() {}\n\t};\n\tvar helper = require_options_helper();\n\tvar isArray = require_array_helper().isArray;\n\tvar options;\n\tvar pureJsParser = true;\n\tvar currentElement;\n\tfunction validateOptions(userOptions) {\n\t\toptions = helper.copyOptions(userOptions);\n\t\thelper.ensureFlagExists(\"ignoreDeclaration\", options);\n\t\thelper.ensureFlagExists(\"ignoreInstruction\", options);\n\t\thelper.ensureFlagExists(\"ignoreAttributes\", options);\n\t\thelper.ensureFlagExists(\"ignoreText\", options);\n\t\thelper.ensureFlagExists(\"ignoreComment\", options);\n\t\thelper.ensureFlagExists(\"ignoreCdata\", options);\n\t\thelper.ensureFlagExists(\"ignoreDoctype\", options);\n\t\thelper.ensureFlagExists(\"compact\", options);\n\t\thelper.ensureFlagExists(\"alwaysChildren\", options);\n\t\thelper.ensureFlagExists(\"addParent\", options);\n\t\thelper.ensureFlagExists(\"trim\", options);\n\t\thelper.ensureFlagExists(\"nativeType\", options);\n\t\thelper.ensureFlagExists(\"nativeTypeAttributes\", options);\n\t\thelper.ensureFlagExists(\"sanitize\", options);\n\t\thelper.ensureFlagExists(\"instructionHasAttributes\", options);\n\t\thelper.ensureFlagExists(\"captureSpacesBetweenElements\", options);\n\t\thelper.ensureAlwaysArrayExists(options);\n\t\thelper.ensureKeyExists(\"declaration\", options);\n\t\thelper.ensureKeyExists(\"instruction\", options);\n\t\thelper.ensureKeyExists(\"attributes\", options);\n\t\thelper.ensureKeyExists(\"text\", options);\n\t\thelper.ensureKeyExists(\"comment\", options);\n\t\thelper.ensureKeyExists(\"cdata\", options);\n\t\thelper.ensureKeyExists(\"doctype\", options);\n\t\thelper.ensureKeyExists(\"type\", options);\n\t\thelper.ensureKeyExists(\"name\", options);\n\t\thelper.ensureKeyExists(\"elements\", options);\n\t\thelper.ensureKeyExists(\"parent\", options);\n\t\thelper.checkFnExists(\"doctype\", options);\n\t\thelper.checkFnExists(\"instruction\", options);\n\t\thelper.checkFnExists(\"cdata\", options);\n\t\thelper.checkFnExists(\"comment\", options);\n\t\thelper.checkFnExists(\"text\", options);\n\t\thelper.checkFnExists(\"instructionName\", options);\n\t\thelper.checkFnExists(\"elementName\", options);\n\t\thelper.checkFnExists(\"attributeName\", options);\n\t\thelper.checkFnExists(\"attributeValue\", options);\n\t\thelper.checkFnExists(\"attributes\", options);\n\t\treturn options;\n\t}\n\tfunction nativeType(value) {\n\t\tvar nValue = Number(value);\n\t\tif (!isNaN(nValue)) return nValue;\n\t\tvar bValue = value.toLowerCase();\n\t\tif (bValue === \"true\") return true;\n\t\telse if (bValue === \"false\") return false;\n\t\treturn value;\n\t}\n\tfunction addField(type, value) {\n\t\tvar key;\n\t\tif (options.compact) {\n\t\t\tif (!currentElement[options[type + \"Key\"]] && (isArray(options.alwaysArray) ? options.alwaysArray.indexOf(options[type + \"Key\"]) !== -1 : options.alwaysArray)) currentElement[options[type + \"Key\"]] = [];\n\t\t\tif (currentElement[options[type + \"Key\"]] && !isArray(currentElement[options[type + \"Key\"]])) currentElement[options[type + \"Key\"]] = [currentElement[options[type + \"Key\"]]];\n\t\t\tif (type + \"Fn\" in options && typeof value === \"string\") value = options[type + \"Fn\"](value, currentElement);\n\t\t\tif (type === \"instruction\" && (\"instructionFn\" in options || \"instructionNameFn\" in options)) {\n\t\t\t\tfor (key in value) if (value.hasOwnProperty(key)) if (\"instructionFn\" in options) value[key] = options.instructionFn(value[key], key, currentElement);\n\t\t\t\telse {\n\t\t\t\t\tvar temp = value[key];\n\t\t\t\t\tdelete value[key];\n\t\t\t\t\tvalue[options.instructionNameFn(key, temp, currentElement)] = temp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isArray(currentElement[options[type + \"Key\"]])) currentElement[options[type + \"Key\"]].push(value);\n\t\t\telse currentElement[options[type + \"Key\"]] = value;\n\t\t} else {\n\t\t\tif (!currentElement[options.elementsKey]) currentElement[options.elementsKey] = [];\n\t\t\tvar element = {};\n\t\t\telement[options.typeKey] = type;\n\t\t\tif (type === \"instruction\") {\n\t\t\t\tfor (key in value) if (value.hasOwnProperty(key)) break;\n\t\t\t\telement[options.nameKey] = \"instructionNameFn\" in options ? options.instructionNameFn(key, value, currentElement) : key;\n\t\t\t\tif (options.instructionHasAttributes) {\n\t\t\t\t\telement[options.attributesKey] = value[key][options.attributesKey];\n\t\t\t\t\tif (\"instructionFn\" in options) element[options.attributesKey] = options.instructionFn(element[options.attributesKey], key, currentElement);\n\t\t\t\t} else {\n\t\t\t\t\tif (\"instructionFn\" in options) value[key] = options.instructionFn(value[key], key, currentElement);\n\t\t\t\t\telement[options.instructionKey] = value[key];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (type + \"Fn\" in options) value = options[type + \"Fn\"](value, currentElement);\n\t\t\t\telement[options[type + \"Key\"]] = value;\n\t\t\t}\n\t\t\tif (options.addParent) element[options.parentKey] = currentElement;\n\t\t\tcurrentElement[options.elementsKey].push(element);\n\t\t}\n\t}\n\tfunction manipulateAttributes(attributes) {\n\t\tif (\"attributesFn\" in options && attributes) attributes = options.attributesFn(attributes, currentElement);\n\t\tif ((options.trim || \"attributeValueFn\" in options || \"attributeNameFn\" in options || options.nativeTypeAttributes) && attributes) {\n\t\t\tvar key;\n\t\t\tfor (key in attributes) if (attributes.hasOwnProperty(key)) {\n\t\t\t\tif (options.trim) attributes[key] = attributes[key].trim();\n\t\t\t\tif (options.nativeTypeAttributes) attributes[key] = nativeType(attributes[key]);\n\t\t\t\tif (\"attributeValueFn\" in options) attributes[key] = options.attributeValueFn(attributes[key], key, currentElement);\n\t\t\t\tif (\"attributeNameFn\" in options) {\n\t\t\t\t\tvar temp = attributes[key];\n\t\t\t\t\tdelete attributes[key];\n\t\t\t\t\tattributes[options.attributeNameFn(key, attributes[key], currentElement)] = temp;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn attributes;\n\t}\n\tfunction onInstruction(instruction) {\n\t\tvar attributes = {};\n\t\tif (instruction.body && (instruction.name.toLowerCase() === \"xml\" || options.instructionHasAttributes)) {\n\t\t\tvar attrsRegExp = /([\\w:-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|(\\w+))\\s*/g;\n\t\t\tvar match;\n\t\t\twhile ((match = attrsRegExp.exec(instruction.body)) !== null) attributes[match[1]] = match[2] || match[3] || match[4];\n\t\t\tattributes = manipulateAttributes(attributes);\n\t\t}\n\t\tif (instruction.name.toLowerCase() === \"xml\") {\n\t\t\tif (options.ignoreDeclaration) return;\n\t\t\tcurrentElement[options.declarationKey] = {};\n\t\t\tif (Object.keys(attributes).length) currentElement[options.declarationKey][options.attributesKey] = attributes;\n\t\t\tif (options.addParent) currentElement[options.declarationKey][options.parentKey] = currentElement;\n\t\t} else {\n\t\t\tif (options.ignoreInstruction) return;\n\t\t\tif (options.trim) instruction.body = instruction.body.trim();\n\t\t\tvar value = {};\n\t\t\tif (options.instructionHasAttributes && Object.keys(attributes).length) {\n\t\t\t\tvalue[instruction.name] = {};\n\t\t\t\tvalue[instruction.name][options.attributesKey] = attributes;\n\t\t\t} else value[instruction.name] = instruction.body;\n\t\t\taddField(\"instruction\", value);\n\t\t}\n\t}\n\tfunction onStartElement(name, attributes) {\n\t\tvar element;\n\t\tif (typeof name === \"object\") {\n\t\t\tattributes = name.attributes;\n\t\t\tname = name.name;\n\t\t}\n\t\tattributes = manipulateAttributes(attributes);\n\t\tif (\"elementNameFn\" in options) name = options.elementNameFn(name, currentElement);\n\t\tif (options.compact) {\n\t\t\telement = {};\n\t\t\tif (!options.ignoreAttributes && attributes && Object.keys(attributes).length) {\n\t\t\t\telement[options.attributesKey] = {};\n\t\t\t\tvar key;\n\t\t\t\tfor (key in attributes) if (attributes.hasOwnProperty(key)) element[options.attributesKey][key] = attributes[key];\n\t\t\t}\n\t\t\tif (!(name in currentElement) && (isArray(options.alwaysArray) ? options.alwaysArray.indexOf(name) !== -1 : options.alwaysArray)) currentElement[name] = [];\n\t\t\tif (currentElement[name] && !isArray(currentElement[name])) currentElement[name] = [currentElement[name]];\n\t\t\tif (isArray(currentElement[name])) currentElement[name].push(element);\n\t\t\telse currentElement[name] = element;\n\t\t} else {\n\t\t\tif (!currentElement[options.elementsKey]) currentElement[options.elementsKey] = [];\n\t\t\telement = {};\n\t\t\telement[options.typeKey] = \"element\";\n\t\t\telement[options.nameKey] = name;\n\t\t\tif (!options.ignoreAttributes && attributes && Object.keys(attributes).length) element[options.attributesKey] = attributes;\n\t\t\tif (options.alwaysChildren) element[options.elementsKey] = [];\n\t\t\tcurrentElement[options.elementsKey].push(element);\n\t\t}\n\t\telement[options.parentKey] = currentElement;\n\t\tcurrentElement = element;\n\t}\n\tfunction onText(text) {\n\t\tif (options.ignoreText) return;\n\t\tif (!text.trim() && !options.captureSpacesBetweenElements) return;\n\t\tif (options.trim) text = text.trim();\n\t\tif (options.nativeType) text = nativeType(text);\n\t\tif (options.sanitize) text = text.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n\t\taddField(\"text\", text);\n\t}\n\tfunction onComment(comment) {\n\t\tif (options.ignoreComment) return;\n\t\tif (options.trim) comment = comment.trim();\n\t\taddField(\"comment\", comment);\n\t}\n\tfunction onEndElement(name) {\n\t\tvar parentElement = currentElement[options.parentKey];\n\t\tif (!options.addParent) delete currentElement[options.parentKey];\n\t\tcurrentElement = parentElement;\n\t}\n\tfunction onCdata(cdata) {\n\t\tif (options.ignoreCdata) return;\n\t\tif (options.trim) cdata = cdata.trim();\n\t\taddField(\"cdata\", cdata);\n\t}\n\tfunction onDoctype(doctype) {\n\t\tif (options.ignoreDoctype) return;\n\t\tdoctype = doctype.replace(/^ /, \"\");\n\t\tif (options.trim) doctype = doctype.trim();\n\t\taddField(\"doctype\", doctype);\n\t}\n\tfunction onError(error) {\n\t\terror.note = error;\n\t}\n\tmodule.exports = function(xml, userOptions) {\n\t\tvar parser = pureJsParser ? sax.parser(true, {}) : parser = new expat.Parser(\"UTF-8\");\n\t\tvar result = {};\n\t\tcurrentElement = result;\n\t\toptions = validateOptions(userOptions);\n\t\tif (pureJsParser) {\n\t\t\tparser.opt = { strictEntities: true };\n\t\t\tparser.onopentag = onStartElement;\n\t\t\tparser.ontext = onText;\n\t\t\tparser.oncomment = onComment;\n\t\t\tparser.onclosetag = onEndElement;\n\t\t\tparser.onerror = onError;\n\t\t\tparser.oncdata = onCdata;\n\t\t\tparser.ondoctype = onDoctype;\n\t\t\tparser.onprocessinginstruction = onInstruction;\n\t\t} else {\n\t\t\tparser.on(\"startElement\", onStartElement);\n\t\t\tparser.on(\"text\", onText);\n\t\t\tparser.on(\"comment\", onComment);\n\t\t\tparser.on(\"endElement\", onEndElement);\n\t\t\tparser.on(\"error\", onError);\n\t\t}\n\t\tif (pureJsParser) parser.write(xml).close();\n\t\telse if (!parser.parse(xml)) throw new Error(\"XML parsing error: \" + parser.getError());\n\t\tif (result[options.elementsKey]) {\n\t\t\tvar temp = result[options.elementsKey];\n\t\t\tdelete result[options.elementsKey];\n\t\t\tresult[options.elementsKey] = temp;\n\t\t\tdelete result.text;\n\t\t}\n\t\treturn result;\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/xml-js@1.6.11/node_modules/xml-js/lib/xml2json.js\nvar require_xml2json = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar helper = require_options_helper();\n\tvar xml2js = require_xml2js();\n\tfunction validateOptions(userOptions) {\n\t\tvar options = helper.copyOptions(userOptions);\n\t\thelper.ensureSpacesExists(options);\n\t\treturn options;\n\t}\n\tmodule.exports = function(xml, userOptions) {\n\t\tvar options = validateOptions(userOptions), js = xml2js(xml, options), json, parentKey = \"compact\" in options && options.compact ? \"_parent\" : \"parent\";\n\t\tif (\"addParent\" in options && options.addParent) json = JSON.stringify(js, function(k, v) {\n\t\t\treturn k === parentKey ? \"_\" : v;\n\t\t}, options.spaces);\n\t\telse json = JSON.stringify(js, null, options.spaces);\n\t\treturn json.replace(/\\u2028/g, \"\\\\u2028\").replace(/\\u2029/g, \"\\\\u2029\");\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/xml-js@1.6.11/node_modules/xml-js/lib/js2xml.js\nvar require_js2xml = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar helper = require_options_helper();\n\tvar isArray = require_array_helper().isArray;\n\tvar currentElement, currentElementName;\n\tfunction validateOptions(userOptions) {\n\t\tvar options = helper.copyOptions(userOptions);\n\t\thelper.ensureFlagExists(\"ignoreDeclaration\", options);\n\t\thelper.ensureFlagExists(\"ignoreInstruction\", options);\n\t\thelper.ensureFlagExists(\"ignoreAttributes\", options);\n\t\thelper.ensureFlagExists(\"ignoreText\", options);\n\t\thelper.ensureFlagExists(\"ignoreComment\", options);\n\t\thelper.ensureFlagExists(\"ignoreCdata\", options);\n\t\thelper.ensureFlagExists(\"ignoreDoctype\", options);\n\t\thelper.ensureFlagExists(\"compact\", options);\n\t\thelper.ensureFlagExists(\"indentText\", options);\n\t\thelper.ensureFlagExists(\"indentCdata\", options);\n\t\thelper.ensureFlagExists(\"indentAttributes\", options);\n\t\thelper.ensureFlagExists(\"indentInstruction\", options);\n\t\thelper.ensureFlagExists(\"fullTagEmptyElement\", options);\n\t\thelper.ensureFlagExists(\"noQuotesForNativeAttributes\", options);\n\t\thelper.ensureSpacesExists(options);\n\t\tif (typeof options.spaces === \"number\") options.spaces = Array(options.spaces + 1).join(\" \");\n\t\thelper.ensureKeyExists(\"declaration\", options);\n\t\thelper.ensureKeyExists(\"instruction\", options);\n\t\thelper.ensureKeyExists(\"attributes\", options);\n\t\thelper.ensureKeyExists(\"text\", options);\n\t\thelper.ensureKeyExists(\"comment\", options);\n\t\thelper.ensureKeyExists(\"cdata\", options);\n\t\thelper.ensureKeyExists(\"doctype\", options);\n\t\thelper.ensureKeyExists(\"type\", options);\n\t\thelper.ensureKeyExists(\"name\", options);\n\t\thelper.ensureKeyExists(\"elements\", options);\n\t\thelper.checkFnExists(\"doctype\", options);\n\t\thelper.checkFnExists(\"instruction\", options);\n\t\thelper.checkFnExists(\"cdata\", options);\n\t\thelper.checkFnExists(\"comment\", options);\n\t\thelper.checkFnExists(\"text\", options);\n\t\thelper.checkFnExists(\"instructionName\", options);\n\t\thelper.checkFnExists(\"elementName\", options);\n\t\thelper.checkFnExists(\"attributeName\", options);\n\t\thelper.checkFnExists(\"attributeValue\", options);\n\t\thelper.checkFnExists(\"attributes\", options);\n\t\thelper.checkFnExists(\"fullTagEmptyElement\", options);\n\t\treturn options;\n\t}\n\tfunction writeIndentation(options, depth, firstLine) {\n\t\treturn (!firstLine && options.spaces ? \"\\n\" : \"\") + Array(depth + 1).join(options.spaces);\n\t}\n\tfunction writeAttributes(attributes, options, depth) {\n\t\tif (options.ignoreAttributes) return \"\";\n\t\tif (\"attributesFn\" in options) attributes = options.attributesFn(attributes, currentElementName, currentElement);\n\t\tvar key, attr, attrName, quote, result = [];\n\t\tfor (key in attributes) if (attributes.hasOwnProperty(key) && attributes[key] !== null && attributes[key] !== void 0) {\n\t\t\tquote = options.noQuotesForNativeAttributes && typeof attributes[key] !== \"string\" ? \"\" : \"\\\"\";\n\t\t\tattr = \"\" + attributes[key];\n\t\t\tattr = attr.replace(/\"/g, \""\");\n\t\t\tattrName = \"attributeNameFn\" in options ? options.attributeNameFn(key, attr, currentElementName, currentElement) : key;\n\t\t\tresult.push(options.spaces && options.indentAttributes ? writeIndentation(options, depth + 1, false) : \" \");\n\t\t\tresult.push(attrName + \"=\" + quote + (\"attributeValueFn\" in options ? options.attributeValueFn(attr, key, currentElementName, currentElement) : attr) + quote);\n\t\t}\n\t\tif (attributes && Object.keys(attributes).length && options.spaces && options.indentAttributes) result.push(writeIndentation(options, depth, false));\n\t\treturn result.join(\"\");\n\t}\n\tfunction writeDeclaration(declaration, options, depth) {\n\t\tcurrentElement = declaration;\n\t\tcurrentElementName = \"xml\";\n\t\treturn options.ignoreDeclaration ? \"\" : \"<?xml\" + writeAttributes(declaration[options.attributesKey], options, depth) + \"?>\";\n\t}\n\tfunction writeInstruction(instruction, options, depth) {\n\t\tif (options.ignoreInstruction) return \"\";\n\t\tvar key;\n\t\tfor (key in instruction) if (instruction.hasOwnProperty(key)) break;\n\t\tvar instructionName = \"instructionNameFn\" in options ? options.instructionNameFn(key, instruction[key], currentElementName, currentElement) : key;\n\t\tif (typeof instruction[key] === \"object\") {\n\t\t\tcurrentElement = instruction;\n\t\t\tcurrentElementName = instructionName;\n\t\t\treturn \"<?\" + instructionName + writeAttributes(instruction[key][options.attributesKey], options, depth) + \"?>\";\n\t\t} else {\n\t\t\tvar instructionValue = instruction[key] ? instruction[key] : \"\";\n\t\t\tif (\"instructionFn\" in options) instructionValue = options.instructionFn(instructionValue, key, currentElementName, currentElement);\n\t\t\treturn \"<?\" + instructionName + (instructionValue ? \" \" + instructionValue : \"\") + \"?>\";\n\t\t}\n\t}\n\tfunction writeComment(comment, options) {\n\t\treturn options.ignoreComment ? \"\" : \"<!--\" + (\"commentFn\" in options ? options.commentFn(comment, currentElementName, currentElement) : comment) + \"-->\";\n\t}\n\tfunction writeCdata(cdata, options) {\n\t\treturn options.ignoreCdata ? \"\" : \"<![CDATA[\" + (\"cdataFn\" in options ? options.cdataFn(cdata, currentElementName, currentElement) : cdata.replace(\"]]>\", \"]]]]><![CDATA[>\")) + \"]]>\";\n\t}\n\tfunction writeDoctype(doctype, options) {\n\t\treturn options.ignoreDoctype ? \"\" : \"<!DOCTYPE \" + (\"doctypeFn\" in options ? options.doctypeFn(doctype, currentElementName, currentElement) : doctype) + \">\";\n\t}\n\tfunction writeText(text, options) {\n\t\tif (options.ignoreText) return \"\";\n\t\ttext = \"\" + text;\n\t\ttext = text.replace(/&/g, \"&\");\n\t\ttext = text.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n\t\treturn \"textFn\" in options ? options.textFn(text, currentElementName, currentElement) : text;\n\t}\n\tfunction hasContent(element, options) {\n\t\tvar i;\n\t\tif (element.elements && element.elements.length) for (i = 0; i < element.elements.length; ++i) switch (element.elements[i][options.typeKey]) {\n\t\t\tcase \"text\":\n\t\t\t\tif (options.indentText) return true;\n\t\t\t\tbreak;\n\t\t\tcase \"cdata\":\n\t\t\t\tif (options.indentCdata) return true;\n\t\t\t\tbreak;\n\t\t\tcase \"instruction\":\n\t\t\t\tif (options.indentInstruction) return true;\n\t\t\t\tbreak;\n\t\t\tcase \"doctype\":\n\t\t\tcase \"comment\":\n\t\t\tcase \"element\": return true;\n\t\t\tdefault: return true;\n\t\t}\n\t\treturn false;\n\t}\n\tfunction writeElement(element, options, depth) {\n\t\tcurrentElement = element;\n\t\tcurrentElementName = element.name;\n\t\tvar xml = [], elementName = \"elementNameFn\" in options ? options.elementNameFn(element.name, element) : element.name;\n\t\txml.push(\"<\" + elementName);\n\t\tif (element[options.attributesKey]) xml.push(writeAttributes(element[options.attributesKey], options, depth));\n\t\tvar withClosingTag = element[options.elementsKey] && element[options.elementsKey].length || element[options.attributesKey] && element[options.attributesKey][\"xml:space\"] === \"preserve\";\n\t\tif (!withClosingTag) if (\"fullTagEmptyElementFn\" in options) withClosingTag = options.fullTagEmptyElementFn(element.name, element);\n\t\telse withClosingTag = options.fullTagEmptyElement;\n\t\tif (withClosingTag) {\n\t\t\txml.push(\">\");\n\t\t\tif (element[options.elementsKey] && element[options.elementsKey].length) {\n\t\t\t\txml.push(writeElements(element[options.elementsKey], options, depth + 1));\n\t\t\t\tcurrentElement = element;\n\t\t\t\tcurrentElementName = element.name;\n\t\t\t}\n\t\t\txml.push(options.spaces && hasContent(element, options) ? \"\\n\" + Array(depth + 1).join(options.spaces) : \"\");\n\t\t\txml.push(\"</\" + elementName + \">\");\n\t\t} else xml.push(\"/>\");\n\t\treturn xml.join(\"\");\n\t}\n\tfunction writeElements(elements, options, depth, firstLine) {\n\t\treturn elements.reduce(function(xml, element) {\n\t\t\tvar indent = writeIndentation(options, depth, firstLine && !xml);\n\t\t\tswitch (element.type) {\n\t\t\t\tcase \"element\": return xml + indent + writeElement(element, options, depth);\n\t\t\t\tcase \"comment\": return xml + indent + writeComment(element[options.commentKey], options);\n\t\t\t\tcase \"doctype\": return xml + indent + writeDoctype(element[options.doctypeKey], options);\n\t\t\t\tcase \"cdata\": return xml + (options.indentCdata ? indent : \"\") + writeCdata(element[options.cdataKey], options);\n\t\t\t\tcase \"text\": return xml + (options.indentText ? indent : \"\") + writeText(element[options.textKey], options);\n\t\t\t\tcase \"instruction\":\n\t\t\t\t\tvar instruction = {};\n\t\t\t\t\tinstruction[element[options.nameKey]] = element[options.attributesKey] ? element : element[options.instructionKey];\n\t\t\t\t\treturn xml + (options.indentInstruction ? indent : \"\") + writeInstruction(instruction, options, depth);\n\t\t\t}\n\t\t}, \"\");\n\t}\n\tfunction hasContentCompact(element, options, anyContent) {\n\t\tvar key;\n\t\tfor (key in element) if (element.hasOwnProperty(key)) switch (key) {\n\t\t\tcase options.parentKey:\n\t\t\tcase options.attributesKey: break;\n\t\t\tcase options.textKey:\n\t\t\t\tif (options.indentText || anyContent) return true;\n\t\t\t\tbreak;\n\t\t\tcase options.cdataKey:\n\t\t\t\tif (options.indentCdata || anyContent) return true;\n\t\t\t\tbreak;\n\t\t\tcase options.instructionKey:\n\t\t\t\tif (options.indentInstruction || anyContent) return true;\n\t\t\t\tbreak;\n\t\t\tcase options.doctypeKey:\n\t\t\tcase options.commentKey: return true;\n\t\t\tdefault: return true;\n\t\t}\n\t\treturn false;\n\t}\n\tfunction writeElementCompact(element, name, options, depth, indent) {\n\t\tcurrentElement = element;\n\t\tcurrentElementName = name;\n\t\tvar elementName = \"elementNameFn\" in options ? options.elementNameFn(name, element) : name;\n\t\tif (typeof element === \"undefined\" || element === null || element === \"\") return \"fullTagEmptyElementFn\" in options && options.fullTagEmptyElementFn(name, element) || options.fullTagEmptyElement ? \"<\" + elementName + \"></\" + elementName + \">\" : \"<\" + elementName + \"/>\";\n\t\tvar xml = [];\n\t\tif (name) {\n\t\t\txml.push(\"<\" + elementName);\n\t\t\tif (typeof element !== \"object\") {\n\t\t\t\txml.push(\">\" + writeText(element, options) + \"</\" + elementName + \">\");\n\t\t\t\treturn xml.join(\"\");\n\t\t\t}\n\t\t\tif (element[options.attributesKey]) xml.push(writeAttributes(element[options.attributesKey], options, depth));\n\t\t\tvar withClosingTag = hasContentCompact(element, options, true) || element[options.attributesKey] && element[options.attributesKey][\"xml:space\"] === \"preserve\";\n\t\t\tif (!withClosingTag) if (\"fullTagEmptyElementFn\" in options) withClosingTag = options.fullTagEmptyElementFn(name, element);\n\t\t\telse withClosingTag = options.fullTagEmptyElement;\n\t\t\tif (withClosingTag) xml.push(\">\");\n\t\t\telse {\n\t\t\t\txml.push(\"/>\");\n\t\t\t\treturn xml.join(\"\");\n\t\t\t}\n\t\t}\n\t\txml.push(writeElementsCompact(element, options, depth + 1, false));\n\t\tcurrentElement = element;\n\t\tcurrentElementName = name;\n\t\tif (name) xml.push((indent ? writeIndentation(options, depth, false) : \"\") + \"</\" + elementName + \">\");\n\t\treturn xml.join(\"\");\n\t}\n\tfunction writeElementsCompact(element, options, depth, firstLine) {\n\t\tvar i, key, nodes, xml = [];\n\t\tfor (key in element) if (element.hasOwnProperty(key)) {\n\t\t\tnodes = isArray(element[key]) ? element[key] : [element[key]];\n\t\t\tfor (i = 0; i < nodes.length; ++i) {\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase options.declarationKey:\n\t\t\t\t\t\txml.push(writeDeclaration(nodes[i], options, depth));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase options.instructionKey:\n\t\t\t\t\t\txml.push((options.indentInstruction ? writeIndentation(options, depth, firstLine) : \"\") + writeInstruction(nodes[i], options, depth));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase options.attributesKey:\n\t\t\t\t\tcase options.parentKey: break;\n\t\t\t\t\tcase options.textKey:\n\t\t\t\t\t\txml.push((options.indentText ? writeIndentation(options, depth, firstLine) : \"\") + writeText(nodes[i], options));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase options.cdataKey:\n\t\t\t\t\t\txml.push((options.indentCdata ? writeIndentation(options, depth, firstLine) : \"\") + writeCdata(nodes[i], options));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase options.doctypeKey:\n\t\t\t\t\t\txml.push(writeIndentation(options, depth, firstLine) + writeDoctype(nodes[i], options));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase options.commentKey:\n\t\t\t\t\t\txml.push(writeIndentation(options, depth, firstLine) + writeComment(nodes[i], options));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: xml.push(writeIndentation(options, depth, firstLine) + writeElementCompact(nodes[i], key, options, depth, hasContentCompact(nodes[i], options)));\n\t\t\t\t}\n\t\t\t\tfirstLine = firstLine && !xml.length;\n\t\t\t}\n\t\t}\n\t\treturn xml.join(\"\");\n\t}\n\tmodule.exports = function(js, options) {\n\t\toptions = validateOptions(options);\n\t\tvar xml = [];\n\t\tcurrentElement = js;\n\t\tcurrentElementName = \"_root_\";\n\t\tif (options.compact) xml.push(writeElementsCompact(js, options, 0, true));\n\t\telse {\n\t\t\tif (js[options.declarationKey]) xml.push(writeDeclaration(js[options.declarationKey], options, 0));\n\t\t\tif (js[options.elementsKey] && js[options.elementsKey].length) xml.push(writeElements(js[options.elementsKey], options, 0, !xml.length));\n\t\t}\n\t\treturn xml.join(\"\");\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/xml-js@1.6.11/node_modules/xml-js/lib/json2xml.js\nvar require_json2xml = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar js2xml = require_js2xml();\n\tmodule.exports = function(json, options) {\n\t\tif (json instanceof Buffer) json = json.toString();\n\t\tvar js = null;\n\t\tif (typeof json === \"string\") try {\n\t\t\tjs = JSON.parse(json);\n\t\t} catch (e) {\n\t\t\tthrow new Error(\"The JSON structure is invalid\");\n\t\t}\n\t\telse js = json;\n\t\treturn js2xml(js, options);\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/xml-js@1.6.11/node_modules/xml-js/lib/index.js\nvar require_lib = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = {\n\t\txml2js: require_xml2js(),\n\t\txml2json: require_xml2json(),\n\t\tjs2xml: require_js2xml(),\n\t\tjson2xml: require_json2xml()\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js\nvar require_base64_js = /* @__PURE__ */ __commonJSMin(((exports) => {\n\texports.byteLength = byteLength;\n\texports.toByteArray = toByteArray;\n\texports.fromByteArray = fromByteArray;\n\tvar lookup = [];\n\tvar revLookup = [];\n\tvar Arr = typeof Uint8Array !== \"undefined\" ? Uint8Array : Array;\n\tvar code = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\tfor (var i = 0, len = code.length; i < len; ++i) {\n\t\tlookup[i] = code[i];\n\t\trevLookup[code.charCodeAt(i)] = i;\n\t}\n\trevLookup[\"-\".charCodeAt(0)] = 62;\n\trevLookup[\"_\".charCodeAt(0)] = 63;\n\tfunction getLens(b64) {\n\t\tvar len = b64.length;\n\t\tif (len % 4 > 0) throw new Error(\"Invalid string. Length must be a multiple of 4\");\n\t\tvar validLen = b64.indexOf(\"=\");\n\t\tif (validLen === -1) validLen = len;\n\t\tvar placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n\t\treturn [validLen, placeHoldersLen];\n\t}\n\tfunction byteLength(b64) {\n\t\tvar lens = getLens(b64);\n\t\tvar validLen = lens[0];\n\t\tvar placeHoldersLen = lens[1];\n\t\treturn (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n\t}\n\tfunction _byteLength(b64, validLen, placeHoldersLen) {\n\t\treturn (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n\t}\n\tfunction toByteArray(b64) {\n\t\tvar tmp;\n\t\tvar lens = getLens(b64);\n\t\tvar validLen = lens[0];\n\t\tvar placeHoldersLen = lens[1];\n\t\tvar arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n\t\tvar curByte = 0;\n\t\tvar len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n\t\tvar i;\n\t\tfor (i = 0; i < len; i += 4) {\n\t\t\ttmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];\n\t\t\tarr[curByte++] = tmp >> 16 & 255;\n\t\t\tarr[curByte++] = tmp >> 8 & 255;\n\t\t\tarr[curByte++] = tmp & 255;\n\t\t}\n\t\tif (placeHoldersLen === 2) {\n\t\t\ttmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n\t\t\tarr[curByte++] = tmp & 255;\n\t\t}\n\t\tif (placeHoldersLen === 1) {\n\t\t\ttmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n\t\t\tarr[curByte++] = tmp >> 8 & 255;\n\t\t\tarr[curByte++] = tmp & 255;\n\t\t}\n\t\treturn arr;\n\t}\n\tfunction tripletToBase64(num) {\n\t\treturn lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];\n\t}\n\tfunction encodeChunk(uint8, start, end) {\n\t\tvar tmp;\n\t\tvar output = [];\n\t\tfor (var i = start; i < end; i += 3) {\n\t\t\ttmp = (uint8[i] << 16 & 16711680) + (uint8[i + 1] << 8 & 65280) + (uint8[i + 2] & 255);\n\t\t\toutput.push(tripletToBase64(tmp));\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n\tfunction fromByteArray(uint8) {\n\t\tvar tmp;\n\t\tvar len = uint8.length;\n\t\tvar extraBytes = len % 3;\n\t\tvar parts = [];\n\t\tvar maxChunkLength = 16383;\n\t\tfor (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));\n\t\tif (extraBytes === 1) {\n\t\t\ttmp = uint8[len - 1];\n\t\t\tparts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 63] + \"==\");\n\t\t} else if (extraBytes === 2) {\n\t\t\ttmp = (uint8[len - 2] << 8) + uint8[len - 1];\n\t\t\tparts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + \"=\");\n\t\t}\n\t\treturn parts.join(\"\");\n\t}\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js\nvar require_ieee754 = /* @__PURE__ */ __commonJSMin(((exports) => {\n\t/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\n\texports.read = function(buffer, offset, isLE, mLen, nBytes) {\n\t\tvar e, m;\n\t\tvar eLen = nBytes * 8 - mLen - 1;\n\t\tvar eMax = (1 << eLen) - 1;\n\t\tvar eBias = eMax >> 1;\n\t\tvar nBits = -7;\n\t\tvar i = isLE ? nBytes - 1 : 0;\n\t\tvar d = isLE ? -1 : 1;\n\t\tvar s = buffer[offset + i];\n\t\ti += d;\n\t\te = s & (1 << -nBits) - 1;\n\t\ts >>= -nBits;\n\t\tnBits += eLen;\n\t\tfor (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8);\n\t\tm = e & (1 << -nBits) - 1;\n\t\te >>= -nBits;\n\t\tnBits += mLen;\n\t\tfor (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8);\n\t\tif (e === 0) e = 1 - eBias;\n\t\telse if (e === eMax) return m ? NaN : (s ? -1 : 1) * Infinity;\n\t\telse {\n\t\t\tm = m + Math.pow(2, mLen);\n\t\t\te = e - eBias;\n\t\t}\n\t\treturn (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n\t};\n\texports.write = function(buffer, value, offset, isLE, mLen, nBytes) {\n\t\tvar e, m, c;\n\t\tvar eLen = nBytes * 8 - mLen - 1;\n\t\tvar eMax = (1 << eLen) - 1;\n\t\tvar eBias = eMax >> 1;\n\t\tvar rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n\t\tvar i = isLE ? 0 : nBytes - 1;\n\t\tvar d = isLE ? 1 : -1;\n\t\tvar s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n\t\tvalue = Math.abs(value);\n\t\tif (isNaN(value) || value === Infinity) {\n\t\t\tm = isNaN(value) ? 1 : 0;\n\t\t\te = eMax;\n\t\t} else {\n\t\t\te = Math.floor(Math.log(value) / Math.LN2);\n\t\t\tif (value * (c = Math.pow(2, -e)) < 1) {\n\t\t\t\te--;\n\t\t\t\tc *= 2;\n\t\t\t}\n\t\t\tif (e + eBias >= 1) value += rt / c;\n\t\t\telse value += rt * Math.pow(2, 1 - eBias);\n\t\t\tif (value * c >= 2) {\n\t\t\t\te++;\n\t\t\t\tc /= 2;\n\t\t\t}\n\t\t\tif (e + eBias >= eMax) {\n\t\t\t\tm = 0;\n\t\t\t\te = eMax;\n\t\t\t} else if (e + eBias >= 1) {\n\t\t\t\tm = (value * c - 1) * Math.pow(2, mLen);\n\t\t\t\te = e + eBias;\n\t\t\t} else {\n\t\t\t\tm = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n\t\t\t\te = 0;\n\t\t\t}\n\t\t}\n\t\tfor (; mLen >= 8; buffer[offset + i] = m & 255, i += d, m /= 256, mLen -= 8);\n\t\te = e << mLen | m;\n\t\teLen += mLen;\n\t\tfor (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8);\n\t\tbuffer[offset + i - d] |= s * 128;\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js\n/*!\n* The buffer module from node.js, for the browser.\n*\n* @author Feross Aboukhadijeh <https://feross.org>\n* @license MIT\n*/\nvar require_buffer = /* @__PURE__ */ __commonJSMin(((exports) => {\n\tvar base64 = require_base64_js();\n\tvar ieee754 = require_ieee754();\n\tvar customInspectSymbol = typeof Symbol === \"function\" && typeof Symbol[\"for\"] === \"function\" ? Symbol[\"for\"](\"nodejs.util.inspect.custom\") : null;\n\texports.Buffer = Buffer;\n\texports.SlowBuffer = SlowBuffer;\n\texports.INSPECT_MAX_BYTES = 50;\n\tvar K_MAX_LENGTH = 2147483647;\n\texports.kMaxLength = K_MAX_LENGTH;\n\t/**\n\t* If `Buffer.TYPED_ARRAY_SUPPORT`:\n\t* === true Use Uint8Array implementation (fastest)\n\t* === false Print warning and recommend using `buffer` v4.x which has an Object\n\t* implementation (most compatible, even IE6)\n\t*\n\t* Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n\t* Opera 11.6+, iOS 4.2+.\n\t*\n\t* We report that the browser does not support typed arrays if the are not subclassable\n\t* using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n\t* (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n\t* for __proto__ and has a buggy typed array implementation.\n\t*/\n\tBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\n\tif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== \"undefined\" && typeof console.error === \"function\") console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");\n\tfunction typedArraySupport() {\n\t\ttry {\n\t\t\tconst arr = new Uint8Array(1);\n\t\t\tconst proto = { foo: function() {\n\t\t\t\treturn 42;\n\t\t\t} };\n\t\t\tObject.setPrototypeOf(proto, Uint8Array.prototype);\n\t\t\tObject.setPrototypeOf(arr, proto);\n\t\t\treturn arr.foo() === 42;\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\tObject.defineProperty(Buffer.prototype, \"parent\", {\n\t\tenumerable: true,\n\t\tget: function() {\n\t\t\tif (!Buffer.isBuffer(this)) return void 0;\n\t\t\treturn this.buffer;\n\t\t}\n\t});\n\tObject.defineProperty(Buffer.prototype, \"offset\", {\n\t\tenumerable: true,\n\t\tget: function() {\n\t\t\tif (!Buffer.isBuffer(this)) return void 0;\n\t\t\treturn this.byteOffset;\n\t\t}\n\t});\n\tfunction createBuffer(length) {\n\t\tif (length > K_MAX_LENGTH) throw new RangeError(\"The value \\\"\" + length + \"\\\" is invalid for option \\\"size\\\"\");\n\t\tconst buf = new Uint8Array(length);\n\t\tObject.setPrototypeOf(buf, Buffer.prototype);\n\t\treturn buf;\n\t}\n\t/**\n\t* The Buffer constructor returns instances of `Uint8Array` that have their\n\t* prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n\t* `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n\t* and the `Uint8Array` methods. Square bracket notation works as expected -- it\n\t* returns a single octet.\n\t*\n\t* The `Uint8Array` prototype remains unmodified.\n\t*/\n\tfunction Buffer(arg, encodingOrOffset, length) {\n\t\tif (typeof arg === \"number\") {\n\t\t\tif (typeof encodingOrOffset === \"string\") throw new TypeError(\"The \\\"string\\\" argument must be of type string. Received type number\");\n\t\t\treturn allocUnsafe(arg);\n\t\t}\n\t\treturn from(arg, encodingOrOffset, length);\n\t}\n\tBuffer.poolSize = 8192;\n\tfunction from(value, encodingOrOffset, length) {\n\t\tif (typeof value === \"string\") return fromString(value, encodingOrOffset);\n\t\tif (ArrayBuffer.isView(value)) return fromArrayView(value);\n\t\tif (value == null) throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \" + typeof value);\n\t\tif (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) return fromArrayBuffer(value, encodingOrOffset, length);\n\t\tif (typeof SharedArrayBuffer !== \"undefined\" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) return fromArrayBuffer(value, encodingOrOffset, length);\n\t\tif (typeof value === \"number\") throw new TypeError(\"The \\\"value\\\" argument must not be of type number. Received type number\");\n\t\tconst valueOf = value.valueOf && value.valueOf();\n\t\tif (valueOf != null && valueOf !== value) return Buffer.from(valueOf, encodingOrOffset, length);\n\t\tconst b = fromObject(value);\n\t\tif (b) return b;\n\t\tif (typeof Symbol !== \"undefined\" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === \"function\") return Buffer.from(value[Symbol.toPrimitive](\"string\"), encodingOrOffset, length);\n\t\tthrow new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \" + typeof value);\n\t}\n\t/**\n\t* Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n\t* if value is a number.\n\t* Buffer.from(str[, encoding])\n\t* Buffer.from(array)\n\t* Buffer.from(buffer)\n\t* Buffer.from(arrayBuffer[, byteOffset[, length]])\n\t**/\n\tBuffer.from = function(value, encodingOrOffset, length) {\n\t\treturn from(value, encodingOrOffset, length);\n\t};\n\tObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);\n\tObject.setPrototypeOf(Buffer, Uint8Array);\n\tfunction assertSize(size) {\n\t\tif (typeof size !== \"number\") throw new TypeError(\"\\\"size\\\" argument must be of type number\");\n\t\telse if (size < 0) throw new RangeError(\"The value \\\"\" + size + \"\\\" is invalid for option \\\"size\\\"\");\n\t}\n\tfunction alloc(size, fill, encoding) {\n\t\tassertSize(size);\n\t\tif (size <= 0) return createBuffer(size);\n\t\tif (fill !== void 0) return typeof encoding === \"string\" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);\n\t\treturn createBuffer(size);\n\t}\n\t/**\n\t* Creates a new filled Buffer instance.\n\t* alloc(size[, fill[, encoding]])\n\t**/\n\tBuffer.alloc = function(size, fill, encoding) {\n\t\treturn alloc(size, fill, encoding);\n\t};\n\tfunction allocUnsafe(size) {\n\t\tassertSize(size);\n\t\treturn createBuffer(size < 0 ? 0 : checked(size) | 0);\n\t}\n\t/**\n\t* Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n\t* */\n\tBuffer.allocUnsafe = function(size) {\n\t\treturn allocUnsafe(size);\n\t};\n\t/**\n\t* Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n\t*/\n\tBuffer.allocUnsafeSlow = function(size) {\n\t\treturn allocUnsafe(size);\n\t};\n\tfunction fromString(string, encoding) {\n\t\tif (typeof encoding !== \"string\" || encoding === \"\") encoding = \"utf8\";\n\t\tif (!Buffer.isEncoding(encoding)) throw new TypeError(\"Unknown encoding: \" + encoding);\n\t\tconst length = byteLength(string, encoding) | 0;\n\t\tlet buf = createBuffer(length);\n\t\tconst actual = buf.write(string, encoding);\n\t\tif (actual !== length) buf = buf.slice(0, actual);\n\t\treturn buf;\n\t}\n\tfunction fromArrayLike(array) {\n\t\tconst length = array.length < 0 ? 0 : checked(array.length) | 0;\n\t\tconst buf = createBuffer(length);\n\t\tfor (let i = 0; i < length; i += 1) buf[i] = array[i] & 255;\n\t\treturn buf;\n\t}\n\tfunction fromArrayView(arrayView) {\n\t\tif (isInstance(arrayView, Uint8Array)) {\n\t\t\tconst copy = new Uint8Array(arrayView);\n\t\t\treturn fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);\n\t\t}\n\t\treturn fromArrayLike(arrayView);\n\t}\n\tfunction fromArrayBuffer(array, byteOffset, length) {\n\t\tif (byteOffset < 0 || array.byteLength < byteOffset) throw new RangeError(\"\\\"offset\\\" is outside of buffer bounds\");\n\t\tif (array.byteLength < byteOffset + (length || 0)) throw new RangeError(\"\\\"length\\\" is outside of buffer bounds\");\n\t\tlet buf;\n\t\tif (byteOffset === void 0 && length === void 0) buf = new Uint8Array(array);\n\t\telse if (length === void 0) buf = new Uint8Array(array, byteOffset);\n\t\telse buf = new Uint8Array(array, byteOffset, length);\n\t\tObject.setPrototypeOf(buf, Buffer.prototype);\n\t\treturn buf;\n\t}\n\tfunction fromObject(obj) {\n\t\tif (Buffer.isBuffer(obj)) {\n\t\t\tconst len = checked(obj.length) | 0;\n\t\t\tconst buf = createBuffer(len);\n\t\t\tif (buf.length === 0) return buf;\n\t\t\tobj.copy(buf, 0, 0, len);\n\t\t\treturn buf;\n\t\t}\n\t\tif (obj.length !== void 0) {\n\t\t\tif (typeof obj.length !== \"number\" || numberIsNaN(obj.length)) return createBuffer(0);\n\t\t\treturn fromArrayLike(obj);\n\t\t}\n\t\tif (obj.type === \"Buffer\" && Array.isArray(obj.data)) return fromArrayLike(obj.data);\n\t}\n\tfunction checked(length) {\n\t\tif (length >= K_MAX_LENGTH) throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\" + K_MAX_LENGTH.toString(16) + \" bytes\");\n\t\treturn length | 0;\n\t}\n\tfunction SlowBuffer(length) {\n\t\tif (+length != length) length = 0;\n\t\treturn Buffer.alloc(+length);\n\t}\n\tBuffer.isBuffer = function isBuffer(b) {\n\t\treturn b != null && b._isBuffer === true && b !== Buffer.prototype;\n\t};\n\tBuffer.compare = function compare(a, b) {\n\t\tif (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);\n\t\tif (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);\n\t\tif (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) throw new TypeError(\"The \\\"buf1\\\", \\\"buf2\\\" arguments must be one of type Buffer or Uint8Array\");\n\t\tif (a === b) return 0;\n\t\tlet x = a.length;\n\t\tlet y = b.length;\n\t\tfor (let i = 0, len = Math.min(x, y); i < len; ++i) if (a[i] !== b[i]) {\n\t\t\tx = a[i];\n\t\t\ty = b[i];\n\t\t\tbreak;\n\t\t}\n\t\tif (x < y) return -1;\n\t\tif (y < x) return 1;\n\t\treturn 0;\n\t};\n\tBuffer.isEncoding = function isEncoding(encoding) {\n\t\tswitch (String(encoding).toLowerCase()) {\n\t\t\tcase \"hex\":\n\t\t\tcase \"utf8\":\n\t\t\tcase \"utf-8\":\n\t\t\tcase \"ascii\":\n\t\t\tcase \"latin1\":\n\t\t\tcase \"binary\":\n\t\t\tcase \"base64\":\n\t\t\tcase \"ucs2\":\n\t\t\tcase \"ucs-2\":\n\t\t\tcase \"utf16le\":\n\t\t\tcase \"utf-16le\": return true;\n\t\t\tdefault: return false;\n\t\t}\n\t};\n\tBuffer.concat = function concat(list, length) {\n\t\tif (!Array.isArray(list)) throw new TypeError(\"\\\"list\\\" argument must be an Array of Buffers\");\n\t\tif (list.length === 0) return Buffer.alloc(0);\n\t\tlet i;\n\t\tif (length === void 0) {\n\t\t\tlength = 0;\n\t\t\tfor (i = 0; i < list.length; ++i) length += list[i].length;\n\t\t}\n\t\tconst buffer = Buffer.allocUnsafe(length);\n\t\tlet pos = 0;\n\t\tfor (i = 0; i < list.length; ++i) {\n\t\t\tlet buf = list[i];\n\t\t\tif (isInstance(buf, Uint8Array)) if (pos + buf.length > buffer.length) {\n\t\t\t\tif (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n\t\t\t\tbuf.copy(buffer, pos);\n\t\t\t} else Uint8Array.prototype.set.call(buffer, buf, pos);\n\t\t\telse if (!Buffer.isBuffer(buf)) throw new TypeError(\"\\\"list\\\" argument must be an Array of Buffers\");\n\t\t\telse buf.copy(buffer, pos);\n\t\t\tpos += buf.length;\n\t\t}\n\t\treturn buffer;\n\t};\n\tfunction byteLength(string, encoding) {\n\t\tif (Buffer.isBuffer(string)) return string.length;\n\t\tif (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) return string.byteLength;\n\t\tif (typeof string !== \"string\") throw new TypeError(\"The \\\"string\\\" argument must be one of type string, Buffer, or ArrayBuffer. Received type \" + typeof string);\n\t\tconst len = string.length;\n\t\tconst mustMatch = arguments.length > 2 && arguments[2] === true;\n\t\tif (!mustMatch && len === 0) return 0;\n\t\tlet loweredCase = false;\n\t\tfor (;;) switch (encoding) {\n\t\t\tcase \"ascii\":\n\t\t\tcase \"latin1\":\n\t\t\tcase \"binary\": return len;\n\t\t\tcase \"utf8\":\n\t\t\tcase \"utf-8\": return utf8ToBytes(string).length;\n\t\t\tcase \"ucs2\":\n\t\t\tcase \"ucs-2\":\n\t\t\tcase \"utf16le\":\n\t\t\tcase \"utf-16le\": return len * 2;\n\t\t\tcase \"hex\": return len >>> 1;\n\t\t\tcase \"base64\": return base64ToBytes(string).length;\n\t\t\tdefault:\n\t\t\t\tif (loweredCase) return mustMatch ? -1 : utf8ToBytes(string).length;\n\t\t\t\tencoding = (\"\" + encoding).toLowerCase();\n\t\t\t\tloweredCase = true;\n\t\t}\n\t}\n\tBuffer.byteLength = byteLength;\n\tfunction slowToString(encoding, start, end) {\n\t\tlet loweredCase = false;\n\t\tif (start === void 0 || start < 0) start = 0;\n\t\tif (start > this.length) return \"\";\n\t\tif (end === void 0 || end > this.length) end = this.length;\n\t\tif (end <= 0) return \"\";\n\t\tend >>>= 0;\n\t\tstart >>>= 0;\n\t\tif (end <= start) return \"\";\n\t\tif (!encoding) encoding = \"utf8\";\n\t\twhile (true) switch (encoding) {\n\t\t\tcase \"hex\": return hexSlice(this, start, end);\n\t\t\tcase \"utf8\":\n\t\t\tcase \"utf-8\": return utf8Slice(this, start, end);\n\t\t\tcase \"ascii\": return asciiSlice(this, start, end);\n\t\t\tcase \"latin1\":\n\t\t\tcase \"binary\": return latin1Slice(this, start, end);\n\t\t\tcase \"base64\": return base64Slice(this, start, end);\n\t\t\tcase \"ucs2\":\n\t\t\tcase \"ucs-2\":\n\t\t\tcase \"utf16le\":\n\t\t\tcase \"utf-16le\": return utf16leSlice(this, start, end);\n\t\t\tdefault:\n\t\t\t\tif (loweredCase) throw new TypeError(\"Unknown encoding: \" + encoding);\n\t\t\t\tencoding = (encoding + \"\").toLowerCase();\n\t\t\t\tloweredCase = true;\n\t\t}\n\t}\n\tBuffer.prototype._isBuffer = true;\n\tfunction swap(b, n, m) {\n\t\tconst i = b[n];\n\t\tb[n] = b[m];\n\t\tb[m] = i;\n\t}\n\tBuffer.prototype.swap16 = function swap16() {\n\t\tconst len = this.length;\n\t\tif (len % 2 !== 0) throw new RangeError(\"Buffer size must be a multiple of 16-bits\");\n\t\tfor (let i = 0; i < len; i += 2) swap(this, i, i + 1);\n\t\treturn this;\n\t};\n\tBuffer.prototype.swap32 = function swap32() {\n\t\tconst len = this.length;\n\t\tif (len % 4 !== 0) throw new RangeError(\"Buffer size must be a multiple of 32-bits\");\n\t\tfor (let i = 0; i < len; i += 4) {\n\t\t\tswap(this, i, i + 3);\n\t\t\tswap(this, i + 1, i + 2);\n\t\t}\n\t\treturn this;\n\t};\n\tBuffer.prototype.swap64 = function swap64() {\n\t\tconst len = this.length;\n\t\tif (len % 8 !== 0) throw new RangeError(\"Buffer size must be a multiple of 64-bits\");\n\t\tfor (let i = 0; i < len; i += 8) {\n\t\t\tswap(this, i, i + 7);\n\t\t\tswap(this, i + 1, i + 6);\n\t\t\tswap(this, i + 2, i + 5);\n\t\t\tswap(this, i + 3, i + 4);\n\t\t}\n\t\treturn this;\n\t};\n\tBuffer.prototype.toString = function toString() {\n\t\tconst length = this.length;\n\t\tif (length === 0) return \"\";\n\t\tif (arguments.length === 0) return utf8Slice(this, 0, length);\n\t\treturn slowToString.apply(this, arguments);\n\t};\n\tBuffer.prototype.toLocaleString = Buffer.prototype.toString;\n\tBuffer.prototype.equals = function equals(b) {\n\t\tif (!Buffer.isBuffer(b)) throw new TypeError(\"Argument must be a Buffer\");\n\t\tif (this === b) return true;\n\t\treturn Buffer.compare(this, b) === 0;\n\t};\n\tBuffer.prototype.inspect = function inspect() {\n\t\tlet str = \"\";\n\t\tconst max = exports.INSPECT_MAX_BYTES;\n\t\tstr = this.toString(\"hex\", 0, max).replace(/(.{2})/g, \"$1 \").trim();\n\t\tif (this.length > max) str += \" ... \";\n\t\treturn \"<Buffer \" + str + \">\";\n\t};\n\tif (customInspectSymbol) Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;\n\tBuffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n\t\tif (isInstance(target, Uint8Array)) target = Buffer.from(target, target.offset, target.byteLength);\n\t\tif (!Buffer.isBuffer(target)) throw new TypeError(\"The \\\"target\\\" argument must be one of type Buffer or Uint8Array. Received type \" + typeof target);\n\t\tif (start === void 0) start = 0;\n\t\tif (end === void 0) end = target ? target.length : 0;\n\t\tif (thisStart === void 0) thisStart = 0;\n\t\tif (thisEnd === void 0) thisEnd = this.length;\n\t\tif (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) throw new RangeError(\"out of range index\");\n\t\tif (thisStart >= thisEnd && start >= end) return 0;\n\t\tif (thisStart >= thisEnd) return -1;\n\t\tif (start >= end) return 1;\n\t\tstart >>>= 0;\n\t\tend >>>= 0;\n\t\tthisStart >>>= 0;\n\t\tthisEnd >>>= 0;\n\t\tif (this === target) return 0;\n\t\tlet x = thisEnd - thisStart;\n\t\tlet y = end - start;\n\t\tconst len = Math.min(x, y);\n\t\tconst thisCopy = this.slice(thisStart, thisEnd);\n\t\tconst targetCopy = target.slice(start, end);\n\t\tfor (let i = 0; i < len; ++i) if (thisCopy[i] !== targetCopy[i]) {\n\t\t\tx = thisCopy[i];\n\t\t\ty = targetCopy[i];\n\t\t\tbreak;\n\t\t}\n\t\tif (x < y) return -1;\n\t\tif (y < x) return 1;\n\t\treturn 0;\n\t};\n\tfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n\t\tif (buffer.length === 0) return -1;\n\t\tif (typeof byteOffset === \"string\") {\n\t\t\tencoding = byteOffset;\n\t\t\tbyteOffset = 0;\n\t\t} else if (byteOffset > 2147483647) byteOffset = 2147483647;\n\t\telse if (byteOffset < -2147483648) byteOffset = -2147483648;\n\t\tbyteOffset = +byteOffset;\n\t\tif (numberIsNaN(byteOffset)) byteOffset = dir ? 0 : buffer.length - 1;\n\t\tif (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\t\tif (byteOffset >= buffer.length) if (dir) return -1;\n\t\telse byteOffset = buffer.length - 1;\n\t\telse if (byteOffset < 0) if (dir) byteOffset = 0;\n\t\telse return -1;\n\t\tif (typeof val === \"string\") val = Buffer.from(val, encoding);\n\t\tif (Buffer.isBuffer(val)) {\n\t\t\tif (val.length === 0) return -1;\n\t\t\treturn arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n\t\t} else if (typeof val === \"number\") {\n\t\t\tval = val & 255;\n\t\t\tif (typeof Uint8Array.prototype.indexOf === \"function\") if (dir) return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n\t\t\telse return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n\t\t\treturn arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n\t\t}\n\t\tthrow new TypeError(\"val must be string, number or Buffer\");\n\t}\n\tfunction arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n\t\tlet indexSize = 1;\n\t\tlet arrLength = arr.length;\n\t\tlet valLength = val.length;\n\t\tif (encoding !== void 0) {\n\t\t\tencoding = String(encoding).toLowerCase();\n\t\t\tif (encoding === \"ucs2\" || encoding === \"ucs-2\" || encoding === \"utf16le\" || encoding === \"utf-16le\") {\n\t\t\t\tif (arr.length < 2 || val.length < 2) return -1;\n\t\t\t\tindexSize = 2;\n\t\t\t\tarrLength /= 2;\n\t\t\t\tvalLength /= 2;\n\t\t\t\tbyteOffset /= 2;\n\t\t\t}\n\t\t}\n\t\tfunction read(buf, i) {\n\t\t\tif (indexSize === 1) return buf[i];\n\t\t\telse return buf.readUInt16BE(i * indexSize);\n\t\t}\n\t\tlet i;\n\t\tif (dir) {\n\t\t\tlet foundIndex = -1;\n\t\t\tfor (i = byteOffset; i < arrLength; i++) if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n\t\t\t\tif (foundIndex === -1) foundIndex = i;\n\t\t\t\tif (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n\t\t\t} else {\n\t\t\t\tif (foundIndex !== -1) i -= i - foundIndex;\n\t\t\t\tfoundIndex = -1;\n\t\t\t}\n\t\t} else {\n\t\t\tif (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\t\t\tfor (i = byteOffset; i >= 0; i--) {\n\t\t\t\tlet found = true;\n\t\t\t\tfor (let j = 0; j < valLength; j++) if (read(arr, i + j) !== read(val, j)) {\n\t\t\t\t\tfound = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (found) return i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tBuffer.prototype.includes = function includes(val, byteOffset, encoding) {\n\t\treturn this.indexOf(val, byteOffset, encoding) !== -1;\n\t};\n\tBuffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n\t\treturn bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n\t};\n\tBuffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n\t\treturn bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n\t};\n\tfunction hexWrite(buf, string, offset, length) {\n\t\toffset = Number(offset) || 0;\n\t\tconst remaining = buf.length - offset;\n\t\tif (!length) length = remaining;\n\t\telse {\n\t\t\tlength = Number(length);\n\t\t\tif (length > remaining) length = remaining;\n\t\t}\n\t\tconst strLen = string.length;\n\t\tif (length > strLen / 2) length = strLen / 2;\n\t\tlet i;\n\t\tfor (i = 0; i < length; ++i) {\n\t\t\tconst parsed = parseInt(string.substr(i * 2, 2), 16);\n\t\t\tif (numberIsNaN(parsed)) return i;\n\t\t\tbuf[offset + i] = parsed;\n\t\t}\n\t\treturn i;\n\t}\n\tfunction utf8Write(buf, string, offset, length) {\n\t\treturn blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n\t}\n\tfunction asciiWrite(buf, string, offset, length) {\n\t\treturn blitBuffer(asciiToBytes(string), buf, offset, length);\n\t}\n\tfunction base64Write(buf, string, offset, length) {\n\t\treturn blitBuffer(base64ToBytes(string), buf, offset, length);\n\t}\n\tfunction ucs2Write(buf, string, offset, length) {\n\t\treturn blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n\t}\n\tBuffer.prototype.write = function write(string, offset, length, encoding) {\n\t\tif (offset === void 0) {\n\t\t\tencoding = \"utf8\";\n\t\t\tlength = this.length;\n\t\t\toffset = 0;\n\t\t} else if (length === void 0 && typeof offset === \"string\") {\n\t\t\tencoding = offset;\n\t\t\tlength = this.length;\n\t\t\toffset = 0;\n\t\t} else if (isFinite(offset)) {\n\t\t\toffset = offset >>> 0;\n\t\t\tif (isFinite(length)) {\n\t\t\t\tlength = length >>> 0;\n\t\t\t\tif (encoding === void 0) encoding = \"utf8\";\n\t\t\t} else {\n\t\t\t\tencoding = length;\n\t\t\t\tlength = void 0;\n\t\t\t}\n\t\t} else throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");\n\t\tconst remaining = this.length - offset;\n\t\tif (length === void 0 || length > remaining) length = remaining;\n\t\tif (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) throw new RangeError(\"Attempt to write outside buffer bounds\");\n\t\tif (!encoding) encoding = \"utf8\";\n\t\tlet loweredCase = false;\n\t\tfor (;;) switch (encoding) {\n\t\t\tcase \"hex\": return hexWrite(this, string, offset, length);\n\t\t\tcase \"utf8\":\n\t\t\tcase \"utf-8\": return utf8Write(this, string, offset, length);\n\t\t\tcase \"ascii\":\n\t\t\tcase \"latin1\":\n\t\t\tcase \"binary\": return asciiWrite(this, string, offset, length);\n\t\t\tcase \"base64\": return base64Write(this, string, offset, length);\n\t\t\tcase \"ucs2\":\n\t\t\tcase \"ucs-2\":\n\t\t\tcase \"utf16le\":\n\t\t\tcase \"utf-16le\": return ucs2Write(this, string, offset, length);\n\t\t\tdefault:\n\t\t\t\tif (loweredCase) throw new TypeError(\"Unknown encoding: \" + encoding);\n\t\t\t\tencoding = (\"\" + encoding).toLowerCase();\n\t\t\t\tloweredCase = true;\n\t\t}\n\t};\n\tBuffer.prototype.toJSON = function toJSON() {\n\t\treturn {\n\t\t\ttype: \"Buffer\",\n\t\t\tdata: Array.prototype.slice.call(this._arr || this, 0)\n\t\t};\n\t};\n\tfunction base64Slice(buf, start, end) {\n\t\tif (start === 0 && end === buf.length) return base64.fromByteArray(buf);\n\t\telse return base64.fromByteArray(buf.slice(start, end));\n\t}\n\tfunction utf8Slice(buf, start, end) {\n\t\tend = Math.min(buf.length, end);\n\t\tconst res = [];\n\t\tlet i = start;\n\t\twhile (i < end) {\n\t\t\tconst firstByte = buf[i];\n\t\t\tlet codePoint = null;\n\t\t\tlet bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n\t\t\tif (i + bytesPerSequence <= end) {\n\t\t\t\tlet secondByte, thirdByte, fourthByte, tempCodePoint;\n\t\t\t\tswitch (bytesPerSequence) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (firstByte < 128) codePoint = firstByte;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tsecondByte = buf[i + 1];\n\t\t\t\t\t\tif ((secondByte & 192) === 128) {\n\t\t\t\t\t\t\ttempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n\t\t\t\t\t\t\tif (tempCodePoint > 127) codePoint = tempCodePoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tsecondByte = buf[i + 1];\n\t\t\t\t\t\tthirdByte = buf[i + 2];\n\t\t\t\t\t\tif ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n\t\t\t\t\t\t\ttempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n\t\t\t\t\t\t\tif (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) codePoint = tempCodePoint;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tsecondByte = buf[i + 1];\n\t\t\t\t\t\tthirdByte = buf[i + 2];\n\t\t\t\t\t\tfourthByte = buf[i + 3];\n\t\t\t\t\t\tif ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n\t\t\t\t\t\t\ttempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n\t\t\t\t\t\t\tif (tempCodePoint > 65535 && tempCodePoint < 1114112) codePoint = tempCodePoint;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (codePoint === null) {\n\t\t\t\tcodePoint = 65533;\n\t\t\t\tbytesPerSequence = 1;\n\t\t\t} else if (codePoint > 65535) {\n\t\t\t\tcodePoint -= 65536;\n\t\t\t\tres.push(codePoint >>> 10 & 1023 | 55296);\n\t\t\t\tcodePoint = 56320 | codePoint & 1023;\n\t\t\t}\n\t\t\tres.push(codePoint);\n\t\t\ti += bytesPerSequence;\n\t\t}\n\t\treturn decodeCodePointsArray(res);\n\t}\n\tvar MAX_ARGUMENTS_LENGTH = 4096;\n\tfunction decodeCodePointsArray(codePoints) {\n\t\tconst len = codePoints.length;\n\t\tif (len <= MAX_ARGUMENTS_LENGTH) return String.fromCharCode.apply(String, codePoints);\n\t\tlet res = \"\";\n\t\tlet i = 0;\n\t\twhile (i < len) res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n\t\treturn res;\n\t}\n\tfunction asciiSlice(buf, start, end) {\n\t\tlet ret = \"\";\n\t\tend = Math.min(buf.length, end);\n\t\tfor (let i = start; i < end; ++i) ret += String.fromCharCode(buf[i] & 127);\n\t\treturn ret;\n\t}\n\tfunction latin1Slice(buf, start, end) {\n\t\tlet ret = \"\";\n\t\tend = Math.min(buf.length, end);\n\t\tfor (let i = start; i < end; ++i) ret += String.fromCharCode(buf[i]);\n\t\treturn ret;\n\t}\n\tfunction hexSlice(buf, start, end) {\n\t\tconst len = buf.length;\n\t\tif (!start || start < 0) start = 0;\n\t\tif (!end || end < 0 || end > len) end = len;\n\t\tlet out = \"\";\n\t\tfor (let i = start; i < end; ++i) out += hexSliceLookupTable[buf[i]];\n\t\treturn out;\n\t}\n\tfunction utf16leSlice(buf, start, end) {\n\t\tconst bytes = buf.slice(start, end);\n\t\tlet res = \"\";\n\t\tfor (let i = 0; i < bytes.length - 1; i += 2) res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n\t\treturn res;\n\t}\n\tBuffer.prototype.slice = function slice(start, end) {\n\t\tconst len = this.length;\n\t\tstart = ~~start;\n\t\tend = end === void 0 ? len : ~~end;\n\t\tif (start < 0) {\n\t\t\tstart += len;\n\t\t\tif (start < 0) start = 0;\n\t\t} else if (start > len) start = len;\n\t\tif (end < 0) {\n\t\t\tend += len;\n\t\t\tif (end < 0) end = 0;\n\t\t} else if (end > len) end = len;\n\t\tif (end < start) end = start;\n\t\tconst newBuf = this.subarray(start, end);\n\t\tObject.setPrototypeOf(newBuf, Buffer.prototype);\n\t\treturn newBuf;\n\t};\n\tfunction checkOffset(offset, ext, length) {\n\t\tif (offset % 1 !== 0 || offset < 0) throw new RangeError(\"offset is not uint\");\n\t\tif (offset + ext > length) throw new RangeError(\"Trying to access beyond buffer length\");\n\t}\n\tBuffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tbyteLength = byteLength >>> 0;\n\t\tif (!noAssert) checkOffset(offset, byteLength, this.length);\n\t\tlet val = this[offset];\n\t\tlet mul = 1;\n\t\tlet i = 0;\n\t\twhile (++i < byteLength && (mul *= 256)) val += this[offset + i] * mul;\n\t\treturn val;\n\t};\n\tBuffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tbyteLength = byteLength >>> 0;\n\t\tif (!noAssert) checkOffset(offset, byteLength, this.length);\n\t\tlet val = this[offset + --byteLength];\n\t\tlet mul = 1;\n\t\twhile (byteLength > 0 && (mul *= 256)) val += this[offset + --byteLength] * mul;\n\t\treturn val;\n\t};\n\tBuffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 1, this.length);\n\t\treturn this[offset];\n\t};\n\tBuffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 2, this.length);\n\t\treturn this[offset] | this[offset + 1] << 8;\n\t};\n\tBuffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 2, this.length);\n\t\treturn this[offset] << 8 | this[offset + 1];\n\t};\n\tBuffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 4, this.length);\n\t\treturn (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;\n\t};\n\tBuffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 4, this.length);\n\t\treturn this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n\t};\n\tBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {\n\t\toffset = offset >>> 0;\n\t\tvalidateNumber(offset, \"offset\");\n\t\tconst first = this[offset];\n\t\tconst last = this[offset + 7];\n\t\tif (first === void 0 || last === void 0) boundsError(offset, this.length - 8);\n\t\tconst lo = first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24;\n\t\tconst hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last * 2 ** 24;\n\t\treturn BigInt(lo) + (BigInt(hi) << BigInt(32));\n\t});\n\tBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {\n\t\toffset = offset >>> 0;\n\t\tvalidateNumber(offset, \"offset\");\n\t\tconst first = this[offset];\n\t\tconst last = this[offset + 7];\n\t\tif (first === void 0 || last === void 0) boundsError(offset, this.length - 8);\n\t\tconst hi = first * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n\t\tconst lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last;\n\t\treturn (BigInt(hi) << BigInt(32)) + BigInt(lo);\n\t});\n\tBuffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tbyteLength = byteLength >>> 0;\n\t\tif (!noAssert) checkOffset(offset, byteLength, this.length);\n\t\tlet val = this[offset];\n\t\tlet mul = 1;\n\t\tlet i = 0;\n\t\twhile (++i < byteLength && (mul *= 256)) val += this[offset + i] * mul;\n\t\tmul *= 128;\n\t\tif (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\t\treturn val;\n\t};\n\tBuffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tbyteLength = byteLength >>> 0;\n\t\tif (!noAssert) checkOffset(offset, byteLength, this.length);\n\t\tlet i = byteLength;\n\t\tlet mul = 1;\n\t\tlet val = this[offset + --i];\n\t\twhile (i > 0 && (mul *= 256)) val += this[offset + --i] * mul;\n\t\tmul *= 128;\n\t\tif (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\t\treturn val;\n\t};\n\tBuffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 1, this.length);\n\t\tif (!(this[offset] & 128)) return this[offset];\n\t\treturn (255 - this[offset] + 1) * -1;\n\t};\n\tBuffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 2, this.length);\n\t\tconst val = this[offset] | this[offset + 1] << 8;\n\t\treturn val & 32768 ? val | 4294901760 : val;\n\t};\n\tBuffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 2, this.length);\n\t\tconst val = this[offset + 1] | this[offset] << 8;\n\t\treturn val & 32768 ? val | 4294901760 : val;\n\t};\n\tBuffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 4, this.length);\n\t\treturn this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n\t};\n\tBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 4, this.length);\n\t\treturn this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n\t};\n\tBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {\n\t\toffset = offset >>> 0;\n\t\tvalidateNumber(offset, \"offset\");\n\t\tconst first = this[offset];\n\t\tconst last = this[offset + 7];\n\t\tif (first === void 0 || last === void 0) boundsError(offset, this.length - 8);\n\t\tconst val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last << 24);\n\t\treturn (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24);\n\t});\n\tBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {\n\t\toffset = offset >>> 0;\n\t\tvalidateNumber(offset, \"offset\");\n\t\tconst first = this[offset];\n\t\tconst last = this[offset + 7];\n\t\tif (first === void 0 || last === void 0) boundsError(offset, this.length - 8);\n\t\tconst val = (first << 24) + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n\t\treturn (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last);\n\t});\n\tBuffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 4, this.length);\n\t\treturn ieee754.read(this, offset, true, 23, 4);\n\t};\n\tBuffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 4, this.length);\n\t\treturn ieee754.read(this, offset, false, 23, 4);\n\t};\n\tBuffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 8, this.length);\n\t\treturn ieee754.read(this, offset, true, 52, 8);\n\t};\n\tBuffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkOffset(offset, 8, this.length);\n\t\treturn ieee754.read(this, offset, false, 52, 8);\n\t};\n\tfunction checkInt(buf, value, offset, ext, max, min) {\n\t\tif (!Buffer.isBuffer(buf)) throw new TypeError(\"\\\"buffer\\\" argument must be a Buffer instance\");\n\t\tif (value > max || value < min) throw new RangeError(\"\\\"value\\\" argument is out of bounds\");\n\t\tif (offset + ext > buf.length) throw new RangeError(\"Index out of range\");\n\t}\n\tBuffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tbyteLength = byteLength >>> 0;\n\t\tif (!noAssert) {\n\t\t\tconst maxBytes = Math.pow(2, 8 * byteLength) - 1;\n\t\t\tcheckInt(this, value, offset, byteLength, maxBytes, 0);\n\t\t}\n\t\tlet mul = 1;\n\t\tlet i = 0;\n\t\tthis[offset] = value & 255;\n\t\twhile (++i < byteLength && (mul *= 256)) this[offset + i] = value / mul & 255;\n\t\treturn offset + byteLength;\n\t};\n\tBuffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tbyteLength = byteLength >>> 0;\n\t\tif (!noAssert) {\n\t\t\tconst maxBytes = Math.pow(2, 8 * byteLength) - 1;\n\t\t\tcheckInt(this, value, offset, byteLength, maxBytes, 0);\n\t\t}\n\t\tlet i = byteLength - 1;\n\t\tlet mul = 1;\n\t\tthis[offset + i] = value & 255;\n\t\twhile (--i >= 0 && (mul *= 256)) this[offset + i] = value / mul & 255;\n\t\treturn offset + byteLength;\n\t};\n\tBuffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 1, 255, 0);\n\t\tthis[offset] = value & 255;\n\t\treturn offset + 1;\n\t};\n\tBuffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n\t\tthis[offset] = value & 255;\n\t\tthis[offset + 1] = value >>> 8;\n\t\treturn offset + 2;\n\t};\n\tBuffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n\t\tthis[offset] = value >>> 8;\n\t\tthis[offset + 1] = value & 255;\n\t\treturn offset + 2;\n\t};\n\tBuffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n\t\tthis[offset + 3] = value >>> 24;\n\t\tthis[offset + 2] = value >>> 16;\n\t\tthis[offset + 1] = value >>> 8;\n\t\tthis[offset] = value & 255;\n\t\treturn offset + 4;\n\t};\n\tBuffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n\t\tthis[offset] = value >>> 24;\n\t\tthis[offset + 1] = value >>> 16;\n\t\tthis[offset + 2] = value >>> 8;\n\t\tthis[offset + 3] = value & 255;\n\t\treturn offset + 4;\n\t};\n\tfunction wrtBigUInt64LE(buf, value, offset, min, max) {\n\t\tcheckIntBI(value, min, max, buf, offset, 7);\n\t\tlet lo = Number(value & BigInt(4294967295));\n\t\tbuf[offset++] = lo;\n\t\tlo = lo >> 8;\n\t\tbuf[offset++] = lo;\n\t\tlo = lo >> 8;\n\t\tbuf[offset++] = lo;\n\t\tlo = lo >> 8;\n\t\tbuf[offset++] = lo;\n\t\tlet hi = Number(value >> BigInt(32) & BigInt(4294967295));\n\t\tbuf[offset++] = hi;\n\t\thi = hi >> 8;\n\t\tbuf[offset++] = hi;\n\t\thi = hi >> 8;\n\t\tbuf[offset++] = hi;\n\t\thi = hi >> 8;\n\t\tbuf[offset++] = hi;\n\t\treturn offset;\n\t}\n\tfunction wrtBigUInt64BE(buf, value, offset, min, max) {\n\t\tcheckIntBI(value, min, max, buf, offset, 7);\n\t\tlet lo = Number(value & BigInt(4294967295));\n\t\tbuf[offset + 7] = lo;\n\t\tlo = lo >> 8;\n\t\tbuf[offset + 6] = lo;\n\t\tlo = lo >> 8;\n\t\tbuf[offset + 5] = lo;\n\t\tlo = lo >> 8;\n\t\tbuf[offset + 4] = lo;\n\t\tlet hi = Number(value >> BigInt(32) & BigInt(4294967295));\n\t\tbuf[offset + 3] = hi;\n\t\thi = hi >> 8;\n\t\tbuf[offset + 2] = hi;\n\t\thi = hi >> 8;\n\t\tbuf[offset + 1] = hi;\n\t\thi = hi >> 8;\n\t\tbuf[offset] = hi;\n\t\treturn offset + 8;\n\t}\n\tBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) {\n\t\treturn wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n\t});\n\tBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) {\n\t\treturn wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n\t});\n\tBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) {\n\t\t\tconst limit = Math.pow(2, 8 * byteLength - 1);\n\t\t\tcheckInt(this, value, offset, byteLength, limit - 1, -limit);\n\t\t}\n\t\tlet i = 0;\n\t\tlet mul = 1;\n\t\tlet sub = 0;\n\t\tthis[offset] = value & 255;\n\t\twhile (++i < byteLength && (mul *= 256)) {\n\t\t\tif (value < 0 && sub === 0 && this[offset + i - 1] !== 0) sub = 1;\n\t\t\tthis[offset + i] = (value / mul >> 0) - sub & 255;\n\t\t}\n\t\treturn offset + byteLength;\n\t};\n\tBuffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) {\n\t\t\tconst limit = Math.pow(2, 8 * byteLength - 1);\n\t\t\tcheckInt(this, value, offset, byteLength, limit - 1, -limit);\n\t\t}\n\t\tlet i = byteLength - 1;\n\t\tlet mul = 1;\n\t\tlet sub = 0;\n\t\tthis[offset + i] = value & 255;\n\t\twhile (--i >= 0 && (mul *= 256)) {\n\t\t\tif (value < 0 && sub === 0 && this[offset + i + 1] !== 0) sub = 1;\n\t\t\tthis[offset + i] = (value / mul >> 0) - sub & 255;\n\t\t}\n\t\treturn offset + byteLength;\n\t};\n\tBuffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 1, 127, -128);\n\t\tif (value < 0) value = 255 + value + 1;\n\t\tthis[offset] = value & 255;\n\t\treturn offset + 1;\n\t};\n\tBuffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n\t\tthis[offset] = value & 255;\n\t\tthis[offset + 1] = value >>> 8;\n\t\treturn offset + 2;\n\t};\n\tBuffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n\t\tthis[offset] = value >>> 8;\n\t\tthis[offset + 1] = value & 255;\n\t\treturn offset + 2;\n\t};\n\tBuffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n\t\tthis[offset] = value & 255;\n\t\tthis[offset + 1] = value >>> 8;\n\t\tthis[offset + 2] = value >>> 16;\n\t\tthis[offset + 3] = value >>> 24;\n\t\treturn offset + 4;\n\t};\n\tBuffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n\t\tif (value < 0) value = 4294967295 + value + 1;\n\t\tthis[offset] = value >>> 24;\n\t\tthis[offset + 1] = value >>> 16;\n\t\tthis[offset + 2] = value >>> 8;\n\t\tthis[offset + 3] = value & 255;\n\t\treturn offset + 4;\n\t};\n\tBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) {\n\t\treturn wrtBigUInt64LE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n\t});\n\tBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) {\n\t\treturn wrtBigUInt64BE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n\t});\n\tfunction checkIEEE754(buf, value, offset, ext, max, min) {\n\t\tif (offset + ext > buf.length) throw new RangeError(\"Index out of range\");\n\t\tif (offset < 0) throw new RangeError(\"Index out of range\");\n\t}\n\tfunction writeFloat(buf, value, offset, littleEndian, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkIEEE754(buf, value, offset, 4, 34028234663852886e22, -34028234663852886e22);\n\t\tieee754.write(buf, value, offset, littleEndian, 23, 4);\n\t\treturn offset + 4;\n\t}\n\tBuffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n\t\treturn writeFloat(this, value, offset, true, noAssert);\n\t};\n\tBuffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n\t\treturn writeFloat(this, value, offset, false, noAssert);\n\t};\n\tfunction writeDouble(buf, value, offset, littleEndian, noAssert) {\n\t\tvalue = +value;\n\t\toffset = offset >>> 0;\n\t\tif (!noAssert) checkIEEE754(buf, value, offset, 8, 17976931348623157e292, -17976931348623157e292);\n\t\tieee754.write(buf, value, offset, littleEndian, 52, 8);\n\t\treturn offset + 8;\n\t}\n\tBuffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n\t\treturn writeDouble(this, value, offset, true, noAssert);\n\t};\n\tBuffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n\t\treturn writeDouble(this, value, offset, false, noAssert);\n\t};\n\tBuffer.prototype.copy = function copy(target, targetStart, start, end) {\n\t\tif (!Buffer.isBuffer(target)) throw new TypeError(\"argument should be a Buffer\");\n\t\tif (!start) start = 0;\n\t\tif (!end && end !== 0) end = this.length;\n\t\tif (targetStart >= target.length) targetStart = target.length;\n\t\tif (!targetStart) targetStart = 0;\n\t\tif (end > 0 && end < start) end = start;\n\t\tif (end === start) return 0;\n\t\tif (target.length === 0 || this.length === 0) return 0;\n\t\tif (targetStart < 0) throw new RangeError(\"targetStart out of bounds\");\n\t\tif (start < 0 || start >= this.length) throw new RangeError(\"Index out of range\");\n\t\tif (end < 0) throw new RangeError(\"sourceEnd out of bounds\");\n\t\tif (end > this.length) end = this.length;\n\t\tif (target.length - targetStart < end - start) end = target.length - targetStart + start;\n\t\tconst len = end - start;\n\t\tif (this === target && typeof Uint8Array.prototype.copyWithin === \"function\") this.copyWithin(targetStart, start, end);\n\t\telse Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);\n\t\treturn len;\n\t};\n\tBuffer.prototype.fill = function fill(val, start, end, encoding) {\n\t\tif (typeof val === \"string\") {\n\t\t\tif (typeof start === \"string\") {\n\t\t\t\tencoding = start;\n\t\t\t\tstart = 0;\n\t\t\t\tend = this.length;\n\t\t\t} else if (typeof end === \"string\") {\n\t\t\t\tencoding = end;\n\t\t\t\tend = this.length;\n\t\t\t}\n\t\t\tif (encoding !== void 0 && typeof encoding !== \"string\") throw new TypeError(\"encoding must be a string\");\n\t\t\tif (typeof encoding === \"string\" && !Buffer.isEncoding(encoding)) throw new TypeError(\"Unknown encoding: \" + encoding);\n\t\t\tif (val.length === 1) {\n\t\t\t\tconst code = val.charCodeAt(0);\n\t\t\t\tif (encoding === \"utf8\" && code < 128 || encoding === \"latin1\") val = code;\n\t\t\t}\n\t\t} else if (typeof val === \"number\") val = val & 255;\n\t\telse if (typeof val === \"boolean\") val = Number(val);\n\t\tif (start < 0 || this.length < start || this.length < end) throw new RangeError(\"Out of range index\");\n\t\tif (end <= start) return this;\n\t\tstart = start >>> 0;\n\t\tend = end === void 0 ? this.length : end >>> 0;\n\t\tif (!val) val = 0;\n\t\tlet i;\n\t\tif (typeof val === \"number\") for (i = start; i < end; ++i) this[i] = val;\n\t\telse {\n\t\t\tconst bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);\n\t\t\tconst len = bytes.length;\n\t\t\tif (len === 0) throw new TypeError(\"The value \\\"\" + val + \"\\\" is invalid for argument \\\"value\\\"\");\n\t\t\tfor (i = 0; i < end - start; ++i) this[i + start] = bytes[i % len];\n\t\t}\n\t\treturn this;\n\t};\n\tvar errors = {};\n\tfunction E(sym, getMessage, Base) {\n\t\terrors[sym] = class NodeError extends Base {\n\t\t\tconstructor() {\n\t\t\t\tsuper();\n\t\t\t\tObject.defineProperty(this, \"message\", {\n\t\t\t\t\tvalue: getMessage.apply(this, arguments),\n\t\t\t\t\twritable: true,\n\t\t\t\t\tconfigurable: true\n\t\t\t\t});\n\t\t\t\tthis.name = `${this.name} [${sym}]`;\n\t\t\t\tthis.stack;\n\t\t\t\tdelete this.name;\n\t\t\t}\n\t\t\tget code() {\n\t\t\t\treturn sym;\n\t\t\t}\n\t\t\tset code(value) {\n\t\t\t\tObject.defineProperty(this, \"code\", {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tvalue,\n\t\t\t\t\twritable: true\n\t\t\t\t});\n\t\t\t}\n\t\t\ttoString() {\n\t\t\t\treturn `${this.name} [${sym}]: ${this.message}`;\n\t\t\t}\n\t\t};\n\t}\n\tE(\"ERR_BUFFER_OUT_OF_BOUNDS\", function(name) {\n\t\tif (name) return `${name} is outside of buffer bounds`;\n\t\treturn \"Attempt to access memory outside buffer bounds\";\n\t}, RangeError);\n\tE(\"ERR_INVALID_ARG_TYPE\", function(name, actual) {\n\t\treturn `The \"${name}\" argument must be of type number. Received type ${typeof actual}`;\n\t}, TypeError);\n\tE(\"ERR_OUT_OF_RANGE\", function(str, range, input) {\n\t\tlet msg = `The value of \"${str}\" is out of range.`;\n\t\tlet received = input;\n\t\tif (Number.isInteger(input) && Math.abs(input) > 2 ** 32) received = addNumericalSeparator(String(input));\n\t\telse if (typeof input === \"bigint\") {\n\t\t\treceived = String(input);\n\t\t\tif (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) received = addNumericalSeparator(received);\n\t\t\treceived += \"n\";\n\t\t}\n\t\tmsg += ` It must be ${range}. Received ${received}`;\n\t\treturn msg;\n\t}, RangeError);\n\tfunction addNumericalSeparator(val) {\n\t\tlet res = \"\";\n\t\tlet i = val.length;\n\t\tconst start = val[0] === \"-\" ? 1 : 0;\n\t\tfor (; i >= start + 4; i -= 3) res = `_${val.slice(i - 3, i)}${res}`;\n\t\treturn `${val.slice(0, i)}${res}`;\n\t}\n\tfunction checkBounds(buf, offset, byteLength) {\n\t\tvalidateNumber(offset, \"offset\");\n\t\tif (buf[offset] === void 0 || buf[offset + byteLength] === void 0) boundsError(offset, buf.length - (byteLength + 1));\n\t}\n\tfunction checkIntBI(value, min, max, buf, offset, byteLength) {\n\t\tif (value > max || value < min) {\n\t\t\tconst n = typeof min === \"bigint\" ? \"n\" : \"\";\n\t\t\tlet range;\n\t\t\tif (byteLength > 3) if (min === 0 || min === BigInt(0)) range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`;\n\t\t\telse range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ${(byteLength + 1) * 8 - 1}${n}`;\n\t\t\telse range = `>= ${min}${n} and <= ${max}${n}`;\n\t\t\tthrow new errors.ERR_OUT_OF_RANGE(\"value\", range, value);\n\t\t}\n\t\tcheckBounds(buf, offset, byteLength);\n\t}\n\tfunction validateNumber(value, name) {\n\t\tif (typeof value !== \"number\") throw new errors.ERR_INVALID_ARG_TYPE(name, \"number\", value);\n\t}\n\tfunction boundsError(value, length, type) {\n\t\tif (Math.floor(value) !== value) {\n\t\t\tvalidateNumber(value, type);\n\t\t\tthrow new errors.ERR_OUT_OF_RANGE(type || \"offset\", \"an integer\", value);\n\t\t}\n\t\tif (length < 0) throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();\n\t\tthrow new errors.ERR_OUT_OF_RANGE(type || \"offset\", `>= ${type ? 1 : 0} and <= ${length}`, value);\n\t}\n\tvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\n\tfunction base64clean(str) {\n\t\tstr = str.split(\"=\")[0];\n\t\tstr = str.trim().replace(INVALID_BASE64_RE, \"\");\n\t\tif (str.length < 2) return \"\";\n\t\twhile (str.length % 4 !== 0) str = str + \"=\";\n\t\treturn str;\n\t}\n\tfunction utf8ToBytes(string, units) {\n\t\tunits = units || Infinity;\n\t\tlet codePoint;\n\t\tconst length = string.length;\n\t\tlet leadSurrogate = null;\n\t\tconst bytes = [];\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tcodePoint = string.charCodeAt(i);\n\t\t\tif (codePoint > 55295 && codePoint < 57344) {\n\t\t\t\tif (!leadSurrogate) {\n\t\t\t\t\tif (codePoint > 56319) {\n\t\t\t\t\t\tif ((units -= 3) > -1) bytes.push(239, 191, 189);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (i + 1 === length) {\n\t\t\t\t\t\tif ((units -= 3) > -1) bytes.push(239, 191, 189);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tleadSurrogate = codePoint;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (codePoint < 56320) {\n\t\t\t\t\tif ((units -= 3) > -1) bytes.push(239, 191, 189);\n\t\t\t\t\tleadSurrogate = codePoint;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcodePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n\t\t\t} else if (leadSurrogate) {\n\t\t\t\tif ((units -= 3) > -1) bytes.push(239, 191, 189);\n\t\t\t}\n\t\t\tleadSurrogate = null;\n\t\t\tif (codePoint < 128) {\n\t\t\t\tif ((units -= 1) < 0) break;\n\t\t\t\tbytes.push(codePoint);\n\t\t\t} else if (codePoint < 2048) {\n\t\t\t\tif ((units -= 2) < 0) break;\n\t\t\t\tbytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n\t\t\t} else if (codePoint < 65536) {\n\t\t\t\tif ((units -= 3) < 0) break;\n\t\t\t\tbytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n\t\t\t} else if (codePoint < 1114112) {\n\t\t\t\tif ((units -= 4) < 0) break;\n\t\t\t\tbytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n\t\t\t} else throw new Error(\"Invalid code point\");\n\t\t}\n\t\treturn bytes;\n\t}\n\tfunction asciiToBytes(str) {\n\t\tconst byteArray = [];\n\t\tfor (let i = 0; i < str.length; ++i) byteArray.push(str.charCodeAt(i) & 255);\n\t\treturn byteArray;\n\t}\n\tfunction utf16leToBytes(str, units) {\n\t\tlet c, hi, lo;\n\t\tconst byteArray = [];\n\t\tfor (let i = 0; i < str.length; ++i) {\n\t\t\tif ((units -= 2) < 0) break;\n\t\t\tc = str.charCodeAt(i);\n\t\t\thi = c >> 8;\n\t\t\tlo = c % 256;\n\t\t\tbyteArray.push(lo);\n\t\t\tbyteArray.push(hi);\n\t\t}\n\t\treturn byteArray;\n\t}\n\tfunction base64ToBytes(str) {\n\t\treturn base64.toByteArray(base64clean(str));\n\t}\n\tfunction blitBuffer(src, dst, offset, length) {\n\t\tlet i;\n\t\tfor (i = 0; i < length; ++i) {\n\t\t\tif (i + offset >= dst.length || i >= src.length) break;\n\t\t\tdst[i + offset] = src[i];\n\t\t}\n\t\treturn i;\n\t}\n\tfunction isInstance(obj, type) {\n\t\treturn obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;\n\t}\n\tfunction numberIsNaN(obj) {\n\t\treturn obj !== obj;\n\t}\n\tvar hexSliceLookupTable = (function() {\n\t\tconst alphabet = \"0123456789abcdef\";\n\t\tconst table = new Array(256);\n\t\tfor (let i = 0; i < 16; ++i) {\n\t\t\tconst i16 = i * 16;\n\t\t\tfor (let j = 0; j < 16; ++j) table[i16 + j] = alphabet[i] + alphabet[j];\n\t\t}\n\t\treturn table;\n\t})();\n\tfunction defineBigIntMethod(fn) {\n\t\treturn typeof BigInt === \"undefined\" ? BufferBigIntNotDefined : fn;\n\t}\n\tfunction BufferBigIntNotDefined() {\n\t\tthrow new Error(\"BigInt not supported\");\n\t}\n}));\n//#endregion\n//#region src/parser/parser.ts\nvar import_lib = require_lib();\nvar import_buffer = require_buffer();\nvar TiledParser = class TiledParser {\n\tconstructor(xml, filePath = \"\", basePath = \"\") {\n\t\tthis.xml = xml;\n\t\tthis.filePath = filePath;\n\t\tthis.basePath = basePath;\n\t\tthis.layers = /* @__PURE__ */ new Map();\n\t\tthis.transform = (obj) => {\n\t\t\tif (!obj) return;\n\t\t\tconst attr = obj.attributes || obj._attributes;\n\t\t\tif (!attr) return obj;\n\t\t\tlet newObj = {\n\t\t\t\t...obj,\n\t\t\t\t...attr,\n\t\t\t\t...TiledParser.propToNumber(attr, [\n\t\t\t\t\t\"version\",\n\t\t\t\t\t\"width\",\n\t\t\t\t\t\"height\",\n\t\t\t\t\t\"tilewidth\",\n\t\t\t\t\t\"tileheight\",\n\t\t\t\t\t\"nextlayerid\",\n\t\t\t\t\t\"nextobjectid\",\n\t\t\t\t\t\"hexsidelength\",\n\t\t\t\t\t\"opacity\",\n\t\t\t\t\t\"x\",\n\t\t\t\t\t\"y\",\n\t\t\t\t\t\"offsetx\",\n\t\t\t\t\t\"offsety\",\n\t\t\t\t\t\"startx\",\n\t\t\t\t\t\"starty\",\n\t\t\t\t\t\"id\",\n\t\t\t\t\t\"firstgid\",\n\t\t\t\t\t\"imageheight\",\n\t\t\t\t\t\"imagewidth\",\n\t\t\t\t\t\"margin\",\n\t\t\t\t\t\"columns\",\n\t\t\t\t\t\"rows\",\n\t\t\t\t\t\"tilecount\",\n\t\t\t\t\t\"rotation\",\n\t\t\t\t\t\"gid\",\n\t\t\t\t\t\"tileid\",\n\t\t\t\t\t\"duration\",\n\t\t\t\t\t\"parallaxx\",\n\t\t\t\t\t\"parallaxy\",\n\t\t\t\t\t\"repeatx\",\n\t\t\t\t\t\"repeaty\",\n\t\t\t\t\t\"pixelsize\"\n\t\t\t\t]),\n\t\t\t\t...TiledParser.propToBool(attr, [\n\t\t\t\t\t\"visible\",\n\t\t\t\t\t\"infinite\",\n\t\t\t\t\t\"locked\",\n\t\t\t\t\t\"bold\",\n\t\t\t\t\t\"italic\",\n\t\t\t\t\t\"kerning\",\n\t\t\t\t\t\"strikeout\",\n\t\t\t\t\t\"underline\",\n\t\t\t\t\t\"wrap\"\n\t\t\t\t])\n\t\t\t};\n\t\t\tif (newObj.properties) {\n\t\t\t\tconst properties = TiledParser.toArray(newObj.properties.property);\n\t\t\t\tconst propObj = {};\n\t\t\t\tfor (let prop of properties) {\n\t\t\t\t\tconst attr = prop._attributes;\n\t\t\t\t\tif (!attr) continue;\n\t\t\t\t\tlet val;\n\t\t\t\t\tswitch (attr.type) {\n\t\t\t\t\t\tcase \"file\":\n\t\t\t\t\t\t\tval = this.getImagePath(attr.value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tcase \"float\":\n\t\t\t\t\t\tcase \"int\":\n\t\t\t\t\t\t\tval = +attr.value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"bool\":\n\t\t\t\t\t\t\tval = attr.value == \"true\" ? true : false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"class\":\n\t\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\t\t...this.transform(prop)?.properties ?? {},\n\t\t\t\t\t\t\t\t_classname: attr.propertytype\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: val = attr.value;\n\t\t\t\t\t}\n\t\t\t\t\tpropObj[attr.name] = val;\n\t\t\t\t}\n\t\t\t\tnewObj.properties = propObj;\n\t\t\t}\n\t\t\tif (newObj.polygon) newObj.polygon = this.transform(newObj.polygon);\n\t\t\tif (newObj.polyline) newObj.polyline = this.transform(newObj.polyline);\n\t\t\tif (newObj.points) newObj = newObj.points.split(\" \").map((point) => {\n\t\t\t\tconst pos = point.split(\",\");\n\t\t\t\treturn {\n\t\t\t\t\tx: +pos[0],\n\t\t\t\t\ty: +pos[1]\n\t\t\t\t};\n\t\t\t});\n\t\t\tif (newObj.point) newObj.point = true;\n\t\t\tif (newObj.ellipse) newObj.ellipse = true;\n\t\t\tif (newObj.text) {\n\t\t\t\tnewObj.text = {\n\t\t\t\t\ttext: newObj.text._text,\n\t\t\t\t\t...this.transform(newObj.text)\n\t\t\t\t};\n\t\t\t\tdelete newObj.text._text;\n\t\t\t}\n\t\t\tif (newObj.image) newObj.image = this.transform(newObj.image);\n\t\t\tif (newObj.source) {\n\t\t\t\tif (!this.isTilesetSource(newObj)) newObj.source = this.getImagePath(newObj.source);\n\t\t\t}\n\t\t\tconst objectgroup = newObj.object || newObj.objectgroup?.object;\n\t\t\tif (objectgroup) newObj.objects = TiledParser.toArray(objectgroup).map((object) => {\n\t\t\t\treturn this.transform(object);\n\t\t\t});\n\t\t\tdelete newObj._attributes;\n\t\t\tdelete newObj.attributes;\n\t\t\tdelete newObj.object;\n\t\t\tdelete newObj.objectgroup;\n\t\t\treturn newObj;\n\t\t};\n\t}\n\tstatic {\n\t\tthis.propToNumber = (obj, props) => {\n\t\t\tfor (let key of props) if (obj[key] !== void 0) obj[key] = +obj[key];\n\t\t\treturn obj;\n\t\t};\n\t}\n\tstatic {\n\t\tthis.propToBool = (obj, props) => {\n\t\t\tfor (let key of props) if (obj[key] !== void 0) obj[key] = obj[key] == \"true\" || obj[key] == \"1\";\n\t\t\treturn obj;\n\t\t};\n\t}\n\tstatic toArray(prop) {\n\t\tif (!prop) return [];\n\t\tif (!Array.isArray(prop)) return [prop];\n\t\treturn prop;\n\t}\n\tgetImagePath(image) {\n\t\tif (this.filePath.startsWith(\"http\")) return new URL(image, this.filePath).href;\n\t\treturn joinPath(this.basePath, image);\n\t}\n\t/**\n\t* Check if the object is a tileset source reference\n\t* Tileset sources should not have their paths transformed with getImagePath\n\t*/\n\tisTilesetSource(obj) {\n\t\treturn obj.firstgid !== void 0 || obj.tilewidth !== void 0 || obj.tileheight !== void 0 || obj.tilecount !== void 0 || obj.columns !== void 0;\n\t}\n\tstatic unpackTileBytes(buffer, size) {\n\t\tconst expectedCount = size * 4;\n\t\tif (buffer.length !== expectedCount) throw new Error(\"Expected \" + expectedCount + \" bytes of tile data; received \" + buffer.length);\n\t\tlet tileIndex = 0;\n\t\tconst array = [];\n\t\tfor (let i = 0; i < expectedCount; i += 4) {\n\t\t\tarray[tileIndex] = buffer.readUInt32LE(i);\n\t\t\ttileIndex++;\n\t\t}\n\t\treturn array;\n\t}\n\tstatic decode(obj, size) {\n\t\tconst { encoding, data } = obj;\n\t\tif (encoding == \"base64\") return TiledParser.unpackTileBytes(import_buffer.Buffer.from(data.trim(), \"base64\"), size);\n\t\telse if (encoding == \"csv\") return data.trim().split(\",\").map((x) => +x);\n\t\treturn data;\n\t}\n\tparseMap() {\n\t\tconst json = (0, import_lib.xml2js)(this.xml, { compact: true });\n\t\tconst jsonNoCompact = (0, import_lib.xml2js)(this.xml);\n\t\tconst tileset = json.map.tileset;\n\t\tjson.map.group;\n\t\tconst recursiveObjectGroup = (obj) => {\n\t\t\tconst { objectgroup, group, layer, imagelayer } = obj;\n\t\t\tconst setLayer = (type) => {\n\t\t\t\tif (!type) return;\n\t\t\t\tTiledParser.toArray(type).forEach((val) => {\n\t\t\t\t\tif (this.layers.has(+val._attributes.id)) throw new Error(`Tiled Parser Error: Layer with id ${val._attributes.id} already exists`);\n\t\t\t\t\tthis.layers.set(+val._attributes.id, val);\n\t\t\t\t});\n\t\t\t};\n\t\t\tsetLayer(objectgroup);\n\t\t\tsetLayer(layer);\n\t\t\tsetLayer(group);\n\t\t\tsetLayer(imagelayer);\n\t\t\tif (group) recursiveObjectGroup(group);\n\t\t};\n\t\trecursiveObjectGroup(json.map);\n\t\tconst recursiveLayer = (elements, array = []) => {\n\t\t\tif (!elements) return array;\n\t\t\tfor (let element of elements) {\n\t\t\t\tconst { name } = element;\n\t\t\t\tif (![\n\t\t\t\t\t\"layer\",\n\t\t\t\t\t\"group\",\n\t\t\t\t\t\"imagelayer\",\n\t\t\t\t\t\"objectgroup\"\n\t\t\t\t].includes(name)) continue;\n\t\t\t\tconst data = element.elements?.find((el) => el.name == \"data\");\n\t\t\t\telement.layer = this.layers.get(+element.attributes.id);\n\t\t\t\tconst obj = {\n\t\t\t\t\t...this.transform(data) ?? {},\n\t\t\t\t\t...this.transform(element),\n\t\t\t\t\t...this.transform(element.layer),\n\t\t\t\t\tlayers: recursiveLayer(element.elements),\n\t\t\t\t\tdata: data ? data.elements[0].text : void 0,\n\t\t\t\t\ttype: name == \"layer\" ? \"tilelayer\" : name\n\t\t\t\t};\n\t\t\t\tdelete obj.elements;\n\t\t\t\tdelete obj.layer;\n\t\t\t\tif (obj.data) obj.data = TiledParser.decode(obj, obj.width * obj.height);\n\t\t\t\tarray.push(obj);\n\t\t\t}\n\t\t\treturn array;\n\t\t};\n\t\tconst layers = recursiveLayer(jsonNoCompact.elements[0].elements);\n\t\tconst tilesets = TiledParser.toArray(tileset).map((tileset) => {\n\t\t\treturn this.transform(tileset);\n\t\t});\n\t\tconst ret = {\n\t\t\t...this.transform(json.map),\n\t\t\tlayers,\n\t\t\ttilesets\n\t\t};\n\t\tdelete ret.layer;\n\t\tdelete ret.tileset;\n\t\tdelete ret.group;\n\t\tdelete ret.imagelayer;\n\t\treturn ret;\n\t}\n\tparseTileset() {\n\t\tconst { tileset } = (0, import_lib.xml2js)(this.xml, { compact: true });\n\t\tconst ret = {\n\t\t\t...this.transform(tileset),\n\t\t\timage: this.transform(tileset.image),\n\t\t\ttiles: TiledParser.toArray(tileset.tile).map((tile) => {\n\t\t\t\tconst ret = this.transform(tile);\n\t\t\t\tif (tile.animation) ret.animations = TiledParser.toArray(tile.animation.frame).map(this.transform);\n\t\t\t\tdelete ret.animation;\n\t\t\t\treturn ret;\n\t\t\t})\n\t\t};\n\t\tdelete ret.tile;\n\t\treturn ret;\n\t}\n};\n//#endregion\n//#region src/classes/Properties.ts\nvar TiledProperties = class {\n\tconstructor(data) {\n\t\tthis.properties = {};\n\t\tthis.properties = data?.properties ?? {};\n\t}\n\tgetProperty(name, defaultValue) {\n\t\tconst val = this.properties[name];\n\t\tif (val === void 0) return defaultValue;\n\t\treturn val;\n\t}\n\thasProperty(name) {\n\t\treturn !!this.properties[name];\n\t}\n\tsetProperty(name, value) {\n\t\tthis.properties[name] = value;\n\t}\n\tgetType() {\n\t\treturn this.class || this[\"type\"];\n\t}\n};\n//#endregion\n//#region src/classes/Gid.ts\nvar FLIPPED_HORIZONTALLY_FLAG = 2147483648;\nvar FLIPPED_VERTICALLY_FLAG = 1073741824;\nvar FLIPPED_DIAGONALLY_FLAG = 536870912;\nvar ROTATED_HEXAGONAL_120_FLAG = 268435456;\nvar TileGid = class TileGid extends TiledProperties {\n\tconstructor(obj) {\n\t\tsuper(obj);\n\t\tthis.obj = obj;\n\t\tthis._gid = obj?.gid;\n\t}\n\tstatic getRealGid(gid) {\n\t\treturn gid & 268435455;\n\t}\n\tget horizontalFlip() {\n\t\treturn !!(this._gid & FLIPPED_HORIZONTALLY_FLAG);\n\t}\n\tget verticalFlip() {\n\t\treturn !!(this._gid & FLIPPED_VERTICALLY_FLAG);\n\t}\n\tget diagonalFlip() {\n\t\treturn !!(this._gid & FLIPPED_DIAGONALLY_FLAG);\n\t}\n\tget rotatedHex120() {\n\t\treturn !!(this._gid & ROTATED_HEXAGONAL_120_FLAG);\n\t}\n\tget gid() {\n\t\treturn TileGid.getRealGid(this._gid);\n\t}\n\tset gid(val) {\n\t\tthis._gid = val;\n\t}\n};\n//#endregion\n//#region src/classes/Tile.ts\nvar Tile = class extends TileGid {\n\tconstructor(tile) {\n\t\tsuper(tile);\n\t\tthis.tile = tile;\n\t\tconst preservedProperties = this.properties;\n\t\tReflect.deleteProperty(tile, \"gid\");\n\t\tObject.assign(this, tile);\n\t\tif (preservedProperties && Object.keys(preservedProperties).length > 0) this.properties = {\n\t\t\t...preservedProperties,\n\t\t\t...this.properties\n\t\t};\n\t}\n};\n//#endregion\n//#region src/classes/Object.ts\nvar TiledObjectClass = class extends TileGid {\n\tconstructor(object) {\n\t\tsuper(object);\n\t\tthis.layerName = \"\";\n\t\tObject.assign(this, object);\n\t\tif (object?.gid) this.y -= this.height;\n\t}\n};\n//#endregion\n//#region src/classes/Layer.ts\nvar Layer = class Layer extends TiledProperties {\n\tget size() {\n\t\treturn this.data.length;\n\t}\n\tconstructor(layer, tilesets, parent) {\n\t\tsuper(layer);\n\t\tthis.tilesets = tilesets;\n\t\tthis.parent = parent;\n\t\tthis.cacheTiles = false;\n\t\tthis.tiles = [];\n\t\tObject.assign(this, layer);\n\t\tthis.mapObjects();\n\t\tthis.mergePropertiesWithParent();\n\t\tthis.cacheTiles = this.getProperty(\"cache-tiles\", false);\n\t\tif (this.cacheTiles) this.propertiesTiles();\n\t}\n\tcreateTile(gid, tileIndex, layerIndex) {\n\t\tif (gid == 0) return;\n\t\tconst realGid = TileGid.getRealGid(gid);\n\t\tconst tileset = Layer.findTileSet(realGid, this.tilesets);\n\t\tif (!tileset) return;\n\t\tconst tile = tileset.getTile(realGid - tileset.firstgid);\n\t\tif (tile) return new Tile({\n\t\t\t...tile.tile,\n\t\t\tgid,\n\t\t\tindex: tileIndex,\n\t\t\tlayerIndex\n\t\t});\n\t\treturn new Tile({\n\t\t\tgid,\n\t\t\tindex: tileIndex,\n\t\t\tlayerIndex\n\t\t});\n\t}\n\tmergePropertiesWithParent() {\n\t\tconst parent = this.getLayerParent();\n\t\tif (!this.properties) this.properties = {};\n\t\tif (!parent) return;\n\t\tfor (let key in parent.properties) {\n\t\t\tconst val = parent.properties[key];\n\t\t\tif (this.properties[key] === void 0) this.properties[key] = val;\n\t\t\telse if (key == \"z\") this.properties[key] += val;\n\t\t\telse continue;\n\t\t}\n\t\tthis.opacity = Math.round((parent.opacity ?? 1) * (this.opacity ?? 1) * 100) / 100;\n\t\tthis.offsetx = (parent.offsetx ?? 0) + (this.offsetx ?? 0);\n\t\tthis.offsety = (parent.offsety ?? 0) + (this.offsety ?? 0);\n\t\tthis.locked = parent.locked ?? false;\n\t}\n\tpropertiesTiles() {\n\t\tif (!this.data) return;\n\t\tconst data = this.data;\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tconst id = data[i];\n\t\t\tthis.tiles.push(this.createTile(id, i));\n\t\t}\n\t}\n\tmapObjects() {\n\t\tif (this.objects) this.objects = this.objects.map((object) => {\n\t\t\tconst obj = new TiledObjectClass(object);\n\t\t\tobj.layerName = this.name;\n\t\t\treturn obj;\n\t\t});\n\t}\n\tgetTileByIndex(tileIndex) {\n\t\tif (this.cacheTiles) return this.tiles[tileIndex];\n\t\treturn this.createTile(this.data[tileIndex], tileIndex);\n\t}\n\tstatic findTileSet(gid, tileSets) {\n\t\tlet tileset;\n\t\tfor (let i = tileSets.length - 1; i >= 0; i--) {\n\t\t\ttileset = tileSets[i];\n\t\t\tif (tileset.firstgid && tileset.firstgid <= gid) break;\n\t\t}\n\t\treturn tileset;\n\t}\n\tgetLayerParent() {\n\t\treturn this.parent;\n\t}\n\ttilesForEach(cb) {\n\t\tfor (let i = 0; i < this.data.length; i++) {\n\t\t\tif (this.cacheTiles) {\n\t\t\t\tcb(this.tiles[i], i);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcb(this.createTile(this.data[i], i), i);\n\t\t}\n\t}\n\tsetData(tileIndex, gid) {\n\t\tthis.data[tileIndex] = gid;\n\t}\n};\n//#endregion\n//#region src/classes/Tileset.ts\nvar Tileset = class extends TiledProperties {\n\tconstructor(tileset) {\n\t\tsuper(tileset);\n\t\tthis.tileset = tileset;\n\t\tthis.cacheTileId = /* @__PURE__ */ new Map();\n\t\tObject.assign(this, tileset);\n\t\tthis.margin = this.margin ?? 0;\n\t\tthis.spacing = this.spacing ?? 0;\n\t\tconst tilesArray = tileset.tiles || tileset.tile || [];\n\t\tfor (let tile of tilesArray) this.addTile(tile);\n\t\tReflect.deleteProperty(this, \"tiles\");\n\t\tReflect.deleteProperty(this, \"tile\");\n\t}\n\taddTile(tileObj) {\n\t\tconst tile = new Tile(tileObj);\n\t\tthis.cacheTileId.set(tile.id, tile);\n\t\treturn tile;\n\t}\n\tgetTile(id) {\n\t\treturn this.cacheTileId.get(+id);\n\t}\n};\n//#endregion\n//#region src/parser/open-file.ts\nvar TiledParserFile = class TiledParserFile {\n\tconstructor(file, { basePath = \"\", staticDir = \"\", relativePath = \"\" } = {}) {\n\t\tthis.file = file;\n\t\tthis.basePath = basePath;\n\t}\n\tstatic isBrowser() {\n\t\treturn typeof window !== \"undefined\" && !window.useFileSystem;\n\t}\n\tstatic typeOfFile(file) {\n\t\tfile = file.trim();\n\t\tconst isString = typeof file == \"string\";\n\t\tconst info = {\n\t\t\tisXml: isString && file.startsWith(\"<?xml\"),\n\t\t\tisObject: !!file[\"version\"],\n\t\t\tisHttp: isString && file.startsWith(\"http\")\n\t\t};\n\t\treturn {\n\t\t\t...info,\n\t\t\tisPath: !info.isXml && !info.isObject && !info.isHttp\n\t\t};\n\t}\n\t_parseFile(file, type, cb) {\n\t\tconst isXml = (content) => TiledParserFile.typeOfFile(content).isXml;\n\t\tconst loadContent = (content) => {\n\t\t\tif (!content) return cb(null);\n\t\t\tif (isXml(content)) {\n\t\t\t\tconst parser = new TiledParser(content, file, this.basePath);\n\t\t\t\tif (type == \"map\") return cb(parser.parseMap());\n\t\t\t\telse if (type == \"tileset\") return cb(parser.parseTileset());\n\t\t\t}\n\t\t\treturn cb(JSON.parse(content));\n\t\t};\n\t\tif (TiledParserFile.typeOfFile(file).isObject) return cb(file);\n\t\tconst { isHttp } = TiledParserFile.typeOfFile(file);\n\t\tif (isXml(file)) loadContent(file);\n\t\telse if (isHttp || TiledParserFile.isBrowser() && process.env.NODE_ENV != \"test\") {\n\t\t\tlet url = isHttp ? file : joinPath(this.basePath, file);\n\t\t\tif (TiledParserFile.isBrowser() && window.urlCache) url = window.urlCache[file];\n\t\t\tfetch(url, { headers: { \"Content-Type\": \"application/xml\" } }).then((response) => response.text()).then(loadContent).catch((err) => cb(null, err));\n\t\t}\n\t}\n\tparseFile(cb, options = {}) {\n\t\tconst { getOnlyBasename } = options;\n\t\tconst basename = (path) => path.substring(path.lastIndexOf(\"/\") + 1);\n\t\tif (getOnlyBasename) {\n\t\t\tif (TiledParserFile.typeOfFile(this.file).isPath) this.file = basename(this.file);\n\t\t}\n\t\tthis._parseFile(this.file, \"map\", (map, err) => {\n\t\t\tlet hasError = false;\n\t\t\tif (err) return cb(null, err);\n\t\t\tif (map.tilesets) {\n\t\t\t\tconst parseTileset = [];\n\t\t\t\tconst finish = () => {\n\t\t\t\t\tloadAll++;\n\t\t\t\t\tif (loadAll == map.tilesets.length && !hasError) {\n\t\t\t\t\t\tmap.tilesets = parseTileset;\n\t\t\t\t\t\tcb(map);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tlet loadAll = 0;\n\t\t\t\tfor (let i = 0; i < map.tilesets.length; i++) {\n\t\t\t\t\tconst tileset = map.tilesets[i];\n\t\t\t\t\tif (!tileset.source || tileset.tiles || tileset.image || tileset.tile) {\n\t\t\t\t\t\tparseTileset[i] = tileset;\n\t\t\t\t\t\tfinish();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (getOnlyBasename) {\n\t\t\t\t\t\tif (TiledParserFile.typeOfFile(tileset.source).isPath) tileset.source = basename(tileset.source);\n\t\t\t\t\t}\n\t\t\t\t\tthis._parseFile(tileset.source, \"tileset\", (result, err) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\thasError = true;\n\t\t\t\t\t\t\treturn cb(null, err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseTileset[i] = {\n\t\t\t\t\t\t\t...result,\n\t\t\t\t\t\t\tfirstgid: tileset.firstgid\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfinish();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tparseFilePromise(options = {}) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.parseFile((ret, err) => {\n\t\t\t\tif (ret) resolve(ret);\n\t\t\t\telse reject(err);\n\t\t\t}, options);\n\t\t});\n\t}\n};\n//#endregion\n//#region src/classes/Map.ts\nvar bufferTilesets = {};\nvar MapClass = class extends TiledProperties {\n\tconstructor(map) {\n\t\tsuper(map ?? {});\n\t\tthis.tilesets = [];\n\t\tthis.layers = [];\n\t\tthis.tmpLayers = [];\n\t\tthis.tilesIndex = {};\n\t\tthis.allocateMemory = 0;\n\t\tthis.lowMemory = false;\n\t\tif (map) this.load(map);\n\t}\n\tload(map) {\n\t\tObject.assign(this, map);\n\t\tif (this.hasProperty(\"low-memory\")) this.lowMemory = this.getProperty(\"low-memory\", false);\n\t\tthis.tmpLayers = [];\n\t\tthis.mapTilesets();\n\t\tthis.mapLayers(this.layers);\n\t\tthis.layers = [...this.tmpLayers];\n\t\tReflect.deleteProperty(this, \"tmpLayers\");\n\t\tthis.setTilesIndex();\n\t\tthis.data = map;\n\t}\n\t/** \n\t* @title Width of the map in pixels\n\t* @prop {number} [widthPx]\n\t* @readonly\n\t* @memberof Map\n\t* @memberof RpgSceneMap\n\t* */\n\tget widthPx() {\n\t\treturn this.width * this.tilewidth;\n\t}\n\t/** \n\t* @title Height of the map in pixels\n\t* @prop {number} [heightPx]\n\t* @readonly\n\t* @memberof Map\n\t* @memberof RpgSceneMap\n\t* */\n\tget heightPx() {\n\t\treturn this.height * this.tileheight;\n\t}\n\t/** \n\t* @title The depth of the map in pixels (this is the height of a tile ;))\n\t* @prop {number} map.zTileHeight\n\t* @readonly\n\t* @memberof Map\n\t* @memberof RpgSceneMap\n\t* */\n\tget zTileHeight() {\n\t\treturn this.tileheight;\n\t}\n\t/**\n\t* Find a layer by name. Returns `undefined` is the layer is not found\n\t\n\t* @title Get Layer by name\n\t* @method map.getLayerByName(name)\n\t* @param {string} name layer name\n\t* @returns {LayerInfo | undefined}\n\t* @example\n\t* ```ts\n\t* const tiles = map.getLayerByName(0, 0)\n\t* ```\n\t* @memberof Map\n\t* @memberof RpgSceneMap\n\t*/\n\tgetLayerByName(name) {\n\t\treturn this.layers.find((layer) => layer.name == name);\n\t}\n\t/**\n\t* Get the tile index on the tileset\n\t* \n\t* @title Get index of tile\n\t* @method map.getTileIndex(x,y)\n\t* @param {number} x Position X\n\t* @param {number} x Position Y\n\t* @returns {number}\n\t* @memberof Map\n\t* @memberof RpgSceneMap\n\t*/\n\tgetTileIndex(x, y, [z] = [0]) {\n\t\treturn this.width * Math.floor((y - z) / this.tileheight) + Math.floor(x / this.tilewidth);\n\t}\n\tgetTilePosition(index) {\n\t\treturn {\n\t\t\ty: Math.floor(index / this.width) * this.tileheight,\n\t\t\tx: index % this.width * this.tilewidth\n\t\t};\n\t}\n\t/**\n\t* Find the point of origin (top left) of a tile. Of course, its position depends on the size of the tile\n\t\n\t* @title Get origin position of tile\n\t* @method map.getTileOriginPosition(x,y)\n\t* @param {number} x Position X\n\t* @param {number} x Position Y\n\t* @returns { {x: number, y: number }}\n\t* @example\n\t* ```ts\n\t* // If the size of a tile is 32x32px\n\t* const position = map.getTileOriginPosition(35, 12)\n\t* console.log(position) // { x: 32, y: 0 }\n\t* ```\n\t* @memberof Map\n\t* @memberof RpgSceneMap\n\t*/\n\tgetTileOriginPosition(x, y) {\n\t\treturn {\n\t\t\tx: Math.floor(x / this.tilewidth) * this.tilewidth,\n\t\t\ty: Math.floor(y / this.tileheight) * this.tileheight\n\t\t};\n\t}\n\t/**\n\t* Recover tiles according to a position\n\t\n\t* @title Get tile by position\n\t* @method map.getTileByPosition(x,y)\n\t* @param {number} x Position X\n\t* @param {number} x Position Y\n\t* @returns {TileInfo}\n\t* @example\n\t* ```ts\n\t* const tiles = map.getTileByPosition(0, 0)\n\t* ```\n\t* @memberof Map\n\t* @memberof RpgSceneMap\n\t*/\n\tgetTileByPosition(x, y, z = [0, 0], options = {}) {\n\t\tconst tileIndex = this.getTileIndex(x, y, [z[0]]);\n\t\treturn this.getTileByIndex(tileIndex, z, options);\n\t}\n\t/**\n\t* Retrieves tiles according to its index\n\t\n\t* @title Get tile by index\n\t* @method map.getTileByIndex(tileIndex)\n\t* @param {number} tileIndex tile index\n\t* @returns {TileInfo}\n\t* @example\n\t* ```ts\n\t* const index = map.getTileIndex(0, 0)\n\t* const tiles = map.getTileByIndex(index)\n\t* ```\n\t* @memberof Map\n\t* @memberof RpgSceneMap\n\t*/\n\tgetTileByIndex(tileIndex, zPlayer = [0, 0], options = { populateTiles: true }) {\n\t\tconst zA = Math.floor(zPlayer[0] / this.zTileHeight);\n\t\tMath.floor(zPlayer[1] / this.zTileHeight);\n\t\tconst level = this.tilesIndex[zA];\n\t\tconst obj = {\n\t\t\ttiles: [],\n\t\t\thasCollision: false,\n\t\t\tisOverlay: false,\n\t\t\tobjectGroups: [],\n\t\t\ttileIndex\n\t\t};\n\t\tif (!level) return obj;\n\t\tconst [layer] = this.layers;\n\t\tconst getTileByPointer = (pointer = 0) => {\n\t\t\tconst pos = tileIndex * this.realAllocateMemory + pointer;\n\t\t\tconst gid = level[pos];\n\t\t\tif (gid === 0) return obj;\n\t\t\tconst tile = layer.createTile(gid, tileIndex, level[pos + 1]);\n\t\t\tif (tile) obj.tiles.push(tile);\n\t\t};\n\t\tif (options.populateTiles) for (let i = 0; i < this.realAllocateMemory; i += 2) getTileByPointer(i);\n\t\telse getTileByPointer();\n\t\tconst [tile] = obj.tiles;\n\t\tif (tile) {\n\t\t\tobj.hasCollision = tile.getProperty(\"collision\", false);\n\t\t\tobj.objectGroups = tile.objects ?? [];\n\t\t}\n\t\treturn obj;\n\t}\n\tgetAllObjects() {\n\t\treturn this.layers.reduce((prev, current) => {\n\t\t\tif (!current.objects) return prev;\n\t\t\treturn prev.concat(...current.objects);\n\t\t}, []);\n\t}\n\tgetData() {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tlayers: this.layers\n\t\t};\n\t}\n\tsetTile(x, y, layerFilter, tileInfo) {\n\t\tif (this.lowMemory) throw \"Impossible to change a tile with the lowMemory option\";\n\t\tconst tileIndex = this.getTileIndex(x, y);\n\t\tlet fnFilter;\n\t\tlet tilesEdited = {};\n\t\tif (typeof layerFilter == \"string\") fnFilter = (layer) => layer.name == layerFilter;\n\t\telse fnFilter = layerFilter;\n\t\tfor (let i = 0; i < this.layers.length; i++) {\n\t\t\tconst layer = this.layers[i];\n\t\t\tif (!fnFilter(layer)) continue;\n\t\t\tlet tile;\n\t\t\tconst oldTile = this.getTileByIndex(tileIndex);\n\t\t\tif (tileInfo.gid) tile = layer.createTile(tileInfo.gid, tileIndex);\n\t\t\tif (!tile) continue;\n\t\t\tfor (let key in tileInfo) {\n\t\t\t\tif (key == \"gid\") continue;\n\t\t\t\ttile[key] = tileInfo[key];\n\t\t\t}\n\t\t\ttilesEdited[layer.name] = {\n\t\t\t\tgid: tile.gid,\n\t\t\t\tproperties: tile.properties\n\t\t\t};\n\t\t\tthis.setTileIndex(layer, oldTile.tiles[0], tile, tileIndex, i);\n\t\t\tlayer.setData(tileIndex, tile.gid);\n\t\t}\n\t\treturn {\n\t\t\tx,\n\t\t\ty,\n\t\t\ttiles: tilesEdited\n\t\t};\n\t}\n\tremoveCacheTileset(name) {\n\t\tdelete bufferTilesets[name];\n\t}\n\tclearCacheTilesets() {\n\t\tbufferTilesets = {};\n\t}\n\tmapTilesets() {\n\t\tthis.tilesets = this.tilesets.map((tileset) => {\n\t\t\tif (bufferTilesets[tileset.name]) {\n\t\t\t\tconst instance = bufferTilesets[tileset.name];\n\t\t\t\tinstance.firstgid = tileset.firstgid;\n\t\t\t\treturn instance;\n\t\t\t}\n\t\t\tconst _tileset = new Tileset(tileset);\n\t\t\tbufferTilesets[_tileset.name] = _tileset;\n\t\t\treturn _tileset;\n\t\t});\n\t}\n\tmapLayers(layers = [], parent) {\n\t\tfor (let layer of layers) {\n\t\t\tconst layerInstance = new Layer(layer, this.tilesets, parent);\n\t\t\tthis.tmpLayers.push(layerInstance);\n\t\t\tif (layer.layers) this.mapLayers(layer.layers, layerInstance);\n\t\t}\n\t\tif (this.lowMemory) this.allocateMemory = 1;\n\t\tif (!this.allocateMemory) this.allocateMemory = this.layers.length;\n\t}\n\tsetTileIndex(layer, oldTile, newTile, tileIndex, layerIndex) {\n\t\tconst startPos = tileIndex * this.realAllocateMemory;\n\t\tlet pointer = startPos + this.realAllocateMemory - 2;\n\t\tlet z = layer.getProperty(\"z\", 0) + oldTile.getProperty(\"z\", 0);\n\t\twhile (pointer >= startPos) {\n\t\t\tconst zlayer = this.tilesIndex[z];\n\t\t\tif (zlayer[pointer] === oldTile.gid && zlayer[pointer + 1] === layerIndex) this.tilesIndex[z][pointer] = newTile.gid;\n\t\t\tpointer -= 2;\n\t\t}\n\t}\n\t/**\n\t* We multiply by 2 because 2 entries are stored for a tile: its GID and the Layer Index\n\t* \n\t* Example If I have 3 layers, The array will have the following form \n\t* \n\t* [\n\t* GID of Layer 3, \n\t* Layer Index of Layer 3, \n\t* GID of Layer 2, \n\t* Layer Index of Layer 2, \n\t* GID of Layer 1, \n\t* Layer Index of Layer 1,\n\t* ... others tiles\n\t* ]\n\t* \n\t* The size in memory of the map is therefore:\n\t* \n\t* `(map width * map height * number of layers * 4) bytes`\n\t* \n\t* > We multiply by 4, because an element takes 2 bytes and has 2 elements for a tile is 4 bytes in all\n\t* \n\t* Example (a 100x100 map with 5 layers)\n\t* \n\t* `100 * 100 * 5 * 4 = 200000 bytes = ~195 Kb`\n\t* \n\t* If we define on lowMemory then the calculation is the following\n\t* \n\t* `(map width * map height * 4) bytes`\n\t* \n\t* Example\n\t* \n\t* `100 * 100 * 4 = 40000 bytes = ~39 Kb`\n\t*/\n\tget realAllocateMemory() {\n\t\treturn this.allocateMemory * 2;\n\t}\n\t/**\n\t* We keep each tile in memory classified by z value. The values are ordered from the end to the beginning so that the first element of the array (when retrieved with getTileByIndex() is the tile on the highest layer. This way, the tile search is very fast for collisions \n\t* \n\t*/\n\taddTileIndex(layer, tile, tileIndex, layerIndex) {\n\t\tif (!tile || tile && tile.gid == 0) return;\n\t\tlet z = layer.getProperty(\"z\", 0) + tile.getProperty(\"z\", 0);\n\t\tif (!this.tilesIndex[z]) {\n\t\t\tconst buffer = /* @__PURE__ */ new ArrayBuffer(layer.size * this.realAllocateMemory * 2);\n\t\t\tthis.tilesIndex[z] = new Uint16Array(buffer);\n\t\t}\n\t\tconst startPos = tileIndex * this.realAllocateMemory;\n\t\tlet pointer = startPos + this.realAllocateMemory - 2;\n\t\twhile (this.tilesIndex[z][pointer] !== 0 && pointer > startPos) pointer -= 2;\n\t\tthis.tilesIndex[z][pointer] = tile.gid;\n\t\tthis.tilesIndex[z][pointer + 1] = layerIndex;\n\t\tthis.tilesIndex[z][startPos] = tile.gid;\n\t\tthis.tilesIndex[z][startPos + 1] = layerIndex;\n\t}\n\tsetTilesIndex() {\n\t\tfor (let i = 0; i < this.layers.length; i++) {\n\t\t\tconst layer = this.layers[i];\n\t\t\tif (layer.type != TiledLayerType.Tile) continue;\n\t\t\tlayer.tilesForEach((tile, index) => {\n\t\t\t\tthis.addTileIndex(layer, tile, index, i);\n\t\t\t});\n\t\t}\n\t}\n};\n//#endregion\nexport { Layer, MapClass, Tile, TiledLayerType, TiledObjectClass, TiledParser, TiledParserFile, TiledProperties, Tileset, isTiledFormat };\n\n//# sourceMappingURL=index.js.map","const settings = {\n /** The default number of textures per tilemap in a tilemap composite. */\n TEXTURES_PER_TILEMAP: 16,\n /** The scaling mode of the combined texture tiling. */\n TEXTILE_SCALE_MODE: \"linear\",\n /** This will enable 32-bit index buffers. It's useful when you have more than 16K tiles. */\n use32bitIndex: false\n};\nconst Constant = settings;\n\nexport { Constant, settings };\n//# sourceMappingURL=settings.mjs.map\n","import { Geometry, Buffer, BufferUsage } from 'pixi.js';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nconst _TilemapGeometry = class _TilemapGeometry extends Geometry {\n constructor(indexBuffer) {\n const buf = new Buffer({\n data: new Float32Array(2),\n label: \"tilemap-buffer\",\n usage: BufferUsage.VERTEX | BufferUsage.COPY_DST,\n shrinkToFit: false\n });\n const stride = _TilemapGeometry.stride;\n super({\n indexBuffer,\n attributes: {\n aVertexPosition: {\n buffer: buf,\n format: \"float32x2\",\n stride,\n offset: 0\n // location: 6,\n },\n aTextureCoord: {\n buffer: buf,\n format: \"float32x2\",\n stride,\n offset: 2 * 4\n // location: 4,\n },\n aFrame: {\n buffer: buf,\n format: \"float32x4\",\n stride,\n offset: 4 * 4\n // location: 3,\n },\n aAnim: {\n buffer: buf,\n format: \"float32x2\",\n stride,\n offset: 8 * 4\n // location: 1,\n },\n aTextureId: {\n buffer: buf,\n format: \"sint32\",\n stride,\n offset: 10 * 4\n // location: 5\n },\n aAnimDivisor: {\n buffer: buf,\n format: \"float32\",\n stride,\n offset: 11 * 4\n // location: 2\n },\n aAlpha: {\n buffer: buf,\n format: \"float32\",\n stride,\n offset: 12 * 4\n // location: 0\n }\n }\n });\n __publicField(this, \"lastTimeAccess\", 0);\n __publicField(this, \"vertSize\", _TilemapGeometry.vertSize);\n __publicField(this, \"vertPerQuad\", _TilemapGeometry.vertPerQuad);\n __publicField(this, \"stride\", _TilemapGeometry.stride);\n __publicField(this, \"buf\");\n this.buf = buf;\n }\n};\n__publicField(_TilemapGeometry, \"vertSize\", 13);\n__publicField(_TilemapGeometry, \"vertPerQuad\", 4);\n__publicField(_TilemapGeometry, \"stride\", _TilemapGeometry.vertSize * 4);\nlet TilemapGeometry = _TilemapGeometry;\n\nexport { TilemapGeometry };\n//# sourceMappingURL=TilemapGeometry.mjs.map\n","import { ExtensionType, UniformGroup, Matrix, Buffer, BufferUsage, NOOP } from 'pixi.js';\nimport { settings } from './settings.mjs';\nimport { TilemapGeometry } from './TilemapGeometry.mjs';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nclass TilemapAdaptor {\n constructor() {\n __publicField(this, \"pipe_uniforms\", new UniformGroup({\n u_proj_trans: { value: new Matrix(), type: \"mat3x3<f32>\" },\n u_anim_frame: { value: new Float32Array(2), type: \"vec2<f32>\" }\n }));\n }\n}\nclass TilemapPipe {\n constructor(renderer, adaptor) {\n /** The managing renderer */\n __publicField(this, \"renderer\");\n /** The tile animation frame */\n __publicField(this, \"tileAnim\", [0, 0]);\n __publicField(this, \"ibLen\", 0);\n // index buffer length\n /** The index buffer for the tilemaps to share. */\n __publicField(this, \"indexBuffer\", null);\n /** The shader used to render tilemaps. */\n __publicField(this, \"shader\");\n __publicField(this, \"adaptor\");\n this.renderer = renderer;\n this.adaptor = adaptor;\n this.adaptor.init();\n this.indexBuffer = new Buffer({\n data: new Uint16Array([0, 1, 2, 0, 2, 3]),\n label: \"index-tilemap-buffer\",\n usage: BufferUsage.INDEX | BufferUsage.COPY_DST\n });\n this.indexBuffer.destroy = NOOP;\n this.checkIndexBuffer(2e3);\n }\n start() {\n }\n /**\n * @internal\n * @ignore\n */\n createVb() {\n const geom = new TilemapGeometry(this.indexBuffer);\n geom.lastTimeAccess = Date.now();\n return geom;\n }\n /** @return The {@link TilemapGeometry} shader that this rendering pipeline is using. */\n getShader() {\n return this.shader;\n }\n destroy() {\n this.shader = null;\n }\n // eslint-disable-next-line no-unused-vars\n checkIndexBuffer(size) {\n const totalIndices = size * 6;\n if (totalIndices <= this.ibLen) {\n return;\n }\n this.ibLen = totalIndices;\n this.indexBuffer.data = createIndicesForQuads(\n size,\n settings.use32bitIndex ? new Uint32Array(totalIndices) : new Uint16Array(totalIndices)\n );\n }\n destroyRenderable(_renderable) {\n _renderable.vb.destroy(true);\n _renderable.vb = null;\n }\n addRenderable(tilemap, instructionSet) {\n const batcher = this.renderer.renderPipes.batch;\n tilemap.updateBuffer(this);\n tilemap.checkValid();\n tilemap.getTileset().update();\n if (tilemap.is_valid) {\n batcher.break(instructionSet);\n instructionSet.add(tilemap._instruction);\n }\n }\n updateRenderable(tilemap, _instructionSet) {\n tilemap.updateBuffer(this);\n tilemap.getTileset().update();\n }\n validateRenderable(renderable) {\n return renderable.checkValid();\n }\n execute({ tilemap }) {\n if (!tilemap.isRenderable)\n return;\n tilemap.state.blendMode = tilemap.groupBlendMode;\n const { pipe_uniforms } = this.adaptor;\n const u_proj_trans = pipe_uniforms.uniforms.u_proj_trans;\n const u_global = this.renderer.globalUniforms._activeUniforms.at(-1).uniforms;\n let anim_frame = this.tileAnim;\n const { u_anim_frame } = pipe_uniforms.uniforms;\n u_global.uProjectionMatrix.copyTo(u_proj_trans).append(u_global.uWorldTransformMatrix).append(tilemap.worldTransform);\n if (tilemap.compositeParent) {\n anim_frame = tilemap.parent.tileAnim || anim_frame;\n }\n u_anim_frame[0] = anim_frame[0];\n u_anim_frame[1] = anim_frame[1];\n pipe_uniforms.update();\n this.adaptor.execute(this, tilemap);\n }\n}\n__publicField(TilemapPipe, \"extension\", {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes\n ],\n name: \"tilemap\"\n});\nfunction createIndicesForQuads(size, outBuffer) {\n const totalIndices = size * 6;\n if (outBuffer.length !== totalIndices) {\n throw new Error(`Out buffer length is incorrect, got ${outBuffer.length} and expected ${totalIndices}`);\n }\n for (let i = 0, j = 0; i < totalIndices; i += 6, j += 4) {\n outBuffer[i + 0] = j + 0;\n outBuffer[i + 1] = j + 1;\n outBuffer[i + 2] = j + 2;\n outBuffer[i + 3] = j + 0;\n outBuffer[i + 4] = j + 2;\n outBuffer[i + 5] = j + 3;\n }\n return outBuffer;\n}\n\nexport { TilemapAdaptor, TilemapPipe };\n//# sourceMappingURL=TilemapPipe.mjs.map\n","import { Buffer, BufferUsage, UniformGroup, Texture, BindGroup } from 'pixi.js';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nclass TileTextureArray {\n constructor(max_textures) {\n __publicField(this, \"max_textures\");\n __publicField(this, \"arr\", []);\n __publicField(this, \"count\", 0);\n __publicField(this, \"dirty\", false);\n __publicField(this, \"dirty_gpu\", false);\n __publicField(this, \"bind_group\", null);\n __publicField(this, \"bind_group_resources\", {});\n __publicField(this, \"tex_sizes\", null);\n __publicField(this, \"null_color\", new Float32Array([0, 0, 0, 0.5]));\n __publicField(this, \"tex_buf\", null);\n this.max_textures = max_textures;\n this.tex_sizes = new Float32Array(this.max_textures * 4 + 4);\n this.tex_buf = new Buffer({\n usage: BufferUsage.UNIFORM | BufferUsage.COPY_DST\n });\n }\n get length() {\n return this.count;\n }\n push(tex) {\n this.arr[this.count++] = tex;\n this.dirty = true;\n }\n at(ind) {\n return this.arr[ind];\n }\n update() {\n if (!this.dirty) {\n return;\n }\n this.dirty = false;\n this.dirty_gpu = true;\n const { tex_sizes, arr, count, max_textures, null_color } = this;\n for (let i = 0; i < count; i++) {\n const tex = arr[i];\n if (tex) {\n tex_sizes[i * 4] = tex.pixelWidth;\n tex_sizes[i * 4 + 1] = tex.pixelHeight;\n tex_sizes[i * 4 + 2] = 1 / tex.pixelWidth;\n tex_sizes[i * 4 + 3] = 1 / tex.pixelHeight;\n }\n }\n tex_sizes[max_textures * 4] = null_color[0];\n tex_sizes[max_textures * 4 + 1] = null_color[1];\n tex_sizes[max_textures * 4 + 2] = null_color[2];\n tex_sizes[max_textures * 4 + 3] = null_color[3];\n }\n markDirty() {\n this.dirty = true;\n }\n getBindGroup() {\n this.update();\n if (!this.dirty_gpu) {\n return this.bind_group;\n }\n const { bind_group_resources, max_textures, arr, count } = this;\n let bindIndex = 0;\n bind_group_resources[bindIndex++] = new UniformGroup({\n u_texture_size: {\n value: this.tex_sizes,\n type: \"vec4<f32>\",\n size: max_textures\n },\n u_null_color: {\n value: this.null_color,\n type: \"vec4<f32>\"\n }\n });\n for (let i = 0; i < max_textures; i++) {\n const texture = (i < count ? arr[i] : null) || Texture.EMPTY.source;\n bind_group_resources[bindIndex++] = texture.source;\n bind_group_resources[bindIndex++] = texture.style;\n }\n if (!this.bind_group) {\n this.bind_group = new BindGroup(bind_group_resources);\n }\n return this.bind_group;\n }\n static generate_gpu_textures(max_textures) {\n const src = [];\n src.push(`struct TextureArrayFields {`);\n src.push(` u_texture_size: array<vec4f, ${max_textures}>,`);\n src.push(` u_null_color: vec4f`);\n src.push(`}`);\n src.push(`@group(1) @binding(0) var<uniform> taf: TextureArrayFields;`);\n for (let i = 0; i < max_textures; i++) {\n src.push(`@group(1) @binding(${i * 2 + 1}) var u_texture_${i}: texture_2d<f32>;`);\n src.push(`@group(1) @binding(${i * 2 + 2}) var u_sampler_${i}: sampler;`);\n }\n src.push(\"fn sampleMultiTexture(texture_id: i32, uv: vec2f, dx: vec2f, dy: vec2f) -> vec4f {\");\n src.push(`switch texture_id {`);\n for (let i = 0; i < max_textures; i++) {\n src.push(` case ${i}: { return textureSampleGrad(u_texture_${i}, u_sampler_${i}, uv, dx, dy); }`);\n }\n src.push(` default: { return taf.u_null_color; }`);\n src.push(\"} }\");\n return src.join(\"\\n\");\n }\n static generate_gl_textures(max_textures) {\n const src = [];\n src.push(`uniform vec4 u_texture_size[${max_textures + 1}];`);\n src.push(`uniform sampler2D u_textures[${max_textures}];`);\n src.push(`uniform vec4 u_null_color;`);\n src.push(\"vec4 sampleMultiTexture(float texture_id, vec2 uv) {\");\n src.push(`if(texture_id < -0.5) return u_texture_size[${max_textures}];`);\n for (let i = 0; i < max_textures; i++) {\n src.push(`if(texture_id < ${i}.5) return texture(u_textures[${i}], uv * u_texture_size[${i}].zw);`);\n }\n src.push(`return u_texture_size[${max_textures}];`);\n src.push(\"}\");\n return src.join(\"\\n\");\n }\n static gl_gen_resources(max_textures) {\n const sampleValues = [];\n for (let i = 0; i < max_textures; i++) {\n sampleValues[i] = i;\n }\n const samplerSize = [];\n for (let i = 0; i < max_textures; i++) {\n samplerSize.push(2048);\n samplerSize.push(2048);\n samplerSize.push(1 / 2048);\n samplerSize.push(1 / 2048);\n }\n return {\n u_textures: {\n value: sampleValues,\n type: \"i32\",\n size: max_textures\n },\n u_texture_size: {\n value: samplerSize,\n type: \"vec4<f32>\",\n size: max_textures\n }\n };\n }\n}\n\nexport { TileTextureArray };\n//# sourceMappingURL=TileTextureArray.mjs.map\n","import { ExtensionType, Shader, GlProgram, UniformGroup } from 'pixi.js';\nimport { settings } from './settings.mjs';\nimport { TilemapAdaptor } from './TilemapPipe.mjs';\nimport { TileTextureArray } from './TileTextureArray.mjs';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nconst gl_tilemap_vertex = `\nin vec2 aVertexPosition;\nin vec2 aTextureCoord;\nin vec4 aFrame;\nin vec2 aAnim;\nin float aAnimDivisor;\nin float aTextureId;\nin float aAlpha;\n\nuniform mat3 u_proj_trans;\nuniform vec2 u_anim_frame;\n\nout vec2 vTextureCoord;\nout float vTextureId;\nout vec4 vFrame;\nout float vAlpha;\n\nvoid main(void)\n{\n gl_Position = vec4((u_proj_trans * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vec2 animCount = floor((aAnim + 0.5) / 2048.0);\n vec2 animFrameOffset = aAnim - animCount * 2048.0;\n vec2 currentFrame = floor(u_anim_frame / aAnimDivisor);\n vec2 loop_num = floor((currentFrame + 0.5) / animCount);\n vec2 animOffset = animFrameOffset * floor(currentFrame - loop_num * animCount);\n\n vTextureCoord = aTextureCoord + animOffset;\n vFrame = aFrame + vec4(animOffset, animOffset);\n vTextureId = aTextureId;\n vAlpha = aAlpha;\n}\n`;\nconst gl_tilemap_fragment = `\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\nin vec2 vTextureCoord;\nin vec4 vFrame;\nin float vTextureId;\nin float vAlpha;\n\n//include_textures\n\nvoid main(void)\n{\n float textureId = floor(vTextureId + 0.5);\n vec2 textureCoord = clamp(vTextureCoord, vFrame.xy, vFrame.zw);\n vec4 color = sampleMultiTexture(textureId, textureCoord);\n finalColor = color * vAlpha;\n}\n`;\nclass GlTilemapAdaptor extends TilemapAdaptor {\n constructor() {\n super(...arguments);\n __publicField(this, \"_shader\", null);\n __publicField(this, \"max_textures\", settings.TEXTURES_PER_TILEMAP);\n }\n destroy() {\n this._shader.destroy(true);\n this._shader = null;\n }\n execute(pipe, tilemap) {\n const renderer = pipe.renderer;\n const shader = this._shader;\n const tileset = tilemap.getTileset();\n const tu = shader.resources.texture_uniforms;\n if (tu.uniforms.u_texture_size !== tileset.tex_sizes) {\n tu.uniforms.u_texture_size = tileset.tex_sizes;\n tu.update();\n }\n for (let i = 0; i < tileset.length; i++) {\n renderer.texture.bind(tileset.arr[i], i);\n }\n renderer.encoder.draw({\n geometry: tilemap.vb,\n shader,\n state: tilemap.state,\n size: tilemap.rects_count * 6\n });\n }\n init() {\n this._shader = new Shader({\n glProgram: GlProgram.from({\n vertex: gl_tilemap_vertex,\n fragment: gl_tilemap_fragment.replace(\n \"//include_textures\",\n TileTextureArray.generate_gl_textures(this.max_textures)\n )\n }),\n resources: {\n texture_uniforms: new UniformGroup(TileTextureArray.gl_gen_resources(this.max_textures), { isStatic: true }),\n pipe_uniforms: this.pipe_uniforms.uniformStructures\n }\n });\n }\n}\n__publicField(GlTilemapAdaptor, \"extension\", {\n type: [\n ExtensionType.WebGLPipesAdaptor\n ],\n name: \"tilemap\"\n});\n\nexport { GlTilemapAdaptor };\n//# sourceMappingURL=gl_tilemap.mjs.map\n","import { ExtensionType, Shader, GpuProgram, BindGroup } from 'pixi.js';\nimport { settings } from './settings.mjs';\nimport { TilemapAdaptor } from './TilemapPipe.mjs';\nimport { TileTextureArray } from './TileTextureArray.mjs';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nconst gpu_tilemap_vertex = `\nstruct GlobalUniforms {\n uProjectionMatrix:mat3x3f,\n uWorldTransformMatrix:mat3x3f,\n uWorldColorAlpha: vec4f,\n uResolution: vec2f,\n}\n\nstruct TilemapUniforms {\n u_proj_trans:mat3x3f,\n u_anim_frame:vec2f\n}\n\n@group(0) @binding(0) var<uniform> globalUniforms : GlobalUniforms;\n@group(2) @binding(0) var<uniform> loc: TilemapUniforms;\n\nstruct VSOutput {\n @builtin(position) vPosition: vec4f,\n @location(0) @interpolate(flat) vTextureId : i32,\n @location(1) vTextureCoord : vec2f,\n @location(2) @interpolate(flat) vFrame : vec4f,\n @location(3) vAlpha : f32\n};\n\n@vertex\nfn mainVert(\n @location(6) aVertexPosition: vec2f,\n @location(4) aTextureCoord: vec2f,\n @location(3) aFrame: vec4f,\n @location(1) aAnim: vec2f,\n @location(2) aAnimDivisor: f32,\n @location(5) aTextureId: i32,\n @location(0) aAlpha: f32,\n ) -> VSOutput {\n\n var vPosition = vec4((loc.u_proj_trans * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n var animCount = floor((aAnim + 0.5) / 2048.0);\n var animFrameOffset = aAnim - animCount * 2048.0;\n var currentFrame = floor(loc.u_anim_frame / aAnimDivisor);\n var loop_num = floor((currentFrame + 0.5) / animCount);\n var animOffset = animFrameOffset * floor(currentFrame - loop_num * animCount);\n var vTextureCoord = aTextureCoord + animOffset;\n var vFrame = aFrame + vec4(animOffset, animOffset);\n\n return VSOutput(vPosition, aTextureId, vTextureCoord, vFrame, aAlpha);\n};\n`;\nconst gpu_tilemap_fragment = `\n//include_textures\n\n@fragment\nfn mainFrag(\n @location(0) @interpolate(flat) vTextureId : i32,\n @location(1) vTextureCoord : vec2f,\n @location(2) @interpolate(flat) vFrame : vec4f,\n @location(3) vAlpha : f32,\n ) -> @location(0) vec4f {\n var textureCoord = clamp(vTextureCoord, vFrame.xy, vFrame.zw);\n var uv = textureCoord * taf.u_texture_size[vTextureId].zw;\n var dx = dpdx(uv);\n var dy = dpdy(uv);\n var color = sampleMultiTexture(vTextureId, uv, dx, dy);\n return color * vAlpha;\n};\n`;\nclass GpuTilemapAdaptor extends TilemapAdaptor {\n constructor() {\n super(...arguments);\n __publicField(this, \"_shader\", null);\n __publicField(this, \"max_textures\", settings.TEXTURES_PER_TILEMAP);\n __publicField(this, \"bind_group\", null);\n }\n destroy() {\n this._shader.destroy(true);\n this._shader = null;\n }\n execute(pipe, tilemap) {\n const renderer = pipe.renderer;\n const shader = this._shader;\n shader.groups[0] = renderer.globalUniforms.bindGroup;\n shader.groups[1] = tilemap.getTileset().getBindGroup();\n shader.groups[2] = this.bind_group;\n renderer.encoder.draw({\n geometry: tilemap.vb,\n shader,\n state: tilemap.state,\n size: tilemap.rects_count * 6\n });\n }\n init() {\n this._shader = new Shader({\n gpuProgram: GpuProgram.from({\n vertex: { source: gpu_tilemap_vertex, entryPoint: \"mainVert\" },\n fragment: {\n source: gpu_tilemap_fragment.replace(\"//include_textures\", TileTextureArray.generate_gpu_textures(this.max_textures))\n }\n })\n });\n this.bind_group = new BindGroup({\n ut: this.pipe_uniforms\n });\n }\n}\n__publicField(GpuTilemapAdaptor, \"extension\", {\n type: [\n ExtensionType.WebGPUPipesAdaptor\n ],\n name: \"tilemap\"\n});\n\nexport { GpuTilemapAdaptor };\n//# sourceMappingURL=gpu_tilemap.mjs.map\n","import { ViewContainer, State, Bounds, TextureSource, Texture, groupD8 } from 'pixi.js';\nimport { settings } from './settings.mjs';\nimport { TileTextureArray } from './TileTextureArray.mjs';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nvar POINT_STRUCT = /* @__PURE__ */ ((POINT_STRUCT2) => {\n POINT_STRUCT2[POINT_STRUCT2[\"U\"] = 0] = \"U\";\n POINT_STRUCT2[POINT_STRUCT2[\"V\"] = 1] = \"V\";\n POINT_STRUCT2[POINT_STRUCT2[\"X\"] = 2] = \"X\";\n POINT_STRUCT2[POINT_STRUCT2[\"Y\"] = 3] = \"Y\";\n POINT_STRUCT2[POINT_STRUCT2[\"TILE_WIDTH\"] = 4] = \"TILE_WIDTH\";\n POINT_STRUCT2[POINT_STRUCT2[\"TILE_HEIGHT\"] = 5] = \"TILE_HEIGHT\";\n POINT_STRUCT2[POINT_STRUCT2[\"ROTATE\"] = 6] = \"ROTATE\";\n POINT_STRUCT2[POINT_STRUCT2[\"ANIM_X\"] = 7] = \"ANIM_X\";\n POINT_STRUCT2[POINT_STRUCT2[\"ANIM_Y\"] = 8] = \"ANIM_Y\";\n POINT_STRUCT2[POINT_STRUCT2[\"TEXTURE_INDEX\"] = 9] = \"TEXTURE_INDEX\";\n POINT_STRUCT2[POINT_STRUCT2[\"ANIM_COUNT_X\"] = 10] = \"ANIM_COUNT_X\";\n POINT_STRUCT2[POINT_STRUCT2[\"ANIM_COUNT_Y\"] = 11] = \"ANIM_COUNT_Y\";\n POINT_STRUCT2[POINT_STRUCT2[\"ANIM_DIVISOR\"] = 12] = \"ANIM_DIVISOR\";\n POINT_STRUCT2[POINT_STRUCT2[\"ALPHA\"] = 13] = \"ALPHA\";\n return POINT_STRUCT2;\n})(POINT_STRUCT || {});\nconst POINT_STRUCT_SIZE = Object.keys(POINT_STRUCT).length / 2;\nclass Tilemap extends ViewContainer {\n /**\n * @param tileset - The tileset to use for the tilemap. This can be reset later with {@link Tilemap.setTileset}. The\n * base-textures in this array must not be duplicated.\n */\n constructor(tileset) {\n super({});\n // TODO: make default color work\n /**\n * Currently doesnt work.\n */\n __publicField(this, \"shadowColor\", new Float32Array([0, 0, 0, 0.5]));\n __publicField(this, \"state\", State.for2d());\n __publicField(this, \"is_valid\", false);\n __publicField(this, \"renderPipeId\", \"tilemap\");\n __publicField(this, \"canBundle\", true);\n __publicField(this, \"_instruction\", {\n renderPipeId: \"tilemap\",\n tilemap: this\n });\n /**\n * The tile animation frame.\n *\n * @see CompositeTilemap.tileAnim\n */\n __publicField(this, \"tileAnim\", null);\n /**\n * This is the last uploaded size of the tilemap geometry.\n * @ignore\n */\n __publicField(this, \"rects_count\", 0);\n /** @ignore */\n __publicField(this, \"compositeParent\", false);\n /**\n * The list of base-textures being used in the tilemap.\n *\n * This should not be shuffled after tiles have been added into this tilemap. Usually, only tile textures\n * should be added after tiles have been added into the map.\n */\n __publicField(this, \"tileset\", new TileTextureArray(settings.TEXTURES_PER_TILEMAP));\n /**\n * The local bounds of the tilemap itself. This does not include DisplayObject children.\n */\n __publicField(this, \"tilemapBounds\", new Bounds());\n /** Flags whether any animated tile was added. */\n __publicField(this, \"hasAnimatedTile\", false);\n /** The interleaved geometry of the tilemap. */\n __publicField(this, \"pointsBuf\", []);\n __publicField(this, \"batched\");\n __publicField(this, \"vbId\", 0);\n __publicField(this, \"vb\", null);\n __publicField(this, \"vbBuffer\", null);\n __publicField(this, \"vbArray\", null);\n __publicField(this, \"vbInts\", null);\n this.setTileset(tileset);\n }\n /**\n * @internal\n * @ignore\n */\n checkValid() {\n const v = this.tileset.count > 0 && this.pointsBuf.length > 0;\n const res = this.is_valid !== v;\n this.is_valid = v;\n return res !== v;\n }\n updateBounds() {\n const bounds = this.tilemapBounds;\n this._bounds.minX = bounds.minX;\n this._bounds.maxX = bounds.maxX;\n this._bounds.minY = bounds.minY;\n this._bounds.maxY = bounds.maxY;\n }\n /**\n * @returns The tileset of this tilemap.\n */\n getTileset() {\n return this.tileset;\n }\n /**\n * Define the tileset used by the tilemap.\n *\n * @param textureOrArray - The list of textures to use in the tilemap. If a base-texture (not array) is passed, it will\n * be wrapped into an array. This should not contain any duplicates.\n */\n setTileset(textureOrArray = []) {\n let ts = this.tileset;\n if (textureOrArray instanceof TileTextureArray) {\n this.tileset = textureOrArray;\n this.didViewUpdate = true;\n } else if (textureOrArray instanceof TextureSource) {\n if (ts.count === 1 && ts.arr[0] === textureOrArray) {\n return this;\n }\n ts = this.tileset = new TileTextureArray(settings.TEXTURES_PER_TILEMAP);\n ts.push(textureOrArray);\n this.didViewUpdate = true;\n } else {\n if (textureOrArray.length === ts.count) {\n let flag = true;\n for (let i = 0; i < textureOrArray.length; i++) {\n if (textureOrArray[i]?.source !== ts.arr[i]) {\n flag = false;\n break;\n }\n }\n if (flag) {\n return this;\n }\n }\n ts = this.tileset = new TileTextureArray(settings.TEXTURES_PER_TILEMAP);\n for (let i = 0; i < textureOrArray.length; i++) {\n ts.push(textureOrArray[i]?.source);\n }\n this.didViewUpdate = true;\n }\n return this;\n }\n /** Clears all the tiles added into this tilemap. */\n clear() {\n this.pointsBuf.length = 0;\n this.rects_count = 0;\n this.tilemapBounds.clear();\n this.hasAnimatedTile = false;\n return this;\n }\n /**\n * Adds a tile that paints the given texture at (x, y).\n *\n * @param tileTexture - The tiling texture to render.\n * @param x - The local x-coordinate of the tile's position.\n * @param y - The local y-coordinate of the tile's position.\n * @param options - Additional tile options.\n * @param [options.u=texture.frame.x] - The x-coordinate of the texture in its base-texture's space.\n * @param [options.v=texture.frame.y] - The y-coordinate of the texture in its base-texture's space.\n * @param [options.tileWidth=texture.orig.width] - The local width of the tile.\n * @param [options.tileHeight=texture.orig.height] - The local height of the tile.\n * @param [options.animX=0] - For animated tiles, this is the \"offset\" along the x-axis for adjacent\n * animation frame textures in the base-texture.\n * @param [options.animY=0] - For animated tiles, this is the \"offset\" along the y-axis for adjacent\n * animation frames textures in the base-texture.\n * @param [options.rotate=0]\n * @param [options.animCountX=1024] - For animated tiles, this is the number of animation frame textures\n * per row.\n * @param [options.animCountY=1024] - For animated tiles, this is the number of animation frame textures\n * per column.\n * @param [options.animDivisor=1] - For animated tiles, this is the animation duration of each frame\n * @param [options.alpha=1] - Tile alpha\n * @return This tilemap, good for chaining.\n */\n tile(tileTexture, x, y, options = {}) {\n this.didViewUpdate = true;\n let baseTexture;\n let textureIndex = -1;\n let was_num = false;\n if (typeof tileTexture === \"number\") {\n textureIndex = tileTexture;\n was_num = true;\n baseTexture = this.tileset.arr[textureIndex];\n } else {\n let texture;\n if (typeof tileTexture === \"string\") {\n texture = Texture.from(tileTexture);\n } else {\n texture = tileTexture;\n }\n const textureList = this.tileset;\n for (let i = 0; i < textureList.count; i++) {\n if (textureList.arr[i] === texture.source) {\n textureIndex = i;\n break;\n }\n }\n if (\"frame\" in texture) {\n options.u = options.u ?? texture.frame.x;\n options.v = options.v ?? texture.frame.y;\n options.tileWidth = options.tileWidth ?? texture.orig.width;\n options.tileHeight = options.tileHeight ?? texture.orig.height;\n }\n baseTexture = texture.source;\n }\n if (!was_num && !baseTexture) {\n console.error(\"The tile texture was not found in the tilemap tileset.\");\n return this;\n }\n const {\n u = 0,\n v = 0,\n tileWidth = baseTexture.width,\n tileHeight = baseTexture.height,\n animX = 0,\n animY = 0,\n rotate = 0,\n animCountX = 1024,\n animCountY = 1024,\n animDivisor = 1,\n alpha = 1\n } = options;\n const pb = this.pointsBuf;\n this.hasAnimatedTile = this.hasAnimatedTile || animX > 0 || animY > 0;\n pb.push(u);\n pb.push(v);\n pb.push(x);\n pb.push(y);\n pb.push(tileWidth);\n pb.push(tileHeight);\n pb.push(rotate);\n pb.push(animX | 0);\n pb.push(animY | 0);\n pb.push(textureIndex);\n pb.push(animCountX);\n pb.push(animCountY);\n pb.push(animDivisor);\n pb.push(alpha);\n this.tilemapBounds.addFrame(x, y, x + tileWidth, y + tileHeight);\n return this;\n }\n /** Changes the rotation of the last tile. */\n tileRotate(rotate) {\n const pb = this.pointsBuf;\n pb[pb.length - (POINT_STRUCT_SIZE - 9 /* TEXTURE_INDEX */)] = rotate;\n }\n /** Changes the `animX`, `animCountX` of the last tile. */\n tileAnimX(offset, count) {\n const pb = this.pointsBuf;\n pb[pb.length - (POINT_STRUCT_SIZE - 7 /* ANIM_X */)] = offset;\n pb[pb.length - (POINT_STRUCT_SIZE - 10 /* ANIM_COUNT_X */)] = count;\n }\n /** Changes the `animY`, `animCountY` of the last tile. */\n tileAnimY(offset, count) {\n const pb = this.pointsBuf;\n pb[pb.length - (POINT_STRUCT_SIZE - 8 /* ANIM_Y */)] = offset;\n pb[pb.length - (POINT_STRUCT_SIZE - 11 /* ANIM_COUNT_Y */)] = count;\n }\n /** Changes the `animDivisor` value of the last tile. */\n tileAnimDivisor(divisor) {\n const pb = this.pointsBuf;\n pb[pb.length - (POINT_STRUCT_SIZE - 12 /* ANIM_DIVISOR */)] = divisor;\n }\n tileAlpha(alpha) {\n const pb = this.pointsBuf;\n pb[pb.length - (POINT_STRUCT_SIZE - 13 /* ALPHA */)] = alpha;\n }\n destroyVb() {\n if (this.vb) {\n this.vb.destroy();\n this.vb = null;\n }\n }\n updateBuffer(plugin) {\n const points = this.pointsBuf;\n const rects_count = points.length / POINT_STRUCT_SIZE;\n let vb = this.vb;\n if (this.tileset.count === 0 || rects_count === 0 || this.rects_count === rects_count && vb) {\n return;\n }\n this.rects_count = rects_count;\n if (!vb) {\n vb = plugin.createVb();\n this.vb = vb;\n this.vbId = vb.id;\n this.vbBuffer = null;\n }\n const vertices = rects_count * vb.vertPerQuad;\n plugin.checkIndexBuffer(rects_count);\n const vertexBuf = vb.getBuffer(\"aVertexPosition\");\n const vs = vb.stride * vertices;\n if (!this.vbBuffer || this.vbBuffer.byteLength < vs) {\n let bk = vb.stride;\n while (bk < vs) {\n bk *= 2;\n }\n this.vbBuffer = new ArrayBuffer(bk);\n this.vbArray = new Float32Array(this.vbBuffer);\n this.vbInts = new Uint32Array(this.vbBuffer);\n }\n const arr = this.vbArray;\n const ints = this.vbInts;\n let sz = 0;\n let textureId = 0;\n for (let i = 0; i < points.length; i += POINT_STRUCT_SIZE) {\n const eps = 0.5;\n if (this.compositeParent) {\n textureId = points[i + 9 /* TEXTURE_INDEX */];\n }\n const x = points[i + 2 /* X */];\n const y = points[i + 3 /* Y */];\n const w = points[i + 4 /* TILE_WIDTH */];\n const h = points[i + 5 /* TILE_HEIGHT */];\n const u = points[i + 0 /* U */];\n const v = points[i + 1 /* V */];\n let rotate = points[i + 6 /* ROTATE */];\n const animX = points[i + 7 /* ANIM_X */];\n const animY = points[i + 8 /* ANIM_Y */];\n const animWidth = points[i + 10 /* ANIM_COUNT_X */] || 1024;\n const animHeight = points[i + 11 /* ANIM_COUNT_Y */] || 1024;\n const animXEncoded = animX + animWidth * 2048;\n const animYEncoded = animY + animHeight * 2048;\n const animDivisor = points[i + 12 /* ANIM_DIVISOR */];\n const alpha = points[i + 13 /* ALPHA */];\n let u0;\n let v0;\n let u1;\n let v1;\n let u2;\n let v2;\n let u3;\n let v3;\n if (rotate === 0) {\n u0 = u;\n v0 = v;\n u1 = u + w;\n v1 = v;\n u2 = u + w;\n v2 = v + h;\n u3 = u;\n v3 = v + h;\n } else {\n let w2 = w / 2;\n let h2 = h / 2;\n if (rotate % 4 !== 0) {\n w2 = h / 2;\n h2 = w / 2;\n }\n const cX = u + w2;\n const cY = v + h2;\n rotate = groupD8.add(rotate, groupD8.NW);\n u0 = cX + w2 * groupD8.uX(rotate);\n v0 = cY + h2 * groupD8.uY(rotate);\n rotate = groupD8.add(rotate, 2);\n u1 = cX + w2 * groupD8.uX(rotate);\n v1 = cY + h2 * groupD8.uY(rotate);\n rotate = groupD8.add(rotate, 2);\n u2 = cX + w2 * groupD8.uX(rotate);\n v2 = cY + h2 * groupD8.uY(rotate);\n rotate = groupD8.add(rotate, 2);\n u3 = cX + w2 * groupD8.uX(rotate);\n v3 = cY + h2 * groupD8.uY(rotate);\n }\n arr[sz++] = x;\n arr[sz++] = y;\n arr[sz++] = u0;\n arr[sz++] = v0;\n arr[sz++] = u + eps;\n arr[sz++] = v + eps;\n arr[sz++] = u + w - eps;\n arr[sz++] = v + h - eps;\n arr[sz++] = animXEncoded;\n arr[sz++] = animYEncoded;\n ints[sz++] = textureId;\n arr[sz++] = animDivisor;\n arr[sz++] = alpha;\n arr[sz++] = x + w;\n arr[sz++] = y;\n arr[sz++] = u1;\n arr[sz++] = v1;\n arr[sz++] = u + eps;\n arr[sz++] = v + eps;\n arr[sz++] = u + w - eps;\n arr[sz++] = v + h - eps;\n arr[sz++] = animXEncoded;\n arr[sz++] = animYEncoded;\n ints[sz++] = textureId;\n arr[sz++] = animDivisor;\n arr[sz++] = alpha;\n arr[sz++] = x + w;\n arr[sz++] = y + h;\n arr[sz++] = u2;\n arr[sz++] = v2;\n arr[sz++] = u + eps;\n arr[sz++] = v + eps;\n arr[sz++] = u + w - eps;\n arr[sz++] = v + h - eps;\n arr[sz++] = animXEncoded;\n arr[sz++] = animYEncoded;\n ints[sz++] = textureId;\n arr[sz++] = animDivisor;\n arr[sz++] = alpha;\n arr[sz++] = x;\n arr[sz++] = y + h;\n arr[sz++] = u3;\n arr[sz++] = v3;\n arr[sz++] = u + eps;\n arr[sz++] = v + eps;\n arr[sz++] = u + w - eps;\n arr[sz++] = v + h - eps;\n arr[sz++] = animXEncoded;\n arr[sz++] = animYEncoded;\n ints[sz++] = textureId;\n arr[sz++] = animDivisor;\n arr[sz++] = alpha;\n }\n vertexBuf.data = arr;\n }\n /**\n * @internal\n * @ignore\n */\n isModified(anim) {\n if (this.rects_count * POINT_STRUCT_SIZE !== this.pointsBuf.length || anim && this.hasAnimatedTile) {\n return true;\n }\n return false;\n }\n /**\n * This will pull forward the modification marker.\n *\n * @internal\n * @ignore\n */\n clearModify() {\n this.rects_count = this.pointsBuf.length / POINT_STRUCT_SIZE;\n }\n addBounds(bounds) {\n const _bounds = this.tilemapBounds;\n bounds.addFrame(_bounds.minX, _bounds.minY, _bounds.maxX, _bounds.maxY);\n }\n get bounds() {\n return this.tilemapBounds;\n }\n /** @override */\n destroy(options) {\n super.destroy(options);\n this.destroyVb();\n }\n /**\n * Deprecated signature for {@link Tilemap.tile tile}.\n *\n * @deprecated Since @pixi/tilemap 3.\n */\n addFrame(texture, x, y, animX, animY) {\n this.tile(\n texture,\n x,\n y,\n {\n animX,\n animY\n }\n );\n return true;\n }\n /**\n * Deprecated signature for {@link Tilemap.tile tile}.\n *\n * @deprecated Since @pixi/tilemap 3.\n */\n // eslint-disable-next-line max-params\n addRect(textureIndex, u, v, x, y, tileWidth, tileHeight, animX = 0, animY = 0, rotate = 0, animCountX = 1024, animCountY = 1024, animDivisor = 1, alpha = 1) {\n return this.tile(\n textureIndex,\n x,\n y,\n {\n u,\n v,\n tileWidth,\n tileHeight,\n animX,\n animY,\n rotate,\n animCountX,\n animCountY,\n animDivisor,\n alpha\n }\n );\n }\n}\n\nexport { POINT_STRUCT_SIZE, Tilemap };\n//# sourceMappingURL=Tilemap.mjs.map\n","import { Container, Texture } from 'pixi.js';\nimport { settings } from './settings.mjs';\nimport { Tilemap } from './Tilemap.mjs';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nclass CompositeTilemap extends Container {\n // private shadowColor = new Float32Array([0.0, 0.0, 0.0, 0.5]);\n /**\n * @param tileset - A list of tile base-textures that will be used to eagerly initialized the layered\n * tilemaps. This is only an performance optimization, and using {@link CompositeTilemap.tile tile}\n * will work equivalently.\n */\n constructor(tileset) {\n super();\n /** The hard limit on the number of tile textures used in each tilemap. */\n __publicField(this, \"texturesPerTilemap\");\n /**\n * The animation frame vector.\n *\n * Animated tiles have four parameters - `animX`, `animY`, `animCountX`, `animCountY`. The textures\n * of adjacent animation frames are at offset `animX` or `animY` of each other, with `animCountX` per\n * row and `animCountY` per column.\n *\n * The animation frame vector specifies which animation frame texture to use. If the x/y coordinate is\n * larger than the `animCountX` or `animCountY` for a specific tile, the modulus is taken.\n */\n __publicField(this, \"tileAnim\", null);\n /** The last modified tilemap. */\n __publicField(this, \"lastModifiedTilemap\", null);\n __publicField(this, \"modificationMarker\", 0);\n /**\n * Alias for {@link CompositeTilemap.tileset tileset}.\n *\n * @deprecated Since @pixi/tilemap 3.\n */\n __publicField(this, \"setBitmaps\", this.tileset);\n this.texturesPerTilemap = settings.TEXTURES_PER_TILEMAP;\n this.tileset(tileset);\n }\n /**\n * This will preinitialize the tilesets of the layered tilemaps.\n *\n * If used after a tilemap has been created (or a tile added), this will overwrite the tile textures of the\n * existing tilemaps. Passing the tileset to the constructor instead is the best practice.\n *\n * @param tileTextures - The list of tile textures that make up the tileset.\n */\n tileset(tileTextures) {\n if (!tileTextures) {\n tileTextures = [];\n }\n const texPerChild = this.texturesPerTilemap;\n const len1 = this.children.length;\n const len2 = Math.ceil(tileTextures.length / texPerChild);\n for (let i = 0; i < Math.min(len1, len2); i++) {\n this.children[i].setTileset(\n tileTextures.slice(i * texPerChild, (i + 1) * texPerChild)\n );\n }\n for (let i = len1; i < len2; i++) {\n const tilemap = new Tilemap(tileTextures.slice(i * texPerChild, (i + 1) * texPerChild));\n tilemap.compositeParent = true;\n this.addChild(tilemap);\n }\n return this;\n }\n /** Clears the tilemap composite. */\n clear() {\n for (let i = 0; i < this.children.length; i++) {\n this.children[i].clear();\n }\n this.modificationMarker = 0;\n return this;\n }\n /** Changes the rotation of the last added tile. */\n tileRotate(rotate) {\n if (this.lastModifiedTilemap) {\n this.lastModifiedTilemap.tileRotate(rotate);\n }\n return this;\n }\n /** Changes `animX`, `animCountX` of the last added tile. */\n tileAnimX(offset, count) {\n if (this.lastModifiedTilemap) {\n this.lastModifiedTilemap.tileAnimX(offset, count);\n }\n return this;\n }\n /** Changes `animY`, `animCountY` of the last added tile. */\n tileAnimY(offset, count) {\n if (this.lastModifiedTilemap) {\n this.lastModifiedTilemap.tileAnimY(offset, count);\n }\n return this;\n }\n /** Changes `tileAnimDivisor` value of the last added tile. */\n tileAnimDivisor(divisor) {\n if (this.lastModifiedTilemap) {\n this.lastModifiedTilemap.tileAnimDivisor(divisor);\n }\n return this;\n }\n /**\n * Adds a tile that paints the given tile texture at (x, y).\n *\n * @param tileTexture - The tile texture. You can pass an index into the composite tilemap as well.\n * @param x - The local x-coordinate of the tile's location.\n * @param y - The local y-coordinate of the tile's location.\n * @param options - Additional options to pass to {@link Tilemap.tile}.\n * @param [options.u=texture.frame.x] - The x-coordinate of the texture in its base-texture's space.\n * @param [options.v=texture.frame.y] - The y-coordinate of the texture in its base-texture's space.\n * @param [options.tileWidth=texture.orig.width] - The local width of the tile.\n * @param [options.tileHeight=texture.orig.height] - The local height of the tile.\n * @param [options.animX=0] - For animated tiles, this is the \"offset\" along the x-axis for adjacent\n * animation frame textures in the base-texture.\n * @param [options.animY=0] - For animated tiles, this is the \"offset\" along the y-axis for adjacent\n * animation frames textures in the base-texture.\n * @param [options.rotate=0]\n * @param [options.animCountX=1024] - For animated tiles, this is the number of animation frame textures\n * per row.\n * @param [options.animCountY=1024] - For animated tiles, this is the number of animation frame textures\n * per column.\n * @param [options.animDivisor=1] - For animated tiles, this is the animation duration each frame\n * @param [options.alpha=1] - Tile alpha\n * @return This tilemap, good for chaining.\n */\n tile(tileTexture, x, y, options = {}) {\n let tilemap = null;\n const children = this.children;\n this.lastModifiedTilemap = null;\n if (typeof tileTexture === \"number\") {\n const childIndex = tileTexture / this.texturesPerTilemap >> 0;\n let tileIndex = 0;\n tilemap = children[childIndex];\n if (!tilemap) {\n tilemap = children[0];\n if (!tilemap)\n return this;\n tileIndex = 0;\n } else {\n tileIndex = tileTexture % this.texturesPerTilemap;\n }\n tilemap.tile(\n tileIndex,\n x,\n y,\n options\n );\n } else {\n if (typeof tileTexture === \"string\") {\n tileTexture = Texture.from(tileTexture);\n }\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const tex = child.getTileset().arr;\n for (let j = 0; j < tex.length; j++) {\n if (tex[j] === tileTexture.source) {\n tilemap = child;\n break;\n }\n }\n if (tilemap) {\n break;\n }\n }\n if (!tilemap) {\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (child.getTileset().count < this.texturesPerTilemap) {\n tilemap = child;\n child.getTileset().push(tileTexture.source);\n break;\n }\n }\n if (!tilemap) {\n tilemap = new Tilemap(tileTexture.source);\n tilemap.compositeParent = true;\n this.addChild(tilemap);\n }\n }\n tilemap.tile(\n tileTexture,\n x,\n y,\n options\n );\n }\n this.lastModifiedTilemap = tilemap;\n return this;\n }\n /**\n * @internal\n * @ignore\n */\n isModified(anim) {\n const layers = this.children;\n if (this.modificationMarker !== layers.length) {\n return true;\n }\n for (let i = 0; i < layers.length; i++) {\n if (layers[i].isModified(anim)) {\n return true;\n }\n }\n return false;\n }\n /**\n * @internal\n * @ignore\n */\n clearModify() {\n const layers = this.children;\n this.modificationMarker = layers.length;\n for (let i = 0; i < layers.length; i++) {\n layers[i].clearModify();\n }\n }\n /**\n * @deprecated Since @pixi/tilemap 3.\n * @see CompositeTilemap.tile\n */\n addFrame(texture, x, y, animX, animY, animWidth, animHeight, animDivisor, alpha) {\n return this.tile(\n texture,\n x,\n y,\n {\n animX,\n animY,\n animCountX: animWidth,\n animCountY: animHeight,\n animDivisor,\n alpha\n }\n );\n }\n /**\n * @deprecated @pixi/tilemap 3\n * @see CompositeTilemap.tile\n */\n // eslint-disable-next-line max-params\n addRect(textureIndex, u, v, x, y, tileWidth, tileHeight, animX, animY, rotate, animWidth, animHeight) {\n const childIndex = textureIndex / this.texturesPerTilemap >> 0;\n const textureId = textureIndex % this.texturesPerTilemap;\n if (this.children[childIndex] && this.children[childIndex].getTileset().count > 0) {\n this.lastModifiedTilemap = this.children[childIndex];\n this.lastModifiedTilemap.addRect(\n textureId,\n u,\n v,\n x,\n y,\n tileWidth,\n tileHeight,\n animX,\n animY,\n rotate,\n animWidth,\n animHeight\n );\n } else {\n this.lastModifiedTilemap = null;\n }\n return this;\n }\n /**\n * @deprecated Since @pixi/tilemap 3.\n * @readonly\n * @see CompositeTilemap.texturesPerTilemap\n */\n get texPerChild() {\n return this.texturesPerTilemap;\n }\n}\n\nexport { CompositeTilemap };\n//# sourceMappingURL=CompositeTilemap.mjs.map\n","import { extensions } from 'pixi.js';\nimport { GlTilemapAdaptor } from './gl_tilemap.mjs';\nimport { GpuTilemapAdaptor } from './gpu_tilemap.mjs';\nimport { TilemapPipe } from './TilemapPipe.mjs';\nexport { TilemapAdaptor } from './TilemapPipe.mjs';\nexport { CompositeTilemap } from './CompositeTilemap.mjs';\nexport { Constant, settings } from './settings.mjs';\nexport { POINT_STRUCT_SIZE, Tilemap } from './Tilemap.mjs';\nexport { TilemapGeometry } from './TilemapGeometry.mjs';\n\nextensions.add(TilemapPipe);\nextensions.add(GlTilemapAdaptor);\nextensions.add(GpuTilemapAdaptor);\n\nexport { TilemapPipe };\n//# sourceMappingURL=index.mjs.map\n","import { CompositeTilemap } from \"@pixi/tilemap\";\nimport { Tile as TiledTileClass } from '@rpgjs/tiled';\nimport { AnimatedSprite, Texture, groupD8 } from \"pixi.js\";\nimport { TileSet } from \"./TileSet\";\n\nexport class Tile extends AnimatedSprite {\n static getTextures(tile: TiledTileClass, tileSet: TileSet) {\n const textures: Texture[] = [];\n\n if (tile.animations && tile.animations.length) {\n tile.animations.forEach(frame => {\n textures.push(tileSet.textures[frame.tileid])\n });\n } else {\n textures.push(tileSet.textures[tile.gid - tileSet.firstgid])\n }\n\n return textures;\n }\n\n animations: { tileid: number, duration: number }[] = []\n _x: number = 0\n _y: number = 0\n pointsBufIndex: number\n properties: any = {}\n\n constructor(\n private tile: TiledTileClass,\n private tileSet: TileSet\n ) {\n super(Tile.getTextures(tile, tileSet));\n this.animations = tile.animations || []\n this.properties = tile.properties\n this.textures = Tile.getTextures(tile, tileSet)\n this.texture = this.textures[0] as Texture\n this.flip()\n }\n\n get z() {\n return this.properties.z ?? 0\n }\n\n get gid() {\n return this.tile.gid\n }\n\n setAnimation(frame: CompositeTilemap) {\n const size = this.animations.length\n if (size > 1) {\n const offset = (this.animations[1].tileid - this.animations[0].tileid) * this.width\n frame.tileAnimX(offset, size)\n }\n }\n\n flip() {\n let symmetry\n let i = 0\n const add = (symmetrySecond) => {\n i++\n if (symmetry) symmetry = groupD8.add(symmetry, symmetrySecond)\n else symmetry = symmetrySecond\n }\n\n if (this.tile.horizontalFlip) {\n add(groupD8.MIRROR_HORIZONTAL)\n }\n\n if (this.tile.verticalFlip) {\n add(groupD8.MIRROR_VERTICAL)\n }\n\n if (this.tile.diagonalFlip) {\n if (i % 2 == 0) {\n add(groupD8.MAIN_DIAGONAL)\n }\n else {\n add(groupD8.REVERSE_DIAGONAL)\n }\n }\n\n //if (symmetry) this.texture.rotate = symmetry\n }\n}","import {\n CompositeTilemap,\n POINT_STRUCT_SIZE,\n Tilemap,\n settings,\n} from \"@canvasengine/tilemap\";\nimport { Layer, Tile as TileClass } from \"@canvasengine/tiled\";\nimport {\n createComponent,\n registerComponent,\n DisplayObject,\n Signal,\n} from \"canvasengine\";\nimport { Tile } from \"./Tile\";\nimport { TileSet } from \"./TileSet\";\nimport { Subscription } from \"rxjs\";\n\nsettings.use32bitIndex = true;\n\nexport class CanvasTileLayer extends DisplayObject(CompositeTilemap) {\n private _tiles: any = {};\n tiles: (TileClass | null)[];\n private _layer: any; // TODO: fix this, remove any. replace with Layer\n private frameTile: number = 0;\n private frameRateAnimation: number = 10;\n private subscriptionTick: Subscription;\n\n static findTileSet(gid: number, tileSets: TileSet[]) {\n let tileset: TileSet | undefined;\n for (let i = tileSets.length - 1; i >= 0; i--) {\n tileset = tileSets[i];\n if (tileset.firstgid && tileset.firstgid <= gid) {\n break;\n }\n }\n return tileset;\n }\n\n /** @internal */\n createTile(x: number, y: number, options: any = {}): Tile | undefined {\n const { real, filter } = options;\n const { tilewidth, tileheight, width } = this._layer;\n if (real) {\n x = Math.floor(x / tilewidth);\n y = Math.floor(y / tileheight);\n }\n const i = x + y * width;\n const tiledTile = this._layer.getTileByIndex(i);\n\n if (!tiledTile || (tiledTile && tiledTile.gid == 0)) return;\n\n const tileset = CanvasTileLayer.findTileSet(tiledTile.gid, this.tileSets);\n\n if (!tileset) return;\n\n const tile = new Tile(tiledTile, tileset);\n\n tile.x = x * tilewidth;\n tile.y = y * tileheight + (tileheight - tile.texture.height);\n\n tile._x = x;\n tile._y = y;\n\n if (tileset.tileoffset) {\n tile.x += tileset.tileoffset.x ?? 0;\n tile.y += tileset.tileoffset.y ?? 0;\n }\n\n if (filter) {\n const ret = filter(tile);\n if (!ret) return;\n }\n\n return tile;\n }\n\n private _addFrame(tile: Tile, x: number, y: number) {\n const frame = this.tile(tile.texture, tile.x, tile.y, {\n rotate: tile.texture.rotate,\n });\n // const pb = this.pointsBuf\n // if (!pb) return null\n // tile.pointsBufIndex = pb.length - POINT_STRUCT_SIZE\n tile.setAnimation(frame);\n this._tiles[x + \";\" + y] = tile;\n }\n\n async onMount(args) {\n const { props } = args;\n\n this.tileSets = props.tilesets;\n this._layer = new Layer(\n {\n ...props,\n },\n this.tileSets\n );\n\n const tick: Signal = props.context.tick;\n\n this.subscriptionTick = tick.observable.subscribe(({ value }) => {\n if (value.frame % this.frameRateAnimation == 0) {\n this.tileAnim = [this.frameTile, this.frameTile];\n this.frameTile++\n }\n });\n\n super.onMount(args);\n }\n\n onUpdate(props) {\n super.onUpdate(props);\n if (!this.isMounted) return;\n if (props.tileheight) this._layer.tileheight = props.tileheight;\n if (props.tilewidth) this._layer.tilewidth = props.tilewidth;\n if (props.width) this._layer.width = props.width;\n if (props.height) this._layer.height = props.height;\n if (props.parallaxX) this._layer.parallaxX = props.parallaxx;\n if (props.parallaxY) this._layer.parallaxY = props.parallaxy;\n\n this.removeChildren();\n\n for (let y = 0; y < this._layer.height; y++) {\n for (let x = 0; x < this._layer.width; x++) {\n const tile = this.createTile(x, y);\n if (tile) {\n this._addFrame(tile, x, y);\n }\n }\n }\n }\n\n async onDestroy(parent: any) {\n this.subscriptionTick.unsubscribe();\n await super.onDestroy(parent);\n }\n}\n\n// @ts-ignore\nexport interface CanvasTileLayer extends CompositeTilemap {}\n\nregisterComponent(\"CompositeTileLayer\", CanvasTileLayer);\n\nexport function CompositeTileLayer(props) {\n return createComponent(\"CompositeTileLayer\", props);\n}\n","import { TiledTileset, Tileset as TiledTilesetClass } from \"@canvasengine/tiled\";\nimport { Assets, Rectangle, Texture } from \"pixi.js\";\n\nexport class TileSet extends TiledTilesetClass {\n public textures: Texture[] = [];\n private tileGroups = {};\n\n constructor(tileSet: TiledTileset) {\n super(tileSet);\n }\n\n loadGroup() {\n // for (let tile of this.tileset.tiles) {\n // }\n }\n\n /** @internal */\n async load(image: string) {\n const texture = await Assets.load(image);\n for (\n let y = this.margin;\n y < this.image.height;\n y += this.tileheight + this.spacing\n ) {\n for (\n let x = this.margin;\n x < this.image.width;\n x += this.tilewidth + this.spacing\n ) {\n this.textures.push(\n new Texture({\n source: texture.source,\n frame: new Rectangle(+x, +y, +this.tilewidth, +this.tileheight),\n })\n );\n }\n }\n this.loadGroup();\n return this;\n }\n}\n","import { TiledLayer, TiledLayerType, TiledMap, TiledParserFile, TiledTileset } from \"@canvasengine/tiled\"\nimport { loop, h, Container, TilingSprite, useProps, effect, signal } from \"canvasengine\"\nimport { CompositeTileLayer } from \"./TileLayer\"\nimport { TileSet } from \"./TileSet\"\n\n/**\n * Reorganizes tile layers based on the z property of tiles\n * \n * This function analyzes each tile in the layer data and groups them by their z property.\n * If a tile has a z property different from 0, it creates new layers for each z value.\n * \n * @param {TiledLayer[]} originalLayers - The original layers from the tilemap\n * @param {TileSet[]} tilesets - Array of loaded tilesets\n * @param {TiledMap} mapData - The complete map data\n * @returns {TiledLayer[]} - Reorganized layers with tiles grouped by z property\n * \n * @example\n * ```typescript\n * const reorganizedLayers = reorganizeLayersByTileZ(mapData.layers, tilesets, mapData);\n * ```\n */\nfunction reorganizeLayersByTileZ(originalLayers: TiledLayer[], tilesets: TileSet[], mapData: TiledMap): TiledLayer[] {\n const reorganizedLayers: TiledLayer[] = [];\n \n for (const layer of originalLayers) {\n if (layer.type !== TiledLayerType.Tile) {\n // Keep non-tile layers as they are\n reorganizedLayers.push(layer);\n continue;\n }\n\n // Group tiles by their z property\n const layersByZ = new Map<number, number[]>();\n \n // Initialize empty arrays for all z values we'll find\n // Don't pre-populate with original data anymore\n \n // Ensure layer data is number array\n let layerData: number[];\n if (Array.isArray(layer.data)) {\n layerData = layer.data.map(gid => {\n if (typeof gid === 'number') {\n return gid;\n } else {\n return parseInt(String(gid), 10);\n }\n });\n } else {\n // If data is a string, it might be compressed - for now, skip this layer\n reorganizedLayers.push(layer);\n continue;\n }\n \n let tilesProcessed = 0;\n let tilesWithZ = 0;\n \n // Analyze each tile in the layer\n for (let i = 0; i < layerData.length; i++) {\n const gid = layerData[i];\n \n if (gid === 0) continue; // Empty tile\n \n tilesProcessed++;\n \n // Find the corresponding tileset\n let tileset: TileSet | undefined;\n for (let j = tilesets.length - 1; j >= 0; j--) {\n if (tilesets[j].firstgid && tilesets[j].firstgid <= gid) {\n tileset = tilesets[j];\n break;\n }\n }\n \n if (!tileset) {\n // If no tileset found, put tile in z=0 layer\n if (!layersByZ.has(0)) {\n layersByZ.set(0, new Array(layerData.length).fill(0));\n }\n layersByZ.get(0)![i] = gid;\n continue;\n }\n \n // Get tile properties from tileset\n const localTileId = gid - tileset.firstgid;\n // @ts-ignore\n const tileProperties = tileset.tileset.tiles?.[localTileId]?.properties;\n const zValue = tileProperties?.z ?? 0;\n \n // Count tiles with explicit z property\n if (tileProperties?.z !== undefined) {\n tilesWithZ++;\n }\n \n // Create or get the layer for this z value\n if (!layersByZ.has(zValue)) {\n layersByZ.set(zValue, new Array(layerData.length).fill(0));\n }\n \n // Place tile in the appropriate z layer\n layersByZ.get(zValue)![i] = gid;\n }\n \n // Create layers for each z value, ensuring z=0 comes first\n const sortedZValues = Array.from(layersByZ.keys()).sort((a, b) => a - b);\n \n for (const zValue of sortedZValues) {\n const layerDataForZ = layersByZ.get(zValue)!;\n \n // Only create layer if it has tiles\n if (layerDataForZ.some(gid => gid !== 0)) {\n const newLayer = {\n ...layer,\n name: `${layer.name}_z${zValue}`, // Always add _z suffix\n data: layerDataForZ,\n properties: {\n ...layer.properties,\n z: zValue\n }\n };\n \n reorganizedLayers.push(newLayer);\n }\n }\n }\n \n // Sort final layers to ensure z=0 layers come first, then by z value\n reorganizedLayers.sort((a, b) => {\n const zA = a.properties?.z ?? 0.5;\n const zB = b.properties?.z ?? 0.5;\n return zA - zB;\n });\n \n return reorganizedLayers;\n}\n\nexport function TiledMap(props) {\n const { map, basePath, createLayersPerTilesZ } = useProps(props, {\n createLayersPerTilesZ: false,\n basePath: ''\n })\n const layers = signal<TiledLayer[]>([])\n const objectLayer = props.objectLayer\n let tilesets: TileSet[] = []\n let mapData: TiledMap = {} as TiledMap\n\n const parseTmx = async (file: string, basePath: string = '') => {\n if (typeof file !== 'string') {\n return file\n }\n // @ts-ignore\n const parser = new TiledParserFile(\n file,\n {\n basePath\n }\n )\n const data = await parser.parseFilePromise({\n getOnlyBasename: false\n })\n\n return data\n }\n\n effect(async () => {\n const _map = map()\n if (_map) {\n mapData = await parseTmx(_map, basePath())\n tilesets = [] // Reset tilesets array\n for (let tileSet of mapData.tilesets) {\n // @ts-ignore\n if (tileSet.tile) tileSet.tiles = tileSet.tile\n if (!tileSet.tiles) tileSet.tiles = []\n tilesets.push(await new TileSet(tileSet).load(tileSet.image.source))\n }\n \n // Reorganize layers by tile z property if enabled\n let finalLayers = mapData.layers;\n if (createLayersPerTilesZ()) {\n finalLayers = reorganizeLayersByTileZ(mapData.layers, tilesets, mapData);\n }\n \n layers.set(finalLayers)\n }\n })\n\n const createLayer = (layers, props = {}) => {\n return h(Container, props, loop<any>(layers, (layer) => {\n switch (layer.type) {\n case TiledLayerType.Tile:\n return h(CompositeTileLayer, {\n tilewidth: mapData.tilewidth,\n tileheight: mapData.tileheight,\n // @ts-ignore\n width: mapData.width,\n // @ts-ignore\n height: mapData.height,\n ...layer,\n tilesets\n })\n case TiledLayerType.Image:\n const { width, height, source } = layer.image\n return h(TilingSprite, {\n image: source,\n ...layer,\n width: layer.repeatx ? layer.width * layer.tilewidth : width,\n height: layer.repeaty ? layer.height * layer.tileheight : height\n })\n case TiledLayerType.Group:\n return createLayer(signal(layer.layers), layer)\n case TiledLayerType.ObjectGroup:\n const child = objectLayer?.(layer)\n return h(Container, layer, child)\n default:\n return h(Container)\n }\n }))\n }\n\n return h(Container, props, createLayer(layers))\n}","import { GlProgram } from \"pixi.js\";\n\n/**\n * Creates a performant snow shader program.\n * Optimized with early exits, capped loop count, and LOD based on resolution.\n */\nexport function createSnowShader(): GlProgram {\n const vertexSrc = /* glsl */ `\n precision mediump float;\n in vec2 aPosition;\n in vec2 aUV;\n out vec2 vUV;\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform mat3 uTransformMatrix;\n void main(void) {\n vUV = aUV;\n mat3 modelViewProjectionMatrix = uProjectionMatrix * uWorldTransformMatrix * uTransformMatrix;\n gl_Position = vec4((modelViewProjectionMatrix * vec3(aPosition, 1.0)).xy, 0.0, 1.0);\n }\n `;\n\n const fragmentSrc = /* glsl */ `\n precision mediump float;\n in vec2 vUV;\n out vec4 finalColor;\n\n uniform float uTime;\n uniform vec2 uResolution;\n uniform float uSnowSpeed;\n uniform float uWindDirection;\n uniform float uWindStrength;\n uniform float uSnowDensity;\n uniform float uMaxFlakes;\n\n float hash(vec2 p) {\n return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);\n }\n\n vec2 hash2(vec2 p) {\n return vec2(\n hash(p),\n hash(p + 19.19)\n );\n }\n\n float snowLayer(\n vec2 uv,\n float t,\n float scale,\n float speed,\n float wind,\n float density,\n float sizeMin,\n float sizeMax\n ) {\n vec2 p = uv;\n p.x -= wind * t;\n p.y -= t * speed;\n\n p *= scale;\n vec2 cell = floor(p);\n vec2 f = fract(p);\n\n float rnd = hash(cell);\n if (rnd > density) {\n return 0.0;\n }\n\n vec2 jitter = hash2(cell + 3.7);\n float wobble = (hash(cell + 9.1) - 0.5) * 0.3;\n vec2 center = jitter;\n center.x += sin(t * 0.7 + jitter.y * 6.283) * 0.15 + wobble;\n center.y += cos(t * 0.5 + jitter.x * 6.283) * 0.12;\n\n float size = mix(sizeMin, sizeMax, rnd);\n float dist = length(f - center);\n float alpha = 1.0 - smoothstep(size * 0.4, size, dist);\n float twinkle = 0.7 + 0.3 * sin(t * 1.2 + rnd * 6.283);\n return alpha * twinkle;\n }\n\n void main() {\n vec2 safeResolution = max(uResolution, vec2(1.0));\n vec2 uv = vUV;\n float aspect = safeResolution.x / safeResolution.y;\n uv.x *= aspect;\n\n float pixelCount = safeResolution.x * safeResolution.y;\n float resolutionFactor = clamp(pixelCount / 900000.0, 0.6, 1.1);\n\n float densityFactor = clamp(uSnowDensity / 180.0, 0.25, 1.3);\n float maxFlakeFactor = clamp(uMaxFlakes / 90.0, 0.4, 1.1);\n float density = clamp(densityFactor * maxFlakeFactor * resolutionFactor, 0.08, 1.0);\n\n float wind = uWindDirection * uWindStrength * 0.45;\n float speed = uSnowSpeed * 0.9 + 0.15;\n\n float snow = 0.0;\n snow += snowLayer(uv, uTime, 18.0, speed * 0.5, wind * 0.6, density, 0.1, 0.22) * 0.65;\n snow += snowLayer(uv, uTime, 28.0, speed * 0.75, wind * 0.9, density * 0.9, 0.075, 0.16) * 0.8;\n snow += snowLayer(uv, uTime, 40.0, speed, wind, density * 0.75, 0.05, 0.12);\n\n float heightFade = mix(0.7, 1.0, uv.y);\n snow *= heightFade;\n\n vec3 snowColor = vec3(0.92, 0.95, 1.0);\n float alpha = clamp(snow * 1.1, 0.0, 0.92);\n finalColor = vec4(snowColor * alpha, alpha);\n }\n `;\n\n return new GlProgram({ vertex: vertexSrc, fragment: fragmentSrc });\n}\n","import { GlProgram } from \"pixi.js\";\n\nexport function createFogShader(): GlProgram {\n const vertexSrc = /* glsl */ `\n precision mediump float;\n in vec2 aPosition;\n in vec2 aUV;\n out vec2 vUV;\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform mat3 uTransformMatrix;\n void main(void) {\n vUV = aUV;\n mat3 modelViewProjectionMatrix = uProjectionMatrix * uWorldTransformMatrix * uTransformMatrix;\n gl_Position = vec4((modelViewProjectionMatrix * vec3(aPosition, 1.0)).xy, 0.0, 1.0);\n }\n `;\n\n const fragmentSrc = /* glsl */ `\n precision mediump float;\n in vec2 vUV;\n out vec4 finalColor;\n\n uniform float uTime;\n uniform vec2 uResolution;\n uniform float uSpeed;\n uniform float uScale;\n uniform float uDensity;\n uniform float uHeight;\n uniform vec2 uViewportOrigin;\n\n float hash(vec2 p) {\n return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);\n }\n\n float noise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n float a = hash(i);\n float b = hash(i + vec2(1.0, 0.0));\n float c = hash(i + vec2(0.0, 1.0));\n float d = hash(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;\n }\n\n float fbm(vec2 p) {\n float value = 0.0;\n float amp = 0.5;\n value += amp * noise(p);\n p = p * 2.03 + vec2(17.13, 9.37);\n amp *= 0.55;\n value += amp * noise(p);\n p = p * 2.01 + vec2(31.71, 4.23);\n amp *= 0.55;\n value += amp * noise(p);\n p = p * 2.02 + vec2(15.41, 27.19);\n amp *= 0.55;\n value += amp * noise(p);\n return value;\n }\n\n void main() {\n vec2 safeResolution = max(uResolution, vec2(1.0));\n vec2 rawUv = vUV;\n vec2 uv = rawUv;\n float aspect = safeResolution.x / safeResolution.y;\n uv.x *= aspect;\n vec2 viewportShift = vec2(\n (uViewportOrigin.x / safeResolution.x) * aspect,\n uViewportOrigin.y / safeResolution.y\n );\n vec2 worldUv = uv + viewportShift;\n\n float normalizedDensity = uDensity;\n if (normalizedDensity > 4.0) {\n normalizedDensity = normalizedDensity / 120.0;\n }\n float density = clamp(normalizedDensity, 0.0, 2.4);\n float scale = clamp(uScale, 0.25, 4.0);\n float speed = max(uSpeed * 8.0, 0.18);\n\n vec2 driftA = vec2(uTime * 0.06 * speed, uTime * 0.02 * speed);\n vec2 driftB = vec2(-uTime * 0.042 * speed, uTime * 0.016 * speed);\n vec2 wobble = vec2(\n sin(uTime * 0.23 * speed + worldUv.y * 4.0) * 0.03,\n cos(uTime * 0.17 * speed + worldUv.x * 3.2) * 0.018\n );\n vec2 flowUv = worldUv + wobble;\n\n float layerA = fbm(flowUv * scale + driftA);\n float layerB = fbm(flowUv * (scale * 1.7) + driftB);\n float layerC = fbm(vec2(flowUv.x * 0.75, flowUv.y * 1.35) * (scale * 1.2) + vec2(driftA.x * 0.6, -driftA.y * 0.8));\n\n float wisps = smoothstep(0.2, 0.82, layerA);\n float detail = smoothstep(0.28, 0.9, layerB);\n float fogPattern = clamp(wisps * 0.55 + detail * 0.3 + layerC * 0.35, 0.0, 1.2);\n\n float heightControl = clamp(uHeight, 0.0, 1.0);\n float fullScreen = step(0.99, heightControl);\n float groundFog = pow(clamp(rawUv.y, 0.0, 1.0), 0.42);\n float heightFactor = mix(groundFog, 1.0, heightControl);\n heightFactor = mix(heightFactor, 1.0, fullScreen);\n\n float breathing = 0.9 + 0.1 * sin(uTime * 0.25 * speed);\n float fog = fogPattern * density * heightFactor * breathing;\n float alpha = clamp(fog * 0.82, 0.0, 0.82);\n\n vec3 baseColor = vec3(0.84, 0.88, 0.94);\n vec3 brightColor = vec3(0.95, 0.97, 1.0);\n vec3 fogColor = mix(baseColor, brightColor, detail * 0.45);\n finalColor = vec4(fogColor * alpha, alpha);\n }\n `;\n\n return new GlProgram({\n vertex: vertexSrc,\n fragment: fragmentSrc\n });\n}\n\nexport function createCloudShader(): GlProgram {\n const vertexSrc = /* glsl */ `\n precision mediump float;\n in vec2 aPosition;\n in vec2 aUV;\n out vec2 vUV;\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform mat3 uTransformMatrix;\n void main(void) {\n vUV = aUV;\n mat3 modelViewProjectionMatrix = uProjectionMatrix * uWorldTransformMatrix * uTransformMatrix;\n gl_Position = vec4((modelViewProjectionMatrix * vec3(aPosition, 1.0)).xy, 0.0, 1.0);\n }\n `;\n\n const fragmentSrc = /* glsl */ `\n precision mediump float;\n in vec2 vUV;\n out vec4 finalColor;\n\n uniform float uTime;\n uniform vec2 uResolution;\n uniform float uSpeed;\n uniform float uScale;\n uniform float uDensity;\n uniform float uHeight;\n uniform vec2 uViewportOrigin;\n uniform float uSunIntensity;\n uniform vec2 uSunDirection;\n uniform float uRaySpread;\n uniform float uRayTwinkle;\n uniform float uRayTwinkleSpeed;\n\n float hash(vec2 p) {\n return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);\n }\n\n float noise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n float a = hash(i);\n float b = hash(i + vec2(1.0, 0.0));\n float c = hash(i + vec2(0.0, 1.0));\n float d = hash(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;\n }\n\n float fbm(vec2 p) {\n float v = 0.0;\n float a = 0.7;\n v += a * noise(p);\n p *= 2.1;\n a *= 0.5;\n v += a * noise(p + 17.0);\n p *= 2.2;\n a *= 0.5;\n v += a * noise(p + 29.0);\n return v;\n }\n\n void main() {\n vec2 safeResolution = max(uResolution, vec2(1.0));\n vec2 uv = vUV;\n float aspect = safeResolution.x / safeResolution.y;\n uv.x *= aspect;\n vec2 viewportShift = vec2(\n (uViewportOrigin.x / safeResolution.x) * aspect,\n uViewportOrigin.y / safeResolution.y\n );\n vec2 worldUv = uv + viewportShift;\n\n float normalizedDensity = uDensity;\n if (normalizedDensity > 4.0) {\n normalizedDensity = normalizedDensity / 100.0;\n }\n float density = clamp(normalizedDensity, 0.0, 2.0);\n float scale = clamp(uScale, 0.2, 4.0);\n float speed = max(uSpeed * 6.0, 0.12);\n vec2 driftMain = vec2(uTime * 0.04 * speed, uTime * 0.012 * speed);\n vec2 driftDetail = vec2(-uTime * 0.028 * speed, uTime * 0.01 * speed);\n vec2 wobble = vec2(\n sin(uTime * 0.18 * speed + worldUv.y * 4.8) * 0.035,\n cos(uTime * 0.16 * speed + worldUv.x * 3.7) * 0.02\n );\n vec2 flowUv = worldUv + wobble;\n\n float cloudNoise = fbm(flowUv * scale + driftMain);\n float detailNoise = fbm(flowUv * (scale * 2.4) + driftDetail);\n\n float shape = smoothstep(0.4, 0.93, cloudNoise);\n float detail = smoothstep(0.36, 0.9, detailNoise);\n float puff = shape * (0.55 + 0.45 * detail);\n\n float heightControl = clamp(uHeight, 0.0, 1.0);\n float fullScreen = step(0.99, heightControl);\n float skyHeight = pow(clamp(1.0 - vUV.y, 0.0, 1.0), 0.68);\n float heightFactor = mix(skyHeight, 1.0, heightControl);\n heightFactor = mix(heightFactor, 1.0, fullScreen);\n float cloud = puff * density * 0.72 * heightFactor;\n float cloudAlpha = clamp(cloud, 0.0, 0.68);\n\n vec2 sunDir = uSunDirection;\n if (length(sunDir) < 0.0001) {\n sunDir = vec2(0.55, 1.0);\n }\n sunDir = normalize(sunDir);\n vec2 rayUv = worldUv;\n float spread = clamp(uRaySpread, 0.35, 2.5);\n float rayCoord = dot(rayUv, sunDir) * (6.5 / spread);\n float rayNoise = fbm(vec2(rayCoord, rayUv.y * 0.55));\n float shafts = smoothstep(0.5, 0.9, rayNoise);\n float skyFade = pow(clamp(1.0 - vUV.y, 0.0, 1.0), 1.25);\n float cloudGap = clamp(1.0 - cloudAlpha * 1.05, 0.0, 1.0);\n float twinkleAmount = clamp(uRayTwinkle, 0.0, 1.5);\n float twinkleSpeed = max(uRayTwinkleSpeed, 0.01);\n float twinklePulse = 0.5 + 0.5 * sin(uTime * 1.9 * twinkleSpeed + rayCoord * 1.8);\n float twinkleNoise = fbm(vec2(rayCoord * 1.35 + 13.7, uTime * 0.1 * twinkleSpeed));\n float twinkle = mix(\n 1.0,\n clamp(0.7 + 0.35 * twinklePulse + 0.25 * twinkleNoise, 0.35, 1.55),\n twinkleAmount\n );\n float rayAlpha = shafts * skyFade * cloudGap * clamp(uSunIntensity, 0.0, 2.0) * twinkle * 0.58;\n\n vec3 cloudDark = vec3(0.82, 0.87, 0.94);\n vec3 cloudBright = vec3(0.98, 0.99, 1.0);\n vec3 cloudColor = mix(cloudDark, cloudBright, detail * 0.55);\n vec3 rayColor = vec3(1.0, 0.95, 0.8);\n\n float totalAlpha = cloudAlpha + rayAlpha;\n float alpha = clamp(totalAlpha, 0.0, 0.86);\n vec3 premulColor = cloudColor * cloudAlpha + rayColor * rayAlpha;\n if (totalAlpha > 0.0001) {\n premulColor *= (alpha / totalAlpha);\n }\n finalColor = vec4(premulColor, alpha);\n }\n `;\n\n return new GlProgram({\n vertex: vertexSrc,\n fragment: fragmentSrc\n });\n}\n","import {\n Container,\n createComponent,\n DisplayObject,\n tick,\n useProps,\n h,\n Mesh,\n registerComponent,\n signal,\n mount,\n effect as watchEffect,\n} from \"canvasengine\";\nimport {\n Container as PixiContainer,\n Geometry,\n Graphics as PixiGraphics,\n Shader,\n TilingSprite as PixiTilingSprite,\n Texture,\n UniformGroup,\n} from \"pixi.js\";\nimport { createSnowShader } from \"./snow\";\nimport { createFogShader, createCloudShader } from \"./fog\";\n\nconst rainTextures = new Map<number, Texture>();\n\nconst resolveValue = (value: any) => (typeof value === \"function\" ? value() : value);\n\ntype RainSplash = {\n x: number;\n y: number;\n age: number;\n life: number;\n radius: number;\n delay: number;\n};\n\nfunction seededRandom(seed: number) {\n let value = seed * 9301 + 49297;\n return () => {\n value = (value * 9301 + 49297) % 233280;\n return value / 233280;\n };\n}\n\nfunction createRainTexture(seed = 1): Texture {\n if (rainTextures.has(seed)) return rainTextures.get(seed)!;\n if (typeof document === \"undefined\") return Texture.WHITE;\n\n const random = seededRandom(seed);\n const canvas = document.createElement(\"canvas\");\n canvas.width = 192;\n canvas.height = 192;\n const context = canvas.getContext(\"2d\");\n if (!context) return Texture.WHITE;\n\n context.clearRect(0, 0, canvas.width, canvas.height);\n context.lineCap = \"round\";\n\n for (let i = 0; i < 62; i++) {\n const x = random() * canvas.width;\n const y = random() * canvas.height;\n const length = 18 + random() * 24;\n const slant = 4 + random() * 8;\n const alpha = 0.2 + random() * 0.22;\n const lineWidth = random() > 0.76 ? 1.9 : 1.15;\n const gradient = context.createLinearGradient(x, y, x + slant, y + length);\n\n gradient.addColorStop(0, \"rgba(220,235,255,0)\");\n gradient.addColorStop(0.28, `rgba(220,235,255,${alpha})`);\n gradient.addColorStop(0.72, `rgba(235,245,255,${alpha * 0.86})`);\n gradient.addColorStop(1, \"rgba(220,235,255,0)\");\n\n context.strokeStyle = gradient;\n context.lineWidth = lineWidth;\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x + slant, y + length);\n context.stroke();\n }\n\n const texture = Texture.from(canvas);\n rainTextures.set(seed, texture);\n return texture;\n}\n\nclass RainTextureLayer extends DisplayObject(PixiTilingSprite) {\n private tickSubscription: any;\n private widthInput = 1000;\n private heightInput = 1000;\n private speedInput = 1;\n private windInput = 0;\n private windStrengthInput = 0;\n private fallScaleInput = 1;\n private densityInput = 120;\n private maxDropsInput = 80;\n private topDownInput = true;\n private topDownTileScale = { x: 1, y: 1 };\n private sideTileScale = { x: 1, y: 1 };\n private topDownAlpha = 0.5;\n private sideAlpha = 0.4;\n private offsetX = 0;\n private offsetY = 0;\n\n onUpdate(props: any) {\n super.onUpdate(props);\n if (props.texture) this.texture = props.texture;\n if (props.topDownTileScale) this.topDownTileScale = props.topDownTileScale;\n if (props.sideTileScale) this.sideTileScale = props.sideTileScale;\n if (props.topDownAlpha !== undefined) this.topDownAlpha = props.topDownAlpha;\n if (props.sideAlpha !== undefined) this.sideAlpha = props.sideAlpha;\n if (props.startX !== undefined) this.offsetX = props.startX;\n if (props.startY !== undefined) this.offsetY = props.startY;\n if (props.speed !== undefined) this.speedInput = props.speed;\n if (props.windDirection !== undefined) this.windInput = props.windDirection;\n if (props.windStrength !== undefined) this.windStrengthInput = props.windStrength;\n if (props.fallScale !== undefined) this.fallScaleInput = props.fallScale;\n if (props.density !== undefined) this.densityInput = props.density;\n if (props.maxDrops !== undefined) this.maxDropsInput = props.maxDrops;\n if (props.topDown !== undefined) this.topDownInput = props.topDown;\n if (props.width !== undefined) {\n this.widthInput = props.width;\n this.width = Number(resolveValue(props.width)) || this.width;\n }\n if (props.height !== undefined) {\n this.heightInput = props.height;\n this.height = Number(resolveValue(props.height)) || this.height;\n }\n }\n\n async onMount(element: any, index?: number) {\n await super.onMount(element, index);\n this.widthInput = element.propObservables?.width ?? element.props.width ?? this.widthInput;\n this.heightInput = element.propObservables?.height ?? element.props.height ?? this.heightInput;\n this.speedInput = element.propObservables?.speed ?? element.props.speed ?? this.speedInput;\n this.windInput = element.propObservables?.windDirection ?? element.props.windDirection ?? this.windInput;\n this.windStrengthInput = element.propObservables?.windStrength ?? element.props.windStrength ?? this.windStrengthInput;\n this.densityInput = element.propObservables?.density ?? element.props.density ?? this.densityInput;\n this.maxDropsInput = element.propObservables?.maxDrops ?? element.props.maxDrops ?? this.maxDropsInput;\n this.topDownInput = element.propObservables?.topDown ?? element.props.topDown ?? this.topDownInput;\n this.tickSubscription = element.props.context?.tick?.observable?.subscribe(({ value }: any) => {\n const delta = Math.min(value?.deltaTime ?? 16.67, 50) / 16.67;\n const speed = Number(resolveValue(this.speedInput)) || 0;\n const windDirection = Number(resolveValue(this.windInput)) || 0;\n const windStrength = Number(resolveValue(this.windStrengthInput)) || 0;\n const fallScale = Number(resolveValue(this.fallScaleInput)) || 1;\n const density = Number(resolveValue(this.densityInput)) || 120;\n const maxDrops = Number(resolveValue(this.maxDropsInput)) || 80;\n const topDown = resolveValue(this.topDownInput) !== false && resolveValue(this.topDownInput) !== 0;\n const width = Number(resolveValue(this.widthInput)) || this.width;\n const height = Number(resolveValue(this.heightInput)) || this.height;\n const dropFactor = Math.min(Math.max(maxDrops / 100, 0.45), 1.65);\n const intensity = Math.min(Math.max((density / 180) * dropFactor, 0.35), 1.55);\n const tileScale = topDown ? this.topDownTileScale : this.sideTileScale;\n const fall = (7.2 + speed * 4.8) * fallScale * delta;\n const drift = windDirection * windStrength * 3.8 * delta;\n\n this.width = width;\n this.height = height;\n this.alpha = (topDown ? this.topDownAlpha : this.sideAlpha) * intensity;\n this.tileScale.set(tileScale.x, tileScale.y);\n this.offsetX += drift + fall * 0.12;\n this.offsetY += fall;\n this.tilePosition.set(this.offsetX, this.offsetY);\n });\n }\n\n async onDestroy(parent: any, afterDestroy: any) {\n this.tickSubscription?.unsubscribe?.();\n await super.onDestroy(parent, afterDestroy);\n }\n}\n\nregisterComponent(\"RainTextureLayer\", RainTextureLayer);\n\nconst RainLayer = (props: any) => createComponent(\"RainTextureLayer\", props);\n\nclass RainImpactLayer extends DisplayObject(PixiContainer) {\n private tickSubscription: any;\n private graphics = new PixiGraphics();\n private widthInput = 1000;\n private heightInput = 1000;\n private speedInput = 1;\n private densityInput = 120;\n private maxDropsInput = 80;\n private topDownInput = true;\n private windInput = 0;\n private windStrengthInput = 0;\n private lastTopDown: boolean | null = null;\n private splashes: RainSplash[] = [];\n\n onUpdate(props: any) {\n super.onUpdate(props);\n if (props.width !== undefined) {\n this.widthInput = props.width;\n this.width = Number(resolveValue(props.width)) || this.width;\n }\n if (props.height !== undefined) {\n this.heightInput = props.height;\n this.height = Number(resolveValue(props.height)) || this.height;\n }\n if (props.speed !== undefined) this.speedInput = props.speed;\n if (props.density !== undefined) this.densityInput = props.density;\n if (props.maxDrops !== undefined) this.maxDropsInput = props.maxDrops;\n if (props.topDown !== undefined) this.topDownInput = props.topDown;\n if (props.windDirection !== undefined) this.windInput = props.windDirection;\n if (props.windStrength !== undefined) this.windStrengthInput = props.windStrength;\n }\n\n async onMount(element: any, index?: number) {\n await super.onMount(element, index);\n this.addChild(this.graphics);\n this.widthInput = element.propObservables?.width ?? element.props.width ?? this.widthInput;\n this.heightInput = element.propObservables?.height ?? element.props.height ?? this.heightInput;\n this.speedInput = element.propObservables?.speed ?? element.props.speed ?? this.speedInput;\n this.densityInput = element.propObservables?.density ?? element.props.density ?? this.densityInput;\n this.maxDropsInput = element.propObservables?.maxDrops ?? element.props.maxDrops ?? this.maxDropsInput;\n this.topDownInput = element.propObservables?.topDown ?? element.props.topDown ?? this.topDownInput;\n this.windInput = element.propObservables?.windDirection ?? element.props.windDirection ?? this.windInput;\n this.windStrengthInput = element.propObservables?.windStrength ?? element.props.windStrength ?? this.windStrengthInput;\n\n this.tickSubscription = element.props.context?.tick?.observable?.subscribe(({ value }: any) => {\n const delta = Math.min(value?.deltaTime ?? 16.67, 50) / 16.67;\n this.drawImpacts(delta);\n });\n }\n\n private numberValue(input: any, fallback: number) {\n const value = Number(resolveValue(input));\n return Number.isFinite(value) && value > 0 ? value : fallback;\n }\n\n private booleanValue(input: any) {\n const value = resolveValue(input);\n return value !== false && value !== 0;\n }\n\n private resetSplash(splash: RainSplash, width: number, height: number, topDown: boolean, warm = false) {\n splash.x = Math.random() * width;\n splash.y = topDown\n ? height * (0.12 + Math.random() * 0.78)\n : height * (0.78 + Math.random() * 0.12);\n splash.life = 0.24 + Math.random() * 0.22;\n splash.radius = topDown ? 2.2 + Math.random() * 3.2 : 3.4 + Math.random() * 4.4;\n splash.delay = 0.12 + Math.random() * 0.55;\n splash.age = warm ? Math.random() * splash.life : -Math.random() * splash.delay;\n }\n\n private ensureSplashCount(count: number, width: number, height: number, topDown: boolean) {\n while (this.splashes.length < count) {\n const splash = { x: 0, y: 0, age: 0, life: 0.35, radius: 3, delay: 0.25 };\n this.resetSplash(splash, width, height, topDown, true);\n this.splashes.push(splash);\n }\n if (this.splashes.length > count) {\n this.splashes.length = count;\n }\n }\n\n private drawImpacts(delta: number) {\n const width = this.numberValue(this.widthInput, 1000);\n const height = this.numberValue(this.heightInput, 1000);\n const speed = this.numberValue(this.speedInput, 1);\n const density = this.numberValue(this.densityInput, 120);\n const maxDrops = this.numberValue(this.maxDropsInput, 80);\n const topDown = this.booleanValue(this.topDownInput);\n const windDirection = Number(resolveValue(this.windInput)) || 0;\n const windStrength = Number(resolveValue(this.windStrengthInput)) || 0;\n const intensity = Math.min(Math.max(density / 180, 0.45), 1.55);\n const count = Math.min(Math.round(maxDrops), Math.round((topDown ? 54 : 34) * intensity));\n const g = this.graphics;\n\n if (this.lastTopDown !== topDown) {\n this.splashes.length = 0;\n this.lastTopDown = topDown;\n }\n\n this.alpha = topDown ? 0.9 : 0.82;\n this.ensureSplashCount(count, width, height, topDown);\n g.clear();\n\n for (const splash of this.splashes) {\n splash.age += (0.045 + speed * 0.018) * delta;\n if (splash.age > splash.life) {\n this.resetSplash(splash, width, height, topDown);\n continue;\n }\n if (splash.age < 0) continue;\n\n const phase = splash.age / splash.life;\n const fade = Math.pow(1 - phase, 1.7) * intensity;\n const spread = splash.radius * (0.65 + phase * 2.6);\n const yLift = topDown ? phase * 0.8 : phase * 1.6;\n const drift = windDirection * windStrength * 7 * phase;\n const x = splash.x + drift;\n const y = splash.y - yLift;\n const alpha = Math.min(0.62, 0.44 * fade);\n\n g.ellipse(x, y, spread, splash.radius * (0.18 + phase * 0.16))\n .stroke({ color: 0xcfe9ff, alpha, width: topDown ? 1.15 : 1.35 });\n\n g.moveTo(x - spread * 1.15, y - 0.4)\n .lineTo(x - spread * 0.35, y - splash.radius * 0.24)\n .stroke({ color: 0xe5f6ff, alpha: alpha * 0.78, width: 1 });\n\n g.moveTo(x + spread * 0.35, y - splash.radius * 0.24)\n .lineTo(x + spread * 1.15, y - 0.4)\n .stroke({ color: 0xe5f6ff, alpha: alpha * 0.78, width: 1 });\n }\n }\n\n async onDestroy(parent: any, afterDestroy: any) {\n this.tickSubscription?.unsubscribe?.();\n await super.onDestroy(parent, afterDestroy);\n }\n}\n\nregisterComponent(\"RainImpactLayer\", RainImpactLayer);\n\nconst RainImpacts = (props: any) => createComponent(\"RainImpactLayer\", props);\n\nexport const RAIN_PRESETS = {\n lightRain: { effect: \"rain\", speed: 0.35, windDirection: 0.1, windStrength: 0.15, density: 110, maxDrops: 90 },\n steadyRain: { effect: \"rain\", speed: 0.6, windDirection: 0.2, windStrength: 0.3, density: 180, maxDrops: 120 },\n stormRain: { effect: \"rain\", speed: 1.4, windDirection: 0.7, windStrength: 0.75, density: 300, maxDrops: 150 },\n} as const;\n\nexport const SNOW_PRESETS = {\n lightSnow: { effect: \"snow\", speed: 0.35, windDirection: 0.1, windStrength: 0.18, density: 90, maxDrops: 100 },\n winterSnow: { effect: \"snow\", speed: 0.5, windDirection: 0.2, windStrength: 0.28, density: 150, maxDrops: 130 },\n blizzardSnow: { effect: \"snow\", speed: 1.1, windDirection: 0.8, windStrength: 0.75, density: 290, maxDrops: 160 },\n} as const;\n\nexport const FOG_PRESETS = {\n rpgMorningMist: { effect: \"fog\", speed: 0.16, density: 0.75, height: 0.45, scale: 1.35 },\n rpgForestFog: { effect: \"fog\", speed: 0.22, density: 1.0, height: 0.62, scale: 1.75 },\n rpgSwampFog: { effect: \"fog\", speed: 0.14, density: 1.3, height: 0.55, scale: 2.1 },\n rpgNightFog: { effect: \"fog\", speed: 0.12, density: 1.15, height: 0.58, scale: 1.9 },\n rpgHeavyFog: { effect: \"fog\", speed: 0.1, density: 1.7, height: 0.72, scale: 2.3 },\n} as const;\n\nexport const CLOUD_PRESETS = {\n lightClouds: { effect: \"cloud\", speed: 0.16, density: 0.55, height: 0.72, scale: 1.35, sunIntensity: 1.0, sunAngle: 0.84, raySpread: 0.92, rayTwinkle: 0.25, rayTwinkleSpeed: 0.9 },\n overcastClouds: { effect: \"cloud\", speed: 0.12, density: 0.95, height: 0.86, scale: 1.85, sunIntensity: 0.4, sunAngle: 0.95, raySpread: 1.15, rayTwinkle: 0.18, rayTwinkleSpeed: 0.7 },\n stormClouds: { effect: \"cloud\", speed: 0.2, density: 1.25, height: 0.94, scale: 2.2, sunIntensity: 0.12, sunAngle: 1.08, raySpread: 1.35, rayTwinkle: 0.12, rayTwinkleSpeed: 0.6 },\n goldenHourRays: { effect: \"cloud\", speed: 0.14, density: 0.72, height: 0.82, scale: 1.5, sunIntensity: 1.3, sunAngle: 0.72, raySpread: 0.78, rayTwinkle: 0.78, rayTwinkleSpeed: 1.4 },\n sunnySoftRays: { effect: \"cloud\", speed: 0.13, density: 0.62, height: 0.76, scale: 1.4, sunIntensity: 1.05, sunAngle: 0.8, raySpread: 0.95, rayTwinkle: 0.35, rayTwinkleSpeed: 0.95 },\n sunsetTwinkleRays: { effect: \"cloud\", speed: 0.1, density: 0.74, height: 0.84, scale: 1.55, sunIntensity: 1.35, sunAngle: 0.64, raySpread: 0.8, rayTwinkle: 1.0, rayTwinkleSpeed: 1.6 },\n dramaticCrepuscularRays: { effect: \"cloud\", speed: 0.11, density: 0.9, height: 0.9, scale: 1.9, sunIntensity: 1.5, sunAngle: 0.7, raySpread: 0.68, rayTwinkle: 0.6, rayTwinkleSpeed: 1.2 },\n morningHazeRays: { effect: \"cloud\", speed: 0.09, density: 0.52, height: 0.7, scale: 1.3, sunIntensity: 0.9, sunAngle: 0.9, raySpread: 1.05, rayTwinkle: 0.42, rayTwinkleSpeed: 0.8 },\n} as const;\n\nexport const WEATHER_PRESETS = {\n rain: RAIN_PRESETS,\n snow: SNOW_PRESETS,\n fog: FOG_PRESETS,\n cloud: CLOUD_PRESETS,\n} as const;\n\n\n/**\n * Weather Effect Component (optimized)\n */\nexport const WeatherEffect = (options: any) => {\n const {\n effect: effectType = signal('rain'),\n speed = signal(0.5),\n windDirection = signal(0.0),\n windStrength = signal(0.2),\n density = signal(120.0), // Reduced default density for better performance\n maxDrops = signal(80.0), // Reduced default maxDrops for better performance\n topDown = signal(true), // Full-screen rain tuned for top-down maps by default\n height = signal(1.0), // Fog/cloud height parameter (0 = bottom, 1 = full)\n scale = signal(2.0), // Fog noise scale parameter\n sunIntensity = signal(0.85), // Cloud sunlight shaft intensity\n sunAngle = signal(0.85), // Cloud sunlight direction angle in radians\n raySpread = signal(1.0), // Cloud sunlight ray spread\n rayTwinkle = signal(0.45), // Cloud sunlight twinkle amount\n rayTwinkleSpeed = signal(1.0), // Cloud sunlight twinkle speed\n resolution,\n ...meshProps\n } = useProps(options);\n\n // Auto-detect resolution from canvas if not provided\n const defaultResolution = signal([1000, 1000]);\n const viewWidth = signal(defaultResolution()[0]);\n const viewHeight = signal(defaultResolution()[1]);\n const originX = signal(0);\n const originY = signal(0);\n let viewportRef: any;\n const effectSignal =\n typeof effectType === \"function\" ? effectType : signal(effectType);\n const resolutionSignal = resolution\n ? (typeof resolution === \"function\" ? resolution : signal(resolution))\n : defaultResolution;\n\n // Try to get canvas size from context if available\n mount((element) => {\n const context = element.props.context;\n let parent = element.parent;\n let isInsideViewport = false;\n while (parent) {\n if (parent.tag === \"Viewport\") {\n isInsideViewport = true;\n break;\n }\n parent = parent.parent;\n }\n viewportRef = isInsideViewport ? context?.viewport : undefined;\n if (viewportRef?.getVisibleBounds) {\n const bounds = viewportRef.getVisibleBounds();\n if (bounds && bounds.width > 0 && bounds.height > 0) {\n defaultResolution.set([bounds.width, bounds.height]);\n viewWidth.set(bounds.width);\n viewHeight.set(bounds.height);\n originX.set(bounds.x);\n originY.set(bounds.y);\n }\n }\n if (context?.canvasSize) {\n watchEffect(() => {\n const size = context.canvasSize();\n if (size && size.width > 0 && size.height > 0) {\n if (!viewportRef?.getVisibleBounds) {\n defaultResolution.set([size.width, size.height]);\n viewWidth.set(size.width);\n viewHeight.set(size.height);\n originX.set(0);\n originY.set(0);\n }\n }\n });\n }\n });\n\n const speedSignal = typeof speed === \"function\" ? speed : signal(speed);\n const windDirectionSignal =\n typeof windDirection === \"function\" ? windDirection : signal(windDirection);\n const windStrengthSignal =\n typeof windStrength === \"function\" ? windStrength : signal(windStrength);\n const densitySignal =\n typeof density === \"function\" ? density : signal(density);\n const maxDropsSignal =\n typeof maxDrops === \"function\" ? maxDrops : signal(maxDrops);\n const topDownSignal =\n typeof topDown === \"function\" ? topDown : signal(topDown);\n const heightSignal =\n typeof height === \"function\" ? height : signal(height);\n const scaleSignal =\n typeof scale === \"function\" ? scale : signal(scale);\n const sunIntensitySignal =\n typeof sunIntensity === \"function\" ? sunIntensity : signal(sunIntensity);\n const sunAngleSignal =\n typeof sunAngle === \"function\" ? sunAngle : signal(sunAngle);\n const raySpreadSignal =\n typeof raySpread === \"function\" ? raySpread : signal(raySpread);\n const rayTwinkleSignal =\n typeof rayTwinkle === \"function\" ? rayTwinkle : signal(rayTwinkle);\n const rayTwinkleSpeedSignal =\n typeof rayTwinkleSpeed === \"function\" ? rayTwinkleSpeed : signal(rayTwinkleSpeed);\n\n const normalizeHeightValue = (value: any) =>\n typeof value === \"number\" && Number.isFinite(value) ? value : 1.0;\n const normalizeSunIntensityValue = (value: any) =>\n typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0.85;\n const normalizeSunAngleValue = (value: any) =>\n typeof value === \"number\" && Number.isFinite(value) ? value : 0.85;\n const normalizeRaySpreadValue = (value: any) =>\n typeof value === \"number\" && Number.isFinite(value) && value > 0 ? value : 1.0;\n const normalizeRayTwinkleValue = (value: any) =>\n typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0.45;\n const normalizeRayTwinkleSpeedValue = (value: any) =>\n typeof value === \"number\" && Number.isFinite(value) && value > 0 ? value : 1.0;\n const normalizeTopDownValue = (value: any) =>\n value === false || value === 0 ? 0 : 1;\n const sunDirectionFromAngle = (angle: number) => [Math.cos(angle), Math.sin(angle)];\n const normalizeResolutionValue = (value: any) => {\n if (!Array.isArray(value)) return [1, 1];\n const width =\n typeof value[0] === \"number\" && Number.isFinite(value[0]) && value[0] > 0\n ? value[0]\n : 1;\n const height =\n typeof value[1] === \"number\" && Number.isFinite(value[1]) && value[1] > 0\n ? value[1]\n : 1;\n return [width, height];\n };\n\n if (effectSignal() === 'rain') {\n return h(Container, {\n ...meshProps,\n width: viewWidth,\n height: viewHeight,\n x: originX,\n y: originY,\n },\n h(RainLayer, {\n texture: createRainTexture(11),\n width: viewWidth,\n height: viewHeight,\n speed: speedSignal,\n windDirection: windDirectionSignal,\n windStrength: windStrengthSignal,\n density: densitySignal,\n maxDrops: maxDropsSignal,\n topDown: topDownSignal,\n fallScale: 1.08,\n topDownTileScale: { x: 0.92, y: 0.92 },\n sideTileScale: { x: 1.08, y: 1.18 },\n topDownAlpha: 0.58,\n sideAlpha: 0.48,\n blendMode: \"screen\",\n startX: 0,\n startY: 0,\n }),\n h(RainLayer, {\n texture: createRainTexture(29),\n width: viewWidth,\n height: viewHeight,\n speed: speedSignal,\n windDirection: windDirectionSignal,\n windStrength: windStrengthSignal,\n density: densitySignal,\n maxDrops: maxDropsSignal,\n topDown: topDownSignal,\n fallScale: 0.82,\n topDownTileScale: { x: 1.25, y: 1.25 },\n sideTileScale: { x: 1.42, y: 1.55 },\n topDownAlpha: 0.38,\n sideAlpha: 0.3,\n blendMode: \"screen\",\n startX: 53,\n startY: 37,\n }),\n h(RainLayer, {\n texture: createRainTexture(47),\n width: viewWidth,\n height: viewHeight,\n speed: speedSignal,\n windDirection: windDirectionSignal,\n windStrength: windStrengthSignal,\n density: densitySignal,\n maxDrops: maxDropsSignal,\n topDown: topDownSignal,\n fallScale: 0.64,\n topDownTileScale: { x: 1.7, y: 1.7 },\n sideTileScale: { x: 1.9, y: 2.1 },\n topDownAlpha: 0.24,\n sideAlpha: 0.18,\n blendMode: \"screen\",\n startX: 101,\n startY: 73,\n }),\n h(RainImpacts, {\n width: viewWidth,\n height: viewHeight,\n speed: speedSignal,\n density: densitySignal,\n maxDrops: maxDropsSignal,\n topDown: topDownSignal,\n windDirection: windDirectionSignal,\n windStrength: windStrengthSignal,\n blendMode: \"screen\",\n })\n );\n }\n\n let glProgram;\n let uniformConfig;\n\n if (effectSignal() === 'snow') {\n glProgram = createSnowShader();\n uniformConfig = {\n uTime: { value: 0, type: \"f32\" },\n uResolution: { value: normalizeResolutionValue(resolutionSignal()), type: \"vec2<f32>\" },\n uSnowSpeed: { value: speedSignal(), type: \"f32\" },\n uWindDirection: { value: windDirectionSignal(), type: \"f32\" },\n uWindStrength: { value: windStrengthSignal(), type: \"f32\" },\n uSnowDensity: { value: densitySignal(), type: \"f32\" },\n uMaxFlakes: { value: maxDropsSignal(), type: \"f32\" },\n };\n } else if (effectSignal() === 'fog') {\n glProgram = createFogShader();\n uniformConfig = {\n uTime: { value: 0, type: \"f32\" },\n uResolution: { value: normalizeResolutionValue(resolutionSignal()), type: \"vec2<f32>\" },\n uSpeed: { value: speedSignal(), type: \"f32\" },\n uScale: { value: scaleSignal(), type: \"f32\" },\n uDensity: { value: densitySignal(), type: \"f32\" },\n uHeight: { value: normalizeHeightValue(heightSignal()), type: \"f32\" },\n uViewportOrigin: { value: [originX(), originY()], type: \"vec2<f32>\" },\n };\n } else if (effectSignal() === 'cloud') {\n const initialSunAngle = normalizeSunAngleValue(sunAngleSignal());\n glProgram = createCloudShader();\n uniformConfig = {\n uTime: { value: 0, type: \"f32\" },\n uResolution: { value: normalizeResolutionValue(resolutionSignal()), type: \"vec2<f32>\" },\n uSpeed: { value: speedSignal(), type: \"f32\" },\n uScale: { value: scaleSignal(), type: \"f32\" },\n uDensity: { value: densitySignal(), type: \"f32\" },\n uHeight: { value: normalizeHeightValue(heightSignal()), type: \"f32\" },\n uViewportOrigin: { value: [originX(), originY()], type: \"vec2<f32>\" },\n uSunIntensity: { value: normalizeSunIntensityValue(sunIntensitySignal()), type: \"f32\" },\n uSunDirection: { value: sunDirectionFromAngle(initialSunAngle), type: \"vec2<f32>\" },\n uRaySpread: { value: normalizeRaySpreadValue(raySpreadSignal()), type: \"f32\" },\n uRayTwinkle: { value: normalizeRayTwinkleValue(rayTwinkleSignal()), type: \"f32\" },\n uRayTwinkleSpeed: { value: normalizeRayTwinkleSpeedValue(rayTwinkleSpeedSignal()), type: \"f32\" },\n };\n } else {\n throw new Error(`Unknown weather effect: ${effectSignal()}. Supported: rain, snow, fog, cloud`);\n }\n\n const uniformGroup = new UniformGroup(uniformConfig as any);\n\n const shader = new Shader({\n glProgram,\n resources: { uniforms: uniformGroup },\n });\n\n const geometry = new Geometry({\n attributes: {\n aPosition: [0, 0, 1, 0, 1, 1, 0, 1],\n aUV: [0, 0, 1, 0, 1, 1, 0, 1],\n },\n indexBuffer: [0, 1, 2, 0, 2, 3],\n });\n\n // Initialize time with a random offset to prevent initial clustering\n let timeAccumulator = Math.random() * 10.0;\n \n // Cache previous values to avoid unnecessary uniform updates\n let prevResolution = [...normalizeResolutionValue(resolutionSignal())];\n let prevWindDirection = windDirectionSignal();\n let prevWindStrength = windStrengthSignal();\n let prevSpeed = speedSignal();\n let prevDensity = densitySignal();\n let prevMaxDrops = maxDropsSignal();\n let prevTopDown = normalizeTopDownValue(topDownSignal());\n let prevHeight = heightSignal();\n let prevScale = scaleSignal();\n let prevSunIntensity = normalizeSunIntensityValue(sunIntensitySignal());\n let prevSunAngle = normalizeSunAngleValue(sunAngleSignal());\n let prevRaySpread = normalizeRaySpreadValue(raySpreadSignal());\n let prevRayTwinkle = normalizeRayTwinkleValue(rayTwinkleSignal());\n let prevRayTwinkleSpeed = normalizeRayTwinkleSpeedValue(rayTwinkleSpeedSignal());\n let prevOriginX = originX();\n let prevOriginY = originY();\n\n tick(({ deltaTime }) => {\n if (viewportRef?.getVisibleBounds) {\n const bounds = viewportRef.getVisibleBounds();\n if (bounds && bounds.width > 0 && bounds.height > 0) {\n const nextWidth = bounds.width;\n const nextHeight = bounds.height;\n const nextOriginX = bounds.x;\n const nextOriginY = bounds.y;\n if (nextWidth !== viewWidth()) viewWidth.set(nextWidth);\n if (nextHeight !== viewHeight()) viewHeight.set(nextHeight);\n if (nextOriginX !== originX()) originX.set(nextOriginX);\n if (nextOriginY !== originY()) originY.set(nextOriginY);\n const currentResolution = defaultResolution();\n if (currentResolution[0] !== nextWidth || currentResolution[1] !== nextHeight) {\n defaultResolution.set([nextWidth, nextHeight]);\n }\n }\n }\n\n // Always update time (required for animation)\n timeAccumulator += deltaTime / 600;\n uniformGroup.uniforms.uTime = timeAccumulator;\n\n // Only update resolution if it changed\n const currentResolution = normalizeResolutionValue(resolutionSignal());\n if (currentResolution[0] !== prevResolution[0] || currentResolution[1] !== prevResolution[1]) {\n uniformGroup.uniforms.uResolution = currentResolution;\n prevResolution = [...currentResolution];\n }\n\n if (effectSignal() === 'fog' || effectSignal() === 'cloud') {\n const currentOriginX = originX();\n const currentOriginY = originY();\n if (currentOriginX !== prevOriginX || currentOriginY !== prevOriginY) {\n uniformGroup.uniforms.uViewportOrigin = [currentOriginX, currentOriginY];\n prevOriginX = currentOriginX;\n prevOriginY = currentOriginY;\n }\n }\n\n // Only update wind if it changed\n const currentWindDirection = windDirectionSignal();\n if (currentWindDirection !== prevWindDirection) {\n uniformGroup.uniforms.uWindDirection = currentWindDirection;\n prevWindDirection = currentWindDirection;\n }\n\n // Update wind strength only for rain and snow (fog doesn't use it)\n if (effectSignal() === 'rain' || effectSignal() === 'snow') {\n const currentWindStrength = windStrengthSignal();\n if (currentWindStrength !== prevWindStrength) {\n uniformGroup.uniforms.uWindStrength = currentWindStrength;\n prevWindStrength = currentWindStrength;\n }\n }\n\n if (effectSignal() === 'rain') {\n // Only update rain-specific uniforms if they changed\n const currentSpeed = speedSignal();\n if (currentSpeed !== prevSpeed) {\n uniformGroup.uniforms.uRainSpeed = currentSpeed;\n prevSpeed = currentSpeed;\n }\n\n const currentDensity = densitySignal();\n if (currentDensity !== prevDensity) {\n uniformGroup.uniforms.uRainDensity = currentDensity;\n prevDensity = currentDensity;\n }\n\n const currentMaxDrops = maxDropsSignal();\n if (currentMaxDrops !== prevMaxDrops) {\n uniformGroup.uniforms.uMaxDrops = currentMaxDrops;\n prevMaxDrops = currentMaxDrops;\n }\n\n const currentTopDown = normalizeTopDownValue(topDownSignal());\n if (currentTopDown !== prevTopDown) {\n uniformGroup.uniforms.uRainTopDown = currentTopDown;\n prevTopDown = currentTopDown;\n }\n } else if (effectSignal() === 'snow') {\n // Only update snow-specific uniforms if they changed\n const currentSpeed = speedSignal();\n if (currentSpeed !== prevSpeed) {\n uniformGroup.uniforms.uSnowSpeed = currentSpeed;\n prevSpeed = currentSpeed;\n }\n\n const currentDensity = densitySignal();\n if (currentDensity !== prevDensity) {\n uniformGroup.uniforms.uSnowDensity = currentDensity;\n prevDensity = currentDensity;\n }\n\n const currentMaxDrops = maxDropsSignal();\n if (currentMaxDrops !== prevMaxDrops) {\n uniformGroup.uniforms.uMaxFlakes = currentMaxDrops;\n prevMaxDrops = currentMaxDrops;\n }\n } else if (effectSignal() === 'fog' || effectSignal() === 'cloud') {\n // Only update fog-specific uniforms if they changed\n const currentSpeed = speedSignal();\n if (currentSpeed !== prevSpeed) {\n uniformGroup.uniforms.uSpeed = currentSpeed;\n prevSpeed = currentSpeed;\n }\n\n const currentScale = scaleSignal();\n if (currentScale !== prevScale) {\n uniformGroup.uniforms.uScale = currentScale;\n prevScale = currentScale;\n }\n\n const currentDensity = densitySignal();\n if (currentDensity !== prevDensity) {\n uniformGroup.uniforms.uDensity = currentDensity;\n prevDensity = currentDensity;\n }\n\n const currentHeight = normalizeHeightValue(heightSignal());\n if (currentHeight !== prevHeight) {\n uniformGroup.uniforms.uHeight = currentHeight;\n prevHeight = currentHeight;\n }\n\n if (effectSignal() === 'cloud') {\n const currentSunIntensity = normalizeSunIntensityValue(sunIntensitySignal());\n if (currentSunIntensity !== prevSunIntensity) {\n uniformGroup.uniforms.uSunIntensity = currentSunIntensity;\n prevSunIntensity = currentSunIntensity;\n }\n\n const currentSunAngle = normalizeSunAngleValue(sunAngleSignal());\n if (currentSunAngle !== prevSunAngle) {\n uniformGroup.uniforms.uSunDirection = sunDirectionFromAngle(currentSunAngle);\n prevSunAngle = currentSunAngle;\n }\n\n const currentRaySpread = normalizeRaySpreadValue(raySpreadSignal());\n if (currentRaySpread !== prevRaySpread) {\n uniformGroup.uniforms.uRaySpread = currentRaySpread;\n prevRaySpread = currentRaySpread;\n }\n\n const currentRayTwinkle = normalizeRayTwinkleValue(rayTwinkleSignal());\n if (currentRayTwinkle !== prevRayTwinkle) {\n uniformGroup.uniforms.uRayTwinkle = currentRayTwinkle;\n prevRayTwinkle = currentRayTwinkle;\n }\n\n const currentRayTwinkleSpeed = normalizeRayTwinkleSpeedValue(rayTwinkleSpeedSignal());\n if (currentRayTwinkleSpeed !== prevRayTwinkleSpeed) {\n uniformGroup.uniforms.uRayTwinkleSpeed = currentRayTwinkleSpeed;\n prevRayTwinkleSpeed = currentRayTwinkleSpeed;\n }\n }\n }\n });\n\n return h(Mesh, {\n ...meshProps,\n geometry,\n shader,\n width: viewWidth,\n height: viewHeight,\n x: originX,\n y: originY,\n });\n};\n\nexport const Weather = WeatherEffect;\n","import { h, signal, Sprite, tick, useProps } from \"canvasengine\";\nimport { Texture } from \"pixi.js\";\n\ntype FogColor = [number, number, number, number];\ntype FogVisibilityState = \"visible\" | \"explored\" | \"unknown\";\n\ntype VisionSource = {\n x: number | (() => number);\n y: number | (() => number);\n radius: number | (() => number);\n enabled?: boolean | (() => boolean);\n};\n\ntype ResolvedVisionSource = {\n x: number;\n y: number;\n radius: number;\n enabled: boolean;\n};\n\ntype FogOfWarColors = {\n unknown?: FogColor;\n explored?: FogColor;\n};\n\ntype FogOfWarProps = {\n mapWidth: number | (() => number);\n mapHeight: number | (() => number);\n tileSize?: number | (() => number);\n smooth?: boolean | (() => boolean);\n renderScale?: number | (() => number);\n edgeSoftness?: number | (() => number);\n visionSources?: VisionSource[] | (() => VisionSource[]);\n colors?: FogOfWarColors | (() => FogOfWarColors);\n updateHz?: number | (() => number);\n initialExplored?: boolean | (() => boolean);\n controller?: FogOfWarController | (() => FogOfWarController);\n obstacleMap?: unknown;\n [key: string]: unknown;\n};\n\ntype FogSample = {\n clarity: number;\n explored: boolean;\n};\n\ntype FogSampler = (x: number, y: number) => FogSample;\n\ntype FogControllerInternals = {\n setSampler: (sampler: FogSampler) => void;\n notifyUpdate: () => void;\n};\n\nexport type FogOfWarController = {\n version: () => number;\n clarityAt: (x: number, y: number) => number;\n isVisibleAt: (x: number, y: number, threshold?: number) => boolean;\n isExploredAt: (x: number, y: number) => boolean;\n stateAt: (x: number, y: number, clearThreshold?: number) => FogVisibilityState;\n};\n\nconst DEFAULT_UNKNOWN: FogColor = [0, 0, 0, 1];\nconst DEFAULT_EXPLORED: FogColor = [0, 0, 0, 0.55];\nconst DEFAULT_SAMPLE: FogSample = { clarity: 0, explored: false };\nconst defaultSampler: FogSampler = () => DEFAULT_SAMPLE;\nconst fogControllerRegistry = new WeakMap<FogOfWarController, FogControllerInternals>();\n\nconst clamp = (value: number, min: number, max: number) =>\n Math.max(min, Math.min(max, value));\n\nconst smoothstep = (edge0: number, edge1: number, x: number) => {\n if (edge1 <= edge0) return x >= edge1 ? 1 : 0;\n const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);\n return t * t * (3 - 2 * t);\n};\n\nconst resolveValue = (value: any): any => {\n if (typeof value === \"function\") return value();\n return value;\n};\n\nexport function createFogOfWarController(): FogOfWarController {\n const revision = signal(0);\n let sampler: FogSampler = defaultSampler;\n\n const readSample = (x: number, y: number): FogSample => {\n revision();\n if (!Number.isFinite(x) || !Number.isFinite(y)) return DEFAULT_SAMPLE;\n return sampler(x, y);\n };\n\n const controller: FogOfWarController = {\n version: () => revision(),\n clarityAt: (x, y) => clamp(readSample(x, y).clarity, 0, 1),\n isVisibleAt: (x, y, threshold = 0.65) =>\n readSample(x, y).clarity >= clamp(threshold, 0, 1),\n isExploredAt: (x, y) => {\n const sample = readSample(x, y);\n return sample.explored || sample.clarity > 0;\n },\n stateAt: (x, y, clearThreshold = 0.65) => {\n const sample = readSample(x, y);\n if (sample.clarity >= clamp(clearThreshold, 0, 1)) return \"visible\";\n if (sample.explored || sample.clarity > 0) return \"explored\";\n return \"unknown\";\n },\n };\n\n fogControllerRegistry.set(controller, {\n setSampler(nextSampler) {\n sampler = typeof nextSampler === \"function\" ? nextSampler : defaultSampler;\n },\n notifyUpdate() {\n revision.update((value: number) => value + 1);\n },\n });\n\n return controller;\n}\n\nconst toColorBytes = (input: FogColor, fallback: FogColor) => {\n const value = Array.isArray(input) ? input : fallback;\n const [r, g, b, a] = value;\n const normalize = (n: number, alpha = false) => {\n if (!Number.isFinite(n)) return alpha ? 255 : 0;\n if (n >= 0 && n <= 1) return Math.round(n * 255);\n return clamp(Math.round(n), 0, 255);\n };\n return {\n r: normalize(r),\n g: normalize(g),\n b: normalize(b),\n a: normalize(a, true),\n };\n};\n\nconst resolveSources = (input: VisionSource[] | (() => VisionSource[])) => {\n const raw = resolveValue(input);\n if (!Array.isArray(raw)) return [];\n return raw;\n};\n\nexport function FogOfWar(options: FogOfWarProps) {\n const {\n mapWidth,\n mapHeight,\n tileSize = signal(32),\n smooth = signal(true),\n renderScale = signal(2),\n edgeSoftness = signal(22),\n visionSources = signal([]),\n colors = signal({}),\n updateHz = signal(15),\n initialExplored = signal(false),\n controller = undefined,\n obstacleMap = undefined,\n ...spriteProps\n } = useProps(options);\n\n // Placeholder for phase 2 LOS support with blocking tiles.\n void obstacleMap;\n\n let fogCanvas: HTMLCanvasElement;\n let fogCtx: CanvasRenderingContext2D | null = null;\n let fogTexture: Texture = Texture.WHITE;\n let imageData: ImageData | null = null;\n let pixelData: Uint8ClampedArray | null = null;\n let visibilityNow = new Float32Array(0);\n let explored = new Uint8Array(0);\n let gridWidth = 1;\n let gridHeight = 1;\n let cellCount = 1;\n let cachedMapWidth = 1;\n let cachedMapHeight = 1;\n let cachedTileSize = 1;\n let cachedCellSize = 1;\n let cachedRenderScale = 1;\n let accumulatorMs = 0;\n let forceRefresh = true;\n let activeController: FogOfWarController | null = null;\n let activeControllerInternals: FogControllerInternals | null = null;\n let previousSourcesSnapshot: number[] = [];\n\n const createFogCanvas = () => {\n if (typeof document === \"undefined\") {\n throw new Error(\"FogOfWar: document is undefined, canvas cannot be created.\");\n }\n const canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n return canvas;\n };\n\n fogCanvas = createFogCanvas();\n fogCtx = fogCanvas.getContext(\"2d\", { willReadFrequently: true });\n if (!fogCtx) {\n throw new Error(\"FogOfWar: unable to create 2D context for fog canvas.\");\n }\n fogTexture = Texture.from(fogCanvas);\n\n const resolveRenderScale = () => {\n const smoothEnabled = resolveValue(smooth) !== false;\n const fallback = smoothEnabled ? 2 : 1;\n const value = Number(resolveValue(renderScale));\n if (!Number.isFinite(value)) return fallback;\n return clamp(Math.round(value), 1, 8);\n };\n\n const resolveEdgeSoftness = () => {\n if (resolveValue(smooth) === false) return 0;\n const value = Number(resolveValue(edgeSoftness));\n if (!Number.isFinite(value)) return Math.max(cachedCellSize * 0.9, 2);\n return Math.max(0, value);\n };\n\n const resolveController = () => {\n const value = resolveValue(controller);\n return value && typeof value === \"object\"\n ? (value as FogOfWarController)\n : undefined;\n };\n\n const resolveVisionSources = (): ResolvedVisionSource[] => {\n const sources = resolveSources(visionSources);\n const resolved: ResolvedVisionSource[] = [];\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i];\n resolved.push({\n x: Number(resolveValue(source.x)),\n y: Number(resolveValue(source.y)),\n radius: Number(resolveValue(source.radius)),\n enabled: resolveValue(source.enabled) !== false,\n });\n }\n return resolved;\n };\n\n const didSourcesChange = (sources: ResolvedVisionSource[]) => {\n const snapshot = new Array(sources.length * 4);\n let index = 0;\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i];\n snapshot[index++] = source.x;\n snapshot[index++] = source.y;\n snapshot[index++] = source.radius;\n snapshot[index++] = source.enabled ? 1 : 0;\n }\n\n let changed = snapshot.length !== previousSourcesSnapshot.length;\n if (!changed) {\n for (let i = 0; i < snapshot.length; i++) {\n const next = snapshot[i];\n const prev = previousSourcesSnapshot[i];\n if (Number.isNaN(next) !== Number.isNaN(prev) || Math.abs(next - prev) > 0.01) {\n changed = true;\n break;\n }\n }\n }\n\n previousSourcesSnapshot = snapshot;\n return changed;\n };\n\n const sampleFog = (worldX: number, worldY: number): FogSample => {\n if (\n !Number.isFinite(worldX) ||\n !Number.isFinite(worldY) ||\n cellCount <= 0 ||\n gridWidth <= 0 ||\n gridHeight <= 0\n ) {\n return DEFAULT_SAMPLE;\n }\n\n const safeX = clamp(worldX, 0, Math.max(0, cachedMapWidth - 1));\n const safeY = clamp(worldY, 0, Math.max(0, cachedMapHeight - 1));\n const cellX = Math.min(gridWidth - 1, Math.max(0, Math.floor(safeX / cachedCellSize)));\n const cellY = Math.min(gridHeight - 1, Math.max(0, Math.floor(safeY / cachedCellSize)));\n const index = cellY * gridWidth + cellX;\n\n return {\n clarity: clamp(visibilityNow[index] ?? 0, 0, 1),\n explored: explored[index] === 1,\n };\n };\n\n const syncController = (notify: boolean) => {\n const nextController = resolveController() ?? null;\n if (nextController !== activeController) {\n if (activeControllerInternals) {\n activeControllerInternals.setSampler(defaultSampler);\n }\n activeController = nextController;\n activeControllerInternals = activeController\n ? fogControllerRegistry.get(activeController) ?? null\n : null;\n if (activeControllerInternals) {\n activeControllerInternals.setSampler(sampleFog);\n }\n notify = true;\n }\n if (notify && activeControllerInternals) {\n activeControllerInternals.notifyUpdate();\n }\n };\n\n const applyTextureScaleMode = () => {\n const source = (fogTexture as any).source;\n if (!source) return;\n source.scaleMode = resolveValue(smooth) === false ? \"nearest\" : \"linear\";\n };\n\n const resizeFogBuffers = (\n nextMapWidth: number,\n nextMapHeight: number,\n nextTileSize: number,\n nextRenderScale: number\n ) => {\n cachedMapWidth = Math.max(1, Math.floor(nextMapWidth));\n cachedMapHeight = Math.max(1, Math.floor(nextMapHeight));\n cachedTileSize = Math.max(1, Math.floor(nextTileSize));\n cachedRenderScale = clamp(nextRenderScale, 1, 8);\n cachedCellSize = Math.max(1, cachedTileSize / cachedRenderScale);\n gridWidth = Math.max(1, Math.ceil(cachedMapWidth / cachedCellSize));\n gridHeight = Math.max(1, Math.ceil(cachedMapHeight / cachedCellSize));\n cellCount = gridWidth * gridHeight;\n\n if (\"width\" in fogCanvas) {\n (fogCanvas as any).width = gridWidth;\n (fogCanvas as any).height = gridHeight;\n }\n\n visibilityNow = new Float32Array(cellCount);\n explored = new Uint8Array(cellCount);\n if (resolveValue(initialExplored)) explored.fill(1);\n\n imageData = fogCtx?.createImageData(gridWidth, gridHeight) ?? null;\n pixelData = imageData?.data ?? null;\n applyTextureScaleMode();\n forceRefresh = true;\n };\n\n const drawVisionCircle = (source: ResolvedVisionSource, featherCells: number) => {\n if (\n source.enabled === false ||\n !Number.isFinite(source.x) ||\n !Number.isFinite(source.y) ||\n !Number.isFinite(source.radius) ||\n source.radius <= 0\n ) {\n return;\n }\n\n const x = source.x;\n const y = source.y;\n const radius = source.radius;\n const radiusInCells = radius / cachedCellSize;\n const innerRadius = Math.max(0, radiusInCells - featherCells);\n const outerRadius = Math.max(radiusInCells, radiusInCells + featherCells);\n const innerRadiusSq = innerRadius * innerRadius;\n const outerRadiusSq = outerRadius * outerRadius;\n\n const minX = Math.max(0, Math.floor(x / cachedCellSize - outerRadius));\n const maxX = Math.min(gridWidth - 1, Math.ceil(x / cachedCellSize + outerRadius));\n const minY = Math.max(0, Math.floor(y / cachedCellSize - outerRadius));\n const maxY = Math.min(gridHeight - 1, Math.ceil(y / cachedCellSize + outerRadius));\n\n for (let ty = minY; ty <= maxY; ty++) {\n for (let tx = minX; tx <= maxX; tx++) {\n const centerX = (tx + 0.5) * cachedCellSize;\n const centerY = (ty + 0.5) * cachedCellSize;\n const dx = centerX - x;\n const dy = centerY - y;\n const distanceSq = (dx * dx + dy * dy) / (cachedCellSize * cachedCellSize);\n if (distanceSq > outerRadiusSq) continue;\n\n let clarity = 1;\n if (outerRadius > innerRadius && distanceSq > innerRadiusSq) {\n const distance = Math.sqrt(distanceSq);\n const fade = smoothstep(innerRadius, outerRadius, distance);\n clarity = 1 - fade;\n }\n if (clarity <= 0.001) continue;\n\n const index = ty * gridWidth + tx;\n if (clarity > visibilityNow[index]) {\n visibilityNow[index] = clarity;\n }\n if (clarity > 0.02) explored[index] = 1;\n }\n }\n };\n\n const rasterizeFog = (resolvedSources?: ResolvedVisionSource[]) => {\n if (!imageData || !pixelData || !fogCtx) return;\n\n const rawColors = resolveValue(colors) || {};\n const unknown = toColorBytes(rawColors.unknown, DEFAULT_UNKNOWN);\n const known = toColorBytes(rawColors.explored, DEFAULT_EXPLORED);\n\n visibilityNow.fill(0);\n const sources = resolvedSources ?? resolveVisionSources();\n const featherCells = resolveEdgeSoftness() / cachedCellSize;\n for (let i = 0; i < sources.length; i++) {\n drawVisionCircle(sources[i], featherCells);\n }\n\n for (let i = 0; i < cellCount; i++) {\n const p = i * 4;\n const clarity = clamp(visibilityNow[i], 0, 1);\n const isExplored = explored[i] === 1;\n const fogColor = isExplored ? known : unknown;\n pixelData[p] = fogColor.r;\n pixelData[p + 1] = fogColor.g;\n pixelData[p + 2] = fogColor.b;\n pixelData[p + 3] = Math.round(fogColor.a * (1 - clarity));\n }\n\n fogCtx.putImageData(imageData, 0, 0);\n const source = (fogTexture as any).source;\n if (source && typeof source.update === \"function\") source.update();\n else if (typeof (fogTexture as any).update === \"function\") (fogTexture as any).update();\n syncController(true);\n };\n\n const initialMapWidth = Number(resolveValue(mapWidth)) || 1;\n const initialMapHeight = Number(resolveValue(mapHeight)) || 1;\n const initialTileSize = Number(resolveValue(tileSize)) || 32;\n const initialRenderScale = resolveRenderScale();\n resizeFogBuffers(initialMapWidth, initialMapHeight, initialTileSize, initialRenderScale);\n rasterizeFog();\n\n tick(({ deltaTime }) => {\n if (!fogCtx) return;\n\n const mw = Math.max(1, Number(resolveValue(mapWidth)) || 1);\n const mh = Math.max(1, Number(resolveValue(mapHeight)) || 1);\n const ts = Math.max(1, Number(resolveValue(tileSize)) || 32);\n const rs = resolveRenderScale();\n if (\n mw !== cachedMapWidth ||\n mh !== cachedMapHeight ||\n ts !== cachedTileSize ||\n rs !== cachedRenderScale\n ) {\n resizeFogBuffers(mw, mh, ts, rs);\n }\n applyTextureScaleMode();\n syncController(false);\n const resolvedSources = resolveVisionSources();\n const sourcesChanged = didSourcesChange(resolvedSources);\n if (sourcesChanged) {\n // Keep vision movement visually smooth even with low updateHz.\n forceRefresh = true;\n }\n\n const hz = Math.max(1, Number(resolveValue(updateHz)) || 15);\n const intervalMs = 1000 / hz;\n accumulatorMs += deltaTime;\n\n if (forceRefresh || sourcesChanged || accumulatorMs >= intervalMs) {\n accumulatorMs = 0;\n forceRefresh = false;\n rasterizeFog(resolvedSources);\n }\n });\n\n return h(Sprite, {\n ...spriteProps,\n texture: fogTexture,\n x: 0,\n y: 0,\n width: Math.max(1, Number(resolveValue(mapWidth)) || 1),\n height: Math.max(1, Number(resolveValue(mapHeight)) || 1),\n roundPixels: true,\n });\n}\n","import { Container, h, mount, useProps } from \"canvasengine\";\nimport {\n BlurFilter,\n Container as PixiContainer,\n Filter,\n Sprite as PixiSprite,\n} from \"pixi.js\";\nimport fragmentShader from \"./shaders/shadowGradient.frag.glsl?raw\";\nimport vertexShader from \"./shaders/defaultFilter.vert.glsl?raw\";\n\ntype ReactiveValue<T> = T | (() => T);\ntype PointLike = { x: number; y: number };\ntype ColorInput = string | number;\n\nexport type ShadowLight = {\n x: number;\n y: number;\n z?: number;\n radius?: number;\n intensity?: number;\n shadowWeight?: number;\n enabled?: boolean;\n};\n\nexport type ShadowLightInput = {\n x: ReactiveValue<number>;\n y: ReactiveValue<number>;\n z?: ReactiveValue<number>;\n radius?: ReactiveValue<number>;\n intensity?: ReactiveValue<number>;\n shadowWeight?: ReactiveValue<number>;\n enabled?: ReactiveValue<boolean>;\n};\n\nexport type ShadowCasterOptions = {\n enabled?: ReactiveValue<boolean>;\n height?: ReactiveValue<number>;\n footOffset?: ReactiveValue<PointLike>;\n footAnchor?: ReactiveValue<PointLike>;\n alpha?: ReactiveValue<number>;\n blur?: ReactiveValue<number>;\n gradientPower?: ReactiveValue<number>;\n hardness?: ReactiveValue<number>;\n minLength?: ReactiveValue<number>;\n maxLength?: ReactiveValue<number>;\n contactAlpha?: ReactiveValue<number>;\n contactScale?: ReactiveValue<number>;\n anchorX?: ReactiveValue<number>;\n};\n\ntype ShadowMode = \"strongest\" | \"blend2\";\n\nexport type SpriteShadowsProps = {\n lights?: ReactiveValue<Array<ShadowLightInput | ShadowLight>>;\n sources?: ReactiveValue<Array<ShadowLightInput | ShadowLight>>;\n mode?: ReactiveValue<ShadowMode>;\n updateHz?: ReactiveValue<number>;\n shadowColor?: ReactiveValue<ColorInput>;\n};\n\ntype ResolvedCaster = {\n height: number;\n footOffset: PointLike;\n footAnchor: PointLike;\n alpha: number;\n blur: number;\n gradientPower: number;\n hardness: number;\n minLength: number;\n maxLength: number;\n contactAlpha: number;\n contactScale: number;\n anchorX?: number;\n};\n\ntype ResolvedLight = {\n x: number;\n y: number;\n globalX: number;\n globalY: number;\n z: number;\n radius: number;\n intensity: number;\n shadowWeight: number;\n};\n\ntype LightCandidate = {\n dirX: number;\n dirY: number;\n influence: number;\n length: number;\n};\n\ntype GradientFilter = Filter & {\n setGradient: (power: number, floor: number) => void;\n};\n\ntype ManagedShadow = {\n caster: any;\n parent: PixiContainer;\n near: PixiSprite;\n far: PixiSprite;\n contact: PixiSprite;\n nearBlur: BlurFilter;\n farBlur: BlurFilter;\n contactBlur: BlurFilter;\n nearGradient: GradientFilter;\n farGradient: GradientFilter;\n dirX: number;\n dirY: number;\n length: number;\n};\n\nconst SHADOW_MANAGED_MARK = \"__spriteShadowManaged\";\nconst DEFAULT_LIGHT_Z = 220;\nconst DEFAULT_LIGHT_RADIUS = 360;\nconst DEFAULT_LIGHT_INTENSITY = 1;\nconst DEFAULT_MODE: ShadowMode = \"strongest\";\nconst DEFAULT_UPDATE_HZ = 30;\nconst DEFAULT_SHADOW_COLOR = 0x000000;\nconst DEFAULT_CASTER: ResolvedCaster = {\n height: 72,\n footOffset: { x: 0, y: 0 },\n footAnchor: { x: 0.5, y: 1 },\n alpha: 0.56,\n blur: 3.5,\n gradientPower: 2,\n hardness: 0.42,\n minLength: 10,\n maxLength: 280,\n contactAlpha: 0.28,\n contactScale: 0.28,\n};\n\nconst clamp = (value: number, min: number, max: number) =>\n Math.max(min, Math.min(max, value));\n\nconst isFiniteNumber = (value: unknown): value is number =>\n typeof value === \"number\" && Number.isFinite(value);\n\nconst resolveReactiveValue = <T>(value: ReactiveValue<T> | undefined): T | undefined => {\n if (\n value &&\n typeof value === \"object\" &&\n \"value\" in (value as Record<string, unknown>) &&\n Object.keys(value as Record<string, unknown>).length <= 2\n ) {\n return (value as Record<string, T>).value;\n }\n if (typeof value === \"function\") {\n try {\n return (value as () => T)();\n } catch {\n return undefined;\n }\n }\n return value;\n};\n\nconst parseColorToNumber = (color: ColorInput | undefined): number => {\n if (typeof color === \"number\" && Number.isFinite(color)) {\n return Math.max(0, Math.floor(color)) & 0xffffff;\n }\n if (typeof color === \"string\") {\n const cleaned = color.trim().replace(/^#/, \"\");\n const normalized =\n cleaned.length === 3\n ? `${cleaned[0]}${cleaned[0]}${cleaned[1]}${cleaned[1]}${cleaned[2]}${cleaned[2]}`\n : cleaned;\n const parsed = parseInt(normalized, 16);\n if (Number.isFinite(parsed)) return parsed & 0xffffff;\n }\n return DEFAULT_SHADOW_COLOR;\n};\n\nconst resolvePoint = (\n value: ReactiveValue<PointLike> | undefined,\n fallback: PointLike\n): PointLike => {\n const resolved = resolveReactiveValue(value);\n const x = Number((resolved as PointLike | undefined)?.x);\n const y = Number((resolved as PointLike | undefined)?.y);\n return {\n x: isFiniteNumber(x) ? x : fallback.x,\n y: isFiniteNumber(y) ? y : fallback.y,\n };\n};\n\nconst toGlobalPoint = (\n container: any,\n point: PointLike\n): PointLike => {\n if (container && typeof container.toGlobal === \"function\") {\n const globalPoint = container.toGlobal(point);\n if (isFiniteNumber(globalPoint?.x) && isFiniteNumber(globalPoint?.y)) {\n return { x: globalPoint.x, y: globalPoint.y };\n }\n }\n return point;\n};\n\nconst toLocalPoint = (\n container: any,\n point: PointLike\n): PointLike => {\n if (container && typeof container.toLocal === \"function\") {\n const localPoint = container.toLocal(point);\n if (isFiniteNumber(localPoint?.x) && isFiniteNumber(localPoint?.y)) {\n return { x: localPoint.x, y: localPoint.y };\n }\n }\n return point;\n};\n\nconst createGradientFilter = (\n power = 2,\n floor = 0.06\n): GradientFilter => {\n const uPower = { value: power, type: \"f32\" as const };\n const uFloor = { value: floor, type: \"f32\" as const };\n const filter = Filter.from({\n gl: {\n vertex: vertexShader,\n fragment: fragmentShader,\n },\n resources: {\n shadowGradientUniforms: {\n uPower,\n uFloor,\n },\n },\n }) as GradientFilter;\n\n filter.setGradient = (nextPower: number, nextFloor: number) => {\n uPower.value = isFiniteNumber(nextPower) ? Math.max(0.001, nextPower) : 2;\n uFloor.value = isFiniteNumber(nextFloor) ? clamp(nextFloor, 0, 1) : 0.06;\n };\n\n return filter;\n};\n\nconst resolveCasterOptions = (rawValue: unknown): ResolvedCaster | null => {\n if (rawValue === false || rawValue === null || rawValue === undefined) return null;\n const source: ShadowCasterOptions =\n rawValue === true || typeof rawValue !== \"object\"\n ? {}\n : (rawValue as ShadowCasterOptions);\n\n const enabled = resolveReactiveValue(source.enabled);\n if (enabled === false) return null;\n\n const height = Number(resolveReactiveValue(source.height));\n const alpha = Number(resolveReactiveValue(source.alpha));\n const blur = Number(resolveReactiveValue(source.blur));\n const gradientPower = Number(resolveReactiveValue(source.gradientPower));\n const hardness = Number(resolveReactiveValue(source.hardness));\n const minLength = Number(resolveReactiveValue(source.minLength));\n const maxLength = Number(resolveReactiveValue(source.maxLength));\n const contactAlpha = Number(resolveReactiveValue(source.contactAlpha));\n const contactScale = Number(resolveReactiveValue(source.contactScale));\n const anchorX = Number(resolveReactiveValue(source.anchorX));\n\n return {\n height: isFiniteNumber(height) ? Math.max(2, height) : DEFAULT_CASTER.height,\n footOffset: resolvePoint(source.footOffset, DEFAULT_CASTER.footOffset),\n footAnchor: resolvePoint(source.footAnchor, DEFAULT_CASTER.footAnchor),\n alpha: isFiniteNumber(alpha) ? clamp(alpha, 0, 1.5) : DEFAULT_CASTER.alpha,\n blur: isFiniteNumber(blur) ? Math.max(0, blur) : DEFAULT_CASTER.blur,\n gradientPower: isFiniteNumber(gradientPower)\n ? clamp(gradientPower, 0.2, 8)\n : DEFAULT_CASTER.gradientPower,\n hardness: isFiniteNumber(hardness) ? clamp(hardness, 0, 1) : DEFAULT_CASTER.hardness,\n minLength: isFiniteNumber(minLength) ? Math.max(0, minLength) : DEFAULT_CASTER.minLength,\n maxLength: isFiniteNumber(maxLength)\n ? Math.max(2, maxLength)\n : DEFAULT_CASTER.maxLength,\n contactAlpha: isFiniteNumber(contactAlpha)\n ? clamp(contactAlpha, 0, 1)\n : DEFAULT_CASTER.contactAlpha,\n contactScale: isFiniteNumber(contactScale)\n ? Math.max(0.05, contactScale)\n : DEFAULT_CASTER.contactScale,\n anchorX: isFiniteNumber(anchorX) ? clamp(anchorX, 0, 1) : undefined,\n };\n};\n\nconst resolveCasterFromInstance = (instance: any): ResolvedCaster | null => {\n if (!instance || instance[SHADOW_MANAGED_MARK]) return null;\n const element = typeof instance.getElement === \"function\" ? instance.getElement() : null;\n const rawShadowCaster =\n resolveReactiveValue((instance as any).shadowCaster) ??\n resolveReactiveValue((instance as any).fullProps?.shadowCaster) ??\n resolveReactiveValue(element?.props?.shadowCaster) ??\n resolveReactiveValue(element?.propObservables?.shadowCaster as any);\n if (rawShadowCaster === undefined) return null;\n return resolveCasterOptions(rawShadowCaster);\n};\n\nconst collectShadowCasters = (root: any): Array<{ instance: any; caster: ResolvedCaster }> => {\n const collected: Array<{ instance: any; caster: ResolvedCaster }> = [];\n const stack: any[] = [root];\n\n while (stack.length > 0) {\n const node = stack.pop();\n const children = Array.isArray(node?.children) ? node.children : [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (!child || child[SHADOW_MANAGED_MARK]) continue;\n\n const caster = resolveCasterFromInstance(child);\n if (caster && child.parent) {\n collected.push({ instance: child, caster });\n }\n\n if (Array.isArray(child.children) && child.children.length > 0) {\n stack.push(child);\n }\n }\n }\n\n return collected;\n};\n\nconst resolveLights = (\n source: ReactiveValue<Array<ShadowLightInput | ShadowLight>> | undefined,\n lightSpace: any\n): ResolvedLight[] => {\n const raw = resolveReactiveValue(source);\n if (!Array.isArray(raw)) return [];\n const resolved: ResolvedLight[] = [];\n\n for (let i = 0; i < raw.length; i++) {\n const light = raw[i] as ShadowLightInput | ShadowLight;\n const enabled = resolveReactiveValue((light as ShadowLightInput).enabled);\n if (enabled === false) continue;\n\n const x = Number(resolveReactiveValue((light as ShadowLightInput).x));\n const y = Number(resolveReactiveValue((light as ShadowLightInput).y));\n if (!isFiniteNumber(x) || !isFiniteNumber(y)) continue;\n\n const z = Number(resolveReactiveValue((light as ShadowLightInput).z));\n const radius = Number(resolveReactiveValue((light as ShadowLightInput).radius));\n const intensity = Number(resolveReactiveValue((light as ShadowLightInput).intensity));\n const shadowWeight = Number(resolveReactiveValue((light as ShadowLightInput).shadowWeight));\n const global = toGlobalPoint(lightSpace, { x, y });\n\n resolved.push({\n x,\n y,\n globalX: global.x,\n globalY: global.y,\n z: isFiniteNumber(z) ? Math.max(2, z) : DEFAULT_LIGHT_Z,\n radius: isFiniteNumber(radius) ? Math.max(1, radius) : DEFAULT_LIGHT_RADIUS,\n intensity: isFiniteNumber(intensity)\n ? clamp(intensity, 0, 2)\n : DEFAULT_LIGHT_INTENSITY,\n shadowWeight: isFiniteNumber(shadowWeight) ? clamp(shadowWeight, 0, 4) : 1,\n });\n }\n\n return resolved;\n};\n\nconst blendCandidates = (\n candidates: LightCandidate[],\n mode: ShadowMode\n): LightCandidate | null => {\n if (candidates.length === 0) return null;\n candidates.sort((a, b) => b.influence - a.influence);\n\n if (mode === \"strongest\" || candidates.length === 1) {\n return candidates[0];\n }\n\n const picked = candidates.slice(0, 2);\n let weightedDirX = 0;\n let weightedDirY = 0;\n let weightedLength = 0;\n let weightTotal = 0;\n\n for (let i = 0; i < picked.length; i++) {\n const candidate = picked[i];\n const weight = Math.max(0.001, candidate.influence);\n weightedDirX += candidate.dirX * weight;\n weightedDirY += candidate.dirY * weight;\n weightedLength += candidate.length * weight;\n weightTotal += weight;\n }\n\n if (weightTotal <= 0) return null;\n const norm = Math.hypot(weightedDirX, weightedDirY);\n if (norm <= 0.0001) return null;\n\n return {\n dirX: weightedDirX / norm,\n dirY: weightedDirY / norm,\n length: weightedLength / weightTotal,\n influence: clamp(weightTotal / picked.length, 0, 2),\n };\n};\n\nconst hideManagedShadow = (managed: ManagedShadow) => {\n managed.near.visible = false;\n managed.far.visible = false;\n managed.contact.visible = false;\n};\n\nconst destroyManagedShadow = (managed: ManagedShadow) => {\n managed.near.destroy();\n managed.far.destroy();\n managed.contact.destroy();\n};\n\nconst createManagedShadow = (\n caster: any,\n parent: PixiContainer,\n shadowColor: number\n): ManagedShadow => {\n const near = new PixiSprite();\n const far = new PixiSprite();\n const contact = new PixiSprite();\n const nearBlur = new BlurFilter({ strength: 2.5, quality: 2 });\n const farBlur = new BlurFilter({ strength: 4.2, quality: 3 });\n const contactBlur = new BlurFilter({ strength: 2.8, quality: 2 });\n const nearGradient = createGradientFilter(2, 0.08);\n const farGradient = createGradientFilter(2.8, 0.02);\n\n near.filters = [nearGradient, nearBlur];\n far.filters = [farGradient, farBlur];\n contact.filters = [contactBlur];\n\n near.tint = shadowColor;\n far.tint = shadowColor;\n contact.tint = shadowColor;\n near.blendMode = \"multiply\" as any;\n far.blendMode = \"multiply\" as any;\n contact.blendMode = \"multiply\" as any;\n near.eventMode = \"none\";\n far.eventMode = \"none\";\n contact.eventMode = \"none\";\n near.roundPixels = true;\n far.roundPixels = true;\n contact.roundPixels = true;\n near.visible = false;\n far.visible = false;\n contact.visible = false;\n near.alpha = 0;\n far.alpha = 0;\n\n (near as any)[SHADOW_MANAGED_MARK] = true;\n (far as any)[SHADOW_MANAGED_MARK] = true;\n (contact as any)[SHADOW_MANAGED_MARK] = true;\n\n parent.addChild(contact);\n parent.addChild(far);\n parent.addChild(near);\n\n return {\n caster,\n parent,\n near,\n far,\n contact,\n nearBlur,\n farBlur,\n contactBlur,\n nearGradient,\n farGradient,\n dirX: 0,\n dirY: 1,\n length: 0,\n };\n};\n\nconst placeBelowCaster = (managed: ManagedShadow) => {\n const { caster, parent, near, far, contact } = managed;\n if (!caster || caster.destroyed || !parent) return;\n\n const casterZIndex = isFiniteNumber(caster.zIndex) ? caster.zIndex : 0;\n contact.zIndex = casterZIndex - 0.32;\n far.zIndex = casterZIndex - 0.26;\n near.zIndex = casterZIndex - 0.22;\n\n if ((parent as any).sortableChildren) return;\n if (!Array.isArray(parent.children) || !parent.children.includes(caster)) return;\n\n const setBeforeCaster = (item: any) => {\n if (!item || item.destroyed || !parent.children.includes(item)) return;\n const casterIndex = parent.getChildIndex(caster);\n const targetIndex = Math.max(0, casterIndex - 1);\n if (parent.getChildIndex(item) !== targetIndex) {\n parent.setChildIndex(item, targetIndex);\n }\n };\n\n setBeforeCaster(contact);\n setBeforeCaster(far);\n setBeforeCaster(near);\n};\n\nconst updateManagedShadow = (\n managed: ManagedShadow,\n casterConfig: ResolvedCaster,\n lights: ResolvedLight[],\n mode: ShadowMode,\n shadowColor: number\n) => {\n const caster = managed.caster;\n const parent = managed.parent;\n if (!caster || caster.destroyed || !parent || parent.destroyed) {\n hideManagedShadow(managed);\n return;\n }\n\n if (caster.visible === false || (isFiniteNumber(caster.worldAlpha) && caster.worldAlpha <= 0.001)) {\n hideManagedShadow(managed);\n return;\n }\n\n const bounds = typeof caster.getBounds === \"function\" ? caster.getBounds() : null;\n const hasBounds =\n !!bounds &&\n isFiniteNumber(bounds.x) &&\n isFiniteNumber(bounds.y) &&\n isFiniteNumber(bounds.width) &&\n isFiniteNumber(bounds.height) &&\n bounds.width > 0 &&\n bounds.height > 0;\n if (!hasBounds) {\n hideManagedShadow(managed);\n return;\n }\n\n const casterWidth = Math.max(\n 1,\n Math.abs(Number(caster.width)) || Math.abs(bounds.width)\n );\n const casterHeight = Math.max(\n 1,\n Math.abs(Number(caster.height)) || Math.abs(bounds.height)\n );\n\n const casterAnchorXRaw = Number(caster.anchor?.x);\n const casterAnchorYRaw = Number(caster.anchor?.y);\n const casterAnchorX = isFiniteNumber(casterAnchorXRaw) ? clamp(casterAnchorXRaw, 0, 1) : 0.5;\n const casterAnchorY = isFiniteNumber(casterAnchorYRaw) ? clamp(casterAnchorYRaw, 0, 1) : 1;\n\n const anchorXForShadow = isFiniteNumber(casterConfig.anchorX)\n ? casterConfig.anchorX\n : casterAnchorX;\n\n const localFootPoint: PointLike = {\n x:\n (casterConfig.footAnchor.x - casterAnchorX) * casterWidth +\n casterConfig.footOffset.x,\n y:\n (casterConfig.footAnchor.y - casterAnchorY) * casterHeight +\n casterConfig.footOffset.y,\n };\n const footGlobal = toGlobalPoint(caster, localFootPoint);\n const footLocal = toLocalPoint(parent, footGlobal);\n const candidates: LightCandidate[] = [];\n\n for (let i = 0; i < lights.length; i++) {\n const light = lights[i];\n if (light.intensity <= 0.001 || light.radius <= 0.001) continue;\n const lightLocal = toLocalPoint(parent, {\n x: light.globalX,\n y: light.globalY,\n });\n const dx = footLocal.x - lightLocal.x;\n const dy = footLocal.y - lightLocal.y;\n const distance = Math.hypot(dx, dy);\n const falloff = clamp(1 - distance / light.radius, 0, 1);\n const zWeight = clamp(DEFAULT_LIGHT_Z / Math.max(12, light.z), 0.35, 2.4);\n const influence = clamp(\n falloff * falloff * light.intensity * light.shadowWeight * zWeight,\n 0,\n 2.2\n );\n if (influence <= 0.001) continue;\n\n const directionNorm = distance > 0.0001 ? distance : 1;\n const dirX = dx / directionNorm;\n const dirY = dy / directionNorm;\n const projectedLength = clamp(\n (distance * casterConfig.height) / Math.max(14, light.z),\n casterConfig.minLength,\n casterConfig.maxLength\n );\n\n candidates.push({\n dirX: isFiniteNumber(dirX) ? dirX : 0,\n dirY: isFiniteNumber(dirY) ? dirY : 1,\n influence,\n length: isFiniteNumber(projectedLength) ? projectedLength : casterConfig.minLength,\n });\n }\n\n const projection = blendCandidates(candidates, mode);\n if (!projection) {\n hideManagedShadow(managed);\n return;\n }\n\n const casterTexture = caster.texture;\n if (!casterTexture) {\n hideManagedShadow(managed);\n return;\n }\n\n const directionLerp = 0.34;\n const lengthLerp = 0.32;\n const smoothDirX = managed.dirX + (projection.dirX - managed.dirX) * directionLerp;\n const smoothDirY = managed.dirY + (projection.dirY - managed.dirY) * directionLerp;\n const smoothNorm = Math.hypot(smoothDirX, smoothDirY);\n const dirX = smoothNorm > 0.0001 ? smoothDirX / smoothNorm : projection.dirX;\n const dirY = smoothNorm > 0.0001 ? smoothDirY / smoothNorm : projection.dirY;\n const length = managed.length + (projection.length - managed.length) * lengthLerp;\n managed.dirX = dirX;\n managed.dirY = dirY;\n managed.length = length;\n\n const lengthScale = clamp(length / casterHeight, 0.08, 6);\n const widthScale = clamp(0.62 + lengthScale * 0.08, 0.5, 1.2);\n const hardness = clamp(casterConfig.hardness, 0, 1);\n const influenceNorm = clamp(projection.influence, 0, 1.35);\n const alphaBase = clamp(casterConfig.alpha * influenceNorm, 0, 1);\n const blurBase = Math.max(0, casterConfig.blur * (1.15 - hardness * 0.55));\n const gradientPower = clamp(casterConfig.gradientPower + (1 - hardness) * 0.7, 0.2, 8);\n // With anchor.y=1, the silhouette extends along local -Y; rotate that axis to shadow direction.\n const rotation = Math.atan2(dirY, dirX) + Math.PI / 2;\n\n managed.near.texture = casterTexture;\n managed.far.texture = casterTexture;\n managed.contact.texture = casterTexture;\n managed.near.tint = shadowColor;\n managed.far.tint = shadowColor;\n managed.contact.tint = shadowColor;\n managed.near.anchor.set(anchorXForShadow, 1);\n managed.far.anchor.set(anchorXForShadow, 1);\n managed.contact.anchor.set(anchorXForShadow, 1);\n\n managed.near.width = casterWidth * widthScale;\n managed.near.height = casterHeight * Math.max(0.12, lengthScale * 1.06);\n managed.far.width = managed.near.width * 1.02;\n managed.far.height = managed.near.height * 1.22;\n\n managed.near.position.set(footLocal.x, footLocal.y);\n managed.far.position.set(\n footLocal.x + dirX * length * 0.34,\n footLocal.y + dirY * length * 0.34\n );\n managed.contact.position.set(\n footLocal.x + dirX * Math.min(4, length * 0.06),\n footLocal.y + dirY * Math.min(4, length * 0.06)\n );\n managed.near.rotation = rotation;\n managed.far.rotation = rotation;\n managed.contact.rotation = rotation;\n\n managed.near.alpha = clamp(alphaBase * (0.74 + hardness * 0.2), 0, 1);\n managed.far.alpha = clamp(alphaBase * (0.3 + (1 - hardness) * 0.2), 0, 1);\n managed.near.visible = managed.near.alpha > 0.001;\n managed.far.visible = managed.far.alpha > 0.001;\n\n managed.nearBlur.strength = blurBase * (0.72 + (1 - influenceNorm) * 0.45);\n managed.farBlur.strength = blurBase * (1.45 + (1 - influenceNorm) * 1.1);\n managed.nearGradient.setGradient(gradientPower, 0.08);\n managed.farGradient.setGradient(gradientPower + 0.65, 0.03);\n\n const contactAlpha = clamp(casterConfig.contactAlpha * influenceNorm * 0.85, 0, 1);\n const contactWidth = Math.max(\n 4,\n casterWidth * clamp(casterConfig.contactScale * 1.8, 0.25, 1.3)\n );\n const contactHeight = Math.max(\n 2,\n casterHeight * clamp(casterConfig.contactScale * 0.62, 0.08, 0.56)\n );\n managed.contact.width = contactWidth * (0.92 + lengthScale * 0.18);\n managed.contact.height = contactHeight;\n managed.contact.alpha = clamp(contactAlpha * (0.6 + hardness * 0.2), 0, 1);\n managed.contactBlur.strength = blurBase * (0.85 + (1 - hardness) * 0.25);\n managed.contact.visible = managed.contact.alpha > 0.001;\n\n placeBelowCaster(managed);\n};\n\n/**\n * SpriteShadows preset\n *\n * Adds RPG-style projected shadows for sprites tagged with `shadowCaster`.\n * The shadow direction is automatically opposite to the dominant light source.\n *\n * Usage:\n * - Add `<SpriteShadows lights={lights} />` in your scene (preferably inside `Viewport`).\n * - Add `shadowCaster` on any sprite that should cast a shadow.\n */\nexport function SpriteShadows(options: SpriteShadowsProps = {}) {\n const props = useProps(options);\n const lightsSource = () =>\n (props.lights as ReactiveValue<Array<ShadowLightInput | ShadowLight>> | undefined) ??\n (props.sources as ReactiveValue<Array<ShadowLightInput | ShadowLight>> | undefined);\n\n mount((element) => {\n const context = element.props.context;\n const viewport = context?.viewport;\n const target: any = viewport ?? element.parent?.componentInstance;\n if (!target || typeof target.addChild !== \"function\") return;\n const tickSignal = context?.tick;\n\n const managedByCaster = new Map<any, ManagedShadow>();\n let accumulatorMs = 0;\n let forceRefresh = true;\n let tickSubscription: any = null;\n\n const sync = () => {\n const shadowColor = parseColorToNumber(\n resolveReactiveValue(props.shadowColor as ReactiveValue<ColorInput> | undefined)\n );\n const modeRaw = resolveReactiveValue(props.mode as ReactiveValue<ShadowMode> | undefined);\n const mode: ShadowMode = modeRaw === \"blend2\" ? \"blend2\" : DEFAULT_MODE;\n const lights = resolveLights(lightsSource(), target);\n const casters = collectShadowCasters(target);\n const activeCasters = new Set<any>();\n\n for (let i = 0; i < casters.length; i++) {\n const { instance: casterInstance, caster } = casters[i];\n if (!casterInstance || !casterInstance.parent || casterInstance.destroyed) continue;\n activeCasters.add(casterInstance);\n\n let managed = managedByCaster.get(casterInstance);\n if (!managed || managed.parent !== casterInstance.parent) {\n if (managed) destroyManagedShadow(managed);\n managed = createManagedShadow(casterInstance, casterInstance.parent, shadowColor);\n managedByCaster.set(casterInstance, managed);\n }\n\n updateManagedShadow(managed, caster, lights, mode, shadowColor);\n }\n\n for (const [casterInstance, managed] of managedByCaster.entries()) {\n if (\n !activeCasters.has(casterInstance) ||\n !casterInstance ||\n casterInstance.destroyed\n ) {\n destroyManagedShadow(managed);\n managedByCaster.delete(casterInstance);\n }\n }\n };\n\n tickSubscription = tickSignal?.observable?.subscribe((tickArgs: any) => {\n const tickValue = tickArgs?.value ?? tickArgs;\n const deltaTime = Number(tickValue?.deltaTime);\n const frameMs = isFiniteNumber(deltaTime) ? deltaTime : 16.67;\n const updateHzRaw = Number(\n resolveReactiveValue(props.updateHz as ReactiveValue<number> | undefined)\n );\n const updateHz = clamp(\n isFiniteNumber(updateHzRaw) ? updateHzRaw : DEFAULT_UPDATE_HZ,\n 1,\n 120\n );\n const intervalMs = 1000 / updateHz;\n accumulatorMs += frameMs;\n\n if (forceRefresh || accumulatorMs >= intervalMs) {\n accumulatorMs = 0;\n forceRefresh = false;\n sync();\n }\n });\n\n sync();\n\n return () => {\n tickSubscription?.unsubscribe?.();\n for (const managed of managedByCaster.values()) {\n destroyManagedShadow(managed);\n }\n managedByCaster.clear();\n };\n });\n\n return h(Container);\n}\n","import { Container, h, mount, useProps } from \"canvasengine\";\nimport {\n BlurFilter,\n Container as PixiContainer,\n Graphics,\n Sprite as PixiSprite,\n Texture,\n} from \"pixi.js\";\n\ntype ReactiveValue<T> = T | (() => T);\ntype PointLike = { x: number; y: number };\ntype ColorInput = string | number;\ntype FootSide = \"left\" | \"right\";\n\ntype ResolvedSurfaceProfile = {\n lifetimeMs: number;\n startAlpha: number;\n endAlpha: number;\n tint: number;\n blendMode: any;\n scale: number;\n blurStart: number;\n blurEnd: number;\n erosionStart: number;\n depth: number;\n rimStrength: number;\n};\n\ntype ResolvedCaster = {\n footAnchor: PointLike;\n leftOffset: PointLike;\n rightOffset: PointLike;\n minStepDistance: number;\n minSpeed: number;\n stepIntervalMs: number;\n size: number;\n alpha: number;\n blur: number;\n surface: string;\n angleOffset: number;\n jitter: number;\n};\n\ntype ManagedCasterState = {\n lastPoint: PointLike | null;\n lastUpdateMs: number;\n distanceSinceStep: number;\n lastStepMs: number;\n nextFoot: FootSide;\n heading: number;\n};\n\ntype ManagedFootprint = {\n baseSprite: PixiSprite;\n depthSprite: PixiSprite;\n rimSprite: PixiSprite;\n baseBlurFilter: BlurFilter;\n depthBlurFilter: BlurFilter;\n rimBlurFilter: BlurFilter;\n bornAt: number;\n lifetimeMs: number;\n startAlpha: number;\n endAlpha: number;\n baseScaleX: number;\n baseScaleY: number;\n blurStart: number;\n blurEnd: number;\n erosionStart: number;\n depth: number;\n rimStrength: number;\n};\n\nexport type FootprintSurfaceProfile = {\n lifetimeMs?: ReactiveValue<number>;\n startAlpha?: ReactiveValue<number>;\n endAlpha?: ReactiveValue<number>;\n tint?: ReactiveValue<ColorInput>;\n blendMode?: ReactiveValue<any>;\n scale?: ReactiveValue<number>;\n blurStart?: ReactiveValue<number>;\n blurEnd?: ReactiveValue<number>;\n erosionStart?: ReactiveValue<number>;\n depth?: ReactiveValue<number>;\n rimStrength?: ReactiveValue<number>;\n};\n\nexport type FootprintCasterOptions = {\n enabled?: ReactiveValue<boolean>;\n footAnchor?: ReactiveValue<PointLike>;\n leftOffset?: ReactiveValue<PointLike>;\n rightOffset?: ReactiveValue<PointLike>;\n minStepDistance?: ReactiveValue<number>;\n minSpeed?: ReactiveValue<number>;\n stepIntervalMs?: ReactiveValue<number>;\n size?: ReactiveValue<number>;\n alpha?: ReactiveValue<number>;\n blur?: ReactiveValue<number>;\n surface?: ReactiveValue<string>;\n angleOffset?: ReactiveValue<number>;\n jitter?: ReactiveValue<number>;\n};\n\nexport type FootprintsProps = {\n profiles?: ReactiveValue<Record<string, FootprintSurfaceProfile>>;\n defaultSurface?: ReactiveValue<string>;\n maxFootprints?: ReactiveValue<number>;\n updateHz?: ReactiveValue<number>;\n};\n\nconst FOOTPRINT_MANAGED_MARK = \"__footprintManaged\";\nconst DEFAULT_SURFACE = \"default\";\nconst DEFAULT_UPDATE_HZ = 30;\nconst DEFAULT_MAX_FOOTPRINTS = 260;\n\nconst DEFAULT_CASTER: ResolvedCaster = {\n footAnchor: { x: 0.5, y: 1 },\n leftOffset: { x: -10, y: 1 },\n rightOffset: { x: 10, y: 1 },\n minStepDistance: 18,\n minSpeed: 36,\n stepIntervalMs: 85,\n size: 1,\n alpha: 1,\n blur: 0,\n surface: DEFAULT_SURFACE,\n angleOffset: 0,\n jitter: 8,\n};\n\nconst BASE_PROFILE: ResolvedSurfaceProfile = {\n lifetimeMs: 1800,\n startAlpha: 0.32,\n endAlpha: 0,\n tint: 0x2d2a26,\n blendMode: \"multiply\",\n scale: 1,\n blurStart: 0.45,\n blurEnd: 1.9,\n erosionStart: 0.54,\n depth: 0.58,\n rimStrength: 0.14,\n};\n\nconst BUILTIN_PROFILES: Record<string, ResolvedSurfaceProfile> = {\n [DEFAULT_SURFACE]: BASE_PROFILE,\n sand: {\n lifetimeMs: 1650,\n startAlpha: 0.31,\n endAlpha: 0,\n tint: 0x8e6d46,\n blendMode: \"multiply\",\n scale: 1,\n blurStart: 0.35,\n blurEnd: 1.5,\n erosionStart: 0.62,\n depth: 0.54,\n rimStrength: 0.12,\n },\n snow: {\n lifetimeMs: 2550,\n startAlpha: 0.24,\n endAlpha: 0,\n tint: 0x7d8fa3,\n blendMode: \"multiply\",\n scale: 1.05,\n blurStart: 0.6,\n blurEnd: 2.25,\n erosionStart: 0.45,\n depth: 0.72,\n rimStrength: 0.28,\n },\n};\n\nconst clamp = (value: number, min: number, max: number) =>\n Math.max(min, Math.min(max, value));\n\nconst lerp = (start: number, end: number, t: number) => start + (end - start) * t;\n\nconst smoothstep = (edge0: number, edge1: number, x: number) => {\n const t = clamp((x - edge0) / Math.max(0.0001, edge1 - edge0), 0, 1);\n return t * t * (3 - 2 * t);\n};\n\nconst isFiniteNumber = (value: unknown): value is number =>\n typeof value === \"number\" && Number.isFinite(value);\n\nconst toggleFoot = (foot: FootSide): FootSide => (foot === \"left\" ? \"right\" : \"left\");\n\nconst degToRad = (degrees: number) => (degrees * Math.PI) / 180;\n\nconst resolveReactiveValue = <T>(value: ReactiveValue<T> | undefined): T | undefined => {\n if (\n value &&\n typeof value === \"object\" &&\n \"value\" in (value as Record<string, unknown>) &&\n Object.keys(value as Record<string, unknown>).length <= 2\n ) {\n return (value as Record<string, T>).value;\n }\n if (typeof value === \"function\") {\n try {\n return (value as () => T)();\n } catch {\n return undefined;\n }\n }\n return value;\n};\n\nconst parseColorToNumber = (color: ColorInput | undefined, fallback: number): number => {\n if (typeof color === \"number\" && Number.isFinite(color)) {\n return Math.max(0, Math.floor(color)) & 0xffffff;\n }\n if (typeof color === \"string\") {\n const cleaned = color.trim().replace(/^#/, \"\");\n const normalized =\n cleaned.length === 3\n ? `${cleaned[0]}${cleaned[0]}${cleaned[1]}${cleaned[1]}${cleaned[2]}${cleaned[2]}`\n : cleaned;\n const parsed = parseInt(normalized, 16);\n if (Number.isFinite(parsed)) {\n return parsed & 0xffffff;\n }\n }\n return fallback;\n};\n\nconst darkenColor = (color: number, amount: number): number => {\n const normalized = clamp(amount, 0, 1);\n const r = Math.round(((color >> 16) & 0xff) * (1 - normalized));\n const g = Math.round(((color >> 8) & 0xff) * (1 - normalized));\n const b = Math.round((color & 0xff) * (1 - normalized));\n return (r << 16) | (g << 8) | b;\n};\n\nconst lightenColor = (color: number, amount: number): number => {\n const normalized = clamp(amount, 0, 1);\n const r = Math.round(((color >> 16) & 0xff) + (255 - ((color >> 16) & 0xff)) * normalized);\n const g = Math.round(((color >> 8) & 0xff) + (255 - ((color >> 8) & 0xff)) * normalized);\n const b = Math.round((color & 0xff) + (255 - (color & 0xff)) * normalized);\n return (r << 16) | (g << 8) | b;\n};\n\nconst resolvePoint = (value: ReactiveValue<PointLike> | undefined, fallback: PointLike): PointLike => {\n const resolved = resolveReactiveValue(value);\n const x = Number((resolved as PointLike | undefined)?.x);\n const y = Number((resolved as PointLike | undefined)?.y);\n return {\n x: isFiniteNumber(x) ? x : fallback.x,\n y: isFiniteNumber(y) ? y : fallback.y,\n };\n};\n\nconst toGlobalPoint = (container: any, point: PointLike): PointLike => {\n if (container && typeof container.toGlobal === \"function\") {\n const globalPoint = container.toGlobal(point);\n if (isFiniteNumber(globalPoint?.x) && isFiniteNumber(globalPoint?.y)) {\n return { x: globalPoint.x, y: globalPoint.y };\n }\n }\n return point;\n};\n\nconst toLocalPoint = (container: any, point: PointLike): PointLike => {\n if (container && typeof container.toLocal === \"function\") {\n const localPoint = container.toLocal(point);\n if (isFiniteNumber(localPoint?.x) && isFiniteNumber(localPoint?.y)) {\n return { x: localPoint.x, y: localPoint.y };\n }\n }\n return point;\n};\n\nconst resolveProfileInput = (\n source: FootprintSurfaceProfile | undefined,\n fallback: ResolvedSurfaceProfile\n): ResolvedSurfaceProfile => {\n const lifetimeMs = Number(resolveReactiveValue(source?.lifetimeMs));\n const startAlpha = Number(resolveReactiveValue(source?.startAlpha));\n const endAlpha = Number(resolveReactiveValue(source?.endAlpha));\n const scale = Number(resolveReactiveValue(source?.scale));\n const blurStart = Number(resolveReactiveValue(source?.blurStart));\n const blurEnd = Number(resolveReactiveValue(source?.blurEnd));\n const erosionStart = Number(resolveReactiveValue(source?.erosionStart));\n const depth = Number(resolveReactiveValue(source?.depth));\n const rimStrength = Number(resolveReactiveValue(source?.rimStrength));\n const tintInput = resolveReactiveValue(source?.tint);\n const blendInput = resolveReactiveValue(source?.blendMode);\n\n return {\n lifetimeMs: isFiniteNumber(lifetimeMs) ? Math.max(120, lifetimeMs) : fallback.lifetimeMs,\n startAlpha: isFiniteNumber(startAlpha) ? clamp(startAlpha, 0, 1.5) : fallback.startAlpha,\n endAlpha: isFiniteNumber(endAlpha) ? clamp(endAlpha, 0, 1.5) : fallback.endAlpha,\n tint: parseColorToNumber(tintInput, fallback.tint),\n blendMode: blendInput ?? fallback.blendMode,\n scale: isFiniteNumber(scale) ? Math.max(0.05, scale) : fallback.scale,\n blurStart: isFiniteNumber(blurStart) ? Math.max(0, blurStart) : fallback.blurStart,\n blurEnd: isFiniteNumber(blurEnd) ? Math.max(0, blurEnd) : fallback.blurEnd,\n erosionStart: isFiniteNumber(erosionStart)\n ? clamp(erosionStart, 0.05, 0.95)\n : fallback.erosionStart,\n depth: isFiniteNumber(depth) ? clamp(depth, 0, 1) : fallback.depth,\n rimStrength: isFiniteNumber(rimStrength)\n ? clamp(rimStrength, 0, 1)\n : fallback.rimStrength,\n };\n};\n\nconst resolveProfilesMap = (\n value: ReactiveValue<Record<string, FootprintSurfaceProfile>> | undefined\n): Record<string, ResolvedSurfaceProfile> => {\n const userProfiles = resolveReactiveValue(value) ?? {};\n const resolved: Record<string, ResolvedSurfaceProfile> = {};\n\n for (const [name, profile] of Object.entries(BUILTIN_PROFILES)) {\n resolved[name] = resolveProfileInput((userProfiles as any)[name], profile);\n }\n\n for (const [name, profile] of Object.entries(userProfiles)) {\n if (resolved[name]) continue;\n resolved[name] = resolveProfileInput(profile, BASE_PROFILE);\n }\n\n if (!resolved[DEFAULT_SURFACE]) {\n resolved[DEFAULT_SURFACE] = BASE_PROFILE;\n }\n\n return resolved;\n};\n\nconst resolveCasterOptions = (\n rawValue: unknown,\n defaultSurface: string\n): ResolvedCaster | null => {\n if (rawValue === false || rawValue === null || rawValue === undefined) return null;\n const source: FootprintCasterOptions =\n rawValue === true || typeof rawValue !== \"object\"\n ? {}\n : (rawValue as FootprintCasterOptions);\n\n const enabled = resolveReactiveValue(source.enabled);\n if (enabled === false) return null;\n\n const minStepDistance = Number(resolveReactiveValue(source.minStepDistance));\n const minSpeed = Number(resolveReactiveValue(source.minSpeed));\n const stepIntervalMs = Number(resolveReactiveValue(source.stepIntervalMs));\n const size = Number(resolveReactiveValue(source.size));\n const alpha = Number(resolveReactiveValue(source.alpha));\n const blur = Number(resolveReactiveValue(source.blur));\n const angleOffset = Number(resolveReactiveValue(source.angleOffset));\n const jitter = Number(resolveReactiveValue(source.jitter));\n const surfaceRaw = resolveReactiveValue(source.surface);\n\n return {\n footAnchor: resolvePoint(source.footAnchor, DEFAULT_CASTER.footAnchor),\n leftOffset: resolvePoint(source.leftOffset, DEFAULT_CASTER.leftOffset),\n rightOffset: resolvePoint(source.rightOffset, DEFAULT_CASTER.rightOffset),\n minStepDistance: isFiniteNumber(minStepDistance)\n ? Math.max(2, minStepDistance)\n : DEFAULT_CASTER.minStepDistance,\n minSpeed: isFiniteNumber(minSpeed) ? Math.max(0, minSpeed) : DEFAULT_CASTER.minSpeed,\n stepIntervalMs: isFiniteNumber(stepIntervalMs)\n ? Math.max(0, stepIntervalMs)\n : DEFAULT_CASTER.stepIntervalMs,\n size: isFiniteNumber(size) ? Math.max(0.1, size) : DEFAULT_CASTER.size,\n alpha: isFiniteNumber(alpha) ? clamp(alpha, 0, 2) : DEFAULT_CASTER.alpha,\n blur: isFiniteNumber(blur) ? Math.max(0, blur) : DEFAULT_CASTER.blur,\n surface:\n typeof surfaceRaw === \"string\" && surfaceRaw.trim().length > 0\n ? surfaceRaw.trim()\n : defaultSurface,\n angleOffset: isFiniteNumber(angleOffset) ? angleOffset : DEFAULT_CASTER.angleOffset,\n jitter: isFiniteNumber(jitter) ? Math.max(0, jitter) : DEFAULT_CASTER.jitter,\n };\n};\n\nconst resolveCasterFromInstance = (\n instance: any,\n defaultSurface: string\n): ResolvedCaster | null => {\n if (!instance || instance[FOOTPRINT_MANAGED_MARK]) return null;\n const element = typeof instance.getElement === \"function\" ? instance.getElement() : null;\n const rawFootprintCaster =\n resolveReactiveValue((instance as any).footprintCaster) ??\n resolveReactiveValue((instance as any).fullProps?.footprintCaster) ??\n resolveReactiveValue(element?.props?.footprintCaster) ??\n resolveReactiveValue(element?.propObservables?.footprintCaster as any);\n if (rawFootprintCaster === undefined) return null;\n return resolveCasterOptions(rawFootprintCaster, defaultSurface);\n};\n\nconst collectFootprintCasters = (\n root: any,\n defaultSurface: string\n): Array<{ instance: any; caster: ResolvedCaster }> => {\n const collected: Array<{ instance: any; caster: ResolvedCaster }> = [];\n const stack: any[] = [root];\n\n while (stack.length > 0) {\n const node = stack.pop();\n const children = Array.isArray(node?.children) ? node.children : [];\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (!child || child[FOOTPRINT_MANAGED_MARK]) continue;\n\n const caster = resolveCasterFromInstance(child, defaultSurface);\n if (caster && child.parent) {\n collected.push({ instance: child, caster });\n }\n\n if (Array.isArray(child.children) && child.children.length > 0) {\n stack.push(child);\n }\n }\n }\n\n return collected;\n};\n\nconst resolveRenderer = (context: any): any => {\n const appSignal = context?.app;\n if (typeof appSignal === \"function\") {\n try {\n const app = appSignal();\n if (app?.renderer && typeof app.renderer.generateTexture === \"function\") {\n return app.renderer;\n }\n } catch {\n // Ignore and use fallback.\n }\n }\n const globalRenderer = (globalThis as any).__PIXI_RENDERER__;\n if (globalRenderer && typeof globalRenderer.generateTexture === \"function\") {\n return globalRenderer;\n }\n return null;\n};\n\nconst createFootprintTexture = (renderer: any): Texture => {\n const graphics = new Graphics();\n\n graphics.ellipse(0, 10, 8.4, 6.1).fill(0xffffff);\n graphics.ellipse(0, -1.4, 6.8, 9.4).fill(0xffffff);\n graphics.circle(-4.7, -12.8, 2).fill(0xffffff);\n graphics.circle(-1.5, -14.6, 1.9).fill(0xffffff);\n graphics.circle(1.5, -15.3, 1.75).fill(0xffffff);\n graphics.circle(4.5, -14.1, 1.45).fill(0xffffff);\n\n const texture = renderer.generateTexture(graphics);\n graphics.destroy();\n\n return texture;\n};\n\nconst resolveCasterBasePoint = (\n caster: any,\n parent: PixiContainer,\n casterConfig: ResolvedCaster\n): PointLike => {\n const bounds = typeof caster.getBounds === \"function\" ? caster.getBounds() : null;\n const width = Math.max(\n 1,\n Math.abs(Number(caster.width)) || Math.abs(Number(bounds?.width)) || 1\n );\n const height = Math.max(\n 1,\n Math.abs(Number(caster.height)) || Math.abs(Number(bounds?.height)) || 1\n );\n\n const anchorXRaw = Number(caster.anchor?.x);\n const anchorYRaw = Number(caster.anchor?.y);\n const anchorX = isFiniteNumber(anchorXRaw) ? clamp(anchorXRaw, 0, 1) : 0.5;\n const anchorY = isFiniteNumber(anchorYRaw) ? clamp(anchorYRaw, 0, 1) : 1;\n\n const local = {\n x: (casterConfig.footAnchor.x - anchorX) * width,\n y: (casterConfig.footAnchor.y - anchorY) * height,\n };\n\n const global = toGlobalPoint(caster, local);\n return toLocalPoint(parent, global);\n};\n\nconst placeBelowCaster = (\n managed: ManagedFootprint,\n caster: any,\n parent: PixiContainer\n) => {\n const casterZIndex = isFiniteNumber(caster?.zIndex) ? caster.zIndex : 0;\n managed.rimSprite.zIndex = casterZIndex - 0.2;\n managed.baseSprite.zIndex = casterZIndex - 0.18;\n managed.depthSprite.zIndex = casterZIndex - 0.16;\n\n if ((parent as any).sortableChildren) return;\n if (!Array.isArray(parent.children)) return;\n if (!parent.children.includes(caster)) return;\n\n const ordered = [managed.rimSprite, managed.baseSprite, managed.depthSprite];\n for (let i = 0; i < ordered.length; i++) {\n const sprite = ordered[i];\n if (!parent.children.includes(sprite)) continue;\n const casterIndex = parent.getChildIndex(caster);\n const targetIndex = Math.max(0, casterIndex - 1);\n if (parent.getChildIndex(sprite) !== targetIndex) {\n parent.setChildIndex(sprite, targetIndex);\n }\n }\n};\n\n/**\n * Footprints preset\n *\n * Adds fading footprints behind moving sprites tagged with `footprintCaster`.\n * Footprints are generated procedurally (no image required) and can be tuned\n * per surface profile (for example `sand` and `snow`).\n */\nexport function Footprints(options: FootprintsProps = {}) {\n const props = useProps(options);\n\n mount((element) => {\n const context = element.props.context;\n const viewport = context?.viewport;\n const target: any = viewport ?? element.parent?.componentInstance;\n if (!target || typeof target.addChild !== \"function\") return;\n const tickSignal = context?.tick;\n\n const casterState = new Map<any, ManagedCasterState>();\n const activeFootprints: ManagedFootprint[] = [];\n const freeFootprints: ManagedFootprint[] = [];\n\n let accumulatorMs = 0;\n let elapsedMs = 0;\n let forceRefresh = true;\n let tickSubscription: any = null;\n let footprintTexture: Texture | null = null;\n\n const ensureTexture = (): Texture | null => {\n if (footprintTexture && !footprintTexture.destroyed) return footprintTexture;\n const renderer = resolveRenderer(context);\n if (!renderer) return null;\n footprintTexture = createFootprintTexture(renderer);\n return footprintTexture;\n };\n\n const releaseFootprint = (managed: ManagedFootprint) => {\n const sprites = [managed.baseSprite, managed.depthSprite, managed.rimSprite];\n for (let i = 0; i < sprites.length; i++) {\n const sprite = sprites[i];\n sprite.visible = false;\n sprite.alpha = 0;\n if (sprite.parent) {\n sprite.parent.removeChild(sprite);\n }\n }\n freeFootprints.push(managed);\n };\n\n const destroyFootprint = (managed: ManagedFootprint) => {\n const sprites = [managed.baseSprite, managed.depthSprite, managed.rimSprite];\n for (let i = 0; i < sprites.length; i++) {\n const sprite = sprites[i];\n if (sprite.parent) {\n sprite.parent.removeChild(sprite);\n }\n sprite.destroy();\n }\n };\n\n const acquireFootprint = (texture: Texture): ManagedFootprint => {\n let managed = freeFootprints.pop();\n if (!managed) {\n const baseSprite = new PixiSprite(texture);\n const depthSprite = new PixiSprite(texture);\n const rimSprite = new PixiSprite(texture);\n\n const baseBlurFilter = new BlurFilter({ strength: 0, quality: 1 });\n const depthBlurFilter = new BlurFilter({ strength: 0, quality: 1 });\n const rimBlurFilter = new BlurFilter({ strength: 0, quality: 1 });\n\n const sprites = [baseSprite, depthSprite, rimSprite];\n for (let i = 0; i < sprites.length; i++) {\n const sprite = sprites[i];\n sprite.anchor.set(0.5, 0.84);\n sprite.roundPixels = true;\n sprite.eventMode = \"none\";\n sprite.visible = false;\n (sprite as any)[FOOTPRINT_MANAGED_MARK] = true;\n }\n\n baseSprite.filters = [baseBlurFilter];\n depthSprite.filters = [depthBlurFilter];\n rimSprite.filters = [rimBlurFilter];\n depthSprite.blendMode = \"multiply\" as any;\n rimSprite.blendMode = \"screen\" as any;\n\n managed = {\n baseSprite,\n depthSprite,\n rimSprite,\n baseBlurFilter,\n depthBlurFilter,\n rimBlurFilter,\n bornAt: 0,\n lifetimeMs: BASE_PROFILE.lifetimeMs,\n startAlpha: BASE_PROFILE.startAlpha,\n endAlpha: BASE_PROFILE.endAlpha,\n baseScaleX: 1,\n baseScaleY: 1,\n blurStart: BASE_PROFILE.blurStart,\n blurEnd: BASE_PROFILE.blurEnd,\n erosionStart: BASE_PROFILE.erosionStart,\n depth: BASE_PROFILE.depth,\n rimStrength: BASE_PROFILE.rimStrength,\n };\n } else {\n managed.baseSprite.texture = texture;\n managed.depthSprite.texture = texture;\n managed.rimSprite.texture = texture;\n }\n\n return managed;\n };\n\n const trimOverflow = (maxFootprints: number) => {\n while (activeFootprints.length > maxFootprints) {\n const oldest = activeFootprints.shift();\n if (!oldest) break;\n releaseFootprint(oldest);\n }\n };\n\n const updateActiveFootprints = (nowMs: number) => {\n for (let i = activeFootprints.length - 1; i >= 0; i--) {\n const managed = activeFootprints[i];\n const baseSprite = managed.baseSprite;\n const depthSprite = managed.depthSprite;\n const rimSprite = managed.rimSprite;\n\n if (\n !baseSprite ||\n !depthSprite ||\n !rimSprite ||\n baseSprite.destroyed ||\n depthSprite.destroyed ||\n rimSprite.destroyed\n ) {\n activeFootprints.splice(i, 1);\n continue;\n }\n\n const t = clamp((nowMs - managed.bornAt) / Math.max(1, managed.lifetimeMs), 0, 1);\n const fade = 1 - smoothstep(0, 1, t);\n const erosion =\n t <= managed.erosionStart ? 1 : 1 - smoothstep(managed.erosionStart, 1, t);\n const alpha = clamp(lerp(managed.startAlpha, managed.endAlpha, t) * fade * erosion, 0, 1.5);\n\n if (t >= 1 || alpha <= 0.001) {\n activeFootprints.splice(i, 1);\n releaseFootprint(managed);\n continue;\n }\n\n const spread = 1 + t * 0.08;\n const depthSpread = 1 + t * 0.05;\n const rimSpread = 1 + t * 0.12;\n const depthScaleMul = 0.78 - managed.depth * 0.1;\n const rimScaleMul = 1.05 + managed.depth * 0.12;\n\n baseSprite.scale.set(managed.baseScaleX * spread, managed.baseScaleY * spread);\n depthSprite.scale.set(\n managed.baseScaleX * depthScaleMul * depthSpread,\n managed.baseScaleY * depthScaleMul * depthSpread\n );\n rimSprite.scale.set(\n managed.baseScaleX * rimScaleMul * rimSpread,\n managed.baseScaleY * rimScaleMul * rimSpread\n );\n\n baseSprite.alpha = alpha;\n depthSprite.alpha = clamp(alpha * (0.58 + managed.depth * 0.34), 0, 1.2);\n rimSprite.alpha = clamp(alpha * managed.rimStrength, 0, 0.65);\n\n managed.baseBlurFilter.strength = lerp(managed.blurStart, managed.blurEnd, t);\n managed.depthBlurFilter.strength = lerp(\n managed.blurStart * (0.45 + (1 - managed.depth) * 0.25),\n managed.blurEnd * (0.72 + (1 - managed.depth) * 0.22),\n t\n );\n managed.rimBlurFilter.strength = lerp(\n managed.blurStart * 0.8,\n managed.blurEnd * (1.28 + managed.depth * 0.24),\n t\n );\n\n baseSprite.visible = true;\n depthSprite.visible = true;\n rimSprite.visible = rimSprite.alpha > 0.001;\n }\n };\n\n const emitFootprint = (\n casterInstance: any,\n casterConfig: ResolvedCaster,\n state: ManagedCasterState,\n profile: ResolvedSurfaceProfile,\n nowMs: number,\n maxFootprints: number\n ) => {\n const texture = ensureTexture();\n const parent = casterInstance.parent as PixiContainer | null;\n if (!texture || !parent || parent.destroyed) return;\n\n const basePoint = resolveCasterBasePoint(casterInstance, parent, casterConfig);\n const offset = state.nextFoot === \"left\" ? casterConfig.leftOffset : casterConfig.rightOffset;\n\n const heading = state.heading;\n const rightX = -Math.sin(heading);\n const rightY = Math.cos(heading);\n const forwardX = Math.cos(heading);\n const forwardY = Math.sin(heading);\n\n const x = basePoint.x + rightX * offset.x + forwardX * offset.y;\n const y = basePoint.y + rightY * offset.x + forwardY * offset.y;\n\n const managed = acquireFootprint(texture);\n const sprites = [managed.rimSprite, managed.baseSprite, managed.depthSprite];\n for (let i = 0; i < sprites.length; i++) {\n const sprite = sprites[i];\n if (sprite.parent && sprite.parent !== parent) {\n sprite.parent.removeChild(sprite);\n }\n if (!sprite.parent) {\n parent.addChild(sprite);\n }\n }\n\n const jitterRad = degToRad(casterConfig.jitter);\n const randomJitter = (Math.random() * 2 - 1) * jitterRad;\n const angleOffsetRad = degToRad(casterConfig.angleOffset);\n const rotation = heading - Math.PI / 2 + angleOffsetRad + randomJitter;\n const profileScale = profile.scale * casterConfig.size;\n const scaleX = (state.nextFoot === \"left\" ? 1 : -1) * Math.max(0.01, profileScale);\n const scaleY = Math.max(0.01, profileScale);\n const baseAlpha = clamp(profile.startAlpha * casterConfig.alpha, 0, 1.5);\n const depthTint = darkenColor(profile.tint, 0.38 + profile.depth * 0.26);\n const rimTint = lightenColor(profile.tint, 0.22 + profile.depth * 0.38);\n\n managed.baseSprite.position.set(x, y);\n managed.depthSprite.position.set(x, y);\n managed.rimSprite.position.set(x, y);\n managed.baseSprite.rotation = rotation;\n managed.depthSprite.rotation = rotation;\n managed.rimSprite.rotation = rotation;\n managed.baseSprite.scale.set(scaleX, scaleY);\n managed.depthSprite.scale.set(scaleX * 0.82, scaleY * 0.82);\n managed.rimSprite.scale.set(scaleX * 1.08, scaleY * 1.08);\n managed.baseSprite.tint = profile.tint;\n managed.depthSprite.tint = depthTint;\n managed.rimSprite.tint = rimTint;\n managed.baseSprite.blendMode = profile.blendMode as any;\n managed.baseSprite.alpha = baseAlpha;\n managed.depthSprite.alpha = clamp(baseAlpha * (0.58 + profile.depth * 0.34), 0, 1.2);\n managed.rimSprite.alpha = clamp(baseAlpha * profile.rimStrength, 0, 0.65);\n managed.baseSprite.visible = true;\n managed.depthSprite.visible = true;\n managed.rimSprite.visible = managed.rimSprite.alpha > 0.001;\n\n placeBelowCaster(managed, casterInstance, parent);\n\n managed.bornAt = nowMs;\n managed.lifetimeMs = profile.lifetimeMs;\n managed.startAlpha = baseAlpha;\n managed.endAlpha = clamp(profile.endAlpha * casterConfig.alpha, 0, 1.5);\n managed.baseScaleX = scaleX;\n managed.baseScaleY = scaleY;\n managed.blurStart = Math.max(0, profile.blurStart + casterConfig.blur);\n managed.blurEnd = Math.max(managed.blurStart, profile.blurEnd + casterConfig.blur);\n managed.depth = profile.depth;\n managed.rimStrength = profile.rimStrength;\n managed.erosionStart = clamp(\n profile.erosionStart + (Math.random() * 2 - 1) * 0.11,\n 0.05,\n 0.95\n );\n managed.baseBlurFilter.strength = managed.blurStart;\n managed.depthBlurFilter.strength = managed.blurStart * (0.45 + (1 - profile.depth) * 0.25);\n managed.rimBlurFilter.strength = managed.blurStart * 0.8;\n\n activeFootprints.push(managed);\n trimOverflow(maxFootprints);\n\n state.nextFoot = toggleFoot(state.nextFoot);\n state.lastStepMs = nowMs;\n state.distanceSinceStep = Math.max(0, state.distanceSinceStep - casterConfig.minStepDistance);\n };\n\n const sync = (nowMs: number) => {\n const defaultSurfaceRaw = resolveReactiveValue(props.defaultSurface as ReactiveValue<string> | undefined);\n const defaultSurface =\n typeof defaultSurfaceRaw === \"string\" && defaultSurfaceRaw.trim().length > 0\n ? defaultSurfaceRaw.trim()\n : DEFAULT_SURFACE;\n\n const profileMap = resolveProfilesMap(\n props.profiles as ReactiveValue<Record<string, FootprintSurfaceProfile>> | undefined\n );\n\n const maxFootprintsRaw = Number(\n resolveReactiveValue(props.maxFootprints as ReactiveValue<number> | undefined)\n );\n const maxFootprints = clamp(\n isFiniteNumber(maxFootprintsRaw) ? maxFootprintsRaw : DEFAULT_MAX_FOOTPRINTS,\n 10,\n 1200\n );\n\n const casters = collectFootprintCasters(target, defaultSurface);\n const activeCasters = new Set<any>();\n\n for (let i = 0; i < casters.length; i++) {\n const { instance: casterInstance, caster } = casters[i];\n if (!casterInstance || casterInstance.destroyed || !casterInstance.parent) continue;\n\n activeCasters.add(casterInstance);\n\n let state = casterState.get(casterInstance);\n if (!state) {\n state = {\n lastPoint: null,\n lastUpdateMs: nowMs,\n distanceSinceStep: 0,\n lastStepMs: -Infinity,\n nextFoot: \"left\",\n heading: Number(casterInstance.rotation) || 0,\n };\n casterState.set(casterInstance, state);\n }\n\n const parent = casterInstance.parent as PixiContainer;\n const basePoint = resolveCasterBasePoint(casterInstance, parent, caster);\n\n if (!state.lastPoint) {\n state.lastPoint = basePoint;\n state.lastUpdateMs = nowMs;\n continue;\n }\n\n const deltaMs = Math.max(1, nowMs - state.lastUpdateMs);\n const dx = basePoint.x - state.lastPoint.x;\n const dy = basePoint.y - state.lastPoint.y;\n const distance = Math.hypot(dx, dy);\n\n if (distance > 0.0001) {\n state.heading = Math.atan2(dy, dx);\n }\n\n state.distanceSinceStep += distance;\n const speed = (distance * 1000) / deltaMs;\n const profile = profileMap[caster.surface] ?? profileMap[defaultSurface] ?? BASE_PROFILE;\n\n if (\n speed >= caster.minSpeed &&\n state.distanceSinceStep >= caster.minStepDistance &&\n nowMs - state.lastStepMs >= caster.stepIntervalMs\n ) {\n emitFootprint(casterInstance, caster, state, profile, nowMs, maxFootprints);\n }\n\n state.lastPoint = basePoint;\n state.lastUpdateMs = nowMs;\n }\n\n for (const [casterInstance] of casterState.entries()) {\n if (!activeCasters.has(casterInstance) || casterInstance?.destroyed) {\n casterState.delete(casterInstance);\n }\n }\n\n updateActiveFootprints(nowMs);\n };\n\n tickSubscription = tickSignal?.observable?.subscribe((tickArgs: any) => {\n const tickValue = tickArgs?.value ?? tickArgs;\n const deltaTime = Number(tickValue?.deltaTime);\n const frameMs = isFiniteNumber(deltaTime) ? deltaTime : 16.67;\n\n elapsedMs += frameMs;\n accumulatorMs += frameMs;\n\n const updateHzRaw = Number(resolveReactiveValue(props.updateHz as ReactiveValue<number> | undefined));\n const updateHz = clamp(isFiniteNumber(updateHzRaw) ? updateHzRaw : DEFAULT_UPDATE_HZ, 1, 120);\n const intervalMs = 1000 / updateHz;\n\n if (forceRefresh || accumulatorMs >= intervalMs) {\n accumulatorMs = 0;\n forceRefresh = false;\n sync(elapsedMs);\n }\n });\n\n sync(0);\n\n return () => {\n tickSubscription?.unsubscribe?.();\n\n for (let i = 0; i < activeFootprints.length; i++) {\n destroyFootprint(activeFootprints[i]);\n }\n for (let i = 0; i < freeFootprints.length; i++) {\n destroyFootprint(freeFootprints[i]);\n }\n\n activeFootprints.length = 0;\n freeFootprints.length = 0;\n casterState.clear();\n\n if (footprintTexture && !footprintTexture.destroyed) {\n footprintTexture.destroy(true);\n }\n footprintTexture = null;\n };\n });\n\n return h(Container);\n}\n"],"x_google_ignoreList":[10,11,12,13,14,15,16,17,18],"mappings":"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"}
|