{"version":3,"sources":["../src/visualizers/webgl/Plasma.tsx","../src/visualizers/webgl/PlasmaVisualizer.tsx"],"names":["THREE","memo","forwardRef","useRef","useCallback","useImperativeHandle","useEffect","jsx","defaultConfig","usePipecatClientTransportState","usePipecatClientMediaTrack"],"mappings":"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","file":"webgl.cjs","sourcesContent":["import React, {\n  forwardRef,\n  memo,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n} from \"react\";\nimport * as THREE from \"three\";\n\n// Configuration interfaces\ninterface PlasmaConfig {\n  // Core plasma properties\n  intensity?: number;\n  radius?: number;\n  effectScale?: number;\n  effectCenter?: { x: number; y: number };\n  blendMode?: 0 | 1 | 2 | 3 | 4 | 5;\n  plasmaSpeed?: number;\n  rayLength?: number;\n\n  // Ring properties\n  ringCount?: number;\n  ringVisibility?: number;\n  ringDistance?: number;\n  ringSpread?: number;\n  ringBounce?: number;\n  ringThickness?: number;\n  ringThicknessAudio?: number;\n  ringVariance?: number;\n  ringSharpness?: number;\n  ringAmplitude?: number;\n  ringSpeed?: number;\n  ringSegments?: number;\n  ringColorInheritance?: number;\n\n  // Color properties\n  useCustomColors?: boolean;\n  color1?: string;\n  color2?: string;\n  color3?: string;\n  backgroundColor?: string;\n  colorCycleSpeed?: number;\n\n  // Glow properties\n  glowFalloff?: number;\n  glowThreshold?: number;\n\n  // Animation properties\n  lerpSpeed?: number;\n  audioLerpSpeed?: number;\n\n  // Audio properties\n  audioEnabled?: boolean;\n  audioSensitivity?: number;\n  audioSmoothing?: number;\n  frequencyBands?: number;\n  bassResponse?: number;\n  midResponse?: number;\n  trebleResponse?: number;\n  plasmaVolumeReactivity?: number;\n  volumeThreshold?: number;\n}\n\nexport interface PlasmaProps {\n  width?: number;\n  height?: number;\n  className?: string;\n  style?: React.CSSProperties;\n  initialConfig?: PlasmaConfig;\n  onReady?: () => void;\n  pixelRatio?: number;\n  powerPreference?: \"high-performance\" | \"low-power\" | \"default\";\n  alpha?: boolean;\n  antialias?: boolean;\n  preserveDrawingBuffer?: boolean;\n  fallbackContent?: React.ReactNode;\n  audioTrack?: MediaStreamTrack | null;\n}\n\nexport interface PlasmaRef {\n  updateConfig: (config: Partial<PlasmaConfig>) => void;\n  getConfig: () => PlasmaConfig;\n  resetToDefaults: () => void;\n}\n\nconst vertexShader = `\n    varying vec2 vUv;\n    void main() {\n        vUv = uv;\n        gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n    }\n  `;\n\nconst fragmentShader = `\n    uniform vec2 iResolution;\n    uniform float iTime;\n    uniform float intensity;\n    uniform float radius;\n    uniform int blendMode;\n    uniform float effectScale;\n    uniform vec2 effectCenter;\n    uniform vec3 color1;\n    uniform vec3 color2;\n    uniform vec3 color3;\n    uniform bool useCustomColors;\n    uniform float colorCycleSpeed;\n    uniform float ringCount;\n    uniform float ringVisibility;\n    uniform float ringDistance;\n    uniform float ringSpread;\n    uniform float ringBounce;\n    uniform float ringThickness;\n    uniform float ringVariance;\n    uniform float ringSharpness;\n    uniform float ringAmplitude;\n    uniform float ringSpeed;\n    uniform float ringSegments;\n    uniform float ringColorInheritance;\n    uniform vec3 backgroundColor;\n    uniform float plasmaSpeed;\n    uniform float rayLength;\n    uniform float glowFalloff;\n    uniform float glowThreshold;\n    varying vec2 vUv;\n  \n    #define TAU 6.2831852\n    #define MOD3 vec3(.1031,.11369,.13787)\n  \n    vec3 blendColors(vec3 bg, vec3 fg, float amt, int mode) {\n        if (mode == 0) return mix(bg, fg, amt);\n        if (mode == 1) return clamp(bg + fg * amt, 0.0, 1.0);\n        if (mode == 2) return 1.0 - (1.0 - bg) * (1.0 - fg * amt);\n        if (mode == 3) {\n            vec3 base = bg;\n            vec3 blend = fg * amt;\n            return vec3(\n                (base.r < 0.5) ? (2.0 * base.r * blend.r) : (1.0 - 2.0 * (1.0 - base.r) * (1.0 - blend.r)),\n                (base.g < 0.5) ? (2.0 * base.g * blend.g) : (1.0 - 2.0 * (1.0 - base.g) * (1.0 - blend.g)),\n                (base.b < 0.5) ? (2.0 * base.b * blend.b) : (1.0 - 2.0 * (1.0 - base.b) * (1.0 - blend.b))\n            );\n        }\n        if (mode == 4) {\n            vec3 base = bg;\n            vec3 blend = fg * amt;\n            return vec3(\n                (blend.r < 0.5) ? (base.r - (1.0 - 2.0 * blend.r) * base.r * (1.0 - base.r)) : (base.r + (2.0 * blend.r - 1.0) * (sqrt(base.r) - base.r)),\n                (blend.g < 0.5) ? (base.g - (1.0 - 2.0 * blend.g) * base.g * (1.0 - base.g)) : (base.g + (2.0 * blend.g - 1.0) * (sqrt(base.g) - base.g)),\n                (blend.b < 0.5) ? (base.b - (1.0 - 2.0 * blend.b) * base.b * (1.0 - base.b)) : (base.b + (2.0 * blend.b - 1.0) * (sqrt(base.b) - base.b))\n            );\n        }\n        if (mode == 5) return bg * (1.0 - amt) + fg * amt;\n        return mix(bg, fg, amt);\n    }\n  \n    vec3 hash33(vec3 p3) {\n        p3 = fract(p3 * MOD3);\n        p3 += dot(p3, p3.yxz+19.19);\n        return -1.0 + 2.0 * fract(vec3((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y, (p3.y+p3.z)*p3.x));\n    }\n  \n    float simplex_noise(vec3 p) {\n        const float K1 = 0.333333333;\n        const float K2 = 0.166666667;\n        \n        vec3 i = floor(p + (p.x + p.y + p.z) * K1);\n        vec3 d0 = p - (i - (i.x + i.y + i.z) * K2);\n            \n        vec3 e = step(vec3(0.0), d0 - d0.yzx);\n        vec3 i1 = e * (1.0 - e.zxy);\n        vec3 i2 = 1.0 - e.zxy * (1.0 - e);\n        \n        vec3 d1 = d0 - (i1 - K2);\n        vec3 d2 = d0 - (i2 - 2.0 * K2);\n        vec3 d3 = d0 - (1.0 - 3.0 * K2);\n        \n        vec4 h = max(0.6 - vec4(dot(d0, d0), dot(d1, d1), dot(d2, d2), dot(d3, d3)), 0.0);\n        vec4 n = h * h * h * h * vec4(dot(d0, hash33(i)), dot(d1, hash33(i + i1)), dot(d2, hash33(i + i2)), dot(d3, hash33(i + 1.0)));\n        \n        return dot(vec4(31.316), n);\n    }\n  \n    vec3 getColor(vec2 uv, float t, float intensity) {\n        float radius = length(uv);\n        float angular1 = dot(uv, vec2(1.0, 0.0)) / (radius + 0.001);\n        float angular2 = dot(uv, vec2(0.0, 1.0)) / (radius + 0.001);\n        \n        float phase1 = t * colorCycleSpeed + radius * 3.0 + intensity * 2.0;\n        float phase2 = t * colorCycleSpeed * 0.7 + angular1 * 2.0 + intensity * 1.5;\n        float phase3 = t * colorCycleSpeed * 1.3 + (radius + angular2) * 1.5;\n        \n        if (useCustomColors) {\n            float band1 = sin(phase1) * 0.5 + 0.5;\n            float band2 = sin(phase2 + 2.094) * 0.5 + 0.5; \n            float band3 = sin(phase3 + 4.189) * 0.5 + 0.5;\n            \n            band1 = pow(band1, 1.0 - intensity * 0.5);\n            band2 = pow(band2, 1.0 - intensity * 0.3);\n            band3 = pow(band3, 1.0 - intensity * 0.4);\n            \n            float sum = band1 + band2 + band3;\n            return (color1 * band1 + color2 * band2 + color3 * band3) / sum;\n        } else {\n            vec3 rainbow = 0.5 + 0.5 * cos(phase1 + uv.xyx * 3.0 + vec3(0.0, 2.0, 4.0));\n            vec3 rainbow2 = 0.5 + 0.5 * cos(phase2 + uv.yxy * 2.0 + vec3(1.0, 3.0, 5.0));\n            return mix(rainbow, rainbow2, intensity);\n        }\n    }\n  \n    void main() {\n        vec2 uv = (vUv * iResolution - iResolution.xy * 0.5) / iResolution.y;\n        uv = (uv - effectCenter) / effectScale;\n            \n        float a = sin(atan(uv.y, uv.x));\n        float am = abs(a - 0.5) * 0.25;\n        float l = length(uv);                         \n        \n        float m1 = clamp(0.1 / smoothstep(0.0, radius, l), 0.0, 1.0);\n        float m2 = clamp(0.1 / smoothstep(0.42, 0.0, l), 0.0, 1.0);\n        \n        float glowAttenuation = exp(-l * glowFalloff);\n        m1 *= glowAttenuation;\n        \n        float s1 = simplex_noise(vec3(uv * 2.0, 1.0 + iTime * 0.525 * plasmaSpeed)) * max(1.0 - l * rayLength, 0.0) + 0.9;\n        float s2 = simplex_noise(vec3(uv, 15.0 + iTime * 0.525 * plasmaSpeed)) * max(l, 0.025) + 1.25;\n        float s3 = simplex_noise(vec3(vec2(am, am * 100.0 + iTime * 3.0 * plasmaSpeed) * 0.15, 30.0 + iTime * 0.525 * plasmaSpeed)) * max(l, 0.25) + 1.5;\n        s3 *= smoothstep(0.0, 0.3345, l);    \n        \n        float sh = smoothstep(0.15, 0.35, l);\n        float m = m1 * m1 * m2 * s1 * s2 * s3 * (1.0 - l) * sh * intensity;\n        \n        m = max(0.0, m - glowThreshold) / (1.0 - glowThreshold);\n        \n        float normalizedIntensity = clamp(m / intensity, 0.0, 1.0);\n        vec3 colorVal = getColor(uv, iTime, normalizedIntensity);\n        vec3 col = blendColors(backgroundColor, colorVal, m, blendMode);\n        \n        float angle = atan(uv.y, uv.x);\n        float wave = iTime * ringSpeed;\n        float pixelSize = 2.0 / iResolution.y;\n        float thicknessFactor = ringThickness * ringThickness * 0.0001;\n        float baseThickness = pixelSize * (1.0 + thicknessFactor * 99.0);\n        float ringStart = 0.3;\n        \n        vec3 ringAccum = vec3(0.0);\n        int numRings = int(ringCount);\n        \n        for (int i = 0; i < 5; i++) {\n            if (i >= numRings) break;\n            \n            float ringIndex = float(i);\n            float phaseOffset1 = ringIndex * 1.7 + ringVariance * sin(ringIndex * 3.14);\n            float phaseOffset2 = ringIndex * 2.3 + ringVariance * cos(ringIndex * 2.71);\n            float speedVariance = 1.0 + ringVariance * sin(ringIndex * 4.5) * 0.5;\n            \n            float normalizedAngle = angle * 0.159154943 + 0.5;\n            float segmentsFloor = floor(ringSegments + 0.5);\n            \n            float wavePhase1 = sin(normalizedAngle * segmentsFloor * TAU + wave * speedVariance + phaseOffset1);\n            float wavePhase2 = sin(normalizedAngle * floor(ringSegments * 1.5 + 0.5) * TAU - wave * speedVariance * 0.7 + phaseOffset2);\n            float wavePhase3 = sin(normalizedAngle * floor(ringSegments * 0.5 + 0.5) * TAU + wave * speedVariance * 1.3 + ringIndex);\n            \n            float fractSegments = fract(ringSegments);\n            if (fractSegments > 0.0) {\n                float nextWavePhase1 = sin(normalizedAngle * floor(ringSegments + 1.5) * TAU + wave * speedVariance + phaseOffset1);\n                wavePhase1 = mix(wavePhase1, nextWavePhase1, smoothstep(0.0, 1.0, fractSegments));\n            }\n            \n            float combinedWave = mix(wavePhase1, wavePhase1 * 0.4 + wavePhase2 * 0.4 + wavePhase3 * 0.2, ringVariance);\n            \n            float baseRadius = ringStart + ringDistance + ringSpread * ringIndex * 0.2;\n            if (ringBounce > 0.0) {\n                baseRadius *= 1.0 + sin(iTime * 2.0 + ringIndex * 0.5) * ringBounce;\n            }\n            \n            float ringRadius = baseRadius + ringAmplitude * combinedWave;\n            float thicknessModulation = 1.0 + ringVariance * combinedWave * 0.3;\n            float currentThickness = baseThickness * thicknessModulation;\n            \n            float ringDist = abs(l - ringRadius);\n            float softEdge = smoothstep(currentThickness, currentThickness * 0.2, ringDist);\n            float hardEdge = 1.0 - step(currentThickness * 0.5, ringDist);\n            float ringMask = mix(softEdge, hardEdge, ringSharpness);\n            \n            float falloff = exp(-ringIndex * 0.3);\n            float ringStrength = ringMask * ringVisibility * falloff;\n            \n            vec3 ringColor = vec3(1.0);\n            if (useCustomColors) {\n                float colorPhase = iTime * 0.3 + ringIndex * 0.7;\n                vec3 originalRingColor = getColor(uv * 0.5, colorPhase, ringStrength);\n                \n                if (ringColorInheritance > 0.0) {\n                    vec2 samplePos = normalize(uv) * ringRadius;\n                    vec3 plasmaColor = getColor(samplePos, iTime, ringStrength);\n                    ringColor = mix(originalRingColor, plasmaColor, ringColorInheritance);\n                } else {\n                    ringColor = originalRingColor;\n                }\n            }\n            \n            if (ringVariance > 0.0) {\n                float noiseScale = 10.0 + ringIndex * 2.0;\n                float ringNoise = simplex_noise(vec3(uv * noiseScale, iTime * 0.5 + ringIndex)) * 0.5 + 0.5;\n                ringStrength *= mix(1.0, ringNoise, ringVariance * 0.5);\n            }\n            \n            ringAccum += ringColor * ringStrength * 0.6;\n        }\n        \n        col = clamp(col + ringAccum, 0.0, 1.5);\n        gl_FragColor = vec4(col, 1.0);\n    }\n  `;\n\nconst defaultConfig: Required<PlasmaConfig> = {\n  // Core plasma properties\n  intensity: 1.5,\n  radius: 1.85,\n  effectScale: 0.5,\n  effectCenter: { x: 0, y: 0 },\n  blendMode: 0,\n  plasmaSpeed: 1.0,\n  rayLength: 1.0,\n\n  // Ring properties\n  ringCount: 3,\n  ringVisibility: 0.6,\n  ringDistance: 0.0,\n  ringSpread: 0.07,\n  ringBounce: 0.0,\n  ringThickness: 12.0,\n  ringThicknessAudio: 2.0,\n  ringVariance: 0.64,\n  ringSharpness: 1,\n  ringAmplitude: 0.02,\n  ringSpeed: 1.2,\n  ringSegments: 5.4,\n  ringColorInheritance: 1,\n\n  // Color properties\n  useCustomColors: true,\n  color1: \"#22d3ee\",\n  color2: \"#34d399\",\n  color3: \"#818cf8\",\n  backgroundColor: \"transparent\",\n  colorCycleSpeed: 0.6,\n\n  // Glow properties\n  glowFalloff: 1.0,\n  glowThreshold: 0.0,\n\n  // Animation properties\n  lerpSpeed: 0.05,\n  audioLerpSpeed: 0.069,\n\n  // Audio properties\n  audioEnabled: true,\n  audioSensitivity: 1.0,\n  audioSmoothing: 0.8,\n  frequencyBands: 32,\n  bassResponse: 1.2,\n  midResponse: 1.0,\n  trebleResponse: 0.8,\n  plasmaVolumeReactivity: 2.0,\n  volumeThreshold: 0.15,\n};\n\nconst interpolatedProps = [\n  // Core plasma properties\n  \"effectScale\",\n  \"intensity\",\n  \"radius\",\n  \"rayLength\",\n  \"glowFalloff\",\n  \"glowThreshold\",\n\n  // Ring properties\n  \"ringCount\",\n  \"ringVisibility\",\n  \"ringDistance\",\n  \"ringSpread\",\n  \"ringBounce\",\n  \"ringThickness\",\n  \"ringVariance\",\n  \"ringSharpness\",\n  \"ringAmplitude\",\n  \"ringSpeed\",\n  \"ringSegments\",\n  \"ringColorInheritance\",\n];\n\nconst immediateProps = [\"colorCycleSpeed\", \"plasmaSpeed\", \"blendMode\"];\n\nconst hexToRgb = (hex: string): THREE.Vector3 => {\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  return result\n    ? new THREE.Vector3(\n        parseInt(result[1], 16) / 255,\n        parseInt(result[2], 16) / 255,\n        parseInt(result[3], 16) / 255,\n      )\n    : new THREE.Vector3(1, 1, 1);\n};\n\nconst Plasma = memo(\n  forwardRef<PlasmaRef, PlasmaProps>(\n    (\n      {\n        width,\n        height,\n        className,\n        style,\n        initialConfig = {},\n        onReady,\n        pixelRatio,\n        powerPreference = \"high-performance\",\n        alpha = false,\n        antialias = true,\n        preserveDrawingBuffer = false,\n        fallbackContent,\n        audioTrack,\n      },\n      ref,\n    ) => {\n      const canvasRef = useRef<HTMLCanvasElement>(null);\n      const sceneRef = useRef<THREE.Scene | null>(null);\n      const rendererRef = useRef<THREE.WebGLRenderer | null>(null);\n      const materialRef = useRef<THREE.ShaderMaterial | null>(null);\n      const frameRef = useRef<number | null>(null);\n      const startTimeRef = useRef<number>(Date.now());\n      const isVisibleRef = useRef<boolean>(true);\n      const hasWebGLRef = useRef<boolean>(true);\n\n      const configRef = useRef<Required<PlasmaConfig>>({\n        ...defaultConfig,\n        ...initialConfig,\n      });\n      const targetRef = useRef<\n        Record<\n          string,\n          number | boolean | { x: number; y: number } | THREE.Vector3\n        >\n      >({});\n      const currentRef = useRef<\n        Record<\n          string,\n          number | boolean | { x: number; y: number } | THREE.Vector3\n        >\n      >({});\n\n      // Audio analysis refs\n      const audioContextRef = useRef<AudioContext | null>(null);\n      const analyserRef = useRef<AnalyserNode | null>(null);\n      const sourceRef = useRef<MediaStreamAudioSourceNode | null>(null);\n      const audioDataRef = useRef<Float32Array | null>(null);\n      const smoothedAudioRef = useRef<Float32Array | null>(null);\n\n      // Helper functions\n      const lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\n      const isVector = (value: unknown): value is { x: number; y: number } => {\n        return (\n          typeof value === \"object\" &&\n          value !== null &&\n          \"x\" in value &&\n          \"y\" in value\n        );\n      };\n\n      const isVector3 = (value: unknown): value is THREE.Vector3 => {\n        return value instanceof THREE.Vector3;\n      };\n\n      const setShaderValue = useCallback(\n        (\n          property: string,\n          value: number | boolean | { x: number; y: number } | THREE.Vector3,\n          bypassSmoothing = false,\n        ) => {\n          if (property in targetRef.current) {\n            targetRef.current[property] = value;\n            if (\n              (immediateProps.includes(property) || bypassSmoothing) &&\n              materialRef.current?.uniforms[property]\n            ) {\n              materialRef.current.uniforms[property].value = value;\n              // If bypassing smoothing, also update current value with audio lerp speed\n              if (bypassSmoothing && property in currentRef.current) {\n                const current = currentRef.current[property];\n                if (typeof current === \"number\" && typeof value === \"number\") {\n                  currentRef.current[property] = lerp(\n                    current,\n                    value,\n                    configRef.current.audioLerpSpeed,\n                  );\n                }\n              }\n            }\n          }\n        },\n        [],\n      );\n\n      const processAudioData = useCallback(() => {\n        if (\n          !analyserRef.current ||\n          !audioDataRef.current ||\n          !smoothedAudioRef.current ||\n          !configRef.current.audioEnabled\n        ) {\n          return null;\n        }\n\n        analyserRef.current.getFloatFrequencyData(audioDataRef.current);\n\n        const bands = configRef.current.frequencyBands;\n        const sensitivity = configRef.current.audioSensitivity;\n\n        // Calculate the size of each frequency band\n        const bandSize = Math.floor(audioDataRef.current.length / bands);\n        const bandValues = new Float32Array(bands);\n\n        // Process each frequency band\n        for (let i = 0; i < bands; i++) {\n          let bandSum = 0;\n          // Sum up the values for this frequency band\n          for (let j = 0; j < bandSize; j++) {\n            const index = i * bandSize + j;\n            const rawValue = (audioDataRef.current[index] + 140) / 140; // Normalize from -140 to 0 dB\n            bandSum += Math.max(0, Math.min(1, rawValue));\n          }\n          // Average the band values\n          const bandAverage = bandSum / bandSize;\n          // Apply smoothing using existing lerping\n          smoothedAudioRef.current[i] = bandAverage;\n          bandValues[i] = bandAverage;\n        }\n\n        // Calculate overall volume from all bands\n        const volume =\n          (bandValues.reduce((a, b) => a + b, 0) / bands) * sensitivity;\n\n        return {\n          bandValues,\n          volume,\n          spectrum: smoothedAudioRef.current,\n        };\n      }, []);\n\n      const applyAudioReactivity = useCallback(() => {\n        const audioData = processAudioData();\n        if (!audioData) return;\n\n        const { volume, bandValues } = audioData;\n        const reactivity = configRef.current.plasmaVolumeReactivity;\n        const threshold = configRef.current.volumeThreshold;\n\n        // Add threshold and compress volume range\n        const compressedVolume =\n          volume < threshold ? 0 : (volume - threshold) / (1 - threshold); // Compress remaining range to 0-1\n\n        // Create a more dynamic response to volume\n        const volumeResponse = Math.pow(compressedVolume, 1.5) * reactivity;\n\n        // Apply volume reactivity to core plasma properties with more dynamic scaling\n        setShaderValue(\n          \"intensity\",\n          configRef.current.intensity * (1 + volumeResponse * 1),\n          true,\n        );\n        setShaderValue(\n          \"radius\",\n          configRef.current.radius * (1 + volumeResponse * 0.6),\n          true,\n        );\n        setShaderValue(\n          \"effectScale\",\n          configRef.current.effectScale * (1 - volumeResponse * 0.5),\n          true,\n        );\n        setShaderValue(\n          \"glowFalloff\",\n          configRef.current.glowFalloff * (1 - volumeResponse * 0.25),\n          true,\n        );\n        setShaderValue(\n          \"colorCycleSpeed\",\n          configRef.current.colorCycleSpeed * (1 - volumeResponse * 0.03),\n          true,\n        );\n        setShaderValue(\n          \"plasmaSpeed\",\n          configRef.current.plasmaSpeed * (1 - volumeResponse * 0.25),\n          true,\n        );\n\n        // Only adjust ring properties if we have significant audio\n        if (volume >= threshold) {\n          // Make rings react to audio by adjusting their wave properties\n          const averageFrequency =\n            bandValues.reduce((a, b) => a + b, 0) / bandValues.length;\n          const frequencyVariance =\n            Math.max(...bandValues) - Math.min(...bandValues);\n\n          // Set ring visibility to 1 and adjust thickness based on audio\n          setShaderValue(\"ringVisibility\", 1.0, true);\n          setShaderValue(\n            \"ringThickness\",\n            configRef.current.ringThickness *\n              configRef.current.ringThicknessAudio,\n            false,\n          );\n          setShaderValue(\n            \"ringDistance\",\n            configRef.current.ringDistance - frequencyVariance * 0.1,\n            false,\n          );\n\n          // Adjust ring wave properties based on audio\n          setShaderValue(\n            \"ringAmplitude\",\n            configRef.current.ringAmplitude * (1 + averageFrequency * 3),\n            true,\n          );\n          setShaderValue(\n            \"ringSpeed\",\n            configRef.current.ringSpeed * (1 + frequencyVariance * 1),\n            true,\n          );\n          setShaderValue(\n            \"ringVariance\",\n            configRef.current.ringVariance * (1 + frequencyVariance),\n            true,\n          );\n        } else {\n          // When no significant audio, smoothly return to default values\n          setShaderValue(\n            \"ringVisibility\",\n            configRef.current.ringVisibility,\n            false,\n          );\n          setShaderValue(\n            \"ringThickness\",\n            configRef.current.ringThickness,\n            false,\n          );\n          setShaderValue(\"ringDistance\", configRef.current.ringDistance, false);\n          setShaderValue(\n            \"ringAmplitude\",\n            configRef.current.ringAmplitude,\n            false,\n          );\n          setShaderValue(\"ringSpeed\", configRef.current.ringSpeed, false);\n          setShaderValue(\"ringVariance\", configRef.current.ringVariance, false);\n        }\n      }, [processAudioData, setShaderValue]);\n\n      const updateInterpolation = useCallback(() => {\n        if (!materialRef.current) return;\n\n        const lerpSpeed = configRef.current.lerpSpeed;\n\n        interpolatedProps.forEach((prop) => {\n          if (prop in targetRef.current && prop in currentRef.current) {\n            const current = currentRef.current[prop];\n            const target = targetRef.current[prop];\n            if (typeof current === \"number\" && typeof target === \"number\") {\n              // Use lerpSpeed for normal transitions\n              currentRef.current[prop] = lerp(current, target, lerpSpeed);\n              if (materialRef.current!.uniforms[prop]) {\n                materialRef.current!.uniforms[prop].value =\n                  currentRef.current[prop];\n              }\n            }\n          }\n        });\n\n        // Update vector properties\n        if (targetRef.current.effectCenter && currentRef.current.effectCenter) {\n          const current = currentRef.current.effectCenter;\n          const target = targetRef.current.effectCenter;\n          if (isVector(current) && isVector(target)) {\n            current.x = lerp(current.x, target.x, lerpSpeed);\n            current.y = lerp(current.y, target.y, lerpSpeed);\n            materialRef.current!.uniforms.effectCenter.value.set(\n              current.x,\n              current.y,\n            );\n          }\n        }\n\n        // Update colors\n        [\"color1\", \"color2\", \"color3\", \"backgroundColor\"].forEach(\n          (colorKey) => {\n            if (targetRef.current[colorKey] && currentRef.current[colorKey]) {\n              const target = targetRef.current[colorKey];\n              const current = currentRef.current[colorKey];\n              if (\n                target instanceof THREE.Vector3 &&\n                current instanceof THREE.Vector3\n              ) {\n                current.x = lerp(current.x, target.x, lerpSpeed);\n                current.y = lerp(current.y, target.y, lerpSpeed);\n                current.z = lerp(current.z, target.z, lerpSpeed);\n                materialRef.current!.uniforms[colorKey].value.set(\n                  current.x,\n                  current.y,\n                  current.z,\n                );\n              }\n            }\n          },\n        );\n      }, []);\n\n      const animate = useCallback(() => {\n        if (\n          !rendererRef.current ||\n          !sceneRef.current ||\n          !materialRef.current ||\n          !isVisibleRef.current\n        )\n          return;\n\n        // Apply audio reactivity if enabled\n        if (audioTrack && configRef.current.audioEnabled) {\n          applyAudioReactivity();\n        }\n\n        updateInterpolation();\n        materialRef.current.uniforms.iTime.value =\n          (Date.now() - startTimeRef.current) * 0.001;\n\n        const camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0.1, 10);\n        camera.position.z = 1;\n\n        rendererRef.current.render(sceneRef.current, camera);\n        frameRef.current = requestAnimationFrame(animate);\n      }, [updateInterpolation, applyAudioReactivity, audioTrack]);\n\n      const updateConfig = useCallback((newConfig: Partial<PlasmaConfig>) => {\n        Object.entries(newConfig).forEach(([key, value]) => {\n          if (value !== undefined) {\n            const configKey = key as keyof PlasmaConfig;\n            (configRef.current[configKey] as typeof value) = value;\n\n            if (key === \"effectCenter\" && typeof value === \"object\") {\n              targetRef.current[key] = { ...value };\n            } else if (key.includes(\"color\") || key === \"backgroundColor\") {\n              targetRef.current[key] = hexToRgb(value as string);\n            } else {\n              targetRef.current[key] = value as\n                | number\n                | boolean\n                | { x: number; y: number };\n            }\n\n            // Update immediate properties directly\n            if (\n              immediateProps.includes(key) &&\n              materialRef.current?.uniforms[key]\n            ) {\n              materialRef.current.uniforms[key].value = value;\n            }\n\n            // Update non-interpolated properties\n            if (\n              key === \"useCustomColors\" &&\n              materialRef.current?.uniforms.useCustomColors\n            ) {\n              materialRef.current.uniforms.useCustomColors.value =\n                value as boolean;\n            }\n            if (key === \"lerpSpeed\") {\n              configRef.current.lerpSpeed = value as number;\n            }\n          }\n        });\n      }, []);\n\n      const getConfig = useCallback(() => ({ ...configRef.current }), []);\n\n      const resetToDefaults = useCallback(() => {\n        updateConfig(defaultConfig);\n      }, [updateConfig]);\n\n      useImperativeHandle(\n        ref,\n        () => ({\n          updateConfig,\n          getConfig,\n          resetToDefaults,\n        }),\n        [updateConfig, getConfig, resetToDefaults],\n      );\n\n      // Audio setup effect\n      useEffect(() => {\n        if (!audioTrack || !configRef.current.audioEnabled) {\n          // Cleanup if no audio track\n          if (sourceRef.current) {\n            sourceRef.current.disconnect();\n            sourceRef.current = null;\n          }\n          if (audioContextRef.current) {\n            audioContextRef.current.close();\n            audioContextRef.current = null;\n          }\n          return;\n        }\n\n        // Setup audio analysis\n        const setupAudio = async () => {\n          try {\n            audioContextRef.current = new AudioContext();\n            analyserRef.current = audioContextRef.current.createAnalyser();\n            analyserRef.current.fftSize = configRef.current.frequencyBands * 2;\n            analyserRef.current.smoothingTimeConstant = 0.8;\n\n            const stream = new MediaStream([audioTrack]);\n            sourceRef.current =\n              audioContextRef.current.createMediaStreamSource(stream);\n            sourceRef.current.connect(analyserRef.current);\n\n            const bufferLength = analyserRef.current.frequencyBinCount;\n            audioDataRef.current = new Float32Array(bufferLength);\n            smoothedAudioRef.current = new Float32Array(bufferLength);\n            smoothedAudioRef.current.fill(0);\n          } catch (error) {\n            console.error(\"Error setting up audio analysis:\", error);\n          }\n        };\n\n        setupAudio();\n\n        return () => {\n          if (sourceRef.current) {\n            sourceRef.current.disconnect();\n          }\n          if (audioContextRef.current) {\n            audioContextRef.current.close();\n          }\n        };\n      }, [audioTrack]);\n\n      useEffect(() => {\n        if (!canvasRef.current) return;\n\n        // Check WebGL support\n        const testCanvas = document.createElement(\"canvas\");\n        const gl =\n          testCanvas.getContext(\"webgl\") ||\n          testCanvas.getContext(\"experimental-webgl\");\n        if (!gl) {\n          hasWebGLRef.current = false;\n          console.warn(\"WebGL not supported\");\n          return;\n        }\n\n        const canvas = canvasRef.current;\n        const canvasWidth = width || canvas.offsetWidth || window.innerWidth;\n        const canvasHeight =\n          height || canvas.offsetHeight || window.innerHeight;\n\n        // Initialize Three.js with WebGL context attributes\n        const scene = new THREE.Scene();\n        const camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0.1, 10);\n        camera.position.z = 1;\n\n        const renderer = new THREE.WebGLRenderer({\n          canvas,\n          antialias,\n          alpha,\n          powerPreference,\n          preserveDrawingBuffer,\n          failIfMajorPerformanceCaveat: false,\n        });\n        renderer.setSize(canvasWidth, canvasHeight, false);\n\n        // Use provided pixel ratio or auto-detect, but cap at 2 for performance\n        const dpr = pixelRatio || Math.min(window.devicePixelRatio || 1, 2);\n        renderer.setPixelRatio(dpr);\n\n        // Initialize state\n        interpolatedProps.forEach((prop) => {\n          const value = configRef.current[prop as keyof PlasmaConfig];\n          if (\n            typeof value === \"number\" ||\n            typeof value === \"boolean\" ||\n            value instanceof THREE.Vector3 ||\n            isVector(value)\n          ) {\n            targetRef.current[prop] = value;\n            currentRef.current[prop] = value;\n          }\n        });\n\n        immediateProps.forEach((prop) => {\n          const value = configRef.current[prop as keyof PlasmaConfig];\n          if (\n            typeof value === \"number\" ||\n            typeof value === \"boolean\" ||\n            value instanceof THREE.Vector3 ||\n            isVector(value)\n          ) {\n            targetRef.current[prop] = value;\n          }\n        });\n\n        targetRef.current.effectCenter = { ...configRef.current.effectCenter };\n        currentRef.current.effectCenter = { ...configRef.current.effectCenter };\n\n        [\"color1\", \"color2\", \"color3\", \"backgroundColor\"].forEach(\n          (colorKey) => {\n            const hex = configRef.current[\n              colorKey as keyof PlasmaConfig\n            ] as string;\n            targetRef.current[colorKey] = hexToRgb(hex);\n            currentRef.current[colorKey] = hexToRgb(hex);\n          },\n        );\n\n        // Create uniforms\n        const uniforms = {\n          iTime: { value: 0 },\n          iResolution: { value: new THREE.Vector2(canvasWidth, canvasHeight) },\n          intensity: { value: currentRef.current.intensity },\n          radius: { value: currentRef.current.radius },\n          blendMode: { value: configRef.current.blendMode },\n          effectScale: { value: currentRef.current.effectScale },\n          effectCenter: {\n            value: new THREE.Vector2(\n              currentRef.current.effectCenter.x,\n              currentRef.current.effectCenter.y,\n            ),\n          },\n          color1: {\n            value: isVector3(currentRef.current.color1)\n              ? currentRef.current.color1.clone()\n              : new THREE.Vector3(),\n          },\n          color2: {\n            value: isVector3(currentRef.current.color2)\n              ? currentRef.current.color2.clone()\n              : new THREE.Vector3(),\n          },\n          color3: {\n            value: isVector3(currentRef.current.color3)\n              ? currentRef.current.color3.clone()\n              : new THREE.Vector3(),\n          },\n          useCustomColors: { value: configRef.current.useCustomColors },\n          colorCycleSpeed: { value: configRef.current.colorCycleSpeed },\n          ringCount: { value: currentRef.current.ringCount },\n          ringVisibility: { value: currentRef.current.ringVisibility },\n          ringDistance: { value: currentRef.current.ringDistance },\n          ringSpread: { value: currentRef.current.ringSpread },\n          ringBounce: { value: currentRef.current.ringBounce },\n          ringThickness: { value: currentRef.current.ringThickness },\n          ringVariance: { value: currentRef.current.ringVariance },\n          ringSharpness: { value: currentRef.current.ringSharpness },\n          ringAmplitude: { value: currentRef.current.ringAmplitude },\n          ringSpeed: { value: configRef.current.ringSpeed },\n          ringSegments: { value: currentRef.current.ringSegments },\n          ringColorInheritance: {\n            value: currentRef.current.ringColorInheritance,\n          },\n          backgroundColor: {\n            value: isVector3(currentRef.current.backgroundColor)\n              ? currentRef.current.backgroundColor.clone()\n              : new THREE.Vector3(),\n          },\n          plasmaSpeed: { value: configRef.current.plasmaSpeed },\n          rayLength: { value: currentRef.current.rayLength },\n          glowFalloff: { value: currentRef.current.glowFalloff },\n          glowThreshold: { value: currentRef.current.glowThreshold },\n        };\n\n        const material = new THREE.ShaderMaterial({\n          uniforms,\n          vertexShader,\n          fragmentShader,\n        });\n\n        const geometry = new THREE.PlaneGeometry(2, 2);\n        const mesh = new THREE.Mesh(geometry, material);\n        scene.add(mesh);\n\n        sceneRef.current = scene;\n        rendererRef.current = renderer;\n        materialRef.current = material;\n\n        // Handle resize with ResizeObserver\n        const resizeObserver = new ResizeObserver(() => {\n          if (!renderer || !material) return;\n\n          const { width: newWidth, height: newHeight } =\n            canvas.getBoundingClientRect();\n\n          // Only update if size actually changed\n          if (newWidth > 0 && newHeight > 0) {\n            renderer.setSize(newWidth, newHeight, false);\n            material.uniforms.iResolution.value.set(newWidth, newHeight);\n          }\n        });\n\n        // Observe the canvas element\n        resizeObserver.observe(canvas);\n\n        // Visibility handling for performance\n        const handleVisibilityChange = () => {\n          isVisibleRef.current = !document.hidden;\n          if (isVisibleRef.current && !frameRef.current) {\n            animate();\n          }\n        };\n\n        // Error handling\n        const handleContextLost = (event: Event) => {\n          event.preventDefault();\n          if (frameRef.current) {\n            cancelAnimationFrame(frameRef.current);\n            frameRef.current = null;\n          }\n        };\n\n        const handleContextRestored = () => {\n          // Reinitialize if needed\n          animate();\n        };\n\n        document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n        canvas.addEventListener(\"webglcontextlost\", handleContextLost);\n        canvas.addEventListener(\"webglcontextrestored\", handleContextRestored);\n\n        // Start animation\n        animate();\n\n        // Notify ready\n        if (onReady) {\n          onReady();\n        }\n\n        return () => {\n          resizeObserver.disconnect();\n          document.removeEventListener(\n            \"visibilitychange\",\n            handleVisibilityChange,\n          );\n          canvas.removeEventListener(\"webglcontextlost\", handleContextLost);\n          canvas.removeEventListener(\n            \"webglcontextrestored\",\n            handleContextRestored,\n          );\n          if (frameRef.current) {\n            cancelAnimationFrame(frameRef.current);\n          }\n          renderer.dispose();\n          material.dispose();\n          geometry.dispose();\n        };\n      }, [\n        width,\n        height,\n        animate,\n        onReady,\n        pixelRatio,\n        powerPreference,\n        alpha,\n        antialias,\n        preserveDrawingBuffer,\n      ]);\n\n      if (!hasWebGLRef.current && fallbackContent) {\n        return <>{fallbackContent}</>;\n      }\n\n      return (\n        <canvas\n          ref={canvasRef}\n          className={className}\n          style={{\n            display: \"block\",\n            width: \"100%\",\n            height: \"100%\",\n            touchAction: \"none\",\n            ...style,\n          }}\n        />\n      );\n    },\n  ),\n);\n\nPlasma.displayName = \"Plasma\";\n\nexport default Plasma;\n\nexport type { PlasmaConfig };\n","import {\n  usePipecatClientMediaTrack,\n  usePipecatClientTransportState,\n} from \"@pipecat-ai/client-react\";\nimport { useEffect, useRef } from \"react\";\nimport { Plasma, type PlasmaConfig, type PlasmaRef } from \".\";\n\nconst defaultConfig: PlasmaConfig = {\n  effectScale: 0.55,\n  ringDistance: 0,\n  ringBounce: 0.0,\n  ringVariance: 0.35,\n  ringAmplitude: 0.03,\n  ringVisibility: 0.32,\n  ringSegments: 6,\n  ringThickness: 8,\n  ringSpread: 0.08,\n  colorCycleSpeed: 0.5,\n  intensity: 1.95,\n  radius: 1.65,\n  glowFalloff: 1,\n  glowThreshold: 0,\n  plasmaSpeed: 0.3,\n  rayLength: 1,\n};\n\nconst thinkingConfig: PlasmaConfig = {\n  ringDistance: 0.05,\n  ringBounce: 0.25,\n  ringVariance: 0.0,\n  ringAmplitude: 0,\n  ringVisibility: 0.3,\n  ringThickness: 18,\n  colorCycleSpeed: 3,\n  intensity: 2,\n  radius: 2.0,\n  glowThreshold: 0.0,\n  glowFalloff: 0.5,\n  plasmaSpeed: 3,\n  rayLength: 1,\n};\n\nconst connectedConfig: PlasmaConfig = {\n  ...defaultConfig,\n};\n\nexport const PlasmaVisualizer = () => {\n  const transportState = usePipecatClientTransportState();\n  const audioTrack = usePipecatClientMediaTrack(\"audio\", \"bot\");\n\n  const shaderRef = useRef<PlasmaRef>(null);\n\n  useEffect(() => {\n    switch (transportState) {\n      case \"disconnected\":\n        shaderRef.current?.updateConfig(defaultConfig);\n        break;\n      case \"ready\":\n        shaderRef.current?.updateConfig(connectedConfig);\n        break;\n      default:\n        shaderRef.current?.updateConfig(thinkingConfig);\n        break;\n    }\n  }, [transportState]);\n\n  return (\n    <Plasma\n      ref={shaderRef}\n      initialConfig={defaultConfig}\n      className=\"absolute inset-0 pointer-events-none animate-fade-in z-0\"\n      audioTrack={audioTrack}\n    />\n  );\n};\n\nexport default PlasmaVisualizer;\n"]}