{"version":3,"file":"ngwr-splash-cursor.mjs","sources":["../../../projects/lib/splash-cursor/fluid.ts","../../../projects/lib/splash-cursor/splash-cursor.ts","../../../projects/lib/splash-cursor/ngwr-splash-cursor.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * WebGL fluid simulation behind `<wr-splash-cursor>`. Port of the engine\n * used by reactbits.dev's SplashCursor (itself based on Pavel Dobryakov's\n * WebGL-Fluid-Simulation, MIT).\n *\n * Framework-free on purpose: `createFluidSimulation(canvas, config)` boots\n * the sim and returns a teardown, or `null` when WebGL isn't available.\n */\n\n/* eslint-disable no-bitwise -- GL bitmasks + string hashing are inherently bitwise */\n\ninterface WrFluidConfig {\n  readonly simResolution: number;\n  readonly dyeResolution: number;\n  readonly densityDissipation: number;\n  readonly velocityDissipation: number;\n  readonly pressure: number;\n  readonly pressureIterations: number;\n  readonly curl: number;\n  readonly splatRadius: number;\n  readonly splatForce: number;\n  readonly shading: boolean;\n  readonly colorUpdateSpeed: number;\n  /** Cycle splat colours through the rainbow; `false` uses `color`. */\n  readonly rainbow: boolean;\n  /** Fixed splat colour (hex) when `rainbow` is off. */\n  readonly color: string;\n}\n\ninterface RGB {\n  r: number;\n  g: number;\n  b: number;\n}\n\ninterface TexFormat {\n  readonly internalFormat: number;\n  readonly format: number;\n}\n\ninterface GlExt {\n  readonly formatRGBA: TexFormat;\n  readonly formatRG: TexFormat;\n  readonly formatR: TexFormat;\n  readonly halfFloatTexType: number;\n  readonly supportLinearFiltering: boolean;\n}\n\ninterface FBO {\n  readonly texture: WebGLTexture;\n  readonly fbo: WebGLFramebuffer;\n  readonly width: number;\n  readonly height: number;\n  readonly texelSizeX: number;\n  readonly texelSizeY: number;\n  attach(id: number): number;\n}\n\ninterface DoubleFBO {\n  width: number;\n  height: number;\n  texelSizeX: number;\n  texelSizeY: number;\n  read: FBO;\n  write: FBO;\n  swap(): void;\n}\n\ninterface Pointer {\n  texcoordX: number;\n  texcoordY: number;\n  prevTexcoordX: number;\n  prevTexcoordY: number;\n  deltaX: number;\n  deltaY: number;\n  moved: boolean;\n  color: RGB;\n}\n\ntype GL = WebGLRenderingContext | WebGL2RenderingContext;\ntype Uniforms = Record<string, WebGLUniformLocation | null>;\n\nfunction createFluidSimulation(canvas: HTMLCanvasElement, config: WrFluidConfig): (() => void) | null {\n  const ctx = getWebGLContext(canvas);\n  if (!ctx) return null;\n  const { gl, ext } = ctx;\n\n  let dyeResolution = config.dyeResolution;\n  let shading = config.shading;\n  if (!ext.supportLinearFiltering) {\n    dyeResolution = 256;\n    shading = false;\n  }\n\n  let active = true;\n  let rafId = 0;\n\n  const pointer: Pointer = {\n    texcoordX: 0,\n    texcoordY: 0,\n    prevTexcoordX: 0,\n    prevTexcoordY: 0,\n    deltaX: 0,\n    deltaY: 0,\n    moved: false,\n    color: { r: 0, g: 0, b: 0 },\n  };\n\n  // Shader plumbing\n\n  function compile(type: number, source: string, keywords?: readonly string[]): WebGLShader {\n    const prefixed = keywords ? keywords.map(k => `#define ${k}\\n`).join('') + source : source;\n    const shader = gl.createShader(type)!;\n    gl.shaderSource(shader, prefixed);\n    gl.compileShader(shader);\n    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n      // eslint-disable-next-line no-console -- GPU shader failures are otherwise invisible\n      console.error('wr-splash-cursor shader error:', gl.getShaderInfoLog(shader));\n    }\n    return shader;\n  }\n\n  function link(vertex: WebGLShader, fragment: WebGLShader): WebGLProgram {\n    const program = gl.createProgram();\n    gl.attachShader(program, vertex);\n    gl.attachShader(program, fragment);\n    gl.linkProgram(program);\n    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n      // eslint-disable-next-line no-console -- GPU link failures are otherwise invisible\n      console.error('wr-splash-cursor program error:', gl.getProgramInfoLog(program));\n    }\n    return program;\n  }\n\n  function uniformsOf(program: WebGLProgram): Uniforms {\n    const out: Uniforms = {};\n    const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS) as number;\n    for (let i = 0; i < count; i++) {\n      const name = gl.getActiveUniform(program, i)!.name;\n      out[name] = gl.getUniformLocation(program, name);\n    }\n    return out;\n  }\n\n  class ShaderProgram {\n    readonly program: WebGLProgram;\n    readonly uniforms: Uniforms;\n\n    constructor(vertex: WebGLShader, fragment: WebGLShader) {\n      this.program = link(vertex, fragment);\n      this.uniforms = uniformsOf(this.program);\n    }\n\n    bind(): void {\n      gl.useProgram(this.program);\n    }\n  }\n\n  /** Display shader with `#define`-keyword program variants. */\n  class DisplayMaterial {\n    private readonly programs = new Map<number, WebGLProgram>();\n    private activeProgram: WebGLProgram | null = null;\n    uniforms: Uniforms = {};\n\n    constructor(\n      private readonly vertex: WebGLShader,\n      private readonly fragmentSource: string\n    ) {}\n\n    setKeywords(keywords: readonly string[]): void {\n      let hash = 0;\n      for (const k of keywords) hash += hashCode(k);\n      let program = this.programs.get(hash);\n      if (!program) {\n        program = link(this.vertex, compile(gl.FRAGMENT_SHADER, this.fragmentSource, keywords));\n        this.programs.set(hash, program);\n      }\n      if (program === this.activeProgram) return;\n      this.uniforms = uniformsOf(program);\n      this.activeProgram = program;\n    }\n\n    bind(): void {\n      gl.useProgram(this.activeProgram);\n    }\n  }\n\n  // Shaders\n\n  const baseVertexShader = compile(\n    gl.VERTEX_SHADER,\n    `\n    precision highp float;\n    attribute vec2 aPosition;\n    varying vec2 vUv;\n    varying vec2 vL;\n    varying vec2 vR;\n    varying vec2 vT;\n    varying vec2 vB;\n    uniform vec2 texelSize;\n\n    void main () {\n        vUv = aPosition * 0.5 + 0.5;\n        vL = vUv - vec2(texelSize.x, 0.0);\n        vR = vUv + vec2(texelSize.x, 0.0);\n        vT = vUv + vec2(0.0, texelSize.y);\n        vB = vUv - vec2(0.0, texelSize.y);\n        gl_Position = vec4(aPosition, 0.0, 1.0);\n    }\n  `\n  );\n\n  const copyShader = compile(\n    gl.FRAGMENT_SHADER,\n    `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    uniform sampler2D uTexture;\n\n    void main () {\n        gl_FragColor = texture2D(uTexture, vUv);\n    }\n  `\n  );\n\n  const clearShader = compile(\n    gl.FRAGMENT_SHADER,\n    `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    uniform sampler2D uTexture;\n    uniform float value;\n\n    void main () {\n        gl_FragColor = value * texture2D(uTexture, vUv);\n    }\n  `\n  );\n\n  const displayShaderSource = `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    varying vec2 vL;\n    varying vec2 vR;\n    varying vec2 vT;\n    varying vec2 vB;\n    uniform sampler2D uTexture;\n    uniform vec2 texelSize;\n\n    void main () {\n        vec3 c = texture2D(uTexture, vUv).rgb;\n        #ifdef SHADING\n            vec3 lc = texture2D(uTexture, vL).rgb;\n            vec3 rc = texture2D(uTexture, vR).rgb;\n            vec3 tc = texture2D(uTexture, vT).rgb;\n            vec3 bc = texture2D(uTexture, vB).rgb;\n\n            float dx = length(rc) - length(lc);\n            float dy = length(tc) - length(bc);\n\n            vec3 n = normalize(vec3(dx, dy, length(texelSize)));\n            vec3 l = vec3(0.0, 0.0, 1.0);\n\n            float diffuse = clamp(dot(n, l) + 0.7, 0.7, 1.0);\n            c *= diffuse;\n        #endif\n\n        float a = max(c.r, max(c.g, c.b));\n        gl_FragColor = vec4(c, a);\n    }\n  `;\n\n  const splatShader = compile(\n    gl.FRAGMENT_SHADER,\n    `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    uniform sampler2D uTarget;\n    uniform float aspectRatio;\n    uniform vec3 color;\n    uniform vec2 point;\n    uniform float radius;\n\n    void main () {\n        vec2 p = vUv - point.xy;\n        p.x *= aspectRatio;\n        vec3 splat = exp(-dot(p, p) / radius) * color;\n        vec3 base = texture2D(uTarget, vUv).xyz;\n        gl_FragColor = vec4(base + splat, 1.0);\n    }\n  `\n  );\n\n  const advectionShader = compile(\n    gl.FRAGMENT_SHADER,\n    `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    uniform sampler2D uVelocity;\n    uniform sampler2D uSource;\n    uniform vec2 texelSize;\n    uniform vec2 dyeTexelSize;\n    uniform float dt;\n    uniform float dissipation;\n\n    vec4 bilerp (sampler2D sam, vec2 uv, vec2 tsize) {\n        vec2 st = uv / tsize - 0.5;\n        vec2 iuv = floor(st);\n        vec2 fuv = fract(st);\n\n        vec4 a = texture2D(sam, (iuv + vec2(0.5, 0.5)) * tsize);\n        vec4 b = texture2D(sam, (iuv + vec2(1.5, 0.5)) * tsize);\n        vec4 c = texture2D(sam, (iuv + vec2(0.5, 1.5)) * tsize);\n        vec4 d = texture2D(sam, (iuv + vec2(1.5, 1.5)) * tsize);\n\n        return mix(mix(a, b, fuv.x), mix(c, d, fuv.x), fuv.y);\n    }\n\n    void main () {\n        #ifdef MANUAL_FILTERING\n            vec2 coord = vUv - dt * bilerp(uVelocity, vUv, texelSize).xy * texelSize;\n            vec4 result = bilerp(uSource, coord, dyeTexelSize);\n        #else\n            vec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize;\n            vec4 result = texture2D(uSource, coord);\n        #endif\n        float decay = 1.0 + dissipation * dt;\n        gl_FragColor = result / decay;\n    }\n  `,\n    ext.supportLinearFiltering ? undefined : ['MANUAL_FILTERING']\n  );\n\n  const divergenceShader = compile(\n    gl.FRAGMENT_SHADER,\n    `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    varying highp vec2 vL;\n    varying highp vec2 vR;\n    varying highp vec2 vT;\n    varying highp vec2 vB;\n    uniform sampler2D uVelocity;\n\n    void main () {\n        float L = texture2D(uVelocity, vL).x;\n        float R = texture2D(uVelocity, vR).x;\n        float T = texture2D(uVelocity, vT).y;\n        float B = texture2D(uVelocity, vB).y;\n\n        vec2 C = texture2D(uVelocity, vUv).xy;\n        if (vL.x < 0.0) { L = -C.x; }\n        if (vR.x > 1.0) { R = -C.x; }\n        if (vT.y > 1.0) { T = -C.y; }\n        if (vB.y < 0.0) { B = -C.y; }\n\n        float div = 0.5 * (R - L + T - B);\n        gl_FragColor = vec4(div, 0.0, 0.0, 1.0);\n    }\n  `\n  );\n\n  const curlShader = compile(\n    gl.FRAGMENT_SHADER,\n    `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    varying highp vec2 vL;\n    varying highp vec2 vR;\n    varying highp vec2 vT;\n    varying highp vec2 vB;\n    uniform sampler2D uVelocity;\n\n    void main () {\n        float L = texture2D(uVelocity, vL).y;\n        float R = texture2D(uVelocity, vR).y;\n        float T = texture2D(uVelocity, vT).x;\n        float B = texture2D(uVelocity, vB).x;\n        float vorticity = R - L - T + B;\n        gl_FragColor = vec4(0.5 * vorticity, 0.0, 0.0, 1.0);\n    }\n  `\n  );\n\n  const vorticityShader = compile(\n    gl.FRAGMENT_SHADER,\n    `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    varying vec2 vL;\n    varying vec2 vR;\n    varying vec2 vT;\n    varying vec2 vB;\n    uniform sampler2D uVelocity;\n    uniform sampler2D uCurl;\n    uniform float curl;\n    uniform float dt;\n\n    void main () {\n        float L = texture2D(uCurl, vL).x;\n        float R = texture2D(uCurl, vR).x;\n        float T = texture2D(uCurl, vT).x;\n        float B = texture2D(uCurl, vB).x;\n        float C = texture2D(uCurl, vUv).x;\n\n        vec2 force = 0.5 * vec2(abs(T) - abs(B), abs(R) - abs(L));\n        force /= length(force) + 0.0001;\n        force *= curl * C;\n        force.y *= -1.0;\n\n        vec2 velocity = texture2D(uVelocity, vUv).xy;\n        velocity += force * dt;\n        velocity = min(max(velocity, -1000.0), 1000.0);\n        gl_FragColor = vec4(velocity, 0.0, 1.0);\n    }\n  `\n  );\n\n  const pressureShader = compile(\n    gl.FRAGMENT_SHADER,\n    `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    varying highp vec2 vL;\n    varying highp vec2 vR;\n    varying highp vec2 vT;\n    varying highp vec2 vB;\n    uniform sampler2D uPressure;\n    uniform sampler2D uDivergence;\n\n    void main () {\n        float L = texture2D(uPressure, vL).x;\n        float R = texture2D(uPressure, vR).x;\n        float T = texture2D(uPressure, vT).x;\n        float B = texture2D(uPressure, vB).x;\n        float C = texture2D(uPressure, vUv).x;\n        float divergence = texture2D(uDivergence, vUv).x;\n        float pressure = (L + R + B + T - divergence) * 0.25;\n        gl_FragColor = vec4(pressure, 0.0, 0.0, 1.0);\n    }\n  `\n  );\n\n  const gradientSubtractShader = compile(\n    gl.FRAGMENT_SHADER,\n    `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    varying highp vec2 vL;\n    varying highp vec2 vR;\n    varying highp vec2 vT;\n    varying highp vec2 vB;\n    uniform sampler2D uPressure;\n    uniform sampler2D uVelocity;\n\n    void main () {\n        float L = texture2D(uPressure, vL).x;\n        float R = texture2D(uPressure, vR).x;\n        float T = texture2D(uPressure, vT).x;\n        float B = texture2D(uPressure, vB).x;\n        vec2 velocity = texture2D(uVelocity, vUv).xy;\n        velocity.xy -= vec2(R - L, T - B);\n        gl_FragColor = vec4(velocity, 0.0, 1.0);\n    }\n  `\n  );\n\n  // Fullscreen blit\n\n  gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());\n  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, -1, 1, 1, 1, 1, -1]), gl.STATIC_DRAW);\n  gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, gl.createBuffer());\n  gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 0, 2, 3]), gl.STATIC_DRAW);\n  gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);\n  gl.enableVertexAttribArray(0);\n\n  function blit(target: FBO | null, clear = false): void {\n    if (target === null) {\n      gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n      gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n    } else {\n      gl.viewport(0, 0, target.width, target.height);\n      gl.bindFramebuffer(gl.FRAMEBUFFER, target.fbo);\n    }\n    if (clear) {\n      gl.clearColor(0.0, 0.0, 0.0, 1.0);\n      gl.clear(gl.COLOR_BUFFER_BIT);\n    }\n    gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);\n  }\n\n  // Framebuffers\n\n  function createFBO(w: number, h: number, internalFormat: number, format: number, type: number, param: number): FBO {\n    gl.activeTexture(gl.TEXTURE0);\n    const texture = gl.createTexture();\n    gl.bindTexture(gl.TEXTURE_2D, texture);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, param);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, param);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n    gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, w, h, 0, format, type, null);\n\n    const fbo = gl.createFramebuffer();\n    gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n    gl.viewport(0, 0, w, h);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    return {\n      texture,\n      fbo,\n      width: w,\n      height: h,\n      texelSizeX: 1 / w,\n      texelSizeY: 1 / h,\n      attach(id: number): number {\n        gl.activeTexture(gl.TEXTURE0 + id);\n        gl.bindTexture(gl.TEXTURE_2D, texture);\n        return id;\n      },\n    };\n  }\n\n  function createDoubleFBO(\n    w: number,\n    h: number,\n    internalFormat: number,\n    format: number,\n    type: number,\n    param: number\n  ): DoubleFBO {\n    let fbo1 = createFBO(w, h, internalFormat, format, type, param);\n    let fbo2 = createFBO(w, h, internalFormat, format, type, param);\n    return {\n      width: w,\n      height: h,\n      texelSizeX: fbo1.texelSizeX,\n      texelSizeY: fbo1.texelSizeY,\n      get read() {\n        return fbo1;\n      },\n      set read(value: FBO) {\n        fbo1 = value;\n      },\n      get write() {\n        return fbo2;\n      },\n      set write(value: FBO) {\n        fbo2 = value;\n      },\n      swap(): void {\n        const temp = fbo1;\n        fbo1 = fbo2;\n        fbo2 = temp;\n      },\n    };\n  }\n\n  function resizeFBO(\n    target: FBO,\n    w: number,\n    h: number,\n    internalFormat: number,\n    format: number,\n    type: number,\n    param: number\n  ): FBO {\n    const newFBO = createFBO(w, h, internalFormat, format, type, param);\n    copyProgram.bind();\n    gl.uniform1i(copyProgram.uniforms['uTexture'], target.attach(0));\n    blit(newFBO);\n    return newFBO;\n  }\n\n  function resizeDoubleFBO(\n    target: DoubleFBO,\n    w: number,\n    h: number,\n    internalFormat: number,\n    format: number,\n    type: number,\n    param: number\n  ): DoubleFBO {\n    if (target.width === w && target.height === h) return target;\n    target.read = resizeFBO(target.read, w, h, internalFormat, format, type, param);\n    target.write = createFBO(w, h, internalFormat, format, type, param);\n    target.width = w;\n    target.height = h;\n    target.texelSizeX = 1 / w;\n    target.texelSizeY = 1 / h;\n    return target;\n  }\n\n  // Programs + state\n\n  const copyProgram = new ShaderProgram(baseVertexShader, copyShader);\n  const clearProgram = new ShaderProgram(baseVertexShader, clearShader);\n  const splatProgram = new ShaderProgram(baseVertexShader, splatShader);\n  const advectionProgram = new ShaderProgram(baseVertexShader, advectionShader);\n  const divergenceProgram = new ShaderProgram(baseVertexShader, divergenceShader);\n  const curlProgram = new ShaderProgram(baseVertexShader, curlShader);\n  const vorticityProgram = new ShaderProgram(baseVertexShader, vorticityShader);\n  const pressureProgram = new ShaderProgram(baseVertexShader, pressureShader);\n  const gradientSubtractProgram = new ShaderProgram(baseVertexShader, gradientSubtractShader);\n  const displayMaterial = new DisplayMaterial(baseVertexShader, displayShaderSource);\n\n  let dye!: DoubleFBO;\n  let velocity!: DoubleFBO;\n  let divergence!: FBO;\n  let curl!: FBO;\n  let pressure!: DoubleFBO;\n\n  function initFramebuffers(): void {\n    const simRes = getResolution(config.simResolution);\n    const dyeRes = getResolution(dyeResolution);\n    const texType = ext.halfFloatTexType;\n    const rgba = ext.formatRGBA;\n    const rg = ext.formatRG;\n    const r = ext.formatR;\n    const filtering = ext.supportLinearFiltering ? gl.LINEAR : gl.NEAREST;\n    gl.disable(gl.BLEND);\n\n    dye = dye\n      ? resizeDoubleFBO(dye, dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering)\n      : createDoubleFBO(dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering);\n\n    velocity = velocity\n      ? resizeDoubleFBO(velocity, simRes.width, simRes.height, rg.internalFormat, rg.format, texType, filtering)\n      : createDoubleFBO(simRes.width, simRes.height, rg.internalFormat, rg.format, texType, filtering);\n\n    divergence = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n    curl = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n    pressure = createDoubleFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n  }\n\n  displayMaterial.setKeywords(shading ? ['SHADING'] : []);\n  initFramebuffers();\n  let lastUpdateTime = Date.now();\n  let colorUpdateTimer = 0;\n\n  // Frame loop\n\n  function updateFrame(): void {\n    if (!active) return;\n    const dt = calcDeltaTime();\n    if (resizeCanvas()) initFramebuffers();\n    updateColors(dt);\n    applyInputs();\n    step(dt);\n    render();\n    rafId = requestAnimationFrame(updateFrame);\n  }\n\n  function calcDeltaTime(): number {\n    const now = Date.now();\n    const dt = Math.min((now - lastUpdateTime) / 1000, 0.016666);\n    lastUpdateTime = now;\n    return dt;\n  }\n\n  function resizeCanvas(): boolean {\n    const width = scaleByPixelRatio(canvas.clientWidth);\n    const height = scaleByPixelRatio(canvas.clientHeight);\n    if (canvas.width !== width || canvas.height !== height) {\n      canvas.width = width;\n      canvas.height = height;\n      return true;\n    }\n    return false;\n  }\n\n  function updateColors(dt: number): void {\n    colorUpdateTimer += dt * config.colorUpdateSpeed;\n    if (colorUpdateTimer >= 1) {\n      colorUpdateTimer = wrap(colorUpdateTimer, 0, 1);\n      pointer.color = generateColor();\n    }\n  }\n\n  function applyInputs(): void {\n    if (pointer.moved) {\n      pointer.moved = false;\n      splatPointer();\n    }\n  }\n\n  function step(dt: number): void {\n    gl.disable(gl.BLEND);\n    curlProgram.bind();\n    gl.uniform2f(curlProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n    gl.uniform1i(curlProgram.uniforms['uVelocity'], velocity.read.attach(0));\n    blit(curl);\n\n    vorticityProgram.bind();\n    gl.uniform2f(vorticityProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n    gl.uniform1i(vorticityProgram.uniforms['uVelocity'], velocity.read.attach(0));\n    gl.uniform1i(vorticityProgram.uniforms['uCurl'], curl.attach(1));\n    gl.uniform1f(vorticityProgram.uniforms['curl'], config.curl);\n    gl.uniform1f(vorticityProgram.uniforms['dt'], dt);\n    blit(velocity.write);\n    velocity.swap();\n\n    divergenceProgram.bind();\n    gl.uniform2f(divergenceProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n    gl.uniform1i(divergenceProgram.uniforms['uVelocity'], velocity.read.attach(0));\n    blit(divergence);\n\n    clearProgram.bind();\n    gl.uniform1i(clearProgram.uniforms['uTexture'], pressure.read.attach(0));\n    gl.uniform1f(clearProgram.uniforms['value'], config.pressure);\n    blit(pressure.write);\n    pressure.swap();\n\n    pressureProgram.bind();\n    gl.uniform2f(pressureProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n    gl.uniform1i(pressureProgram.uniforms['uDivergence'], divergence.attach(0));\n    for (let i = 0; i < config.pressureIterations; i++) {\n      gl.uniform1i(pressureProgram.uniforms['uPressure'], pressure.read.attach(1));\n      blit(pressure.write);\n      pressure.swap();\n    }\n\n    gradientSubtractProgram.bind();\n    gl.uniform2f(gradientSubtractProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n    gl.uniform1i(gradientSubtractProgram.uniforms['uPressure'], pressure.read.attach(0));\n    gl.uniform1i(gradientSubtractProgram.uniforms['uVelocity'], velocity.read.attach(1));\n    blit(velocity.write);\n    velocity.swap();\n\n    advectionProgram.bind();\n    gl.uniform2f(advectionProgram.uniforms['texelSize'], velocity.texelSizeX, velocity.texelSizeY);\n    if (!ext.supportLinearFiltering) {\n      gl.uniform2f(advectionProgram.uniforms['dyeTexelSize'], velocity.texelSizeX, velocity.texelSizeY);\n    }\n    const velocityId = velocity.read.attach(0);\n    gl.uniform1i(advectionProgram.uniforms['uVelocity'], velocityId);\n    gl.uniform1i(advectionProgram.uniforms['uSource'], velocityId);\n    gl.uniform1f(advectionProgram.uniforms['dt'], dt);\n    gl.uniform1f(advectionProgram.uniforms['dissipation'], config.velocityDissipation);\n    blit(velocity.write);\n    velocity.swap();\n\n    if (!ext.supportLinearFiltering) {\n      gl.uniform2f(advectionProgram.uniforms['dyeTexelSize'], dye.texelSizeX, dye.texelSizeY);\n    }\n    gl.uniform1i(advectionProgram.uniforms['uVelocity'], velocity.read.attach(0));\n    gl.uniform1i(advectionProgram.uniforms['uSource'], dye.read.attach(1));\n    gl.uniform1f(advectionProgram.uniforms['dissipation'], config.densityDissipation);\n    blit(dye.write);\n    dye.swap();\n  }\n\n  function render(): void {\n    gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n    gl.enable(gl.BLEND);\n    displayMaterial.bind();\n    if (shading) {\n      gl.uniform2f(displayMaterial.uniforms['texelSize'], 1 / gl.drawingBufferWidth, 1 / gl.drawingBufferHeight);\n    }\n    gl.uniform1i(displayMaterial.uniforms['uTexture'], dye.read.attach(0));\n    blit(null);\n  }\n\n  // Splats\n\n  function splatPointer(): void {\n    const dx = pointer.deltaX * config.splatForce;\n    const dy = pointer.deltaY * config.splatForce;\n    splat(pointer.texcoordX, pointer.texcoordY, dx, dy, pointer.color);\n  }\n\n  function clickSplat(): void {\n    const color = generateColor();\n    color.r *= 10;\n    color.g *= 10;\n    color.b *= 10;\n    const dx = 10 * (Math.random() - 0.5);\n    const dy = 30 * (Math.random() - 0.5);\n    splat(pointer.texcoordX, pointer.texcoordY, dx, dy, color);\n  }\n\n  function splat(x: number, y: number, dx: number, dy: number, color: RGB): void {\n    splatProgram.bind();\n    gl.uniform1i(splatProgram.uniforms['uTarget'], velocity.read.attach(0));\n    gl.uniform1f(splatProgram.uniforms['aspectRatio'], canvas.width / canvas.height);\n    gl.uniform2f(splatProgram.uniforms['point'], x, y);\n    gl.uniform3f(splatProgram.uniforms['color'], dx, dy, 0);\n    gl.uniform1f(splatProgram.uniforms['radius'], correctRadius(config.splatRadius / 100));\n    blit(velocity.write);\n    velocity.swap();\n\n    gl.uniform1i(splatProgram.uniforms['uTarget'], dye.read.attach(0));\n    gl.uniform3f(splatProgram.uniforms['color'], color.r, color.g, color.b);\n    blit(dye.write);\n    dye.swap();\n  }\n\n  function correctRadius(radius: number): number {\n    const aspectRatio = canvas.width / canvas.height;\n    return aspectRatio > 1 ? radius * aspectRatio : radius;\n  }\n\n  // Pointer\n\n  function pointerDown(posX: number, posY: number): void {\n    pointer.moved = false;\n    pointer.texcoordX = posX / canvas.width;\n    pointer.texcoordY = 1 - posY / canvas.height;\n    pointer.prevTexcoordX = pointer.texcoordX;\n    pointer.prevTexcoordY = pointer.texcoordY;\n    pointer.deltaX = 0;\n    pointer.deltaY = 0;\n    pointer.color = generateColor();\n  }\n\n  function pointerMove(posX: number, posY: number, color: RGB): void {\n    pointer.prevTexcoordX = pointer.texcoordX;\n    pointer.prevTexcoordY = pointer.texcoordY;\n    pointer.texcoordX = posX / canvas.width;\n    pointer.texcoordY = 1 - posY / canvas.height;\n    pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX);\n    pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY);\n    pointer.moved = Math.abs(pointer.deltaX) > 0 || Math.abs(pointer.deltaY) > 0;\n    pointer.color = color;\n  }\n\n  function correctDeltaX(delta: number): number {\n    const aspectRatio = canvas.width / canvas.height;\n    return aspectRatio < 1 ? delta * aspectRatio : delta;\n  }\n\n  function correctDeltaY(delta: number): number {\n    const aspectRatio = canvas.width / canvas.height;\n    return aspectRatio > 1 ? delta / aspectRatio : delta;\n  }\n\n  // Colours\n\n  function hexToRGB(hex: string): RGB {\n    let val = hex.replace('#', '');\n    if (val.length === 3) val = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\n    return {\n      r: (Number.parseInt(val.slice(0, 2), 16) / 255) * 0.15,\n      g: (Number.parseInt(val.slice(2, 4), 16) / 255) * 0.15,\n      b: (Number.parseInt(val.slice(4, 6), 16) / 255) * 0.15,\n    };\n  }\n\n  function generateColor(): RGB {\n    if (!config.rainbow) return hexToRGB(config.color);\n    const c = hsvToRgb(Math.random(), 1, 1);\n    c.r *= 0.15;\n    c.g *= 0.15;\n    c.b *= 0.15;\n    return c;\n  }\n\n  function hsvToRgb(h: number, s: number, v: number): RGB {\n    const i = Math.floor(h * 6);\n    const f = h * 6 - i;\n    const p = v * (1 - s);\n    const q = v * (1 - f * s);\n    const t = v * (1 - (1 - f) * s);\n    switch (i % 6) {\n      case 0:\n        return { r: v, g: t, b: p };\n      case 1:\n        return { r: q, g: v, b: p };\n      case 2:\n        return { r: p, g: v, b: t };\n      case 3:\n        return { r: p, g: q, b: v };\n      case 4:\n        return { r: t, g: p, b: v };\n      default:\n        return { r: v, g: p, b: q };\n    }\n  }\n\n  function wrap(value: number, min: number, max: number): number {\n    const range = max - min;\n    if (range === 0) return min;\n    return ((value - min) % range) + min;\n  }\n\n  function getResolution(resolution: number): { width: number; height: number } {\n    let aspectRatio = gl.drawingBufferWidth / gl.drawingBufferHeight;\n    if (aspectRatio < 1) aspectRatio = 1 / aspectRatio;\n    const min = Math.round(resolution);\n    const max = Math.round(resolution * aspectRatio);\n    return gl.drawingBufferWidth > gl.drawingBufferHeight ? { width: max, height: min } : { width: min, height: max };\n  }\n\n  function scaleByPixelRatio(input: number): number {\n    return Math.floor(input * (window.devicePixelRatio || 1));\n  }\n\n  function hashCode(s: string): number {\n    let hash = 0;\n    for (let i = 0; i < s.length; i++) {\n      hash = (hash << 5) - hash + s.charCodeAt(i);\n      hash |= 0;\n    }\n    return hash;\n  }\n\n  // Events + boot\n\n  let firstMoveHandled = false;\n\n  // Coordinates are taken relative to the canvas box: identical to the\n  // raw client position for the fullscreen overlay, and it makes a\n  // contained canvas track the pointer correctly too.\n  const toLocal = (clientX: number, clientY: number): { x: number; y: number } => {\n    const rect = canvas.getBoundingClientRect();\n    return { x: scaleByPixelRatio(clientX - rect.left), y: scaleByPixelRatio(clientY - rect.top) };\n  };\n\n  const onMouseDown = (e: MouseEvent): void => {\n    const pos = toLocal(e.clientX, e.clientY);\n    pointerDown(pos.x, pos.y);\n    clickSplat();\n  };\n\n  const onMouseMove = (e: MouseEvent): void => {\n    const pos = toLocal(e.clientX, e.clientY);\n    const color = firstMoveHandled ? pointer.color : generateColor();\n    firstMoveHandled = true;\n    pointerMove(pos.x, pos.y, color);\n  };\n\n  const onTouchStart = (e: TouchEvent): void => {\n    const t = e.targetTouches[0];\n    if (!t) return;\n    const pos = toLocal(t.clientX, t.clientY);\n    pointerDown(pos.x, pos.y);\n  };\n\n  const onTouchMove = (e: TouchEvent): void => {\n    const t = e.targetTouches[0];\n    if (!t) return;\n    const pos = toLocal(t.clientX, t.clientY);\n    pointerMove(pos.x, pos.y, pointer.color);\n  };\n\n  window.addEventListener('mousedown', onMouseDown);\n  window.addEventListener('mousemove', onMouseMove);\n  window.addEventListener('touchstart', onTouchStart, { passive: true });\n  window.addEventListener('touchmove', onTouchMove, { passive: true });\n\n  updateFrame();\n\n  return () => {\n    active = false;\n    cancelAnimationFrame(rafId);\n    window.removeEventListener('mousedown', onMouseDown);\n    window.removeEventListener('mousemove', onMouseMove);\n    window.removeEventListener('touchstart', onTouchStart);\n    window.removeEventListener('touchmove', onTouchMove);\n    // The context is NOT lost here on purpose — input changes reboot the\n    // sim on the same canvas, and a lost context can't be re-acquired.\n  };\n}\n\n// WebGL context bootstrap\n\nfunction getWebGLContext(canvas: HTMLCanvasElement): { gl: GL; ext: GlExt } | null {\n  const params: WebGLContextAttributes = {\n    alpha: true,\n    depth: false,\n    stencil: false,\n    antialias: false,\n    preserveDrawingBuffer: false,\n  };\n\n  const gl2 = canvas.getContext('webgl2', params);\n  const gl = gl2 ?? canvas.getContext('webgl', params);\n  if (!gl) return null;\n  const isWebGL2 = !!gl2;\n\n  let halfFloat: OES_texture_half_float | null = null;\n  let supportLinearFiltering: boolean;\n  if (isWebGL2) {\n    gl.getExtension('EXT_color_buffer_float');\n    supportLinearFiltering = !!gl.getExtension('OES_texture_float_linear');\n  } else {\n    halfFloat = gl.getExtension('OES_texture_half_float');\n    supportLinearFiltering = !!gl.getExtension('OES_texture_half_float_linear');\n  }\n  gl.clearColor(0, 0, 0, 1);\n\n  const halfFloatTexType = isWebGL2\n    ? (gl as WebGL2RenderingContext).HALF_FLOAT\n    : (halfFloat?.HALF_FLOAT_OES ?? gl.UNSIGNED_BYTE);\n\n  let formatRGBA: TexFormat | null;\n  let formatRG: TexFormat | null;\n  let formatR: TexFormat | null;\n  if (isWebGL2) {\n    const g2 = gl as WebGL2RenderingContext;\n    formatRGBA = getSupportedFormat(g2, g2.RGBA16F, g2.RGBA, halfFloatTexType);\n    formatRG = getSupportedFormat(g2, g2.RG16F, g2.RG, halfFloatTexType);\n    formatR = getSupportedFormat(g2, g2.R16F, g2.RED, halfFloatTexType);\n  } else {\n    formatRGBA = getSupportedFormat(gl, gl.RGBA, gl.RGBA, halfFloatTexType);\n    formatRG = formatRGBA;\n    formatR = formatRGBA;\n  }\n  if (!formatRGBA || !formatRG || !formatR) return null;\n\n  return { gl, ext: { formatRGBA, formatRG, formatR, halfFloatTexType, supportLinearFiltering } };\n}\n\nfunction getSupportedFormat(gl: GL, internalFormat: number, format: number, type: number): TexFormat | null {\n  if (!supportRenderTextureFormat(gl, internalFormat, format, type)) {\n    const g2 = gl as WebGL2RenderingContext;\n    switch (internalFormat) {\n      case g2.R16F:\n        return getSupportedFormat(gl, g2.RG16F, g2.RG, type);\n      case g2.RG16F:\n        return getSupportedFormat(gl, g2.RGBA16F, g2.RGBA, type);\n      default:\n        return null;\n    }\n  }\n  return { internalFormat, format };\n}\n\nfunction supportRenderTextureFormat(gl: GL, internalFormat: number, format: number, type: number): boolean {\n  const texture = gl.createTexture();\n  gl.bindTexture(gl.TEXTURE_2D, texture);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n  gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, 4, 4, 0, format, type, null);\n  const fbo = gl.createFramebuffer();\n  gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n  gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n  return gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;\n}\n\nexport { createFluidSimulation };\nexport type { WrFluidConfig };\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * Angular adaptation of the SplashCursor effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/animations/splash-cursor\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { ElementRef } from '@angular/core';\nimport { Component, NgZone, PLATFORM_ID, ViewEncapsulation, effect, inject, input, viewChild } from '@angular/core';\n\nimport { WrPlatform } from 'ngwr/platform';\nimport { numAttr } from 'ngwr/utils';\n\nimport { createFluidSimulation } from './fluid';\n\n/**\n * Splash cursor — a WebGL fluid simulation that splashes colourful dye\n * wherever the pointer moves or clicks. Renders as a fixed, full-viewport,\n * click-through overlay; mount it once on a page (it follows the pointer\n * everywhere) and it tears down with the component.\n *\n * Renders nothing under `prefers-reduced-motion` or when WebGL is\n * unavailable.\n *\n * @example\n * ```html\n * <wr-splash-cursor />\n * <wr-splash-cursor [rainbow]=\"false\" color=\"#5227ff\" />\n * ```\n *\n * @see https://ngwr.dev/animations/splash-cursor\n */\n@Component({\n  selector: 'wr-splash-cursor',\n  template: '<canvas #canvas class=\"wr-splash-cursor__canvas\"></canvas>',\n  styleUrl: './splash-cursor.scss',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'wr-splash-cursor',\n    '[class.wr-splash-cursor--contained]': '!fullscreen()',\n  },\n})\nexport class WrSplashCursor {\n  /**\n   * `true` overlays the whole viewport (reactbits behaviour); `false`\n   * fills the nearest positioned ancestor instead — handy for demo boxes,\n   * and the dye collides with the box walls. @default true\n   */\n  readonly fullscreen = input(true, { transform: coerceBooleanProperty });\n\n  /** Velocity / pressure grid resolution. @default 128 */\n  readonly simResolution = input(128, { transform: numAttr(128) });\n\n  /** Dye texture resolution — the visible detail. @default 1440 */\n  readonly dyeResolution = input(1440, { transform: numAttr(1440) });\n\n  /** How fast the dye fades, higher = shorter trails. @default 3.5 */\n  readonly densityDissipation = input(3.5, { transform: numAttr(3.5) });\n\n  /** How fast motion settles. @default 2 */\n  readonly velocityDissipation = input(2, { transform: numAttr(2) });\n\n  /** Pressure retained between frames, 0..1. @default 0.1 */\n  readonly pressure = input(0.1, { transform: numAttr(0.1) });\n\n  /** Jacobi iterations for the pressure solve. @default 20 */\n  readonly pressureIterations = input(20, { transform: numAttr(20) });\n\n  /** Vorticity confinement — swirliness. @default 3 */\n  readonly curl = input(3, { transform: numAttr(3) });\n\n  /** Splat size. @default 0.2 */\n  readonly splatRadius = input(0.2, { transform: numAttr(0.2) });\n\n  /** Velocity a pointer move injects. @default 6000 */\n  readonly splatForce = input(6000, { transform: numAttr(6000) });\n\n  /** Pseudo-3D shading on the dye. @default true */\n  readonly shading = input(true, { transform: coerceBooleanProperty });\n\n  /** How fast the splat colour cycles. @default 10 */\n  readonly colorUpdateSpeed = input(10, { transform: numAttr(10) });\n\n  /** Cycle splat colours through the rainbow. @default true */\n  readonly rainbow = input(true, { transform: coerceBooleanProperty });\n\n  /** Fixed splat colour when `rainbow` is off. @default '#ff0000' */\n  readonly color = input('#ff0000');\n\n  private readonly canvasRef = viewChild<ElementRef<HTMLCanvasElement>>('canvas');\n\n  private readonly zone = inject(NgZone);\n  private readonly platform = inject(WrPlatform);\n  private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n  constructor() {\n    if (!this.isBrowser) return;\n\n    // (Re)boot whenever the canvas appears, any input changes, or the OS\n    // reduced-motion preference flips. `onCleanup` tears the old sim down.\n    effect(onCleanup => {\n      const canvas = this.canvasRef()?.nativeElement;\n      const config = {\n        simResolution: this.simResolution(),\n        dyeResolution: this.dyeResolution(),\n        densityDissipation: this.densityDissipation(),\n        velocityDissipation: this.velocityDissipation(),\n        pressure: this.pressure(),\n        pressureIterations: this.pressureIterations(),\n        curl: this.curl(),\n        splatRadius: this.splatRadius(),\n        splatForce: this.splatForce(),\n        shading: this.shading(),\n        colorUpdateSpeed: this.colorUpdateSpeed(),\n        rainbow: this.rainbow(),\n        color: this.color(),\n      };\n      if (!canvas || this.platform.prefersReducedMotion()) return;\n      const teardown = this.zone.runOutsideAngular(() => createFluidSimulation(canvas, config));\n      if (teardown) onCleanup(teardown);\n    });\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}