glre 0.25.0 → 0.27.0

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/webgl.ts","../src/utils/helpers.ts","../src/code/glsl.ts","../src/utils/program.ts","../src/code/wgsl.ts","../src/utils/pipeline.ts","../src/webgpu.ts","../src/node/const.ts","../src/node/cache.ts","../src/node/conv.ts","../src/node/node.ts","../src/node/uniform.ts","../src/node/index.ts"],"sourcesContent":["import { durable, event } from 'reev'\nimport { createFrame, createQueue } from 'refr'\nimport { webgl } from './webgl'\nimport { webgpu } from './webgpu'\nimport { is } from './utils/helpers'\nimport type { EventState } from 'reev'\nimport type { GL } from './types'\nexport * from './code/glsl'\nexport * from './code/wgsl'\nexport * from './node'\nexport * from './types'\nexport * from './utils/helpers'\nexport * from './utils/pipeline'\nexport * from './utils/program'\nexport * from './webgl'\nexport * from './webgpu'\n\nexport const isGL = (a: unknown): a is EventState<GL> => {\n if (!is.obj(a)) return false\n if ('isGL' in a) return true\n return false\n}\n\nexport const isServer = () => {\n return typeof window === 'undefined'\n}\n\nexport const isWebGPUSupported = () => {\n if (isServer()) return false\n return 'gpu' in navigator\n}\n\nlet iTime = performance.now()\n\nexport const createGL = (props?: Partial<GL>) => {\n const gl = event<Partial<GL>>({\n isNative: false,\n isWebGL: true,\n isLoop: true,\n isGL: true,\n size: [0, 0],\n mouse: [0, 0],\n count: 3,\n webgl: {},\n webgpu: {},\n }) as EventState<GL>\n\n gl.queue = createQueue()\n gl.frame = createFrame()\n\n gl.attribute = durable((k, v, i) => gl.queue(() => gl._attribute?.(k, v, i)))\n gl.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)))\n gl.uniform = durable((k, v, i) => gl.queue(() => gl._uniform?.(k, v, i)))\n gl.uniform({ iResolution: gl.size, iMouse: [0, 0], iTime })\n\n gl('mount', async () => {\n gl.vs = gl.vs || gl.vert || gl.vertex\n gl.fs = gl.fs || gl.frag || gl.fragment\n if (!isWebGPUSupported()) gl.isWebGL = true\n if (gl.isWebGL) {\n gl((await webgl(gl)) as GL)\n } else gl((await webgpu(gl)) as GL)\n gl.resize()\n gl.frame(() => {\n gl.loop()\n gl.queue.flush()\n gl.render()\n return gl.isLoop\n })\n if (gl.isNative) return\n window.addEventListener('resize', gl.resize)\n gl.el.addEventListener('mousemove', gl.mousemove)\n })\n\n gl('clean', () => {\n gl.frame.stop()\n gl.frame.clean(gl.render)\n if (gl.isNative) return\n window.removeEventListener('resize', gl.resize)\n gl.el.removeEventListener('mousemove', gl.mousemove)\n })\n\n gl('resize', () => {\n const w = gl.width || window.innerWidth\n const h = gl.height || window.innerHeight\n gl.size[0] = gl.el.width = w\n gl.size[1] = gl.el.height = h\n gl.uniform('iResolution', gl.size)\n })\n\n gl('mousemove', (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = gl.size\n const { top, left } = gl.el.getBoundingClientRect()\n gl.mouse[0] = (x - top - w / 2) / (w / 2)\n gl.mouse[1] = -(y - left - h / 2) / (h / 2)\n gl.uniform('iMouse', gl.mouse)\n })\n\n gl('loop', () => {\n iTime = performance.now() / 1000\n gl.uniform('iTime', iTime)\n })\n\n return gl(props)\n}\n\nexport default createGL\n","import { nested as cached } from 'reev'\nimport { is } from './utils/helpers'\nimport { createAttrib, createIbo, createProgram, createTexture, createVbo, getStride } from './utils/program'\nimport type { GL, WebGLState } from './types'\n\nexport const webgl = async (gl: Partial<GL>) => {\n const c = gl.el!.getContext('webgl2')!\n const pg = createProgram(c, gl.vs, gl.fs)\n const state = { context: c, program: pg } as WebGLState\n c.useProgram(pg)\n\n let _activeUnit = 0\n const activeUnits = cached(() => _activeUnit++)\n\n const uniformLocations = cached((key) => c.getUniformLocation(pg, key))\n const attribLocations = cached((key) => c.getAttribLocation(pg, key))\n\n const clean = () => c.deleteProgram(pg)\n\n const render = () => {\n c.clear(c.COLOR_BUFFER_BIT)\n c.viewport(0, 0, ...gl.size!)\n c.drawArrays(c.TRIANGLES, 0, 3)\n }\n\n const _attribute = (key = '', value: number[], iboValue: number[]) => {\n const loc = attribLocations(key, true)\n const vbo = createVbo(c, value)\n const ibo = createIbo(c, iboValue)\n const str = getStride(gl.count!, value, iboValue)\n createAttrib(c, str, loc, vbo, ibo)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n const loc = uniformLocations(key)\n if (is.num(value)) return c.uniform1f(loc, value)\n let l = value.length\n if (l <= 4) return c[`uniform${l as 2}fv`](loc, value)\n l = Math.sqrt(l) << 0\n c[`uniformMatrix${l as 2}fv`](loc, false, value)\n }\n\n const _texture = (alt: string, src: string) => {\n const image = new Image()\n Object.assign(image, { src, alt, crossOrigin: 'anonymous' })\n image.decode().then(() => {\n const loc = uniformLocations(image.alt)\n const unit = activeUnits(image.alt)\n createTexture(c, image, loc, unit)\n })\n }\n\n return { webgl: state, render, clean, _attribute, _uniform, _texture }\n}\n","export const is = {\n arr: Array.isArray,\n bol: (a: unknown): a is boolean => typeof a === 'boolean',\n str: (a: unknown): a is string => typeof a === 'string',\n num: (a: unknown): a is number => typeof a === 'number',\n int: (a: unknown): a is number => Number.isInteger(a),\n fun: (a: unknown): a is Function => typeof a === 'function',\n und: (a: unknown): a is undefined => typeof a === 'undefined',\n nul: (a: unknown): a is null => a === null,\n set: (a: unknown): a is Set<unknown> => a instanceof Set,\n map: (a: unknown): a is Map<unknown, unknown> => a instanceof Map,\n obj: (a: unknown): a is object => !!a && a.constructor.name === 'Object',\n nan: (a: unknown): a is number => typeof a === 'number' && Number.isNaN(a),\n}\n\n/**\n * each\n */\ntype EachFn<Value, Key, This> = (this: This, value: Value, key: Key) => void\ntype Eachable<Value = any, Key = any, This = any> = {\n forEach(cb: EachFn<Value, Key, This>, ctx?: This): void\n}\n\nexport const each = <Value, Key, This>(obj: Eachable<Value, Key, This>, fn: EachFn<Value, Key, This>) => obj.forEach(fn)\n\nexport const flush = <Value extends Function, Key, This>(obj: Eachable<Value, Key, This>, ...args: any[]) => {\n each(obj, (f) => f(...args))\n}\n\n/**\n * other\n */\nexport const replace = (x = '', from = '_', to = '/') => x.split(from).join(to)\nexport const ext = (src = '.pdf') => src.split('.').pop()?.toLowerCase() ?? ''\nexport const fig = (x = 0) => `${x}`.split('.')[1]?.length ?? 0\nexport const dig = (x = 0) => `${x}`.split('.')[0]?.length - (x < 0 ? 1 : 0)\nexport const sig = (value = 0, digit = -2) => {\n digit *= -1\n digit = Math.pow(10, digit)\n value *= digit\n value = Math.round(value)\n value /= digit\n return value\n}\n","import { is } from './../utils/helpers'\nimport type { Node, NodeType, X, ConversionContext } from '../node'\n\n// GLSLコード生成コンテキスト\ninterface GLSLContext extends ConversionContext {\n target: 'webgl'\n precision: 'lowp' | 'mediump' | 'highp'\n version: '100' | '300 es'\n}\n\n// ノードからGLSLコードを生成\nexport const nodeToGLSL = (nodeProxy: X, context?: Partial<GLSLContext>): string => {\n const ctx: GLSLContext = {\n target: 'webgl',\n precision: 'mediump',\n version: '300 es',\n nodes: new Map(),\n variables: new Map(),\n functions: new Map(),\n ...context,\n }\n\n return generateGLSLExpression(nodeProxy as any, ctx)\n}\n\n// GLSL式を生成\nconst generateGLSLExpression = (node: Node, context: GLSLContext): string => {\n if (!node) return '0.0'\n // 値ノード\n if (!is.und(node.value)) return formatGLSLValue(node.value, node.type)\n // プロパティアクセス(スウィズル)\n if (node.property && node.parent) {\n const parentExpr = generateGLSLExpression(node.parent, context)\n return `${parentExpr}.${node.property}`\n }\n // 演算子ノード\n if (node.operator && node.children && node.children.length >= 2) return generateGLSLOperator(node, context)\n // 数学関数ノード\n if (node.mathFunction && node.children && node.children.length >= 1)\n return generateGLSLMathFunction(node, context)\n return '0.0'\n}\n\n// GLSL値をフォーマット\nconst formatGLSLValue = (value: any, type: NodeType): string => {\n if (type === 'float') {\n const num = Number(value)\n return num % 1 === 0 ? `${num}.0` : `${num}`\n }\n if (type === 'int') return `${Math.floor(Number(value))}`\n if (type === 'bool') return Boolean(value) ? 'true' : 'false'\n if (is.arr(value)) {\n const values = value\n .map((v) => {\n const num = Number(v)\n return num % 1 === 0 ? `${num}.0` : `${num}`\n })\n .join(', ')\n if (type === 'vec2') return `vec2(${values})`\n if (type === 'vec3') return `vec3(${values})`\n if (type === 'vec4') return `vec4(${values})`\n if (type === 'color') return `vec3(${values})`\n }\n return '0.0'\n}\n\n// GLSL演算子を生成\nconst generateGLSLOperator = (node: Node, context: GLSLContext): string => {\n if (!node.children || node.children.length < 2) return '0.0'\n const left = generateGLSLExpression(node.children[0], context)\n const right = generateGLSLExpression(node.children[1], context)\n if (node.operator === 'add') return `(${left} + ${right})`\n if (node.operator === 'sub') return `(${left} - ${right})`\n if (node.operator === 'mul') return `(${left} * ${right})`\n if (node.operator === 'div') return `(${left} / ${right})`\n if (node.operator === 'mod') return `mod(${left}, ${right})`\n if (node.operator === 'equal') return `(${left} == ${right})`\n if (node.operator === 'notEqual') return `(${left} != ${right})`\n if (node.operator === 'lessThan') return `(${left} < ${right})`\n if (node.operator === 'lessThanEqual') return `(${left} <= ${right})`\n if (node.operator === 'greaterThan') return `(${left} > ${right})`\n if (node.operator === 'greaterThanEqual') return `(${left} >= ${right})`\n if (node.operator === 'and') return `(${left} && ${right})`\n if (node.operator === 'or') return `(${left} || ${right})`\n return `(${left} + ${right})`\n}\n\n// GLSL数学関数を生成\nconst generateGLSLMathFunction = (node: Node, context: GLSLContext): string => {\n if (!node.children || node.children.length < 1) return '0.0'\n const fun = node.mathFunction\n const args = node.children.map((child) => {\n return generateGLSLExpression(child, context)\n })\n const [x, y, z] = args\n // @TODO FIX\n // if (fun === 'toVar') return x // toVarは変数化のヒントなので、そのまま返す\n if (args.length === 1) return `${fun}(${x})`\n if (args.length === 2) return `${fun}(${x}, ${y})`\n if (args.length === 3) return `${fun}(${x}, ${y}, ${z})`\n return x || '0.0'\n}\n\n// 値からGLSL型を推定\nconst inferGLSLType = (value: unknown): string => {\n if (is.num(value)) return 'float'\n if (is.bol(value)) return 'bool'\n if (is.arr(value)) {\n const len = value.length\n if (len === 2) return 'vec2'\n if (len === 3) return 'vec3'\n if (len === 4) return 'vec4'\n }\n return 'float'\n}\n\n// 完全なGLSLシェーダーを生成\nexport const glsl = (\n fragmentNode: X,\n options?: {\n precision?: 'lowp' | 'mediump' | 'highp'\n version?: '100' | '300 es'\n uniforms?: Record<string, any>\n }\n) => {\n const precision = options?.precision || 'mediump'\n const version = options?.version || '300 es'\n const is300ES = version === '300 es'\n const fragment = nodeToGLSL(fragmentNode)\n let shader = ''\n if (is300ES) shader += '#version 300 es\\n'\n shader += `precision ${precision} float;\\n\\n`\n // ユニフォーム変数の追加\n if (options?.uniforms) {\n Object.entries(options.uniforms).forEach(([name, value]) => {\n const type = inferGLSLType(value)\n shader += `uniform ${type} ${name};\\n`\n })\n shader += '\\n'\n }\n // 出力変数\n if (is300ES) shader += 'out vec4 fragColor;\\n\\n'\n shader += 'void main() {\\n'\n shader += is300ES ? ` fragColor = ${fragment};\\n` : ` gl_FragColor = ${fragment};\\n`\n shader += '}\\n'\n\n return shader\n}\n","import { glsl } from '../code/glsl'\nimport { X } from '../node'\nimport { is } from './helpers'\n\nexport const defaultVertexGLSL = /* cpp */ `\n#version 300 es\nvoid main() {\n float x = float(gl_VertexID % 2) * 4.0 - 1.0;\n float y = float(gl_VertexID / 2) * 4.0 - 1.0;\n gl_Position = vec4(x, y, 0.0, 1.0);\n}\n`\n\nexport const defaultFragmentGLSL = /* cpp */ `\n#version 300 es\nprecision mediump float;\nuniform vec2 iResolution;\nout vec4 fragColor;\nvoid main() {\n fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n}\n`\n\nconst createShader = (c: WebGLRenderingContext, source: string, type: number) => {\n const shader = c.createShader(type)\n if (!shader) throw new Error('Failed to create shader')\n c.shaderSource(shader, source.trim())\n c.compileShader(shader)\n if (c.getShaderParameter(shader, c.COMPILE_STATUS)) return shader\n const error = c.getShaderInfoLog(shader)\n c.deleteShader(shader)\n throw new Error(`Could not compile shader: ${error}`)\n}\n\nexport const createProgram = (\n c: WebGLRenderingContext,\n vs: string | X = defaultVertexGLSL,\n fs: string | X = defaultFragmentGLSL\n) => {\n if (is.obj(fs)) fs = glsl(fs as X)\n if (is.obj(vs)) vs = glsl(vs as X)\n const pg = c.createProgram()\n c.attachShader(pg, createShader(c, vs, c.VERTEX_SHADER))\n c.attachShader(pg, createShader(c, fs, c.FRAGMENT_SHADER))\n c.linkProgram(pg)\n if (c.getProgramParameter(pg, c.LINK_STATUS)) return pg\n const error = c.getProgramInfoLog(pg)\n c.deleteProgram(pg)\n throw new Error(`Could not link pg: ${error}`)\n}\n\nexport const createVbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, new Float32Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const createIbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, buffer)\n c.bufferData(c.ELEMENT_ARRAY_BUFFER, new Int16Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const getStride = (count: number, value: number[], iboValue?: number[]) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n return Math.floor(stride)\n}\n\nexport const createAttrib = (\n c: WebGLRenderingContext,\n stride: number,\n loc: any,\n vbo: WebGLBuffer,\n ibo?: WebGLBuffer\n) => {\n c.bindBuffer(c.ARRAY_BUFFER, vbo)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n if (ibo) c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, ibo)\n}\n\nexport const createTexture = (c: WebGLRenderingContext, img: HTMLImageElement, loc: any, unit: number) => {\n const texture = c.createTexture()\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, img)\n c.generateMipmap(c.TEXTURE_2D)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, null)\n c.uniform1i(loc, unit)\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, texture)\n}\n","import { is } from '../utils/helpers'\nimport type { Node, NodeType, ConversionContext, X } from '../node'\n\n// WGSLコード生成コンテキスト\ninterface WGSLContext extends ConversionContext {\n target: 'webgpu'\n}\n\n// ノードからWGSLコードを生成\nexport const nodeToWGSL = (nodeProxy: X, context?: Partial<WGSLContext>): string => {\n const ctx: WGSLContext = {\n target: 'webgpu',\n nodes: new Map(),\n variables: new Map(),\n functions: new Map(),\n ...context,\n }\n return generateWGSLExpression(nodeProxy as any, ctx)\n}\n\n// WGSL式を生成\nconst generateWGSLExpression = (node: Node, context: WGSLContext): string => {\n if (!node) return '0.0'\n // 値ノード\n if (node.value !== undefined) return formatWGSLValue(node.value, node.type)\n // プロパティアクセス(スウィズル)\n if (node.property && node.parent) {\n const parentExpr = generateWGSLExpression(node.parent, context)\n return `${parentExpr}.${node.property}`\n }\n // 演算子ノード\n if (node.operator && node.children && node.children.length >= 2) return generateWGSLOperator(node, context)\n // 数学関数ノード\n if (node.mathFunction && node.children && node.children.length >= 1)\n return generateWGSLMathFunction(node, context)\n return '0.0'\n}\n\n// WGSL値をフォーマット\nconst formatWGSLValue = (value: any, type: NodeType): string => {\n if (type === 'float') {\n const num = Number(value)\n return num % 1 === 0 ? `${num}.0` : `${num}`\n }\n if (type === 'int') return `${Math.floor(Number(value))}`\n if (type === 'bool') return Boolean(value) ? 'true' : 'false'\n if (is.arr(value)) {\n const values = value\n .map((v) => {\n const num = Number(v)\n return num % 1 === 0 ? `${num}.0` : `${num}`\n })\n .join(', ')\n if (type === 'vec2') return `vec2<f32>(${values})`\n if (type === 'vec3') return `vec3<f32>(${values})`\n if (type === 'vec4') return `vec4<f32>(${values})`\n if (type === 'color') return `vec3<f32>(${values})`\n }\n\n return '0.0'\n}\n\n// WGSL演算子を生成\nconst generateWGSLOperator = (node: Node, context: WGSLContext): string => {\n if (!node.children || node.children.length < 2) return '0.0'\n const left = generateWGSLExpression(node.children[0], context)\n const right = generateWGSLExpression(node.children[1], context)\n if (node.operator === 'add') return `(${left} + ${right})`\n if (node.operator === 'sub') return `(${left} - ${right})`\n if (node.operator === 'mul') return `(${left} * ${right})`\n if (node.operator === 'div') return `(${left} / ${right})`\n if (node.operator === 'mod') return `(${left} % ${right})`\n if (node.operator === 'equal') return `(${left} == ${right})`\n if (node.operator === 'notEqual') return `(${left} != ${right})`\n if (node.operator === 'lessThan') return `(${left} < ${right})`\n if (node.operator === 'lessThanEqual') return `(${left} <= ${right})`\n if (node.operator === 'greaterThan') return `(${left} > ${right})`\n if (node.operator === 'greaterThanEqual') return `(${left} >= ${right})`\n if (node.operator === 'and') return `(${left} && ${right})`\n if (node.operator === 'or') return `(${left} || ${right})`\n return `(${left} + ${right})`\n}\n\n// WGSL数学関数を生成\nconst generateWGSLMathFunction = (node: Node, context: WGSLContext): string => {\n if (!node.children || node.children.length < 1) return '0.0'\n const fun = node.mathFunction\n const args = node.children.map((child) => generateWGSLExpression(child, context))\n const [x, y, z] = args\n // @TODO FIX\n // if (fun === 'toVar') return x // toVarは変数化のヒントなので、そのまま返す\n if (args.length === 1) return `${fun}(${x})`\n if (args.length === 2) return `${fun}(${x}, ${y})`\n if (args.length === 3) return `${fun}(${x}, ${y}, ${z})`\n return x || '0.0'\n}\n\n// 完全なWGSLシェーダーを生成\nexport const wgsl = (\n fragmentNode: X,\n options?: {\n uniforms?: Record<string, any>\n }\n) => {\n let shader = ''\n // ユニフォーム変数の追加\n if (options?.uniforms) {\n Object.entries(options.uniforms).forEach(([name, value]) => {\n const type = inferWGSLType(value)\n shader += `@group(0) @binding(0) var<uniform> ${name}: ${type};\\n`\n })\n shader += '\\n'\n }\n shader += '@fragment\\n'\n shader += 'fn main() -> @location(0) vec4<f32> {\\n'\n const fragmentExpr = nodeToWGSL(fragmentNode)\n shader += ` return ${fragmentExpr};\\n`\n shader += '}\\n'\n\n return shader\n}\n\n// 値からWGSL型を推定\nconst inferWGSLType = (value: any): string => {\n if (is.num(value)) return 'f32'\n if (is.bol(value)) return 'bool'\n if (is.arr(value)) {\n const len = value.length\n if (len === 2) return 'vec2<f32>'\n if (len === 3) return 'vec3<f32>'\n if (len === 4) return 'vec4<f32>'\n }\n return 'f32'\n}\n","import { wgsl } from '../code/wgsl'\nimport { X } from '../node'\nimport { is } from './helpers'\nimport type { GPUContext, GPUDevice, GPUPipeline } from '../types'\n\nconst defaultVertexWGSL = `\n@vertex\nfn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {\n let x = f32(vertex_index % 2u) * 4.0 - 1.0;\n let y = f32(vertex_index / 2u) * 4.0 - 1.0;\n return vec4f(x, y, 0.0, 1.0);\n}\n`\n\nconst defaultFragmentWGSL = `\n@group(0) @binding(0) var<uniform> iResolution: vec2f;\n\n@fragment\nfn main(@builtin(position) position: vec4f) -> @location(0) vec4f {\n return vec4f(position.xy / iResolution, 0.0, 1.0);\n}\n`\n\nexport const createDevive = async (c: GPUContext) => {\n const gpu = (navigator as any).gpu\n const format = gpu.getPreferredCanvasFormat()\n const adapter = await gpu.requestAdapter()\n const device = await adapter.requestDevice()\n c.configure({ device, format, alphaMode: 'opaque' })\n return { device, format }\n}\n\nexport const createPipeline = (\n device: GPUDevice,\n format: string,\n buffers: any[],\n layouts: any[],\n vs: string | X = defaultVertexWGSL,\n fs: string | X = defaultFragmentWGSL\n) => {\n if (is.obj(fs)) fs = wgsl(fs)\n if (is.obj(vs)) vs = wgsl(vs)\n const layout = device.createPipelineLayout({ bindGroupLayouts: layouts })\n return device.createRenderPipeline({\n vertex: {\n module: device.createShaderModule({ code: vs.trim() }),\n entryPoint: 'main',\n buffers,\n },\n fragment: {\n module: device.createShaderModule({ code: fs.trim() }),\n entryPoint: 'main',\n targets: [{ format }],\n },\n layout,\n primitive: { topology: 'triangle-list' },\n }) as GPUPipeline\n}\n\nexport const createBindGroup = (device: GPUDevice, resources: any[]) => {\n const entries0 = [] as any[]\n const entries1 = [] as any[]\n resources.forEach((resource, binding) => {\n if (!resource) return\n const isUniform = 'buffer' in resource // @ts-ignore\n const isTexture = resource instanceof GPUTextureView // @ts-ignore\n const isSampler = resource instanceof GPUSampler // @ts-ignore\n if (isUniform) entries0.push({ binding, visibility: 3, buffer: { type: 'uniform' } })\n else if (isTexture) entries0.push({ binding, visibility: 2, texture: {} })\n else if (isSampler) entries0.push({ binding, visibility: 2, sampler: {} })\n else return\n entries1.push({ binding, resource })\n })\n const layout = device.createBindGroupLayout({ entries: entries0 })\n const bindGroup = device.createBindGroup({ layout, entries: entries1 })\n return [layout, bindGroup]\n}\n\nexport const createDescriptor = (c: GPUContext) => {\n return {\n colorAttachments: [\n {\n view: c.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 1 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n }\n}\n\nexport const alignTo256 = (size: number) => Math.ceil(size / 256) * 256\n\nexport const createUniformBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const size = alignTo256(array.byteLength)\n const buffer = device.createBuffer({ size, usage: 72 }) as Buffer // 72 === GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n return { array, buffer }\n}\n\nexport const createTextureSampler = (device: GPUDevice, width = 1280, height = 800) => {\n const texture = device.createTexture({ size: [width, height], format: 'rgba8unorm', usage: 22 })\n const sampler = device.createSampler({ magFilter: 'linear', minFilter: 'linear' })\n return [texture, sampler] as const\n}\n\n// export const createVertexBuffer = (device: GPUDevice, value: number[]) => {\n// const array = new Float32Array(value)\n// const buffer = device.createBuffer({ size: array.byteLength, usage: 0x20 | 0x4 })\n// device.queue.writeBuffer(buffer, 0, array)\n// return buffer as Buffer\n// }\n","import { is } from './utils/helpers'\nimport {\n createDevive,\n createPipeline,\n createDescriptor,\n createUniformBuffer,\n createBindGroup,\n createTextureSampler,\n} from './utils/pipeline'\nimport type { GL, WebGPUState } from './types'\n\nexport const webgpu = async (gl: Partial<GL>) => {\n const c = gl.el!.getContext('webgpu') as any\n const { device, format } = await createDevive(c)\n const state = {\n device,\n context: c,\n uniforms: {},\n textures: {},\n resources: [[], []],\n loadingImg: 0,\n needsUpdate: true,\n } as WebGPUState\n\n const initUniform = (value: number[]) => {\n const { array, buffer } = createUniformBuffer(device, value)\n state.resources[0].push({ buffer })\n state.needsUpdate = true\n return { array, buffer }\n }\n\n const initTexutre = (source: HTMLImageElement) => {\n const { width, height } = source\n const [texture, sampler] = createTextureSampler(device, width, height)\n state.resources[1].push(sampler, texture.createView())\n state.needsUpdate = true\n return { texture, width, height }\n }\n\n const update = () => {\n const layouts = [] as any\n state.groups = []\n state.resources.forEach((resource) => {\n if (!resource.length) return\n const [layout, group] = createBindGroup(device, resource)\n layouts.push(layout)\n state.groups.push(group)\n })\n state.pipeline = createPipeline(device, format, [], layouts, gl.vs, gl.fs)\n }\n\n const render = () => {\n if (state.loadingImg) return // ignore if loading img\n if (state.needsUpdate) update() // first rendering\n state.needsUpdate = false\n const encoder = device.createCommandEncoder()\n const pass = encoder.beginRenderPass(createDescriptor(c))\n pass.setPipeline(state.pipeline)\n state.groups.forEach((v, i) => pass.setBindGroup(i, v))\n pass.draw(gl.count, 1, 0, 0)\n pass.end()\n device.queue.submit([encoder.finish()])\n }\n\n const clean = () => {}\n\n const _attribute = (key = '', value: number[]) => {\n // @TODO FIX\n // vertexBuffers(key, value)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n if (is.num(value)) value = [value]\n if (!state.uniforms[key]) state.uniforms[key] = initUniform(value)\n const { array, buffer } = state.uniforms[key]\n array.set(value)\n device.queue.writeBuffer(buffer, 0, array)\n }\n\n const _texture = (key: string, src: string) => {\n state.loadingImg++\n const source = Object.assign(new Image(), { src, crossOrigin: 'anonymous' })\n source.decode().then(() => {\n if (!state.textures[key]) state.textures[key] = initTexutre(source)\n const { texture, width, height } = state.textures[key]\n device.queue.copyExternalImageToTexture({ source }, { texture }, { width, height })\n state.loadingImg--\n })\n }\n\n return { webgpu: state, render, clean, _attribute, _uniform, _texture }\n}\n","// 基本型定数\nexport const TYPES = [\n 'float',\n 'int',\n 'uint',\n 'bool',\n 'color',\n 'vec2',\n 'vec3',\n 'vec4',\n 'mat2',\n 'mat3',\n 'mat4',\n 'ivec2',\n 'ivec3',\n 'ivec4',\n 'uvec2',\n 'uvec3',\n 'uvec4',\n 'bvec2',\n 'bvec3',\n 'bvec4',\n] as const\n\nexport type NodeType = (typeof TYPES)[number]\n\n// スウィズル定数\nexport const SWIZZLES = ['x', 'y', 'z', 'w', 'r', 'g', 'b', 'a', 's', 't', 'p', 'q'] as const\n\ntype AllSwizzles<T extends string> = T | `${T}${T}` | `${T}${T}${T}` | `${T}${T}${T}${T}`\n\nexport type Swillzes =\n | AllSwizzles<'x' | 'y' | 'z' | 'w'>\n | AllSwizzles<'r' | 'g' | 'b' | 'a'>\n | AllSwizzles<'p' | 'q'>\n | AllSwizzles<'s' | 't'>\n\n// 演算子定数\nexport const OPERATORS = [\n 'add',\n 'sub',\n 'mul',\n 'div',\n 'mod',\n 'equal',\n 'notEqual',\n 'lessThan',\n 'lessThanEqual',\n 'greaterThan',\n 'greaterThanEqual',\n 'and',\n 'or',\n 'not',\n 'assign',\n 'xor',\n 'bitAnd',\n 'bitNot',\n 'bitOr',\n 'bitXor',\n 'shiftLeft',\n 'shiftRight',\n] as const\n\nexport type Operator = (typeof OPERATORS)[number]\n\n// 数学関数定数\nexport const FUNCTIONS = [\n 'abs',\n 'acos',\n 'asin',\n 'atan',\n 'atan2',\n 'ceil',\n 'clamp',\n 'cos',\n 'cross',\n 'degrees',\n 'distance',\n 'dot',\n 'exp',\n 'exp2',\n 'faceforward',\n 'floor',\n 'fract',\n 'length',\n 'all',\n 'any',\n 'bitcast',\n 'cbrt',\n 'dFdx',\n 'dFdy',\n 'difference',\n 'equals',\n 'fwidth',\n 'inverseSqrt',\n 'lengthSq',\n 'log',\n 'log2',\n 'max',\n 'min',\n 'mix',\n 'negate',\n 'normalize',\n 'oneMinus',\n 'pow',\n 'pow2',\n 'pow3',\n 'pow4',\n 'radians',\n 'reciprocal',\n 'reflect',\n 'refract',\n 'round',\n 'saturate',\n 'sign',\n 'sin',\n 'smoothstep',\n 'sqrt',\n 'step',\n 'tan',\n 'transformDirection',\n 'trunc',\n] as const\n\nexport type MathFunction = (typeof FUNCTIONS)[number]\n\n// キャッシュ用定数\nexport const CACHE_BOOLS = [true, false] as const\nexport const CACHE_INTS = [0, 1, 2, 3, 4, 5] as const\nexport const CACHE_FLOATS = [0.0, 1.0, 0.5, 2.0] as const\n","import { CACHE_BOOLS, CACHE_INTS, CACHE_FLOATS } from './const'\nimport { node } from '.'\nimport type { X } from './types'\n\nconst boolCache = new Map<boolean, X>()\nconst intCache = new Map<number, X>()\nconst floatCache = new Map<number, X>()\n\nconst initializeCache = () => {\n CACHE_BOOLS.forEach((value) => {\n boolCache.set(value, node('bool', value))\n })\n CACHE_INTS.forEach((value) => {\n intCache.set(value, node('int', value))\n })\n CACHE_FLOATS.forEach((value) => {\n floatCache.set(value, node('float', value))\n })\n}\n\nexport const getCachedBool = (x: boolean): X => {\n if (!boolCache.has(x)) initializeCache()\n return boolCache.get(x) || node('bool', x)\n}\n\n// キャッシュされたintノードを取得\nexport const getCachedInt = (x: number): X => {\n if (intCache.has(x)) return intCache.get(x)!\n return node('int', x)\n}\n\n// キャッシュされたfloatノードを取得\nexport const getCachedFloat = (x: number): X => {\n if (floatCache.has(x)) return floatCache.get(x)!\n return node('float', x)\n}\n\n// ノードの重複を検出\nexport const findDuplicateNodes = (nodes: X[]): Map<string, X[]> => {\n const duplicates = new Map<string, X[]>()\n const signatures = new Map<string, X>()\n\n nodes.forEach((nodeProxy) => {\n const signature = generateNodeSignature(nodeProxy)\n if (signatures.has(signature)) {\n if (!duplicates.has(signature)) duplicates.set(signature, [signatures.get(signature)!])\n duplicates.get(signature)!.push(nodeProxy)\n } else signatures.set(signature, nodeProxy)\n })\n return duplicates\n}\n\n// ノードのシグネチャを生成\nconst generateNodeSignature = (nodeProxy: X): string => {\n const parts = [nodeProxy.type, `${nodeProxy.value}`, nodeProxy.property || '']\n return parts.join('|')\n}\n\n// 初期化を実行\n// initializeCache()\n","import { node } from '.'\nimport { getCachedBool, getCachedInt, getCachedFloat } from './cache'\nimport { is } from '../utils/helpers'\nimport type { X } from './types'\n\n// JavaScript値をノードに変換\nexport const convertToNode = (x: unknown): X => {\n if (is.bol(x)) return getCachedBool(x)\n if (is.num(x)) {\n if (is.int(x)) return getCachedInt(x)\n return getCachedFloat(x)\n }\n if (is.arr(x)) return convertArrayToNode(x)\n if (is.obj(x)) return convertObjectToNode(x)\n return node('float', 0)\n}\n\n// 配列をベクトル/行列ノードに変換\nconst convertArrayToNode = (array: number[]): X => {\n const len = array.length\n if (len === 2) return node('vec2', array)\n if (len === 3) return node('vec3', array)\n if (len === 4) return node('vec4', array)\n if (len === 9) return node('mat3', array)\n if (len === 16) return node('mat4', array)\n return node('float', array[0])\n}\n\n// オブジェクトをノードに変換\nconst convertObjectToNode = (obj: any): X => {\n // カラーオブジェクトの検出\n if ('r' in obj && 'g' in obj && 'b' in obj) {\n const arr = [obj.r, obj.g, obj.b]\n if ('a' in obj) arr.push(obj.a)\n return node('color', arr)\n }\n // ベクトルライクオブジェクトの検出\n if ('x' in obj && 'y' in obj) {\n const arr = [obj.x, obj.y]\n if ('z' in obj) arr.push(obj.z)\n if ('w' in obj) arr.push(obj.w)\n return convertArrayToNode(arr)\n }\n return node('float', 0)\n}\n\n// 型変換関数\nexport const float = (x: unknown): X => {\n if (is.num(x)) return getCachedFloat(x)\n return node('float', Number(x))\n}\n\nexport const int = (x: unknown): X => {\n if (is.num(x) && Number.isInteger(x)) return getCachedInt(x)\n return node('int', Math.floor(Number(x)))\n}\n\nexport const bool = (x: unknown): X => {\n return getCachedBool(Boolean(x))\n}\n\nexport const vec2 = (x?: any, y?: any): X => {\n if (is.und(x)) return node('vec2', [0, 0])\n if (is.und(y)) {\n if (is.arr(x)) return node('vec2', x.slice(0, 2))\n if (is.obj(x) && 'x' in x && 'y' in x) return node('vec2', [x.x, x.y])\n return node('vec2', [Number(x), Number(x)])\n }\n return node('vec2', [Number(x), Number(y)])\n}\n\nexport const vec3 = (x?: any, y?: any, z?: any): X => {\n if (is.und(x)) return node('vec3', [0, 0, 0])\n if (is.und(y)) {\n if (is.arr(x)) return node('vec3', x.slice(0, 3))\n if (is.obj(x) && 'x' in x && 'y' in x && 'z' in x) return node('vec3', [x.x, x.y, x.z])\n return node('vec3', [Number(x), Number(x), Number(x)])\n }\n if (z === undefined) {\n return node('vec3', [Number(x), Number(y), 0])\n }\n return node('vec3', [Number(x), Number(y), Number(z)])\n}\n\nexport const vec4 = (x?: any, y?: any, z?: any, w?: any): X => {\n if (is.und(x)) return node('vec4', [0, 0, 0, 1])\n if (is.und(y)) {\n if (is.arr(x)) return node('vec4', x.slice(0, 4))\n if (is.obj(x) && 'x' in x && 'y' in x && 'z' in x && 'w' in x) return node('vec4', [x.x, x.y, x.z, x.w])\n return node('vec4', [Number(x), Number(x), Number(x), 1])\n }\n return node('vec4', [Number(x), Number(y), Number(z), Number(w)])\n}\n\nexport const color = (r?: any, g?: any, b?: any): X => {\n if (r === undefined) return node('color', [1, 1, 1])\n\n // 16進数カラーの処理\n if (is.str(r) && r.startsWith('#')) {\n const hex = r.slice(1)\n const num = parseInt(hex, 16)\n return node('color', [((num >> 16) & 255) / 255, ((num >> 8) & 255) / 255, (num & 255) / 255])\n }\n\n // 数値カラーの処理\n if (is.num(r) && g === undefined && b === undefined) {\n return node('color', [((r >> 16) & 255) / 255, ((r >> 8) & 255) / 255, (r & 255) / 255])\n }\n\n return vec3(r, g, b)\n}\n","import { OPERATORS, FUNCTIONS, SWIZZLES } from './const'\nimport { is } from '../utils/helpers'\nimport type { NodeType } from './const'\nimport type { Node, ProxyCallback, X } from './types'\n\nlet nodeIdCounter = 0\n\n// ノードIDを生成\nconst generateNodeId = () => `node_${++nodeIdCounter}`\n\n// ノードを作成\nexport const createNode = (type: NodeType, value?: any, options?: Partial<Node>): Node => {\n return {\n id: generateNodeId(),\n type,\n value,\n children: [],\n ...options,\n }\n}\n\nconst isSwizzleProperty = (key = '') => SWIZZLES.includes(key as any)\nconst isOperatorMethod = (key = '') => OPERATORS.includes(key as any)\nconst isMathMethod = (key = '') => FUNCTIONS.includes(key as any)\n\n// Proxyハンドラーを作成\nconst createNodeProxy = (node: Node, callback?: (info: ProxyCallback) => X) => {\n const get = (_target: unknown, key: unknown) => {\n if (!is.str(key) || key === 'then') return void 0\n\n if (key === 'id') return node.id\n if (key === 'type') return node.type\n if (key === 'value') return node.value\n if (key === 'property') return node.property\n\n // swizzle prooerty\n if (isSwizzleProperty(key))\n return createNodeProxy(\n createNode(getSwizzleType(key), undefined, {\n parent: node,\n property: key,\n }),\n callback\n )\n\n // 演算子メソッド\n if (isOperatorMethod(key))\n return (...args: any[]) => {\n return createNodeProxy(\n createNode(node.type, undefined, {\n operator: key as any,\n children: [node, ...args],\n }),\n callback\n )\n }\n\n // 数学関数メソッド\n if (isMathMethod(key))\n return (...args: any[]) => {\n return createNodeProxy(\n createNode(getMathReturnType(key, node.type), undefined, {\n mathFunction: key as any,\n children: [node, ...args],\n }),\n callback\n )\n }\n\n return callback?.({ path: [key], args: [] })\n }\n const apply = (_target: unknown, _thisArg: unknown, args: any) => {\n return callback?.({ path: [], args })\n }\n\n return new Proxy(() => {}, { get, apply }) as X\n}\n\n// スウィズルの戻り値型を取得\nconst getSwizzleType = (swizzle: string): NodeType => {\n if (swizzle.length === 1) return 'float'\n if (swizzle.length === 2) return 'vec2'\n if (swizzle.length === 3) return 'vec3'\n if (swizzle.length === 4) return 'vec4'\n return 'float'\n}\n\n// 数学関数の戻り値型を取得\nconst getMathReturnType = (func: string, inputType: NodeType): NodeType => {\n if (func === 'length') return 'float'\n if (func === 'normalize') return inputType\n if (func === 'toVar') return inputType\n return inputType\n}\n\n// 公開API\nexport const node = (type: NodeType, value?: any, options?: Partial<Node>) => {\n const nodeInstance = createNode(type, value, options)\n return createNodeProxy(nodeInstance)\n}\n","import { node } from './node'\nimport { is } from '../utils/helpers'\nimport type { UniformNode } from './types'\nimport type { NodeType } from './const'\n\n// ユニフォーム更新コンテキスト\ninterface UpdateContext {\n object?: any\n camera?: any\n renderer?: any\n scene?: any\n time?: number\n}\n\n// ユニフォーム値の型を推定\nconst inferUniformType = (value: any): NodeType => {\n if (is.num(value)) return 'float'\n if (is.bol(value)) return 'bool'\n if (is.arr(value)) {\n const len = value.length\n if (len === 2) return 'vec2'\n if (len === 3) return 'vec3'\n if (len === 4) return 'vec4'\n if (len === 9) return 'mat3'\n if (len === 16) return 'mat4'\n }\n if (is.obj(value) && 'r' in value && 'g' in value && 'b' in value) return 'color'\n return 'float'\n}\n\n// ユニフォーム変数を作成\nexport const uniform = (initialValue: any): UniformNode => {\n const type = inferUniformType(initialValue)\n let currentValue = initialValue\n let objectUpdateCallback: ((context: UpdateContext) => any) | null = null\n let renderUpdateCallback: ((context: UpdateContext) => any) | null = null\n\n const baseNode = node(type, currentValue) as any\n\n // 値を設定\n const set = (value: any) => {\n currentValue = value\n baseNode.value = value\n }\n // オブジェクト更新時のコールバックを設定\n const onObjectUpdate = (callback: (context: UpdateContext) => any): UniformNode => {\n objectUpdateCallback = callback\n return uniformNode\n }\n // レンダー更新時のコールバックを設定\n const onRenderUpdate = (callback: (context: UpdateContext) => any): UniformNode => {\n renderUpdateCallback = callback\n return uniformNode\n }\n // 内部更新関数(外部から呼び出される)\n const _updateFromContext = (context: UpdateContext) => {\n if (objectUpdateCallback) {\n const newValue = objectUpdateCallback(context)\n if (newValue !== undefined) set(newValue)\n }\n if (renderUpdateCallback) {\n const newValue = renderUpdateCallback(context)\n if (newValue !== undefined) set(newValue)\n }\n }\n // UniformNodeインターフェースを実装\n const uniformNode = Object.create(baseNode)\n uniformNode.set = set\n uniformNode.onObjectUpdate = onObjectUpdate\n uniformNode.onRenderUpdate = onRenderUpdate\n uniformNode._updateFromContext = _updateFromContext\n uniformNode.isUniform = true\n return uniformNode as UniformNode\n}\n\n// 組み込みユニフォーム変数\nexport const iTime = uniform(0.0)\nexport const iPrevTime = uniform(0.0)\nexport const iDeltaTime = uniform(0.0)\nexport const iResolution = uniform([1920, 1080])\nexport const iMouse = uniform([0, 0])\n\n// ユニフォーム変数の更新(レンダーループで呼び出される)\nexport const updateUniforms = (context: UpdateContext) => {\n // 時間の更新\n if (context.time !== undefined) {\n const prevTime = iTime.value || 0\n iTime.set(context.time)\n iPrevTime.set(prevTime)\n iDeltaTime.set(context.time - prevTime)\n }\n}\n","import { float } from './conv'\nimport { node } from './node'\nimport { uniform } from './uniform'\nimport { is } from '../utils/helpers'\nimport type { X, FunctionNode, ConditionalNode } from './types'\nexport type { X, FunctionNode, ConditionalNode }\nexport * from './cache'\nexport * from './const'\nexport * from './conv'\nexport * from './node'\nexport * from './types'\nexport * from './uniform'\n\n// 関数定義\nexport const Fn = (jsFunc: Function): FunctionNode => {\n const functionNode = (...args: any[]) => {\n const inputs = args.map((arg) => {\n if (is.obj(arg) && 'type' in arg && arg.type) return arg\n return float(arg)\n })\n const result = jsFunc(inputs)\n return result || float(0)\n }\n functionNode.call = (inputs: X[]) => jsFunc(inputs)\n return functionNode as FunctionNode\n}\n\n// 条件分岐\nexport const If = (condition: X, callback: () => void): ConditionalNode => {\n callback()\n\n const conditionalNode = {\n ElseIf(newCondition: X, newCallback: () => void): ConditionalNode {\n newCallback()\n return conditionalNode\n },\n Else(elseCallback: () => void) {\n elseCallback()\n },\n }\n\n return conditionalNode\n}\n\n// 組み込み変数\nexport const fragCoord = node('vec4', undefined)\nexport const position = node('vec4', undefined)\nexport const iTime = uniform(0.0)\nexport const iResolution = uniform([1920, 1080])\nexport const iMouse = uniform([0, 0])\n\n// 数学関数\nexport const abs = (x: X) => x.abs()\nexport const sin = (x: X) => x.sin()\nexport const cos = (x: X) => x.cos()\nexport const tan = (x: X) => x.tan()\nexport const sqrt = (x: X) => x.sqrt()\nexport const floor = (x: X) => x.floor()\nexport const ceil = (x: X) => x.ceil()\nexport const fract = (x: X) => x.fract()\nexport const normalize = (x: X) => x.normalize()\nexport const length = (x: X) => x.length()\n\n/**\n * @TODO FIX\nexport const min = (a: X, b: X) => {\n return node('float', undefined, {\n mathFunction: 'min',\n children: [a as any, b as any],\n })\n}\n\nexport const max = (a: X, b: X) => {\n return node('float', undefined, {\n mathFunction: 'max',\n children: [a as any, b as any],\n })\n}\n\nexport const mix = (a: X, b: X, t: X) => {\n return node('float', undefined, {\n mathFunction: 'mix',\n children: [a as any, b as any, t as any],\n })\n}\n\nexport const clamp = (x: X, min: X, max: X) => {\n return node('float', undefined, {\n mathFunction: 'clamp',\n children: [x as any, min as any, max as any],\n })\n}\n*/\n"],"mappings":"mbAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,iBAAAE,EAAA,iBAAAC,GAAA,eAAAC,GAAA,cAAAC,EAAA,OAAAC,GAAA,OAAAC,GAAA,cAAAC,EAAA,aAAAC,EAAA,UAAAC,GAAA,QAAAC,GAAA,eAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,UAAAC,GAAA,kBAAAC,GAAA,QAAAC,GAAA,iBAAAC,EAAA,oBAAAC,EAAA,qBAAAC,EAAA,iBAAAC,EAAA,aAAAC,GAAA,cAAAC,EAAA,eAAAC,EAAA,mBAAAC,EAAA,kBAAAC,EAAA,kBAAAC,EAAA,yBAAAC,EAAA,wBAAAC,EAAA,cAAAC,EAAA,YAAAC,GAAA,wBAAAC,GAAA,sBAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,uBAAAC,GAAA,UAAAC,EAAA,UAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,cAAAC,GAAA,kBAAAC,EAAA,mBAAAC,EAAA,iBAAAC,EAAA,cAAAC,EAAA,SAAAC,EAAA,eAAAC,GAAA,WAAAC,GAAA,cAAAC,GAAA,gBAAAC,GAAA,UAAAC,GAAA,QAAAC,GAAA,OAAAC,EAAA,SAAAC,GAAA,aAAAC,GAAA,sBAAAC,GAAA,WAAAC,GAAA,SAAAC,EAAA,eAAAC,GAAA,eAAAC,GAAA,cAAAC,GAAA,aAAAC,GAAA,YAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,QAAAC,GAAA,YAAAC,EAAA,mBAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,UAAAC,EAAA,WAAAC,EAAA,SAAAC,IAAA,eAAAC,GAAA9E,IAAA,IAAA+E,EAA+B,gBAC/BC,EAAyC,gBCDzC,IAAAC,EAAiC,gBCA1B,IAAMC,EAAK,CACV,IAAK,MAAM,QACX,IAAMC,GAA6B,OAAOA,GAAM,UAChD,IAAMA,GAA4B,OAAOA,GAAM,SAC/C,IAAMA,GAA4B,OAAOA,GAAM,SAC/C,IAAMA,GAA4B,OAAO,UAAUA,CAAC,EACpD,IAAMA,GAA8B,OAAOA,GAAM,WACjD,IAAMA,GAA+B,OAAOA,EAAM,IAClD,IAAMA,GAA0BA,IAAM,KACtC,IAAMA,GAAkCA,aAAa,IACrD,IAAMA,GAA2CA,aAAa,IAC9D,IAAMA,GAA4B,CAAC,CAACA,GAAKA,EAAE,YAAY,OAAS,SAChE,IAAMA,GAA4B,OAAOA,GAAM,UAAY,OAAO,MAAMA,CAAC,CACjF,EAUaC,GAAO,CAAmBC,EAAiCC,IAAiCD,EAAI,QAAQC,CAAE,EAE1GC,GAAQ,CAAoCF,KAAoCG,IAAgB,CACrGJ,GAAKC,EAAMI,GAAMA,EAAE,GAAGD,CAAI,CAAC,CACnC,EAKaE,GAAU,CAACC,EAAI,GAAIC,EAAO,IAAKC,EAAK,MAAQF,EAAE,MAAMC,CAAI,EAAE,KAAKC,CAAE,EACjEC,GAAM,CAACC,EAAM,SAAWA,EAAI,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY,GAAK,GAC/DC,GAAM,CAACL,EAAI,IAAM,GAAGA,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,QAAU,EACjDM,GAAM,CAACN,EAAI,IAAM,GAAGA,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,QAAUA,EAAI,EAAI,EAAI,GAC7DO,GAAM,CAACC,EAAQ,EAAGC,EAAQ,MAC/BA,GAAS,GACTA,EAAQ,KAAK,IAAI,GAAIA,CAAK,EAC1BD,GAASC,EACTD,EAAQ,KAAK,MAAMA,CAAK,EACxBA,GAASC,EACFD,GC/BR,IAAME,GAAa,CAACC,EAAcC,IAA2C,CAC5E,IAAMC,EAAmB,CACjB,OAAQ,QACR,UAAW,UACX,QAAS,SACT,MAAO,IAAI,IACX,UAAW,IAAI,IACf,UAAW,IAAI,IACf,GAAGD,CACX,EAEA,OAAOE,EAAuBH,EAAkBE,CAAG,CAC3D,EAGMC,EAAyB,CAACC,EAAYH,IAC/BG,EAEAC,EAAG,IAAID,EAAK,KAAK,EAElBA,EAAK,UAAYA,EAAK,OAEX,GADYD,EAAuBC,EAAK,OAAQH,CAAO,CAC1C,IAAIG,EAAK,QAAQ,GAGzCA,EAAK,UAAYA,EAAK,UAAYA,EAAK,SAAS,QAAU,EAAUE,GAAqBF,EAAMH,CAAO,EAEtGG,EAAK,cAAgBA,EAAK,UAAYA,EAAK,SAAS,QAAU,EACnDG,GAAyBH,EAAMH,CAAO,EAC9C,MAXyBO,GAAgBJ,EAAK,MAAOA,EAAK,IAAI,EAFnD,MAiBpBI,GAAkB,CAACC,EAAYC,IAA2B,CACxD,GAAIA,IAAS,QAAS,CACd,IAAMC,EAAM,OAAOF,CAAK,EACxB,OAAOE,EAAM,IAAM,EAAI,GAAGA,CAAG,KAAO,GAAGA,CAAG,EAClD,CACA,GAAID,IAAS,MAAO,MAAO,GAAG,KAAK,MAAM,OAAOD,CAAK,CAAC,CAAC,GACvD,GAAIC,IAAS,OAAQ,OAAeD,EAAS,OAAS,QACtD,GAAIJ,EAAG,IAAII,CAAK,EAAG,CACX,IAAMG,EAASH,EACN,IAAKI,GAAM,CACJ,IAAMF,EAAM,OAAOE,CAAC,EACpB,OAAOF,EAAM,IAAM,EAAI,GAAGA,CAAG,KAAO,GAAGA,CAAG,EAClD,CAAC,EACA,KAAK,IAAI,EAClB,GAAID,IAAS,OAAQ,MAAO,QAAQE,CAAM,IAC1C,GAAIF,IAAS,OAAQ,MAAO,QAAQE,CAAM,IAC1C,GAAIF,IAAS,OAAQ,MAAO,QAAQE,CAAM,IAC1C,GAAIF,IAAS,QAAS,MAAO,QAAQE,CAAM,GACnD,CACA,MAAO,KACf,EAGMN,GAAuB,CAACF,EAAYH,IAAiC,CACnE,GAAI,CAACG,EAAK,UAAYA,EAAK,SAAS,OAAS,EAAG,MAAO,MACvD,IAAMU,EAAOX,EAAuBC,EAAK,SAAS,CAAC,EAAGH,CAAO,EACvDc,EAAQZ,EAAuBC,EAAK,SAAS,CAAC,EAAGH,CAAO,EAC9D,OAAIG,EAAK,WAAa,MAAc,IAAIU,CAAI,MAAMC,CAAK,IACnDX,EAAK,WAAa,MAAc,IAAIU,CAAI,MAAMC,CAAK,IACnDX,EAAK,WAAa,MAAc,IAAIU,CAAI,MAAMC,CAAK,IACnDX,EAAK,WAAa,MAAc,IAAIU,CAAI,MAAMC,CAAK,IACnDX,EAAK,WAAa,MAAc,OAAOU,CAAI,KAAKC,CAAK,IACrDX,EAAK,WAAa,QAAgB,IAAIU,CAAI,OAAOC,CAAK,IACtDX,EAAK,WAAa,WAAmB,IAAIU,CAAI,OAAOC,CAAK,IACzDX,EAAK,WAAa,WAAmB,IAAIU,CAAI,MAAMC,CAAK,IACxDX,EAAK,WAAa,gBAAwB,IAAIU,CAAI,OAAOC,CAAK,IAC9DX,EAAK,WAAa,cAAsB,IAAIU,CAAI,MAAMC,CAAK,IAC3DX,EAAK,WAAa,mBAA2B,IAAIU,CAAI,OAAOC,CAAK,IACjEX,EAAK,WAAa,MAAc,IAAIU,CAAI,OAAOC,CAAK,IACpDX,EAAK,WAAa,KAAa,IAAIU,CAAI,OAAOC,CAAK,IAChD,IAAID,CAAI,MAAMC,CAAK,GAClC,EAGMR,GAA2B,CAACH,EAAYH,IAAiC,CACvE,GAAI,CAACG,EAAK,UAAYA,EAAK,SAAS,OAAS,EAAG,MAAO,MACvD,IAAMY,EAAMZ,EAAK,aACXa,EAAOb,EAAK,SAAS,IAAKc,GACjBf,EAAuBe,EAAOjB,CAAO,CACnD,EACK,CAACkB,EAAGC,EAAGC,CAAC,EAAIJ,EAGlB,OAAIA,EAAK,SAAW,EAAU,GAAGD,CAAG,IAAIG,CAAC,IACrCF,EAAK,SAAW,EAAU,GAAGD,CAAG,IAAIG,CAAC,KAAKC,CAAC,IAC3CH,EAAK,SAAW,EAAU,GAAGD,CAAG,IAAIG,CAAC,KAAKC,CAAC,KAAKC,CAAC,IAC9CF,GAAK,KACpB,EAGMG,GAAiBb,GAA2B,CAC1C,GAAIJ,EAAG,IAAII,CAAK,EAAG,MAAO,QAC1B,GAAIJ,EAAG,IAAII,CAAK,EAAG,MAAO,OAC1B,GAAIJ,EAAG,IAAII,CAAK,EAAG,CACX,IAAMc,EAAMd,EAAM,OAClB,GAAIc,IAAQ,EAAG,MAAO,OACtB,GAAIA,IAAQ,EAAG,MAAO,OACtB,GAAIA,IAAQ,EAAG,MAAO,MAC9B,CACA,MAAO,OACf,EAGaC,EAAO,CACZC,EACAC,IAKH,CACG,IAAMC,EAAYD,GAAS,WAAa,UAElCE,GADUF,GAAS,SAAW,YACR,SACtBG,EAAW9B,GAAW0B,CAAY,EACpCK,EAAS,GACb,OAAIF,IAASE,GAAU;AAAA,GACvBA,GAAU,aAAaH,CAAS;AAAA;AAAA,EAE5BD,GAAS,WACL,OAAO,QAAQA,EAAQ,QAAQ,EAAE,QAAQ,CAAC,CAACK,EAAMtB,CAAK,IAAM,CACpD,IAAMC,EAAOY,GAAcb,CAAK,EAChCqB,GAAU,WAAWpB,CAAI,IAAIqB,CAAI;AAAA,CACzC,CAAC,EACDD,GAAU;AAAA,GAGdF,IAASE,GAAU;AAAA;AAAA,GACvBA,GAAU;AAAA,EACVA,GAAUF,EAAU,mBAAmBC,CAAQ;AAAA,EAAQ,sBAAsBA,CAAQ;AAAA,EACrFC,GAAU;AAAA,EAEHA,CACf,EC/IO,IAAME,GAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS9BC,GAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUvCC,GAAe,CAACC,EAA0BC,EAAgBC,IAAiB,CACzE,IAAMC,EAASH,EAAE,aAAaE,CAAI,EAClC,GAAI,CAACC,EAAQ,MAAM,IAAI,MAAM,yBAAyB,EAGtD,GAFAH,EAAE,aAAaG,EAAQF,EAAO,KAAK,CAAC,EACpCD,EAAE,cAAcG,CAAM,EAClBH,EAAE,mBAAmBG,EAAQH,EAAE,cAAc,EAAG,OAAOG,EAC3D,IAAMC,EAAQJ,EAAE,iBAAiBG,CAAM,EACvC,MAAAH,EAAE,aAAaG,CAAM,EACf,IAAI,MAAM,6BAA6BC,CAAK,EAAE,CAC5D,EAEaC,EAAgB,CACrBL,EACAM,EAAiBT,GACjBU,EAAiBT,KACpB,CACOU,EAAG,IAAID,CAAE,IAAGA,EAAKE,EAAKF,CAAO,GAC7BC,EAAG,IAAIF,CAAE,IAAGA,EAAKG,EAAKH,CAAO,GACjC,IAAMI,EAAKV,EAAE,cAAc,EAI3B,GAHAA,EAAE,aAAaU,EAAIX,GAAaC,EAAGM,EAAIN,EAAE,aAAa,CAAC,EACvDA,EAAE,aAAaU,EAAIX,GAAaC,EAAGO,EAAIP,EAAE,eAAe,CAAC,EACzDA,EAAE,YAAYU,CAAE,EACZV,EAAE,oBAAoBU,EAAIV,EAAE,WAAW,EAAG,OAAOU,EACrD,IAAMN,EAAQJ,EAAE,kBAAkBU,CAAE,EACpC,MAAAV,EAAE,cAAcU,CAAE,EACZ,IAAI,MAAM,sBAAsBN,CAAK,EAAE,CACrD,EAEaO,EAAY,CAACX,EAA0BY,IAAmB,CAC/D,IAAMC,EAASb,EAAE,aAAa,EAC9B,OAAAA,EAAE,WAAWA,EAAE,aAAca,CAAM,EACnCb,EAAE,WAAWA,EAAE,aAAc,IAAI,aAAaY,CAAI,EAAGZ,EAAE,WAAW,EAClEA,EAAE,WAAWA,EAAE,aAAc,IAAI,EAC1Ba,CACf,EAEaC,EAAY,CAACd,EAA0BY,IAAmB,CAC/D,IAAMC,EAASb,EAAE,aAAa,EAC9B,OAAAA,EAAE,WAAWA,EAAE,qBAAsBa,CAAM,EAC3Cb,EAAE,WAAWA,EAAE,qBAAsB,IAAI,WAAWY,CAAI,EAAGZ,EAAE,WAAW,EACxEA,EAAE,WAAWA,EAAE,qBAAsB,IAAI,EAClCa,CACf,EAEaE,EAAY,CAACC,EAAeC,EAAiBC,IAAwB,CACtEA,IAAUF,EAAQ,KAAK,IAAI,GAAGE,CAAQ,EAAI,GAC9C,IAAMC,EAASF,EAAM,OAASD,EAC9B,OAAO,KAAK,MAAMG,CAAM,CAChC,EAEaC,EAAe,CACpBpB,EACAmB,EACAE,EACAC,EACAC,IACH,CACGvB,EAAE,WAAWA,EAAE,aAAcsB,CAAG,EAChCtB,EAAE,wBAAwBqB,CAAG,EAC7BrB,EAAE,oBAAoBqB,EAAKF,EAAQnB,EAAE,MAAO,GAAO,EAAG,CAAC,EACnDuB,GAAKvB,EAAE,WAAWA,EAAE,qBAAsBuB,CAAG,CACzD,EAEaC,EAAgB,CAACxB,EAA0ByB,EAAuBJ,EAAUK,IAAiB,CAClG,IAAMC,EAAU3B,EAAE,cAAc,EAChCA,EAAE,YAAYA,EAAE,WAAY2B,CAAO,EACnC3B,EAAE,WAAWA,EAAE,WAAY,EAAGA,EAAE,KAAMA,EAAE,KAAMA,EAAE,cAAeyB,CAAG,EAClEzB,EAAE,eAAeA,EAAE,UAAU,EAC7BA,EAAE,cAAcA,EAAE,WAAYA,EAAE,mBAAoBA,EAAE,MAAM,EAC5DA,EAAE,cAAcA,EAAE,WAAYA,EAAE,mBAAoBA,EAAE,MAAM,EAC5DA,EAAE,cAAcA,EAAE,WAAYA,EAAE,eAAgBA,EAAE,aAAa,EAC/DA,EAAE,cAAcA,EAAE,WAAYA,EAAE,eAAgBA,EAAE,aAAa,EAC/DA,EAAE,YAAYA,EAAE,WAAY,IAAI,EAChCA,EAAE,UAAUqB,EAAKK,CAAI,EACrB1B,EAAE,cAAcA,EAAE,SAAW0B,CAAI,EACjC1B,EAAE,YAAYA,EAAE,WAAY2B,CAAO,CAC3C,EH9FO,IAAMC,EAAQ,MAAOC,GAAoB,CACxC,IAAMC,EAAID,EAAG,GAAI,WAAW,QAAQ,EAC9BE,EAAKC,EAAcF,EAAGD,EAAG,GAAIA,EAAG,EAAE,EAClCI,EAAQ,CAAE,QAASH,EAAG,QAASC,CAAG,EACxCD,EAAE,WAAWC,CAAE,EAEf,IAAIG,EAAc,EACZC,KAAc,EAAAC,QAAO,IAAMF,GAAa,EAExCG,KAAmB,EAAAD,QAAQE,GAAQR,EAAE,mBAAmBC,EAAIO,CAAG,CAAC,EAChEC,KAAkB,EAAAH,QAAQE,GAAQR,EAAE,kBAAkBC,EAAIO,CAAG,CAAC,EAqCpE,MAAO,CAAE,MAAOL,EAAO,OAjCR,IAAM,CACbH,EAAE,MAAMA,EAAE,gBAAgB,EAC1BA,EAAE,SAAS,EAAG,EAAG,GAAGD,EAAG,IAAK,EAC5BC,EAAE,WAAWA,EAAE,UAAW,EAAG,CAAC,CACtC,EA6B+B,MAnCjB,IAAMA,EAAE,cAAcC,CAAE,EAmCA,WA3BnB,CAACO,EAAM,GAAIE,EAAiBC,IAAuB,CAC9D,IAAMC,EAAMH,EAAgBD,EAAK,EAAI,EAC/BK,EAAMC,EAAUd,EAAGU,CAAK,EACxBK,EAAMC,EAAUhB,EAAGW,CAAQ,EAC3BM,GAAMC,EAAUnB,EAAG,MAAQW,EAAOC,CAAQ,EAChDQ,EAAanB,EAAGiB,GAAKL,EAAKC,EAAKE,CAAG,CAC1C,EAqBkD,SAnBjC,CAACP,EAAaE,IAA6B,CACpD,IAAME,EAAML,EAAiBC,CAAG,EAChC,GAAIY,EAAG,IAAIV,CAAK,EAAG,OAAOV,EAAE,UAAUY,EAAKF,CAAK,EAChD,IAAIW,EAAIX,EAAM,OACd,GAAIW,GAAK,EAAG,OAAOrB,EAAE,UAAUqB,CAAM,IAAI,EAAET,EAAKF,CAAK,EACrDW,EAAI,KAAK,KAAKA,CAAC,GAAK,EACpBrB,EAAE,gBAAgBqB,CAAM,IAAI,EAAET,EAAK,GAAOF,CAAK,CACvD,EAY4D,SAV3C,CAACY,EAAaC,IAAgB,CACvC,IAAMC,EAAQ,IAAI,MAClB,OAAO,OAAOA,EAAO,CAAE,IAAAD,EAAK,IAAAD,EAAK,YAAa,WAAY,CAAC,EAC3DE,EAAM,OAAO,EAAE,KAAK,IAAM,CAClB,IAAMZ,EAAML,EAAiBiB,EAAM,GAAG,EAChCC,EAAOpB,EAAYmB,EAAM,GAAG,EAClCE,EAAc1B,EAAGwB,EAAOZ,EAAKa,CAAI,CACzC,CAAC,CACT,CAEqE,CAC7E,EI5CO,IAAME,GAAa,CAACC,EAAcC,IAA2C,CAC5E,IAAMC,EAAmB,CACjB,OAAQ,SACR,MAAO,IAAI,IACX,UAAW,IAAI,IACf,UAAW,IAAI,IACf,GAAGD,CACX,EACA,OAAOE,EAAuBH,EAAkBE,CAAG,CAC3D,EAGMC,EAAyB,CAACC,EAAYH,IAC/BG,EAEDA,EAAK,QAAU,OAAkBC,GAAgBD,EAAK,MAAOA,EAAK,IAAI,EAEtEA,EAAK,UAAYA,EAAK,OAEX,GADYD,EAAuBC,EAAK,OAAQH,CAAO,CAC1C,IAAIG,EAAK,QAAQ,GAGzCA,EAAK,UAAYA,EAAK,UAAYA,EAAK,SAAS,QAAU,EAAUE,GAAqBF,EAAMH,CAAO,EAEtGG,EAAK,cAAgBA,EAAK,UAAYA,EAAK,SAAS,QAAU,EACnDG,GAAyBH,EAAMH,CAAO,EAC9C,MAbW,MAiBpBI,GAAkB,CAACG,EAAYC,IAA2B,CACxD,GAAIA,IAAS,QAAS,CACd,IAAMC,EAAM,OAAOF,CAAK,EACxB,OAAOE,EAAM,IAAM,EAAI,GAAGA,CAAG,KAAO,GAAGA,CAAG,EAClD,CACA,GAAID,IAAS,MAAO,MAAO,GAAG,KAAK,MAAM,OAAOD,CAAK,CAAC,CAAC,GACvD,GAAIC,IAAS,OAAQ,OAAeD,EAAS,OAAS,QACtD,GAAIG,EAAG,IAAIH,CAAK,EAAG,CACX,IAAMI,EAASJ,EACN,IAAKK,GAAM,CACJ,IAAMH,EAAM,OAAOG,CAAC,EACpB,OAAOH,EAAM,IAAM,EAAI,GAAGA,CAAG,KAAO,GAAGA,CAAG,EAClD,CAAC,EACA,KAAK,IAAI,EAClB,GAAID,IAAS,OAAQ,MAAO,aAAaG,CAAM,IAC/C,GAAIH,IAAS,OAAQ,MAAO,aAAaG,CAAM,IAC/C,GAAIH,IAAS,OAAQ,MAAO,aAAaG,CAAM,IAC/C,GAAIH,IAAS,QAAS,MAAO,aAAaG,CAAM,GACxD,CAEA,MAAO,KACf,EAGMN,GAAuB,CAACF,EAAYH,IAAiC,CACnE,GAAI,CAACG,EAAK,UAAYA,EAAK,SAAS,OAAS,EAAG,MAAO,MACvD,IAAMU,EAAOX,EAAuBC,EAAK,SAAS,CAAC,EAAGH,CAAO,EACvDc,EAAQZ,EAAuBC,EAAK,SAAS,CAAC,EAAGH,CAAO,EAC9D,OAAIG,EAAK,WAAa,MAAc,IAAIU,CAAI,MAAMC,CAAK,IACnDX,EAAK,WAAa,MAAc,IAAIU,CAAI,MAAMC,CAAK,IACnDX,EAAK,WAAa,MAAc,IAAIU,CAAI,MAAMC,CAAK,IACnDX,EAAK,WAAa,MAAc,IAAIU,CAAI,MAAMC,CAAK,IACnDX,EAAK,WAAa,MAAc,IAAIU,CAAI,MAAMC,CAAK,IACnDX,EAAK,WAAa,QAAgB,IAAIU,CAAI,OAAOC,CAAK,IACtDX,EAAK,WAAa,WAAmB,IAAIU,CAAI,OAAOC,CAAK,IACzDX,EAAK,WAAa,WAAmB,IAAIU,CAAI,MAAMC,CAAK,IACxDX,EAAK,WAAa,gBAAwB,IAAIU,CAAI,OAAOC,CAAK,IAC9DX,EAAK,WAAa,cAAsB,IAAIU,CAAI,MAAMC,CAAK,IAC3DX,EAAK,WAAa,mBAA2B,IAAIU,CAAI,OAAOC,CAAK,IACjEX,EAAK,WAAa,MAAc,IAAIU,CAAI,OAAOC,CAAK,IACpDX,EAAK,WAAa,KAAa,IAAIU,CAAI,OAAOC,CAAK,IAChD,IAAID,CAAI,MAAMC,CAAK,GAClC,EAGMR,GAA2B,CAACH,EAAYH,IAAiC,CACvE,GAAI,CAACG,EAAK,UAAYA,EAAK,SAAS,OAAS,EAAG,MAAO,MACvD,IAAMY,EAAMZ,EAAK,aACXa,EAAOb,EAAK,SAAS,IAAKc,GAAUf,EAAuBe,EAAOjB,CAAO,CAAC,EAC1E,CAACkB,EAAGC,EAAGC,CAAC,EAAIJ,EAGlB,OAAIA,EAAK,SAAW,EAAU,GAAGD,CAAG,IAAIG,CAAC,IACrCF,EAAK,SAAW,EAAU,GAAGD,CAAG,IAAIG,CAAC,KAAKC,CAAC,IAC3CH,EAAK,SAAW,EAAU,GAAGD,CAAG,IAAIG,CAAC,KAAKC,CAAC,KAAKC,CAAC,IAC9CF,GAAK,KACpB,EAGaG,EAAO,CACZC,EACAC,IAGH,CACG,IAAIC,EAAS,GAETD,GAAS,WACL,OAAO,QAAQA,EAAQ,QAAQ,EAAE,QAAQ,CAAC,CAACE,EAAMlB,CAAK,IAAM,CACpD,IAAMC,EAAOkB,GAAcnB,CAAK,EAChCiB,GAAU,sCAAsCC,CAAI,KAAKjB,CAAI;AAAA,CACrE,CAAC,EACDgB,GAAU;AAAA,GAElBA,GAAU;AAAA,EACVA,GAAU;AAAA,EACV,IAAMG,EAAe7B,GAAWwB,CAAY,EAC5C,OAAAE,GAAU,cAAcG,CAAY;AAAA,EACpCH,GAAU;AAAA,EAEHA,CACf,EAGME,GAAiBnB,GAAuB,CACtC,GAAIG,EAAG,IAAIH,CAAK,EAAG,MAAO,MAC1B,GAAIG,EAAG,IAAIH,CAAK,EAAG,MAAO,OAC1B,GAAIG,EAAG,IAAIH,CAAK,EAAG,CACX,IAAMqB,EAAMrB,EAAM,OAClB,GAAIqB,IAAQ,EAAG,MAAO,YACtB,GAAIA,IAAQ,EAAG,MAAO,YACtB,GAAIA,IAAQ,EAAG,MAAO,WAC9B,CACA,MAAO,KACf,EChIA,IAAMC,GAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASpBC,GAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASfC,EAAe,MAAOC,GAAkB,CAC7C,IAAMC,EAAO,UAAkB,IACzBC,EAASD,EAAI,yBAAyB,EAEtCE,EAAS,MADC,MAAMF,EAAI,eAAe,GACZ,cAAc,EAC3C,OAAAD,EAAE,UAAU,CAAE,OAAAG,EAAQ,OAAAD,EAAQ,UAAW,QAAS,CAAC,EAC5C,CAAE,OAAAC,EAAQ,OAAAD,CAAO,CAChC,EAEaE,EAAiB,CACtBD,EACAD,EACAG,EACAC,EACAC,EAAiBV,GACjBW,EAAiBV,KACpB,CACOW,EAAG,IAAID,CAAE,IAAGA,EAAKE,EAAKF,CAAE,GACxBC,EAAG,IAAIF,CAAE,IAAGA,EAAKG,EAAKH,CAAE,GAC5B,IAAMI,EAASR,EAAO,qBAAqB,CAAE,iBAAkBG,CAAQ,CAAC,EACxE,OAAOH,EAAO,qBAAqB,CAC3B,OAAQ,CACA,OAAQA,EAAO,mBAAmB,CAAE,KAAMI,EAAG,KAAK,CAAE,CAAC,EACrD,WAAY,OACZ,QAAAF,CACR,EACA,SAAU,CACF,OAAQF,EAAO,mBAAmB,CAAE,KAAMK,EAAG,KAAK,CAAE,CAAC,EACrD,WAAY,OACZ,QAAS,CAAC,CAAE,OAAAN,CAAO,CAAC,CAC5B,EACA,OAAAS,EACA,UAAW,CAAE,SAAU,eAAgB,CAC/C,CAAC,CACT,EAEaC,EAAkB,CAACT,EAAmBU,IAAqB,CAChE,IAAMC,EAAW,CAAC,EACZC,EAAW,CAAC,EAClBF,EAAU,QAAQ,CAACG,EAAUC,IAAY,CACjC,GAAI,CAACD,EAAU,OACf,IAAME,EAAY,WAAYF,EACxBG,EAAYH,aAAoB,eAChCI,EAAYJ,aAAoB,WACtC,GAAIE,EAAWJ,EAAS,KAAK,CAAE,QAAAG,EAAS,WAAY,EAAG,OAAQ,CAAE,KAAM,SAAU,CAAE,CAAC,UAC3EE,EAAWL,EAAS,KAAK,CAAE,QAAAG,EAAS,WAAY,EAAG,QAAS,CAAC,CAAE,CAAC,UAChEG,EAAWN,EAAS,KAAK,CAAE,QAAAG,EAAS,WAAY,EAAG,QAAS,CAAC,CAAE,CAAC,MACpE,QACLF,EAAS,KAAK,CAAE,QAAAE,EAAS,SAAAD,CAAS,CAAC,CAC3C,CAAC,EACD,IAAML,EAASR,EAAO,sBAAsB,CAAE,QAASW,CAAS,CAAC,EAC3DO,EAAYlB,EAAO,gBAAgB,CAAE,OAAAQ,EAAQ,QAASI,CAAS,CAAC,EACtE,MAAO,CAACJ,EAAQU,CAAS,CACjC,EAEaC,EAAoBtB,IAClB,CACC,iBAAkB,CACV,CACQ,KAAMA,EAAE,kBAAkB,EAAE,WAAW,EACvC,WAAY,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EACrC,OAAQ,QACR,QAAS,OACjB,CACR,CACR,GAGKuB,GAAcC,GAAiB,KAAK,KAAKA,EAAO,GAAG,EAAI,IAEvDC,EAAsB,CAACtB,EAAmBuB,IAAoB,CACnE,IAAMC,EAAQ,IAAI,aAAaD,CAAK,EAC9BF,EAAOD,GAAWI,EAAM,UAAU,EAClCC,EAASzB,EAAO,aAAa,CAAE,KAAAqB,EAAM,MAAO,EAAG,CAAC,EACtD,MAAO,CAAE,MAAAG,EAAO,OAAAC,CAAO,CAC/B,EAEaC,EAAuB,CAAC1B,EAAmB2B,EAAQ,KAAMC,EAAS,MAAQ,CAC/E,IAAMC,EAAU7B,EAAO,cAAc,CAAE,KAAM,CAAC2B,EAAOC,CAAM,EAAG,OAAQ,aAAc,MAAO,EAAG,CAAC,EACzFE,EAAU9B,EAAO,cAAc,CAAE,UAAW,SAAU,UAAW,QAAS,CAAC,EACjF,MAAO,CAAC6B,EAASC,CAAO,CAChC,EC7FO,IAAMC,EAAS,MAAOC,GAAoB,CACzC,IAAMC,EAAID,EAAG,GAAI,WAAW,QAAQ,EAC9B,CAAE,OAAAE,EAAQ,OAAAC,CAAO,EAAI,MAAMC,EAAaH,CAAC,EACzCI,EAAQ,CACN,OAAAH,EACA,QAASD,EACT,SAAU,CAAC,EACX,SAAU,CAAC,EACX,UAAW,CAAC,CAAC,EAAG,CAAC,CAAC,EAClB,WAAY,EACZ,YAAa,EACrB,EAEMK,EAAeC,GAAoB,CACjC,GAAM,CAAE,MAAAC,EAAO,OAAAC,CAAO,EAAIC,EAAoBR,EAAQK,CAAK,EAC3D,OAAAF,EAAM,UAAU,CAAC,EAAE,KAAK,CAAE,OAAAI,CAAO,CAAC,EAClCJ,EAAM,YAAc,GACb,CAAE,MAAAG,EAAO,OAAAC,CAAO,CAC/B,EAEME,EAAeC,GAA6B,CAC1C,GAAM,CAAE,MAAAC,EAAO,OAAAC,CAAO,EAAIF,EACpB,CAACG,EAASC,CAAO,EAAIC,EAAqBf,EAAQW,EAAOC,CAAM,EACrE,OAAAT,EAAM,UAAU,CAAC,EAAE,KAAKW,EAASD,EAAQ,WAAW,CAAC,EACrDV,EAAM,YAAc,GACb,CAAE,QAAAU,EAAS,MAAAF,EAAO,OAAAC,CAAO,CACxC,EAEMI,EAAS,IAAM,CACb,IAAMC,EAAU,CAAC,EACjBd,EAAM,OAAS,CAAC,EAChBA,EAAM,UAAU,QAASe,GAAa,CAC9B,GAAI,CAACA,EAAS,OAAQ,OACtB,GAAM,CAACC,EAAQC,CAAK,EAAIC,EAAgBrB,EAAQkB,CAAQ,EACxDD,EAAQ,KAAKE,CAAM,EACnBhB,EAAM,OAAO,KAAKiB,CAAK,CAC/B,CAAC,EACDjB,EAAM,SAAWmB,EAAetB,EAAQC,EAAQ,CAAC,EAAGgB,EAASnB,EAAG,GAAIA,EAAG,EAAE,CACjF,EAyCA,MAAO,CAAE,OAAQK,EAAO,OAvCT,IAAM,CACb,GAAIA,EAAM,WAAY,OAClBA,EAAM,aAAaa,EAAO,EAC9Bb,EAAM,YAAc,GACpB,IAAMoB,EAAUvB,EAAO,qBAAqB,EACtCwB,EAAOD,EAAQ,gBAAgBE,EAAiB1B,CAAC,CAAC,EACxDyB,EAAK,YAAYrB,EAAM,QAAQ,EAC/BA,EAAM,OAAO,QAAQ,CAACuB,EAAGC,IAAMH,EAAK,aAAaG,EAAGD,CAAC,CAAC,EACtDF,EAAK,KAAK1B,EAAG,MAAO,EAAG,EAAG,CAAC,EAC3B0B,EAAK,IAAI,EACTxB,EAAO,MAAM,OAAO,CAACuB,EAAQ,OAAO,CAAC,CAAC,CAC9C,EA4BgC,MA1BlB,IAAM,CAAC,EA0BkB,WAxBpB,CAACK,EAAM,GAAIvB,IAAoB,CAGlD,EAqBmD,SAnBlC,CAACuB,EAAavB,IAA6B,CAChDwB,EAAG,IAAIxB,CAAK,IAAGA,EAAQ,CAACA,CAAK,GAC5BF,EAAM,SAASyB,CAAG,IAAGzB,EAAM,SAASyB,CAAG,EAAIxB,EAAYC,CAAK,GACjE,GAAM,CAAE,MAAAC,EAAO,OAAAC,CAAO,EAAIJ,EAAM,SAASyB,CAAG,EAC5CtB,EAAM,IAAID,CAAK,EACfL,EAAO,MAAM,YAAYO,EAAQ,EAAGD,CAAK,CACjD,EAa6D,SAX5C,CAACsB,EAAaE,IAAgB,CACvC3B,EAAM,aACN,IAAMO,EAAS,OAAO,OAAO,IAAI,MAAS,CAAE,IAAAoB,EAAK,YAAa,WAAY,CAAC,EAC3EpB,EAAO,OAAO,EAAE,KAAK,IAAM,CACdP,EAAM,SAASyB,CAAG,IAAGzB,EAAM,SAASyB,CAAG,EAAInB,EAAYC,CAAM,GAClE,GAAM,CAAE,QAAAG,EAAS,MAAAF,EAAO,OAAAC,CAAO,EAAIT,EAAM,SAASyB,CAAG,EACrD5B,EAAO,MAAM,2BAA2B,CAAE,OAAAU,CAAO,EAAG,CAAE,QAAAG,CAAQ,EAAG,CAAE,MAAAF,EAAO,OAAAC,CAAO,CAAC,EAClFT,EAAM,YACd,CAAC,CACT,CAEsE,CAC9E,EC1FO,IAAM4B,GAAQ,CACb,QACA,MACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACR,EAKaC,EAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAWtEC,EAAY,CACjB,MACA,MACA,MACA,MACA,MACA,QACA,WACA,WACA,gBACA,cACA,mBACA,MACA,KACA,MACA,SACA,MACA,SACA,SACA,QACA,SACA,YACA,YACR,EAKaC,EAAY,CACjB,MACA,OACA,OACA,OACA,QACA,OACA,QACA,MACA,QACA,UACA,WACA,MACA,MACA,OACA,cACA,QACA,QACA,SACA,MACA,MACA,UACA,OACA,OACA,OACA,aACA,SACA,SACA,cACA,WACA,MACA,OACA,MACA,MACA,MACA,SACA,YACA,WACA,MACA,OACA,OACA,OACA,UACA,aACA,UACA,UACA,QACA,WACA,OACA,MACA,aACA,OACA,OACA,MACA,qBACA,OACR,EAKaC,EAAc,CAAC,GAAM,EAAK,EAC1BC,GAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC9BC,GAAe,CAAC,EAAK,EAAK,GAAK,CAAG,EC7H/C,IAAMC,GAAY,IAAI,IAChBC,GAAW,IAAI,IACfC,GAAa,IAAI,IAEjBC,GAAkB,IAAM,CACtBC,EAAY,QAASC,GAAU,CACvBL,GAAU,IAAIK,EAAOC,EAAK,OAAQD,CAAK,CAAC,CAChD,CAAC,EACDE,GAAW,QAASF,GAAU,CACtBJ,GAAS,IAAII,EAAOC,EAAK,MAAOD,CAAK,CAAC,CAC9C,CAAC,EACDG,GAAa,QAASH,GAAU,CACxBH,GAAW,IAAIG,EAAOC,EAAK,QAASD,CAAK,CAAC,CAClD,CAAC,CACT,EAEaI,EAAiBC,IACjBV,GAAU,IAAIU,CAAC,GAAGP,GAAgB,EAChCH,GAAU,IAAIU,CAAC,GAAKJ,EAAK,OAAQI,CAAC,GAIpCC,EAAgBD,GACjBT,GAAS,IAAIS,CAAC,EAAUT,GAAS,IAAIS,CAAC,EACnCJ,EAAK,MAAOI,CAAC,EAIfE,EAAkBF,GACnBR,GAAW,IAAIQ,CAAC,EAAUR,GAAW,IAAIQ,CAAC,EACvCJ,EAAK,QAASI,CAAC,EAIjBG,GAAsBC,GAAiC,CAC5D,IAAMC,EAAa,IAAI,IACjBC,EAAa,IAAI,IAEvB,OAAAF,EAAM,QAASG,GAAc,CACrB,IAAMC,EAAYC,GAAsBF,CAAS,EAC7CD,EAAW,IAAIE,CAAS,GACfH,EAAW,IAAIG,CAAS,GAAGH,EAAW,IAAIG,EAAW,CAACF,EAAW,IAAIE,CAAS,CAAE,CAAC,EACtFH,EAAW,IAAIG,CAAS,EAAG,KAAKD,CAAS,GAC1CD,EAAW,IAAIE,EAAWD,CAAS,CAClD,CAAC,EACMF,CACf,EAGMI,GAAyBF,GACT,CAACA,EAAU,KAAM,GAAGA,EAAU,KAAK,GAAIA,EAAU,UAAY,EAAE,EAChE,KAAK,GAAG,ECjDtB,IAAMG,GAAiBC,GAClBC,EAAG,IAAID,CAAC,EAAUE,EAAcF,CAAC,EACjCC,EAAG,IAAID,CAAC,EACAC,EAAG,IAAID,CAAC,EAAUG,EAAaH,CAAC,EAC7BI,EAAeJ,CAAC,EAE3BC,EAAG,IAAID,CAAC,EAAUK,GAAmBL,CAAC,EACtCC,EAAG,IAAID,CAAC,EAAUM,GAAoBN,CAAC,EACpCO,EAAK,QAAS,CAAC,EAIxBF,GAAsBG,GAAuB,CAC3C,IAAMC,EAAMD,EAAM,OAClB,OAAIC,IAAQ,EAAUF,EAAK,OAAQC,CAAK,EACpCC,IAAQ,EAAUF,EAAK,OAAQC,CAAK,EACpCC,IAAQ,EAAUF,EAAK,OAAQC,CAAK,EACpCC,IAAQ,EAAUF,EAAK,OAAQC,CAAK,EACpCC,IAAQ,GAAWF,EAAK,OAAQC,CAAK,EAClCD,EAAK,QAASC,EAAM,CAAC,CAAC,CACrC,EAGMF,GAAuBI,GAAgB,CAErC,GAAI,MAAOA,GAAO,MAAOA,GAAO,MAAOA,EAAK,CACpC,IAAMC,EAAM,CAACD,EAAI,EAAGA,EAAI,EAAGA,EAAI,CAAC,EAChC,MAAI,MAAOA,GAAKC,EAAI,KAAKD,EAAI,CAAC,EACvBH,EAAK,QAASI,CAAG,CAChC,CAEA,GAAI,MAAOD,GAAO,MAAOA,EAAK,CACtB,IAAMC,EAAM,CAACD,EAAI,EAAGA,EAAI,CAAC,EACzB,MAAI,MAAOA,GAAKC,EAAI,KAAKD,EAAI,CAAC,EAC1B,MAAOA,GAAKC,EAAI,KAAKD,EAAI,CAAC,EACvBL,GAAmBM,CAAG,CACrC,CACA,OAAOJ,EAAK,QAAS,CAAC,CAC9B,EAGaK,EAASZ,GACVC,EAAG,IAAID,CAAC,EAAUI,EAAeJ,CAAC,EAC/BO,EAAK,QAAS,OAAOP,CAAC,CAAC,EAGzBa,GAAOb,GACRC,EAAG,IAAID,CAAC,GAAK,OAAO,UAAUA,CAAC,EAAUG,EAAaH,CAAC,EACpDO,EAAK,MAAO,KAAK,MAAM,OAAOP,CAAC,CAAC,CAAC,EAGnCc,GAAQd,GACNE,EAAc,EAAQF,CAAE,EAG1Be,GAAO,CAACf,EAASgB,IAClBf,EAAG,IAAID,CAAC,EAAUO,EAAK,OAAQ,CAAC,EAAG,CAAC,CAAC,EACrCN,EAAG,IAAIe,CAAC,EACAf,EAAG,IAAID,CAAC,EAAUO,EAAK,OAAQP,EAAE,MAAM,EAAG,CAAC,CAAC,EAC5CC,EAAG,IAAID,CAAC,GAAK,MAAOA,GAAK,MAAOA,EAAUO,EAAK,OAAQ,CAACP,EAAE,EAAGA,EAAE,CAAC,CAAC,EAC9DO,EAAK,OAAQ,CAAC,OAAOP,CAAC,EAAG,OAAOA,CAAC,CAAC,CAAC,EAE3CO,EAAK,OAAQ,CAAC,OAAOP,CAAC,EAAG,OAAOgB,CAAC,CAAC,CAAC,EAGrCC,GAAO,CAACjB,EAASgB,EAASE,IAC3BjB,EAAG,IAAID,CAAC,EAAUO,EAAK,OAAQ,CAAC,EAAG,EAAG,CAAC,CAAC,EACxCN,EAAG,IAAIe,CAAC,EACAf,EAAG,IAAID,CAAC,EAAUO,EAAK,OAAQP,EAAE,MAAM,EAAG,CAAC,CAAC,EAC5CC,EAAG,IAAID,CAAC,GAAK,MAAOA,GAAK,MAAOA,GAAK,MAAOA,EAAUO,EAAK,OAAQ,CAACP,EAAE,EAAGA,EAAE,EAAGA,EAAE,CAAC,CAAC,EAC/EO,EAAK,OAAQ,CAAC,OAAOP,CAAC,EAAG,OAAOA,CAAC,EAAG,OAAOA,CAAC,CAAC,CAAC,EAEzDkB,IAAM,OACKX,EAAK,OAAQ,CAAC,OAAOP,CAAC,EAAG,OAAOgB,CAAC,EAAG,CAAC,CAAC,EAE9CT,EAAK,OAAQ,CAAC,OAAOP,CAAC,EAAG,OAAOgB,CAAC,EAAG,OAAOE,CAAC,CAAC,CAAC,EAGhDC,GAAO,CAACnB,EAASgB,EAASE,EAASE,IACpCnB,EAAG,IAAID,CAAC,EAAUO,EAAK,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,EAC3CN,EAAG,IAAIe,CAAC,EACAf,EAAG,IAAID,CAAC,EAAUO,EAAK,OAAQP,EAAE,MAAM,EAAG,CAAC,CAAC,EAC5CC,EAAG,IAAID,CAAC,GAAK,MAAOA,GAAK,MAAOA,GAAK,MAAOA,GAAK,MAAOA,EAAUO,EAAK,OAAQ,CAACP,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,CAAC,CAAC,EAChGO,EAAK,OAAQ,CAAC,OAAOP,CAAC,EAAG,OAAOA,CAAC,EAAG,OAAOA,CAAC,EAAG,CAAC,CAAC,EAEzDO,EAAK,OAAQ,CAAC,OAAOP,CAAC,EAAG,OAAOgB,CAAC,EAAG,OAAOE,CAAC,EAAG,OAAOE,CAAC,CAAC,CAAC,EAG3DC,GAAQ,CAACC,EAASC,EAASC,IAAe,CAC/C,GAAIF,IAAM,OAAW,OAAOf,EAAK,QAAS,CAAC,EAAG,EAAG,CAAC,CAAC,EAGnD,GAAIN,EAAG,IAAIqB,CAAC,GAAKA,EAAE,WAAW,GAAG,EAAG,CAC5B,IAAMG,EAAMH,EAAE,MAAM,CAAC,EACfI,EAAM,SAASD,EAAK,EAAE,EAC5B,OAAOlB,EAAK,QAAS,EAAGmB,GAAO,GAAM,KAAO,KAAOA,GAAO,EAAK,KAAO,KAAMA,EAAM,KAAO,GAAG,CAAC,CACrG,CAGA,OAAIzB,EAAG,IAAIqB,CAAC,GAAKC,IAAM,QAAaC,IAAM,OAC3BjB,EAAK,QAAS,EAAGe,GAAK,GAAM,KAAO,KAAOA,GAAK,EAAK,KAAO,KAAMA,EAAI,KAAO,GAAG,CAAC,EAGxFL,GAAKK,EAAGC,EAAGC,CAAC,CAC3B,ECzGA,IAAIG,GAAgB,EAGdC,GAAiB,IAAM,QAAQ,EAAED,EAAa,GAGvCE,EAAa,CAACC,EAAgBC,EAAaC,KACzC,CACC,GAAIJ,GAAe,EACnB,KAAAE,EACA,MAAAC,EACA,SAAU,CAAC,EACX,GAAGC,CACX,GAGFC,GAAoB,CAACC,EAAM,KAAOC,EAAS,SAASD,CAAU,EAC9DE,GAAmB,CAACF,EAAM,KAAOG,EAAU,SAASH,CAAU,EAC9DI,GAAe,CAACJ,EAAM,KAAOK,EAAU,SAASL,CAAU,EAG1DM,EAAkB,CAACC,EAAYC,IAA0C,CACvE,IAAMC,EAAM,CAACC,EAAkBV,IAAiB,CACxC,GAAI,GAACW,EAAG,IAAIX,CAAG,GAAKA,IAAQ,QAE5B,OAAIA,IAAQ,KAAaO,EAAK,GAC1BP,IAAQ,OAAeO,EAAK,KAC5BP,IAAQ,QAAgBO,EAAK,MAC7BP,IAAQ,WAAmBO,EAAK,SAGhCR,GAAkBC,CAAG,EACVM,EACCX,EAAWiB,GAAeZ,CAAG,EAAG,OAAW,CACnC,OAAQO,EACR,SAAUP,CAClB,CAAC,EACDQ,CACR,EAGJN,GAAiBF,CAAG,EACT,IAAIa,IACIP,EACCX,EAAWY,EAAK,KAAM,OAAW,CACzB,SAAUP,EACV,SAAU,CAACO,EAAM,GAAGM,CAAI,CAChC,CAAC,EACDL,CACR,EAIZJ,GAAaJ,CAAG,EACL,IAAIa,IACIP,EACCX,EAAWmB,GAAkBd,EAAKO,EAAK,IAAI,EAAG,OAAW,CACjD,aAAcP,EACd,SAAU,CAACO,EAAM,GAAGM,CAAI,CAChC,CAAC,EACDL,CACR,EAGTA,IAAW,CAAE,KAAM,CAACR,CAAG,EAAG,KAAM,CAAC,CAAE,CAAC,CACnD,EACMe,EAAQ,CAACL,EAAkBM,EAAmBH,IACrCL,IAAW,CAAE,KAAM,CAAC,EAAG,KAAAK,CAAK,CAAC,EAG5C,OAAO,IAAI,MAAM,IAAM,CAAC,EAAG,CAAE,IAAAJ,EAAK,MAAAM,CAAM,CAAC,CACjD,EAGMH,GAAkBK,GACZA,EAAQ,SAAW,EAAU,QAC7BA,EAAQ,SAAW,EAAU,OAC7BA,EAAQ,SAAW,EAAU,OAC7BA,EAAQ,SAAW,EAAU,OAC1B,QAITH,GAAoB,CAACI,EAAcC,IAC7BD,IAAS,SAAiB,QAEDC,EAKxBZ,EAAO,CAACX,EAAgBC,EAAaC,IAA4B,CACtE,IAAMsB,EAAezB,EAAWC,EAAMC,EAAOC,CAAO,EACpD,OAAOQ,EAAgBc,CAAY,CAC3C,ECpFA,IAAMC,GAAoBC,GAAyB,CAC3C,GAAIC,EAAG,IAAID,CAAK,EAAG,MAAO,QAC1B,GAAIC,EAAG,IAAID,CAAK,EAAG,MAAO,OAC1B,GAAIC,EAAG,IAAID,CAAK,EAAG,CACX,IAAME,EAAMF,EAAM,OAClB,GAAIE,IAAQ,EAAG,MAAO,OACtB,GAAIA,IAAQ,EAAG,MAAO,OACtB,GAAIA,IAAQ,EAAG,MAAO,OACtB,GAAIA,IAAQ,EAAG,MAAO,OACtB,GAAIA,IAAQ,GAAI,MAAO,MAC/B,CACA,OAAID,EAAG,IAAID,CAAK,GAAK,MAAOA,GAAS,MAAOA,GAAS,MAAOA,EAAc,QACnE,OACf,EAGaG,EAAWC,GAAmC,CACnD,IAAMC,EAAON,GAAiBK,CAAY,EACtCE,EAAeF,EACfG,EAAiE,KACjEC,EAAiE,KAE/DC,EAAWC,EAAKL,EAAMC,CAAY,EAGlCK,EAAOX,GAAe,CACpBM,EAAeN,EACfS,EAAS,MAAQT,CACzB,EAEMY,EAAkBC,IAChBN,EAAuBM,EAChBC,GAGTC,EAAkBF,IAChBL,EAAuBK,EAChBC,GAGTE,EAAsBC,GAA2B,CAC/C,GAAIV,EAAsB,CAClB,IAAMW,EAAWX,EAAqBU,CAAO,EACzCC,IAAa,QAAWP,EAAIO,CAAQ,CAChD,CACA,GAAIV,EAAsB,CAClB,IAAMU,EAAWV,EAAqBS,CAAO,EACzCC,IAAa,QAAWP,EAAIO,CAAQ,CAChD,CACR,EAEMJ,EAAc,OAAO,OAAOL,CAAQ,EAC1C,OAAAK,EAAY,IAAMH,EAClBG,EAAY,eAAiBF,EAC7BE,EAAY,eAAiBC,EAC7BD,EAAY,mBAAqBE,EACjCF,EAAY,UAAY,GACjBA,CACf,EAGaK,GAAQhB,EAAQ,CAAG,EACnBiB,GAAYjB,EAAQ,CAAG,EACvBkB,GAAalB,EAAQ,CAAG,EACxBmB,GAAcnB,EAAQ,CAAC,KAAM,IAAI,CAAC,EAClCoB,GAASpB,EAAQ,CAAC,EAAG,CAAC,CAAC,EAGvBqB,GAAkBP,GAA2B,CAElD,GAAIA,EAAQ,OAAS,OAAW,CACxB,IAAMQ,EAAWN,GAAM,OAAS,EAChCA,GAAM,IAAIF,EAAQ,IAAI,EACtBG,GAAU,IAAIK,CAAQ,EACtBJ,GAAW,IAAIJ,EAAQ,KAAOQ,CAAQ,CAC9C,CACR,EC7EO,IAAMC,GAAMC,GAAmC,CAC9C,IAAMC,EAAe,IAAIC,IAAgB,CACjC,IAAMC,EAASD,EAAK,IAAKE,GACbC,EAAG,IAAID,CAAG,GAAK,SAAUA,GAAOA,EAAI,KAAaA,EAC9CE,EAAMF,CAAG,CACvB,EAED,OADeJ,EAAOG,CAAM,GACXG,EAAM,CAAC,CAChC,EACA,OAAAL,EAAa,KAAQE,GAAgBH,EAAOG,CAAM,EAC3CF,CACf,EAGaM,GAAK,CAACC,EAAcC,IAA0C,CACnEA,EAAS,EAET,IAAMC,EAAkB,CAChB,OAAOC,EAAiBC,EAA0C,CAC1D,OAAAA,EAAY,EACLF,CACf,EACA,KAAKG,EAA0B,CACvBA,EAAa,CACrB,CACR,EAEA,OAAOH,CACf,EAGaI,GAAYC,EAAK,OAAQ,MAAS,EAClCC,GAAWD,EAAK,OAAQ,MAAS,EACjCE,GAAQC,EAAQ,CAAG,EACnBC,GAAcD,EAAQ,CAAC,KAAM,IAAI,CAAC,EAClCE,GAASF,EAAQ,CAAC,EAAG,CAAC,CAAC,EAGvBG,GAAOC,GAASA,EAAE,IAAI,EACtBC,GAAOD,GAASA,EAAE,IAAI,EACtBE,GAAOF,GAASA,EAAE,IAAI,EACtBG,GAAOH,GAASA,EAAE,IAAI,EACtBI,GAAQJ,GAASA,EAAE,KAAK,EACxBK,GAASL,GAASA,EAAE,MAAM,EAC1BM,GAAQN,GAASA,EAAE,KAAK,EACxBO,GAASP,GAASA,EAAE,MAAM,EAC1BQ,GAAaR,GAASA,EAAE,UAAU,EAClCS,GAAUT,GAASA,EAAE,OAAO,Eb5ClC,IAAMU,GAAQC,GACRC,EAAG,IAAID,CAAC,EACT,SAAUA,EADS,GAKlBE,GAAW,IACT,OAAO,OAAW,IAGpBC,GAAoB,IACrBD,GAAS,EAAU,GAChB,QAAS,UAGpBE,GAAQ,YAAY,IAAI,EAEfC,GAAYC,GAAwB,CACzC,IAAMC,KAAK,SAAmB,CACtB,SAAU,GACV,QAAS,GACT,OAAQ,GACR,KAAM,GACN,KAAM,CAAC,EAAG,CAAC,EACX,MAAO,CAAC,EAAG,CAAC,EACZ,MAAO,EACP,MAAO,CAAC,EACR,OAAQ,CAAC,CACjB,CAAC,EAED,OAAAA,EAAG,SAAQ,eAAY,EACvBA,EAAG,SAAQ,eAAY,EAEvBA,EAAG,aAAY,WAAQ,CAACC,EAAGC,EAAGC,IAAMH,EAAG,MAAM,IAAMA,EAAG,aAAaC,EAAGC,EAAGC,CAAC,CAAC,CAAC,EAC5EH,EAAG,WAAU,WAAQ,CAACC,EAAGC,IAAMF,EAAG,MAAM,IAAMA,EAAG,WAAWC,EAAGC,CAAC,CAAC,CAAC,EAClEF,EAAG,WAAU,WAAQ,CAACC,EAAGC,EAAGC,IAAMH,EAAG,MAAM,IAAMA,EAAG,WAAWC,EAAGC,EAAGC,CAAC,CAAC,CAAC,EACxEH,EAAG,QAAQ,CAAE,YAAaA,EAAG,KAAM,OAAQ,CAAC,EAAG,CAAC,EAAG,MAAAH,EAAM,CAAC,EAE1DG,EAAG,QAAS,SAAY,CAChBA,EAAG,GAAKA,EAAG,IAAMA,EAAG,MAAQA,EAAG,OAC/BA,EAAG,GAAKA,EAAG,IAAMA,EAAG,MAAQA,EAAG,SAC1BJ,GAAkB,IAAGI,EAAG,QAAU,IACnCA,EAAG,QACCA,EAAI,MAAMI,EAAMJ,CAAE,CAAQ,EAC3BA,EAAI,MAAMK,EAAOL,CAAE,CAAQ,EAClCA,EAAG,OAAO,EACVA,EAAG,MAAM,KACDA,EAAG,KAAK,EACRA,EAAG,MAAM,MAAM,EACfA,EAAG,OAAO,EACHA,EAAG,OACjB,EACG,CAAAA,EAAG,WACP,OAAO,iBAAiB,SAAUA,EAAG,MAAM,EAC3CA,EAAG,GAAG,iBAAiB,YAAaA,EAAG,SAAS,EACxD,CAAC,EAEDA,EAAG,QAAS,IAAM,CACVA,EAAG,MAAM,KAAK,EACdA,EAAG,MAAM,MAAMA,EAAG,MAAM,EACpB,CAAAA,EAAG,WACP,OAAO,oBAAoB,SAAUA,EAAG,MAAM,EAC9CA,EAAG,GAAG,oBAAoB,YAAaA,EAAG,SAAS,EAC3D,CAAC,EAEDA,EAAG,SAAU,IAAM,CACX,IAAMM,EAAIN,EAAG,OAAS,OAAO,WACvBO,EAAIP,EAAG,QAAU,OAAO,YAC9BA,EAAG,KAAK,CAAC,EAAIA,EAAG,GAAG,MAAQM,EAC3BN,EAAG,KAAK,CAAC,EAAIA,EAAG,GAAG,OAASO,EAC5BP,EAAG,QAAQ,cAAeA,EAAG,IAAI,CACzC,CAAC,EAEDA,EAAG,YAAa,CAACQ,EAASC,EAAID,EAAG,QAASE,EAAIF,EAAG,UAAY,CACrD,GAAM,CAACF,EAAGC,CAAC,EAAIP,EAAG,KACZ,CAAE,IAAAW,EAAK,KAAAC,CAAK,EAAIZ,EAAG,GAAG,sBAAsB,EAClDA,EAAG,MAAM,CAAC,GAAKS,EAAIE,EAAML,EAAI,IAAMA,EAAI,GACvCN,EAAG,MAAM,CAAC,EAAI,EAAEU,EAAIE,EAAOL,EAAI,IAAMA,EAAI,GACzCP,EAAG,QAAQ,SAAUA,EAAG,KAAK,CACrC,CAAC,EAEDA,EAAG,OAAQ,IAAM,CACTH,GAAQ,YAAY,IAAI,EAAI,IAC5BG,EAAG,QAAQ,QAASH,EAAK,CACjC,CAAC,EAEMG,EAAGD,CAAK,CACvB,EAEOc,GAAQf","names":["src_exports","__export","CACHE_BOOLS","CACHE_FLOATS","CACHE_INTS","FUNCTIONS","Fn","If","OPERATORS","SWIZZLES","TYPES","abs","alignTo256","bool","ceil","color","convertToNode","cos","createAttrib","createBindGroup","createDescriptor","createDevive","createGL","createIbo","createNode","createPipeline","createProgram","createTexture","createTextureSampler","createUniformBuffer","createVbo","src_default","defaultFragmentGLSL","defaultVertexGLSL","dig","each","ext","fig","findDuplicateNodes","float","floor","flush","fract","fragCoord","getCachedBool","getCachedFloat","getCachedInt","getStride","glsl","iDeltaTime","iMouse","iPrevTime","iResolution","iTime","int","is","isGL","isServer","isWebGPUSupported","length","node","nodeToGLSL","nodeToWGSL","normalize","position","replace","sig","sin","sqrt","tan","uniform","updateUniforms","vec2","vec3","vec4","webgl","webgpu","wgsl","__toCommonJS","import_reev","import_refr","import_reev","is","a","each","obj","fn","flush","args","f","replace","x","from","to","ext","src","fig","dig","sig","value","digit","nodeToGLSL","nodeProxy","context","ctx","generateGLSLExpression","node","is","generateGLSLOperator","generateGLSLMathFunction","formatGLSLValue","value","type","num","values","v","left","right","fun","args","child","x","y","z","inferGLSLType","len","glsl","fragmentNode","options","precision","is300ES","fragment","shader","name","defaultVertexGLSL","defaultFragmentGLSL","createShader","c","source","type","shader","error","createProgram","vs","fs","is","glsl","pg","createVbo","data","buffer","createIbo","getStride","count","value","iboValue","stride","createAttrib","loc","vbo","ibo","createTexture","img","unit","texture","webgl","gl","c","pg","createProgram","state","_activeUnit","activeUnits","cached","uniformLocations","key","attribLocations","value","iboValue","loc","vbo","createVbo","ibo","createIbo","str","getStride","createAttrib","is","l","alt","src","image","unit","createTexture","nodeToWGSL","nodeProxy","context","ctx","generateWGSLExpression","node","formatWGSLValue","generateWGSLOperator","generateWGSLMathFunction","value","type","num","is","values","v","left","right","fun","args","child","x","y","z","wgsl","fragmentNode","options","shader","name","inferWGSLType","fragmentExpr","len","defaultVertexWGSL","defaultFragmentWGSL","createDevive","c","gpu","format","device","createPipeline","buffers","layouts","vs","fs","is","wgsl","layout","createBindGroup","resources","entries0","entries1","resource","binding","isUniform","isTexture","isSampler","bindGroup","createDescriptor","alignTo256","size","createUniformBuffer","value","array","buffer","createTextureSampler","width","height","texture","sampler","webgpu","gl","c","device","format","createDevive","state","initUniform","value","array","buffer","createUniformBuffer","initTexutre","source","width","height","texture","sampler","createTextureSampler","update","layouts","resource","layout","group","createBindGroup","createPipeline","encoder","pass","createDescriptor","v","i","key","is","src","TYPES","SWIZZLES","OPERATORS","FUNCTIONS","CACHE_BOOLS","CACHE_INTS","CACHE_FLOATS","boolCache","intCache","floatCache","initializeCache","CACHE_BOOLS","value","node","CACHE_INTS","CACHE_FLOATS","getCachedBool","x","getCachedInt","getCachedFloat","findDuplicateNodes","nodes","duplicates","signatures","nodeProxy","signature","generateNodeSignature","convertToNode","x","is","getCachedBool","getCachedInt","getCachedFloat","convertArrayToNode","convertObjectToNode","node","array","len","obj","arr","float","int","bool","vec2","y","vec3","z","vec4","w","color","r","g","b","hex","num","nodeIdCounter","generateNodeId","createNode","type","value","options","isSwizzleProperty","key","SWIZZLES","isOperatorMethod","OPERATORS","isMathMethod","FUNCTIONS","createNodeProxy","node","callback","get","_target","is","getSwizzleType","args","getMathReturnType","apply","_thisArg","swizzle","func","inputType","nodeInstance","inferUniformType","value","is","len","uniform","initialValue","type","currentValue","objectUpdateCallback","renderUpdateCallback","baseNode","node","set","onObjectUpdate","callback","uniformNode","onRenderUpdate","_updateFromContext","context","newValue","iTime","iPrevTime","iDeltaTime","iResolution","iMouse","updateUniforms","prevTime","Fn","jsFunc","functionNode","args","inputs","arg","is","float","If","condition","callback","conditionalNode","newCondition","newCallback","elseCallback","fragCoord","node","position","iTime","uniform","iResolution","iMouse","abs","x","sin","cos","tan","sqrt","floor","ceil","fract","normalize","length","isGL","a","is","isServer","isWebGPUSupported","iTime","createGL","props","gl","k","v","i","webgl","webgpu","w","h","_e","x","y","top","left","src_default"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/webgl.ts","../src/utils/helpers.ts","../src/node/const.ts","../src/node/utils.ts","../src/node/code.ts","../src/node/scope.ts","../src/node/node.ts","../src/node/index.ts","../src/utils/program.ts","../src/webgpu.ts","../src/utils/pipeline.ts"],"sourcesContent":["import { durable, event } from 'reev'\nimport { createFrame, createQueue } from 'refr'\nimport { webgl } from './webgl'\nimport { webgpu } from './webgpu'\nimport { is } from './utils/helpers'\nimport type { EventState } from 'reev'\nimport type { GL } from './types'\nexport * from './node'\nexport * from './types'\nexport * from './utils/helpers'\nexport * from './utils/pipeline'\nexport * from './utils/program'\nexport * from './webgl'\nexport * from './webgpu'\n\nexport const isGL = (a: unknown): a is EventState<GL> => {\n if (!is.obj(a)) return false\n if ('isGL' in a) return true\n return false\n}\n\nexport const isServer = () => {\n return typeof window === 'undefined'\n}\n\nexport const isWebGPUSupported = () => {\n if (isServer()) return false\n return 'gpu' in navigator\n}\n\nlet iTime = performance.now()\n\nexport const createGL = (props?: Partial<GL>) => {\n const gl = event<Partial<GL>>({\n isNative: false,\n isWebGL: true,\n isLoop: true,\n isGL: true,\n size: [0, 0],\n mouse: [0, 0],\n count: 6,\n webgl: {},\n webgpu: {},\n }) as EventState<GL>\n\n gl.queue = createQueue()\n gl.frame = createFrame()\n\n gl.attribute = durable((k, v, i) => gl.queue(() => gl._attribute?.(k, v, i)))\n gl.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)))\n gl.uniform = durable((k, v, i) => gl.queue(() => gl._uniform?.(k, v, i)))\n gl.uniform({ iResolution: gl.size, iMouse: [0, 0], iTime })\n\n gl('mount', async () => {\n gl.vs = gl.vs || gl.vert || gl.vertex\n gl.fs = gl.fs || gl.frag || gl.fragment\n if (!isWebGPUSupported()) gl.isWebGL = true\n if (gl.isWebGL) {\n gl((await webgl(gl)) as GL)\n } else gl((await webgpu(gl)) as GL)\n gl.resize()\n gl.frame(() => {\n gl.loop()\n gl.queue.flush()\n gl.render()\n return gl.isLoop\n })\n if (gl.isNative) return\n window.addEventListener('resize', gl.resize)\n gl.el.addEventListener('mousemove', gl.mousemove)\n })\n\n gl('clean', () => {\n gl.frame.stop()\n gl.frame.clean(gl.render)\n if (gl.isNative) return\n window.removeEventListener('resize', gl.resize)\n gl.el.removeEventListener('mousemove', gl.mousemove)\n })\n\n gl('resize', () => {\n const w = gl.width || window.innerWidth\n const h = gl.height || window.innerHeight\n gl.size[0] = gl.el.width = w\n gl.size[1] = gl.el.height = h\n gl.uniform('iResolution', gl.size)\n })\n\n gl('mousemove', (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = gl.size\n const { top, left } = gl.el.getBoundingClientRect()\n gl.mouse[0] = (x - top - w / 2) / (w / 2)\n gl.mouse[1] = -(y - left - h / 2) / (h / 2)\n gl.uniform('iMouse', gl.mouse)\n })\n\n gl('loop', () => {\n iTime = performance.now() / 1000\n gl.uniform('iTime', iTime)\n })\n\n return gl(props)\n}\n\nexport default createGL\n","import { nested as cached } from 'reev'\nimport { is } from './utils/helpers'\nimport { createAttrib, createIbo, createProgram, createTexture, createVbo, getStride } from './utils/program'\nimport type { GL, WebGLState } from './types'\n\nexport const webgl = async (gl: Partial<GL>) => {\n const c = gl.el!.getContext('webgl2')!\n const pg = createProgram(c, gl.vs, gl.fs)!\n const state = { context: c, program: pg } as WebGLState\n c.useProgram(pg)\n\n let _activeUnit = 0\n const uniforms = cached((key) => c.getUniformLocation(pg, key))\n const attribs = cached((key) => c.getAttribLocation(pg, key))\n const units = cached(() => _activeUnit++)\n\n const clean = () => c.deleteProgram(pg)\n\n const render = () => {\n c.clear(c.COLOR_BUFFER_BIT)\n c.viewport(0, 0, ...gl.size!)\n c.drawArrays(c.TRIANGLES, 0, 3)\n }\n\n const _attribute = (key = '', value: number[], iboValue: number[]) => {\n const loc = attribs(key, true)\n const vbo = createVbo(c, value)\n const ibo = createIbo(c, iboValue)\n const str = getStride(gl.count!, value, iboValue)\n createAttrib(c, str, loc, vbo, ibo)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n const loc = uniforms(key)\n if (is.num(value)) return c.uniform1f(loc, value)\n let l = value.length\n if (l <= 4) return c[`uniform${l as 2}fv`](loc, value)\n l = Math.sqrt(l) << 0\n c[`uniformMatrix${l as 2}fv`](loc, false, value)\n }\n\n const _texture = (key: string, src: string) => {\n const image = new Image()\n Object.assign(image, { src, crossOrigin: 'anonymous' })\n image.decode().then(() => {\n const loc = uniforms(key)\n const unit = units(key)\n createTexture(c, image, loc, unit)\n })\n }\n\n return { webgl: state, render, clean, _attribute, _uniform, _texture }\n}\n","export const is = {\n arr: Array.isArray,\n bol: (a: unknown): a is boolean => typeof a === 'boolean',\n str: (a: unknown): a is string => typeof a === 'string',\n num: (a: unknown): a is number => typeof a === 'number',\n int: (a: unknown): a is number => Number.isInteger(a),\n fun: (a: unknown): a is Function => typeof a === 'function',\n und: (a: unknown): a is undefined => typeof a === 'undefined',\n nul: (a: unknown): a is null => a === null,\n set: (a: unknown): a is Set<unknown> => a instanceof Set,\n map: (a: unknown): a is Map<unknown, unknown> => a instanceof Map,\n obj: (a: unknown): a is object => !!a && a.constructor.name === 'Object',\n nan: (a: unknown): a is number => typeof a === 'number' && Number.isNaN(a),\n}\n\n/**\n * each\n */\ntype EachFn<Value, Key, This> = (this: This, value: Value, key: Key) => void\ntype Eachable<Value = any, Key = any, This = any> = {\n forEach(cb: EachFn<Value, Key, This>, ctx?: This): void\n}\n\nexport const each = <Value, Key, This>(obj: Eachable<Value, Key, This>, fn: EachFn<Value, Key, This>) => obj.forEach(fn)\n\nexport const flush = <Value extends Function, Key, This>(obj: Eachable<Value, Key, This>, ...args: any[]) => {\n each(obj, (f) => f(...args))\n}\n\n/**\n * other\n */\nexport const replace = (x = '', from = '_', to = '/') => x.split(from).join(to)\nexport const ext = (src = '.pdf') => src.split('.').pop()?.toLowerCase() ?? ''\nexport const fig = (x = 0) => `${x}`.split('.')[1]?.length ?? 0\nexport const dig = (x = 0) => `${x}`.split('.')[0]?.length - (x < 0 ? 1 : 0)\nexport const sig = (value = 0, digit = -2) => {\n digit *= -1\n digit = Math.pow(10, digit)\n value *= digit\n value = Math.round(value)\n value /= digit\n return value\n}\n","export const SWIZZLES = ['x', 'y', 'z', 'w', 'r', 'g', 'b', 'a', 's', 't', 'p', 'q'] as const\n\nexport const NODE_TYPES = [\n 'float',\n 'int',\n 'uint',\n 'bool',\n 'color',\n 'vec2',\n 'vec3',\n 'vec4',\n 'mat2',\n 'mat3',\n 'mat4',\n 'ivec2',\n 'ivec3',\n 'ivec4',\n 'uvec2',\n 'uvec3',\n 'uvec4',\n 'bvec2',\n 'bvec3',\n 'bvec4',\n] as const\n\nexport const OPERATORS = {\n add: '+',\n sub: '-',\n mul: '*',\n div: '/',\n mod: '%',\n equal: '==',\n notEqual: '!=',\n lessThan: '<',\n lessThanEqual: '<=',\n greaterThan: '>',\n greaterThanEqual: '>=',\n and: '&&',\n or: '||',\n bitAnd: '&',\n bitOr: '|',\n bitXor: '^',\n shiftLeft: '<<',\n shiftRight: '>>',\n} as const\n\nexport const OPERATOR_KEYS = Object.keys(OPERATORS) as (keyof typeof OPERATORS)[]\n\nexport const FUNCTIONS = [\n 'abs',\n 'acos',\n 'asin',\n 'atan',\n 'atan2',\n 'ceil',\n 'clamp',\n 'cos',\n 'cross',\n 'degrees',\n 'distance',\n 'dot',\n 'exp',\n 'exp2',\n 'faceforward',\n 'floor',\n 'fract',\n 'length',\n 'all',\n 'any',\n 'bitcast',\n 'cbrt',\n 'dFdx',\n 'dFdy',\n 'difference',\n 'equals',\n 'fwidth',\n 'inverseSqrt',\n 'lengthSq',\n 'log',\n 'log2',\n 'max',\n 'min',\n 'mix',\n 'negate',\n 'normalize',\n 'oneMinus',\n 'pow',\n 'pow2',\n 'pow3',\n 'pow4',\n 'radians',\n 'reciprocal',\n 'reflect',\n 'refract',\n 'round',\n 'saturate',\n 'sign',\n 'sin',\n 'smoothstep',\n 'sqrt',\n 'step',\n 'tan',\n 'transformDirection',\n 'trunc',\n] as const\n\nexport const TYPE_MAPPING = {\n float: 'f32',\n int: 'i32',\n uint: 'u32',\n bool: 'bool',\n vec2: 'vec2f',\n vec3: 'vec3f',\n vec4: 'vec4f',\n mat2: 'mat2x2f',\n mat3: 'mat3x3f',\n mat4: 'mat4x4f',\n ivec2: 'vec2i',\n ivec3: 'vec3i',\n ivec4: 'vec4i',\n uvec2: 'vec2u',\n uvec3: 'vec3u',\n uvec4: 'vec4u',\n bvec2: 'vec2<bool>',\n bvec3: 'vec3<bool>',\n bvec4: 'vec4<bool>',\n} as const\n","import { is } from '../utils/helpers'\nimport { code } from './code'\nimport { FUNCTIONS, NODE_TYPES, OPERATOR_KEYS } from './const'\nimport type { Functions, NodeConfig, NodeType, Operators, Swizzles, X } from './types'\n\nexport const isSwizzle = (key: unknown): key is Swizzles => {\n return is.str(key) && /^[xyzwrgbastpq]{1,4}$/.test(key)\n}\n\nexport const isOperator = (key: unknown): key is Operators => {\n return OPERATOR_KEYS.includes(key as Operators)\n}\n\nexport const isNodeType = (key: unknown): key is NodeType => {\n return NODE_TYPES.includes(key as NodeType)\n}\n\nexport const isFunction = (key: unknown): key is Functions => {\n return FUNCTIONS.includes(key as Functions)\n}\n\nlet count = 0\n\nexport const getId = () => `i${count++}`\n\nexport const joins = (children: X[], c: NodeConfig) => {\n return children\n .filter((x) => !is.und(x) && !is.nul(x))\n .map((x) => code(x, c))\n .join(', ')\n}\n\nexport const inferType = (target: X, c: NodeConfig): string => {\n if (!target || typeof target !== 'object') return 'float'\n const { type, props } = target\n const { children = [] } = props\n const [x, y, z] = children\n if (type === 'node_type') return x as string\n if (type === 'operator') {\n const left = inferType(y, c)\n const right = inferType(z, c)\n if (left === right) return left\n if (left.includes('vec')) return left\n if (right.includes('vec')) return right\n return 'float'\n }\n if (type === 'math_fun') {\n if (['normalize', 'cross', 'reflect'].includes(x as string)) return inferType(children[1], c)\n if (['dot', 'distance', 'length'].includes(x as string)) return 'float'\n return 'float'\n }\n return 'float'\n}\n\nconst generateUniforms = (c: NodeConfig): string => {\n if (!c.uniforms || c.uniforms.size === 0) return ''\n const uniformList = Array.from(c.uniforms)\n return (\n uniformList\n .map((name, i) => {\n if (c.isWebGL) return `uniform vec2 ${name};`\n else return `@group(0) @binding(${i}) var<uniform> ${name}: vec2f;`\n })\n .join('\\n') + '\\n'\n )\n}\n\nconst generateFragmentMain = (body: string, uniforms: string, isWebGL = true) => {\n if (isWebGL)\n return `\n${uniforms}\n#version 300 es\nprecision mediump float;\nuniform vec2 iResolution;\nuniform vec2 iMouse;\nuniform float iTime;\nout vec4 fragColor;\nvoid main() {\n${body}\n}`.trim()\n return `\n@group(0) @binding(0) var<uniform> iResolution: vec2f;\n@group(0) @binding(1) var<uniform> iMouse: vec2f;\n@group(0) @binding(2) var<uniform> iTime: f32;\n${uniforms}\n@fragment\nfn main(@builtin(position) position: vec4f) -> @location(0) vec4f {\n${body}\n}`.trim()\n}\n\nexport const fragment = (x: X, c: NodeConfig) => {\n const body = code(x, c)\n const uniforms = generateUniforms(c)\n return generateFragmentMain(body, uniforms, c.isWebGL)\n}\n\nexport const vertex = (x: X, c: NodeConfig) => {\n const body = code(x, c)\n const uniforms = generateUniforms(c)\n return generateFragmentMain(body, uniforms, c.isWebGL)\n}\n","import { is } from '../utils/helpers'\nimport { OPERATORS, TYPE_MAPPING } from './const'\nimport { inferType, joins } from './utils'\nimport type { NodeConfig, X } from './types'\n\nexport const code = (target: X, c?: NodeConfig | null): string => {\n if (!c) c = {}\n if (!c.uniforms) c.uniforms = new Set()\n if (is.num(target)) return target.toFixed(1)\n if (is.str(target)) return target\n if (!target) return '' // ignore if no target\n\n const { type, props } = target\n const { id = '', children = [] } = props\n const [x, y, z] = children\n\n if (type === 'uniform') {\n c.uniforms.add(id)\n c.onUniform?.(id, props.defaultValue)\n return id\n }\n\n if (type === 'variable') return id\n\n if (type === 'swizzle') return `${code(y, c)}.${code(x, c)}`\n\n if (type === 'node_type') {\n if (!is.str(x)) return id\n const func = !c.isWebGL && x.startsWith('vec') ? `${x}f` : x\n const args = joins(children.slice(1), c)\n return `${func}(${args})`\n }\n\n if (type === 'operator') {\n if (x === 'not' || x === 'bitNot') return `!${code(y, c)}`\n const op = OPERATORS[x as keyof typeof OPERATORS]\n return `(${code(y, c)} ${op} ${code(z, c)})`\n }\n\n if (type === 'math_fun') return `${x}(${joins(children.slice(1), c)})`\n\n if (type === 'assign') return `${code(x, c)} = ${code(y, c)};`\n\n if (type === 'scope') return children.map((child) => code(child, c)).join('\\n')\n\n if (type === 'loop') return `for (int i = 0; i < ${x}; i++) {\\n${code(y, c)}\\n}`\n\n if (type === 'fn') {\n let ret = code(x, c)\n if (y) ret += `\\nreturn ${code(y, c)};`\n return ret\n }\n\n if (type === 'if') {\n let ret = `if (${code(x, c)}) {\\n${code(y, c)}\\n}`\n for (let i = 2; i < children.length; i += 2) {\n const isLast = i >= children.length - 1\n ret += !isLast\n ? ` else if (${code(children[i], c)}) {\\n${code(children[i + 1], c)}\\n}`\n : ` else {\\n${code(children[i], c)}\\n}`\n }\n return ret\n }\n\n if (type === 'declare') {\n const varType = inferType(y, c) // vec2\n const varName = (x as any)?.props?.id\n if (c.isWebGL) return `${varType} ${varName} = ${code(y, c)};`\n const wgslType = TYPE_MAPPING[varType as keyof typeof TYPE_MAPPING]\n return `var ${varName}: ${wgslType} = ${code(y, c)};`\n }\n\n return code(x, c)\n}\n","import { node } from './node'\nimport { getId } from './utils'\nimport type { NodeProxy, X } from './types'\n\nlet _scope: NodeProxy | null = null\n\nconst scoped = (x: NodeProxy | null, callback = () => {}) => {\n const prev = _scope\n _scope = x\n callback()\n _scope = prev\n}\n\nconst addToScope = (x: NodeProxy) => {\n if (!_scope) return // ignore\n if (!_scope.props.children) _scope.props.children = []\n _scope.props.children.push(x)\n}\n\nexport const If = (x: X, callback: () => void) => {\n const y = node('scope')\n scoped(y, callback)\n const ifNode = node('if', null, x, y)\n addToScope(ifNode)\n return {\n ElseIf: (y: X, elseCallback: () => void) => {\n const z = node('scope')\n scoped(z, elseCallback)\n ifNode.props.children!.push(y, z)\n },\n Else: (elseCallback: () => void) => {\n const z = node('scope')\n scoped(z, elseCallback)\n ifNode.props.children!.push(z)\n },\n }\n}\n\nexport const Loop = (x: X, callback?: (params: { i: NodeProxy }) => void) => {\n const y = node('scope')\n scoped(y, () => callback?.({ i: node('variable', { id: 'i' }) }))\n const ret = node('loop', null, x, y)\n addToScope(ret)\n return ret\n}\n\nexport const Fn = (callback: (args: X[]) => NodeProxy) => {\n return (...args: X[]) => {\n let result\n const fnScope = node('scope')\n scoped(fnScope, () => (result = callback(args)))\n return node('fn', null, fnScope, result)\n }\n}\n\nexport const toVar = (x: X) => (id: string) => {\n if (!id) id = getId()\n const y = node('variable', { id })\n const z = node('declare', null, y, x)\n addToScope(z)\n return y\n}\n\nexport const assign = (x: X) => (y: X) => {\n const assignNode = node('assign', null, x, y)\n addToScope(assignNode)\n return x\n}\n","import { code } from './code'\nimport { assign, toVar } from './scope'\nimport { getId, isFunction, isOperator, isSwizzle } from './utils'\nimport type { Functions, NodeProps, NodeProxy, NodeTypes, Operators, Swizzles, X } from './types'\n\nconst toPrimitive = (x: X) => {\n return (hint: string) => {\n if (hint === 'string') return code(x)\n }\n}\n\nexport const node = (type: NodeTypes, props?: NodeProps | null, ...args: X[]) => {\n if (!props) props = {}\n if (args.length) props.children = args\n const x = new Proxy(() => {}, {\n get(_, key) {\n if (key === 'type') return type\n if (key === 'props') return props\n if (key === 'toVar') return toVar(x)\n if (key === 'assign') return assign(x)\n if (key === 'isProxy') return true\n if (key === 'toString') return code.bind(null, x)\n if (key === Symbol.toPrimitive) return toPrimitive(x)\n if (isSwizzle(key)) return s(key, x)\n if (isOperator(key)) return (...y: X[]) => o(key, x, ...y)\n if (isFunction(key)) return (...y: X[]) => f(key, x, ...y)\n return toVar(x)('')\n },\n set(_, key, value) {\n if (isSwizzle(key)) {\n s(key, x).assign(value)\n return true\n }\n return false\n },\n }) as unknown as NodeProxy\n return x\n}\n\n// Node shorthands\nexport const v = (...args: X[]) => node('variable', { id: getId() }, ...args)\nexport const u = (key: string, defaultValue?: number | number[]) => node('uniform', { defaultValue }, key)\nexport const s = (key: Swizzles, arg: X) => node('swizzle', null, key, arg)\nexport const n = (key: string, ...args: X[]) => node('node_type', null, key, ...args)\nexport const o = (key: Operators, ...args: X[]) => node('operator', null, key, ...args)\nexport const f = (key: Functions, ...args: X[]) => node('math_fun', null, key, ...args)\n","import { f, n, node, u } from './node'\nimport type { X } from './types'\nexport * from './code'\nexport * from './const'\nexport * from './node'\nexport * from './scope'\nexport * from './types'\nexport * from './utils'\n\n// Default uniforms\nexport const iResolution = u('iResolution', [1280, 800])\nexport const iMouse = u('iMouse', [0, 0])\nexport const iTime = u('iTime', 0)\nexport const fragCoord = node('variable', { id: 'fragCoord' })\n\n// Type constructors\nexport const float = (x: X) => n('float', x)\nexport const int = (x: X) => n('int', x)\nexport const uint = (x: X) => n('uint', x)\nexport const bool = (x: X) => n('bool', x)\nexport const vec2 = (x?: X, y?: X) => n('vec2', x, y)\nexport const vec3 = (x?: X, y?: X, z?: X) => n('vec3', x, y, z)\nexport const vec4 = (x?: X, y?: X, z?: X, w?: X) => n('vec4', x, y, z, w)\nexport const mat2 = (...args: X[]) => n('mat2', ...args)\nexport const mat3 = (...args: X[]) => n('mat3', ...args)\nexport const mat4 = (...args: X[]) => n('mat4', ...args)\nexport const ivec2 = (x?: X, y?: X) => n('ivec2', x, y)\nexport const ivec3 = (x?: X, y?: X, z?: X) => n('ivec3', x, y, z)\nexport const ivec4 = (x?: X, y?: X, z?: X, w?: X) => n('ivec4', x, y, z, w)\nexport const uvec2 = (x?: X, y?: X) => n('uvec2', x, y)\nexport const uvec3 = (x?: X, y?: X, z?: X) => n('uvec3', x, y, z)\nexport const uvec4 = (x?: X, y?: X, z?: X, w?: X) => n('uvec4', x, y, z, w)\nexport const bvec2 = (x?: X, y?: X) => n('bvec2', x, y)\nexport const bvec3 = (x?: X, y?: X, z?: X) => n('bvec3', x, y, z)\nexport const bvec4 = (x?: X, y?: X, z?: X, w?: X) => n('bvec4', x, y, z, w)\n\n// Math Functions\nexport const abs = (x: X) => f('abs', x) // Return the absolute value of the parameter.\nexport const acos = (x: X) => f('acos', x) // Return the arccosine of the parameter.\nexport const all = (x: X) => f('all', x) // Return true if all components of x are true.\nexport const any = (x: X) => f('any', x) // Return true if any component of x is true.\nexport const asin = (x: X) => f('asin', x) // Return the arcsine of the parameter.\nexport const atan = (y: X, x: X) => f('atan', y, x) // Return the arc-tangent of the parameters.\nexport const bitcast = (x: X, y: X) => f('bitcast', x, y) // Reinterpret the bits of a value as a different type.\nexport const cbrt = (x: X) => f('cbrt', x) // Return the cube root of the parameter.\nexport const ceil = (x: X) => f('ceil', x) // Find the nearest integer that is greater than or equal to the parameter.\nexport const clamp = (x: X, min: X, max: X) => f('clamp', x, min, max) // Constrain a value to lie between two further values.\nexport const cos = (x: X) => f('cos', x) // Return the cosine of the parameter.\nexport const cross = (x: X, y: X) => f('cross', x, y) // Calculate the cross product of two vectors.\nexport const dFdx = (p: X) => f('dFdx', p) // Return the partial derivative of an argument with respect to x.\nexport const dFdy = (p: X) => f('dFdy', p) // Return the partial derivative of an argument with respect to y.\nexport const degrees = (radians: X) => f('degrees', radians) // Convert a quantity in radians to degrees.\nexport const difference = (x: X, y: X) => f('difference', x, y) // Calculate the absolute difference between two values.\nexport const distance = (x: X, y: X) => f('distance', x, y) // Calculate the distance between two points.\nexport const dot = (x: X, y: X) => f('dot', x, y) // Calculate the dot product of two vectors.\nexport const equals = (x: X, y: X) => f('equals', x, y) // Return true if x equals y.\nexport const exp = (x: X) => f('exp', x) // Return the natural exponentiation of the parameter.\nexport const exp2 = (x: X) => f('exp2', x) // Return 2 raised to the power of the parameter.\nexport const faceforward = (N: X, I: X, Nref: X) => f('faceforward', N, I, Nref) // Return a vector pointing in the same direction as another.\nexport const floor = (x: X) => f('floor', x) // Find the nearest integer less than or equal to the parameter.\nexport const fract = (x: X) => f('fract', x) // Compute the fractional part of the argument.\nexport const fwidth = (x: X) => f('fwidth', x) // Return the sum of the absolute derivatives in x and y.\nexport const inverseSqrt = (x: X) => f('inverseSqrt', x) // Return the inverse of the square root of the parameter.\nexport const length = (x: X) => f('length', x) // Calculate the length of a vector.\nexport const lengthSq = (x: X) => f('lengthSq', x) // Calculate the squared length of a vector.\nexport const log = (x: X) => f('log', x) // Return the natural logarithm of the parameter.\nexport const log2 = (x: X) => f('log2', x) // Return the base 2 logarithm of the parameter.\nexport const max = (x: X, y: X) => f('max', x, y) // Return the greater of two values.\nexport const min = (x: X, y: X) => f('min', x, y) // Return the lesser of two values.\nexport const mix = (x: X, y: X, a: X) => f('mix', x, y, a) // Linearly interpolate between two values.\nexport const negate = (x: X) => f('negate', x) // Negate the value of the parameter ( -x ).\nexport const normalize = (x: X) => f('normalize', x) // Calculate the unit vector in the same direction as the original vector.\nexport const oneMinus = (x: X) => f('oneMinus', x) // Return 1 minus the parameter.\nexport const pow = (x: X, y: X) => f('pow', x, y) // Return the value of the first parameter raised to the power of the second.\nexport const pow2 = (x: X) => f('pow2', x) // Return the square of the parameter.\nexport const pow3 = (x: X) => f('pow3', x) // Return the cube of the parameter.\nexport const pow4 = (x: X) => f('pow4', x) // Return the fourth power of the parameter.\nexport const radians = (degrees: X) => f('radians', degrees) // Convert a quantity in degrees to radians.\nexport const reciprocal = (x: X) => f('reciprocal', x) // Return the reciprocal of the parameter (1/x).\nexport const reflect = (I: X, N: X) => f('reflect', I, N) // Calculate the reflection direction for an incident vector.\nexport const refract = (I: X, N: X, eta: X) => f('refract', I, N, eta) // Calculate the refraction direction for an incident vector.\nexport const round = (x: X) => f('round', x) // Round the parameter to the nearest integer.\nexport const saturate = (x: X) => f('saturate', x) // Constrain a value between 0 and 1.\nexport const sign = (x: X) => f('sign', x) // Extract the sign of the parameter.\nexport const sin = (x: X) => f('sin', x) // Return the sine of the parameter.\nexport const smoothstep = (e0: X, e1: X, x: X) => f('smoothstep', e0, e1, x) // Perform Hermite interpolation between two values.\nexport const sqrt = (x: X) => f('sqrt', x) // Return the square root of the parameter.\nexport const step = (edge: X, x: X) => f('step', edge, x) // Generate a step function by comparing two values.\nexport const tan = (x: X) => f('tan', x) // Return the tangent of the parameter.\nexport const transformDirection = (dir: X, matrix: X) => f('transformDirection', dir, matrix) // Transform the direction of a vector by a matrix and then normalize the result.\nexport const trunc = (x: X) => f('trunc', x) // Truncate the parameter, removing the fractional part.\n","import { fragment, vertex, X } from '../node'\nimport { is } from './helpers'\n\nexport const defaultVertexGLSL = /* cpp */ `\n#version 300 es\nvoid main() {\n float x = float(gl_VertexID % 2) * 4.0 - 1.0;\n float y = float(gl_VertexID / 2) * 4.0 - 1.0;\n gl_Position = vec4(x, y, 0.0, 1.0);\n}\n`\n\nexport const defaultFragmentGLSL = /* cpp */ `\n#version 300 es\nprecision mediump float;\nuniform vec2 iResolution;\nout vec4 fragColor;\nvoid main() {\n fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n}\n`\n\nconst createShader = (c: WebGLRenderingContext, source: string, type: number) => {\n const shader = c.createShader(type)\n if (!shader) throw new Error('Failed to create shader')\n c.shaderSource(shader, source.trim())\n c.compileShader(shader)\n if (c.getShaderParameter(shader, c.COMPILE_STATUS)) return shader\n const error = c.getShaderInfoLog(shader)\n c.deleteShader(shader)\n console.warn(`Could not compile shader: ${error}`)\n}\n\nexport const createProgram = (\n c: WebGLRenderingContext,\n vs: string | X = defaultVertexGLSL,\n fs: string | X = defaultFragmentGLSL\n) => {\n if (!is.str(fs)) fs = fragment(fs, { isWebGL: true })\n if (!is.str(vs)) vs = vertex(fs, { isWebGL: true })\n const pg = c.createProgram()\n const _vs = createShader(c, vs, c.VERTEX_SHADER)\n const _fs = createShader(c, fs, c.FRAGMENT_SHADER)\n if (!_vs || !_fs) return\n c.attachShader(pg, _vs)\n c.attachShader(pg, _fs)\n c.linkProgram(pg)\n if (c.getProgramParameter(pg, c.LINK_STATUS)) return pg\n const error = c.getProgramInfoLog(pg)\n c.deleteProgram(pg)\n console.warn(`Could not link pg: ${error}`)\n}\n\nexport const createVbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, new Float32Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const createIbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, buffer)\n c.bufferData(c.ELEMENT_ARRAY_BUFFER, new Int16Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const getStride = (count: number, value: number[], iboValue?: number[]) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n return Math.floor(stride)\n}\n\nexport const createAttrib = (\n c: WebGLRenderingContext,\n stride: number,\n loc: any,\n vbo: WebGLBuffer,\n ibo?: WebGLBuffer\n) => {\n c.bindBuffer(c.ARRAY_BUFFER, vbo)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n if (ibo) c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, ibo)\n}\n\nexport const createTexture = (c: WebGLRenderingContext, img: HTMLImageElement, loc: any, unit: number) => {\n const texture = c.createTexture()\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, img)\n c.generateMipmap(c.TEXTURE_2D)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, null)\n c.uniform1i(loc, unit)\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, texture)\n}\n","import { nested as cached } from 'reev'\nimport { is } from './utils/helpers'\nimport {\n createDevice,\n createPipeline,\n createDescriptor,\n createUniformBuffer,\n createBindGroup,\n createTextureSampler,\n createVertexBuffer,\n createBufferLayout,\n} from './utils/pipeline'\nimport type { GL, WebGPUState } from './types'\n\nexport const webgpu = async (gl: Partial<GL>) => {\n const c = gl.el!.getContext('webgpu') as any\n const { device, format } = await createDevice(c)\n const state = {\n device,\n context: c,\n resources: [[], []],\n loadingImg: 0,\n needsUpdate: true,\n } as WebGPUState\n\n const bindGroups = [] as any[]\n const vertexBuffers = [] as any[]\n const bufferLayouts = [] as any[]\n\n const attributes = cached((_, value: number[]) => {\n const { array, buffer } = createVertexBuffer(device, value)\n vertexBuffers.push(buffer)\n bufferLayouts.push(createBufferLayout(bufferLayouts.length, array.length, gl.count))\n state.needsUpdate = true\n return { array, buffer }\n })\n\n const uniforms = cached((_, value: number[]) => {\n const { array, buffer } = createUniformBuffer(device, value)\n state.resources[0].push({ buffer })\n state.needsUpdate = true\n return { array, buffer }\n })\n\n const textures = cached((_, { width, height }: HTMLImageElement) => {\n const { texture, sampler } = createTextureSampler(device, width, height)\n state.resources[1].push(sampler, texture.createView())\n state.needsUpdate = true\n return { texture, width, height }\n })\n\n const update = () => {\n const bindGroupLayouts = [] as any\n bindGroups.length = 0\n state.resources.forEach((resource) => {\n if (!resource.length) return\n const { layout, bindGroup } = createBindGroup(device, resource)\n bindGroupLayouts.push(layout)\n bindGroups.push(bindGroup)\n })\n state.pipeline = createPipeline(device, format, bufferLayouts, bindGroupLayouts, gl.vs, gl.fs)\n }\n\n const render = () => {\n if (state.loadingImg) return // ignore if loading img\n if (state.needsUpdate) update() // first rendering\n state.needsUpdate = false\n const encoder = device.createCommandEncoder()\n const pass = encoder.beginRenderPass(createDescriptor(c))\n pass.setPipeline(state.pipeline)\n bindGroups.forEach((v, i) => pass.setBindGroup(i, v))\n vertexBuffers.forEach((v, i) => pass.setVertexBuffer(i, v))\n pass.draw(gl.count, 1, 0, 0)\n pass.end()\n device.queue.submit([encoder.finish()])\n }\n\n const clean = () => {}\n\n const _attribute = (key = '', value: number[]) => {\n const { array, buffer } = attributes(key, value)\n device.queue.writeBuffer(buffer, 0, array)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n if (is.num(value)) value = [value]\n const { array, buffer } = uniforms(key, value)\n array.set(value)\n device.queue.writeBuffer(buffer, 0, array)\n }\n\n const _texture = (key: string, src: string) => {\n state.loadingImg++\n const source = Object.assign(new Image(), { src, crossOrigin: 'anonymous' })\n source.decode().then(() => {\n const { texture, width, height } = textures(key, source)\n device.queue.copyExternalImageToTexture({ source }, { texture }, { width, height })\n state.loadingImg--\n })\n }\n\n return { webgpu: state, render, clean, _attribute, _uniform, _texture }\n}\n","import { fragment, vertex, X } from '../node'\nimport { is } from './helpers'\nimport type { GPUContext, GPUDevice, GPUPipeline } from '../types'\n\nconst defaultVertexWGSL = `\n@vertex\nfn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {\n let x = f32(vertex_index % 2u) * 4.0 - 1.0;\n let y = f32(vertex_index / 2u) * 4.0 - 1.0;\n return vec4f(x, y, 0.0, 1.0);\n}\n`\n\nconst defaultFragmentWGSL = `\n@group(0) @binding(0) var<uniform> iResolution: vec2f;\n\n@fragment\nfn main(@builtin(position) position: vec4f) -> @location(0) vec4f {\n return vec4f(position.xy / iResolution, 0.0, 1.0);\n}\n`\n\nexport const createDevice = async (c: GPUContext) => {\n const gpu = (navigator as any).gpu\n const format = gpu.getPreferredCanvasFormat()\n const adapter = await gpu.requestAdapter()\n const device = await adapter.requestDevice()\n c.configure({ device, format, alphaMode: 'opaque' })\n return { device, format }\n}\n\nexport const createPipeline = (\n device: GPUDevice,\n format: string,\n bufferLayouts: any[],\n bindGroupLayouts: any[],\n vs: string | X = defaultVertexWGSL,\n fs: string | X = defaultFragmentWGSL\n) => {\n if (!is.str(fs)) fs = fragment(fs, { isWebGL: false })\n if (!is.str(vs)) vs = vertex(vs, { isWebGL: false })\n const layout = device.createPipelineLayout({ bindGroupLayouts })\n return device.createRenderPipeline({\n vertex: {\n module: device.createShaderModule({ code: vs.trim() }),\n entryPoint: 'main',\n buffers: bufferLayouts,\n },\n fragment: {\n module: device.createShaderModule({ code: fs.trim() }),\n entryPoint: 'main',\n targets: [{ format }],\n },\n layout,\n primitive: { topology: 'triangle-list' },\n }) as GPUPipeline\n}\n\nexport const createBindGroup = (device: GPUDevice, resources: any[]) => {\n const entries0 = [] as any[]\n const entries1 = [] as any[]\n resources.forEach((resource, binding) => {\n if (!resource) return\n const isUniform = 'buffer' in resource // @ts-ignore\n const isTexture = resource instanceof GPUTextureView // @ts-ignore\n const isSampler = resource instanceof GPUSampler // @ts-ignore\n if (isUniform) entries0.push({ binding, visibility: 3, buffer: { type: 'uniform' } })\n else if (isTexture) entries0.push({ binding, visibility: 2, texture: {} })\n else if (isSampler) entries0.push({ binding, visibility: 2, sampler: {} })\n else return\n entries1.push({ binding, resource })\n })\n const layout = device.createBindGroupLayout({ entries: entries0 })\n const bindGroup = device.createBindGroup({ layout, entries: entries1 })\n return { layout, bindGroup }\n}\n\nexport const createDescriptor = (c: GPUContext) => {\n return {\n colorAttachments: [\n {\n view: c.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 1 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n }\n}\n\nexport const alignTo256 = (size: number) => Math.ceil(size / 256) * 256\n\nexport const createVertexBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const buffer = device.createBuffer({ size: array.byteLength, usage: 40 }) // 40 === // GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n return { array, buffer }\n}\n\nexport const createUniformBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const size = alignTo256(array.byteLength)\n const buffer = device.createBuffer({ size, usage: 72 }) as Buffer // 72 === GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n return { array, buffer }\n}\n\nexport const createTextureSampler = (device: GPUDevice, width = 1280, height = 800) => {\n const texture = device.createTexture({ size: [width, height], format: 'rgba8unorm', usage: 22 })\n const sampler = device.createSampler({ magFilter: 'linear', minFilter: 'linear' })\n return { texture, sampler }\n}\n\nconst getVertexStride = (dataLength: number, vertexCount: number) => {\n return dataLength / vertexCount\n}\n\nconst getVertexFormat = (stride: number) => {\n if (stride === 2) return 'float32x2'\n if (stride === 3) return 'float32x3'\n if (stride === 4) return 'float32x4'\n return 'float32'\n}\n\nexport const createBufferLayout = (shaderLocation: number, dataLength: number, count = 6) => {\n const stride = getVertexStride(dataLength, count)\n return {\n arrayStride: stride * 4,\n attributes: [\n {\n shaderLocation,\n offset: 0,\n format: getVertexFormat(stride),\n },\n ],\n }\n}\n"],"mappings":"mbAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,eAAAE,EAAA,OAAAC,GAAA,OAAAC,GAAA,SAAAC,GAAA,eAAAC,EAAA,cAAAC,EAAA,kBAAAC,EAAA,aAAAC,GAAA,iBAAAC,EAAA,QAAAC,GAAA,SAAAC,GAAA,eAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,WAAAC,EAAA,SAAAC,GAAA,YAAAC,GAAA,SAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,UAAAC,GAAA,SAAAC,EAAA,QAAAC,GAAA,iBAAAC,GAAA,oBAAAC,GAAA,uBAAAC,GAAA,qBAAAC,GAAA,iBAAAC,GAAA,aAAAC,GAAA,cAAAC,EAAA,mBAAAC,GAAA,kBAAAC,EAAA,kBAAAC,GAAA,yBAAAC,GAAA,wBAAAC,GAAA,cAAAC,EAAA,uBAAAC,GAAA,UAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,YAAAC,GAAA,wBAAAC,GAAA,sBAAAC,GAAA,YAAAC,GAAA,eAAAC,GAAA,QAAAC,GAAA,aAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,WAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,QAAAC,GAAA,MAAAC,EAAA,gBAAAC,GAAA,QAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,cAAAC,GAAA,aAAAC,EAAA,WAAAC,GAAA,UAAAC,EAAA,cAAAC,GAAA,WAAAC,GAAA,gBAAAC,GAAA,UAAAC,GAAA,cAAAC,EAAA,QAAAC,GAAA,gBAAAC,GAAA,OAAAC,EAAA,eAAAC,EAAA,SAAAC,GAAA,eAAAC,GAAA,eAAAC,EAAA,aAAAC,GAAA,cAAAC,EAAA,sBAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,UAAAC,EAAA,WAAAC,GAAA,aAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,MAAAC,EAAA,WAAAC,GAAA,SAAAC,EAAA,cAAAC,GAAA,MAAAC,GAAA,aAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,YAAAC,GAAA,eAAAC,GAAA,YAAAC,GAAA,YAAAC,GAAA,YAAAC,GAAA,UAAAC,GAAA,MAAAC,EAAA,aAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,QAAAC,GAAA,eAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,QAAAC,GAAA,UAAAC,EAAA,uBAAAC,GAAA,UAAAC,GAAA,MAAAC,EAAA,SAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,UAAAC,GAAA,MAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,WAAAC,EAAA,UAAAC,GAAA,WAAAC,KAAA,eAAAC,GAAA3I,IAAA,IAAA4I,EAA+B,gBAC/BC,EAAyC,gBCDzC,IAAAC,EAAiC,gBCA1B,IAAMC,EAAK,CACV,IAAK,MAAM,QACX,IAAMC,GAA6B,OAAOA,GAAM,UAChD,IAAMA,GAA4B,OAAOA,GAAM,SAC/C,IAAMA,GAA4B,OAAOA,GAAM,SAC/C,IAAMA,GAA4B,OAAO,UAAUA,CAAC,EACpD,IAAMA,GAA8B,OAAOA,GAAM,WACjD,IAAMA,GAA+B,OAAOA,EAAM,IAClD,IAAMA,GAA0BA,IAAM,KACtC,IAAMA,GAAkCA,aAAa,IACrD,IAAMA,GAA2CA,aAAa,IAC9D,IAAMA,GAA4B,CAAC,CAACA,GAAKA,EAAE,YAAY,OAAS,SAChE,IAAMA,GAA4B,OAAOA,GAAM,UAAY,OAAO,MAAMA,CAAC,CACjF,EAUaC,GAAO,CAAmBC,EAAiCC,IAAiCD,EAAI,QAAQC,CAAE,EAE1GC,GAAQ,CAAoCF,KAAoCG,IAAgB,CACrGJ,GAAKC,EAAMI,GAAMA,EAAE,GAAGD,CAAI,CAAC,CACnC,EAKaE,GAAU,CAACC,EAAI,GAAIC,EAAO,IAAKC,EAAK,MAAQF,EAAE,MAAMC,CAAI,EAAE,KAAKC,CAAE,EACjEC,GAAM,CAACC,EAAM,SAAWA,EAAI,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY,GAAK,GAC/DC,GAAM,CAACL,EAAI,IAAM,GAAGA,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,QAAU,EACjDM,GAAM,CAACN,EAAI,IAAM,GAAGA,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,QAAUA,EAAI,EAAI,EAAI,GAC7DO,GAAM,CAACC,EAAQ,EAAGC,EAAQ,MAC/BA,GAAS,GACTA,EAAQ,KAAK,IAAI,GAAIA,CAAK,EAC1BD,GAASC,EACTD,EAAQ,KAAK,MAAMA,CAAK,EACxBA,GAASC,EACFD,GC1CR,IAAME,GAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAEtEC,EAAa,CAClB,QACA,MACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACR,EAEaC,EAAY,CACjB,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,MAAO,KACP,SAAU,KACV,SAAU,IACV,cAAe,KACf,YAAa,IACb,iBAAkB,KAClB,IAAK,KACL,GAAI,KACJ,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,UAAW,KACX,WAAY,IACpB,EAEaC,EAAgB,OAAO,KAAKD,CAAS,EAErCE,EAAY,CACjB,MACA,OACA,OACA,OACA,QACA,OACA,QACA,MACA,QACA,UACA,WACA,MACA,MACA,OACA,cACA,QACA,QACA,SACA,MACA,MACA,UACA,OACA,OACA,OACA,aACA,SACA,SACA,cACA,WACA,MACA,OACA,MACA,MACA,MACA,SACA,YACA,WACA,MACA,OACA,OACA,OACA,UACA,aACA,UACA,UACA,QACA,WACA,OACA,MACA,aACA,OACA,OACA,MACA,qBACA,OACR,EAEaC,EAAe,CACpB,MAAO,MACP,IAAK,MACL,KAAM,MACN,KAAM,OACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,UACN,KAAM,UACN,KAAM,UACN,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,aACP,MAAO,aACP,MAAO,YACf,ECzHO,IAAMC,EAAaC,GACXC,EAAG,IAAID,CAAG,GAAK,wBAAwB,KAAKA,CAAG,EAGjDE,EA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","names":["index_exports","__export","FUNCTIONS","Fn","If","Loop","NODE_TYPES","OPERATORS","OPERATOR_KEYS","SWIZZLES","TYPE_MAPPING","abs","acos","alignTo256","all","any","asin","assign","atan","bitcast","bool","bvec2","bvec3","bvec4","cbrt","ceil","clamp","code","cos","createAttrib","createBindGroup","createBufferLayout","createDescriptor","createDevice","createGL","createIbo","createPipeline","createProgram","createTexture","createTextureSampler","createUniformBuffer","createVbo","createVertexBuffer","cross","dFdx","dFdy","index_default","defaultFragmentGLSL","defaultVertexGLSL","degrees","difference","dig","distance","dot","each","equals","exp","exp2","ext","f","faceforward","fig","float","floor","flush","fract","fragCoord","fragment","fwidth","getId","getStride","iMouse","iResolution","iTime","inferType","int","inverseSqrt","is","isFunction","isGL","isNodeType","isOperator","isServer","isSwizzle","isWebGPUSupported","ivec2","ivec3","ivec4","joins","length","lengthSq","log","log2","mat2","mat3","mat4","max","min","mix","n","negate","node","normalize","o","oneMinus","pow","pow2","pow3","pow4","radians","reciprocal","reflect","refract","replace","round","s","saturate","sig","sign","sin","smoothstep","sqrt","step","tan","toVar","transformDirection","trunc","u","uint","uvec2","uvec3","uvec4","v","vec2","vec3","vec4","vertex","webgl","webgpu","__toCommonJS","import_reev","import_refr","import_reev","is","a","each","obj","fn","flush","args","f","replace","x","from","to","ext","src","fig","dig","sig","value","digit","SWIZZLES","NODE_TYPES","OPERATORS","OPERATOR_KEYS","FUNCTIONS","TYPE_MAPPING","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isNodeType","NODE_TYPES","isFunction","FUNCTIONS","count","getId","joins","children","c","x","code","inferType","target","type","props","y","z","left","right","generateUniforms","name","i","generateFragmentMain","body","uniforms","isWebGL","fragment","vertex","code","target","c","is","type","props","id","children","x","y","z","func","args","joins","op","OPERATORS","child","ret","i","isLast","varType","inferType","varName","wgslType","TYPE_MAPPING","_scope","scoped","x","callback","prev","addToScope","If","y","node","ifNode","elseCallback","z","Loop","ret","Fn","args","result","fnScope","toVar","id","getId","assign","assignNode","toPrimitive","x","hint","code","node","type","props","args","_","key","toVar","assign","isSwizzle","s","isOperator","y","o","isFunction","f","value","v","getId","u","defaultValue","arg","n","iResolution","u","iMouse","iTime","fragCoord","node","float","x","n","int","uint","bool","vec2","y","vec3","z","vec4","w","mat2","args","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4","abs","f","acos","all","any","asin","atan","bitcast","cbrt","ceil","clamp","min","max","cos","cross","dFdx","p","dFdy","degrees","radians","difference","distance","dot","equals","exp","exp2","faceforward","N","I","Nref","floor","fract","fwidth","inverseSqrt","length","lengthSq","log","log2","mix","a","negate","normalize","oneMinus","pow","pow2","pow3","pow4","reciprocal","reflect","refract","eta","round","saturate","sign","sin","smoothstep","e0","e1","sqrt","step","edge","tan","transformDirection","dir","matrix","trunc","defaultVertexGLSL","defaultFragmentGLSL","createShader","c","source","type","shader","error","createProgram","vs","fs","is","fragment","vertex","pg","_vs","_fs","createVbo","data","buffer","createIbo","getStride","count","value","iboValue","stride","createAttrib","loc","vbo","ibo","createTexture","img","unit","texture","webgl","gl","c","pg","createProgram","state","_activeUnit","uniforms","cached","key","attribs","units","value","iboValue","loc","vbo","createVbo","ibo","createIbo","str","getStride","createAttrib","is","l","src","image","unit","createTexture","import_reev","defaultVertexWGSL","defaultFragmentWGSL","createDevice","c","gpu","format","device","createPipeline","bufferLayouts","bindGroupLayouts","vs","fs","is","fragment","vertex","layout","createBindGroup","resources","entries0","entries1","resource","binding","isUniform","isTexture","isSampler","bindGroup","createDescriptor","alignTo256","size","createVertexBuffer","value","array","buffer","createUniformBuffer","createTextureSampler","width","height","texture","sampler","getVertexStride","dataLength","vertexCount","getVertexFormat","stride","createBufferLayout","shaderLocation","count","webgpu","gl","c","device","format","createDevice","state","bindGroups","vertexBuffers","bufferLayouts","attributes","cached","_","value","array","buffer","createVertexBuffer","createBufferLayout","uniforms","createUniformBuffer","textures","width","height","texture","sampler","createTextureSampler","update","bindGroupLayouts","resource","layout","bindGroup","createBindGroup","createPipeline","encoder","pass","createDescriptor","v","i","key","is","src","source","isGL","a","is","isServer","isWebGPUSupported","iTime","createGL","props","gl","k","v","i","webgl","webgpu","w","h","_e","x","y","top","left","index_default"]}
package/dist/index.mjs CHANGED
@@ -1,22 +1,41 @@
1
- import{durable as F,event as Ie}from"reev";import{createFrame as Be,createQueue as Oe}from"refr";import{nested as S}from"reev";var i={arr:Array.isArray,bol:e=>typeof e=="boolean",str:e=>typeof e=="string",num:e=>typeof e=="number",int:e=>Number.isInteger(e),fun:e=>typeof e=="function",und:e=>typeof e>"u",nul:e=>e===null,set:e=>e instanceof Set,map:e=>e instanceof Map,obj:e=>!!e&&e.constructor.name==="Object",nan:e=>typeof e=="number"&&Number.isNaN(e)},ue=(e,t)=>e.forEach(t),qe=(e,...t)=>{ue(e,r=>r(...t))},Ve=(e="",t="_",r="/")=>e.split(t).join(r),je=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",Ye=(e=0)=>`${e}`.split(".")[1]?.length??0,He=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),ke=(e=0,t=-2)=>(t*=-1,t=Math.pow(10,t),e*=t,e=Math.round(e),e/=t,e);var fe=(e,t)=>{let r={target:"webgl",precision:"mediump",version:"300 es",nodes:new Map,variables:new Map,functions:new Map,...t};return v(e,r)},v=(e,t)=>e?i.und(e.value)?e.property&&e.parent?`${v(e.parent,t)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?pe(e,t):e.mathFunction&&e.children&&e.children.length>=1?me(e,t):"0.0":ce(e.value,e.type):"0.0",ce=(e,t)=>{if(t==="float"){let r=Number(e);return r%1===0?`${r}.0`:`${r}`}if(t==="int")return`${Math.floor(Number(e))}`;if(t==="bool")return e?"true":"false";if(i.arr(e)){let r=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(t==="vec2")return`vec2(${r})`;if(t==="vec3")return`vec3(${r})`;if(t==="vec4")return`vec4(${r})`;if(t==="color")return`vec3(${r})`}return"0.0"},pe=(e,t)=>{if(!e.children||e.children.length<2)return"0.0";let r=v(e.children[0],t),n=v(e.children[1],t);return e.operator==="add"?`(${r} + ${n})`:e.operator==="sub"?`(${r} - ${n})`:e.operator==="mul"?`(${r} * ${n})`:e.operator==="div"?`(${r} / ${n})`:e.operator==="mod"?`mod(${r}, ${n})`:e.operator==="equal"?`(${r} == ${n})`:e.operator==="notEqual"?`(${r} != ${n})`:e.operator==="lessThan"?`(${r} < ${n})`:e.operator==="lessThanEqual"?`(${r} <= ${n})`:e.operator==="greaterThan"?`(${r} > ${n})`:e.operator==="greaterThanEqual"?`(${r} >= ${n})`:e.operator==="and"?`(${r} && ${n})`:e.operator==="or"?`(${r} || ${n})`:`(${r} + ${n})`},me=(e,t)=>{if(!e.children||e.children.length<1)return"0.0";let r=e.mathFunction,n=e.children.map(l=>v(l,t)),[o,a,u]=n;return n.length===1?`${r}(${o})`:n.length===2?`${r}(${o}, ${a})`:n.length===3?`${r}(${o}, ${a}, ${u})`:o||"0.0"},le=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2";if(t===3)return"vec3";if(t===4)return"vec4"}return"float"},N=(e,t)=>{let r=t?.precision||"mediump",o=(t?.version||"300 es")==="300 es",a=fe(e),u="";return o&&(u+=`#version 300 es
2
- `),u+=`precision ${r} float;
3
-
4
- `,t?.uniforms&&(Object.entries(t.uniforms).forEach(([l,h])=>{let x=le(h);u+=`uniform ${x} ${l};
5
- `}),u+=`
6
- `),o&&(u+=`out vec4 fragColor;
7
-
8
- `),u+=`void main() {
9
- `,u+=o?` fragColor = ${a};
10
- `:` gl_FragColor = ${a};
11
- `,u+=`}
12
- `,u};var de=`
1
+ import{durable as M,event as Pe}from"reev";import{createFrame as Ge,createQueue as Se}from"refr";import{nested as I}from"reev";var d={arr:Array.isArray,bol:e=>typeof e=="boolean",str:e=>typeof e=="string",num:e=>typeof e=="number",int:e=>Number.isInteger(e),fun:e=>typeof e=="function",und:e=>typeof e>"u",nul:e=>e===null,set:e=>e instanceof Set,map:e=>e instanceof Map,obj:e=>!!e&&e.constructor.name==="Object",nan:e=>typeof e=="number"&&Number.isNaN(e)},be=(e,t)=>e.forEach(t),Ne=(e,...t)=>{be(e,r=>r(...t))},ze=(e="",t="_",r="/")=>e.split(t).join(r),Be=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",$e=(e=0)=>`${e}`.split(".")[1]?.length??0,Ie=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),Ce=(e=0,t=-2)=>(t*=-1,t=Math.pow(10,t),e*=t,e=Math.round(e),e/=t,e);var Oe=["x","y","z","w","r","g","b","a","s","t","p","q"],D=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],N={add:"+",sub:"-",mul:"*",div:"/",mod:"%",equal:"==",notEqual:"!=",lessThan:"<",lessThanEqual:"<=",greaterThan:">",greaterThanEqual:">=",and:"&&",or:"||",bitAnd:"&",bitOr:"|",bitXor:"^",shiftLeft:"<<",shiftRight:">>"},W=Object.keys(N),q=["abs","acos","asin","atan","atan2","ceil","clamp","cos","cross","degrees","distance","dot","exp","exp2","faceforward","floor","fract","length","all","any","bitcast","cbrt","dFdx","dFdy","difference","equals","fwidth","inverseSqrt","lengthSq","log","log2","max","min","mix","negate","normalize","oneMinus","pow","pow2","pow3","pow4","radians","reciprocal","reflect","refract","round","saturate","sign","sin","smoothstep","sqrt","step","tan","transformDirection","trunc"],V={float:"f32",int:"i32",uint:"u32",bool:"bool",vec2:"vec2f",vec3:"vec3f",vec4:"vec4f",mat2:"mat2x2f",mat3:"mat3x3f",mat4:"mat4x4f",ivec2:"vec2i",ivec3:"vec3i",ivec4:"vec4i",uvec2:"vec2u",uvec3:"vec3u",uvec4:"vec4u",bvec2:"vec2<bool>",bvec3:"vec3<bool>",bvec4:"vec4<bool>"};var z=e=>d.str(e)&&/^[xyzwrgbastpq]{1,4}$/.test(e),Y=e=>W.includes(e),Ye=e=>D.includes(e),k=e=>q.includes(e),Xe=0,P=()=>`i${Xe++}`,B=(e,t)=>e.filter(r=>!d.und(r)&&!d.nul(r)).map(r=>f(r,t)).join(", "),_=(e,t)=>{if(!e||typeof e!="object")return"float";let{type:r,props:o}=e,{children:n=[]}=o,[i,a,c]=n;if(r==="node_type")return i;if(r==="operator"){let v=_(a,t),m=_(c,t);return v===m||v.includes("vec")?v:m.includes("vec")?m:"float"}return r==="math_fun"?["normalize","cross","reflect"].includes(i)?_(n[1],t):(["dot","distance","length"].includes(i),"float"):"float"},j=e=>!e.uniforms||e.uniforms.size===0?"":Array.from(e.uniforms).map((r,o)=>e.isWebGL?`uniform vec2 ${r};`:`@group(0) @binding(${o}) var<uniform> ${r}: vec2f;`).join(`
2
+ `)+`
3
+ `,K=(e,t,r=!0)=>r?`
4
+ ${t}
5
+ #version 300 es
6
+ precision mediump float;
7
+ uniform vec2 iResolution;
8
+ uniform vec2 iMouse;
9
+ uniform float iTime;
10
+ out vec4 fragColor;
11
+ void main() {
12
+ ${e}
13
+ }`.trim():`
14
+ @group(0) @binding(0) var<uniform> iResolution: vec2f;
15
+ @group(0) @binding(1) var<uniform> iMouse: vec2f;
16
+ @group(0) @binding(2) var<uniform> iTime: f32;
17
+ ${t}
18
+ @fragment
19
+ fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
20
+ ${e}
21
+ }`.trim(),G=(e,t)=>{let r=f(e,t),o=j(t);return K(r,o,t.isWebGL)},S=(e,t)=>{let r=f(e,t),o=j(t);return K(r,o,t.isWebGL)};var f=(e,t)=>{if(t||(t={}),t.uniforms||(t.uniforms=new Set),d.num(e))return e.toFixed(1);if(d.str(e))return e;if(!e)return"";let{type:r,props:o}=e,{id:n="",children:i=[]}=o,[a,c,v]=i;if(r==="uniform")return t.uniforms.add(n),t.onUniform?.(n,o.defaultValue),n;if(r==="variable")return n;if(r==="swizzle")return`${f(c,t)}.${f(a,t)}`;if(r==="node_type"){if(!d.str(a))return n;let m=!t.isWebGL&&a.startsWith("vec")?`${a}f`:a,X=B(i.slice(1),t);return`${m}(${X})`}if(r==="operator"){if(a==="not"||a==="bitNot")return`!${f(c,t)}`;let m=N[a];return`(${f(c,t)} ${m} ${f(v,t)})`}if(r==="math_fun")return`${a}(${B(i.slice(1),t)})`;if(r==="assign")return`${f(a,t)} = ${f(c,t)};`;if(r==="scope")return i.map(m=>f(m,t)).join(`
22
+ `);if(r==="loop")return`for (int i = 0; i < ${a}; i++) {
23
+ ${f(c,t)}
24
+ }`;if(r==="fn"){let m=f(a,t);return c&&(m+=`
25
+ return ${f(c,t)};`),m}if(r==="if"){let m=`if (${f(a,t)}) {
26
+ ${f(c,t)}
27
+ }`;for(let X=2;X<i.length;X+=2){let R=X>=i.length-1;m+=R?` else {
28
+ ${f(i[X],t)}
29
+ }`:` else if (${f(i[X],t)}) {
30
+ ${f(i[X+1],t)}
31
+ }`}return m}if(r==="declare"){let m=_(c,t),X=a?.props?.id;if(t.isWebGL)return`${m} ${X} = ${f(c,t)};`;let R=V[m];return`var ${X}: ${R} = ${f(c,t)};`}return f(a,t)};var w=null,L=(e,t=()=>{})=>{let r=w;w=e,t(),w=r},A=e=>{w&&(w.props.children||(w.props.children=[]),w.props.children.push(e))},et=(e,t)=>{let r=l("scope");L(r,t);let o=l("if",null,e,r);return A(o),{ElseIf:(n,i)=>{let a=l("scope");L(a,i),o.props.children.push(n,a)},Else:n=>{let i=l("scope");L(i,n),o.props.children.push(i)}}},tt=(e,t)=>{let r=l("scope");L(r,()=>t?.({i:l("variable",{id:"i"})}));let o=l("loop",null,e,r);return A(o),o},rt=e=>(...t)=>{let r,o=l("scope");return L(o,()=>r=e(t)),l("fn",null,o,r)},$=e=>t=>{t||(t=P());let r=l("variable",{id:t}),o=l("declare",null,r,e);return A(o),r},H=e=>t=>{let r=l("assign",null,e,t);return A(r),e};var ve=e=>t=>{if(t==="string")return f(e)},l=(e,t,...r)=>{t||(t={}),r.length&&(t.children=r);let o=new Proxy(()=>{},{get(n,i){return i==="type"?e:i==="props"?t:i==="toVar"?$(o):i==="assign"?H(o):i==="isProxy"?!0:i==="toString"?f.bind(null,o):i===Symbol.toPrimitive?ve(o):z(i)?Z(i,o):Y(i)?(...a)=>ye(i,o,...a):k(i)?(...a)=>s(i,o,...a):$(o)("")},set(n,i,a){return z(i)?(Z(i,o).assign(a),!0):!1}});return o},at=(...e)=>l("variable",{id:P()},...e),F=(e,t)=>l("uniform",{defaultValue:t},e),Z=(e,t)=>l("swizzle",null,e,t),g=(e,...t)=>l("node_type",null,e,...t),ye=(e,...t)=>l("operator",null,e,...t),s=(e,...t)=>l("math_fun",null,e,...t);var ft=F("iResolution",[1280,800]),pt=F("iMouse",[0,0]),mt=F("iTime",0),lt=l("variable",{id:"fragCoord"}),xt=e=>g("float",e),dt=e=>g("int",e),gt=e=>g("uint",e),bt=e=>g("bool",e),Xt=(e,t)=>g("vec2",e,t),vt=(e,t,r)=>g("vec3",e,t,r),yt=(e,t,r,o)=>g("vec4",e,t,r,o),ht=(...e)=>g("mat2",...e),Tt=(...e)=>g("mat3",...e),Et=(...e)=>g("mat4",...e),wt=(e,t)=>g("ivec2",e,t),Rt=(e,t,r)=>g("ivec3",e,t,r),_t=(e,t,r,o)=>g("ivec4",e,t,r,o),Lt=(e,t)=>g("uvec2",e,t),Pt=(e,t,r)=>g("uvec3",e,t,r),Gt=(e,t,r,o)=>g("uvec4",e,t,r,o),St=(e,t)=>g("bvec2",e,t),At=(e,t,r)=>g("bvec3",e,t,r),Ft=(e,t,r,o)=>g("bvec4",e,t,r,o),Ut=e=>s("abs",e),Nt=e=>s("acos",e),zt=e=>s("all",e),Bt=e=>s("any",e),$t=e=>s("asin",e),It=(e,t)=>s("atan",e,t),Ct=(e,t)=>s("bitcast",e,t),Mt=e=>s("cbrt",e),Ot=e=>s("ceil",e),Dt=(e,t,r)=>s("clamp",e,t,r),Wt=e=>s("cos",e),qt=(e,t)=>s("cross",e,t),Vt=e=>s("dFdx",e),Yt=e=>s("dFdy",e),kt=e=>s("degrees",e),jt=(e,t)=>s("difference",e,t),Kt=(e,t)=>s("distance",e,t),Ht=(e,t)=>s("dot",e,t),Zt=(e,t)=>s("equals",e,t),Qt=e=>s("exp",e),Jt=e=>s("exp2",e),er=(e,t,r)=>s("faceforward",e,t,r),tr=e=>s("floor",e),rr=e=>s("fract",e),or=e=>s("fwidth",e),nr=e=>s("inverseSqrt",e),sr=e=>s("length",e),ir=e=>s("lengthSq",e),ar=e=>s("log",e),ur=e=>s("log2",e),cr=(e,t)=>s("max",e,t),fr=(e,t)=>s("min",e,t),pr=(e,t,r)=>s("mix",e,t,r),mr=e=>s("negate",e),lr=e=>s("normalize",e),xr=e=>s("oneMinus",e),dr=(e,t)=>s("pow",e,t),gr=e=>s("pow2",e),br=e=>s("pow3",e),Xr=e=>s("pow4",e),vr=e=>s("radians",e),yr=e=>s("reciprocal",e),hr=(e,t)=>s("reflect",e,t),Tr=(e,t,r)=>s("refract",e,t,r),Er=e=>s("round",e),wr=e=>s("saturate",e),Rr=e=>s("sign",e),_r=e=>s("sin",e),Lr=(e,t,r)=>s("smoothstep",e,t,r),Pr=e=>s("sqrt",e),Gr=(e,t)=>s("step",e,t),Sr=e=>s("tan",e),Ar=(e,t)=>s("transformDirection",e,t),Fr=e=>s("trunc",e);var he=`
13
32
  #version 300 es
14
33
  void main() {
15
34
  float x = float(gl_VertexID % 2) * 4.0 - 1.0;
16
35
  float y = float(gl_VertexID / 2) * 4.0 - 1.0;
17
36
  gl_Position = vec4(x, y, 0.0, 1.0);
18
37
  }
19
- `,ge=`
38
+ `,Te=`
20
39
  #version 300 es
21
40
  precision mediump float;
22
41
  uniform vec2 iResolution;
@@ -24,25 +43,19 @@ out vec4 fragColor;
24
43
  void main() {
25
44
  fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
26
45
  }
27
- `,I=(e,t,r)=>{let n=e.createShader(r);if(!n)throw new Error("Failed to create shader");if(e.shaderSource(n,t.trim()),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS))return n;let o=e.getShaderInfoLog(n);throw e.deleteShader(n),new Error(`Could not compile shader: ${o}`)},B=(e,t=de,r=ge)=>{i.obj(r)&&(r=N(r)),i.obj(t)&&(t=N(t));let n=e.createProgram();if(e.attachShader(n,I(e,t,e.VERTEX_SHADER)),e.attachShader(n,I(e,r,e.FRAGMENT_SHADER)),e.linkProgram(n),e.getProgramParameter(n,e.LINK_STATUS))return n;let o=e.getProgramInfoLog(n);throw e.deleteProgram(n),new Error(`Could not link pg: ${o}`)},O=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(t),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r},z=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(t),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r},W=(e,t,r)=>{r&&(e=Math.max(...r)+1);let n=t.length/e;return Math.floor(n)},D=(e,t,r,n,o)=>{e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,t,e.FLOAT,!1,0,0),o&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,o)},q=(e,t,r,n)=>{let o=e.createTexture();e.bindTexture(e.TEXTURE_2D,o),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(r,n),e.activeTexture(e.TEXTURE0+n),e.bindTexture(e.TEXTURE_2D,o)};var V=async e=>{let t=e.el.getContext("webgl2"),r=B(t,e.vs,e.fs),n={context:t,program:r};t.useProgram(r);let o=0,a=S(()=>o++),u=S(p=>t.getUniformLocation(r,p)),l=S(p=>t.getAttribLocation(r,p));return{webgl:n,render:()=>{t.clear(t.COLOR_BUFFER_BIT),t.viewport(0,0,...e.size),t.drawArrays(t.TRIANGLES,0,3)},clean:()=>t.deleteProgram(r),_attribute:(p="",f,c)=>{let m=l(p,!0),T=O(t,f),L=z(t,c),se=W(e.count,f,c);D(t,se,m,T,L)},_uniform:(p,f)=>{let c=u(p);if(i.num(f))return t.uniform1f(c,f);let m=f.length;if(m<=4)return t[`uniform${m}fv`](c,f);m=Math.sqrt(m)<<0,t[`uniformMatrix${m}fv`](c,!1,f)},_texture:(p,f)=>{let c=new Image;Object.assign(c,{src:f,alt:p,crossOrigin:"anonymous"}),c.decode().then(()=>{let m=u(c.alt),T=a(c.alt);q(t,c,m,T)})}}};var he=(e,t)=>{let r={target:"webgpu",nodes:new Map,variables:new Map,functions:new Map,...t};return E(e,r)},E=(e,t)=>e?e.value!==void 0?be(e.value,e.type):e.property&&e.parent?`${E(e.parent,t)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?xe(e,t):e.mathFunction&&e.children&&e.children.length>=1?ye(e,t):"0.0":"0.0",be=(e,t)=>{if(t==="float"){let r=Number(e);return r%1===0?`${r}.0`:`${r}`}if(t==="int")return`${Math.floor(Number(e))}`;if(t==="bool")return e?"true":"false";if(i.arr(e)){let r=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(t==="vec2")return`vec2<f32>(${r})`;if(t==="vec3")return`vec3<f32>(${r})`;if(t==="vec4")return`vec4<f32>(${r})`;if(t==="color")return`vec3<f32>(${r})`}return"0.0"},xe=(e,t)=>{if(!e.children||e.children.length<2)return"0.0";let r=E(e.children[0],t),n=E(e.children[1],t);return e.operator==="add"?`(${r} + ${n})`:e.operator==="sub"?`(${r} - ${n})`:e.operator==="mul"?`(${r} * ${n})`:e.operator==="div"?`(${r} / ${n})`:e.operator==="mod"?`(${r} % ${n})`:e.operator==="equal"?`(${r} == ${n})`:e.operator==="notEqual"?`(${r} != ${n})`:e.operator==="lessThan"?`(${r} < ${n})`:e.operator==="lessThanEqual"?`(${r} <= ${n})`:e.operator==="greaterThan"?`(${r} > ${n})`:e.operator==="greaterThanEqual"?`(${r} >= ${n})`:e.operator==="and"?`(${r} && ${n})`:e.operator==="or"?`(${r} || ${n})`:`(${r} + ${n})`},ye=(e,t)=>{if(!e.children||e.children.length<1)return"0.0";let r=e.mathFunction,n=e.children.map(l=>E(l,t)),[o,a,u]=n;return n.length===1?`${r}(${o})`:n.length===2?`${r}(${o}, ${a})`:n.length===3?`${r}(${o}, ${a}, ${u})`:o||"0.0"},C=(e,t)=>{let r="";t?.uniforms&&(Object.entries(t.uniforms).forEach(([o,a])=>{let u=Te(a);r+=`@group(0) @binding(0) var<uniform> ${o}: ${u};
28
- `}),r+=`
29
- `),r+=`@fragment
30
- `,r+=`fn main() -> @location(0) vec4<f32> {
31
- `;let n=he(e);return r+=` return ${n};
32
- `,r+=`}
33
- `,r},Te=e=>{if(i.num(e))return"f32";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2<f32>";if(t===3)return"vec3<f32>";if(t===4)return"vec4<f32>"}return"f32"};var ve=`
46
+ `,Q=(e,t,r)=>{let o=e.createShader(r);if(!o)throw new Error("Failed to create shader");if(e.shaderSource(o,t.trim()),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS))return o;let n=e.getShaderInfoLog(o);e.deleteShader(o),console.warn(`Could not compile shader: ${n}`)},J=(e,t=he,r=Te)=>{d.str(r)||(r=G(r,{isWebGL:!0})),d.str(t)||(t=S(r,{isWebGL:!0}));let o=e.createProgram(),n=Q(e,t,e.VERTEX_SHADER),i=Q(e,r,e.FRAGMENT_SHADER);if(!n||!i)return;if(e.attachShader(o,n),e.attachShader(o,i),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let a=e.getProgramInfoLog(o);e.deleteProgram(o),console.warn(`Could not link pg: ${a}`)},ee=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(t),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r},te=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(t),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r},re=(e,t,r)=>{r&&(e=Math.max(...r)+1);let o=t.length/e;return Math.floor(o)},oe=(e,t,r,o,n)=>{e.bindBuffer(e.ARRAY_BUFFER,o),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,t,e.FLOAT,!1,0,0),n&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)},ne=(e,t,r,o)=>{let n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(r,o),e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,n)};var se=async e=>{let t=e.el.getContext("webgl2"),r=J(t,e.vs,e.fs),o={context:t,program:r};t.useProgram(r);let n=0,i=I(y=>t.getUniformLocation(r,y)),a=I(y=>t.getAttribLocation(r,y)),c=I(()=>n++);return{webgl:o,render:()=>{t.clear(t.COLOR_BUFFER_BIT),t.viewport(0,0,...e.size),t.drawArrays(t.TRIANGLES,0,3)},clean:()=>t.deleteProgram(r),_attribute:(y="",h,T)=>{let E=a(y,!0),b=ee(t,h),u=te(t,T),p=re(e.count,h,T);oe(t,p,E,b,u)},_uniform:(y,h)=>{let T=i(y);if(d.num(h))return t.uniform1f(T,h);let E=h.length;if(E<=4)return t[`uniform${E}fv`](T,h);E=Math.sqrt(E)<<0,t[`uniformMatrix${E}fv`](T,!1,h)},_texture:(y,h)=>{let T=new Image;Object.assign(T,{src:h,crossOrigin:"anonymous"}),T.decode().then(()=>{let E=i(y),b=c(y);ne(t,T,E,b)})}}};import{nested as C}from"reev";var Ee=`
34
47
  @vertex
35
48
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
36
49
  let x = f32(vertex_index % 2u) * 4.0 - 1.0;
37
50
  let y = f32(vertex_index / 2u) * 4.0 - 1.0;
38
51
  return vec4f(x, y, 0.0, 1.0);
39
52
  }
40
- `,Ee=`
53
+ `,we=`
41
54
  @group(0) @binding(0) var<uniform> iResolution: vec2f;
42
55
 
43
56
  @fragment
44
57
  fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
45
58
  return vec4f(position.xy / iResolution, 0.0, 1.0);
46
59
  }
47
- `,j=async e=>{let t=navigator.gpu,r=t.getPreferredCanvasFormat(),o=await(await t.requestAdapter()).requestDevice();return e.configure({device:o,format:r,alphaMode:"opaque"}),{device:o,format:r}},Y=(e,t,r,n,o=ve,a=Ee)=>{i.obj(a)&&(a=C(a)),i.obj(o)&&(o=C(o));let u=e.createPipelineLayout({bindGroupLayouts:n});return e.createRenderPipeline({vertex:{module:e.createShaderModule({code:o.trim()}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({code:a.trim()}),entryPoint:"main",targets:[{format:t}]},layout:u,primitive:{topology:"triangle-list"}})},H=(e,t)=>{let r=[],n=[];t.forEach((u,l)=>{if(!u)return;let h="buffer"in u,x=u instanceof GPUTextureView,d=u instanceof GPUSampler;if(h)r.push({binding:l,visibility:3,buffer:{type:"uniform"}});else if(x)r.push({binding:l,visibility:2,texture:{}});else if(d)r.push({binding:l,visibility:2,sampler:{}});else return;n.push({binding:l,resource:u})});let o=e.createBindGroupLayout({entries:r}),a=e.createBindGroup({layout:o,entries:n});return[o,a]},k=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),$e=e=>Math.ceil(e/256)*256,K=(e,t)=>{let r=new Float32Array(t),n=$e(r.byteLength),o=e.createBuffer({size:n,usage:72});return{array:r,buffer:o}},Z=(e,t=1280,r=800)=>{let n=e.createTexture({size:[t,r],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return[n,o]};var Q=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:n}=await j(t),o={device:r,context:t,uniforms:{},textures:{},resources:[[],[]],loadingImg:0,needsUpdate:!0},a=p=>{let{array:f,buffer:c}=K(r,p);return o.resources[0].push({buffer:c}),o.needsUpdate=!0,{array:f,buffer:c}},u=p=>{let{width:f,height:c}=p,[m,T]=Z(r,f,c);return o.resources[1].push(T,m.createView()),o.needsUpdate=!0,{texture:m,width:f,height:c}},l=()=>{let p=[];o.groups=[],o.resources.forEach(f=>{if(!f.length)return;let[c,m]=H(r,f);p.push(c),o.groups.push(m)}),o.pipeline=Y(r,n,[],p,e.vs,e.fs)};return{webgpu:o,render:()=>{if(o.loadingImg)return;o.needsUpdate&&l(),o.needsUpdate=!1;let p=r.createCommandEncoder(),f=p.beginRenderPass(k(t));f.setPipeline(o.pipeline),o.groups.forEach((c,m)=>f.setBindGroup(m,c)),f.draw(e.count,1,0,0),f.end(),r.queue.submit([p.finish()])},clean:()=>{},_attribute:(p="",f)=>{},_uniform:(p,f)=>{i.num(f)&&(f=[f]),o.uniforms[p]||(o.uniforms[p]=a(f));let{array:c,buffer:m}=o.uniforms[p];c.set(f),r.queue.writeBuffer(m,0,c)},_texture:(p,f)=>{o.loadingImg++;let c=Object.assign(new Image,{src:f,crossOrigin:"anonymous"});c.decode().then(()=>{o.textures[p]||(o.textures[p]=u(c));let{texture:m,width:T,height:L}=o.textures[p];r.queue.copyExternalImageToTexture({source:c},{texture:m},{width:T,height:L}),o.loadingImg--})}}};var dt=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],J=["x","y","z","w","r","g","b","a","s","t","p","q"],ee=["add","sub","mul","div","mod","equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","and","or","not","assign","xor","bitAnd","bitNot","bitOr","bitXor","shiftLeft","shiftRight"],te=["abs","acos","asin","atan","atan2","ceil","clamp","cos","cross","degrees","distance","dot","exp","exp2","faceforward","floor","fract","length","all","any","bitcast","cbrt","dFdx","dFdy","difference","equals","fwidth","inverseSqrt","lengthSq","log","log2","max","min","mix","negate","normalize","oneMinus","pow","pow2","pow3","pow4","radians","reciprocal","reflect","refract","round","saturate","sign","sin","smoothstep","sqrt","step","tan","transformDirection","trunc"],re=[!0,!1],ne=[0,1,2,3,4,5],oe=[0,1,.5,2];var G=new Map,R=new Map,_=new Map,we=()=>{re.forEach(e=>{G.set(e,s("bool",e))}),ne.forEach(e=>{R.set(e,s("int",e))}),oe.forEach(e=>{_.set(e,s("float",e))})},U=e=>(G.has(e)||we(),G.get(e)||s("bool",e)),X=e=>R.has(e)?R.get(e):s("int",e),A=e=>_.has(e)?_.get(e):s("float",e),xt=e=>{let t=new Map,r=new Map;return e.forEach(n=>{let o=Le(n);r.has(o)?(t.has(o)||t.set(o,[r.get(o)]),t.get(o).push(n)):r.set(o,n)}),t},Le=e=>[e.type,`${e.value}`,e.property||""].join("|");var $t=e=>i.bol(e)?U(e):i.num(e)?i.int(e)?X(e):A(e):i.arr(e)?ie(e):i.obj(e)?Ne(e):s("float",0),ie=e=>{let t=e.length;return t===2?s("vec2",e):t===3?s("vec3",e):t===4?s("vec4",e):t===9?s("mat3",e):t===16?s("mat4",e):s("float",e[0])},Ne=e=>{if("r"in e&&"g"in e&&"b"in e){let t=[e.r,e.g,e.b];return"a"in e&&t.push(e.a),s("color",t)}if("x"in e&&"y"in e){let t=[e.x,e.y];return"z"in e&&t.push(e.z),"w"in e&&t.push(e.w),ie(t)}return s("float",0)},P=e=>i.num(e)?A(e):s("float",Number(e)),wt=e=>i.num(e)&&Number.isInteger(e)?X(e):s("int",Math.floor(Number(e))),Lt=e=>U(!!e),Nt=(e,t)=>i.und(e)?s("vec2",[0,0]):i.und(t)?i.arr(e)?s("vec2",e.slice(0,2)):i.obj(e)&&"x"in e&&"y"in e?s("vec2",[e.x,e.y]):s("vec2",[Number(e),Number(e)]):s("vec2",[Number(e),Number(t)]),Se=(e,t,r)=>i.und(e)?s("vec3",[0,0,0]):i.und(t)?i.arr(e)?s("vec3",e.slice(0,3)):i.obj(e)&&"x"in e&&"y"in e&&"z"in e?s("vec3",[e.x,e.y,e.z]):s("vec3",[Number(e),Number(e),Number(e)]):r===void 0?s("vec3",[Number(e),Number(t),0]):s("vec3",[Number(e),Number(t),Number(r)]),St=(e,t,r,n)=>i.und(e)?s("vec4",[0,0,0,1]):i.und(t)?i.arr(e)?s("vec4",e.slice(0,4)):i.obj(e)&&"x"in e&&"y"in e&&"z"in e&&"w"in e?s("vec4",[e.x,e.y,e.z,e.w]):s("vec4",[Number(e),Number(e),Number(e),1]):s("vec4",[Number(e),Number(t),Number(r),Number(n)]),Ct=(e,t,r)=>{if(e===void 0)return s("color",[1,1,1]);if(i.str(e)&&e.startsWith("#")){let n=e.slice(1),o=parseInt(n,16);return s("color",[(o>>16&255)/255,(o>>8&255)/255,(o&255)/255])}return i.num(e)&&t===void 0&&r===void 0?s("color",[(e>>16&255)/255,(e>>8&255)/255,(e&255)/255]):Se(e,t,r)};var Ce=0,Ge=()=>`node_${++Ce}`,$=(e,t,r)=>({id:Ge(),type:e,value:t,children:[],...r}),Re=(e="")=>J.includes(e),_e=(e="")=>ee.includes(e),Ue=(e="")=>te.includes(e),w=(e,t)=>{let r=(o,a)=>{if(!(!i.str(a)||a==="then"))return a==="id"?e.id:a==="type"?e.type:a==="value"?e.value:a==="property"?e.property:Re(a)?w($(Xe(a),void 0,{parent:e,property:a}),t):_e(a)?(...u)=>w($(e.type,void 0,{operator:a,children:[e,...u]}),t):Ue(a)?(...u)=>w($(Ae(a,e.type),void 0,{mathFunction:a,children:[e,...u]}),t):t?.({path:[a],args:[]})},n=(o,a,u)=>t?.({path:[],args:u});return new Proxy(()=>{},{get:r,apply:n})},Xe=e=>e.length===1?"float":e.length===2?"vec2":e.length===3?"vec3":e.length===4?"vec4":"float",Ae=(e,t)=>e==="length"?"float":t,s=(e,t,r)=>{let n=$(e,t,r);return w(n)};var Pe=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2";if(t===3)return"vec3";if(t===4)return"vec4";if(t===9)return"mat3";if(t===16)return"mat4"}return i.obj(e)&&"r"in e&&"g"in e&&"b"in e?"color":"float"},b=e=>{let t=Pe(e),r=e,n=null,o=null,a=s(t,r),u=g=>{r=g,a.value=g},l=g=>(n=g,d),h=g=>(o=g,d),x=g=>{if(n){let y=n(g);y!==void 0&&u(y)}if(o){let y=o(g);y!==void 0&&u(y)}},d=Object.create(a);return d.set=u,d.onObjectUpdate=l,d.onRenderUpdate=h,d._updateFromContext=x,d.isUniform=!0,d},ae=b(0),Fe=b(0),Me=b(0),Pt=b([1920,1080]),Ft=b([0,0]),Mt=e=>{if(e.time!==void 0){let t=ae.value||0;ae.set(e.time),Fe.set(t),Me.set(e.time-t)}};var Dt=e=>{let t=(...r)=>{let n=r.map(a=>i.obj(a)&&"type"in a&&a.type?a:P(a));return e(n)||P(0)};return t.call=r=>e(r),t},qt=(e,t)=>{t();let r={ElseIf(n,o){return o(),r},Else(n){n()}};return r},Vt=s("vec4",void 0),jt=s("vec4",void 0),Yt=b(0),Ht=b([1920,1080]),kt=b([0,0]),Kt=e=>e.abs(),Zt=e=>e.sin(),Qt=e=>e.cos(),Jt=e=>e.tan(),er=e=>e.sqrt(),tr=e=>e.floor(),rr=e=>e.ceil(),nr=e=>e.fract(),or=e=>e.normalize(),ir=e=>e.length();var xr=e=>i.obj(e)?"isGL"in e:!1,ze=()=>typeof window>"u",We=()=>ze()?!1:"gpu"in navigator,M=performance.now(),De=e=>{let t=Ie({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:3,webgl:{},webgpu:{}});return t.queue=Oe(),t.frame=Be(),t.attribute=F((r,n,o)=>t.queue(()=>t._attribute?.(r,n,o))),t.texture=F((r,n)=>t.queue(()=>t._texture?.(r,n))),t.uniform=F((r,n,o)=>t.queue(()=>t._uniform?.(r,n,o))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:M}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,We()||(t.isWebGL=!0),t.isWebGL?t(await V(t)):t(await Q(t)),t.resize(),t.frame(()=>(t.loop(),t.queue.flush(),t.render(),t.isLoop)),!t.isNative&&(window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove))}),t("clean",()=>{t.frame.stop(),t.frame.clean(t.render),!t.isNative&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("resize",()=>{let r=t.width||window.innerWidth,n=t.height||window.innerHeight;t.size[0]=t.el.width=r,t.size[1]=t.el.height=n,t.uniform("iResolution",t.size)}),t("mousemove",(r,n=r.clientX,o=r.clientY)=>{let[a,u]=t.size,{top:l,left:h}=t.el.getBoundingClientRect();t.mouse[0]=(n-l-a/2)/(a/2),t.mouse[1]=-(o-h-u/2)/(u/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{M=performance.now()/1e3,t.uniform("iTime",M)}),t(e)},yr=De;export{re as CACHE_BOOLS,oe as CACHE_FLOATS,ne as CACHE_INTS,te as FUNCTIONS,Dt as Fn,qt as If,ee as OPERATORS,J as SWIZZLES,dt as TYPES,Kt as abs,$e as alignTo256,Lt as bool,rr as ceil,Ct as color,$t as convertToNode,Qt as cos,D as createAttrib,H as createBindGroup,k as createDescriptor,j as createDevive,De as createGL,z as createIbo,$ as createNode,Y as createPipeline,B as createProgram,q as createTexture,Z as createTextureSampler,K as createUniformBuffer,O as createVbo,yr as default,ge as defaultFragmentGLSL,de as defaultVertexGLSL,He as dig,ue as each,je as ext,Ye as fig,xt as findDuplicateNodes,P as float,tr as floor,qe as flush,nr as fract,Vt as fragCoord,U as getCachedBool,A as getCachedFloat,X as getCachedInt,W as getStride,N as glsl,Me as iDeltaTime,kt as iMouse,Fe as iPrevTime,Ht as iResolution,Yt as iTime,wt as int,i as is,xr as isGL,ze as isServer,We as isWebGPUSupported,ir as length,s as node,fe as nodeToGLSL,he as nodeToWGSL,or as normalize,jt as position,Ve as replace,ke as sig,Zt as sin,er as sqrt,Jt as tan,b as uniform,Mt as updateUniforms,Nt as vec2,Se as vec3,St as vec4,V as webgl,Q as webgpu,C as wgsl};
60
+ `,ie=async e=>{let t=navigator.gpu,r=t.getPreferredCanvasFormat(),n=await(await t.requestAdapter()).requestDevice();return e.configure({device:n,format:r,alphaMode:"opaque"}),{device:n,format:r}},ae=(e,t,r,o,n=Ee,i=we)=>{d.str(i)||(i=G(i,{isWebGL:!1})),d.str(n)||(n=S(n,{isWebGL:!1}));let a=e.createPipelineLayout({bindGroupLayouts:o});return e.createRenderPipeline({vertex:{module:e.createShaderModule({code:n.trim()}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({code:i.trim()}),entryPoint:"main",targets:[{format:t}]},layout:a,primitive:{topology:"triangle-list"}})},ue=(e,t)=>{let r=[],o=[];t.forEach((a,c)=>{if(!a)return;let v="buffer"in a,m=a instanceof GPUTextureView,X=a instanceof GPUSampler;if(v)r.push({binding:c,visibility:3,buffer:{type:"uniform"}});else if(m)r.push({binding:c,visibility:2,texture:{}});else if(X)r.push({binding:c,visibility:2,sampler:{}});else return;o.push({binding:c,resource:a})});let n=e.createBindGroupLayout({entries:r}),i=e.createBindGroup({layout:n,entries:o});return{layout:n,bindGroup:i}},ce=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),Re=e=>Math.ceil(e/256)*256,fe=(e,t)=>{let r=new Float32Array(t),o=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:o}},pe=(e,t)=>{let r=new Float32Array(t),o=Re(r.byteLength),n=e.createBuffer({size:o,usage:72});return{array:r,buffer:n}},me=(e,t=1280,r=800)=>{let o=e.createTexture({size:[t,r],format:"rgba8unorm",usage:22}),n=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:o,sampler:n}},_e=(e,t)=>e/t,Le=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",le=(e,t,r=6)=>{let o=_e(t,r);return{arrayStride:o*4,attributes:[{shaderLocation:e,offset:0,format:Le(o)}]}};var xe=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:o}=await ie(t),n={device:r,context:t,resources:[[],[]],loadingImg:0,needsUpdate:!0},i=[],a=[],c=[],v=C((b,u)=>{let{array:p,buffer:x}=fe(r,u);return a.push(x),c.push(le(c.length,p.length,e.count)),n.needsUpdate=!0,{array:p,buffer:x}}),m=C((b,u)=>{let{array:p,buffer:x}=pe(r,u);return n.resources[0].push({buffer:x}),n.needsUpdate=!0,{array:p,buffer:x}}),X=C((b,{width:u,height:p})=>{let{texture:x,sampler:U}=me(r,u,p);return n.resources[1].push(U,x.createView()),n.needsUpdate=!0,{texture:x,width:u,height:p}}),R=()=>{let b=[];i.length=0,n.resources.forEach(u=>{if(!u.length)return;let{layout:p,bindGroup:x}=ue(r,u);b.push(p),i.push(x)}),n.pipeline=ae(r,o,c,b,e.vs,e.fs)};return{webgpu:n,render:()=>{if(n.loadingImg)return;n.needsUpdate&&R(),n.needsUpdate=!1;let b=r.createCommandEncoder(),u=b.beginRenderPass(ce(t));u.setPipeline(n.pipeline),i.forEach((p,x)=>u.setBindGroup(x,p)),a.forEach((p,x)=>u.setVertexBuffer(x,p)),u.draw(e.count,1,0,0),u.end(),r.queue.submit([b.finish()])},clean:()=>{},_attribute:(b="",u)=>{let{array:p,buffer:x}=v(b,u);r.queue.writeBuffer(x,0,p)},_uniform:(b,u)=>{d.num(u)&&(u=[u]);let{array:p,buffer:x}=m(b,u);p.set(u),r.queue.writeBuffer(x,0,p)},_texture:(b,u)=>{n.loadingImg++;let p=Object.assign(new Image,{src:u,crossOrigin:"anonymous"});p.decode().then(()=>{let{texture:x,width:U,height:ge}=X(b,p);r.queue.copyExternalImageToTexture({source:p},{texture:x},{width:U,height:ge}),n.loadingImg--})}}};var ao=e=>d.obj(e)?"isGL"in e:!1,Ae=()=>typeof window>"u",Fe=()=>Ae()?!1:"gpu"in navigator,O=performance.now(),Ue=e=>{let t=Pe({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=Se(),t.frame=Ge(),t.attribute=M((r,o,n)=>t.queue(()=>t._attribute?.(r,o,n))),t.texture=M((r,o)=>t.queue(()=>t._texture?.(r,o))),t.uniform=M((r,o,n)=>t.queue(()=>t._uniform?.(r,o,n))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:O}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,Fe()||(t.isWebGL=!0),t.isWebGL?t(await se(t)):t(await xe(t)),t.resize(),t.frame(()=>(t.loop(),t.queue.flush(),t.render(),t.isLoop)),!t.isNative&&(window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove))}),t("clean",()=>{t.frame.stop(),t.frame.clean(t.render),!t.isNative&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("resize",()=>{let r=t.width||window.innerWidth,o=t.height||window.innerHeight;t.size[0]=t.el.width=r,t.size[1]=t.el.height=o,t.uniform("iResolution",t.size)}),t("mousemove",(r,o=r.clientX,n=r.clientY)=>{let[i,a]=t.size,{top:c,left:v}=t.el.getBoundingClientRect();t.mouse[0]=(o-c-i/2)/(i/2),t.mouse[1]=-(n-v-a/2)/(a/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{O=performance.now()/1e3,t.uniform("iTime",O)}),t(e)},uo=Ue;export{q as FUNCTIONS,rt as Fn,et as If,tt as Loop,D as NODE_TYPES,N as OPERATORS,W as OPERATOR_KEYS,Oe as SWIZZLES,V as TYPE_MAPPING,Ut as abs,Nt as acos,Re as alignTo256,zt as all,Bt as any,$t as asin,H as assign,It as atan,Ct as bitcast,bt as bool,St as bvec2,At as bvec3,Ft as bvec4,Mt as cbrt,Ot as ceil,Dt as clamp,f as code,Wt as cos,oe as createAttrib,ue as createBindGroup,le as createBufferLayout,ce as createDescriptor,ie as createDevice,Ue as createGL,te as createIbo,ae as createPipeline,J as createProgram,ne as createTexture,me as createTextureSampler,pe as createUniformBuffer,ee as createVbo,fe as createVertexBuffer,qt as cross,Vt as dFdx,Yt as dFdy,uo as default,Te as defaultFragmentGLSL,he as defaultVertexGLSL,kt as degrees,jt as difference,Ie as dig,Kt as distance,Ht as dot,be as each,Zt as equals,Qt as exp,Jt as exp2,Be as ext,s as f,er as faceforward,$e as fig,xt as float,tr as floor,Ne as flush,rr as fract,lt as fragCoord,G as fragment,or as fwidth,P as getId,re as getStride,pt as iMouse,ft as iResolution,mt as iTime,_ as inferType,dt as int,nr as inverseSqrt,d as is,k as isFunction,ao as isGL,Ye as isNodeType,Y as isOperator,Ae as isServer,z as isSwizzle,Fe as isWebGPUSupported,wt as ivec2,Rt as ivec3,_t as ivec4,B as joins,sr as length,ir as lengthSq,ar as log,ur as log2,ht as mat2,Tt as mat3,Et as mat4,cr as max,fr as min,pr as mix,g as n,mr as negate,l as node,lr as normalize,ye as o,xr as oneMinus,dr as pow,gr as pow2,br as pow3,Xr as pow4,vr as radians,yr as reciprocal,hr as reflect,Tr as refract,ze as replace,Er as round,Z as s,wr as saturate,Ce as sig,Rr as sign,_r as sin,Lr as smoothstep,Pr as sqrt,Gr as step,Sr as tan,$ as toVar,Ar as transformDirection,Fr as trunc,F as u,gt as uint,Lt as uvec2,Pt as uvec3,Gt as uvec4,at as v,Xt as vec2,vt as vec3,yt as vec4,S as vertex,se as webgl,xe as webgpu};
48
61
  //# sourceMappingURL=index.mjs.map