lensfx 0.1.2 → 0.1.4
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/CHANGELOG.md +16 -0
- package/README.md +39 -0
- package/dist/cdn/lensfx.js +1717 -0
- package/dist/cdn/lensfx.js.map +1 -0
- package/dist/cdn/lensfx.min.js +371 -0
- package/dist/cdn/lensfx.min.js.map +1 -0
- package/dist/index.d.mts +6 -371
- package/dist/index.d.ts +6 -371
- package/dist/index.js +419 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +418 -6
- package/dist/index.mjs.map +1 -1
- package/dist/vanilla.d.mts +493 -0
- package/dist/vanilla.d.ts +493 -0
- package/dist/vanilla.js +1694 -0
- package/dist/vanilla.js.map +1 -0
- package/dist/vanilla.mjs +1675 -0
- package/dist/vanilla.mjs.map +1 -0
- package/package.json +28 -3
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/types.ts","../src/engine/math.ts","../src/webgl/VideoRefractionRenderer.ts","../src/webgl/QRRefractionRenderer.ts","../src/lib/glass/AaveGlass.tsx","../src/components/GlassSwitch.tsx","../src/components/GlassSlider.tsx","../src/components/GlassToggleGroup.tsx"],"names":["useState","useRef","useEffect","useMemo","jsxs","jsx","PRESS_ANIM","RELEASE_ANIM","rubberBand","useCallback","useLayoutEffect","useMotionValue","useTransform","step","animate","motion"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * lensfx — Engine Layer: Types & Constants\n *\n * Pure TypeScript — no React, no DOM. Can be imported in any environment.\n */\n\n// ---------------------------------------------------------------------------\n// Core lens parameter interface\n// ---------------------------------------------------------------------------\n\n/** All optical parameters that control how a single lens looks and distorts. */\nexport interface LensParams {\n /** Lens width in pixels. */\n lensW: number;\n /** Lens height in pixels. */\n lensH: number;\n /** Lens corner radius in pixels. */\n borderRadius: number;\n /** Refraction depth/strength — higher = more distortion. Range: 0–10. */\n depth: number;\n /** Chromatic aberration split amount. 0 = monochromatic, 1 = full RGB split. */\n chromaAmount: number;\n /** Horizontal displacement scale. 0 = no lateral displacement. */\n scaleX: number;\n /** Vertical displacement scale. 0 = no vertical displacement. */\n scaleY: number;\n /** Resolution of the displacement map canvas (power-of-two recommended). */\n mapSize: number;\n /** Gaussian blur radius applied to the background behind the lens (px). */\n blurAmount: number;\n /** If true, clips displacement strictly to the lens SDF boundary. */\n sdfBoundary: boolean;\n /** If true, applies an erf-smoothed falloff at the lens edge. */\n edgeFalloff: boolean;\n /** Additive brightness overlay inside the lens. Positive = lighter, negative = darker. Range: -1 to 1. */\n brightness: number;\n /** Intensity of the specular highlight. Range: 0–3. */\n specularStrength: number;\n /** Angle of the specular directional light in degrees. */\n specularRotation: number;\n /** If true, uses dark (shadow) specular mode instead of bright. */\n specularDark: boolean;\n /** Uniform tint applied inside the lens. Range: -1 (black) to 1 (white). */\n tint: number;\n /** Strength of the inner glow band. Range: 0–1. */\n glowStrength: number;\n /** Angular spread of the glow band, normalised. Range: 0–1. */\n glowSpread: number;\n /** Exponent controlling glow falloff curve. Higher = sharper band. */\n glowExponent: number;\n /** Strength of the edge specular ring (separate from inner glow). Range: 0–1. */\n edgeStrength: number;\n /** Thickness of the edge specular ring in pixels. */\n edgeWidth: number;\n /** Exponent controlling edge ring falloff curve. */\n edgeExponent: number;\n /** Height of the ellipsoid dome above the lens surface in pixels. */\n domeDepth: number;\n /** How much to reduce displacement magnitude at corners (0 = no splay, 1 = full splay). */\n splayAmount: number;\n /** Box shadow applied to the lens container (outer drop shadow). */\n edgeShadow?: string;\n /** Inset box shadow applied to the lens container. */\n edgeInsetShadow?: string;\n /** Secondary rest-state shadow (e.g. when the slider thumb is at rest). */\n restEdgeShadow?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Internal engine types\n// ---------------------------------------------------------------------------\n\n/** Precomputed geometric constants for dome curvature. */\nexport interface DomeConstants {\n /** Horizontal sphere radius for dome curvature. */\n Rx: number;\n /** Vertical sphere radius for dome curvature. */\n Ry: number;\n /** Normalised scale factor for the X gradient (trapezoidal integration). */\n scaleX: number;\n /** Normalised scale factor for the Y gradient (trapezoidal integration). */\n scaleY: number;\n}\n\n/** Input to the synchronous displacement map generator. */\nexport interface MapGeneratorInput {\n lensHalfWidth: number;\n lensHalfHeight: number;\n borderRadius: number;\n depth: number;\n sdfBoundary: boolean;\n edgeFalloff: boolean;\n specularRotation: number;\n glowStrength: number;\n glowSpread: number;\n glowExponent: number;\n edgeStrength: number;\n edgeWidth: number;\n edgeExponent: number;\n domeDepth: number;\n splayAmount: number;\n}\n\n/** Output from the displacement map generator. */\nexport interface MapGeneratorOutput {\n /** PNG data URL of the generated displacement map. */\n dataUrl: string;\n /** Time taken for the pixel loop, in milliseconds. */\n loopMs: number;\n /** Time taken for canvas.toDataURL encoding, in milliseconds. */\n encodeMs: number;\n}\n\n// Internal SVG filter pooling types (not exposed in public API)\nexport interface MultiLensSlot {\n filterEl: SVGFilterElement | null;\n feDispEl: SVGFEDisplacementMapElement | null;\n subSlots: SubSlot[];\n assignedTo: HTMLElement | null;\n version: number;\n lastDispScale: string;\n lastFilterW: string;\n lastFilterH: string;\n}\n\nexport interface SubSlot {\n feImageEl: SVGFEImageElement | null;\n feColorMatrixEl: SVGFEColorMatrixElement | null;\n feMaskEl: SVGFEImageElement | null;\n feMaskColorMatrixEl: SVGFEColorMatrixElement | null;\n assignedLensId: string | null;\n lastHref: string;\n lastX: string;\n lastY: string;\n lastW: string;\n lastH: string;\n lastColorMatrix: string;\n lastMaskKey: string;\n lastMaskColorMatrix: string;\n}\n\nexport interface SingleLensSlot {\n filterEl: SVGFilterElement | null;\n lensEls: SVGElement[];\n dispEls: SVGFEDisplacementMapElement[];\n mapMatrixEl: SVGFEColorMatrixElement | null;\n feImageEl: SVGFEImageElement | null;\n version: number;\n assignedTo: HTMLElement | null;\n assignedRect: DOMRect | null;\n}\n\n// ---------------------------------------------------------------------------\n// Default parameter sets — calibrated baseline optical parameters\n// ---------------------------------------------------------------------------\n\n/** Zero-refraction baseline — all effects disabled. */\nexport const DEFAULT_LENS_PARAMS: LensParams = {\n lensW: 90,\n lensH: 60,\n depth: 0,\n chromaAmount: 0,\n scaleX: 0,\n scaleY: 0,\n mapSize: 256,\n borderRadius: 0,\n blurAmount: 0,\n sdfBoundary: false,\n edgeFalloff: false,\n brightness: 0,\n specularStrength: 0,\n specularRotation: 0,\n glowStrength: 0,\n glowSpread: 1,\n glowExponent: 1.5,\n tint: 0,\n edgeStrength: 0,\n edgeWidth: 3,\n edgeExponent: 1.5,\n specularDark: false,\n domeDepth: 0,\n splayAmount: 0,\n};\n\n/** Selector strings used by Lens to find refraction containers & targets. */\nexport const LENSFX_SELECTORS = {\n container: \"[data-lensfx-container]\",\n target: \"[data-lensfx-target]\",\n} as const;\n\n// ---------------------------------------------------------------------------\n// Component-specific presets\n// ---------------------------------------------------------------------------\n\n/** LensSwitch base optical parameters. */\nexport const SWITCH_GLASS_DEFAULTS: Partial<LensParams> = {\n lensW: 90,\n lensH: 60,\n borderRadius: 30,\n mapSize: 256,\n depth: 2,\n chromaAmount: 1,\n scaleX: 0.25,\n scaleY: 0.25,\n sdfBoundary: true,\n edgeFalloff: true,\n domeDepth: 6,\n splayAmount: 0.4,\n blurAmount: 0,\n brightness: 0.06,\n specularStrength: 1,\n specularRotation: 45,\n specularDark: false,\n tint: 0,\n glowStrength: 0,\n glowSpread: 0.5,\n glowExponent: 1.5,\n edgeStrength: 0,\n edgeWidth: 2,\n edgeExponent: 1.5,\n edgeShadow: \"0 2px 6px rgba(0, 0, 0, 0.16)\",\n edgeInsetShadow: \"0 -4px 10px rgba(0, 0, 0, 0.12)\",\n};\n\nexport const SWITCH_DARK_OVERRIDES: Partial<LensParams> = {\n brightness: 0.12,\n glowStrength: 0.4,\n edgeStrength: 0.5,\n};\n\nexport const SWITCH_LIGHT_OVERRIDES: Partial<LensParams> = {\n brightness: -0.02,\n specularRotation: 30,\n specularStrength: 1.5,\n glowStrength: 0.4,\n glowSpread: 0.5,\n glowExponent: 2,\n edgeStrength: 1,\n edgeWidth: 1.5,\n edgeExponent: 1,\n};\n\n/** LensSlider base optical parameters. */\nexport const SLIDER_GLASS_DEFAULTS: Partial<LensParams> = {\n lensW: 90,\n lensH: 60,\n borderRadius: 30,\n mapSize: 256,\n depth: 2,\n chromaAmount: 0.65,\n scaleX: 0.06,\n scaleY: 0.06,\n sdfBoundary: true,\n edgeFalloff: true,\n domeDepth: 5,\n splayAmount: 0.5,\n blurAmount: 0,\n brightness: 0.06,\n specularStrength: 1.5,\n specularRotation: 45,\n specularDark: false,\n tint: 0,\n glowStrength: 0.4,\n glowSpread: 0.5,\n glowExponent: 1.5,\n edgeStrength: 0,\n edgeWidth: 3,\n edgeExponent: 1.5,\n edgeShadow: \"0 2px 6px rgba(0, 0, 0, 0.16)\",\n edgeInsetShadow: \"0 -4px 10px rgba(0, 0, 0, 0.12)\",\n restEdgeShadow: \"0 1.333px 5.333px var(--lensfx-shadow-strong, rgba(0,0,0,0.3))\",\n};\n\nexport const SLIDER_DARK_OVERRIDES: Partial<LensParams> = {\n scaleX: 0.133,\n scaleY: 0.135,\n brightness: 0.12,\n specularRotation: 45,\n glowExponent: 1.5,\n edgeStrength: 0.5,\n edgeWidth: 1,\n edgeExponent: 1.5,\n};\n\nexport const SLIDER_LIGHT_OVERRIDES: Partial<LensParams> = {\n scaleX: 0.1,\n scaleY: 0.1,\n brightness: -0.02,\n specularRotation: 30,\n glowExponent: 2,\n edgeStrength: 1,\n edgeWidth: 1,\n edgeExponent: 1,\n};\n\nexport const SLIDER_SAFARI_OVERRIDES: Partial<LensParams> = {\n scaleY: 0.25,\n};\n","/**\n * lensfx — Engine Layer: Core Mathematics & Displacement Map Generation\n *\n * Pure TypeScript — no React, no DOM references at module load time.\n * DOM (canvas) is accessed only inside function bodies, never at import time,\n * making this SSR-safe.\n */\n\nimport { DomeConstants, MapGeneratorInput, MapGeneratorOutput } from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Mathematical primitives\n// ---------------------------------------------------------------------------\n\n/**\n * Approximation of the Gauss error function using hyperbolic tangent.\n *\n * erf(x) ≈ tanh(√π · x)\n *\n * The constant √π ≈ 1.7724538509 ensures that the derivative at 0 equals\n * 2/√π (matching the exact erf), giving a C∞ smooth clamping function that\n * avoids branching and is monotone on (−∞, +∞).\n */\nexport function erf(x: number): number {\n return Math.tanh(1.7724538509 * x);\n}\n\n/**\n * Numerical integration of dome slope over 200 samples using the trapezoid rule.\n * Used to derive the normalisation factor for the dome gradient lookup table.\n *\n * @param R - sphere radius\n * @param t - half-width/height of the lens face at the dome base\n */\nfunction integrateDome(R: number, t: number): number {\n let sum = 0;\n for (let n = 0; n <= 200; n++) {\n const a = (n / 200) * t;\n const slope = a / Math.sqrt(R * R - a * a);\n sum += n === 0 || n === 200 ? 0.5 * slope : slope;\n }\n return sum / 200;\n}\n\n/**\n * Computes ellipsoid dome curvature geometry constants for the X and Y axes.\n *\n * The dome is modelled as a sphere of radius R that just touches both the\n * centre and the edge of the lens: R = (halfDim² + depth²) / (2·depth).\n *\n * @param domeDepth - maximum height of the dome above the lens plane (px)\n * @param halfW - half-width of the lens (px)\n * @param halfH - half-height of the lens (px)\n */\nexport function computeDomeConstants(\n domeDepth: number,\n halfW: number,\n halfH: number\n): DomeConstants {\n const a = Math.max(0.01, Math.min(domeDepth, Math.min(halfW, halfH) - 1));\n const Rx = (halfW * halfW + a * a) / (2 * a);\n const Ry = (halfH * halfH + a * a) / (2 * a);\n const intX = integrateDome(Rx, halfW);\n const intY = integrateDome(Ry, halfH);\n\n return {\n Rx,\n Ry,\n scaleX: intX > 0 ? 0.5 / intX : 1,\n scaleY: intY > 0 ? 0.5 / intY : 1,\n };\n}\n\n/**\n * Evaluates the gradient (surface slope) of the dome at a given offset\n * from the lens centre. Returns a value in [0, 1] normalised by `scale`.\n */\nexport function domeGradient(pos: number, R: number, scale: number): number {\n const p = Math.min(pos, 0.999 * R);\n return (p / Math.sqrt(R * R - p * p)) * scale;\n}\n\n/**\n * Builds an SVG feColorMatrix 4×5 matrix string that rescales the\n * displacement map's R and G channels around the neutral midpoint (128/255 = 0.5).\n *\n * When scaleX ≠ scaleY the lens has asymmetric horizontal/vertical displacement\n * and we normalise the larger axis to 1 so both axes are within [0, 255].\n */\nexport function colorMatrixValues(ratioX: number, ratioY: number): string {\n return `${ratioX} 0 0 0 ${0.5 * (1 - ratioX)} 0 ${ratioY} 0 0 ${\n 0.5 * (1 - ratioY)\n } 0 0 1 0 0 0 0 0 1 0`;\n}\n\n// ---------------------------------------------------------------------------\n// SVG mask cache (safe because it is only written inside function bodies)\n// ---------------------------------------------------------------------------\n\nconst maskCache = new Map<string, string>();\n\n/**\n * Returns a memoised SVG rounded-rectangle mask as a data URI.\n * Used as CSS `mask-image` on the backdrop-blur and tint layers to\n * clip them to the lens shape without touching the filter graph.\n */\nexport function getSvgMaskDataUri(\n width: number,\n height: number,\n radius: number\n): { uri: string; key: string } {\n const n = Math.max(1, Math.round(width));\n const l = Math.max(1, Math.round(height));\n const i = Math.max(0, Math.min(Math.round(radius), Math.min(n, l) / 2));\n const key = `${n}|${l}|${i}`;\n\n const cached = maskCache.get(key);\n if (cached) return { uri: cached, key };\n\n const w = Math.max(0, n - 1);\n const h = Math.max(0, l - 1);\n const r = Math.max(0, i - 0.5);\n const svg = `<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${n} ${l}' preserveAspectRatio='none'><rect x='0.5' y='0.5' width='${w}' height='${h}' rx='${r}' ry='${r}' fill='black'/></svg>`;\n const uri = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n maskCache.set(key, uri);\n\n return { uri, key };\n}\n\n// ---------------------------------------------------------------------------\n// Synchronous displacement map generator (for animated / interactive lenses)\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a stateful, synchronous displacement map generator with:\n * • 4-fold quadrant symmetry (75 % fewer pixel evaluations)\n * • Reusable canvas & ImageData to avoid GC pressure\n * • Cached dome gradient lookup table (recalculated only when geometry changes)\n *\n * Use for animated lenses where the map must update every frame in sync with\n * Framer Motion values. For static lenses, prefer `generateDisplacementMapAsync`.\n *\n * @param mapSize - side length of the square displacement map canvas (px)\n */\nexport function createDisplacementMapGeneratorSync(mapSize: number) {\n // Private mutable state — closed over by the returned object\n let canvas: HTMLCanvasElement | null = null;\n let ctx: CanvasRenderingContext2D | null = null;\n let imgData: ImageData | null = null;\n let domeConstants: DomeConstants | null = null;\n let cachedDomeDepth = -Infinity;\n let cachedHalfW = -Infinity;\n let cachedHalfH = -Infinity;\n let xLookup: Float32Array | null = null;\n let cachedF = 0;\n let dirtyDome = true;\n\n return {\n /**\n * Generate a new displacement map and return a PNG data URL.\n * Reuses internal canvas memory; safe to call every animation frame.\n */\n generate(input: MapGeneratorInput): MapGeneratorOutput {\n if (!canvas) {\n canvas = document.createElement(\"canvas\");\n canvas.width = mapSize;\n canvas.height = mapSize;\n ctx = canvas.getContext(\"2d\")!;\n imgData = ctx.createImageData(mapSize, mapSize);\n }\n\n const {\n lensHalfWidth: x,\n lensHalfHeight: y,\n borderRadius: b,\n depth: M,\n sdfBoundary: R,\n edgeFalloff: S,\n specularRotation: w = 45,\n glowStrength: A = 0,\n glowSpread: v = 1,\n glowExponent: E = 1.5,\n edgeStrength: $ = 0,\n edgeWidth: C = 3,\n edgeExponent: k = 1.5,\n domeDepth: j = 0,\n splayAmount: I = 1,\n } = input;\n\n const T = imgData!.data;\n const F = mapSize >> 1; // half-size\n const D = Math.min(b, Math.min(x, y));\n const L = Math.max(0, x - M);\n const B = Math.max(0, y - M);\n const H = Math.max(0, Math.min(b, Math.min(L, B)));\n const O = M > 0 ? 1 / (M * Math.SQRT2) : 1e6;\n const hasSpecular = A > 0 || $ > 0;\n const W = (w * Math.PI) / 180;\n const U = Math.cos(W);\n const G = Math.sin(W);\n const N = (1 - v) * Math.SQRT2;\n const q = v * Math.SQRT2;\n const z = q > 0.001 ? 1 / q : 0;\n const Y = C > 0 ? 1 / C : 0;\n const X = (2 * x) / mapSize;\n const P = (2 * y) / mapSize;\n const V = 1 / x;\n const K = 1 / y;\n const hasDome = j > 0;\n const hasSplay = I < 1;\n\n if (hasDome) {\n if (\n !domeConstants ||\n Math.abs(j - cachedDomeDepth) > 0.5 ||\n Math.abs(x - cachedHalfW) > 1 ||\n Math.abs(y - cachedHalfH) > 1\n ) {\n domeConstants = computeDomeConstants(j, x, y);\n cachedDomeDepth = j;\n cachedHalfW = x;\n cachedHalfH = y;\n dirtyDome = true;\n }\n if (cachedF !== F) {\n xLookup = new Float32Array(F);\n cachedF = F;\n dirtyDome = true;\n }\n if (dirtyDome && xLookup && domeConstants) {\n const r2 = domeConstants.Rx * domeConstants.Rx;\n const clampVal = 0.999 * domeConstants.Rx;\n for (let col = 0; col < F; col++) {\n const ox = -((col + 0.5) * X - x);\n const clamped = ox < clampVal ? ox : clampVal;\n xLookup[col] =\n (clamped / Math.sqrt(r2 - clamped * clamped)) *\n domeConstants.scaleX;\n }\n dirtyDome = false;\n }\n }\n\n const domeX = hasDome ? xLookup : null;\n const minHalf = 0.5 * Math.min(x, y);\n const invMinHalf = minHalf > 0 ? 1 / minHalf : 0;\n const startTime = performance.now();\n\n // ── Top-left quadrant loop (mirrored into all 4 quadrants) ──────────\n for (let t = 0; t < F; t++) {\n const rowOpposite = mapSize - 1 - t;\n const oy = -((t + 0.5) * P - y);\n const iy = oy - y + D;\n const oSdfY = S ? oy - B + H : 0;\n const gy =\n hasDome && domeConstants\n ? domeGradient(oy, domeConstants.Ry, domeConstants.scaleY)\n : oy * K > 1\n ? 1\n : oy * K;\n const rawGy = oy * K > 1 ? 1 : oy * K;\n const splayY = hasSplay ? Math.max(0, 1 - (y - oy) * invMinHalf) : 0;\n\n for (let n = 0; n < F; n++) {\n const colOpposite = mapSize - 1 - n;\n const ox = -((n + 0.5) * X - x);\n const ix = ox - x + D;\n\n // SDF of rounded rectangle\n const gxMax = ix > 0 ? ix : 0;\n const gyMax = iy > 0 ? iy : 0;\n const dist2 = gxMax * gxMax + gyMax * gyMax;\n const sdf =\n (dist2 > 0 ? Math.sqrt(dist2) : 0) +\n (ix > iy ? (ix > 0 ? 0 : ix) : iy > 0 ? 0 : iy) -\n D;\n\n // 4-way index addresses\n const idxTL = (t * mapSize + n) * 4;\n const idxTR = (t * mapSize + colOpposite) * 4;\n const idxBL = (rowOpposite * mapSize + n) * 4;\n const idxBR = (rowOpposite * mapSize + colOpposite) * 4;\n\n if (!R || sdf < 0) {\n let specTL = 128, specTR = 128, specBL = 128, specBR = 128;\n\n let curGx = domeX ? domeX[n] : ox * V > 1 ? 1 : ox * V;\n let curGy = gy;\n\n // Corner splay attenuation\n if (hasSplay) {\n const splayFac = 1 - I;\n const effY = splayY * splayFac;\n const effX = Math.max(0, 1 - (x - ox) * invMinHalf) * splayFac;\n if (effY > 0.001 || effX > 0.001) {\n const prevGx = curGx;\n const prevGy = curGy;\n curGx = prevGx * (1 - effY);\n curGy = prevGy * (1 - effX);\n const prevMag = Math.sqrt(prevGx * prevGx + prevGy * prevGy);\n const newMag = Math.sqrt(curGx * curGx + curGy * curGy);\n if (newMag > 0.001) {\n const norm = prevMag / newMag;\n curGx *= norm;\n curGy *= norm;\n }\n }\n }\n\n // erf edge falloff\n let falloff = 1;\n if (S) {\n const fx = ox - L + H;\n const fy = oSdfY;\n const mx = fx > 0 ? fx : 0;\n const my = fy > 0 ? fy : 0;\n const falloffSdf =\n Math.sqrt(mx * mx + my * my) +\n (fx > fy ? (fx > 0 ? 0 : fx) : fy > 0 ? 0 : fy) -\n H;\n falloff = 0.5 * (1 + erf(falloffSdf * O));\n }\n\n const hx = 0.5 * curGx * falloff;\n const hy = 0.5 * curGy * falloff;\n\n // Displacement channel encoding (neutral = 128)\n const rTL = ((0.5 + hx) * 255 + 0.5) | 0;\n const rTR = ((0.5 - hx) * 255 + 0.5) | 0;\n const gTL = ((0.5 + hy) * 255 + 0.5) | 0;\n const gBL = ((0.5 - hy) * 255 + 0.5) | 0;\n\n // Blue channel = specular highlight mask\n if (hasSpecular) {\n const rawGx = (ox * V > 1 ? 1 : ox * V) * U;\n const rawGyProj = rawGy * G;\n const dot1 = rawGx + rawGyProj;\n const dot2 = rawGx - rawGyProj;\n const absDot1 = dot1 < 0 ? -dot1 : dot1;\n const absDot2 = dot2 < 0 ? -dot2 : dot2;\n\n let edgeAtten = 0;\n if ($ > 0) {\n edgeAtten = sdf < 0 ? 1 + sdf * Y : 0;\n if (edgeAtten < 0) edgeAtten = 0;\n }\n\n let glow1 = 0, glow2 = 0;\n if (A > 0) {\n const s1 = (absDot1 - N) * z;\n glow1 += A * Math.pow(s1 < 0 ? 0 : s1 > 1 ? 1 : s1, E) * falloff;\n const s2 = (absDot2 - N) * z;\n glow2 += A * Math.pow(s2 < 0 ? 0 : s2 > 1 ? 1 : s2, E) * falloff;\n }\n if ($ > 0) {\n glow1 += $ * edgeAtten * Math.pow(absDot1, k);\n glow2 += $ * edgeAtten * Math.pow(absDot2, k);\n }\n if (glow1 > 1) glow1 = 1;\n if (glow2 > 1) glow2 = 1;\n\n specTL = (127 * glow1 + 128 + 0.5) | 0;\n specBR = (127 * glow1 + 128 + 0.5) | 0;\n specTR = (127 * glow2 + 128 + 0.5) | 0;\n specBL = (127 * glow2 + 128 + 0.5) | 0;\n }\n\n T[idxTL] = rTL; T[idxTL + 1] = gTL; T[idxTL + 2] = specTL; T[idxTL + 3] = 255;\n T[idxTR] = rTR; T[idxTR + 1] = gTL; T[idxTR + 2] = specTR; T[idxTR + 3] = 255;\n T[idxBL] = rTL; T[idxBL + 1] = gBL; T[idxBL + 2] = specBL; T[idxBL + 3] = 255;\n T[idxBR] = rTR; T[idxBR + 1] = gBL; T[idxBR + 2] = specBR; T[idxBR + 3] = 255;\n } else {\n // Outside lens — neutral (no displacement)\n for (const idx of [idxTL, idxTR, idxBL, idxBR]) {\n T[idx] = 128; T[idx + 1] = 128; T[idx + 2] = 128; T[idx + 3] = 255;\n }\n }\n }\n }\n\n const loopMs = performance.now() - startTime;\n ctx!.putImageData(imgData!, 0, 0);\n const encodeStart = performance.now();\n const dataUrl = canvas!.toDataURL();\n const encodeMs = performance.now() - encodeStart;\n\n return { dataUrl, loopMs, encodeMs };\n },\n\n /** Release canvas memory. Call in React cleanup (useEffect return). */\n dispose() {\n if (canvas) {\n canvas.width = 0;\n canvas.height = 0;\n canvas = null;\n }\n ctx = null;\n imgData = null;\n domeConstants = null;\n cachedDomeDepth = -Infinity;\n cachedHalfW = -Infinity;\n cachedHalfH = -Infinity;\n dirtyDome = true;\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Async displacement map generator (for static / resting lenses)\n// ---------------------------------------------------------------------------\n\n/**\n * Generates a displacement map asynchronously, processing 64 rows per\n * animation frame via `setTimeout(0)` to avoid blocking the main thread.\n *\n * Returns a Blob Object URL (PNG). Caller is responsible for calling\n * `URL.revokeObjectURL` when the Lens unmounts.\n *\n * Use for static lenses where the map does not need to update every frame.\n */\nexport async function generateDisplacementMapAsync(\n canvas: HTMLCanvasElement,\n params: {\n canvasSize: number;\n lensHalfWidth: number;\n lensHalfHeight: number;\n borderRadius: number;\n depth: number;\n sdfBoundary: boolean;\n edgeFalloff: boolean;\n specularRotation?: number;\n glowStrength?: number;\n glowSpread?: number;\n glowExponent?: number;\n edgeStrength?: number;\n edgeWidth?: number;\n edgeExponent?: number;\n domeDepth?: number;\n splayAmount?: number;\n }\n): Promise<string | null> {\n const {\n canvasSize: r,\n lensHalfWidth: n,\n lensHalfHeight: l,\n borderRadius: i,\n depth: o,\n sdfBoundary: u,\n edgeFalloff: c,\n specularRotation: f = 45,\n glowStrength: d = 0,\n glowSpread: g = 1,\n glowExponent: h = 1.5,\n edgeStrength: p = 0,\n edgeWidth: m = 3,\n edgeExponent: xx = 1.5,\n domeDepth: y = 0,\n splayAmount: bv = 1,\n } = params;\n\n canvas.width = r;\n canvas.height = r;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return null;\n\n const imgD = ctx.createImageData(r, r);\n const S = Math.min(i, Math.min(n, l));\n const w = Math.max(0, n - o);\n const A = Math.max(0, l - o);\n const v = Math.max(0, Math.min(i, Math.min(w, A)));\n const E = o > 0 ? 1 / (o * Math.SQRT2) : 1e6;\n const hasSpecular = d > 0 || p > 0;\n const C = (f * Math.PI) / 180;\n const k = Math.cos(C);\n const j = Math.sin(C);\n const II = (1 - g) * Math.SQRT2;\n const TT = g * Math.SQRT2;\n const F = y > 0 ? computeDomeConstants(y, n, l) : null;\n const D = bv < 1;\n const Lv = 0.5 * Math.min(n, l);\n const Bv = Lv > 0 ? 1 / Lv : 0;\n\n for (let rowBatch = 0; rowBatch < r; rowBatch += 64) {\n const endRow = Math.min(rowBatch + 64, r);\n for (let row = rowBatch; row < endRow; row++) {\n for (let col = 0; col < r; col++) {\n const idx = (row * r + col) * 4;\n const ox = ((col + 0.5) / r) * (2 * n) - n;\n const oy = ((row + 0.5) / r) * (2 * l) - l;\n const absX = Math.abs(ox);\n const absY = Math.abs(oy);\n\n const Mv = absX - n + S;\n const Cy = absY - l + S;\n const clampX = Math.max(Mv, 0);\n const clampY = Math.max(Cy, 0);\n const dist2 = clampX * clampX + clampY * clampY;\n const sdf =\n (dist2 > 0 ? Math.sqrt(dist2) : 0) +\n Math.min(Math.max(Mv, Cy), 0) -\n S;\n\n if (!u || sdf < 0) {\n let gx: number;\n let gy: number;\n if (F) {\n gx = Math.sign(ox) * domeGradient(absX, F.Rx, F.scaleX);\n gy = Math.sign(oy) * domeGradient(absY, F.Ry, F.scaleY);\n } else {\n gx = Math.max(-1, Math.min(1, ox / n));\n gy = Math.max(-1, Math.min(1, oy / l));\n }\n\n let effGx = gx;\n let effGy = gy;\n if (D) {\n const attenY = Math.max(0, 1 - (l - absY) * Bv) * (1 - bv);\n const attenX = Math.max(0, 1 - (n - absX) * Bv) * (1 - bv);\n if (attenY > 0.001 || attenX > 0.001) {\n const oldGx = effGx;\n const oldGy = effGy;\n effGx = oldGx * (1 - attenY);\n effGy = oldGy * (1 - attenX);\n const oldMag = Math.sqrt(oldGx * oldGx + oldGy * oldGy);\n const newMag = Math.sqrt(effGx * effGx + effGy * effGy);\n if (newMag > 0.001) {\n const norm = oldMag / newMag;\n effGx *= norm;\n effGy *= norm;\n }\n }\n }\n\n let falloff = 1;\n if (c) {\n const innerX = absX - w + v;\n const innerY = absY - A + v;\n const innerSdf =\n Math.sqrt(Math.max(innerX, 0) ** 2 + Math.max(innerY, 0) ** 2) +\n Math.min(Math.max(innerX, innerY), 0) -\n v;\n falloff = 0.5 * (1 + erf(innerSdf * E));\n }\n\n imgD.data[idx] = Math.round((0.5 - 0.5 * effGx * falloff) * 255);\n imgD.data[idx + 1] = Math.round((0.5 - 0.5 * effGy * falloff) * 255);\n\n if (hasSpecular) {\n const dot = Math.abs(\n Math.max(-1, Math.min(1, ox / n)) * k +\n Math.max(-1, Math.min(1, oy / l)) * j\n );\n let glow = 0;\n if (d > 0) {\n const spread =\n TT > 0.001 ? Math.min(1, Math.max(0, dot - II) / TT) : 0;\n glow += d * Math.pow(spread, h) * falloff;\n }\n if (p > 0) {\n const edgeVal = sdf < 0 ? Math.max(0, 1 + sdf / m) : 0;\n glow += p * edgeVal * Math.pow(dot, xx);\n }\n glow = Math.min(1, glow);\n imgD.data[idx + 2] = Math.round(127 * glow + 128);\n } else {\n imgD.data[idx + 2] = 128;\n }\n } else {\n imgD.data[idx] = 128;\n imgD.data[idx + 1] = 128;\n imgD.data[idx + 2] = 128;\n }\n imgD.data[idx + 3] = 255;\n }\n }\n if (rowBatch + 64 < r) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n }\n\n ctx.putImageData(imgD, 0, 0);\n const blob = await new Promise<Blob | null>((resolve) =>\n canvas.toBlob(resolve, \"image/png\")\n );\n return blob ? URL.createObjectURL(blob) : null;\n}\n","/**\n * lensfx — WebGL Layer: VideoRefractionRenderer\n *\n * Full WebGL 1 video refraction engine — Safari fallback for live <video> frames\n * which cannot be filtered by SVG feDisplacementMap in WebKit.\n *\n * Features:\n * - Analytical circle and rounded-rect bar SDFs\n * - Multi-control dominant lens tracking with press scaling\n * - Separable 9-tap Gaussian blur pass (two-pass half-res FBO)\n * - Chromatic aberration (R, G, B pass)\n * - Adaptive specular & Apple-style vibrancy luminance correction\n */\n\n/** Options for constructing a VideoRefractionRenderer. */\nexport interface VideoRendererOptions {\n /** Canvas element to render into. */\n canvas: HTMLCanvasElement;\n /** Source video element to sample frames from. */\n video: HTMLVideoElement;\n /** Lens depth strength. Default: 2. */\n depth?: number;\n /** Chromatic aberration amount (0–1). Default: 0.5. */\n chromaAmount?: number;\n /** Angle of specular directional light (degrees). Default: 45. */\n specularRotation?: number;\n /** Specular highlight intensity. Default: 1. */\n specularStrength?: number;\n}\n\nexport const VERTEX_SHADER = `\nattribute vec2 a_pos;\nvarying vec2 v_uv;\nvoid main() {\n // Flip Y so UV (0,0) = top-left, matching HTML/CSS coordinates.\n v_uv = vec2(a_pos.x * 0.5 + 0.5, 0.5 - a_pos.y * 0.5);\n gl_Position = vec4(a_pos, 0.0, 1.0);\n}\n`;\n\nexport const BLUR_FRAGMENT_SHADER = `\nprecision highp float;\nuniform sampler2D u_source;\nuniform vec2 u_dir;\nvarying vec2 v_uv;\n\nvoid main() {\n vec4 c = texture2D(u_source, v_uv) * 0.2042;\n c += (texture2D(u_source, v_uv + 1.0 * u_dir) + texture2D(u_source, v_uv - 1.0 * u_dir)) * 0.1801;\n c += (texture2D(u_source, v_uv + 2.0 * u_dir) + texture2D(u_source, v_uv - 2.0 * u_dir)) * 0.1240;\n c += (texture2D(u_source, v_uv + 3.0 * u_dir) + texture2D(u_source, v_uv - 3.0 * u_dir)) * 0.0663;\n c += (texture2D(u_source, v_uv + 4.0 * u_dir) + texture2D(u_source, v_uv - 4.0 * u_dir)) * 0.0276;\n gl_FragColor = c;\n}\n`;\n\nexport const REFRACTION_FRAGMENT_SHADER = `\n#extension GL_OES_standard_derivatives : enable\nprecision highp float;\n\nuniform sampler2D u_video;\nuniform sampler2D u_map;\nuniform sampler2D u_blurred;\nuniform float u_baseScale[3];\nuniform float u_ratioX[3];\nuniform float u_ratioY[3];\nuniform float u_chromaAmount;\nuniform float u_specStrength;\nuniform float u_adaptStrength;\nuniform float u_specLumaLow;\nuniform float u_specLumaHigh;\nuniform float u_hasBlur;\nuniform vec4 u_bbox; // (x, y, w, h) normalised, y=0 at top\nuniform vec3 u_circles[3]; // (cx, cy, radius) in bbox pixel space\nuniform float u_scale[3]; // per-circle geometric press scale (1 = unscaled)\nuniform vec4 u_bar; // (cx, cy, w, h) in bbox pixel space; w<=0 means inactive\nuniform float u_barRadius; // corner radius for the rounded-rect bar lens\nuniform float u_barBaseScale;\nuniform float u_barRatioX;\nuniform float u_barRatioY;\nuniform vec2 u_bboxSize; // bbox (width, height) in pixels\n\nvarying vec2 v_uv;\n\nvoid main() {\n vec2 uv = v_uv;\n vec2 bMin = u_bbox.xy;\n vec2 bSize = u_bbox.zw;\n vec2 bMax = bMin + bSize;\n\n // Outside bounding box -> pass-through video\n if (uv.x < bMin.x || uv.x > bMax.x || uv.y < bMin.y || uv.y > bMax.y) {\n gl_FragColor = texture2D(u_video, uv);\n return;\n }\n\n // Map fragment UV -> displacement texture UV\n vec2 mUV = (uv - bMin) / bSize;\n\n // Analytical SDF mask (pixel-perfect at any resolution). Tracks the\n // dominant region so per-region scale/ratio can be picked up via the\n // loop-constant index (safe in WebGL 1). After the circle loop we test the\n // rounded-rect \"bar\" region (when active) and take whichever has the\n // larger mask value. domCenter/domScale track the dominant lens so the\n // displacement map is sampled in its (press-)scaled space below.\n vec2 pxPos = mUV * u_bboxSize;\n float mask = 0.0;\n float baseScale = 0.0;\n float ratioX = 0.0;\n float ratioY = 0.0;\n\n // Map-sample scale assignment, tracked SEPARATELY from the tight SDF mask: a\n // pixel adopts a circle's press scale across the union of its original and\n // scaled radius (R * max(1, s)). That way the annulus a shrunk lens vacates\n // samples empty space instead of leaving the original rim stuck behind.\n // domScale = 1 (bar + background) -> identity sample.\n vec2 domCenter = pxPos;\n float domScale = 1.0;\n float domDist = 1.0; // nearest normalised assignment distance (<1 = inside)\n\n for (int i = 0; i < 3; i++) {\n if (u_circles[i].z < 0.1) continue; // skip inactive circles\n float s = max(u_scale[i], 0.001);\n float R = u_circles[i].z;\n float rho = length(pxPos - u_circles[i].xy);\n\n // Visible lens SDF at the scaled radius -> blur / specular gating.\n float dist = rho - R * s;\n float aa = fwidth(dist);\n float m = 1.0 - smoothstep(-aa, aa, dist);\n if (m > mask) {\n mask = m;\n baseScale = u_baseScale[i];\n ratioX = u_ratioX[i];\n ratioY = u_ratioY[i];\n }\n\n // Scale assignment over max(original, scaled) radius, PLUS a small FIXED\n // pixel margin so the region boundary clears the map's hard content edge at\n // r = R. A *fractional* margin scales with R, so a big lens (play) would\n // swallow its neighbours' regions and drag their rings in. 4px clears the\n // edge's AA band without ever reaching the gap to the next control.\n float nd = rho / (R * max(1.0, s) + 4.0);\n if (nd < domDist) {\n domDist = nd;\n domCenter = u_circles[i].xy;\n domScale = s;\n }\n }\n\n // Bar (rounded-rect) SDF - only when u_bar.zw > 0. The bar never scales, so\n // it keeps the identity map sample (domScale stays 1 for bar + background).\n if (u_bar.z > 0.1 && u_bar.w > 0.1) {\n vec2 q = abs(pxPos - u_bar.xy) - u_bar.zw * 0.5 + vec2(u_barRadius);\n float barDist =\n length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - u_barRadius;\n float aaBar = fwidth(barDist);\n float mBar = 1.0 - smoothstep(-aaBar, aaBar, barDist);\n if (mBar > mask) {\n mask = mBar;\n baseScale = u_barBaseScale;\n ratioX = u_barRatioX;\n ratioY = u_barRatioY;\n }\n }\n\n // Sample the displacement map at the dominant lens's scaled coordinate, so a\n // per-lens press scale shrinks the baked pattern around its center in\n // lockstep with the SDF radius above. domScale = 1 -> identity (unscaled).\n vec2 scaledPx = domCenter + (pxPos - domCenter) / domScale;\n vec4 d = texture2D(u_map, scaledPx / u_bboxSize);\n\n // mapMatrix (feColorMatrix equivalent)\n float sr = d.r * ratioX + 0.5 * (1.0 - ratioX);\n float sg = d.g * ratioY + 0.5 * (1.0 - ratioY);\n\n // Displacement offset in full-video UV space\n vec2 off = vec2(sr - 0.5, sg - 0.5) * baseScale;\n\n // Choose source: blurred or raw video\n // Inside lens -> blurred (if blur active), outside lens -> raw\n // Blend by mask so the transition at edges is clean\n vec4 color;\n if (u_chromaAmount > 0.001) {\n float sR = 1.0 + u_chromaAmount * 0.2;\n float sG = 1.0 + u_chromaAmount * 0.1;\n if (u_hasBlur > 0.5) {\n color.r = mix(\n texture2D(u_video, clamp(uv + off * sR, 0.0, 1.0)).r,\n texture2D(u_blurred, clamp(uv + off * sR, 0.0, 1.0)).r,\n mask\n );\n color.g = mix(\n texture2D(u_video, clamp(uv + off * sG, 0.0, 1.0)).g,\n texture2D(u_blurred, clamp(uv + off * sG, 0.0, 1.0)).g,\n mask\n );\n color.b = mix(\n texture2D(u_video, clamp(uv + off, 0.0, 1.0)).b,\n texture2D(u_blurred, clamp(uv + off, 0.0, 1.0)).b,\n mask\n );\n } else {\n color.r = texture2D(u_video, clamp(uv + off * sR, 0.0, 1.0)).r;\n color.g = texture2D(u_video, clamp(uv + off * sG, 0.0, 1.0)).g;\n color.b = texture2D(u_video, clamp(uv + off, 0.0, 1.0)).b;\n }\n color.a = 1.0;\n } else {\n vec2 duv = clamp(uv + off, 0.0, 1.0);\n if (u_hasBlur > 0.5) {\n color = mix(texture2D(u_video, duv), texture2D(u_blurred, duv), mask);\n } else {\n color = texture2D(u_video, duv);\n }\n }\n\n // Adaptive specular + brightness (Apple-style vibrancy)\n // Compute perceptual luminance of the displaced video sample\n float luma = dot(color.rgb, vec3(0.299, 0.587, 0.114));\n\n // Specular: blend between additive (dark bg) and multiplicative (bright bg)\n float spec = d.b - 0.502;\n float lumaLo = min(u_specLumaLow, u_specLumaHigh);\n float lumaHi = max(u_specLumaLow, u_specLumaHigh);\n float darkBlend = smoothstep(lumaLo, lumaHi, luma);\n vec3 specAdd = color.rgb + spec * u_specStrength;\n vec3 specMul = color.rgb * (1.0 - spec * u_specStrength);\n color.rgb = mix(specAdd, specMul, darkBlend);\n color.rgb = max(color.rgb, vec3(0.0));\n\n // Brightness: pull toward mid-gray - darkens bright areas, brightens dark\n float correction = (0.5 - luma) * u_adaptStrength * mask;\n color.rgb += correction;\n\n gl_FragColor = color;\n}\n`;\n\nfunction createShader(gl: WebGLRenderingContext, type: number, src: string): WebGLShader | null {\n const shader = gl.createShader(type);\n if (!shader) return null;\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n console.error(\"Shader compile error:\", gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n return null;\n }\n return shader;\n}\n\nfunction createProgram(\n gl: WebGLRenderingContext,\n vsSrc: string,\n fsSrc: string\n): WebGLProgram | null {\n const vs = createShader(gl, gl.VERTEX_SHADER, vsSrc);\n const fs = createShader(gl, gl.FRAGMENT_SHADER, fsSrc);\n if (!vs || !fs) return null;\n\n const prog = gl.createProgram();\n if (!prog) return null;\n\n gl.attachShader(prog, vs);\n gl.attachShader(prog, fs);\n gl.linkProgram(prog);\n\n gl.detachShader(prog, vs);\n gl.detachShader(prog, fs);\n gl.deleteShader(vs);\n gl.deleteShader(fs);\n\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {\n console.error(\"Program link error:\", gl.getProgramInfoLog(prog));\n gl.deleteProgram(prog);\n return null;\n }\n return prog;\n}\n\nexport interface VideoLensConfig {\n circles: Array<{ cx: number; cy: number; radius: number; scale: number; baseScale: number; ratioX: number; ratioY: number }>;\n bar?: { cx: number; cy: number; w: number; h: number; radius: number; baseScale: number; ratioX: number; ratioY: number };\n bbox: { x: number; y: number; w: number; h: number };\n bboxSize: { w: number; h: number };\n chromaAmount: number;\n specStrength: number;\n adaptStrength: number;\n specLumaLow: number;\n specLumaHigh: number;\n hasBlur: boolean;\n}\n\nexport class VideoRefractionRenderer {\n private gl: WebGLRenderingContext;\n private quadBuffer: WebGLBuffer;\n private blurProgram: WebGLProgram;\n private refractionProgram: WebGLProgram;\n\n private videoTexture: WebGLTexture;\n private mapTexture: WebGLTexture;\n private blurFboA: WebGLFramebuffer | null = null;\n private blurTexA: WebGLTexture | null = null;\n private blurFboB: WebGLFramebuffer | null = null;\n private blurTexB: WebGLTexture | null = null;\n private fboWidth = 0;\n private fboHeight = 0;\n\n constructor(canvas: HTMLCanvasElement) {\n const gl = canvas.getContext(\"webgl\", { alpha: false, antialias: false, premultipliedAlpha: false });\n if (!gl) throw new Error(\"WebGL not supported\");\n this.gl = gl;\n\n // Enable OES_standard_derivatives for fwidth()\n gl.getExtension(\"OES_standard_derivatives\");\n\n // Quad geometry covering NDC [-1, 1]\n const quad = new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]);\n this.quadBuffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, quad, gl.STATIC_DRAW);\n\n this.blurProgram = createProgram(gl, VERTEX_SHADER, BLUR_FRAGMENT_SHADER)!;\n this.refractionProgram = createProgram(gl, VERTEX_SHADER, REFRACTION_FRAGMENT_SHADER)!;\n\n this.videoTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.videoTexture);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n this.mapTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.mapTexture);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n }\n\n public setDisplacementMap(image: HTMLImageElement | HTMLCanvasElement) {\n const gl = this.gl;\n gl.bindTexture(gl.TEXTURE_2D, this.mapTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n }\n\n private initBlurFBO(width: number, height: number) {\n const gl = this.gl;\n const halfW = width >> 1;\n const halfH = height >> 1;\n\n if (this.fboWidth === halfW && this.fboHeight === halfH) return;\n this.fboWidth = halfW;\n this.fboHeight = halfH;\n\n const createFBO = () => {\n const tex = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, tex);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, halfW, halfH, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n\n const fbo = gl.createFramebuffer()!;\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);\n return { fbo, tex };\n };\n\n const resA = createFBO();\n this.blurFboA = resA.fbo;\n this.blurTexA = resA.tex;\n\n const resB = createFBO();\n this.blurFboB = resB.fbo;\n this.blurTexB = resB.tex;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n\n public render(video: HTMLVideoElement, config: VideoLensConfig) {\n const gl = this.gl;\n const width = gl.canvas.width;\n const height = gl.canvas.height;\n\n // 1. Upload Video Frame\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.videoTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, video);\n\n // 2. Perform 2-Pass Separable Gaussian Blur if active\n if (config.hasBlur) {\n this.initBlurFBO(width, height);\n\n // Pass 1: Horizontal Blur -> FBO A\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.blurFboA);\n gl.viewport(0, 0, this.fboWidth, this.fboHeight);\n gl.useProgram(this.blurProgram);\n\n const aPosBlur = gl.getAttribLocation(this.blurProgram, \"a_pos\");\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.enableVertexAttribArray(aPosBlur);\n gl.vertexAttribPointer(aPosBlur, 2, gl.FLOAT, false, 0, 0);\n\n gl.uniform1i(gl.getUniformLocation(this.blurProgram, \"u_source\"), 0);\n gl.uniform2f(gl.getUniformLocation(this.blurProgram, \"u_dir\"), 1.0 / this.fboWidth, 0.0);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n // Pass 2: Vertical Blur -> FBO B\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.blurFboB);\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, this.blurTexA);\n gl.uniform1i(gl.getUniformLocation(this.blurProgram, \"u_source\"), 2);\n gl.uniform2f(gl.getUniformLocation(this.blurProgram, \"u_dir\"), 0.0, 1.0 / this.fboHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n // 3. Final Refraction Pass -> Screen Canvas\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, width, height);\n gl.useProgram(this.refractionProgram);\n\n const aPos = gl.getAttribLocation(this.refractionProgram, \"a_pos\");\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.enableVertexAttribArray(aPos);\n gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);\n\n // Bind textures\n gl.uniform1i(gl.getUniformLocation(this.refractionProgram, \"u_video\"), 0);\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.mapTexture);\n gl.uniform1i(gl.getUniformLocation(this.refractionProgram, \"u_map\"), 1);\n\n if (config.hasBlur && this.blurTexB) {\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, this.blurTexB);\n gl.uniform1i(gl.getUniformLocation(this.refractionProgram, \"u_blurred\"), 2);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_hasBlur\"), 1.0);\n } else {\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_hasBlur\"), 0.0);\n }\n\n // Pass Circle Uniforms\n const circlesArr = new Float32Array(9);\n const scaleArr = new Float32Array(3);\n const baseScaleArr = new Float32Array(3);\n const ratioXArr = new Float32Array(3);\n const ratioYArr = new Float32Array(3);\n\n for (let i = 0; i < 3; i++) {\n if (i < config.circles.length) {\n const c = config.circles[i];\n circlesArr[i * 3 + 0] = c.cx;\n circlesArr[i * 3 + 1] = c.cy;\n circlesArr[i * 3 + 2] = c.radius;\n scaleArr[i] = c.scale;\n baseScaleArr[i] = c.baseScale;\n ratioXArr[i] = c.ratioX;\n ratioYArr[i] = c.ratioY;\n }\n }\n\n gl.uniform3fv(gl.getUniformLocation(this.refractionProgram, \"u_circles\"), circlesArr);\n gl.uniform1fv(gl.getUniformLocation(this.refractionProgram, \"u_scale\"), scaleArr);\n gl.uniform1fv(gl.getUniformLocation(this.refractionProgram, \"u_baseScale\"), baseScaleArr);\n gl.uniform1fv(gl.getUniformLocation(this.refractionProgram, \"u_ratioX\"), ratioXArr);\n gl.uniform1fv(gl.getUniformLocation(this.refractionProgram, \"u_ratioY\"), ratioYArr);\n\n // Pass Bar Uniforms\n if (config.bar) {\n gl.uniform4f(\n gl.getUniformLocation(this.refractionProgram, \"u_bar\"),\n config.bar.cx,\n config.bar.cy,\n config.bar.w,\n config.bar.h\n );\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_barRadius\"), config.bar.radius);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_barBaseScale\"), config.bar.baseScale);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_barRatioX\"), config.bar.ratioX);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_barRatioY\"), config.bar.ratioY);\n } else {\n gl.uniform4f(gl.getUniformLocation(this.refractionProgram, \"u_bar\"), 0, 0, -1, -1);\n }\n\n // Global Lens Uniforms\n gl.uniform4f(\n gl.getUniformLocation(this.refractionProgram, \"u_bbox\"),\n config.bbox.x,\n config.bbox.y,\n config.bbox.w,\n config.bbox.h\n );\n gl.uniform2f(\n gl.getUniformLocation(this.refractionProgram, \"u_bboxSize\"),\n config.bboxSize.w,\n config.bboxSize.h\n );\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_chromaAmount\"), config.chromaAmount);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_specStrength\"), config.specStrength);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_adaptStrength\"), config.adaptStrength);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_specLumaLow\"), config.specLumaLow);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_specLumaHigh\"), config.specLumaHigh);\n\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n public dispose() {\n const gl = this.gl;\n gl.deleteBuffer(this.quadBuffer);\n gl.deleteProgram(this.blurProgram);\n gl.deleteProgram(this.refractionProgram);\n gl.deleteTexture(this.videoTexture);\n gl.deleteTexture(this.mapTexture);\n if (this.blurFboA) gl.deleteFramebuffer(this.blurFboA);\n if (this.blurTexA) gl.deleteTexture(this.blurTexA);\n if (this.blurFboB) gl.deleteFramebuffer(this.blurFboB);\n if (this.blurTexB) gl.deleteTexture(this.blurTexB);\n }\n}\n","/**\n * lensfx — WebGL Layer: QRRefractionRenderer\n *\n * Full WebGL 2 (#version 300 es) interactive QR code refraction engine.\n * Uses an O(1) uniform texture occupancy grid for real-time liquid distortion\n * through a 33×33 QR matrix.\n *\n * Features:\n * - WebGL 2 (#version 300 es)\n * - O(1) dot occupancy texture lookup\n * - Analytical eye rounded-rect SDFs with hover scaling\n * - Attenuated displacement for eye corner anchors\n * - Chromatic aberration (scaleR = 1 + 2*chroma, scaleG = 1 + 1*chroma, scaleB = 1)\n */\n\n/** Options for constructing a QRRefractionRenderer. */\nexport interface QRRendererOptions {\n /** Canvas element to render into. */\n canvas: HTMLCanvasElement;\n /** QR matrix data (boolean 33×33 grid, row-major). */\n qrMatrix: boolean[][];\n /** Lens depth strength. Default: 2. */\n depth?: number;\n /** Chromatic aberration amount (0–1). Default: 0.3. */\n chromaAmount?: number;\n /** Dot radius as a fraction of cell size. Default: 0.4. */\n dotRadius?: number;\n}\n\nexport const QR_VERTEX_SHADER = `#version 300 es\nin vec2 a_position;\nout vec2 v_uv;\n\nvoid main() {\n v_uv = (a_position * 0.5) + 0.5;\n gl_Position = vec4(a_position, 0.0, 1.0);\n}\n`;\n\nexport const QR_FRAGMENT_SHADER = `#version 300 es\nprecision highp float;\nprecision highp sampler2D;\n\nin vec2 v_uv;\nout vec4 fragColor;\n\nuniform float u_dotRadius;\nuniform vec3 u_backgroundColor;\nuniform sampler2D u_PaintingTexture;\n\n// QR dot grid for the O(1) occupancy lookup (replaces a per-pixel scan over\n// every dot). Occupancy is matrixLength x matrixLength, R8, 0/1 per module.\nuniform sampler2D u_occupancyTexture;\nuniform float u_gridOriginUV; // padding / size, in UV\nuniform float u_cellUV; // cellSize / size, in UV\nuniform float u_invCellUV; // 1 / cellUV - avoids a per-pixel divide\nuniform int u_matrixLength;\n\nuniform sampler2D u_displacementMap;\nuniform sampler2D u_paintingColorTexture;\nuniform int u_displacementActive;\nuniform vec2 u_lensOrigin;\nuniform vec2 u_lensSize;\nuniform vec2 u_displacementScale;\nuniform float u_chromaAmount;\n\n// Eye uniforms (3 corner finder groups)\nuniform vec2 u_eyeCenter[3];\nuniform vec3 u_eyeHalf[3]; // x=outer, y=mid, z=inner half-size\nuniform vec3 u_eyeRadius[3]; // x=outer, y=mid, z=inner corner radius\nuniform vec3 u_eyeColor[3]; // fill color per group (animated)\nuniform float u_eyeScale[3]; // hover scale per group\nuniform float u_eyeRefractionScale; // 0-1 multiplier for eye displacement\n\n// QR dots sit on a uniform grid, and the radius (~0.35 of a cell) never\n// spills past a cell boundary, so the nearest dot is always the one in pos's\n// own cell. Map pos -> module (i,j), check occupancy, then test distance to\n// that module's center.\nfloat testDot(vec2 pos, float r2) {\n int i = int(floor((pos.x - u_gridOriginUV) * u_invCellUV));\n int j = int(floor((pos.y - u_gridOriginUV) * u_invCellUV));\n if (i < 0 || i >= u_matrixLength || j < 0 || j >= u_matrixLength)\n return 1.0;\n if (texelFetch(u_occupancyTexture, ivec2(i, j), 0).r < 0.5)\n return 1.0;\n vec2 c = vec2(u_gridOriginUV) + (vec2(float(i), float(j)) + 0.5) * u_cellUV;\n vec2 d = pos - c;\n return dot(d, d) < r2 ? 0.0 : 1.0;\n}\n\nfloat roundedRectSDF(vec2 p, float half_, float radius) {\n vec2 d = abs(p) - vec2(half_) + vec2(radius);\n return length(max(d, vec2(0.0))) + min(max(d.x, d.y), 0.0) - radius;\n}\n\n// Test all eye groups. Returns vec4(color, 1.0) if inside an eye, vec4(0) if not.\nvec4 testEyes(vec2 pos) {\n for (int g = 0; g < 3; g++) {\n vec2 local = (pos - u_eyeCenter[g]) / u_eyeScale[g];\n if (roundedRectSDF(local, u_eyeHalf[g].z, u_eyeRadius[g].z) < 0.0)\n return vec4(u_eyeColor[g], 1.0);\n if (roundedRectSDF(local, u_eyeHalf[g].y, u_eyeRadius[g].y) < 0.0)\n return vec4(u_backgroundColor, 1.0);\n if (roundedRectSDF(local, u_eyeHalf[g].x, u_eyeRadius[g].x) < 0.0)\n return vec4(u_eyeColor[g], 1.0);\n }\n return vec4(0.0);\n}\n\n// Test scene (eyes + dots) at a position, returning color for a non-displaced pixel.\n// Returns vec4(color, 1.0) for solid, vec4(0, 0, 0, -1.0) for dot hole (discard).\nvec4 sampleStatic(vec2 pos, float r2) {\n vec4 eye = testEyes(pos);\n if (eye.a > 0.5) return eye;\n float hole = testDot(pos, r2);\n if (hole < 0.5) return vec4(0.0, 0.0, 0.0, -1.0);\n return vec4(u_backgroundColor, 1.0);\n}\n\nvoid main() {\n vec2 uv = vec2(v_uv.x, 1.0 - v_uv.y);\n float paint = texture(u_PaintingTexture, uv).r;\n float r2 = pow(u_dotRadius * (1.0 - paint), 2.0);\n\n if (u_displacementActive == 0) {\n vec4 s = sampleStatic(uv, r2);\n if (s.a < 0.0) discard;\n fragColor = s;\n return;\n }\n\n vec2 lensUV = (uv - u_lensOrigin) / u_lensSize;\n bool insideLens = lensUV.x >= 0.0 && lensUV.x <= 1.0 &&\n lensUV.y >= 0.0 && lensUV.y <= 1.0;\n\n if (!insideLens) {\n vec4 s = sampleStatic(uv, r2);\n if (s.a < 0.0) discard;\n fragColor = s;\n return;\n }\n\n vec4 dispSample = texture(u_displacementMap, lensUV);\n if (dispSample.a < 0.01) {\n vec4 s = sampleStatic(uv, r2);\n if (s.a < 0.0) discard;\n fragColor = s;\n return;\n }\n vec2 disp = (dispSample.rg - 0.5) * u_displacementScale;\n\n float scaleR = 1.0 + u_chromaAmount * 2.0;\n float scaleG = 1.0 + u_chromaAmount * 1.0;\n\n vec2 uvR = uv + disp * scaleR;\n vec2 uvG = uv + disp * scaleG;\n vec2 uvB = uv + disp;\n\n // Attenuated displacement for eyes\n vec2 eyeDisp = disp * u_eyeRefractionScale;\n vec2 eyeUvR = uv + eyeDisp * scaleR;\n vec2 eyeUvG = uv + eyeDisp * scaleG;\n vec2 eyeUvB = uv + eyeDisp;\n\n // Per-channel: test eyes at attenuated displacement, dots at full displacement\n vec4 eyeR = testEyes(eyeUvR);\n vec4 eyeG = testEyes(eyeUvG);\n vec4 eyeB = testEyes(eyeUvB);\n\n float r, g, b;\n\n if (eyeR.a > 0.5) {\n r = eyeR.r;\n } else {\n float holeR = testDot(uvR, r2);\n float paintR = texture(u_paintingColorTexture, uvR).r;\n r = mix(paintR, u_backgroundColor.r, holeR);\n }\n\n if (eyeG.a > 0.5) {\n g = eyeG.g;\n } else {\n float holeG = testDot(uvG, r2);\n float paintG = texture(u_paintingColorTexture, uvG).g;\n g = mix(paintG, u_backgroundColor.g, holeG);\n }\n\n if (eyeB.a > 0.5) {\n b = eyeB.b;\n } else {\n float holeB = testDot(uvB, r2);\n float paintB = texture(u_paintingColorTexture, uvB).b;\n b = mix(paintB, u_backgroundColor.b, holeB);\n }\n\n fragColor = vec4(r, g, b, 1.0);\n}\n`;\n\nfunction createShader300(gl: WebGL2RenderingContext, type: number, src: string): WebGLShader {\n const shader = gl.createShader(type);\n if (!shader) throw new Error(\"Failed to create shader\");\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const info = gl.getShaderInfoLog(shader);\n gl.deleteShader(shader);\n throw new Error(`Shader compilation error: ${info ?? \"\"}`);\n }\n return shader;\n}\n\nexport interface QREyeConfig {\n center: [number, number];\n half: [number, number, number];\n radius: [number, number, number];\n color: [number, number, number];\n scale: number;\n}\n\nexport interface QRRendererInit {\n canvas: HTMLCanvasElement;\n size: number;\n matrixLength: number;\n occupancyMatrix: Uint8Array;\n gridOriginUV: number;\n cellUV: number;\n dotRadius: number;\n backgroundColor?: [number, number, number];\n}\n\nexport class QRRefractionRenderer {\n private gl: WebGL2RenderingContext;\n private program: WebGLProgram;\n private quadBuffer: WebGLBuffer;\n\n private occupancyTexture: WebGLTexture;\n private displacementTexture: WebGLTexture;\n private paintingTexture: WebGLTexture;\n private paintingColorTexture: WebGLTexture;\n\n private matrixLength: number;\n private gridOriginUV: number;\n private cellUV: number;\n private dotRadius: number;\n private backgroundColor: [number, number, number];\n\n constructor(init: QRRendererInit) {\n const gl = init.canvas.getContext(\"webgl2\", { alpha: true, antialias: false, premultipliedAlpha: false });\n if (!gl) throw new Error(\"WebGL 2 not supported\");\n this.gl = gl;\n\n this.matrixLength = init.matrixLength;\n this.gridOriginUV = init.gridOriginUV;\n this.cellUV = init.cellUV;\n this.dotRadius = init.dotRadius;\n this.backgroundColor = init.backgroundColor ?? [1, 1, 1];\n\n const vs = createShader300(gl, gl.VERTEX_SHADER, QR_VERTEX_SHADER);\n const fs = createShader300(gl, gl.FRAGMENT_SHADER, QR_FRAGMENT_SHADER);\n const prog = gl.createProgram()!;\n gl.attachShader(prog, vs);\n gl.attachShader(prog, fs);\n gl.linkProgram(prog);\n\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {\n throw new Error(`QR Program link error: ${gl.getProgramInfoLog(prog) ?? \"\"}`);\n }\n this.program = prog;\n\n const quad = new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]);\n this.quadBuffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, quad, gl.STATIC_DRAW);\n\n // Occupancy Texture (R8)\n this.occupancyTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.occupancyTexture);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.R8,\n this.matrixLength,\n this.matrixLength,\n 0,\n gl.RED,\n gl.UNSIGNED_BYTE,\n init.occupancyMatrix\n );\n\n // Displacement Map Texture\n this.displacementTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.displacementTexture);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n // Painting Textures (1x1 fallback)\n const blank1x1 = new Uint8Array([0, 0, 0, 0]);\n this.paintingTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.paintingTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, blank1x1);\n\n this.paintingColorTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.paintingColorTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, blank1x1);\n }\n\n public setDisplacementMap(image: HTMLImageElement | HTMLCanvasElement) {\n const gl = this.gl;\n gl.bindTexture(gl.TEXTURE_2D, this.displacementTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n }\n\n public render(params: {\n displacementActive: boolean;\n lensOrigin: [number, number];\n lensSize: [number, number];\n displacementScale: [number, number];\n chromaAmount: number;\n eyes: QREyeConfig[];\n eyeRefractionScale?: number;\n }) {\n const gl = this.gl;\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n gl.useProgram(this.program);\n\n const aPos = gl.getAttribLocation(this.program, \"a_position\");\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.enableVertexAttribArray(aPos);\n gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);\n\n // Bind Occupancy\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.occupancyTexture);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_occupancyTexture\"), 0);\n\n // Bind Displacement Map\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.displacementTexture);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_displacementMap\"), 1);\n\n // Bind Painting Textures\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, this.paintingTexture);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_PaintingTexture\"), 2);\n\n gl.activeTexture(gl.TEXTURE3);\n gl.bindTexture(gl.TEXTURE_2D, this.paintingColorTexture);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_paintingColorTexture\"), 3);\n\n // Uniforms\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_dotRadius\"), this.dotRadius);\n gl.uniform3fv(gl.getUniformLocation(this.program, \"u_backgroundColor\"), this.backgroundColor);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_gridOriginUV\"), this.gridOriginUV);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_cellUV\"), this.cellUV);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_invCellUV\"), 1.0 / this.cellUV);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_matrixLength\"), this.matrixLength);\n\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_displacementActive\"), params.displacementActive ? 1 : 0);\n gl.uniform2f(gl.getUniformLocation(this.program, \"u_lensOrigin\"), params.lensOrigin[0], params.lensOrigin[1]);\n gl.uniform2f(gl.getUniformLocation(this.program, \"u_lensSize\"), params.lensSize[0], params.lensSize[1]);\n gl.uniform2f(gl.getUniformLocation(this.program, \"u_displacementScale\"), params.displacementScale[0], params.displacementScale[1]);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_chromaAmount\"), params.chromaAmount);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_eyeRefractionScale\"), params.eyeRefractionScale ?? 0.2);\n\n // Eyes\n const centers = new Float32Array(6);\n const halfs = new Float32Array(9);\n const radii = new Float32Array(9);\n const colors = new Float32Array(9);\n const scales = new Float32Array(3);\n\n for (let i = 0; i < 3; i++) {\n if (i < params.eyes.length) {\n const e = params.eyes[i];\n centers[i * 2 + 0] = e.center[0];\n centers[i * 2 + 1] = e.center[1];\n halfs[i * 3 + 0] = e.half[0];\n halfs[i * 3 + 1] = e.half[1];\n halfs[i * 3 + 2] = e.half[2];\n radii[i * 3 + 0] = e.radius[0];\n radii[i * 3 + 1] = e.radius[1];\n radii[i * 3 + 2] = e.radius[2];\n colors[i * 3 + 0] = e.color[0];\n colors[i * 3 + 1] = e.color[1];\n colors[i * 3 + 2] = e.color[2];\n scales[i] = e.scale;\n }\n }\n\n gl.uniform2fv(gl.getUniformLocation(this.program, \"u_eyeCenter\"), centers);\n gl.uniform3fv(gl.getUniformLocation(this.program, \"u_eyeHalf\"), halfs);\n gl.uniform3fv(gl.getUniformLocation(this.program, \"u_eyeRadius\"), radii);\n gl.uniform3fv(gl.getUniformLocation(this.program, \"u_eyeColor\"), colors);\n gl.uniform1fv(gl.getUniformLocation(this.program, \"u_eyeScale\"), scales);\n\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n public dispose() {\n const gl = this.gl;\n gl.deleteBuffer(this.quadBuffer);\n gl.deleteProgram(this.program);\n gl.deleteTexture(this.occupancyTexture);\n gl.deleteTexture(this.displacementTexture);\n gl.deleteTexture(this.paintingTexture);\n gl.deleteTexture(this.paintingColorTexture);\n }\n}\n","\"use client\";\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n DEFAULT_LENS_PARAMS,\n LensParams,\n MultiLensSlot,\n SingleLensSlot,\n} from \"../../engine/types\";\nimport {\n colorMatrixValues,\n createDisplacementMapGeneratorSync,\n generateDisplacementMapAsync,\n getSvgMaskDataUri,\n} from \"../../engine/math\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isMotionValue(val: unknown): val is { get: () => any; on: (event: string, callback: () => void) => () => void } {\n return (\n typeof val === \"object\" &&\n val !== null &&\n \"get\" in val &&\n \"on\" in val\n );\n}\n\nfunction resolveValue<T>(val: T | { get: () => T }): T {\n if (isMotionValue(val)) {\n return (val as { get: () => T }).get();\n }\n return val as T;\n}\n\nconst GeneralContext = createContext<any>(null);\nconst RefractionGroupContext = createContext<{ inGroup: boolean; gap: number }>({\n inGroup: false,\n gap: 0,\n});\n\nconst BLANK_1PX_PNG =\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\";\n\nexport interface AaveGlassProps {\n children?: React.ReactNode;\n lens?: Partial<LensParams>;\n x?: number | { get: () => number; on: any };\n y?: number | { get: () => number; on: any };\n lensW?: number | { get: () => number; on: any };\n lensH?: number | { get: () => number; on: any };\n borderRadius?: number | { get: () => number; on: any };\n autoBorderRadius?: boolean;\n displacementMapUrl?: string;\n overlay?: React.ReactNode;\n showOutline?: boolean;\n onLensMapChange?: (url: string) => void;\n refractionTarget?: React.ReactNode;\n tintColor?: string;\n tintOpacity?: number | { get: () => number; on: any };\n tintBlur?: number | { get: () => number; on: any };\n shadowOpacity?: number | { get: () => number; on: any };\n restShadowOpacity?: number | { get: () => number; on: any };\n edgeBias?: number | { get: () => number; on: any };\n onGenerationTime?: (time: { total: number; loopMs: number; encodeMs: number }) => void;\n regenSettle?: number;\n filterResolution?: number;\n zoom?: number;\n depth?: number;\n scale?: number;\n regionScale?: number;\n regionOriginX?: number;\n regionOriginY?: number;\n onFilterStats?: any;\n lenses?: any[];\n pauseOffscreen?: boolean;\n offscreenMargin?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function AaveGlass({\n children,\n lens,\n x = 0.5,\n y = 0.5,\n lensW,\n lensH,\n borderRadius,\n autoBorderRadius,\n displacementMapUrl,\n overlay,\n showOutline = false,\n onLensMapChange,\n refractionTarget,\n tintColor,\n tintOpacity,\n tintBlur,\n shadowOpacity,\n restShadowOpacity,\n edgeBias,\n onGenerationTime,\n regenSettle = 0,\n filterResolution = 1,\n lenses,\n pauseOffscreen = false,\n offscreenMargin = \"300px 0px\",\n className,\n style,\n ...restProps\n}: AaveGlassProps) {\n const isMultiLens = Boolean(lenses && lenses.length > 0);\n\n // Platform detections\n const [isIOS, setIsIOS] = useState(false);\n useEffect(() => {\n if (typeof navigator !== \"undefined\") {\n setIsIOS(\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1)\n );\n }\n }, []);\n\n const [isSafari, setIsSafari] = useState(false);\n useEffect(() => {\n if (typeof navigator !== \"undefined\") {\n setIsSafari(\n /^((?!chrome|chromium|android).)*safari/i.test(navigator.userAgent)\n );\n }\n }, []);\n\n const generalCtx = useContext(GeneralContext);\n const rawId = useId().replace(/:/g, \"\");\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Visibility tracking\n const [isVisible, setIsVisible] = useState(true);\n useEffect(() => {\n if (!pauseOffscreen || !containerRef.current) return;\n const observer = new IntersectionObserver(\n ([entry]) => setIsVisible(entry.isIntersecting),\n { rootMargin: offscreenMargin }\n );\n observer.observe(containerRef.current);\n return () => observer.disconnect();\n }, [pauseOffscreen, offscreenMargin]);\n\n const [containerSize, setContainerSize] = useState({ w: 0, h: 0 });\n const filterVersionRef = useRef(0);\n const staticCanvasRef = useRef<HTMLCanvasElement | null>(null);\n\n const activeParams: LensParams = { ...DEFAULT_LENS_PARAMS, ...lens };\n\n const effectiveLensW = lensW ?? activeParams.lensW;\n const effectiveLensH = lensH ?? activeParams.lensH;\n const effectiveBorderRadius = autoBorderRadius\n ? Math.min(resolveValue(effectiveLensW), resolveValue(effectiveLensH))\n : borderRadius ?? activeParams.borderRadius;\n\n const isAnimated =\n isMotionValue(effectiveLensW) ||\n isMotionValue(effectiveLensH) ||\n isMotionValue(effectiveBorderRadius);\n\n // DOM element references\n const contentLayerRef = useRef<HTMLDivElement | null>(null);\n const refractionTargetLayerRef = useRef<HTMLDivElement | null>(null);\n const overlayLayerRef = useRef<HTMLDivElement | null>(null);\n const mainFilterRef = useRef<SVGFilterElement | null>(null);\n const mainFeImageRef = useRef<SVGFEImageElement | null>(null);\n const mainColorMatrixRef = useRef<SVGFEColorMatrixElement | null>(null);\n const edgeShadowRef = useRef<HTMLDivElement | null>(null);\n const restShadowRef = useRef<HTMLDivElement | null>(null);\n const outlineRef = useRef<HTMLDivElement | null>(null);\n const brightnessLayerRef = useRef<HTMLDivElement | null>(null);\n const tintContainerRef = useRef<HTMLDivElement | null>(null);\n const backdropLayerRef = useRef<HTMLDivElement | null>(null);\n const tintRectRef = useRef<SVGRectElement | null>(null);\n\n const currentMaskKey = useRef<string | null>(null);\n const currentMapDataUrl = useRef<string | null>(null);\n\n // Multi-lens and single-lens pools\n const singleLensPool = useRef<SingleLensSlot[]>(\n Array.from({ length: 4 }, () => ({\n filterEl: null,\n lensEls: [],\n dispEls: [],\n mapMatrixEl: null,\n feImageEl: null,\n version: 0,\n assignedTo: null,\n assignedRect: null,\n }))\n );\n\n const multiLensPool = useRef<MultiLensSlot[]>(\n Array.from({ length: 8 }, () => ({\n filterEl: null,\n feDispEl: null,\n subSlots: Array.from({ length: 4 }, () => ({\n feImageEl: null,\n feColorMatrixEl: null,\n feMaskEl: null,\n feMaskColorMatrixEl: null,\n assignedLensId: null,\n lastHref: \"\",\n lastX: \"\",\n lastY: \"\",\n lastW: \"\",\n lastH: \"\",\n lastColorMatrix: \"\",\n lastMaskKey: \"\",\n lastMaskColorMatrix: \"\",\n })),\n assignedTo: null,\n version: 0,\n lastDispScale: \"\",\n lastFilterW: \"\",\n lastFilterH: \"\",\n }))\n );\n\n const poolFilterRefs = useRef(\n Array.from({ length: 4 }, (_, idx) => ({\n get current() {\n return singleLensPool.current[idx].filterEl;\n },\n set current(el: SVGFilterElement | null) {\n singleLensPool.current[idx].filterEl = el;\n },\n }))\n );\n\n // Resize observation\n useLayoutEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const update = () => {\n const rect = el.getBoundingClientRect();\n setContainerSize((prev) =>\n prev.w === rect.width && prev.h === rect.height\n ? prev\n : { w: rect.width, h: rect.height }\n );\n };\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n window.addEventListener(\"resize\", update);\n return () => {\n ro.disconnect();\n window.removeEventListener(\"resize\", update);\n };\n }, []);\n\n const { w: containerW, h: containerH } = containerSize;\n\n // Max displacement scale and feColorMatrix scaling factors\n const maxScale = Math.max(activeParams.scaleX, activeParams.scaleY);\n const scaleRatioX = maxScale > 0 ? activeParams.scaleX / maxScale : 0;\n const scaleRatioY = maxScale > 0 ? activeParams.scaleY / maxScale : 0;\n const matrixString = colorMatrixValues(scaleRatioX, scaleRatioY);\n const needsMatrix = scaleRatioX !== 1 || scaleRatioY !== 1;\n\n // Real-time batch layout update function\n const updateLayout = useCallback(() => {\n if (!containerRef.current || !isVisible) return;\n\n const curX = resolveValue(x);\n const curY = resolveValue(y);\n const curW = resolveValue(effectiveLensW);\n const curH = resolveValue(effectiveLensH);\n const curRadius = resolveValue(effectiveBorderRadius);\n\n const w = containerW;\n const h = containerH;\n\n // Center coordinates\n const posX = typeof curX === \"number\" && curX <= 1 ? curX * w : curX;\n const posY = typeof curY === \"number\" && curY <= 1 ? curY * h : curY;\n\n // Top-left bounding box of the lens\n const lensLeft = posX - curW / 2;\n const lensTop = posY - curH / 2;\n\n // 1. Update Tint / Backdrop-filter container\n if (backdropLayerRef.current) {\n backdropLayerRef.current.style.transform = `translate3d(${lensLeft}px, ${lensTop}px, 0)`;\n backdropLayerRef.current.style.width = `${curW}px`;\n backdropLayerRef.current.style.height = `${curH}px`;\n backdropLayerRef.current.style.borderRadius = `${curRadius}px`;\n\n const { uri, key } = getSvgMaskDataUri(curW, curH, curRadius);\n if (currentMaskKey.current !== key) {\n const maskCss = `url(\"${uri}\")`;\n backdropLayerRef.current.style.maskImage = maskCss;\n backdropLayerRef.current.style.setProperty(\"-webkit-mask-image\", maskCss);\n backdropLayerRef.current.style.maskSize = \"100% 100%\";\n backdropLayerRef.current.style.setProperty(\"-webkit-mask-size\", \"100% 100%\");\n currentMaskKey.current = key;\n }\n }\n\n // 2. Update Tint Box (if tint is specified)\n if (tintContainerRef.current) {\n tintContainerRef.current.style.transform = `translate(${lensLeft}px, ${lensTop}px)`;\n tintContainerRef.current.style.width = `${curW}px`;\n tintContainerRef.current.style.height = `${curH}px`;\n tintContainerRef.current.style.borderRadius = `${curRadius}px`;\n\n const tColor = tintColor ?? \"white\";\n const tOpacity = tintOpacity !== undefined ? resolveValue(tintOpacity) : 1;\n tintContainerRef.current.style.background = `color-mix(in srgb, ${tColor} ${\n 100 * tOpacity\n }%, transparent)`;\n tintContainerRef.current.style.opacity = \"1\";\n\n const tBlur = tintBlur !== undefined ? resolveValue(tintBlur) : 0;\n const blurVal = tBlur > 0 ? `blur(${tBlur}px)` : \"none\";\n tintContainerRef.current.style.backdropFilter = blurVal;\n tintContainerRef.current.style.setProperty(\"-webkit-backdrop-filter\", blurVal);\n }\n\n // 3. Update Shadows (Edge and Rest shadows)\n if (edgeShadowRef.current) {\n edgeShadowRef.current.style.transform = `translate3d(${lensLeft}px, ${lensTop}px, 0)`;\n edgeShadowRef.current.style.width = `${curW}px`;\n edgeShadowRef.current.style.height = `${curH}px`;\n edgeShadowRef.current.style.borderRadius = `${curRadius}px`;\n if (shadowOpacity !== undefined) {\n edgeShadowRef.current.style.opacity = String(resolveValue(shadowOpacity));\n }\n }\n\n if (restShadowRef.current) {\n restShadowRef.current.style.transform = `translate3d(${lensLeft}px, ${lensTop}px, 0)`;\n restShadowRef.current.style.width = `${curW}px`;\n restShadowRef.current.style.height = `${curH}px`;\n restShadowRef.current.style.borderRadius = `${curRadius}px`;\n if (restShadowOpacity !== undefined) {\n restShadowRef.current.style.opacity = String(resolveValue(restShadowOpacity));\n }\n }\n\n // 4. Update Refraction Target Clipping\n if (refractionTargetLayerRef.current && w > 0 && h > 0) {\n const topInset = Math.max(0, lensTop);\n const rightInset = Math.max(0, w - (lensLeft + curW));\n const bottomInset = Math.max(0, h - (lensTop + curH));\n const leftInset = Math.max(0, lensLeft);\n refractionTargetLayerRef.current.style.clipPath = `inset(${topInset}px ${rightInset}px ${bottomInset}px ${leftInset}px round ${curRadius}px)`;\n }\n\n // 5. Update Brightness Overlay Clipping\n if (brightnessLayerRef.current && w > 0 && h > 0) {\n brightnessLayerRef.current.style.clipPath = `inset(${lensTop}px ${\n w - (lensLeft + curW)\n }px ${h - (lensTop + curH)}px ${lensLeft}px round ${curRadius}px)`;\n }\n\n // 6. Update SVG filter feImage positioning\n if (mainFeImageRef.current && w > 0 && h > 0) {\n if (isIOS) {\n // UserSpaceOnUse (pixel coordinates)\n mainFeImageRef.current.setAttribute(\"x\", String(lensLeft));\n mainFeImageRef.current.setAttribute(\"y\", String(lensTop));\n mainFeImageRef.current.setAttribute(\"width\", String(curW));\n mainFeImageRef.current.setAttribute(\"height\", String(curH));\n } else {\n // ObjectBoundingBox (0-1 normalised coordinates)\n mainFeImageRef.current.setAttribute(\"x\", String(lensLeft / w));\n mainFeImageRef.current.setAttribute(\"y\", String(lensTop / h));\n mainFeImageRef.current.setAttribute(\"width\", String(curW / w));\n mainFeImageRef.current.setAttribute(\"height\", String(curH / h));\n }\n }\n\n // 7. Apply active filter string to target DOM element\n const activeFilterId = `${rawId}-v${filterVersionRef.current}`;\n const filterCss = `url(\"#${activeFilterId}\")`;\n if (contentLayerRef.current && contentLayerRef.current.style.filter !== filterCss) {\n contentLayerRef.current.style.filter = filterCss;\n }\n if (refractionTargetLayerRef.current && refractionTargetLayerRef.current.style.filter !== filterCss) {\n refractionTargetLayerRef.current.style.filter = filterCss;\n }\n }, [\n containerW,\n containerH,\n x,\n y,\n effectiveLensW,\n effectiveLensH,\n effectiveBorderRadius,\n isIOS,\n isVisible,\n rawId,\n tintColor,\n tintOpacity,\n tintBlur,\n shadowOpacity,\n restShadowOpacity,\n ]);\n\n // Hook motion value changes into updateLayout microtasks\n useEffect(() => {\n const unsubscribers: Array<() => void> = [];\n const scheduleUpdate = () => queueMicrotask(updateLayout);\n\n if (isMotionValue(x)) unsubscribers.push(x.on(\"change\", scheduleUpdate));\n if (isMotionValue(y)) unsubscribers.push(y.on(\"change\", scheduleUpdate));\n if (isMotionValue(effectiveLensW)) unsubscribers.push(effectiveLensW.on(\"change\", scheduleUpdate));\n if (isMotionValue(effectiveLensH)) unsubscribers.push(effectiveLensH.on(\"change\", scheduleUpdate));\n if (isMotionValue(effectiveBorderRadius)) unsubscribers.push(effectiveBorderRadius.on(\"change\", scheduleUpdate));\n\n scheduleUpdate();\n return () => unsubscribers.forEach((u) => u());\n }, [x, y, effectiveLensW, effectiveLensH, effectiveBorderRadius, updateLayout]);\n\n // Generate displacement map (Synchronous generator for animated, Asynchronous for static)\n useEffect(() => {\n if (displacementMapUrl) {\n currentMapDataUrl.current = displacementMapUrl;\n return;\n }\n\n if (!isAnimated) {\n // Async generator path\n if (!staticCanvasRef.current) {\n staticCanvasRef.current = document.createElement(\"canvas\");\n }\n generateDisplacementMapAsync(staticCanvasRef.current, {\n canvasSize: activeParams.mapSize,\n lensHalfWidth: activeParams.lensW / 2,\n lensHalfHeight: activeParams.lensH / 2,\n borderRadius: activeParams.borderRadius,\n depth: activeParams.depth,\n sdfBoundary: activeParams.sdfBoundary,\n edgeFalloff: activeParams.edgeFalloff,\n specularRotation: activeParams.specularRotation,\n glowStrength: activeParams.glowStrength,\n glowSpread: activeParams.glowSpread,\n glowExponent: activeParams.glowExponent,\n edgeStrength: activeParams.edgeStrength,\n edgeWidth: activeParams.edgeWidth,\n edgeExponent: activeParams.edgeExponent,\n domeDepth: activeParams.domeDepth,\n splayAmount: activeParams.splayAmount,\n }).then((url) => {\n if (url) {\n currentMapDataUrl.current = url;\n filterVersionRef.current++;\n if (mainFeImageRef.current) {\n mainFeImageRef.current.setAttribute(\"href\", url);\n }\n if (mainFilterRef.current) {\n mainFilterRef.current.id = `${rawId}-v${filterVersionRef.current}`;\n }\n onLensMapChange?.(url);\n updateLayout();\n }\n });\n return;\n }\n\n // Sync generator path\n const gen = createDisplacementMapGeneratorSync(activeParams.mapSize);\n const result = gen.generate({\n lensHalfWidth: resolveValue(effectiveLensW) / 2,\n lensHalfHeight: resolveValue(effectiveLensH) / 2,\n borderRadius: resolveValue(effectiveBorderRadius),\n depth: activeParams.depth,\n sdfBoundary: activeParams.sdfBoundary,\n edgeFalloff: activeParams.edgeFalloff,\n specularRotation: activeParams.specularRotation,\n glowStrength: activeParams.glowStrength,\n glowSpread: activeParams.glowSpread,\n glowExponent: activeParams.glowExponent,\n edgeStrength: activeParams.edgeStrength,\n edgeWidth: activeParams.edgeWidth,\n edgeExponent: activeParams.edgeExponent,\n domeDepth: activeParams.domeDepth,\n splayAmount: activeParams.splayAmount,\n });\n\n currentMapDataUrl.current = result.dataUrl;\n filterVersionRef.current++;\n if (mainFeImageRef.current) {\n mainFeImageRef.current.setAttribute(\"href\", result.dataUrl);\n }\n if (mainFilterRef.current) {\n mainFilterRef.current.id = `${rawId}-v${filterVersionRef.current}`;\n }\n onLensMapChange?.(result.dataUrl);\n onGenerationTime?.({\n total: result.loopMs + result.encodeMs,\n loopMs: result.loopMs,\n encodeMs: result.encodeMs,\n });\n updateLayout();\n\n return () => gen.dispose();\n }, [\n isAnimated,\n activeParams.mapSize,\n activeParams.depth,\n activeParams.sdfBoundary,\n activeParams.edgeFalloff,\n activeParams.specularRotation,\n activeParams.glowStrength,\n activeParams.glowSpread,\n activeParams.glowExponent,\n activeParams.edgeStrength,\n activeParams.edgeWidth,\n activeParams.edgeExponent,\n activeParams.domeDepth,\n activeParams.splayAmount,\n displacementMapUrl,\n updateLayout,\n ]);\n\n // Construct SVG filter definition\n const renderFilter = (\n filterRef: React.RefObject<SVGFilterElement | null>,\n feImageRef: React.RefObject<SVGFEImageElement | null>,\n colorMatrixRef: React.RefObject<SVGFEColorMatrixElement | null>,\n isPoolItem = false\n ) => {\n const units = isIOS || isPoolItem ? \"userSpaceOnUse\" : \"objectBoundingBox\";\n const sourceGraphic =\n !isPoolItem && activeParams.blurAmount > 0 ? \"blurred\" : \"SourceGraphic\";\n const mapSource = needsMatrix ? \"scaledMap\" : \"map\";\n\n return (\n <filter\n ref={filterRef as any}\n id={`${rawId}-v${filterVersionRef.current}`}\n filterUnits={units}\n primitiveUnits={units}\n colorInterpolationFilters=\"sRGB\"\n x={0}\n y={0}\n width={1}\n height={1}\n >\n {/* 1. Neutral gray background outside the lens */}\n <feFlood floodColor=\"rgb(128,128,128)\" floodOpacity=\"1\" result=\"mapBg\" />\n\n {/* 2. Displacement map image */}\n <feImage\n ref={feImageRef as any}\n data-lens=\"\"\n href={currentMapDataUrl.current ?? BLANK_1PX_PNG}\n preserveAspectRatio=\"none\"\n result=\"rawMap\"\n />\n\n {/* 3. Composite over neutral gray */}\n <feComposite in=\"rawMap\" in2=\"mapBg\" operator=\"over\" result=\"map\" />\n\n {/* 4. Aspect-ratio scaling feColorMatrix */}\n {needsMatrix && (\n <feColorMatrix\n ref={colorMatrixRef as any}\n in=\"map\"\n type=\"matrix\"\n values={matrixString}\n result=\"scaledMap\"\n />\n )}\n\n {/* 5. Optional Gaussian blur for frosted glass */}\n {!isPoolItem &&\n activeParams.blurAmount > 0 &&\n containerW > 0 &&\n containerH > 0 && (\n <feGaussianBlur\n in=\"SourceGraphic\"\n stdDeviation={`${activeParams.blurAmount / containerW} ${\n activeParams.blurAmount / containerH\n }`}\n result=\"blurred\"\n />\n )}\n\n {/* 6. Displacement mapping (with Chromatic Aberration or single pass) */}\n {!isPoolItem && activeParams.chromaAmount > 0 ? (\n <React.Fragment>\n {/* Red Channel */}\n <feDisplacementMap\n data-lens=\"\"\n in={sourceGraphic}\n in2={mapSource}\n scale={maxScale * (1 + 0.2 * activeParams.chromaAmount)}\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n />\n <feColorMatrix\n type=\"matrix\"\n values=\"1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\"\n result=\"dispR\"\n />\n\n {/* Green Channel */}\n <feDisplacementMap\n data-lens=\"\"\n in={sourceGraphic}\n in2={mapSource}\n scale={maxScale * (1 + 0.1 * activeParams.chromaAmount)}\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0\"\n result=\"dispG\"\n />\n\n {/* Blue Channel */}\n <feDisplacementMap\n data-lens=\"\"\n in={sourceGraphic}\n in2={mapSource}\n scale={maxScale}\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\"\n result=\"dispB\"\n />\n\n {/* Composite R + G, then merge with B */}\n <feComposite\n in=\"dispR\"\n in2=\"dispG\"\n operator=\"arithmetic\"\n k1=\"0\"\n k2=\"1\"\n k3=\"1\"\n k4=\"0\"\n />\n <feComposite\n in2=\"dispB\"\n operator=\"arithmetic\"\n k1=\"0\"\n k2=\"1\"\n k3=\"1\"\n k4=\"0\"\n result=\"lensResult\"\n />\n </React.Fragment>\n ) : (\n <feDisplacementMap\n data-lens=\"\"\n in={sourceGraphic}\n in2={mapSource}\n scale={maxScale}\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n result=\"lensResult\"\n />\n )}\n\n {/* 7. Specular highlight (Blue channel) */}\n {!isPoolItem &&\n (activeParams.glowStrength > 0 || activeParams.edgeStrength > 0) &&\n (activeParams.specularDark ? (\n <React.Fragment>\n <feColorMatrix\n in=\"map\"\n type=\"matrix\"\n values={`0 0 ${-activeParams.specularStrength} 0 ${\n 1 + (128 * activeParams.specularStrength) / 255\n } 0 0 ${-activeParams.specularStrength} 0 ${\n 1 + (128 * activeParams.specularStrength) / 255\n } 0 0 ${-activeParams.specularStrength} 0 ${\n 1 + (128 * activeParams.specularStrength) / 255\n } 0 0 0 0 1`}\n result=\"specMask\"\n />\n <feComposite\n in=\"specMask\"\n in2=\"lensResult\"\n operator=\"arithmetic\"\n k1=\"1\"\n k2=\"0\"\n k3=\"0\"\n k4=\"0\"\n result=\"lensResult\"\n />\n </React.Fragment>\n ) : (\n <React.Fragment>\n <feColorMatrix\n in={isSafari ? \"rawMap\" : \"map\"}\n type=\"matrix\"\n values={`0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 ${\n -128 / 255\n }`}\n result=\"specMask\"\n />\n <feComposite\n in=\"specMask\"\n in2=\"lensResult\"\n operator=\"arithmetic\"\n k1=\"0\"\n k2={activeParams.specularStrength}\n k3=\"1\"\n k4=\"0\"\n result=\"lensResult\"\n />\n </React.Fragment>\n ))}\n\n {/* 8. Cut hole in SourceGraphic and composite lensed result over */}\n <feFlood\n data-lens=\"\"\n floodColor=\"black\"\n floodOpacity=\"1\"\n result=\"lensMask\"\n />\n <feComposite\n in=\"SourceGraphic\"\n in2=\"lensMask\"\n operator=\"out\"\n result=\"holedSG\"\n />\n <feComposite in=\"lensResult\" in2=\"holedSG\" operator=\"over\" />\n </filter>\n );\n };\n\n const renderShadowLayer = (\n ref: React.RefObject<HTMLDivElement | null>,\n boxShadow?: string,\n insetShadow?: string\n ) => {\n if (!boxShadow && !insetShadow) return null;\n return (\n <div\n ref={ref as any}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n willChange: \"transform\",\n boxSizing: \"border-box\",\n boxShadow: [boxShadow, insetShadow ? `inset ${insetShadow}` : null]\n .filter(Boolean)\n .join(\", \"),\n }}\n />\n );\n };\n\n return (\n <div\n ref={containerRef}\n data-lensfx-container=\"\"\n className={className}\n style={{ position: \"relative\", ...style }}\n {...restProps}\n >\n {/* Layer 1: Real DOM Content to be refracted */}\n <div\n ref={contentLayerRef}\n style={{ willChange: \"filter\" }}\n >\n {children}\n </div>\n\n {/* Layer 2: Alternative Refraction Target (Clipped to lens rectangle) */}\n {refractionTarget && (\n <div\n ref={refractionTargetLayerRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n willChange: \"filter, clip-path\",\n background: \"var(--body-bg, #000)\",\n }}\n >\n {refractionTarget}\n </div>\n )}\n\n {/* Layer 3: Overlay (if provided) */}\n {overlay && (\n <div\n ref={overlayLayerRef}\n style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}\n >\n {overlay}\n </div>\n )}\n\n {/* Layer 4: SVG Definitions and Filters */}\n <div style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}>\n <svg\n viewBox={`0 0 ${containerW} ${containerH}`}\n width=\"100%\"\n height=\"100%\"\n >\n <defs>\n {renderFilter(mainFilterRef, mainFeImageRef, mainColorMatrixRef)}\n {poolFilterRefs.current.map((ref, idx) => (\n <React.Fragment key={idx}>\n {renderFilter(ref as any, null as any, null as any, true)}\n </React.Fragment>\n ))}\n </defs>\n {activeParams.tint !== 0 && maxScale === 0 && (\n <rect\n ref={tintRectRef}\n fill={activeParams.tint > 0 ? \"white\" : \"black\"}\n opacity={Math.abs(activeParams.tint)}\n pointerEvents=\"none\"\n />\n )}\n </svg>\n\n {/* Brightness layer */}\n {activeParams.brightness !== 0 && (\n <div\n ref={brightnessLayerRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n background: activeParams.brightness > 0 ? \"white\" : \"black\",\n opacity: Math.abs(activeParams.brightness),\n }}\n />\n )}\n\n {/* Tint container */}\n {tintColor !== undefined && (\n <div\n ref={tintContainerRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n overflow: \"hidden\",\n willChange: \"transform\",\n }}\n />\n )}\n </div>\n\n {/* Layer 5: Backdrop-blur and mask layer */}\n <div\n ref={backdropLayerRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n willChange: \"backdrop-filter, transform\",\n }}\n />\n\n {/* Layer 6: Edge Rim Shadow */}\n {renderShadowLayer(\n edgeShadowRef,\n activeParams.edgeShadow,\n activeParams.edgeInsetShadow\n )}\n\n {/* Layer 7: Rest Shadow (Slider/Switch rest state) */}\n {renderShadowLayer(\n restShadowRef,\n activeParams.restEdgeShadow,\n undefined\n )}\n\n {/* Layer 8: Debug / Outline layer */}\n {showOutline && (\n <div\n ref={outlineRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n border: \"2px solid var(--border-2, rgba(255,255,255,0.2))\",\n pointerEvents: \"none\",\n willChange: \"transform\",\n boxSizing: \"border-box\",\n }}\n />\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Compound Components for Shared Multi-Lens Target Registration\n// ---------------------------------------------------------------------------\n\nAaveGlass.General = {\n Provider: ({ children }: { children: React.ReactNode }) => {\n const activeLens = useRef<any>(null);\n const version = useRef(0);\n const targets = useRef(new Map<HTMLElement, any>());\n const targetVersion = useRef(0);\n const bleedRef = useRef(0);\n\n const register = useCallback((lens: any) => {\n activeLens.current = lens;\n version.current++;\n }, []);\n\n const deregister = useCallback(() => {\n activeLens.current = null;\n version.current++;\n }, []);\n\n const registerTarget = useCallback((el: HTMLElement, data: any) => {\n targets.current.set(el, data);\n targetVersion.current++;\n }, []);\n\n const deregisterTarget = useCallback((el: HTMLElement) => {\n targets.current.delete(el);\n targetVersion.current++;\n }, []);\n\n const contextValue = useMemo(\n () => ({\n register,\n deregister,\n activeLens,\n version,\n targets,\n targetVersion,\n bleedRef,\n registerTarget,\n deregisterTarget,\n }),\n [register, deregister, registerTarget, deregisterTarget]\n );\n\n return (\n <GeneralContext.Provider value={contextValue}>\n {children}\n </GeneralContext.Provider>\n );\n },\n\n Target: ({\n children,\n className,\n style,\n ...rest\n }: {\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n }) => {\n const ctx = useContext(GeneralContext);\n const elRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const el = elRef.current;\n if (!el || !ctx) return;\n ctx.registerTarget(el, { el });\n return () => {\n ctx.deregisterTarget(el);\n };\n }, [ctx]);\n\n return (\n <div\n ref={elRef}\n data-lensfx-target=\"\"\n className={className}\n style={style}\n {...rest}\n >\n {children}\n </div>\n );\n },\n\n RefractionGroup: ({\n children,\n flexDirection = \"column\",\n gap = 0,\n className,\n style,\n ...rest\n }: {\n children: React.ReactNode;\n flexDirection?: \"row\" | \"column\";\n gap?: number;\n className?: string;\n style?: React.CSSProperties;\n }) => (\n <RefractionGroupContext.Provider value={{ inGroup: true, gap }}>\n <div\n className={className}\n style={{\n display: \"flex\",\n flexDirection,\n ...(gap !== 0 ? { gap } : {}),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n </RefractionGroupContext.Provider>\n ),\n};\n","\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { animate, motion, useMotionValue, useTransform } from \"framer-motion\";\nimport { AaveGlass } from \"../lib/glass/AaveGlass\";\nimport {\n LensParams,\n SWITCH_DARK_OVERRIDES,\n SWITCH_GLASS_DEFAULTS,\n SWITCH_LIGHT_OVERRIDES,\n} from \"../engine/types\";\n\nexport interface GlassSwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n name?: string;\n value?: string;\n ariaLabel?: string;\n width?: number;\n height?: number;\n lens?: Partial<LensParams>;\n tintBlur?: number;\n rubberOvershoot?: number;\n rubberDampening?: number;\n filterResolution?: number;\n forceExpanded?: boolean;\n theme?: \"light\" | \"dark\";\n onLensMapChange?: (url: string) => void;\n}\n\nconst EASE_SPRING = [0.22, 1.15, 0.36, 1.06] as const;\nconst TOGGLE_ANIM = { ease: EASE_SPRING, duration: 0.6 };\nconst PRESS_ANIM = { ease: EASE_SPRING, duration: 0.32 };\nconst RELEASE_ANIM = { ease: [0.22, 1, 0.36, 1] as const, duration: 0.52 };\n\nfunction rubberBand(drag: number, maxOvershoot: number, dampening: number): number {\n return maxOvershoot * (1 - Math.pow(1 - Math.min(1, drag / dampening), 3));\n}\n\nexport function GlassSwitch({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n name,\n value,\n ariaLabel = \"Switch\",\n width: S = 74,\n height: R = 28,\n lens,\n tintBlur = 4,\n rubberOvershoot: k = 0.15,\n rubberDampening: T = 10,\n filterResolution,\n forceExpanded = false,\n theme = \"dark\",\n onLensMapChange,\n}: GlassSwitchProps) {\n const isDark = theme === \"dark\";\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const isChecked = controlledChecked !== undefined ? controlledChecked : internalChecked;\n\n // Geometry calculations\n const L = Math.round(0.6 * S); // thumb width: 44px\n const N = R - 6; // thumb height: 22px\n const V = S - L - 6; // travel distance: 24px\n const H = S * k; // max overshoot\n const F = H * T; // dampening\n const q = R / 2; // track corner radius: 14px\n const X = N / 2; // thumb corner radius: 11px\n const W = L / 2; // thumb half-width: 22px\n const B = N / 2; // thumb half-height: 11px\n const U = Math.round(0.75 * R);// refraction track fill height: 21px\n const pad = Math.ceil(0.5 * Math.max(W, B) + H) + 2; // container padding: 21px\n const containerW = S + 2 * pad;\n const containerH = R + 2 * pad;\n\n // Persistent geometry refs\n const maxTravelRef = useRef(V);\n maxTravelRef.current = V;\n const thumbWidthRef = useRef(L);\n thumbWidthRef.current = L;\n const containerWidthRef = useRef(containerW);\n containerWidthRef.current = containerW;\n const padRef = useRef(pad);\n padRef.current = pad;\n const halfWRef = useRef(W);\n halfWRef.current = W;\n const halfHRef = useRef(B);\n halfHRef.current = B;\n const radiusRef = useRef(X);\n radiusRef.current = X;\n\n // Motion values\n const thumbX = useMotionValue(isChecked ? V : 0);\n const normalizedLensX = useTransform(\n thumbX,\n (xVal) => (padRef.current + 3 + thumbWidthRef.current / 2 + xVal) / containerWidthRef.current\n );\n\n const lensHalfW = useMotionValue(W);\n const lensHalfH = useMotionValue(B);\n const lensRadius = useMotionValue(X);\n const tintOpacityVal = useMotionValue(1);\n const trackScaleX = useMotionValue(0.85);\n const trackScaleY = useMotionValue(0.525);\n const tintBlurVal = useMotionValue(tintBlur);\n const shadowOpacityVal = useMotionValue(0);\n const edgeBiasVal = useTransform(tintOpacityVal, (v) => 0.5 * v);\n\n // Squish simulation motion values\n const squishVal = useMotionValue(0);\n const squishHoldRef = useRef(0);\n const squishTriggerRef = useRef(() => {});\n\n // Perpendicular compression: moving horizontally compresses X (-0.2), expands Y (+0.4)\n const dynamicLensW = useTransform(\n [lensHalfW, squishVal],\n ([w, sq]: any) => w * (1 - 0.2 * sq)\n );\n const dynamicLensH = useTransform(\n [lensHalfH, squishVal],\n ([h, sq]: any) => h * (1 + 0.4 * sq)\n );\n\n // Per-frame physics loop for squish spring simulation\n useEffect(() => {\n let animId = 0;\n let squishDisp = 0;\n let squishVel = 0;\n let lastTime = 0;\n let lastX = thumbX.get();\n let isRunning = false;\n\n const startLoop = () => {\n if (!isRunning) {\n isRunning = true;\n lastTime = performance.now();\n lastX = thumbX.get();\n animId = requestAnimationFrame(step);\n }\n };\n\n const step = (now: number) => {\n const dt = Math.min((now - lastTime) / 1000, 0.033);\n lastTime = now;\n const curX = thumbX.get();\n const velocity = (curX - lastX) / Math.min(Math.max(dt, 0.008), 0.03);\n lastX = curX;\n\n const absVel = Math.abs(velocity);\n const targetSquish = Math.min(\n 0.35,\n Math.max(Math.min(0.35, 0.012 * Math.pow(absVel, 0.75)), squishHoldRef.current)\n );\n\n // Damped spring acceleration: -180 * (x - target) - 14 * v\n const accel = -180 * (squishDisp - targetSquish) - 14 * squishVel;\n squishVel += accel * dt;\n squishDisp += squishVel * dt;\n squishVal.set(squishDisp);\n\n if (\n Math.abs(squishDisp) < 0.0005 &&\n Math.abs(squishVel) < 0.005 &&\n absVel < 0.005 &&\n squishHoldRef.current === 0\n ) {\n isRunning = false;\n squishVal.set(0);\n return;\n }\n\n animId = requestAnimationFrame(step);\n };\n\n squishTriggerRef.current = startLoop;\n const unsub = thumbX.on(\"change\", startLoop);\n\n return () => {\n unsub();\n cancelAnimationFrame(animId);\n squishTriggerRef.current = () => {};\n };\n }, [thumbX, squishVal]);\n\n // Press / Release shape animations (1.5x expansion)\n const animatePress = (animConfig: any) => {\n animate(lensHalfW, 1.5 * halfWRef.current, animConfig);\n animate(lensHalfH, 1.5 * halfHRef.current, animConfig);\n animate(lensRadius, 1.5 * radiusRef.current, animConfig);\n animate(tintOpacityVal, 0, animConfig);\n animate(tintBlurVal, 0, animConfig);\n animate(trackScaleX, 0.95, animConfig);\n animate(trackScaleY, 0.975, animConfig);\n animate(shadowOpacityVal, 1, animConfig);\n };\n\n const animateRelease = (animConfig: any) => {\n animate(lensHalfW, halfWRef.current, animConfig);\n animate(lensHalfH, halfHRef.current, animConfig);\n animate(lensRadius, radiusRef.current, animConfig);\n animate(tintOpacityVal, 1, animConfig);\n animate(tintBlurVal, tintBlur, animConfig);\n animate(trackScaleX, 0.85, animConfig);\n animate(trackScaleY, 0.525, animConfig);\n animate(shadowOpacityVal, 0, animConfig);\n };\n\n // Sync forced expansion\n const forceExpandedRef = useRef(forceExpanded);\n useEffect(() => {\n if (forceExpanded !== forceExpandedRef.current) {\n forceExpandedRef.current = forceExpanded;\n if (forceExpanded) {\n animatePress(PRESS_ANIM);\n squishHoldRef.current = 0.175;\n squishTriggerRef.current();\n } else {\n animateRelease(RELEASE_ANIM);\n squishHoldRef.current = 0;\n }\n }\n }, [forceExpanded]);\n\n // Interaction state\n const isDraggingRef = useRef(false);\n const interactionStateRef = useRef<\"idle\" | \"pending\" | \"hold\" | \"tap\">(\"idle\");\n const holdTimerRef = useRef<any>(null);\n const releaseTimerRef = useRef<any>(null);\n const activeAnimationRef = useRef<any>(null);\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n clearTimeout(holdTimerRef.current);\n clearTimeout(releaseTimerRef.current);\n };\n }, []);\n\n // Update thumb position on external prop change\n useEffect(() => {\n if (!isDraggingRef.current && interactionStateRef.current !== \"tap\") {\n activeAnimationRef.current = animate(thumbX, isChecked ? V : 0, TOGGLE_ANIM);\n }\n }, [isChecked, thumbX, V]);\n\n // Update CSS property --switch-progress on the wrapper\n const wrapperRef = useRef<HTMLLabelElement | null>(null);\n useEffect(() => {\n const updateProgress = (val: number) => {\n if (wrapperRef.current) {\n const progress = maxTravelRef.current > 0\n ? Math.max(0, Math.min(1, val / maxTravelRef.current))\n : 0;\n wrapperRef.current.style.setProperty(\"--switch-progress\", String(progress));\n }\n };\n updateProgress(thumbX.get());\n return thumbX.on(\"change\", updateProgress);\n }, [thumbX]);\n\n // Merge theme overrides with defaults\n const activeLensParams = useMemo(() => {\n return {\n ...SWITCH_GLASS_DEFAULTS,\n ...(isDark ? SWITCH_DARK_OVERRIDES : SWITCH_LIGHT_OVERRIDES),\n ...lens,\n specularDark: !isDark,\n };\n }, [isDark, lens]);\n\n // Pointer event tracking refs\n const pointerIdRef = useRef<number | null>(null);\n const startClientXRef = useRef(0);\n const startThumbXRef = useRef(0);\n const didDragRef = useRef(false);\n const suppressClickRef = useRef(false);\n\n const toggle = (nextChecked: boolean) => {\n if (suppressClickRef.current) return;\n if (controlledChecked === undefined) {\n setInternalChecked(nextChecked);\n }\n onCheckedChange?.(nextChecked);\n\n if (interactionStateRef.current === \"idle\") {\n interactionStateRef.current = \"tap\";\n animatePress(PRESS_ANIM);\n clearTimeout(releaseTimerRef.current);\n releaseTimerRef.current = setTimeout(() => {\n animateRelease(RELEASE_ANIM);\n }, 330);\n\n activeAnimationRef.current = animate(thumbX, nextChecked ? V : 0, {\n ...TOGGLE_ANIM,\n onComplete: () => {\n if (isMountedRef.current && interactionStateRef.current === \"tap\") {\n interactionStateRef.current = \"idle\";\n }\n },\n });\n }\n };\n\n return (\n <label\n ref={wrapperRef}\n style={{\n display: \"inline-block\",\n position: \"relative\",\n flexShrink: 0,\n width: S,\n height: R,\n overflow: \"visible\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n userSelect: \"none\",\n }}\n >\n {/* Hidden Accessible Checkbox Input */}\n <input\n type=\"checkbox\"\n role=\"switch\"\n checked={isChecked}\n onChange={(e) => toggle(e.target.checked)}\n onClick={(e) => {\n if (suppressClickRef.current) e.preventDefault();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n toggle(!isChecked);\n }\n }}\n disabled={disabled}\n name={name}\n value={value}\n aria-label={ariaLabel}\n style={{\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n />\n\n {/* Glass Layer Container */}\n <AaveGlass\n lens={activeLensParams}\n x={normalizedLensX}\n y={0.5}\n lensW={dynamicLensW}\n lensH={dynamicLensH}\n borderRadius={lensRadius}\n tintColor=\"white\"\n tintOpacity={tintOpacityVal}\n tintBlur={tintBlurVal}\n shadowOpacity={shadowOpacityVal}\n edgeBias={edgeBiasVal}\n filterResolution={filterResolution}\n onLensMapChange={onLensMapChange}\n style={{\n width: containerW,\n height: containerH,\n overflow: \"visible\",\n margin: -pad,\n }}\n refractionTarget={\n <div\n style={{\n padding: pad,\n height: R,\n display: \"flex\",\n alignItems: \"center\",\n boxSizing: \"content-box\",\n }}\n >\n <motion.div\n style={{\n width: S,\n height: U,\n borderRadius: U / 2,\n background:\n \"color-mix(in srgb, var(--bg-4, #27272a), var(--primary, #38bdf8) calc(var(--switch-progress, 0) * 100%))\",\n scaleX: trackScaleX,\n scaleY: trackScaleY,\n }}\n />\n </div>\n }\n >\n {/* Real Rendered Switch DOM (Background Track + Hit Area) */}\n <div style={{ padding: pad }}>\n <div\n aria-hidden=\"true\"\n style={{\n position: \"relative\",\n width: S,\n height: R,\n borderRadius: q,\n background: \"var(--bg-3, #18181b)\",\n transition: \"background 0.2s\",\n }}\n >\n {/* Draggable Hit Area for the Thumb */}\n <motion.div\n style={{\n position: \"absolute\",\n x: thumbX,\n width: L,\n height: N,\n top: 3,\n left: 3,\n touchAction: \"none\",\n }}\n onPointerDown={(e) => {\n if (pointerIdRef.current !== null || disabled) return;\n pointerIdRef.current = e.pointerId;\n e.currentTarget.setPointerCapture(e.pointerId);\n startClientXRef.current = e.clientX;\n startThumbXRef.current = thumbX.get();\n didDragRef.current = false;\n isDraggingRef.current = true;\n suppressClickRef.current = true;\n\n clearTimeout(holdTimerRef.current);\n clearTimeout(releaseTimerRef.current);\n interactionStateRef.current = \"pending\";\n\n holdTimerRef.current = setTimeout(() => {\n if (interactionStateRef.current === \"pending\") {\n interactionStateRef.current = \"hold\";\n activeAnimationRef.current?.stop();\n animatePress(PRESS_ANIM);\n squishHoldRef.current = 0.175;\n squishTriggerRef.current();\n }\n }, 200);\n }}\n onPointerMove={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n const deltaX = e.clientX - startClientXRef.current;\n\n if (!didDragRef.current) {\n if (Math.abs(deltaX) < 3) return;\n didDragRef.current = true;\n activeAnimationRef.current?.stop();\n startThumbXRef.current = thumbX.get();\n startClientXRef.current = e.clientX;\n clearTimeout(holdTimerRef.current);\n squishHoldRef.current = 0;\n if (interactionStateRef.current !== \"hold\") {\n interactionStateRef.current = \"hold\";\n animatePress(PRESS_ANIM);\n }\n }\n\n let newX = startThumbXRef.current + (e.clientX - startClientXRef.current);\n if (newX < 0) {\n newX = -rubberBand(-newX, H, F);\n } else if (newX > V) {\n newX = V + rubberBand(newX - V, H, F);\n }\n thumbX.set(newX);\n }}\n onPointerUp={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n pointerIdRef.current = null;\n clearTimeout(holdTimerRef.current);\n\n if (didDragRef.current) {\n isDraggingRef.current = false;\n interactionStateRef.current = \"idle\";\n animateRelease(RELEASE_ANIM);\n const shouldCheck =\n Math.max(0, Math.min(V, thumbX.get())) > V / 2;\n activeAnimationRef.current = animate(thumbX, shouldCheck ? V : 0, TOGGLE_ANIM);\n if (shouldCheck !== isChecked) {\n if (controlledChecked === undefined) {\n setInternalChecked(shouldCheck);\n }\n onCheckedChange?.(shouldCheck);\n }\n requestAnimationFrame(() => {\n suppressClickRef.current = false;\n });\n } else if (\n interactionStateRef.current === \"pending\" ||\n interactionStateRef.current === \"tap\"\n ) {\n interactionStateRef.current = \"tap\";\n suppressClickRef.current = false;\n isDraggingRef.current = false;\n animatePress(PRESS_ANIM);\n clearTimeout(releaseTimerRef.current);\n releaseTimerRef.current = setTimeout(() => {\n animateRelease(RELEASE_ANIM);\n }, 330);\n\n const nextChecked = !isChecked;\n if (controlledChecked === undefined) {\n setInternalChecked(nextChecked);\n }\n onCheckedChange?.(nextChecked);\n\n activeAnimationRef.current = animate(\n thumbX,\n nextChecked ? V : 0,\n {\n ...TOGGLE_ANIM,\n onComplete: () => {\n if (isMountedRef.current && interactionStateRef.current === \"tap\") {\n interactionStateRef.current = \"idle\";\n }\n },\n }\n );\n } else if (interactionStateRef.current === \"hold\") {\n interactionStateRef.current = \"idle\";\n isDraggingRef.current = false;\n squishHoldRef.current = 0;\n animateRelease(RELEASE_ANIM);\n activeAnimationRef.current = animate(thumbX, isChecked ? V : 0, TOGGLE_ANIM);\n requestAnimationFrame(() => {\n suppressClickRef.current = false;\n });\n } else {\n isDraggingRef.current = false;\n suppressClickRef.current = false;\n }\n }}\n onPointerCancel={(e) => {\n if (e.pointerId === pointerIdRef.current) {\n pointerIdRef.current = null;\n clearTimeout(holdTimerRef.current);\n squishHoldRef.current = 0;\n isDraggingRef.current = false;\n interactionStateRef.current = \"idle\";\n animateRelease(RELEASE_ANIM);\n activeAnimationRef.current = animate(thumbX, isChecked ? V : 0, TOGGLE_ANIM);\n requestAnimationFrame(() => {\n suppressClickRef.current = false;\n });\n }\n }}\n onDragStart={(e) => e.preventDefault()}\n />\n </div>\n </div>\n </AaveGlass>\n </label>\n );\n}\n","\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { animate, motion, useMotionValue, useTransform } from \"framer-motion\";\nimport { AaveGlass } from \"../lib/glass/AaveGlass\";\nimport {\n LensParams,\n SLIDER_DARK_OVERRIDES,\n SLIDER_GLASS_DEFAULTS,\n SLIDER_LIGHT_OVERRIDES,\n SLIDER_SAFARI_OVERRIDES,\n} from \"../engine/types\";\n\nexport interface GlassSliderProps {\n value?: number;\n defaultValue?: number;\n onValueChange?: (val: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n width?: number;\n trackHeight?: number;\n thumbHeight?: number;\n thumbWidth?: number;\n refractionTrackHeight?: number;\n rubberOvershoot?: number;\n rubberDampening?: number;\n lens?: Partial<LensParams>;\n tintBlur?: number;\n filterResolution?: number;\n name?: string;\n ariaLabel?: string;\n forceExpanded?: boolean;\n theme?: \"light\" | \"dark\";\n onLensMapChange?: (url: string) => void;\n}\n\nconst PRESS_ANIM = { ease: [0.22, 1.15, 0.36, 1.06] as const, duration: 0.32 };\nconst RELEASE_ANIM = { ease: [0.22, 1, 0.36, 1] as const, duration: 0.52 };\n\nfunction rubberBand(drag: number, maxOvershoot: number, dampening: number): number {\n return maxOvershoot * (1 - Math.pow(1 - Math.min(1, drag / dampening), 3));\n}\n\nexport function GlassSlider({\n value: controlledValue,\n defaultValue = 50,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n width: R = 240,\n trackHeight: k = 6,\n thumbHeight: E = 22,\n thumbWidth: customThumbWidth,\n refractionTrackHeight: customRefractionTrackHeight,\n rubberOvershoot: T = 0.05,\n rubberDampening: I = 30,\n lens,\n tintBlur = 4,\n filterResolution,\n name,\n ariaLabel = \"Slider\",\n forceExpanded = false,\n theme = \"dark\",\n onLensMapChange,\n}: GlassSliderProps) {\n const isDark = theme === \"dark\";\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = controlledValue !== undefined ? controlledValue : internalValue;\n\n const updateValue = useCallback(\n (nextRaw: number) => {\n const stepped = step > 0 ? Math.round((nextRaw - min) / step) * step + min : nextRaw;\n const clamped = Math.max(min, Math.min(max, stepped));\n if (controlledValue === undefined) {\n setInternalValue(clamped);\n }\n onValueChange?.(clamped);\n },\n [min, max, step, controlledValue, onValueChange]\n );\n\n // Platform detection for Safari override\n const [isSafari, setIsSafari] = useState(false);\n useEffect(() => {\n if (typeof navigator !== \"undefined\") {\n setIsSafari(\n /^((?!chrome|chromium|android).)*safari/i.test(navigator.userAgent)\n );\n }\n }, []);\n\n // Geometry\n const Y = customThumbWidth ?? Math.round(2 * E); // thumb width: 44px\n const z = R - Y; // travel distance: 196px\n const Z = Y / 2; // thumb half-width: 22px\n const K = E / 2; // thumb half-height: 11px\n const Q = E / 2; // thumb border-radius: 11px\n const J = k / 2; // track border-radius: 3px\n const ee = R * T; // max overshoot\n const et = ee * I; // dampening\n const er = customRefractionTrackHeight ?? Math.round(0.75 * E); // 17px\n const pad = Math.ceil(0.5 * Math.max(Z, K) + ee) + 2; // container padding: 25px\n const containerW = R + 2 * pad;\n const containerH = E + 2 * pad;\n\n const travelRef = useRef(z);\n const thumbWidthRef = useRef(Y);\n const containerWidthRef = useRef(containerW);\n const padRef = useRef(pad);\n const halfWRef = useRef(Z);\n const halfHRef = useRef(K);\n const radiusRef = useRef(Q);\n const overshootRef = useRef(ee);\n const dampeningRef = useRef(et);\n\n useLayoutEffect(() => {\n travelRef.current = z;\n thumbWidthRef.current = Y;\n containerWidthRef.current = containerW;\n padRef.current = pad;\n halfWRef.current = Z;\n halfHRef.current = K;\n radiusRef.current = Q;\n overshootRef.current = ee;\n dampeningRef.current = et;\n });\n\n const valueToPos = useCallback(\n (val: number) => (max > min ? ((val - min) / (max - min)) * z : 0),\n [min, max, z]\n );\n\n const posToValue = useCallback(\n (pos: number) => {\n const clampedPos = Math.max(0, Math.min(z, pos));\n const rawVal = z > 0 ? min + (clampedPos / z) * (max - min) : min;\n return step > 0 ? Math.round((rawVal - min) / step) * step + min : rawVal;\n },\n [min, max, z, step]\n );\n\n // Motion values\n const thumbX = useMotionValue(valueToPos(currentValue));\n const normalizedLensX = useTransform(\n thumbX,\n (pos) => (padRef.current + thumbWidthRef.current / 2 + pos) / containerWidthRef.current\n );\n\n const lensHalfW = useMotionValue(Z);\n const lensHalfH = useMotionValue(K);\n const lensRadius = useMotionValue(Q);\n const tintOpacityVal = useMotionValue(1);\n const trackScaleX = useMotionValue(0.85);\n const trackScaleY = useMotionValue(0.525);\n const tintBlurVal = useMotionValue(tintBlur);\n const shadowOpacityVal = useMotionValue(0);\n const restShadowOpacityVal = useTransform(shadowOpacityVal, (v) => 1 - v);\n\n // Squish simulation\n const squishVal = useMotionValue(0);\n const squishHoldRef = useRef(0);\n const squishTriggerRef = useRef(() => {});\n\n const dynamicLensW = useTransform(\n [lensHalfW, squishVal],\n ([w, sq]: any) => w * (1 - 0.2 * sq)\n );\n const dynamicLensH = useTransform(\n [lensHalfH, squishVal],\n ([h, sq]: any) => h * (1 + 0.4 * sq)\n );\n\n // Physics loop\n useEffect(() => {\n let animId = 0;\n let squishDisp = 0;\n let squishVel = 0;\n let lastTime = 0;\n let lastX = thumbX.get();\n let isRunning = false;\n\n const startLoop = () => {\n if (!isRunning) {\n isRunning = true;\n lastTime = performance.now();\n lastX = thumbX.get();\n animId = requestAnimationFrame(step);\n }\n };\n\n const step = (now: number) => {\n const dt = Math.min((now - lastTime) / 1000, 0.033);\n lastTime = now;\n const curX = thumbX.get();\n const velocity = (curX - lastX) / Math.min(Math.max(dt, 0.008), 0.03);\n lastX = curX;\n\n const absVel = Math.abs(velocity);\n const targetSquish = Math.min(\n 0.35,\n Math.max(Math.min(0.35, 0.012 * Math.pow(absVel, 0.75)), squishHoldRef.current)\n );\n\n const accel = -180 * (squishDisp - targetSquish) - 14 * squishVel;\n squishVel += accel * dt;\n squishDisp += squishVel * dt;\n squishVal.set(squishDisp);\n\n if (\n Math.abs(squishDisp) < 0.0005 &&\n Math.abs(squishVel) < 0.005 &&\n absVel < 0.005 &&\n squishHoldRef.current === 0\n ) {\n isRunning = false;\n squishVal.set(0);\n return;\n }\n\n animId = requestAnimationFrame(step);\n };\n\n squishTriggerRef.current = startLoop;\n const unsub = thumbX.on(\"change\", startLoop);\n\n return () => {\n unsub();\n cancelAnimationFrame(animId);\n squishTriggerRef.current = () => {};\n };\n }, [thumbX, squishVal]);\n\n const animatePress = (animConfig: any) => {\n animate(lensHalfW, 1.5 * halfWRef.current, animConfig);\n animate(lensHalfH, 1.5 * halfHRef.current, animConfig);\n animate(lensRadius, 1.5 * radiusRef.current, animConfig);\n animate(tintOpacityVal, 0, animConfig);\n animate(tintBlurVal, 0, animConfig);\n animate(trackScaleX, 0.95, animConfig);\n animate(trackScaleY, 0.975, animConfig);\n animate(shadowOpacityVal, 1, animConfig);\n };\n\n const animateRelease = (animConfig: any) => {\n animate(lensHalfW, halfWRef.current, animConfig);\n animate(lensHalfH, halfHRef.current, animConfig);\n animate(lensRadius, radiusRef.current, animConfig);\n animate(tintOpacityVal, 1, animConfig);\n animate(tintBlurVal, tintBlur, animConfig);\n animate(trackScaleX, 0.85, animConfig);\n animate(trackScaleY, 0.525, animConfig);\n animate(shadowOpacityVal, 0, animConfig);\n };\n\n // Sync forced expansion\n const forceExpandedRef = useRef(forceExpanded);\n useEffect(() => {\n if (forceExpanded !== forceExpandedRef.current) {\n forceExpandedRef.current = forceExpanded;\n if (forceExpanded) {\n animatePress(PRESS_ANIM);\n squishHoldRef.current = 0.175;\n squishTriggerRef.current();\n } else {\n animateRelease(RELEASE_ANIM);\n squishHoldRef.current = 0;\n }\n }\n }, [forceExpanded]);\n\n // Sync external value changes\n const isDraggingRef = useRef(false);\n useEffect(() => {\n if (!isDraggingRef.current) {\n thumbX.set(valueToPos(currentValue));\n }\n }, [currentValue, valueToPos, thumbX]);\n\n // Update CSS variables --slider-fill and --slider-progress\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n const updateProgress = (pos: number) => {\n if (wrapperRef.current) {\n const fillPx = thumbWidthRef.current / 2 + pos;\n const progress = travelRef.current > 0 ? pos / travelRef.current : 0;\n wrapperRef.current.style.setProperty(\"--slider-fill\", `${fillPx}px`);\n wrapperRef.current.style.setProperty(\n \"--slider-progress\",\n String(Math.max(0, Math.min(1, progress)))\n );\n }\n };\n updateProgress(thumbX.get());\n return thumbX.on(\"change\", updateProgress);\n }, [thumbX]);\n\n // Merge theme and Safari overrides\n const activeLensParams = useMemo(() => {\n const themeOverrides = isDark ? SLIDER_DARK_OVERRIDES : SLIDER_LIGHT_OVERRIDES;\n const safariOverrides = isSafari ? SLIDER_SAFARI_OVERRIDES : {};\n return {\n ...SLIDER_GLASS_DEFAULTS,\n ...themeOverrides,\n ...safariOverrides,\n ...lens,\n specularDark: !isDark,\n };\n }, [isDark, isSafari, lens]);\n\n // Pointer drag tracking\n const trackRef = useRef<HTMLDivElement | null>(null);\n const pointerIdRef = useRef<number | null>(null);\n const startClientXRef = useRef(0);\n const startThumbXRef = useRef(0);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n return (\n <div\n ref={wrapperRef}\n style={{\n display: \"inline-block\",\n position: \"relative\",\n flexShrink: 0,\n width: R,\n height: E,\n overflow: \"visible\",\n userSelect: \"none\",\n }}\n >\n <AaveGlass\n lens={activeLensParams}\n x={normalizedLensX}\n y={0.5}\n lensW={dynamicLensW}\n lensH={dynamicLensH}\n borderRadius={lensRadius}\n tintColor=\"white\"\n tintOpacity={tintOpacityVal}\n tintBlur={tintBlurVal}\n shadowOpacity={shadowOpacityVal}\n restShadowOpacity={restShadowOpacityVal}\n filterResolution={filterResolution}\n onLensMapChange={onLensMapChange}\n style={{\n width: containerW,\n height: containerH,\n overflow: \"visible\",\n margin: -pad,\n }}\n refractionTarget={\n <div\n style={{\n padding: pad,\n height: E,\n display: \"flex\",\n alignItems: \"center\",\n boxSizing: \"content-box\",\n }}\n >\n <motion.div\n style={{\n position: \"relative\",\n width: R,\n height: er,\n borderRadius: er / 2,\n overflow: \"hidden\",\n scaleX: trackScaleX,\n scaleY: trackScaleY,\n }}\n >\n {/* Target Background */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"var(--bg-4, #27272a)\",\n }}\n />\n {/* Target Fill Progress Bar */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"var(--primary, #38bdf8)\",\n borderRadius: \"inherit\",\n transform:\n \"translateX(calc((var(--slider-progress, 0) - 1) * 100%))\",\n }}\n />\n </motion.div>\n </div>\n }\n >\n {/* Real Rendered Track DOM */}\n <div style={{ padding: pad }}>\n {/* Accessible Hidden Native Range Input */}\n <input\n ref={inputRef}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n disabled={disabled}\n name={name}\n aria-label={ariaLabel}\n onChange={(e) => updateValue(Number(e.target.value))}\n style={{\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n />\n\n <div\n ref={trackRef}\n aria-hidden=\"true\"\n style={{\n position: \"relative\",\n width: R,\n height: E,\n display: \"flex\",\n alignItems: \"center\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n }}\n onPointerDown={(e) => {\n if (disabled || pointerIdRef.current !== null) return;\n pointerIdRef.current = e.pointerId;\n e.currentTarget.setPointerCapture(e.pointerId);\n isDraggingRef.current = true;\n inputRef.current?.focus({ preventScroll: true });\n\n const rect = trackRef.current?.getBoundingClientRect();\n const clickPos = rect ? e.clientX - rect.left - Y / 2 : 0;\n const clamped = Math.max(0, Math.min(travelRef.current, clickPos));\n\n thumbX.set(clamped);\n updateValue(posToValue(clamped));\n\n startClientXRef.current = e.clientX;\n startThumbXRef.current = clamped;\n animatePress(PRESS_ANIM);\n squishHoldRef.current = 0.175;\n squishTriggerRef.current();\n }}\n onPointerMove={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n const delta = e.clientX - startClientXRef.current;\n let nextX = startThumbXRef.current + delta;\n\n if (nextX < 0) {\n nextX = -rubberBand(-nextX, overshootRef.current, dampeningRef.current);\n } else if (nextX > travelRef.current) {\n nextX =\n travelRef.current +\n rubberBand(\n nextX - travelRef.current,\n overshootRef.current,\n dampeningRef.current\n );\n }\n\n thumbX.set(nextX);\n updateValue(posToValue(Math.max(0, Math.min(travelRef.current, nextX))));\n }}\n onPointerUp={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n pointerIdRef.current = null;\n isDraggingRef.current = false;\n squishHoldRef.current = 0;\n\n const finalPos = Math.max(0, Math.min(travelRef.current, thumbX.get()));\n animate(thumbX, finalPos, RELEASE_ANIM);\n animateRelease(RELEASE_ANIM);\n }}\n onPointerCancel={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n pointerIdRef.current = null;\n isDraggingRef.current = false;\n squishHoldRef.current = 0;\n\n const finalPos = Math.max(0, Math.min(travelRef.current, thumbX.get()));\n animate(thumbX, finalPos, RELEASE_ANIM);\n animateRelease(RELEASE_ANIM);\n }}\n onDragStart={(e) => e.preventDefault()}\n >\n {/* Background Track Line */}\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n height: k,\n borderRadius: J,\n background: \"var(--bg-4, #27272a)\",\n overflow: \"hidden\",\n }}\n >\n {/* Filled Track Segment */}\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: \"var(--slider-fill)\",\n background: \"var(--primary, #38bdf8)\",\n borderRadius: J,\n }}\n />\n </div>\n\n {/* Thumb Hit Area */}\n <motion.div\n style={{\n position: \"absolute\",\n x: thumbX,\n width: Y,\n height: E,\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n }}\n />\n </div>\n </div>\n </AaveGlass>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { animate, motion, useMotionValue } from \"framer-motion\";\nimport { AaveGlass } from \"../lib/glass/AaveGlass\";\nimport { LensParams } from \"../engine/types\";\n\nexport interface ToggleOption {\n id: string;\n label: string;\n icon?: React.ReactNode;\n activeColor1?: string;\n activeColor2?: string;\n}\n\nexport interface GlassToggleGroupProps {\n options: ToggleOption[];\n value?: string;\n defaultValue?: string;\n onValueChange?: (val: string) => void;\n lens?: Partial<LensParams>;\n theme?: \"light\" | \"dark\";\n className?: string;\n}\n\nconst DEFAULT_TOGGLE_LENS: Partial<LensParams> = {\n lensW: 90,\n lensH: 36,\n borderRadius: 18,\n mapSize: 256,\n depth: 2,\n chromaAmount: 0.5,\n scaleX: 0.12,\n scaleY: 0.12,\n sdfBoundary: true,\n edgeFalloff: true,\n domeDepth: 4,\n splayAmount: 0.4,\n blurAmount: 0,\n brightness: 0.08,\n specularStrength: 1.2,\n specularRotation: 45,\n glowStrength: 0.3,\n glowSpread: 0.5,\n glowExponent: 1.5,\n edgeStrength: 0.4,\n edgeWidth: 2,\n edgeExponent: 1.5,\n edgeShadow: \"0 2px 8px rgba(0, 0, 0, 0.2)\",\n edgeInsetShadow: \"0 -2px 6px rgba(0, 0, 0, 0.15)\",\n};\n\nconst SPRING_TRANSITION = {\n type: \"spring\" as const,\n stiffness: 300,\n damping: 28,\n};\n\nexport function GlassToggleGroup({\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n lens,\n theme = \"dark\",\n className,\n}: GlassToggleGroupProps) {\n const isDark = theme === \"dark\";\n const [internalValue, setInternalValue] = useState(\n defaultValue ?? (options.length > 0 ? options[0].id : \"\")\n );\n const selectedId = controlledValue !== undefined ? controlledValue : internalValue;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const itemRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n\n const lensX = useMotionValue(0.1);\n const lensWidth = useMotionValue(90);\n const lensHeight = useMotionValue(36);\n const lensRadius = useMotionValue(18);\n\n const updateSelection = (id: string) => {\n if (controlledValue === undefined) {\n setInternalValue(id);\n }\n onValueChange?.(id);\n };\n\n // Measure and spring to selected element\n useEffect(() => {\n const el = itemRefs.current.get(selectedId);\n const parent = containerRef.current;\n if (!el || !parent) return;\n\n const parentRect = parent.getBoundingClientRect();\n const itemRect = el.getBoundingClientRect();\n\n if (parentRect.width > 0 && parentRect.height > 0) {\n const centerX = (itemRect.left - parentRect.left + itemRect.width / 2) / parentRect.width;\n animate(lensX, centerX, SPRING_TRANSITION);\n animate(lensWidth, itemRect.width + 12, SPRING_TRANSITION);\n animate(lensHeight, itemRect.height + 6, SPRING_TRANSITION);\n animate(lensRadius, (itemRect.height + 6) / 2, SPRING_TRANSITION);\n }\n }, [selectedId, lensX, lensWidth, lensHeight, lensRadius]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n display: \"inline-block\",\n position: \"relative\",\n padding: \"4px\",\n borderRadius: \"22px\",\n background: \"var(--bg-2, #18181b)\",\n border: \"1px solid var(--border-1, rgba(255, 255, 255, 0.08))\",\n }}\n >\n <AaveGlass\n lens={{ ...DEFAULT_TOGGLE_LENS, ...lens, specularDark: !isDark }}\n x={lensX}\n y={0.5}\n lensW={lensWidth}\n lensH={lensHeight}\n borderRadius={lensRadius}\n refractionTarget={\n /* Refraction Target Layer: glowing colored pill under the selected option */\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n padding: \"4px\",\n }}\n >\n {options.map((opt) => {\n const isSelected = opt.id === selectedId;\n const color1 = opt.activeColor1 ?? \"#38bdf8\";\n const color2 = opt.activeColor2 ?? \"#0284c7\";\n return (\n <div\n key={opt.id}\n style={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"6px\",\n padding: \"8px 16px\",\n opacity: isSelected ? 1 : 0,\n transition: \"opacity 0.2s\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n borderRadius: \"16px\",\n background: `linear-gradient(135deg, ${color1}, ${color2})`,\n boxShadow: `0 0 16px ${color1}44`,\n }}\n />\n </div>\n );\n })}\n </div>\n }\n >\n {/* Real Rendered Button List */}\n <div\n role=\"group\"\n style={{\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n {options.map((opt) => {\n const isSelected = opt.id === selectedId;\n return (\n <button\n key={opt.id}\n ref={(node) => {\n if (node) itemRefs.current.set(opt.id, node);\n else itemRefs.current.delete(opt.id);\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n onClick={() => updateSelection(opt.id)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n padding: \"8px 16px\",\n border: \"none\",\n background: \"transparent\",\n color: isSelected\n ? \"var(--fg-1, #fff)\"\n : \"var(--fg-4, rgba(255, 255, 255, 0.5))\",\n fontSize: \"13px\",\n fontWeight: 500,\n cursor: \"pointer\",\n borderRadius: \"16px\",\n outline: \"none\",\n transition: \"color 0.2s\",\n }}\n >\n {opt.icon && <span style={{ display: \"inline-flex\" }}>{opt.icon}</span>}\n <span>{opt.label}</span>\n </button>\n );\n })}\n </div>\n </AaveGlass>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/engine/types.ts","../src/engine/math.ts","../src/webgl/VideoRefractionRenderer.ts","../src/webgl/QRRefractionRenderer.ts","../src/createLens.ts","../src/primitives/Lens.tsx","../src/components/GlassSwitch.tsx","../src/components/GlassSlider.tsx","../src/components/GlassToggleGroup.tsx"],"names":["useState","useRef","useEffect","useMemo","jsxs","jsx","PRESS_ANIM","RELEASE_ANIM","rubberBand","useCallback","useLayoutEffect","useMotionValue","useTransform","step","animate","motion"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * lensfx — Engine Layer: Types & Constants\n *\n * Pure TypeScript — no React, no DOM. Can be imported in any environment.\n */\n\n// ---------------------------------------------------------------------------\n// Core lens parameter interface\n// ---------------------------------------------------------------------------\n\n/** All optical parameters that control how a single lens looks and distorts. */\nexport interface LensParams {\n /** Lens width in pixels. */\n lensW: number;\n /** Lens height in pixels. */\n lensH: number;\n /** Lens corner radius in pixels. */\n borderRadius: number;\n /** Refraction depth/strength — higher = more distortion. Range: 0–10. */\n depth: number;\n /** Chromatic aberration split amount. 0 = monochromatic, 1 = full RGB split. */\n chromaAmount: number;\n /** Horizontal displacement scale. 0 = no lateral displacement. */\n scaleX: number;\n /** Vertical displacement scale. 0 = no vertical displacement. */\n scaleY: number;\n /** Resolution of the displacement map canvas (power-of-two recommended). */\n mapSize: number;\n /** Gaussian blur radius applied to the background behind the lens (px). */\n blurAmount: number;\n /** If true, clips displacement strictly to the lens SDF boundary. */\n sdfBoundary: boolean;\n /** If true, applies an erf-smoothed falloff at the lens edge. */\n edgeFalloff: boolean;\n /** Additive brightness overlay inside the lens. Positive = lighter, negative = darker. Range: -1 to 1. */\n brightness: number;\n /** Intensity of the specular highlight. Range: 0–3. */\n specularStrength: number;\n /** Angle of the specular directional light in degrees. */\n specularRotation: number;\n /** If true, uses dark (shadow) specular mode instead of bright. */\n specularDark: boolean;\n /** Uniform tint applied inside the lens. Range: -1 (black) to 1 (white). */\n tint: number;\n /** Strength of the inner glow band. Range: 0–1. */\n glowStrength: number;\n /** Angular spread of the glow band, normalised. Range: 0–1. */\n glowSpread: number;\n /** Exponent controlling glow falloff curve. Higher = sharper band. */\n glowExponent: number;\n /** Strength of the edge specular ring (separate from inner glow). Range: 0–1. */\n edgeStrength: number;\n /** Thickness of the edge specular ring in pixels. */\n edgeWidth: number;\n /** Exponent controlling edge ring falloff curve. */\n edgeExponent: number;\n /** Height of the ellipsoid dome above the lens surface in pixels. */\n domeDepth: number;\n /** How much to reduce displacement magnitude at corners (0 = no splay, 1 = full splay). */\n splayAmount: number;\n /** Box shadow applied to the lens container (outer drop shadow). */\n edgeShadow?: string;\n /** Inset box shadow applied to the lens container. */\n edgeInsetShadow?: string;\n /** Secondary rest-state shadow (e.g. when the slider thumb is at rest). */\n restEdgeShadow?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Internal engine types\n// ---------------------------------------------------------------------------\n\n/** Precomputed geometric constants for dome curvature. */\nexport interface DomeConstants {\n /** Horizontal sphere radius for dome curvature. */\n Rx: number;\n /** Vertical sphere radius for dome curvature. */\n Ry: number;\n /** Normalised scale factor for the X gradient (trapezoidal integration). */\n scaleX: number;\n /** Normalised scale factor for the Y gradient (trapezoidal integration). */\n scaleY: number;\n}\n\n/** Input to the synchronous displacement map generator. */\nexport interface MapGeneratorInput {\n lensHalfWidth: number;\n lensHalfHeight: number;\n borderRadius: number;\n depth: number;\n sdfBoundary: boolean;\n edgeFalloff: boolean;\n specularRotation: number;\n glowStrength: number;\n glowSpread: number;\n glowExponent: number;\n edgeStrength: number;\n edgeWidth: number;\n edgeExponent: number;\n domeDepth: number;\n splayAmount: number;\n}\n\n/** Output from the displacement map generator. */\nexport interface MapGeneratorOutput {\n /** PNG data URL of the generated displacement map. */\n dataUrl: string;\n /** Time taken for the pixel loop, in milliseconds. */\n loopMs: number;\n /** Time taken for canvas.toDataURL encoding, in milliseconds. */\n encodeMs: number;\n}\n\n// Internal SVG filter pooling types (not exposed in public API)\nexport interface MultiLensSlot {\n filterEl: SVGFilterElement | null;\n feDispEl: SVGFEDisplacementMapElement | null;\n subSlots: SubSlot[];\n assignedTo: HTMLElement | null;\n version: number;\n lastDispScale: string;\n lastFilterW: string;\n lastFilterH: string;\n}\n\nexport interface SubSlot {\n feImageEl: SVGFEImageElement | null;\n feColorMatrixEl: SVGFEColorMatrixElement | null;\n feMaskEl: SVGFEImageElement | null;\n feMaskColorMatrixEl: SVGFEColorMatrixElement | null;\n assignedLensId: string | null;\n lastHref: string;\n lastX: string;\n lastY: string;\n lastW: string;\n lastH: string;\n lastColorMatrix: string;\n lastMaskKey: string;\n lastMaskColorMatrix: string;\n}\n\nexport interface SingleLensSlot {\n filterEl: SVGFilterElement | null;\n lensEls: SVGElement[];\n dispEls: SVGFEDisplacementMapElement[];\n mapMatrixEl: SVGFEColorMatrixElement | null;\n feImageEl: SVGFEImageElement | null;\n version: number;\n assignedTo: HTMLElement | null;\n assignedRect: DOMRect | null;\n}\n\n// ---------------------------------------------------------------------------\n// Default parameter sets — calibrated baseline optical parameters\n// ---------------------------------------------------------------------------\n\n/** Zero-refraction baseline — all effects disabled. */\nexport const DEFAULT_LENS_PARAMS: LensParams = {\n lensW: 90,\n lensH: 60,\n depth: 0,\n chromaAmount: 0,\n scaleX: 0,\n scaleY: 0,\n mapSize: 256,\n borderRadius: 0,\n blurAmount: 0,\n sdfBoundary: false,\n edgeFalloff: false,\n brightness: 0,\n specularStrength: 0,\n specularRotation: 0,\n glowStrength: 0,\n glowSpread: 1,\n glowExponent: 1.5,\n tint: 0,\n edgeStrength: 0,\n edgeWidth: 3,\n edgeExponent: 1.5,\n specularDark: false,\n domeDepth: 0,\n splayAmount: 0,\n};\n\n/** Selector strings used by Lens to find refraction containers & targets. */\nexport const LENSFX_SELECTORS = {\n container: \"[data-lensfx-container]\",\n target: \"[data-lensfx-target]\",\n} as const;\n\n// ---------------------------------------------------------------------------\n// Component-specific presets\n// ---------------------------------------------------------------------------\n\n/** LensSwitch base optical parameters. */\nexport const SWITCH_GLASS_DEFAULTS: Partial<LensParams> = {\n lensW: 90,\n lensH: 60,\n borderRadius: 30,\n mapSize: 256,\n depth: 2,\n chromaAmount: 1,\n scaleX: 0.25,\n scaleY: 0.25,\n sdfBoundary: true,\n edgeFalloff: true,\n domeDepth: 6,\n splayAmount: 0.4,\n blurAmount: 0,\n brightness: 0.06,\n specularStrength: 1,\n specularRotation: 45,\n specularDark: false,\n tint: 0,\n glowStrength: 0,\n glowSpread: 0.5,\n glowExponent: 1.5,\n edgeStrength: 0,\n edgeWidth: 2,\n edgeExponent: 1.5,\n edgeShadow: \"0 2px 6px rgba(0, 0, 0, 0.16)\",\n edgeInsetShadow: \"0 -4px 10px rgba(0, 0, 0, 0.12)\",\n};\n\nexport const SWITCH_DARK_OVERRIDES: Partial<LensParams> = {\n brightness: 0.12,\n glowStrength: 0.4,\n edgeStrength: 0.5,\n};\n\nexport const SWITCH_LIGHT_OVERRIDES: Partial<LensParams> = {\n brightness: -0.02,\n specularRotation: 30,\n specularStrength: 1.5,\n glowStrength: 0.4,\n glowSpread: 0.5,\n glowExponent: 2,\n edgeStrength: 1,\n edgeWidth: 1.5,\n edgeExponent: 1,\n};\n\n/** LensSlider base optical parameters. */\nexport const SLIDER_GLASS_DEFAULTS: Partial<LensParams> = {\n lensW: 90,\n lensH: 60,\n borderRadius: 30,\n mapSize: 256,\n depth: 2,\n chromaAmount: 0.65,\n scaleX: 0.06,\n scaleY: 0.06,\n sdfBoundary: true,\n edgeFalloff: true,\n domeDepth: 5,\n splayAmount: 0.5,\n blurAmount: 0,\n brightness: 0.06,\n specularStrength: 1.5,\n specularRotation: 45,\n specularDark: false,\n tint: 0,\n glowStrength: 0.4,\n glowSpread: 0.5,\n glowExponent: 1.5,\n edgeStrength: 0,\n edgeWidth: 3,\n edgeExponent: 1.5,\n edgeShadow: \"0 2px 6px rgba(0, 0, 0, 0.16)\",\n edgeInsetShadow: \"0 -4px 10px rgba(0, 0, 0, 0.12)\",\n restEdgeShadow: \"0 1.333px 5.333px var(--lensfx-shadow-strong, rgba(0,0,0,0.3))\",\n};\n\nexport const SLIDER_DARK_OVERRIDES: Partial<LensParams> = {\n scaleX: 0.133,\n scaleY: 0.135,\n brightness: 0.12,\n specularRotation: 45,\n glowExponent: 1.5,\n edgeStrength: 0.5,\n edgeWidth: 1,\n edgeExponent: 1.5,\n};\n\nexport const SLIDER_LIGHT_OVERRIDES: Partial<LensParams> = {\n scaleX: 0.1,\n scaleY: 0.1,\n brightness: -0.02,\n specularRotation: 30,\n glowExponent: 2,\n edgeStrength: 1,\n edgeWidth: 1,\n edgeExponent: 1,\n};\n\nexport const SLIDER_SAFARI_OVERRIDES: Partial<LensParams> = {\n scaleY: 0.25,\n};\n","/**\n * lensfx — Engine Layer: Core Mathematics & Displacement Map Generation\n *\n * Pure TypeScript — no React, no DOM references at module load time.\n * DOM (canvas) is accessed only inside function bodies, never at import time,\n * making this SSR-safe.\n */\n\nimport { DomeConstants, MapGeneratorInput, MapGeneratorOutput } from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Mathematical primitives\n// ---------------------------------------------------------------------------\n\n/**\n * Approximation of the Gauss error function using hyperbolic tangent.\n *\n * erf(x) ≈ tanh(√π · x)\n *\n * The constant √π ≈ 1.7724538509 ensures that the derivative at 0 equals\n * 2/√π (matching the exact erf), giving a C∞ smooth clamping function that\n * avoids branching and is monotone on (−∞, +∞).\n */\nexport function erf(x: number): number {\n return Math.tanh(1.7724538509 * x);\n}\n\n/**\n * Numerical integration of dome slope over 200 samples using the trapezoid rule.\n * Used to derive the normalisation factor for the dome gradient lookup table.\n *\n * @param R - sphere radius\n * @param t - half-width/height of the lens face at the dome base\n */\nfunction integrateDome(R: number, t: number): number {\n let sum = 0;\n for (let n = 0; n <= 200; n++) {\n const a = (n / 200) * t;\n const slope = a / Math.sqrt(R * R - a * a);\n sum += n === 0 || n === 200 ? 0.5 * slope : slope;\n }\n return sum / 200;\n}\n\n/**\n * Computes ellipsoid dome curvature geometry constants for the X and Y axes.\n *\n * The dome is modelled as a sphere of radius R that just touches both the\n * centre and the edge of the lens: R = (halfDim² + depth²) / (2·depth).\n *\n * @param domeDepth - maximum height of the dome above the lens plane (px)\n * @param halfW - half-width of the lens (px)\n * @param halfH - half-height of the lens (px)\n */\nexport function computeDomeConstants(\n domeDepth: number,\n halfW: number,\n halfH: number\n): DomeConstants {\n const a = Math.max(0.01, Math.min(domeDepth, Math.min(halfW, halfH) - 1));\n const Rx = (halfW * halfW + a * a) / (2 * a);\n const Ry = (halfH * halfH + a * a) / (2 * a);\n const intX = integrateDome(Rx, halfW);\n const intY = integrateDome(Ry, halfH);\n\n return {\n Rx,\n Ry,\n scaleX: intX > 0 ? 0.5 / intX : 1,\n scaleY: intY > 0 ? 0.5 / intY : 1,\n };\n}\n\n/**\n * Evaluates the gradient (surface slope) of the dome at a given offset\n * from the lens centre. Returns a value in [0, 1] normalised by `scale`.\n */\nexport function domeGradient(pos: number, R: number, scale: number): number {\n const p = Math.min(pos, 0.999 * R);\n return (p / Math.sqrt(R * R - p * p)) * scale;\n}\n\n/**\n * Builds an SVG feColorMatrix 4×5 matrix string that rescales the\n * displacement map's R and G channels around the neutral midpoint (128/255 = 0.5).\n *\n * When scaleX ≠ scaleY the lens has asymmetric horizontal/vertical displacement\n * and we normalise the larger axis to 1 so both axes are within [0, 255].\n */\nexport function colorMatrixValues(ratioX: number, ratioY: number): string {\n return `${ratioX} 0 0 0 ${0.5 * (1 - ratioX)} 0 ${ratioY} 0 0 ${\n 0.5 * (1 - ratioY)\n } 0 0 1 0 0 0 0 0 1 0`;\n}\n\n// ---------------------------------------------------------------------------\n// SVG mask cache (safe because it is only written inside function bodies)\n// ---------------------------------------------------------------------------\n\nconst maskCache = new Map<string, string>();\n\n/**\n * Returns a memoised SVG rounded-rectangle mask as a data URI.\n * Used as CSS `mask-image` on the backdrop-blur and tint layers to\n * clip them to the lens shape without touching the filter graph.\n */\nexport function getSvgMaskDataUri(\n width: number,\n height: number,\n radius: number\n): { uri: string; key: string } {\n const n = Math.max(1, Math.round(width));\n const l = Math.max(1, Math.round(height));\n const i = Math.max(0, Math.min(Math.round(radius), Math.min(n, l) / 2));\n const key = `${n}|${l}|${i}`;\n\n const cached = maskCache.get(key);\n if (cached) return { uri: cached, key };\n\n const w = Math.max(0, n - 1);\n const h = Math.max(0, l - 1);\n const r = Math.max(0, i - 0.5);\n const svg = `<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${n} ${l}' preserveAspectRatio='none'><rect x='0.5' y='0.5' width='${w}' height='${h}' rx='${r}' ry='${r}' fill='black'/></svg>`;\n const uri = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n maskCache.set(key, uri);\n\n return { uri, key };\n}\n\n// ---------------------------------------------------------------------------\n// Synchronous displacement map generator (for animated / interactive lenses)\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a stateful, synchronous displacement map generator with:\n * • 4-fold quadrant symmetry (75 % fewer pixel evaluations)\n * • Reusable canvas & ImageData to avoid GC pressure\n * • Cached dome gradient lookup table (recalculated only when geometry changes)\n *\n * Use for animated lenses where the map must update every frame in sync with\n * Framer Motion values. For static lenses, prefer `generateDisplacementMapAsync`.\n *\n * @param mapSize - side length of the square displacement map canvas (px)\n */\nexport function createDisplacementMapGeneratorSync(mapSize: number) {\n // Private mutable state — closed over by the returned object\n let canvas: HTMLCanvasElement | null = null;\n let ctx: CanvasRenderingContext2D | null = null;\n let imgData: ImageData | null = null;\n let domeConstants: DomeConstants | null = null;\n let cachedDomeDepth = -Infinity;\n let cachedHalfW = -Infinity;\n let cachedHalfH = -Infinity;\n let xLookup: Float32Array | null = null;\n let cachedF = 0;\n let dirtyDome = true;\n\n return {\n /**\n * Generate a new displacement map and return a PNG data URL.\n * Reuses internal canvas memory; safe to call every animation frame.\n */\n generate(input: MapGeneratorInput): MapGeneratorOutput {\n if (!canvas) {\n canvas = document.createElement(\"canvas\");\n canvas.width = mapSize;\n canvas.height = mapSize;\n ctx = canvas.getContext(\"2d\")!;\n imgData = ctx.createImageData(mapSize, mapSize);\n }\n\n const {\n lensHalfWidth: x,\n lensHalfHeight: y,\n borderRadius: b,\n depth: M,\n sdfBoundary: R,\n edgeFalloff: S,\n specularRotation: w = 45,\n glowStrength: A = 0,\n glowSpread: v = 1,\n glowExponent: E = 1.5,\n edgeStrength: $ = 0,\n edgeWidth: C = 3,\n edgeExponent: k = 1.5,\n domeDepth: j = 0,\n splayAmount: I = 1,\n } = input;\n\n const T = imgData!.data;\n const F = mapSize >> 1; // half-size\n const D = Math.min(b, Math.min(x, y));\n const L = Math.max(0, x - M);\n const B = Math.max(0, y - M);\n const H = Math.max(0, Math.min(b, Math.min(L, B)));\n const O = M > 0 ? 1 / (M * Math.SQRT2) : 1e6;\n const hasSpecular = A > 0 || $ > 0;\n const W = (w * Math.PI) / 180;\n const U = Math.cos(W);\n const G = Math.sin(W);\n const N = (1 - v) * Math.SQRT2;\n const q = v * Math.SQRT2;\n const z = q > 0.001 ? 1 / q : 0;\n const Y = C > 0 ? 1 / C : 0;\n const X = (2 * x) / mapSize;\n const P = (2 * y) / mapSize;\n const V = 1 / x;\n const K = 1 / y;\n const hasDome = j > 0;\n const hasSplay = I < 1;\n\n if (hasDome) {\n if (\n !domeConstants ||\n Math.abs(j - cachedDomeDepth) > 0.5 ||\n Math.abs(x - cachedHalfW) > 1 ||\n Math.abs(y - cachedHalfH) > 1\n ) {\n domeConstants = computeDomeConstants(j, x, y);\n cachedDomeDepth = j;\n cachedHalfW = x;\n cachedHalfH = y;\n dirtyDome = true;\n }\n if (cachedF !== F) {\n xLookup = new Float32Array(F);\n cachedF = F;\n dirtyDome = true;\n }\n if (dirtyDome && xLookup && domeConstants) {\n const r2 = domeConstants.Rx * domeConstants.Rx;\n const clampVal = 0.999 * domeConstants.Rx;\n for (let col = 0; col < F; col++) {\n const ox = -((col + 0.5) * X - x);\n const clamped = ox < clampVal ? ox : clampVal;\n xLookup[col] =\n (clamped / Math.sqrt(r2 - clamped * clamped)) *\n domeConstants.scaleX;\n }\n dirtyDome = false;\n }\n }\n\n const domeX = hasDome ? xLookup : null;\n const minHalf = 0.5 * Math.min(x, y);\n const invMinHalf = minHalf > 0 ? 1 / minHalf : 0;\n const startTime = performance.now();\n\n // ── Top-left quadrant loop (mirrored into all 4 quadrants) ──────────\n for (let t = 0; t < F; t++) {\n const rowOpposite = mapSize - 1 - t;\n const oy = -((t + 0.5) * P - y);\n const iy = oy - y + D;\n const oSdfY = S ? oy - B + H : 0;\n const gy =\n hasDome && domeConstants\n ? domeGradient(oy, domeConstants.Ry, domeConstants.scaleY)\n : oy * K > 1\n ? 1\n : oy * K;\n const rawGy = oy * K > 1 ? 1 : oy * K;\n const splayY = hasSplay ? Math.max(0, 1 - (y - oy) * invMinHalf) : 0;\n\n for (let n = 0; n < F; n++) {\n const colOpposite = mapSize - 1 - n;\n const ox = -((n + 0.5) * X - x);\n const ix = ox - x + D;\n\n // SDF of rounded rectangle\n const gxMax = ix > 0 ? ix : 0;\n const gyMax = iy > 0 ? iy : 0;\n const dist2 = gxMax * gxMax + gyMax * gyMax;\n const sdf =\n (dist2 > 0 ? Math.sqrt(dist2) : 0) +\n (ix > iy ? (ix > 0 ? 0 : ix) : iy > 0 ? 0 : iy) -\n D;\n\n // 4-way index addresses\n const idxTL = (t * mapSize + n) * 4;\n const idxTR = (t * mapSize + colOpposite) * 4;\n const idxBL = (rowOpposite * mapSize + n) * 4;\n const idxBR = (rowOpposite * mapSize + colOpposite) * 4;\n\n if (!R || sdf < 0) {\n let specTL = 128, specTR = 128, specBL = 128, specBR = 128;\n\n let curGx = domeX ? domeX[n] : ox * V > 1 ? 1 : ox * V;\n let curGy = gy;\n\n // Corner splay attenuation\n if (hasSplay) {\n const splayFac = 1 - I;\n const effY = splayY * splayFac;\n const effX = Math.max(0, 1 - (x - ox) * invMinHalf) * splayFac;\n if (effY > 0.001 || effX > 0.001) {\n const prevGx = curGx;\n const prevGy = curGy;\n curGx = prevGx * (1 - effY);\n curGy = prevGy * (1 - effX);\n const prevMag = Math.sqrt(prevGx * prevGx + prevGy * prevGy);\n const newMag = Math.sqrt(curGx * curGx + curGy * curGy);\n if (newMag > 0.001) {\n const norm = prevMag / newMag;\n curGx *= norm;\n curGy *= norm;\n }\n }\n }\n\n // erf edge falloff\n let falloff = 1;\n if (S) {\n const fx = ox - L + H;\n const fy = oSdfY;\n const mx = fx > 0 ? fx : 0;\n const my = fy > 0 ? fy : 0;\n const falloffSdf =\n Math.sqrt(mx * mx + my * my) +\n (fx > fy ? (fx > 0 ? 0 : fx) : fy > 0 ? 0 : fy) -\n H;\n falloff = 0.5 * (1 + erf(falloffSdf * O));\n }\n\n const hx = 0.5 * curGx * falloff;\n const hy = 0.5 * curGy * falloff;\n\n // Displacement channel encoding (neutral = 128)\n const rTL = ((0.5 + hx) * 255 + 0.5) | 0;\n const rTR = ((0.5 - hx) * 255 + 0.5) | 0;\n const gTL = ((0.5 + hy) * 255 + 0.5) | 0;\n const gBL = ((0.5 - hy) * 255 + 0.5) | 0;\n\n // Blue channel = specular highlight mask\n if (hasSpecular) {\n const rawGx = (ox * V > 1 ? 1 : ox * V) * U;\n const rawGyProj = rawGy * G;\n const dot1 = rawGx + rawGyProj;\n const dot2 = rawGx - rawGyProj;\n const absDot1 = dot1 < 0 ? -dot1 : dot1;\n const absDot2 = dot2 < 0 ? -dot2 : dot2;\n\n let edgeAtten = 0;\n if ($ > 0) {\n edgeAtten = sdf < 0 ? 1 + sdf * Y : 0;\n if (edgeAtten < 0) edgeAtten = 0;\n }\n\n let glow1 = 0, glow2 = 0;\n if (A > 0) {\n const s1 = (absDot1 - N) * z;\n glow1 += A * Math.pow(s1 < 0 ? 0 : s1 > 1 ? 1 : s1, E) * falloff;\n const s2 = (absDot2 - N) * z;\n glow2 += A * Math.pow(s2 < 0 ? 0 : s2 > 1 ? 1 : s2, E) * falloff;\n }\n if ($ > 0) {\n glow1 += $ * edgeAtten * Math.pow(absDot1, k);\n glow2 += $ * edgeAtten * Math.pow(absDot2, k);\n }\n if (glow1 > 1) glow1 = 1;\n if (glow2 > 1) glow2 = 1;\n\n specTL = (127 * glow1 + 128 + 0.5) | 0;\n specBR = (127 * glow1 + 128 + 0.5) | 0;\n specTR = (127 * glow2 + 128 + 0.5) | 0;\n specBL = (127 * glow2 + 128 + 0.5) | 0;\n }\n\n T[idxTL] = rTL; T[idxTL + 1] = gTL; T[idxTL + 2] = specTL; T[idxTL + 3] = 255;\n T[idxTR] = rTR; T[idxTR + 1] = gTL; T[idxTR + 2] = specTR; T[idxTR + 3] = 255;\n T[idxBL] = rTL; T[idxBL + 1] = gBL; T[idxBL + 2] = specBL; T[idxBL + 3] = 255;\n T[idxBR] = rTR; T[idxBR + 1] = gBL; T[idxBR + 2] = specBR; T[idxBR + 3] = 255;\n } else {\n // Outside lens — neutral (no displacement)\n for (const idx of [idxTL, idxTR, idxBL, idxBR]) {\n T[idx] = 128; T[idx + 1] = 128; T[idx + 2] = 128; T[idx + 3] = 255;\n }\n }\n }\n }\n\n const loopMs = performance.now() - startTime;\n ctx!.putImageData(imgData!, 0, 0);\n const encodeStart = performance.now();\n const dataUrl = canvas!.toDataURL();\n const encodeMs = performance.now() - encodeStart;\n\n return { dataUrl, loopMs, encodeMs };\n },\n\n /** Release canvas memory. Call in React cleanup (useEffect return). */\n dispose() {\n if (canvas) {\n canvas.width = 0;\n canvas.height = 0;\n canvas = null;\n }\n ctx = null;\n imgData = null;\n domeConstants = null;\n cachedDomeDepth = -Infinity;\n cachedHalfW = -Infinity;\n cachedHalfH = -Infinity;\n dirtyDome = true;\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Async displacement map generator (for static / resting lenses)\n// ---------------------------------------------------------------------------\n\n/**\n * Generates a displacement map asynchronously, processing 64 rows per\n * animation frame via `setTimeout(0)` to avoid blocking the main thread.\n *\n * Returns a Blob Object URL (PNG). Caller is responsible for calling\n * `URL.revokeObjectURL` when the Lens unmounts.\n *\n * Use for static lenses where the map does not need to update every frame.\n */\nexport async function generateDisplacementMapAsync(\n canvas: HTMLCanvasElement,\n params: {\n canvasSize: number;\n lensHalfWidth: number;\n lensHalfHeight: number;\n borderRadius: number;\n depth: number;\n sdfBoundary: boolean;\n edgeFalloff: boolean;\n specularRotation?: number;\n glowStrength?: number;\n glowSpread?: number;\n glowExponent?: number;\n edgeStrength?: number;\n edgeWidth?: number;\n edgeExponent?: number;\n domeDepth?: number;\n splayAmount?: number;\n }\n): Promise<string | null> {\n const {\n canvasSize: r,\n lensHalfWidth: n,\n lensHalfHeight: l,\n borderRadius: i,\n depth: o,\n sdfBoundary: u,\n edgeFalloff: c,\n specularRotation: f = 45,\n glowStrength: d = 0,\n glowSpread: g = 1,\n glowExponent: h = 1.5,\n edgeStrength: p = 0,\n edgeWidth: m = 3,\n edgeExponent: xx = 1.5,\n domeDepth: y = 0,\n splayAmount: bv = 1,\n } = params;\n\n canvas.width = r;\n canvas.height = r;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return null;\n\n const imgD = ctx.createImageData(r, r);\n const S = Math.min(i, Math.min(n, l));\n const w = Math.max(0, n - o);\n const A = Math.max(0, l - o);\n const v = Math.max(0, Math.min(i, Math.min(w, A)));\n const E = o > 0 ? 1 / (o * Math.SQRT2) : 1e6;\n const hasSpecular = d > 0 || p > 0;\n const C = (f * Math.PI) / 180;\n const k = Math.cos(C);\n const j = Math.sin(C);\n const II = (1 - g) * Math.SQRT2;\n const TT = g * Math.SQRT2;\n const F = y > 0 ? computeDomeConstants(y, n, l) : null;\n const D = bv < 1;\n const Lv = 0.5 * Math.min(n, l);\n const Bv = Lv > 0 ? 1 / Lv : 0;\n\n for (let rowBatch = 0; rowBatch < r; rowBatch += 64) {\n const endRow = Math.min(rowBatch + 64, r);\n for (let row = rowBatch; row < endRow; row++) {\n for (let col = 0; col < r; col++) {\n const idx = (row * r + col) * 4;\n const ox = ((col + 0.5) / r) * (2 * n) - n;\n const oy = ((row + 0.5) / r) * (2 * l) - l;\n const absX = Math.abs(ox);\n const absY = Math.abs(oy);\n\n const Mv = absX - n + S;\n const Cy = absY - l + S;\n const clampX = Math.max(Mv, 0);\n const clampY = Math.max(Cy, 0);\n const dist2 = clampX * clampX + clampY * clampY;\n const sdf =\n (dist2 > 0 ? Math.sqrt(dist2) : 0) +\n Math.min(Math.max(Mv, Cy), 0) -\n S;\n\n if (!u || sdf < 0) {\n let gx: number;\n let gy: number;\n if (F) {\n gx = Math.sign(ox) * domeGradient(absX, F.Rx, F.scaleX);\n gy = Math.sign(oy) * domeGradient(absY, F.Ry, F.scaleY);\n } else {\n gx = Math.max(-1, Math.min(1, ox / n));\n gy = Math.max(-1, Math.min(1, oy / l));\n }\n\n let effGx = gx;\n let effGy = gy;\n if (D) {\n const attenY = Math.max(0, 1 - (l - absY) * Bv) * (1 - bv);\n const attenX = Math.max(0, 1 - (n - absX) * Bv) * (1 - bv);\n if (attenY > 0.001 || attenX > 0.001) {\n const oldGx = effGx;\n const oldGy = effGy;\n effGx = oldGx * (1 - attenY);\n effGy = oldGy * (1 - attenX);\n const oldMag = Math.sqrt(oldGx * oldGx + oldGy * oldGy);\n const newMag = Math.sqrt(effGx * effGx + effGy * effGy);\n if (newMag > 0.001) {\n const norm = oldMag / newMag;\n effGx *= norm;\n effGy *= norm;\n }\n }\n }\n\n let falloff = 1;\n if (c) {\n const innerX = absX - w + v;\n const innerY = absY - A + v;\n const innerSdf =\n Math.sqrt(Math.max(innerX, 0) ** 2 + Math.max(innerY, 0) ** 2) +\n Math.min(Math.max(innerX, innerY), 0) -\n v;\n falloff = 0.5 * (1 + erf(innerSdf * E));\n }\n\n imgD.data[idx] = Math.round((0.5 - 0.5 * effGx * falloff) * 255);\n imgD.data[idx + 1] = Math.round((0.5 - 0.5 * effGy * falloff) * 255);\n\n if (hasSpecular) {\n const dot = Math.abs(\n Math.max(-1, Math.min(1, ox / n)) * k +\n Math.max(-1, Math.min(1, oy / l)) * j\n );\n let glow = 0;\n if (d > 0) {\n const spread =\n TT > 0.001 ? Math.min(1, Math.max(0, dot - II) / TT) : 0;\n glow += d * Math.pow(spread, h) * falloff;\n }\n if (p > 0) {\n const edgeVal = sdf < 0 ? Math.max(0, 1 + sdf / m) : 0;\n glow += p * edgeVal * Math.pow(dot, xx);\n }\n glow = Math.min(1, glow);\n imgD.data[idx + 2] = Math.round(127 * glow + 128);\n } else {\n imgD.data[idx + 2] = 128;\n }\n } else {\n imgD.data[idx] = 128;\n imgD.data[idx + 1] = 128;\n imgD.data[idx + 2] = 128;\n }\n imgD.data[idx + 3] = 255;\n }\n }\n if (rowBatch + 64 < r) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n }\n\n ctx.putImageData(imgD, 0, 0);\n const blob = await new Promise<Blob | null>((resolve) =>\n canvas.toBlob(resolve, \"image/png\")\n );\n return blob ? URL.createObjectURL(blob) : null;\n}\n","/**\n * lensfx — WebGL Layer: VideoRefractionRenderer\n *\n * Full WebGL 1 video refraction engine — Safari fallback for live <video> frames\n * which cannot be filtered by SVG feDisplacementMap in WebKit.\n *\n * Features:\n * - Analytical circle and rounded-rect bar SDFs\n * - Multi-control dominant lens tracking with press scaling\n * - Separable 9-tap Gaussian blur pass (two-pass half-res FBO)\n * - Chromatic aberration (R, G, B pass)\n * - Adaptive specular & Apple-style vibrancy luminance correction\n */\n\n/** Options for constructing a VideoRefractionRenderer. */\nexport interface VideoRendererOptions {\n /** Canvas element to render into. */\n canvas: HTMLCanvasElement;\n /** Source video element to sample frames from. */\n video: HTMLVideoElement;\n /** Lens depth strength. Default: 2. */\n depth?: number;\n /** Chromatic aberration amount (0–1). Default: 0.5. */\n chromaAmount?: number;\n /** Angle of specular directional light (degrees). Default: 45. */\n specularRotation?: number;\n /** Specular highlight intensity. Default: 1. */\n specularStrength?: number;\n}\n\nexport const VERTEX_SHADER = `\nattribute vec2 a_pos;\nvarying vec2 v_uv;\nvoid main() {\n // Flip Y so UV (0,0) = top-left, matching HTML/CSS coordinates.\n v_uv = vec2(a_pos.x * 0.5 + 0.5, 0.5 - a_pos.y * 0.5);\n gl_Position = vec4(a_pos, 0.0, 1.0);\n}\n`;\n\nexport const BLUR_FRAGMENT_SHADER = `\nprecision highp float;\nuniform sampler2D u_source;\nuniform vec2 u_dir;\nvarying vec2 v_uv;\n\nvoid main() {\n vec4 c = texture2D(u_source, v_uv) * 0.2042;\n c += (texture2D(u_source, v_uv + 1.0 * u_dir) + texture2D(u_source, v_uv - 1.0 * u_dir)) * 0.1801;\n c += (texture2D(u_source, v_uv + 2.0 * u_dir) + texture2D(u_source, v_uv - 2.0 * u_dir)) * 0.1240;\n c += (texture2D(u_source, v_uv + 3.0 * u_dir) + texture2D(u_source, v_uv - 3.0 * u_dir)) * 0.0663;\n c += (texture2D(u_source, v_uv + 4.0 * u_dir) + texture2D(u_source, v_uv - 4.0 * u_dir)) * 0.0276;\n gl_FragColor = c;\n}\n`;\n\nexport const REFRACTION_FRAGMENT_SHADER = `\n#extension GL_OES_standard_derivatives : enable\nprecision highp float;\n\nuniform sampler2D u_video;\nuniform sampler2D u_map;\nuniform sampler2D u_blurred;\nuniform float u_baseScale[3];\nuniform float u_ratioX[3];\nuniform float u_ratioY[3];\nuniform float u_chromaAmount;\nuniform float u_specStrength;\nuniform float u_adaptStrength;\nuniform float u_specLumaLow;\nuniform float u_specLumaHigh;\nuniform float u_hasBlur;\nuniform vec4 u_bbox; // (x, y, w, h) normalised, y=0 at top\nuniform vec3 u_circles[3]; // (cx, cy, radius) in bbox pixel space\nuniform float u_scale[3]; // per-circle geometric press scale (1 = unscaled)\nuniform vec4 u_bar; // (cx, cy, w, h) in bbox pixel space; w<=0 means inactive\nuniform float u_barRadius; // corner radius for the rounded-rect bar lens\nuniform float u_barBaseScale;\nuniform float u_barRatioX;\nuniform float u_barRatioY;\nuniform vec2 u_bboxSize; // bbox (width, height) in pixels\n\nvarying vec2 v_uv;\n\nvoid main() {\n vec2 uv = v_uv;\n vec2 bMin = u_bbox.xy;\n vec2 bSize = u_bbox.zw;\n vec2 bMax = bMin + bSize;\n\n // Outside bounding box -> pass-through video\n if (uv.x < bMin.x || uv.x > bMax.x || uv.y < bMin.y || uv.y > bMax.y) {\n gl_FragColor = texture2D(u_video, uv);\n return;\n }\n\n // Map fragment UV -> displacement texture UV\n vec2 mUV = (uv - bMin) / bSize;\n\n // Analytical SDF mask (pixel-perfect at any resolution). Tracks the\n // dominant region so per-region scale/ratio can be picked up via the\n // loop-constant index (safe in WebGL 1). After the circle loop we test the\n // rounded-rect \"bar\" region (when active) and take whichever has the\n // larger mask value. domCenter/domScale track the dominant lens so the\n // displacement map is sampled in its (press-)scaled space below.\n vec2 pxPos = mUV * u_bboxSize;\n float mask = 0.0;\n float baseScale = 0.0;\n float ratioX = 0.0;\n float ratioY = 0.0;\n\n // Map-sample scale assignment, tracked SEPARATELY from the tight SDF mask: a\n // pixel adopts a circle's press scale across the union of its original and\n // scaled radius (R * max(1, s)). That way the annulus a shrunk lens vacates\n // samples empty space instead of leaving the original rim stuck behind.\n // domScale = 1 (bar + background) -> identity sample.\n vec2 domCenter = pxPos;\n float domScale = 1.0;\n float domDist = 1.0; // nearest normalised assignment distance (<1 = inside)\n\n for (int i = 0; i < 3; i++) {\n if (u_circles[i].z < 0.1) continue; // skip inactive circles\n float s = max(u_scale[i], 0.001);\n float R = u_circles[i].z;\n float rho = length(pxPos - u_circles[i].xy);\n\n // Visible lens SDF at the scaled radius -> blur / specular gating.\n float dist = rho - R * s;\n float aa = fwidth(dist);\n float m = 1.0 - smoothstep(-aa, aa, dist);\n if (m > mask) {\n mask = m;\n baseScale = u_baseScale[i];\n ratioX = u_ratioX[i];\n ratioY = u_ratioY[i];\n }\n\n // Scale assignment over max(original, scaled) radius, PLUS a small FIXED\n // pixel margin so the region boundary clears the map's hard content edge at\n // r = R. A *fractional* margin scales with R, so a big lens (play) would\n // swallow its neighbours' regions and drag their rings in. 4px clears the\n // edge's AA band without ever reaching the gap to the next control.\n float nd = rho / (R * max(1.0, s) + 4.0);\n if (nd < domDist) {\n domDist = nd;\n domCenter = u_circles[i].xy;\n domScale = s;\n }\n }\n\n // Bar (rounded-rect) SDF - only when u_bar.zw > 0. The bar never scales, so\n // it keeps the identity map sample (domScale stays 1 for bar + background).\n if (u_bar.z > 0.1 && u_bar.w > 0.1) {\n vec2 q = abs(pxPos - u_bar.xy) - u_bar.zw * 0.5 + vec2(u_barRadius);\n float barDist =\n length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - u_barRadius;\n float aaBar = fwidth(barDist);\n float mBar = 1.0 - smoothstep(-aaBar, aaBar, barDist);\n if (mBar > mask) {\n mask = mBar;\n baseScale = u_barBaseScale;\n ratioX = u_barRatioX;\n ratioY = u_barRatioY;\n }\n }\n\n // Sample the displacement map at the dominant lens's scaled coordinate, so a\n // per-lens press scale shrinks the baked pattern around its center in\n // lockstep with the SDF radius above. domScale = 1 -> identity (unscaled).\n vec2 scaledPx = domCenter + (pxPos - domCenter) / domScale;\n vec4 d = texture2D(u_map, scaledPx / u_bboxSize);\n\n // mapMatrix (feColorMatrix equivalent)\n float sr = d.r * ratioX + 0.5 * (1.0 - ratioX);\n float sg = d.g * ratioY + 0.5 * (1.0 - ratioY);\n\n // Displacement offset in full-video UV space\n vec2 off = vec2(sr - 0.5, sg - 0.5) * baseScale;\n\n // Choose source: blurred or raw video\n // Inside lens -> blurred (if blur active), outside lens -> raw\n // Blend by mask so the transition at edges is clean\n vec4 color;\n if (u_chromaAmount > 0.001) {\n float sR = 1.0 + u_chromaAmount * 0.2;\n float sG = 1.0 + u_chromaAmount * 0.1;\n if (u_hasBlur > 0.5) {\n color.r = mix(\n texture2D(u_video, clamp(uv + off * sR, 0.0, 1.0)).r,\n texture2D(u_blurred, clamp(uv + off * sR, 0.0, 1.0)).r,\n mask\n );\n color.g = mix(\n texture2D(u_video, clamp(uv + off * sG, 0.0, 1.0)).g,\n texture2D(u_blurred, clamp(uv + off * sG, 0.0, 1.0)).g,\n mask\n );\n color.b = mix(\n texture2D(u_video, clamp(uv + off, 0.0, 1.0)).b,\n texture2D(u_blurred, clamp(uv + off, 0.0, 1.0)).b,\n mask\n );\n } else {\n color.r = texture2D(u_video, clamp(uv + off * sR, 0.0, 1.0)).r;\n color.g = texture2D(u_video, clamp(uv + off * sG, 0.0, 1.0)).g;\n color.b = texture2D(u_video, clamp(uv + off, 0.0, 1.0)).b;\n }\n color.a = 1.0;\n } else {\n vec2 duv = clamp(uv + off, 0.0, 1.0);\n if (u_hasBlur > 0.5) {\n color = mix(texture2D(u_video, duv), texture2D(u_blurred, duv), mask);\n } else {\n color = texture2D(u_video, duv);\n }\n }\n\n // Adaptive specular + brightness (Apple-style vibrancy)\n // Compute perceptual luminance of the displaced video sample\n float luma = dot(color.rgb, vec3(0.299, 0.587, 0.114));\n\n // Specular: blend between additive (dark bg) and multiplicative (bright bg)\n float spec = d.b - 0.502;\n float lumaLo = min(u_specLumaLow, u_specLumaHigh);\n float lumaHi = max(u_specLumaLow, u_specLumaHigh);\n float darkBlend = smoothstep(lumaLo, lumaHi, luma);\n vec3 specAdd = color.rgb + spec * u_specStrength;\n vec3 specMul = color.rgb * (1.0 - spec * u_specStrength);\n color.rgb = mix(specAdd, specMul, darkBlend);\n color.rgb = max(color.rgb, vec3(0.0));\n\n // Brightness: pull toward mid-gray - darkens bright areas, brightens dark\n float correction = (0.5 - luma) * u_adaptStrength * mask;\n color.rgb += correction;\n\n gl_FragColor = color;\n}\n`;\n\nfunction createShader(gl: WebGLRenderingContext, type: number, src: string): WebGLShader | null {\n const shader = gl.createShader(type);\n if (!shader) return null;\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n console.error(\"Shader compile error:\", gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n return null;\n }\n return shader;\n}\n\nfunction createProgram(\n gl: WebGLRenderingContext,\n vsSrc: string,\n fsSrc: string\n): WebGLProgram | null {\n const vs = createShader(gl, gl.VERTEX_SHADER, vsSrc);\n const fs = createShader(gl, gl.FRAGMENT_SHADER, fsSrc);\n if (!vs || !fs) return null;\n\n const prog = gl.createProgram();\n if (!prog) return null;\n\n gl.attachShader(prog, vs);\n gl.attachShader(prog, fs);\n gl.linkProgram(prog);\n\n gl.detachShader(prog, vs);\n gl.detachShader(prog, fs);\n gl.deleteShader(vs);\n gl.deleteShader(fs);\n\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {\n console.error(\"Program link error:\", gl.getProgramInfoLog(prog));\n gl.deleteProgram(prog);\n return null;\n }\n return prog;\n}\n\nexport interface VideoLensConfig {\n circles: Array<{ cx: number; cy: number; radius: number; scale: number; baseScale: number; ratioX: number; ratioY: number }>;\n bar?: { cx: number; cy: number; w: number; h: number; radius: number; baseScale: number; ratioX: number; ratioY: number };\n bbox: { x: number; y: number; w: number; h: number };\n bboxSize: { w: number; h: number };\n chromaAmount: number;\n specStrength: number;\n adaptStrength: number;\n specLumaLow: number;\n specLumaHigh: number;\n hasBlur: boolean;\n}\n\nexport class VideoRefractionRenderer {\n private gl: WebGLRenderingContext;\n private quadBuffer: WebGLBuffer;\n private blurProgram: WebGLProgram;\n private refractionProgram: WebGLProgram;\n\n private videoTexture: WebGLTexture;\n private mapTexture: WebGLTexture;\n private blurFboA: WebGLFramebuffer | null = null;\n private blurTexA: WebGLTexture | null = null;\n private blurFboB: WebGLFramebuffer | null = null;\n private blurTexB: WebGLTexture | null = null;\n private fboWidth = 0;\n private fboHeight = 0;\n\n constructor(canvas: HTMLCanvasElement) {\n const gl = canvas.getContext(\"webgl\", { alpha: false, antialias: false, premultipliedAlpha: false });\n if (!gl) throw new Error(\"WebGL not supported\");\n this.gl = gl;\n\n // Enable OES_standard_derivatives for fwidth()\n gl.getExtension(\"OES_standard_derivatives\");\n\n // Quad geometry covering NDC [-1, 1]\n const quad = new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]);\n this.quadBuffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, quad, gl.STATIC_DRAW);\n\n this.blurProgram = createProgram(gl, VERTEX_SHADER, BLUR_FRAGMENT_SHADER)!;\n this.refractionProgram = createProgram(gl, VERTEX_SHADER, REFRACTION_FRAGMENT_SHADER)!;\n\n this.videoTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.videoTexture);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n this.mapTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.mapTexture);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n }\n\n public setDisplacementMap(image: HTMLImageElement | HTMLCanvasElement) {\n const gl = this.gl;\n gl.bindTexture(gl.TEXTURE_2D, this.mapTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n }\n\n private initBlurFBO(width: number, height: number) {\n const gl = this.gl;\n const halfW = width >> 1;\n const halfH = height >> 1;\n\n if (this.fboWidth === halfW && this.fboHeight === halfH) return;\n this.fboWidth = halfW;\n this.fboHeight = halfH;\n\n const createFBO = () => {\n const tex = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, tex);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, halfW, halfH, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n\n const fbo = gl.createFramebuffer()!;\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);\n return { fbo, tex };\n };\n\n const resA = createFBO();\n this.blurFboA = resA.fbo;\n this.blurTexA = resA.tex;\n\n const resB = createFBO();\n this.blurFboB = resB.fbo;\n this.blurTexB = resB.tex;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n\n public render(video: HTMLVideoElement, config: VideoLensConfig) {\n const gl = this.gl;\n const width = gl.canvas.width;\n const height = gl.canvas.height;\n\n // 1. Upload Video Frame\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.videoTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, video);\n\n // 2. Perform 2-Pass Separable Gaussian Blur if active\n if (config.hasBlur) {\n this.initBlurFBO(width, height);\n\n // Pass 1: Horizontal Blur -> FBO A\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.blurFboA);\n gl.viewport(0, 0, this.fboWidth, this.fboHeight);\n gl.useProgram(this.blurProgram);\n\n const aPosBlur = gl.getAttribLocation(this.blurProgram, \"a_pos\");\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.enableVertexAttribArray(aPosBlur);\n gl.vertexAttribPointer(aPosBlur, 2, gl.FLOAT, false, 0, 0);\n\n gl.uniform1i(gl.getUniformLocation(this.blurProgram, \"u_source\"), 0);\n gl.uniform2f(gl.getUniformLocation(this.blurProgram, \"u_dir\"), 1.0 / this.fboWidth, 0.0);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n // Pass 2: Vertical Blur -> FBO B\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.blurFboB);\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, this.blurTexA);\n gl.uniform1i(gl.getUniformLocation(this.blurProgram, \"u_source\"), 2);\n gl.uniform2f(gl.getUniformLocation(this.blurProgram, \"u_dir\"), 0.0, 1.0 / this.fboHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n // 3. Final Refraction Pass -> Screen Canvas\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, width, height);\n gl.useProgram(this.refractionProgram);\n\n const aPos = gl.getAttribLocation(this.refractionProgram, \"a_pos\");\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.enableVertexAttribArray(aPos);\n gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);\n\n // Bind textures\n gl.uniform1i(gl.getUniformLocation(this.refractionProgram, \"u_video\"), 0);\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.mapTexture);\n gl.uniform1i(gl.getUniformLocation(this.refractionProgram, \"u_map\"), 1);\n\n if (config.hasBlur && this.blurTexB) {\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, this.blurTexB);\n gl.uniform1i(gl.getUniformLocation(this.refractionProgram, \"u_blurred\"), 2);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_hasBlur\"), 1.0);\n } else {\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_hasBlur\"), 0.0);\n }\n\n // Pass Circle Uniforms\n const circlesArr = new Float32Array(9);\n const scaleArr = new Float32Array(3);\n const baseScaleArr = new Float32Array(3);\n const ratioXArr = new Float32Array(3);\n const ratioYArr = new Float32Array(3);\n\n for (let i = 0; i < 3; i++) {\n if (i < config.circles.length) {\n const c = config.circles[i];\n circlesArr[i * 3 + 0] = c.cx;\n circlesArr[i * 3 + 1] = c.cy;\n circlesArr[i * 3 + 2] = c.radius;\n scaleArr[i] = c.scale;\n baseScaleArr[i] = c.baseScale;\n ratioXArr[i] = c.ratioX;\n ratioYArr[i] = c.ratioY;\n }\n }\n\n gl.uniform3fv(gl.getUniformLocation(this.refractionProgram, \"u_circles\"), circlesArr);\n gl.uniform1fv(gl.getUniformLocation(this.refractionProgram, \"u_scale\"), scaleArr);\n gl.uniform1fv(gl.getUniformLocation(this.refractionProgram, \"u_baseScale\"), baseScaleArr);\n gl.uniform1fv(gl.getUniformLocation(this.refractionProgram, \"u_ratioX\"), ratioXArr);\n gl.uniform1fv(gl.getUniformLocation(this.refractionProgram, \"u_ratioY\"), ratioYArr);\n\n // Pass Bar Uniforms\n if (config.bar) {\n gl.uniform4f(\n gl.getUniformLocation(this.refractionProgram, \"u_bar\"),\n config.bar.cx,\n config.bar.cy,\n config.bar.w,\n config.bar.h\n );\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_barRadius\"), config.bar.radius);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_barBaseScale\"), config.bar.baseScale);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_barRatioX\"), config.bar.ratioX);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_barRatioY\"), config.bar.ratioY);\n } else {\n gl.uniform4f(gl.getUniformLocation(this.refractionProgram, \"u_bar\"), 0, 0, -1, -1);\n }\n\n // Global Lens Uniforms\n gl.uniform4f(\n gl.getUniformLocation(this.refractionProgram, \"u_bbox\"),\n config.bbox.x,\n config.bbox.y,\n config.bbox.w,\n config.bbox.h\n );\n gl.uniform2f(\n gl.getUniformLocation(this.refractionProgram, \"u_bboxSize\"),\n config.bboxSize.w,\n config.bboxSize.h\n );\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_chromaAmount\"), config.chromaAmount);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_specStrength\"), config.specStrength);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_adaptStrength\"), config.adaptStrength);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_specLumaLow\"), config.specLumaLow);\n gl.uniform1f(gl.getUniformLocation(this.refractionProgram, \"u_specLumaHigh\"), config.specLumaHigh);\n\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n public dispose() {\n const gl = this.gl;\n gl.deleteBuffer(this.quadBuffer);\n gl.deleteProgram(this.blurProgram);\n gl.deleteProgram(this.refractionProgram);\n gl.deleteTexture(this.videoTexture);\n gl.deleteTexture(this.mapTexture);\n if (this.blurFboA) gl.deleteFramebuffer(this.blurFboA);\n if (this.blurTexA) gl.deleteTexture(this.blurTexA);\n if (this.blurFboB) gl.deleteFramebuffer(this.blurFboB);\n if (this.blurTexB) gl.deleteTexture(this.blurTexB);\n }\n}\n","/**\n * lensfx — WebGL Layer: QRRefractionRenderer\n *\n * Full WebGL 2 (#version 300 es) interactive QR code refraction engine.\n * Uses an O(1) uniform texture occupancy grid for real-time liquid distortion\n * through a 33×33 QR matrix.\n *\n * Features:\n * - WebGL 2 (#version 300 es)\n * - O(1) dot occupancy texture lookup\n * - Analytical eye rounded-rect SDFs with hover scaling\n * - Attenuated displacement for eye corner anchors\n * - Chromatic aberration (scaleR = 1 + 2*chroma, scaleG = 1 + 1*chroma, scaleB = 1)\n */\n\n/** Options for constructing a QRRefractionRenderer. */\nexport interface QRRendererOptions {\n /** Canvas element to render into. */\n canvas: HTMLCanvasElement;\n /** QR matrix data (boolean 33×33 grid, row-major). */\n qrMatrix: boolean[][];\n /** Lens depth strength. Default: 2. */\n depth?: number;\n /** Chromatic aberration amount (0–1). Default: 0.3. */\n chromaAmount?: number;\n /** Dot radius as a fraction of cell size. Default: 0.4. */\n dotRadius?: number;\n}\n\nexport const QR_VERTEX_SHADER = `#version 300 es\nin vec2 a_position;\nout vec2 v_uv;\n\nvoid main() {\n v_uv = (a_position * 0.5) + 0.5;\n gl_Position = vec4(a_position, 0.0, 1.0);\n}\n`;\n\nexport const QR_FRAGMENT_SHADER = `#version 300 es\nprecision highp float;\nprecision highp sampler2D;\n\nin vec2 v_uv;\nout vec4 fragColor;\n\nuniform float u_dotRadius;\nuniform vec3 u_backgroundColor;\nuniform sampler2D u_PaintingTexture;\n\n// QR dot grid for the O(1) occupancy lookup (replaces a per-pixel scan over\n// every dot). Occupancy is matrixLength x matrixLength, R8, 0/1 per module.\nuniform sampler2D u_occupancyTexture;\nuniform float u_gridOriginUV; // padding / size, in UV\nuniform float u_cellUV; // cellSize / size, in UV\nuniform float u_invCellUV; // 1 / cellUV - avoids a per-pixel divide\nuniform int u_matrixLength;\n\nuniform sampler2D u_displacementMap;\nuniform sampler2D u_paintingColorTexture;\nuniform int u_displacementActive;\nuniform vec2 u_lensOrigin;\nuniform vec2 u_lensSize;\nuniform vec2 u_displacementScale;\nuniform float u_chromaAmount;\n\n// Eye uniforms (3 corner finder groups)\nuniform vec2 u_eyeCenter[3];\nuniform vec3 u_eyeHalf[3]; // x=outer, y=mid, z=inner half-size\nuniform vec3 u_eyeRadius[3]; // x=outer, y=mid, z=inner corner radius\nuniform vec3 u_eyeColor[3]; // fill color per group (animated)\nuniform float u_eyeScale[3]; // hover scale per group\nuniform float u_eyeRefractionScale; // 0-1 multiplier for eye displacement\n\n// QR dots sit on a uniform grid, and the radius (~0.35 of a cell) never\n// spills past a cell boundary, so the nearest dot is always the one in pos's\n// own cell. Map pos -> module (i,j), check occupancy, then test distance to\n// that module's center.\nfloat testDot(vec2 pos, float r2) {\n int i = int(floor((pos.x - u_gridOriginUV) * u_invCellUV));\n int j = int(floor((pos.y - u_gridOriginUV) * u_invCellUV));\n if (i < 0 || i >= u_matrixLength || j < 0 || j >= u_matrixLength)\n return 1.0;\n if (texelFetch(u_occupancyTexture, ivec2(i, j), 0).r < 0.5)\n return 1.0;\n vec2 c = vec2(u_gridOriginUV) + (vec2(float(i), float(j)) + 0.5) * u_cellUV;\n vec2 d = pos - c;\n return dot(d, d) < r2 ? 0.0 : 1.0;\n}\n\nfloat roundedRectSDF(vec2 p, float half_, float radius) {\n vec2 d = abs(p) - vec2(half_) + vec2(radius);\n return length(max(d, vec2(0.0))) + min(max(d.x, d.y), 0.0) - radius;\n}\n\n// Test all eye groups. Returns vec4(color, 1.0) if inside an eye, vec4(0) if not.\nvec4 testEyes(vec2 pos) {\n for (int g = 0; g < 3; g++) {\n vec2 local = (pos - u_eyeCenter[g]) / u_eyeScale[g];\n if (roundedRectSDF(local, u_eyeHalf[g].z, u_eyeRadius[g].z) < 0.0)\n return vec4(u_eyeColor[g], 1.0);\n if (roundedRectSDF(local, u_eyeHalf[g].y, u_eyeRadius[g].y) < 0.0)\n return vec4(u_backgroundColor, 1.0);\n if (roundedRectSDF(local, u_eyeHalf[g].x, u_eyeRadius[g].x) < 0.0)\n return vec4(u_eyeColor[g], 1.0);\n }\n return vec4(0.0);\n}\n\n// Test scene (eyes + dots) at a position, returning color for a non-displaced pixel.\n// Returns vec4(color, 1.0) for solid, vec4(0, 0, 0, -1.0) for dot hole (discard).\nvec4 sampleStatic(vec2 pos, float r2) {\n vec4 eye = testEyes(pos);\n if (eye.a > 0.5) return eye;\n float hole = testDot(pos, r2);\n if (hole < 0.5) return vec4(0.0, 0.0, 0.0, -1.0);\n return vec4(u_backgroundColor, 1.0);\n}\n\nvoid main() {\n vec2 uv = vec2(v_uv.x, 1.0 - v_uv.y);\n float paint = texture(u_PaintingTexture, uv).r;\n float r2 = pow(u_dotRadius * (1.0 - paint), 2.0);\n\n if (u_displacementActive == 0) {\n vec4 s = sampleStatic(uv, r2);\n if (s.a < 0.0) discard;\n fragColor = s;\n return;\n }\n\n vec2 lensUV = (uv - u_lensOrigin) / u_lensSize;\n bool insideLens = lensUV.x >= 0.0 && lensUV.x <= 1.0 &&\n lensUV.y >= 0.0 && lensUV.y <= 1.0;\n\n if (!insideLens) {\n vec4 s = sampleStatic(uv, r2);\n if (s.a < 0.0) discard;\n fragColor = s;\n return;\n }\n\n vec4 dispSample = texture(u_displacementMap, lensUV);\n if (dispSample.a < 0.01) {\n vec4 s = sampleStatic(uv, r2);\n if (s.a < 0.0) discard;\n fragColor = s;\n return;\n }\n vec2 disp = (dispSample.rg - 0.5) * u_displacementScale;\n\n float scaleR = 1.0 + u_chromaAmount * 2.0;\n float scaleG = 1.0 + u_chromaAmount * 1.0;\n\n vec2 uvR = uv + disp * scaleR;\n vec2 uvG = uv + disp * scaleG;\n vec2 uvB = uv + disp;\n\n // Attenuated displacement for eyes\n vec2 eyeDisp = disp * u_eyeRefractionScale;\n vec2 eyeUvR = uv + eyeDisp * scaleR;\n vec2 eyeUvG = uv + eyeDisp * scaleG;\n vec2 eyeUvB = uv + eyeDisp;\n\n // Per-channel: test eyes at attenuated displacement, dots at full displacement\n vec4 eyeR = testEyes(eyeUvR);\n vec4 eyeG = testEyes(eyeUvG);\n vec4 eyeB = testEyes(eyeUvB);\n\n float r, g, b;\n\n if (eyeR.a > 0.5) {\n r = eyeR.r;\n } else {\n float holeR = testDot(uvR, r2);\n float paintR = texture(u_paintingColorTexture, uvR).r;\n r = mix(paintR, u_backgroundColor.r, holeR);\n }\n\n if (eyeG.a > 0.5) {\n g = eyeG.g;\n } else {\n float holeG = testDot(uvG, r2);\n float paintG = texture(u_paintingColorTexture, uvG).g;\n g = mix(paintG, u_backgroundColor.g, holeG);\n }\n\n if (eyeB.a > 0.5) {\n b = eyeB.b;\n } else {\n float holeB = testDot(uvB, r2);\n float paintB = texture(u_paintingColorTexture, uvB).b;\n b = mix(paintB, u_backgroundColor.b, holeB);\n }\n\n fragColor = vec4(r, g, b, 1.0);\n}\n`;\n\nfunction createShader300(gl: WebGL2RenderingContext, type: number, src: string): WebGLShader {\n const shader = gl.createShader(type);\n if (!shader) throw new Error(\"Failed to create shader\");\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const info = gl.getShaderInfoLog(shader);\n gl.deleteShader(shader);\n throw new Error(`Shader compilation error: ${info ?? \"\"}`);\n }\n return shader;\n}\n\nexport interface QREyeConfig {\n center: [number, number];\n half: [number, number, number];\n radius: [number, number, number];\n color: [number, number, number];\n scale: number;\n}\n\nexport interface QRRendererInit {\n canvas: HTMLCanvasElement;\n size: number;\n matrixLength: number;\n occupancyMatrix: Uint8Array;\n gridOriginUV: number;\n cellUV: number;\n dotRadius: number;\n backgroundColor?: [number, number, number];\n}\n\nexport class QRRefractionRenderer {\n private gl: WebGL2RenderingContext;\n private program: WebGLProgram;\n private quadBuffer: WebGLBuffer;\n\n private occupancyTexture: WebGLTexture;\n private displacementTexture: WebGLTexture;\n private paintingTexture: WebGLTexture;\n private paintingColorTexture: WebGLTexture;\n\n private matrixLength: number;\n private gridOriginUV: number;\n private cellUV: number;\n private dotRadius: number;\n private backgroundColor: [number, number, number];\n\n constructor(init: QRRendererInit) {\n const gl = init.canvas.getContext(\"webgl2\", { alpha: true, antialias: false, premultipliedAlpha: false });\n if (!gl) throw new Error(\"WebGL 2 not supported\");\n this.gl = gl;\n\n this.matrixLength = init.matrixLength;\n this.gridOriginUV = init.gridOriginUV;\n this.cellUV = init.cellUV;\n this.dotRadius = init.dotRadius;\n this.backgroundColor = init.backgroundColor ?? [1, 1, 1];\n\n const vs = createShader300(gl, gl.VERTEX_SHADER, QR_VERTEX_SHADER);\n const fs = createShader300(gl, gl.FRAGMENT_SHADER, QR_FRAGMENT_SHADER);\n const prog = gl.createProgram()!;\n gl.attachShader(prog, vs);\n gl.attachShader(prog, fs);\n gl.linkProgram(prog);\n\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {\n throw new Error(`QR Program link error: ${gl.getProgramInfoLog(prog) ?? \"\"}`);\n }\n this.program = prog;\n\n const quad = new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]);\n this.quadBuffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, quad, gl.STATIC_DRAW);\n\n // Occupancy Texture (R8)\n this.occupancyTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.occupancyTexture);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.R8,\n this.matrixLength,\n this.matrixLength,\n 0,\n gl.RED,\n gl.UNSIGNED_BYTE,\n init.occupancyMatrix\n );\n\n // Displacement Map Texture\n this.displacementTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.displacementTexture);\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.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n // Painting Textures (1x1 fallback)\n const blank1x1 = new Uint8Array([0, 0, 0, 0]);\n this.paintingTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.paintingTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, blank1x1);\n\n this.paintingColorTexture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, this.paintingColorTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, blank1x1);\n }\n\n public setDisplacementMap(image: HTMLImageElement | HTMLCanvasElement) {\n const gl = this.gl;\n gl.bindTexture(gl.TEXTURE_2D, this.displacementTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n }\n\n public render(params: {\n displacementActive: boolean;\n lensOrigin: [number, number];\n lensSize: [number, number];\n displacementScale: [number, number];\n chromaAmount: number;\n eyes: QREyeConfig[];\n eyeRefractionScale?: number;\n }) {\n const gl = this.gl;\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n gl.useProgram(this.program);\n\n const aPos = gl.getAttribLocation(this.program, \"a_position\");\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.enableVertexAttribArray(aPos);\n gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);\n\n // Bind Occupancy\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.occupancyTexture);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_occupancyTexture\"), 0);\n\n // Bind Displacement Map\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.displacementTexture);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_displacementMap\"), 1);\n\n // Bind Painting Textures\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, this.paintingTexture);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_PaintingTexture\"), 2);\n\n gl.activeTexture(gl.TEXTURE3);\n gl.bindTexture(gl.TEXTURE_2D, this.paintingColorTexture);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_paintingColorTexture\"), 3);\n\n // Uniforms\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_dotRadius\"), this.dotRadius);\n gl.uniform3fv(gl.getUniformLocation(this.program, \"u_backgroundColor\"), this.backgroundColor);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_gridOriginUV\"), this.gridOriginUV);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_cellUV\"), this.cellUV);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_invCellUV\"), 1.0 / this.cellUV);\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_matrixLength\"), this.matrixLength);\n\n gl.uniform1i(gl.getUniformLocation(this.program, \"u_displacementActive\"), params.displacementActive ? 1 : 0);\n gl.uniform2f(gl.getUniformLocation(this.program, \"u_lensOrigin\"), params.lensOrigin[0], params.lensOrigin[1]);\n gl.uniform2f(gl.getUniformLocation(this.program, \"u_lensSize\"), params.lensSize[0], params.lensSize[1]);\n gl.uniform2f(gl.getUniformLocation(this.program, \"u_displacementScale\"), params.displacementScale[0], params.displacementScale[1]);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_chromaAmount\"), params.chromaAmount);\n gl.uniform1f(gl.getUniformLocation(this.program, \"u_eyeRefractionScale\"), params.eyeRefractionScale ?? 0.2);\n\n // Eyes\n const centers = new Float32Array(6);\n const halfs = new Float32Array(9);\n const radii = new Float32Array(9);\n const colors = new Float32Array(9);\n const scales = new Float32Array(3);\n\n for (let i = 0; i < 3; i++) {\n if (i < params.eyes.length) {\n const e = params.eyes[i];\n centers[i * 2 + 0] = e.center[0];\n centers[i * 2 + 1] = e.center[1];\n halfs[i * 3 + 0] = e.half[0];\n halfs[i * 3 + 1] = e.half[1];\n halfs[i * 3 + 2] = e.half[2];\n radii[i * 3 + 0] = e.radius[0];\n radii[i * 3 + 1] = e.radius[1];\n radii[i * 3 + 2] = e.radius[2];\n colors[i * 3 + 0] = e.color[0];\n colors[i * 3 + 1] = e.color[1];\n colors[i * 3 + 2] = e.color[2];\n scales[i] = e.scale;\n }\n }\n\n gl.uniform2fv(gl.getUniformLocation(this.program, \"u_eyeCenter\"), centers);\n gl.uniform3fv(gl.getUniformLocation(this.program, \"u_eyeHalf\"), halfs);\n gl.uniform3fv(gl.getUniformLocation(this.program, \"u_eyeRadius\"), radii);\n gl.uniform3fv(gl.getUniformLocation(this.program, \"u_eyeColor\"), colors);\n gl.uniform1fv(gl.getUniformLocation(this.program, \"u_eyeScale\"), scales);\n\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n public dispose() {\n const gl = this.gl;\n gl.deleteBuffer(this.quadBuffer);\n gl.deleteProgram(this.program);\n gl.deleteTexture(this.occupancyTexture);\n gl.deleteTexture(this.displacementTexture);\n gl.deleteTexture(this.paintingTexture);\n gl.deleteTexture(this.paintingColorTexture);\n }\n}\n","/**\n * lensfx — Vanilla DOM Engine: createLens\n *\n * Zero-dependency, pure DOM + SVG + Canvas optical glass refraction.\n * Runs anywhere without React, Framer Motion, or bundlers.\n */\n\nimport {\n createDisplacementMapGeneratorSync,\n colorMatrixValues,\n getSvgMaskDataUri,\n} from \"./engine/math\";\nimport { LensParams } from \"./engine/types\";\n\nexport interface LensOptions {\n /** Lens width in pixels. Default: 160 */\n width?: number;\n /** Alias for width */\n lensW?: number;\n /** Lens height in pixels. Default: 100 */\n height?: number;\n /** Alias for height */\n lensH?: number;\n /** Corner radius in pixels. Default: 24 */\n radius?: number;\n /** Alias for radius */\n borderRadius?: number;\n /** Lens center X: 0..1 (fraction of container width) or pixel value. Default: 0.5 */\n x?: number;\n /** Lens center Y: 0..1 (fraction of container height) or pixel value. Default: 0.5 */\n y?: number;\n /** Automatically track pointer / mouse movement over the container element. Default: false */\n interactive?: boolean;\n /** Refraction depth / distortion strength (0–10). Default: 2 */\n depth?: number;\n /** Chromatic aberration split (0–1). 0 = monochrome, 1 = full RGB split. Default: 0.6 */\n chroma?: number;\n /** Alias for chroma */\n chromaAmount?: number;\n /** Aspect-ratio displacement scale X (0–1). Default: 0.25 */\n scaleX?: number;\n /** Aspect-ratio displacement scale Y (0–1). Default: 0.25 */\n scaleY?: number;\n /** Ellipsoid dome height in pixels. Default: 6 */\n domeDepth?: number;\n /** Directional specular angle in degrees. Default: 45 */\n specularRotation?: number;\n /** Specular highlight intensity. Default: 1 */\n specularStrength?: number;\n /** Invert specular to dark shadow mode. Default: false */\n specularDark?: boolean;\n /** Clip refraction strictly to the lens SDF boundary. Default: true */\n sdfBoundary?: boolean;\n /** Apply erf-smoothed edge falloff. Default: true */\n edgeFalloff?: boolean;\n /** Glow intensity (0–1). Default: 0.3 */\n glowStrength?: number;\n /** Glow spread factor (0–1). Default: 1 */\n glowSpread?: number;\n /** Glow falloff exponent. Default: 1.5 */\n glowExponent?: number;\n /** Edge ring highlight intensity (0–1). Default: 0.4 */\n edgeStrength?: number;\n /** Edge ring highlight width in pixels. Default: 3 */\n edgeWidth?: number;\n /** Splay attenuation factor at corners (0–1). Default: 0.8 */\n splayAmount?: number;\n /** Frosted glass blur radius in pixels. Default: 0 */\n blur?: number;\n /** Tint color CSS string (e.g. \"rgba(255, 255, 255, 0.08)\"). Default: \"rgba(255, 255, 255, 0.05)\" */\n tintColor?: string;\n /** Tint backdrop blur in pixels. Default: 0 */\n tintBlur?: number;\n /** Tint opacity (0–1). Default: 1 */\n tintOpacity?: number;\n /** Lens rim shadow (boolean or custom CSS box-shadow string). Default: true */\n shadow?: boolean | string;\n /** Lens rim border (boolean or custom CSS border string). Default: true */\n border?: boolean | string;\n /** Displacement map resolution in pixels. Default: 256 */\n mapSize?: number;\n /** Pre-rendered displacement map data URL. */\n displacementMapUrl?: string;\n /** Alternative element / selector to apply the filter to instead of container */\n refractionTarget?: HTMLElement | string;\n /** Callback fired when displacement map data URL changes */\n onMapChange?: (url: string) => void;\n /** Callback fired when lens position changes */\n onPositionChange?: (x: number, y: number) => void;\n}\n\nexport interface LensInstance {\n /** The container element */\n el: HTMLElement;\n /** The element receiving the SVG displacement filter */\n targetEl: HTMLElement;\n /** The hidden SVG root element housing the filter defs */\n svgEl: SVGSVGElement;\n /** The SVG filter element */\n filterEl: SVGFilterElement;\n /** The floating lens overlay element (rim lighting, border, tint) */\n overlayEl: HTMLElement;\n /** Current active options */\n options: LensOptions;\n /** Current displacement map data URL */\n mapDataUrl: string;\n /** Move lens to new x, y position (pixel or 0..1 normalized) */\n setPosition: (x: number, y: number) => void;\n /** Update lens options dynamically */\n update: (newOptions: Partial<LensOptions>) => void;\n /** Toggle interactive mouse/pointer tracking */\n setInteractive: (interactive: boolean) => void;\n /** Destroy the lens and restore all DOM modifications */\n destroy: () => void;\n}\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nlet nextId = 0;\n\n/**\n * Creates a real optical glass refraction lens on any DOM element.\n *\n * @param target - Target container element or CSS selector string\n * @param options - Optical and behavioral options\n * @returns LensInstance with control methods (setPosition, update, destroy)\n *\n * @example\n * ```js\n * const lens = lensfx.createLens(document.querySelector(\"#card\"), {\n * width: 200,\n * height: 120,\n * radius: 28,\n * interactive: true,\n * });\n * ```\n */\nexport function createLens(\n target: HTMLElement | string,\n options: LensOptions = {}\n): LensInstance {\n if (typeof document === \"undefined\") {\n throw new Error(\"[lensfx] createLens can only be called in a browser environment.\");\n }\n\n const resolved =\n typeof target === \"string\" ? document.querySelector<HTMLElement>(target) : target;\n if (!resolved) {\n throw new Error(`[lensfx] Target element \"${target}\" was not found.`);\n }\n const container: HTMLElement = resolved;\n\n let currentOptions: LensOptions = { ...options };\n\n // Resolve refraction target element\n let targetEl: HTMLElement = container;\n if (currentOptions.refractionTarget) {\n const customTarget =\n typeof currentOptions.refractionTarget === \"string\"\n ? container.querySelector<HTMLElement>(currentOptions.refractionTarget) ||\n document.querySelector<HTMLElement>(currentOptions.refractionTarget)\n : currentOptions.refractionTarget;\n if (customTarget) {\n targetEl = customTarget;\n }\n }\n\n // Ensure container can anchor absolute children\n const computedStyle = window.getComputedStyle(container);\n const originalPosition = container.style.position;\n if (computedStyle.position === \"static\") {\n container.style.position = \"relative\";\n }\n\n const lensId = `lensfx-${++nextId}-${Math.random().toString(36).substring(2, 7)}`;\n const filterId = `${lensId}-filter`;\n\n // Create SVG defs container\n const svgEl = document.createElementNS(SVG_NS, \"svg\") as SVGSVGElement;\n svgEl.setAttribute(\"class\", \"lensfx-svg-root\");\n svgEl.setAttribute(\"aria-hidden\", \"true\");\n svgEl.style.cssText =\n \"position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;left:0;top:0;\";\n\n const defsEl = document.createElementNS(SVG_NS, \"defs\");\n const filterEl = document.createElementNS(SVG_NS, \"filter\") as SVGFilterElement;\n filterEl.id = filterId;\n filterEl.setAttribute(\"filterUnits\", \"objectBoundingBox\");\n filterEl.setAttribute(\"primitiveUnits\", \"objectBoundingBox\");\n filterEl.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n filterEl.setAttribute(\"x\", \"0\");\n filterEl.setAttribute(\"y\", \"0\");\n filterEl.setAttribute(\"width\", \"1\");\n filterEl.setAttribute(\"height\", \"1\");\n\n defsEl.appendChild(filterEl);\n svgEl.appendChild(defsEl);\n container.appendChild(svgEl);\n\n // Create floating lens rim overlay\n const overlayEl = document.createElement(\"div\");\n overlayEl.className = \"lensfx-lens-overlay\";\n overlayEl.style.cssText =\n \"position:absolute;top:0;left:0;pointer-events:none;box-sizing:border-box;will-change:transform;\";\n container.appendChild(overlayEl);\n\n // State variables\n let mapDataUrl = currentOptions.displacementMapUrl || \"\";\n let currentMapSize = currentOptions.mapSize || 256;\n let generator = createDisplacementMapGeneratorSync(currentMapSize);\n let feImageEl: SVGFEImageElement | null = null;\n let currentMaskKey: string | null = null;\n let isDestroyed = false;\n\n // Track coordinates\n let curX = currentOptions.x ?? 0.5;\n let curY = currentOptions.y ?? 0.5;\n\n function getDimensions() {\n const width = currentOptions.width ?? currentOptions.lensW ?? 160;\n const height = currentOptions.height ?? currentOptions.lensH ?? 100;\n const radius =\n currentOptions.radius ?? currentOptions.borderRadius ?? Math.min(width, height) / 4;\n return { width, height, radius };\n }\n\n function renderMap() {\n if (isDestroyed) return;\n if (currentOptions.displacementMapUrl) {\n mapDataUrl = currentOptions.displacementMapUrl;\n if (feImageEl) feImageEl.setAttribute(\"href\", mapDataUrl);\n currentOptions.onMapChange?.(mapDataUrl);\n return;\n }\n\n const { width, height, radius } = getDimensions();\n const mapSize = currentOptions.mapSize || 256;\n if (mapSize !== currentMapSize) {\n generator.dispose();\n currentMapSize = mapSize;\n generator = createDisplacementMapGeneratorSync(currentMapSize);\n }\n\n const depth = currentOptions.depth ?? 2;\n const result = generator.generate({\n lensHalfWidth: width / 2,\n lensHalfHeight: height / 2,\n borderRadius: radius,\n depth,\n sdfBoundary: currentOptions.sdfBoundary ?? true,\n edgeFalloff: currentOptions.edgeFalloff ?? true,\n specularRotation: currentOptions.specularRotation ?? 45,\n glowStrength: currentOptions.glowStrength ?? 0.3,\n glowSpread: currentOptions.glowSpread ?? 1,\n glowExponent: currentOptions.glowExponent ?? 1.5,\n edgeStrength: currentOptions.edgeStrength ?? 0.4,\n edgeWidth: currentOptions.edgeWidth ?? 3,\n edgeExponent: 1.5,\n domeDepth: currentOptions.domeDepth ?? 6,\n splayAmount: currentOptions.splayAmount ?? 0.8,\n });\n\n mapDataUrl = result.dataUrl;\n if (feImageEl) feImageEl.setAttribute(\"href\", mapDataUrl);\n currentOptions.onMapChange?.(mapDataUrl);\n }\n\n function buildFilterPipeline() {\n // Clear existing filter children\n while (filterEl.firstChild) {\n filterEl.removeChild(filterEl.firstChild);\n }\n\n const depth = currentOptions.depth ?? 2;\n const chroma = currentOptions.chroma ?? currentOptions.chromaAmount ?? 0.6;\n const scaleX = currentOptions.scaleX ?? 0.25;\n const scaleY = currentOptions.scaleY ?? 0.25;\n const maxScale = Math.max(scaleX, scaleY);\n const scaleRatioX = maxScale > 0 ? scaleX / maxScale : 0;\n const scaleRatioY = maxScale > 0 ? scaleY / maxScale : 0;\n const needsMatrix = scaleRatioX !== 1 || scaleRatioY !== 1;\n const matrixString = colorMatrixValues(scaleRatioX, scaleRatioY);\n\n // 1. Neutral gray background\n const feFlood = document.createElementNS(SVG_NS, \"feFlood\");\n feFlood.setAttribute(\"flood-color\", \"rgb(128,128,128)\");\n feFlood.setAttribute(\"flood-opacity\", \"1\");\n feFlood.setAttribute(\"result\", \"mapBg\");\n filterEl.appendChild(feFlood);\n\n // 2. Displacement map image\n feImageEl = document.createElementNS(SVG_NS, \"feImage\") as SVGFEImageElement;\n feImageEl.setAttribute(\"href\", mapDataUrl);\n feImageEl.setAttribute(\"preserveAspectRatio\", \"none\");\n feImageEl.setAttribute(\"result\", \"rawMap\");\n filterEl.appendChild(feImageEl);\n\n // 3. Composite over neutral gray\n const feComp = document.createElementNS(SVG_NS, \"feComposite\");\n feComp.setAttribute(\"in\", \"rawMap\");\n feComp.setAttribute(\"in2\", \"mapBg\");\n feComp.setAttribute(\"operator\", \"over\");\n feComp.setAttribute(\"result\", \"map\");\n filterEl.appendChild(feComp);\n\n // 4. ColorMatrix for aspect ratio scaling if needed\n if (needsMatrix) {\n const feMat = document.createElementNS(SVG_NS, \"feColorMatrix\");\n feMat.setAttribute(\"in\", \"map\");\n feMat.setAttribute(\"type\", \"matrix\");\n feMat.setAttribute(\"values\", matrixString);\n feMat.setAttribute(\"result\", \"scaledMap\");\n filterEl.appendChild(feMat);\n }\n const mapSource = needsMatrix ? \"scaledMap\" : \"map\";\n\n // 5. Gaussian blur for frosted glass\n let sourceGraphic = \"SourceGraphic\";\n if (currentOptions.blur && currentOptions.blur > 0) {\n const feBlur = document.createElementNS(SVG_NS, \"feGaussianBlur\");\n feBlur.setAttribute(\"in\", \"SourceGraphic\");\n const cRect = container.getBoundingClientRect();\n const bw = cRect.width > 0 ? currentOptions.blur / cRect.width : 0.01;\n const bh = cRect.height > 0 ? currentOptions.blur / cRect.height : 0.01;\n feBlur.setAttribute(\"stdDeviation\", `${bw} ${bh}`);\n feBlur.setAttribute(\"result\", \"blurred\");\n filterEl.appendChild(feBlur);\n sourceGraphic = \"blurred\";\n }\n\n // 6. Displacement mapping\n if (chroma > 0) {\n // Red\n const dispR = document.createElementNS(SVG_NS, \"feDisplacementMap\");\n dispR.setAttribute(\"in\", sourceGraphic);\n dispR.setAttribute(\"in2\", mapSource);\n dispR.setAttribute(\"scale\", String(maxScale * (1 + 0.2 * chroma)));\n dispR.setAttribute(\"xChannelSelector\", \"R\");\n dispR.setAttribute(\"yChannelSelector\", \"G\");\n filterEl.appendChild(dispR);\n\n const matR = document.createElementNS(SVG_NS, \"feColorMatrix\");\n matR.setAttribute(\"type\", \"matrix\");\n matR.setAttribute(\"values\", \"1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\");\n matR.setAttribute(\"result\", \"dispR\");\n filterEl.appendChild(matR);\n\n // Green\n const dispG = document.createElementNS(SVG_NS, \"feDisplacementMap\");\n dispG.setAttribute(\"in\", sourceGraphic);\n dispG.setAttribute(\"in2\", mapSource);\n dispG.setAttribute(\"scale\", String(maxScale * (1 + 0.1 * chroma)));\n dispG.setAttribute(\"xChannelSelector\", \"R\");\n dispG.setAttribute(\"yChannelSelector\", \"G\");\n filterEl.appendChild(dispG);\n\n const matG = document.createElementNS(SVG_NS, \"feColorMatrix\");\n matG.setAttribute(\"type\", \"matrix\");\n matG.setAttribute(\"values\", \"0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0\");\n matG.setAttribute(\"result\", \"dispG\");\n filterEl.appendChild(matG);\n\n // Blue\n const dispB = document.createElementNS(SVG_NS, \"feDisplacementMap\");\n dispB.setAttribute(\"in\", sourceGraphic);\n dispB.setAttribute(\"in2\", mapSource);\n dispB.setAttribute(\"scale\", String(maxScale));\n dispB.setAttribute(\"xChannelSelector\", \"R\");\n dispB.setAttribute(\"yChannelSelector\", \"G\");\n filterEl.appendChild(dispB);\n\n const matB = document.createElementNS(SVG_NS, \"feColorMatrix\");\n matB.setAttribute(\"type\", \"matrix\");\n matB.setAttribute(\"values\", \"0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\");\n matB.setAttribute(\"result\", \"dispB\");\n filterEl.appendChild(matB);\n\n // Composite R + G\n const compRG = document.createElementNS(SVG_NS, \"feComposite\");\n compRG.setAttribute(\"in\", \"dispR\");\n compRG.setAttribute(\"in2\", \"dispG\");\n compRG.setAttribute(\"operator\", \"arithmetic\");\n compRG.setAttribute(\"k1\", \"0\");\n compRG.setAttribute(\"k2\", \"1\");\n compRG.setAttribute(\"k3\", \"1\");\n compRG.setAttribute(\"k4\", \"0\");\n filterEl.appendChild(compRG);\n\n // Composite with B\n const compRGB = document.createElementNS(SVG_NS, \"feComposite\");\n compRGB.setAttribute(\"in2\", \"dispB\");\n compRGB.setAttribute(\"operator\", \"arithmetic\");\n compRGB.setAttribute(\"k1\", \"0\");\n compRGB.setAttribute(\"k2\", \"1\");\n compRGB.setAttribute(\"k3\", \"1\");\n compRGB.setAttribute(\"k4\", \"0\");\n compRGB.setAttribute(\"result\", \"lensResult\");\n filterEl.appendChild(compRGB);\n } else {\n const dispSingle = document.createElementNS(SVG_NS, \"feDisplacementMap\");\n dispSingle.setAttribute(\"in\", sourceGraphic);\n dispSingle.setAttribute(\"in2\", mapSource);\n dispSingle.setAttribute(\"scale\", String(maxScale));\n dispSingle.setAttribute(\"xChannelSelector\", \"R\");\n dispSingle.setAttribute(\"yChannelSelector\", \"G\");\n dispSingle.setAttribute(\"result\", \"lensResult\");\n filterEl.appendChild(dispSingle);\n }\n\n // 7. Specular highlight\n const specStrength = currentOptions.specularStrength ?? 1;\n if (specStrength > 0) {\n const specMat = document.createElementNS(SVG_NS, \"feColorMatrix\");\n specMat.setAttribute(\"in\", \"map\");\n specMat.setAttribute(\"type\", \"matrix\");\n specMat.setAttribute(\"values\", \"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 -0.50196\");\n specMat.setAttribute(\"result\", \"specMask\");\n filterEl.appendChild(specMat);\n\n const specComp = document.createElementNS(SVG_NS, \"feComposite\");\n specComp.setAttribute(\"in\", \"specMask\");\n specComp.setAttribute(\"in2\", \"lensResult\");\n specComp.setAttribute(\"operator\", \"arithmetic\");\n specComp.setAttribute(\"k1\", \"0\");\n specComp.setAttribute(\"k2\", String(specStrength));\n specComp.setAttribute(\"k3\", \"1\");\n specComp.setAttribute(\"k4\", \"0\");\n specComp.setAttribute(\"result\", \"lensResult\");\n filterEl.appendChild(specComp);\n }\n\n // 8. Cut hole and composite over SourceGraphic\n const lensMask = document.createElementNS(SVG_NS, \"feFlood\");\n lensMask.setAttribute(\"flood-color\", \"black\");\n lensMask.setAttribute(\"flood-opacity\", \"1\");\n lensMask.setAttribute(\"result\", \"lensMask\");\n filterEl.appendChild(lensMask);\n\n const holeComp = document.createElementNS(SVG_NS, \"feComposite\");\n holeComp.setAttribute(\"in\", \"SourceGraphic\");\n holeComp.setAttribute(\"in2\", \"lensMask\");\n holeComp.setAttribute(\"operator\", \"out\");\n holeComp.setAttribute(\"result\", \"holedSG\");\n filterEl.appendChild(holeComp);\n\n const finalComp = document.createElementNS(SVG_NS, \"feComposite\");\n finalComp.setAttribute(\"in\", \"lensResult\");\n finalComp.setAttribute(\"in2\", \"holedSG\");\n finalComp.setAttribute(\"operator\", \"over\");\n filterEl.appendChild(finalComp);\n }\n\n function updateLayout() {\n if (isDestroyed) return;\n const rect = container.getBoundingClientRect();\n const cw = rect.width || container.clientWidth || 300;\n const ch = rect.height || container.clientHeight || 200;\n\n const { width, height, radius } = getDimensions();\n\n const px = curX <= 1 && curX >= 0 ? curX * cw : curX;\n const py = curY <= 1 && curY >= 0 ? curY * ch : pyCoordinate(curY, ch);\n\n function pyCoordinate(val: number, containerH: number) {\n return val <= 1 && val >= 0 ? val * containerH : val;\n }\n\n const lensLeft = px - width / 2;\n const lensTop = py - height / 2;\n\n // Update feImage placement in normalized 0..1 bounding box coordinates\n if (feImageEl && cw > 0 && ch > 0) {\n feImageEl.setAttribute(\"x\", String(lensLeft / cw));\n feImageEl.setAttribute(\"y\", String(lensTop / ch));\n feImageEl.setAttribute(\"width\", String(width / cw));\n feImageEl.setAttribute(\"height\", String(height / ch));\n }\n\n // Update overlay layer styles\n overlayEl.style.width = `${width}px`;\n overlayEl.style.height = `${height}px`;\n overlayEl.style.borderRadius = `${radius}px`;\n overlayEl.style.transform = `translate3d(${lensLeft}px, ${lensTop}px, 0)`;\n\n // Shadow\n if (currentOptions.shadow === false) {\n overlayEl.style.boxShadow = \"none\";\n } else if (typeof currentOptions.shadow === \"string\") {\n overlayEl.style.boxShadow = currentOptions.shadow;\n } else {\n overlayEl.style.boxShadow =\n \"0 8px 32px rgba(0, 0, 0, 0.2), 0 2px 8px rgba(0, 0, 0, 0.12), inset 0 1px 1px rgba(255, 255, 255, 0.35), inset 0 -1px 1px rgba(0, 0, 0, 0.15)\";\n }\n\n // Border\n if (currentOptions.border === false) {\n overlayEl.style.border = \"none\";\n } else if (typeof currentOptions.border === \"string\") {\n overlayEl.style.border = currentOptions.border;\n } else {\n overlayEl.style.border = \"1px solid rgba(255, 255, 255, 0.2)\";\n }\n\n // Tint & backdrop-filter\n const tintColor = currentOptions.tintColor ?? \"rgba(255, 255, 255, 0.05)\";\n overlayEl.style.background = tintColor;\n\n const tintBlur = currentOptions.tintBlur ?? 0;\n if (tintBlur > 0) {\n const blurCss = `blur(${tintBlur}px)`;\n overlayEl.style.backdropFilter = blurCss;\n overlayEl.style.setProperty(\"-webkit-backdrop-filter\", blurCss);\n } else {\n overlayEl.style.backdropFilter = \"none\";\n overlayEl.style.setProperty(\"-webkit-backdrop-filter\", \"none\");\n }\n\n // Apply SVG mask for crisp rounded edges\n const { uri, key } = getSvgMaskDataUri(width, height, radius);\n if (currentMaskKey !== key) {\n const maskCss = `url(\"${uri}\")`;\n overlayEl.style.maskImage = maskCss;\n overlayEl.style.setProperty(\"-webkit-mask-image\", maskCss);\n overlayEl.style.maskSize = \"100% 100%\";\n overlayEl.style.setProperty(\"-webkit-mask-size\", \"100% 100%\");\n currentMaskKey = key;\n }\n\n // Ensure filter is applied to target element\n const filterStyle = `url(\"#${filterId}\")`;\n if (targetEl.style.filter !== filterStyle) {\n targetEl.style.filter = filterStyle;\n }\n }\n\n // Pointer event handler for interactive mode\n let isPointerActive = false;\n const onPointerMove = (e: PointerEvent) => {\n if (!currentOptions.interactive || isDestroyed) return;\n const rect = container.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n setPosition(x, y);\n };\n\n function setInteractive(interactive: boolean) {\n currentOptions.interactive = interactive;\n if (interactive && !isPointerActive) {\n container.addEventListener(\"pointermove\", onPointerMove);\n isPointerActive = true;\n } else if (!interactive && isPointerActive) {\n container.removeEventListener(\"pointermove\", onPointerMove);\n isPointerActive = false;\n }\n }\n\n function setPosition(x: number, y: number) {\n curX = x;\n curY = y;\n currentOptions.onPositionChange?.(x, y);\n updateLayout();\n }\n\n function update(newOptions: Partial<LensOptions>) {\n if (isDestroyed) return;\n const prev = { ...currentOptions };\n currentOptions = { ...currentOptions, ...newOptions };\n\n if (newOptions.x !== undefined) curX = newOptions.x;\n if (newOptions.y !== undefined) curY = newOptions.y;\n\n if (newOptions.interactive !== undefined) {\n setInteractive(newOptions.interactive);\n }\n\n // Check if map needs regeneration\n const needsRegen =\n newOptions.width !== undefined ||\n newOptions.lensW !== undefined ||\n newOptions.height !== undefined ||\n newOptions.lensH !== undefined ||\n newOptions.radius !== undefined ||\n newOptions.borderRadius !== undefined ||\n newOptions.depth !== undefined ||\n newOptions.domeDepth !== undefined ||\n newOptions.specularRotation !== undefined ||\n newOptions.glowStrength !== undefined ||\n newOptions.glowSpread !== undefined ||\n newOptions.edgeStrength !== undefined ||\n newOptions.edgeWidth !== undefined ||\n newOptions.splayAmount !== undefined ||\n newOptions.displacementMapUrl !== undefined ||\n newOptions.mapSize !== undefined;\n\n if (needsRegen) {\n renderMap();\n }\n\n // Check if filter pipeline structure changed\n const needsPipelineRebuild =\n newOptions.chroma !== undefined ||\n newOptions.chromaAmount !== undefined ||\n newOptions.scaleX !== undefined ||\n newOptions.scaleY !== undefined ||\n newOptions.specularStrength !== undefined ||\n newOptions.blur !== undefined;\n\n if (needsPipelineRebuild || needsRegen) {\n buildFilterPipeline();\n }\n\n updateLayout();\n }\n\n // Setup ResizeObserver for responsive layout updates\n let resizeObserver: ResizeObserver | null = null;\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(() => {\n updateLayout();\n });\n resizeObserver.observe(container);\n }\n\n // Initial build\n renderMap();\n buildFilterPipeline();\n updateLayout();\n\n if (currentOptions.interactive) {\n setInteractive(true);\n }\n\n function destroy() {\n if (isDestroyed) return;\n isDestroyed = true;\n\n if (isPointerActive) {\n container.removeEventListener(\"pointermove\", onPointerMove);\n isPointerActive = false;\n }\n\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n\n if (targetEl.style.filter.includes(filterId)) {\n targetEl.style.filter = \"\";\n }\n\n if (container.style.position === \"relative\" && originalPosition === \"\") {\n container.style.position = \"\";\n }\n\n if (svgEl.parentNode) {\n svgEl.parentNode.removeChild(svgEl);\n }\n\n if (overlayEl.parentNode) {\n overlayEl.parentNode.removeChild(overlayEl);\n }\n\n generator.dispose();\n }\n\n return {\n el: container,\n targetEl,\n svgEl,\n filterEl,\n overlayEl,\n get options() {\n return currentOptions;\n },\n get mapDataUrl() {\n return mapDataUrl;\n },\n setPosition,\n update,\n setInteractive,\n destroy,\n };\n}\n","\"use client\";\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n DEFAULT_LENS_PARAMS,\n LensParams,\n MultiLensSlot,\n SingleLensSlot,\n} from \"../engine/types\";\nimport {\n colorMatrixValues,\n createDisplacementMapGeneratorSync,\n generateDisplacementMapAsync,\n getSvgMaskDataUri,\n} from \"../engine/math\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isMotionValue(val: unknown): val is { get: () => any; on: (event: string, callback: () => void) => () => void } {\n return (\n typeof val === \"object\" &&\n val !== null &&\n \"get\" in val &&\n \"on\" in val\n );\n}\n\nfunction resolveValue<T>(val: T | { get: () => T }): T {\n if (isMotionValue(val)) {\n return (val as { get: () => T }).get();\n }\n return val as T;\n}\n\nconst GeneralContext = createContext<any>(null);\nconst RefractionGroupContext = createContext<{ inGroup: boolean; gap: number }>({\n inGroup: false,\n gap: 0,\n});\n\nconst BLANK_1PX_PNG =\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\";\n\nexport interface LensProps {\n children?: React.ReactNode;\n lens?: Partial<LensParams>;\n x?: number | { get: () => number; on: any };\n y?: number | { get: () => number; on: any };\n lensW?: number | { get: () => number; on: any };\n lensH?: number | { get: () => number; on: any };\n borderRadius?: number | { get: () => number; on: any };\n autoBorderRadius?: boolean;\n displacementMapUrl?: string;\n overlay?: React.ReactNode;\n showOutline?: boolean;\n onLensMapChange?: (url: string) => void;\n refractionTarget?: React.ReactNode;\n tintColor?: string;\n tintOpacity?: number | { get: () => number; on: any };\n tintBlur?: number | { get: () => number; on: any };\n shadowOpacity?: number | { get: () => number; on: any };\n restShadowOpacity?: number | { get: () => number; on: any };\n edgeBias?: number | { get: () => number; on: any };\n onGenerationTime?: (time: { total: number; loopMs: number; encodeMs: number }) => void;\n regenSettle?: number;\n filterResolution?: number;\n zoom?: number;\n depth?: number;\n scale?: number;\n regionScale?: number;\n regionOriginX?: number;\n regionOriginY?: number;\n onFilterStats?: any;\n lenses?: any[];\n pauseOffscreen?: boolean;\n offscreenMargin?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function Lens({\n children,\n lens,\n x = 0.5,\n y = 0.5,\n lensW,\n lensH,\n borderRadius,\n autoBorderRadius,\n displacementMapUrl,\n overlay,\n showOutline = false,\n onLensMapChange,\n refractionTarget,\n tintColor,\n tintOpacity,\n tintBlur,\n shadowOpacity,\n restShadowOpacity,\n edgeBias,\n onGenerationTime,\n regenSettle = 0,\n filterResolution = 1,\n lenses,\n pauseOffscreen = false,\n offscreenMargin = \"300px 0px\",\n className,\n style,\n ...restProps\n}: LensProps) {\n const isMultiLens = Boolean(lenses && lenses.length > 0);\n\n // Platform detections\n const [isIOS, setIsIOS] = useState(false);\n useEffect(() => {\n if (typeof navigator !== \"undefined\") {\n setIsIOS(\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1)\n );\n }\n }, []);\n\n const [isSafari, setIsSafari] = useState(false);\n useEffect(() => {\n if (typeof navigator !== \"undefined\") {\n setIsSafari(\n /^((?!chrome|chromium|android).)*safari/i.test(navigator.userAgent)\n );\n }\n }, []);\n\n const generalCtx = useContext(GeneralContext);\n const rawId = useId().replace(/:/g, \"\");\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Visibility tracking\n const [isVisible, setIsVisible] = useState(true);\n useEffect(() => {\n if (!pauseOffscreen || !containerRef.current) return;\n const observer = new IntersectionObserver(\n ([entry]) => setIsVisible(entry.isIntersecting),\n { rootMargin: offscreenMargin }\n );\n observer.observe(containerRef.current);\n return () => observer.disconnect();\n }, [pauseOffscreen, offscreenMargin]);\n\n const [containerSize, setContainerSize] = useState({ w: 0, h: 0 });\n const filterVersionRef = useRef(0);\n const staticCanvasRef = useRef<HTMLCanvasElement | null>(null);\n\n const activeParams: LensParams = { ...DEFAULT_LENS_PARAMS, ...lens };\n\n const effectiveLensW = lensW ?? activeParams.lensW;\n const effectiveLensH = lensH ?? activeParams.lensH;\n const effectiveBorderRadius = autoBorderRadius\n ? Math.min(resolveValue(effectiveLensW), resolveValue(effectiveLensH))\n : borderRadius ?? activeParams.borderRadius;\n\n const isAnimated =\n isMotionValue(effectiveLensW) ||\n isMotionValue(effectiveLensH) ||\n isMotionValue(effectiveBorderRadius);\n\n // DOM element references\n const contentLayerRef = useRef<HTMLDivElement | null>(null);\n const refractionTargetLayerRef = useRef<HTMLDivElement | null>(null);\n const overlayLayerRef = useRef<HTMLDivElement | null>(null);\n const mainFilterRef = useRef<SVGFilterElement | null>(null);\n const mainFeImageRef = useRef<SVGFEImageElement | null>(null);\n const mainColorMatrixRef = useRef<SVGFEColorMatrixElement | null>(null);\n const edgeShadowRef = useRef<HTMLDivElement | null>(null);\n const restShadowRef = useRef<HTMLDivElement | null>(null);\n const outlineRef = useRef<HTMLDivElement | null>(null);\n const brightnessLayerRef = useRef<HTMLDivElement | null>(null);\n const tintContainerRef = useRef<HTMLDivElement | null>(null);\n const backdropLayerRef = useRef<HTMLDivElement | null>(null);\n const tintRectRef = useRef<SVGRectElement | null>(null);\n\n const currentMaskKey = useRef<string | null>(null);\n const currentMapDataUrl = useRef<string | null>(null);\n\n // Multi-lens and single-lens pools\n const singleLensPool = useRef<SingleLensSlot[]>(\n Array.from({ length: 4 }, () => ({\n filterEl: null,\n lensEls: [],\n dispEls: [],\n mapMatrixEl: null,\n feImageEl: null,\n version: 0,\n assignedTo: null,\n assignedRect: null,\n }))\n );\n\n const multiLensPool = useRef<MultiLensSlot[]>(\n Array.from({ length: 8 }, () => ({\n filterEl: null,\n feDispEl: null,\n subSlots: Array.from({ length: 4 }, () => ({\n feImageEl: null,\n feColorMatrixEl: null,\n feMaskEl: null,\n feMaskColorMatrixEl: null,\n assignedLensId: null,\n lastHref: \"\",\n lastX: \"\",\n lastY: \"\",\n lastW: \"\",\n lastH: \"\",\n lastColorMatrix: \"\",\n lastMaskKey: \"\",\n lastMaskColorMatrix: \"\",\n })),\n assignedTo: null,\n version: 0,\n lastDispScale: \"\",\n lastFilterW: \"\",\n lastFilterH: \"\",\n }))\n );\n\n const poolFilterRefs = useRef(\n Array.from({ length: 4 }, (_, idx) => ({\n get current() {\n return singleLensPool.current[idx].filterEl;\n },\n set current(el: SVGFilterElement | null) {\n singleLensPool.current[idx].filterEl = el;\n },\n }))\n );\n\n // Resize observation\n useLayoutEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const update = () => {\n const rect = el.getBoundingClientRect();\n setContainerSize((prev) =>\n prev.w === rect.width && prev.h === rect.height\n ? prev\n : { w: rect.width, h: rect.height }\n );\n };\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n window.addEventListener(\"resize\", update);\n return () => {\n ro.disconnect();\n window.removeEventListener(\"resize\", update);\n };\n }, []);\n\n const { w: containerW, h: containerH } = containerSize;\n\n // Max displacement scale and feColorMatrix scaling factors\n const maxScale = Math.max(activeParams.scaleX, activeParams.scaleY);\n const scaleRatioX = maxScale > 0 ? activeParams.scaleX / maxScale : 0;\n const scaleRatioY = maxScale > 0 ? activeParams.scaleY / maxScale : 0;\n const matrixString = colorMatrixValues(scaleRatioX, scaleRatioY);\n const needsMatrix = scaleRatioX !== 1 || scaleRatioY !== 1;\n\n // Real-time batch layout update function\n const updateLayout = useCallback(() => {\n if (!containerRef.current || !isVisible) return;\n\n const curX = resolveValue(x);\n const curY = resolveValue(y);\n const curW = resolveValue(effectiveLensW);\n const curH = resolveValue(effectiveLensH);\n const curRadius = resolveValue(effectiveBorderRadius);\n\n const w = containerW;\n const h = containerH;\n\n // Center coordinates\n const posX = typeof curX === \"number\" && curX <= 1 ? curX * w : curX;\n const posY = typeof curY === \"number\" && curY <= 1 ? curY * h : curY;\n\n // Top-left bounding box of the lens\n const lensLeft = posX - curW / 2;\n const lensTop = posY - curH / 2;\n\n // 1. Update Tint / Backdrop-filter container\n if (backdropLayerRef.current) {\n backdropLayerRef.current.style.transform = `translate3d(${lensLeft}px, ${lensTop}px, 0)`;\n backdropLayerRef.current.style.width = `${curW}px`;\n backdropLayerRef.current.style.height = `${curH}px`;\n backdropLayerRef.current.style.borderRadius = `${curRadius}px`;\n\n const { uri, key } = getSvgMaskDataUri(curW, curH, curRadius);\n if (currentMaskKey.current !== key) {\n const maskCss = `url(\"${uri}\")`;\n backdropLayerRef.current.style.maskImage = maskCss;\n backdropLayerRef.current.style.setProperty(\"-webkit-mask-image\", maskCss);\n backdropLayerRef.current.style.maskSize = \"100% 100%\";\n backdropLayerRef.current.style.setProperty(\"-webkit-mask-size\", \"100% 100%\");\n currentMaskKey.current = key;\n }\n }\n\n // 2. Update Tint Box (if tint is specified)\n if (tintContainerRef.current) {\n tintContainerRef.current.style.transform = `translate(${lensLeft}px, ${lensTop}px)`;\n tintContainerRef.current.style.width = `${curW}px`;\n tintContainerRef.current.style.height = `${curH}px`;\n tintContainerRef.current.style.borderRadius = `${curRadius}px`;\n\n const tColor = tintColor ?? \"white\";\n const tOpacity = tintOpacity !== undefined ? resolveValue(tintOpacity) : 1;\n tintContainerRef.current.style.background = `color-mix(in srgb, ${tColor} ${\n 100 * tOpacity\n }%, transparent)`;\n tintContainerRef.current.style.opacity = \"1\";\n\n const tBlur = tintBlur !== undefined ? resolveValue(tintBlur) : 0;\n const blurVal = tBlur > 0 ? `blur(${tBlur}px)` : \"none\";\n tintContainerRef.current.style.backdropFilter = blurVal;\n tintContainerRef.current.style.setProperty(\"-webkit-backdrop-filter\", blurVal);\n }\n\n // 3. Update Shadows (Edge and Rest shadows)\n if (edgeShadowRef.current) {\n edgeShadowRef.current.style.transform = `translate3d(${lensLeft}px, ${lensTop}px, 0)`;\n edgeShadowRef.current.style.width = `${curW}px`;\n edgeShadowRef.current.style.height = `${curH}px`;\n edgeShadowRef.current.style.borderRadius = `${curRadius}px`;\n if (shadowOpacity !== undefined) {\n edgeShadowRef.current.style.opacity = String(resolveValue(shadowOpacity));\n }\n }\n\n if (restShadowRef.current) {\n restShadowRef.current.style.transform = `translate3d(${lensLeft}px, ${lensTop}px, 0)`;\n restShadowRef.current.style.width = `${curW}px`;\n restShadowRef.current.style.height = `${curH}px`;\n restShadowRef.current.style.borderRadius = `${curRadius}px`;\n if (restShadowOpacity !== undefined) {\n restShadowRef.current.style.opacity = String(resolveValue(restShadowOpacity));\n }\n }\n\n // 4. Update Refraction Target Clipping\n if (refractionTargetLayerRef.current && w > 0 && h > 0) {\n const topInset = Math.max(0, lensTop);\n const rightInset = Math.max(0, w - (lensLeft + curW));\n const bottomInset = Math.max(0, h - (lensTop + curH));\n const leftInset = Math.max(0, lensLeft);\n refractionTargetLayerRef.current.style.clipPath = `inset(${topInset}px ${rightInset}px ${bottomInset}px ${leftInset}px round ${curRadius}px)`;\n }\n\n // 5. Update Brightness Overlay Clipping\n if (brightnessLayerRef.current && w > 0 && h > 0) {\n brightnessLayerRef.current.style.clipPath = `inset(${lensTop}px ${\n w - (lensLeft + curW)\n }px ${h - (lensTop + curH)}px ${lensLeft}px round ${curRadius}px)`;\n }\n\n // 6. Update SVG filter feImage positioning\n if (mainFeImageRef.current && w > 0 && h > 0) {\n if (isIOS) {\n // UserSpaceOnUse (pixel coordinates)\n mainFeImageRef.current.setAttribute(\"x\", String(lensLeft));\n mainFeImageRef.current.setAttribute(\"y\", String(lensTop));\n mainFeImageRef.current.setAttribute(\"width\", String(curW));\n mainFeImageRef.current.setAttribute(\"height\", String(curH));\n } else {\n // ObjectBoundingBox (0-1 normalised coordinates)\n mainFeImageRef.current.setAttribute(\"x\", String(lensLeft / w));\n mainFeImageRef.current.setAttribute(\"y\", String(lensTop / h));\n mainFeImageRef.current.setAttribute(\"width\", String(curW / w));\n mainFeImageRef.current.setAttribute(\"height\", String(curH / h));\n }\n }\n\n // 7. Apply active filter string to target DOM element\n const activeFilterId = `${rawId}-v${filterVersionRef.current}`;\n const filterCss = `url(\"#${activeFilterId}\")`;\n if (contentLayerRef.current && contentLayerRef.current.style.filter !== filterCss) {\n contentLayerRef.current.style.filter = filterCss;\n }\n if (refractionTargetLayerRef.current && refractionTargetLayerRef.current.style.filter !== filterCss) {\n refractionTargetLayerRef.current.style.filter = filterCss;\n }\n }, [\n containerW,\n containerH,\n x,\n y,\n effectiveLensW,\n effectiveLensH,\n effectiveBorderRadius,\n isIOS,\n isVisible,\n rawId,\n tintColor,\n tintOpacity,\n tintBlur,\n shadowOpacity,\n restShadowOpacity,\n ]);\n\n // Hook motion value changes into updateLayout microtasks\n useEffect(() => {\n const unsubscribers: Array<() => void> = [];\n const scheduleUpdate = () => queueMicrotask(updateLayout);\n\n if (isMotionValue(x)) unsubscribers.push(x.on(\"change\", scheduleUpdate));\n if (isMotionValue(y)) unsubscribers.push(y.on(\"change\", scheduleUpdate));\n if (isMotionValue(effectiveLensW)) unsubscribers.push(effectiveLensW.on(\"change\", scheduleUpdate));\n if (isMotionValue(effectiveLensH)) unsubscribers.push(effectiveLensH.on(\"change\", scheduleUpdate));\n if (isMotionValue(effectiveBorderRadius)) unsubscribers.push(effectiveBorderRadius.on(\"change\", scheduleUpdate));\n\n scheduleUpdate();\n return () => unsubscribers.forEach((u) => u());\n }, [x, y, effectiveLensW, effectiveLensH, effectiveBorderRadius, updateLayout]);\n\n // Generate displacement map (Synchronous generator for animated, Asynchronous for static)\n useEffect(() => {\n if (displacementMapUrl) {\n currentMapDataUrl.current = displacementMapUrl;\n return;\n }\n\n if (!isAnimated) {\n // Async generator path\n if (!staticCanvasRef.current) {\n staticCanvasRef.current = document.createElement(\"canvas\");\n }\n generateDisplacementMapAsync(staticCanvasRef.current, {\n canvasSize: activeParams.mapSize,\n lensHalfWidth: activeParams.lensW / 2,\n lensHalfHeight: activeParams.lensH / 2,\n borderRadius: activeParams.borderRadius,\n depth: activeParams.depth,\n sdfBoundary: activeParams.sdfBoundary,\n edgeFalloff: activeParams.edgeFalloff,\n specularRotation: activeParams.specularRotation,\n glowStrength: activeParams.glowStrength,\n glowSpread: activeParams.glowSpread,\n glowExponent: activeParams.glowExponent,\n edgeStrength: activeParams.edgeStrength,\n edgeWidth: activeParams.edgeWidth,\n edgeExponent: activeParams.edgeExponent,\n domeDepth: activeParams.domeDepth,\n splayAmount: activeParams.splayAmount,\n }).then((url) => {\n if (url) {\n currentMapDataUrl.current = url;\n filterVersionRef.current++;\n if (mainFeImageRef.current) {\n mainFeImageRef.current.setAttribute(\"href\", url);\n }\n if (mainFilterRef.current) {\n mainFilterRef.current.id = `${rawId}-v${filterVersionRef.current}`;\n }\n onLensMapChange?.(url);\n updateLayout();\n }\n });\n return;\n }\n\n // Sync generator path\n const gen = createDisplacementMapGeneratorSync(activeParams.mapSize);\n const result = gen.generate({\n lensHalfWidth: resolveValue(effectiveLensW) / 2,\n lensHalfHeight: resolveValue(effectiveLensH) / 2,\n borderRadius: resolveValue(effectiveBorderRadius),\n depth: activeParams.depth,\n sdfBoundary: activeParams.sdfBoundary,\n edgeFalloff: activeParams.edgeFalloff,\n specularRotation: activeParams.specularRotation,\n glowStrength: activeParams.glowStrength,\n glowSpread: activeParams.glowSpread,\n glowExponent: activeParams.glowExponent,\n edgeStrength: activeParams.edgeStrength,\n edgeWidth: activeParams.edgeWidth,\n edgeExponent: activeParams.edgeExponent,\n domeDepth: activeParams.domeDepth,\n splayAmount: activeParams.splayAmount,\n });\n\n currentMapDataUrl.current = result.dataUrl;\n filterVersionRef.current++;\n if (mainFeImageRef.current) {\n mainFeImageRef.current.setAttribute(\"href\", result.dataUrl);\n }\n if (mainFilterRef.current) {\n mainFilterRef.current.id = `${rawId}-v${filterVersionRef.current}`;\n }\n onLensMapChange?.(result.dataUrl);\n onGenerationTime?.({\n total: result.loopMs + result.encodeMs,\n loopMs: result.loopMs,\n encodeMs: result.encodeMs,\n });\n updateLayout();\n\n return () => gen.dispose();\n }, [\n isAnimated,\n activeParams.mapSize,\n activeParams.depth,\n activeParams.sdfBoundary,\n activeParams.edgeFalloff,\n activeParams.specularRotation,\n activeParams.glowStrength,\n activeParams.glowSpread,\n activeParams.glowExponent,\n activeParams.edgeStrength,\n activeParams.edgeWidth,\n activeParams.edgeExponent,\n activeParams.domeDepth,\n activeParams.splayAmount,\n displacementMapUrl,\n updateLayout,\n ]);\n\n // Construct SVG filter definition\n const renderFilter = (\n filterRef: React.RefObject<SVGFilterElement | null>,\n feImageRef: React.RefObject<SVGFEImageElement | null>,\n colorMatrixRef: React.RefObject<SVGFEColorMatrixElement | null>,\n isPoolItem = false\n ) => {\n const units = isIOS || isPoolItem ? \"userSpaceOnUse\" : \"objectBoundingBox\";\n const sourceGraphic =\n !isPoolItem && activeParams.blurAmount > 0 ? \"blurred\" : \"SourceGraphic\";\n const mapSource = needsMatrix ? \"scaledMap\" : \"map\";\n\n return (\n <filter\n ref={filterRef as any}\n id={`${rawId}-v${filterVersionRef.current}`}\n filterUnits={units}\n primitiveUnits={units}\n colorInterpolationFilters=\"sRGB\"\n x={0}\n y={0}\n width={1}\n height={1}\n >\n {/* 1. Neutral gray background outside the lens */}\n <feFlood floodColor=\"rgb(128,128,128)\" floodOpacity=\"1\" result=\"mapBg\" />\n\n {/* 2. Displacement map image */}\n <feImage\n ref={feImageRef as any}\n data-lens=\"\"\n href={currentMapDataUrl.current ?? BLANK_1PX_PNG}\n preserveAspectRatio=\"none\"\n result=\"rawMap\"\n />\n\n {/* 3. Composite over neutral gray */}\n <feComposite in=\"rawMap\" in2=\"mapBg\" operator=\"over\" result=\"map\" />\n\n {/* 4. Aspect-ratio scaling feColorMatrix */}\n {needsMatrix && (\n <feColorMatrix\n ref={colorMatrixRef as any}\n in=\"map\"\n type=\"matrix\"\n values={matrixString}\n result=\"scaledMap\"\n />\n )}\n\n {/* 5. Optional Gaussian blur for frosted glass */}\n {!isPoolItem &&\n activeParams.blurAmount > 0 &&\n containerW > 0 &&\n containerH > 0 && (\n <feGaussianBlur\n in=\"SourceGraphic\"\n stdDeviation={`${activeParams.blurAmount / containerW} ${\n activeParams.blurAmount / containerH\n }`}\n result=\"blurred\"\n />\n )}\n\n {/* 6. Displacement mapping (with Chromatic Aberration or single pass) */}\n {!isPoolItem && activeParams.chromaAmount > 0 ? (\n <React.Fragment>\n {/* Red Channel */}\n <feDisplacementMap\n data-lens=\"\"\n in={sourceGraphic}\n in2={mapSource}\n scale={maxScale * (1 + 0.2 * activeParams.chromaAmount)}\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n />\n <feColorMatrix\n type=\"matrix\"\n values=\"1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\"\n result=\"dispR\"\n />\n\n {/* Green Channel */}\n <feDisplacementMap\n data-lens=\"\"\n in={sourceGraphic}\n in2={mapSource}\n scale={maxScale * (1 + 0.1 * activeParams.chromaAmount)}\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0\"\n result=\"dispG\"\n />\n\n {/* Blue Channel */}\n <feDisplacementMap\n data-lens=\"\"\n in={sourceGraphic}\n in2={mapSource}\n scale={maxScale}\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\"\n result=\"dispB\"\n />\n\n {/* Composite R + G, then merge with B */}\n <feComposite\n in=\"dispR\"\n in2=\"dispG\"\n operator=\"arithmetic\"\n k1=\"0\"\n k2=\"1\"\n k3=\"1\"\n k4=\"0\"\n />\n <feComposite\n in2=\"dispB\"\n operator=\"arithmetic\"\n k1=\"0\"\n k2=\"1\"\n k3=\"1\"\n k4=\"0\"\n result=\"lensResult\"\n />\n </React.Fragment>\n ) : (\n <feDisplacementMap\n data-lens=\"\"\n in={sourceGraphic}\n in2={mapSource}\n scale={maxScale}\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n result=\"lensResult\"\n />\n )}\n\n {/* 7. Specular highlight (Blue channel) */}\n {!isPoolItem &&\n (activeParams.glowStrength > 0 || activeParams.edgeStrength > 0) &&\n (activeParams.specularDark ? (\n <React.Fragment>\n <feColorMatrix\n in=\"map\"\n type=\"matrix\"\n values={`0 0 ${-activeParams.specularStrength} 0 ${\n 1 + (128 * activeParams.specularStrength) / 255\n } 0 0 ${-activeParams.specularStrength} 0 ${\n 1 + (128 * activeParams.specularStrength) / 255\n } 0 0 ${-activeParams.specularStrength} 0 ${\n 1 + (128 * activeParams.specularStrength) / 255\n } 0 0 0 0 1`}\n result=\"specMask\"\n />\n <feComposite\n in=\"specMask\"\n in2=\"lensResult\"\n operator=\"arithmetic\"\n k1=\"1\"\n k2=\"0\"\n k3=\"0\"\n k4=\"0\"\n result=\"lensResult\"\n />\n </React.Fragment>\n ) : (\n <React.Fragment>\n <feColorMatrix\n in={isSafari ? \"rawMap\" : \"map\"}\n type=\"matrix\"\n values={`0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 ${\n -128 / 255\n }`}\n result=\"specMask\"\n />\n <feComposite\n in=\"specMask\"\n in2=\"lensResult\"\n operator=\"arithmetic\"\n k1=\"0\"\n k2={activeParams.specularStrength}\n k3=\"1\"\n k4=\"0\"\n result=\"lensResult\"\n />\n </React.Fragment>\n ))}\n\n {/* 8. Cut hole in SourceGraphic and composite lensed result over */}\n <feFlood\n data-lens=\"\"\n floodColor=\"black\"\n floodOpacity=\"1\"\n result=\"lensMask\"\n />\n <feComposite\n in=\"SourceGraphic\"\n in2=\"lensMask\"\n operator=\"out\"\n result=\"holedSG\"\n />\n <feComposite in=\"lensResult\" in2=\"holedSG\" operator=\"over\" />\n </filter>\n );\n };\n\n const renderShadowLayer = (\n ref: React.RefObject<HTMLDivElement | null>,\n boxShadow?: string,\n insetShadow?: string\n ) => {\n if (!boxShadow && !insetShadow) return null;\n return (\n <div\n ref={ref as any}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n willChange: \"transform\",\n boxSizing: \"border-box\",\n boxShadow: [boxShadow, insetShadow ? `inset ${insetShadow}` : null]\n .filter(Boolean)\n .join(\", \"),\n }}\n />\n );\n };\n\n return (\n <div\n ref={containerRef}\n data-lensfx-container=\"\"\n className={className}\n style={{ position: \"relative\", ...style }}\n {...restProps}\n >\n {/* Layer 1: Real DOM Content to be refracted */}\n <div\n ref={contentLayerRef}\n style={{ willChange: \"filter\" }}\n >\n {children}\n </div>\n\n {/* Layer 2: Alternative Refraction Target (Clipped to lens rectangle) */}\n {refractionTarget && (\n <div\n ref={refractionTargetLayerRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n willChange: \"filter, clip-path\",\n background: \"var(--body-bg, #000)\",\n }}\n >\n {refractionTarget}\n </div>\n )}\n\n {/* Layer 3: Overlay (if provided) */}\n {overlay && (\n <div\n ref={overlayLayerRef}\n style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}\n >\n {overlay}\n </div>\n )}\n\n {/* Layer 4: SVG Definitions and Filters */}\n <div style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}>\n <svg\n viewBox={`0 0 ${containerW} ${containerH}`}\n width=\"100%\"\n height=\"100%\"\n >\n <defs>\n {renderFilter(mainFilterRef, mainFeImageRef, mainColorMatrixRef)}\n {poolFilterRefs.current.map((ref, idx) => (\n <React.Fragment key={idx}>\n {renderFilter(ref as any, null as any, null as any, true)}\n </React.Fragment>\n ))}\n </defs>\n {activeParams.tint !== 0 && maxScale === 0 && (\n <rect\n ref={tintRectRef}\n fill={activeParams.tint > 0 ? \"white\" : \"black\"}\n opacity={Math.abs(activeParams.tint)}\n pointerEvents=\"none\"\n />\n )}\n </svg>\n\n {/* Brightness layer */}\n {activeParams.brightness !== 0 && (\n <div\n ref={brightnessLayerRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n background: activeParams.brightness > 0 ? \"white\" : \"black\",\n opacity: Math.abs(activeParams.brightness),\n }}\n />\n )}\n\n {/* Tint container */}\n {tintColor !== undefined && (\n <div\n ref={tintContainerRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n overflow: \"hidden\",\n willChange: \"transform\",\n }}\n />\n )}\n </div>\n\n {/* Layer 5: Backdrop-blur and mask layer */}\n <div\n ref={backdropLayerRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n willChange: \"backdrop-filter, transform\",\n }}\n />\n\n {/* Layer 6: Edge Rim Shadow */}\n {renderShadowLayer(\n edgeShadowRef,\n activeParams.edgeShadow,\n activeParams.edgeInsetShadow\n )}\n\n {/* Layer 7: Rest Shadow (Slider/Switch rest state) */}\n {renderShadowLayer(\n restShadowRef,\n activeParams.restEdgeShadow,\n undefined\n )}\n\n {/* Layer 8: Debug / Outline layer */}\n {showOutline && (\n <div\n ref={outlineRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n border: \"2px solid var(--border-2, rgba(255,255,255,0.2))\",\n pointerEvents: \"none\",\n willChange: \"transform\",\n boxSizing: \"border-box\",\n }}\n />\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Compound Components for Shared Multi-Lens Target Registration\n// ---------------------------------------------------------------------------\n\nLens.General = {\n Provider: ({ children }: { children: React.ReactNode }) => {\n const activeLens = useRef<any>(null);\n const version = useRef(0);\n const targets = useRef(new Map<HTMLElement, any>());\n const targetVersion = useRef(0);\n const bleedRef = useRef(0);\n\n const register = useCallback((lens: any) => {\n activeLens.current = lens;\n version.current++;\n }, []);\n\n const deregister = useCallback(() => {\n activeLens.current = null;\n version.current++;\n }, []);\n\n const registerTarget = useCallback((el: HTMLElement, data: any) => {\n targets.current.set(el, data);\n targetVersion.current++;\n }, []);\n\n const deregisterTarget = useCallback((el: HTMLElement) => {\n targets.current.delete(el);\n targetVersion.current++;\n }, []);\n\n const contextValue = useMemo(\n () => ({\n register,\n deregister,\n activeLens,\n version,\n targets,\n targetVersion,\n bleedRef,\n registerTarget,\n deregisterTarget,\n }),\n [register, deregister, registerTarget, deregisterTarget]\n );\n\n return (\n <GeneralContext.Provider value={contextValue}>\n {children}\n </GeneralContext.Provider>\n );\n },\n\n Target: ({\n children,\n className,\n style,\n ...rest\n }: {\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n }) => {\n const ctx = useContext(GeneralContext);\n const elRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const el = elRef.current;\n if (!el || !ctx) return;\n ctx.registerTarget(el, { el });\n return () => {\n ctx.deregisterTarget(el);\n };\n }, [ctx]);\n\n return (\n <div\n ref={elRef}\n data-lensfx-target=\"\"\n className={className}\n style={style}\n {...rest}\n >\n {children}\n </div>\n );\n },\n\n RefractionGroup: ({\n children,\n flexDirection = \"column\",\n gap = 0,\n className,\n style,\n ...rest\n }: {\n children: React.ReactNode;\n flexDirection?: \"row\" | \"column\";\n gap?: number;\n className?: string;\n style?: React.CSSProperties;\n }) => (\n <RefractionGroupContext.Provider value={{ inGroup: true, gap }}>\n <div\n className={className}\n style={{\n display: \"flex\",\n flexDirection,\n ...(gap !== 0 ? { gap } : {}),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n </RefractionGroupContext.Provider>\n ),\n};\n\n// Backward compatibility aliases\nexport type AaveGlassProps = LensProps;\nexport { Lens as AaveGlass };\n","\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { animate, motion, useMotionValue, useTransform } from \"framer-motion\";\nimport { Lens } from \"../primitives/Lens\";\nimport {\n LensParams,\n SWITCH_DARK_OVERRIDES,\n SWITCH_GLASS_DEFAULTS,\n SWITCH_LIGHT_OVERRIDES,\n} from \"../engine/types\";\n\nexport interface GlassSwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n name?: string;\n value?: string;\n ariaLabel?: string;\n width?: number;\n height?: number;\n lens?: Partial<LensParams>;\n tintBlur?: number;\n rubberOvershoot?: number;\n rubberDampening?: number;\n filterResolution?: number;\n forceExpanded?: boolean;\n theme?: \"light\" | \"dark\";\n onLensMapChange?: (url: string) => void;\n}\n\nconst EASE_SPRING = [0.22, 1.15, 0.36, 1.06] as const;\nconst TOGGLE_ANIM = { ease: EASE_SPRING, duration: 0.6 };\nconst PRESS_ANIM = { ease: EASE_SPRING, duration: 0.32 };\nconst RELEASE_ANIM = { ease: [0.22, 1, 0.36, 1] as const, duration: 0.52 };\n\nfunction rubberBand(drag: number, maxOvershoot: number, dampening: number): number {\n return maxOvershoot * (1 - Math.pow(1 - Math.min(1, drag / dampening), 3));\n}\n\nexport function GlassSwitch({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n name,\n value,\n ariaLabel = \"Switch\",\n width: S = 74,\n height: R = 28,\n lens,\n tintBlur = 4,\n rubberOvershoot: k = 0.15,\n rubberDampening: T = 10,\n filterResolution,\n forceExpanded = false,\n theme = \"dark\",\n onLensMapChange,\n}: GlassSwitchProps) {\n const isDark = theme === \"dark\";\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const isChecked = controlledChecked !== undefined ? controlledChecked : internalChecked;\n\n // Geometry calculations\n const L = Math.round(0.6 * S); // thumb width: 44px\n const N = R - 6; // thumb height: 22px\n const V = S - L - 6; // travel distance: 24px\n const H = S * k; // max overshoot\n const F = H * T; // dampening\n const q = R / 2; // track corner radius: 14px\n const X = N / 2; // thumb corner radius: 11px\n const W = L / 2; // thumb half-width: 22px\n const B = N / 2; // thumb half-height: 11px\n const U = Math.round(0.75 * R);// refraction track fill height: 21px\n const pad = Math.ceil(0.5 * Math.max(W, B) + H) + 2; // container padding: 21px\n const containerW = S + 2 * pad;\n const containerH = R + 2 * pad;\n\n // Persistent geometry refs\n const maxTravelRef = useRef(V);\n maxTravelRef.current = V;\n const thumbWidthRef = useRef(L);\n thumbWidthRef.current = L;\n const containerWidthRef = useRef(containerW);\n containerWidthRef.current = containerW;\n const padRef = useRef(pad);\n padRef.current = pad;\n const halfWRef = useRef(W);\n halfWRef.current = W;\n const halfHRef = useRef(B);\n halfHRef.current = B;\n const radiusRef = useRef(X);\n radiusRef.current = X;\n\n // Motion values\n const thumbX = useMotionValue(isChecked ? V : 0);\n const normalizedLensX = useTransform(\n thumbX,\n (xVal) => (padRef.current + 3 + thumbWidthRef.current / 2 + xVal) / containerWidthRef.current\n );\n\n const lensHalfW = useMotionValue(W);\n const lensHalfH = useMotionValue(B);\n const lensRadius = useMotionValue(X);\n const tintOpacityVal = useMotionValue(1);\n const trackScaleX = useMotionValue(0.85);\n const trackScaleY = useMotionValue(0.525);\n const tintBlurVal = useMotionValue(tintBlur);\n const shadowOpacityVal = useMotionValue(0);\n const edgeBiasVal = useTransform(tintOpacityVal, (v) => 0.5 * v);\n\n // Squish simulation motion values\n const squishVal = useMotionValue(0);\n const squishHoldRef = useRef(0);\n const squishTriggerRef = useRef(() => {});\n\n // Perpendicular compression: moving horizontally compresses X (-0.2), expands Y (+0.4)\n const dynamicLensW = useTransform(\n [lensHalfW, squishVal],\n ([w, sq]: any) => w * (1 - 0.2 * sq)\n );\n const dynamicLensH = useTransform(\n [lensHalfH, squishVal],\n ([h, sq]: any) => h * (1 + 0.4 * sq)\n );\n\n // Per-frame physics loop for squish spring simulation\n useEffect(() => {\n let animId = 0;\n let squishDisp = 0;\n let squishVel = 0;\n let lastTime = 0;\n let lastX = thumbX.get();\n let isRunning = false;\n\n const startLoop = () => {\n if (!isRunning) {\n isRunning = true;\n lastTime = performance.now();\n lastX = thumbX.get();\n animId = requestAnimationFrame(step);\n }\n };\n\n const step = (now: number) => {\n const dt = Math.min((now - lastTime) / 1000, 0.033);\n lastTime = now;\n const curX = thumbX.get();\n const velocity = (curX - lastX) / Math.min(Math.max(dt, 0.008), 0.03);\n lastX = curX;\n\n const absVel = Math.abs(velocity);\n const targetSquish = Math.min(\n 0.35,\n Math.max(Math.min(0.35, 0.012 * Math.pow(absVel, 0.75)), squishHoldRef.current)\n );\n\n // Damped spring acceleration: -180 * (x - target) - 14 * v\n const accel = -180 * (squishDisp - targetSquish) - 14 * squishVel;\n squishVel += accel * dt;\n squishDisp += squishVel * dt;\n squishVal.set(squishDisp);\n\n if (\n Math.abs(squishDisp) < 0.0005 &&\n Math.abs(squishVel) < 0.005 &&\n absVel < 0.005 &&\n squishHoldRef.current === 0\n ) {\n isRunning = false;\n squishVal.set(0);\n return;\n }\n\n animId = requestAnimationFrame(step);\n };\n\n squishTriggerRef.current = startLoop;\n const unsub = thumbX.on(\"change\", startLoop);\n\n return () => {\n unsub();\n cancelAnimationFrame(animId);\n squishTriggerRef.current = () => {};\n };\n }, [thumbX, squishVal]);\n\n // Press / Release shape animations (1.5x expansion)\n const animatePress = (animConfig: any) => {\n animate(lensHalfW, 1.5 * halfWRef.current, animConfig);\n animate(lensHalfH, 1.5 * halfHRef.current, animConfig);\n animate(lensRadius, 1.5 * radiusRef.current, animConfig);\n animate(tintOpacityVal, 0, animConfig);\n animate(tintBlurVal, 0, animConfig);\n animate(trackScaleX, 0.95, animConfig);\n animate(trackScaleY, 0.975, animConfig);\n animate(shadowOpacityVal, 1, animConfig);\n };\n\n const animateRelease = (animConfig: any) => {\n animate(lensHalfW, halfWRef.current, animConfig);\n animate(lensHalfH, halfHRef.current, animConfig);\n animate(lensRadius, radiusRef.current, animConfig);\n animate(tintOpacityVal, 1, animConfig);\n animate(tintBlurVal, tintBlur, animConfig);\n animate(trackScaleX, 0.85, animConfig);\n animate(trackScaleY, 0.525, animConfig);\n animate(shadowOpacityVal, 0, animConfig);\n };\n\n // Sync forced expansion\n const forceExpandedRef = useRef(forceExpanded);\n useEffect(() => {\n if (forceExpanded !== forceExpandedRef.current) {\n forceExpandedRef.current = forceExpanded;\n if (forceExpanded) {\n animatePress(PRESS_ANIM);\n squishHoldRef.current = 0.175;\n squishTriggerRef.current();\n } else {\n animateRelease(RELEASE_ANIM);\n squishHoldRef.current = 0;\n }\n }\n }, [forceExpanded]);\n\n // Interaction state\n const isDraggingRef = useRef(false);\n const interactionStateRef = useRef<\"idle\" | \"pending\" | \"hold\" | \"tap\">(\"idle\");\n const holdTimerRef = useRef<any>(null);\n const releaseTimerRef = useRef<any>(null);\n const activeAnimationRef = useRef<any>(null);\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n clearTimeout(holdTimerRef.current);\n clearTimeout(releaseTimerRef.current);\n };\n }, []);\n\n // Update thumb position on external prop change\n useEffect(() => {\n if (!isDraggingRef.current && interactionStateRef.current !== \"tap\") {\n activeAnimationRef.current = animate(thumbX, isChecked ? V : 0, TOGGLE_ANIM);\n }\n }, [isChecked, thumbX, V]);\n\n // Update CSS property --switch-progress on the wrapper\n const wrapperRef = useRef<HTMLLabelElement | null>(null);\n useEffect(() => {\n const updateProgress = (val: number) => {\n if (wrapperRef.current) {\n const progress = maxTravelRef.current > 0\n ? Math.max(0, Math.min(1, val / maxTravelRef.current))\n : 0;\n wrapperRef.current.style.setProperty(\"--switch-progress\", String(progress));\n }\n };\n updateProgress(thumbX.get());\n return thumbX.on(\"change\", updateProgress);\n }, [thumbX]);\n\n // Merge theme overrides with defaults\n const activeLensParams = useMemo(() => {\n return {\n ...SWITCH_GLASS_DEFAULTS,\n ...(isDark ? SWITCH_DARK_OVERRIDES : SWITCH_LIGHT_OVERRIDES),\n ...lens,\n specularDark: !isDark,\n };\n }, [isDark, lens]);\n\n // Pointer event tracking refs\n const pointerIdRef = useRef<number | null>(null);\n const startClientXRef = useRef(0);\n const startThumbXRef = useRef(0);\n const didDragRef = useRef(false);\n const suppressClickRef = useRef(false);\n\n const toggle = (nextChecked: boolean) => {\n if (suppressClickRef.current) return;\n if (controlledChecked === undefined) {\n setInternalChecked(nextChecked);\n }\n onCheckedChange?.(nextChecked);\n\n if (interactionStateRef.current === \"idle\") {\n interactionStateRef.current = \"tap\";\n animatePress(PRESS_ANIM);\n clearTimeout(releaseTimerRef.current);\n releaseTimerRef.current = setTimeout(() => {\n animateRelease(RELEASE_ANIM);\n }, 330);\n\n activeAnimationRef.current = animate(thumbX, nextChecked ? V : 0, {\n ...TOGGLE_ANIM,\n onComplete: () => {\n if (isMountedRef.current && interactionStateRef.current === \"tap\") {\n interactionStateRef.current = \"idle\";\n }\n },\n });\n }\n };\n\n return (\n <label\n ref={wrapperRef}\n style={{\n display: \"inline-block\",\n position: \"relative\",\n flexShrink: 0,\n width: S,\n height: R,\n overflow: \"visible\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n userSelect: \"none\",\n }}\n >\n {/* Hidden Accessible Checkbox Input */}\n <input\n type=\"checkbox\"\n role=\"switch\"\n checked={isChecked}\n onChange={(e) => toggle(e.target.checked)}\n onClick={(e) => {\n if (suppressClickRef.current) e.preventDefault();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n toggle(!isChecked);\n }\n }}\n disabled={disabled}\n name={name}\n value={value}\n aria-label={ariaLabel}\n style={{\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n />\n\n {/* Glass Layer Container */}\n <Lens\n lens={activeLensParams}\n x={normalizedLensX}\n y={0.5}\n lensW={dynamicLensW}\n lensH={dynamicLensH}\n borderRadius={lensRadius}\n tintColor=\"white\"\n tintOpacity={tintOpacityVal}\n tintBlur={tintBlurVal}\n shadowOpacity={shadowOpacityVal}\n edgeBias={edgeBiasVal}\n filterResolution={filterResolution}\n onLensMapChange={onLensMapChange}\n style={{\n width: containerW,\n height: containerH,\n overflow: \"visible\",\n margin: -pad,\n }}\n refractionTarget={\n <div\n style={{\n padding: pad,\n height: R,\n display: \"flex\",\n alignItems: \"center\",\n boxSizing: \"content-box\",\n }}\n >\n <motion.div\n style={{\n width: S,\n height: U,\n borderRadius: U / 2,\n background:\n \"color-mix(in srgb, var(--bg-4, #27272a), var(--primary, #38bdf8) calc(var(--switch-progress, 0) * 100%))\",\n scaleX: trackScaleX,\n scaleY: trackScaleY,\n }}\n />\n </div>\n }\n >\n {/* Real Rendered Switch DOM (Background Track + Hit Area) */}\n <div style={{ padding: pad }}>\n <div\n aria-hidden=\"true\"\n style={{\n position: \"relative\",\n width: S,\n height: R,\n borderRadius: q,\n background: \"var(--bg-3, #18181b)\",\n transition: \"background 0.2s\",\n }}\n >\n {/* Draggable Hit Area for the Thumb */}\n <motion.div\n style={{\n position: \"absolute\",\n x: thumbX,\n width: L,\n height: N,\n top: 3,\n left: 3,\n touchAction: \"none\",\n }}\n onPointerDown={(e) => {\n if (pointerIdRef.current !== null || disabled) return;\n pointerIdRef.current = e.pointerId;\n e.currentTarget.setPointerCapture(e.pointerId);\n startClientXRef.current = e.clientX;\n startThumbXRef.current = thumbX.get();\n didDragRef.current = false;\n isDraggingRef.current = true;\n suppressClickRef.current = true;\n\n clearTimeout(holdTimerRef.current);\n clearTimeout(releaseTimerRef.current);\n interactionStateRef.current = \"pending\";\n\n holdTimerRef.current = setTimeout(() => {\n if (interactionStateRef.current === \"pending\") {\n interactionStateRef.current = \"hold\";\n activeAnimationRef.current?.stop();\n animatePress(PRESS_ANIM);\n squishHoldRef.current = 0.175;\n squishTriggerRef.current();\n }\n }, 200);\n }}\n onPointerMove={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n const deltaX = e.clientX - startClientXRef.current;\n\n if (!didDragRef.current) {\n if (Math.abs(deltaX) < 3) return;\n didDragRef.current = true;\n activeAnimationRef.current?.stop();\n startThumbXRef.current = thumbX.get();\n startClientXRef.current = e.clientX;\n clearTimeout(holdTimerRef.current);\n squishHoldRef.current = 0;\n if (interactionStateRef.current !== \"hold\") {\n interactionStateRef.current = \"hold\";\n animatePress(PRESS_ANIM);\n }\n }\n\n let newX = startThumbXRef.current + (e.clientX - startClientXRef.current);\n if (newX < 0) {\n newX = -rubberBand(-newX, H, F);\n } else if (newX > V) {\n newX = V + rubberBand(newX - V, H, F);\n }\n thumbX.set(newX);\n }}\n onPointerUp={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n pointerIdRef.current = null;\n clearTimeout(holdTimerRef.current);\n\n if (didDragRef.current) {\n isDraggingRef.current = false;\n interactionStateRef.current = \"idle\";\n animateRelease(RELEASE_ANIM);\n const shouldCheck =\n Math.max(0, Math.min(V, thumbX.get())) > V / 2;\n activeAnimationRef.current = animate(thumbX, shouldCheck ? V : 0, TOGGLE_ANIM);\n if (shouldCheck !== isChecked) {\n if (controlledChecked === undefined) {\n setInternalChecked(shouldCheck);\n }\n onCheckedChange?.(shouldCheck);\n }\n requestAnimationFrame(() => {\n suppressClickRef.current = false;\n });\n } else if (\n interactionStateRef.current === \"pending\" ||\n interactionStateRef.current === \"tap\"\n ) {\n interactionStateRef.current = \"tap\";\n suppressClickRef.current = false;\n isDraggingRef.current = false;\n animatePress(PRESS_ANIM);\n clearTimeout(releaseTimerRef.current);\n releaseTimerRef.current = setTimeout(() => {\n animateRelease(RELEASE_ANIM);\n }, 330);\n\n const nextChecked = !isChecked;\n if (controlledChecked === undefined) {\n setInternalChecked(nextChecked);\n }\n onCheckedChange?.(nextChecked);\n\n activeAnimationRef.current = animate(\n thumbX,\n nextChecked ? V : 0,\n {\n ...TOGGLE_ANIM,\n onComplete: () => {\n if (isMountedRef.current && interactionStateRef.current === \"tap\") {\n interactionStateRef.current = \"idle\";\n }\n },\n }\n );\n } else if (interactionStateRef.current === \"hold\") {\n interactionStateRef.current = \"idle\";\n isDraggingRef.current = false;\n squishHoldRef.current = 0;\n animateRelease(RELEASE_ANIM);\n activeAnimationRef.current = animate(thumbX, isChecked ? V : 0, TOGGLE_ANIM);\n requestAnimationFrame(() => {\n suppressClickRef.current = false;\n });\n } else {\n isDraggingRef.current = false;\n suppressClickRef.current = false;\n }\n }}\n onPointerCancel={(e) => {\n if (e.pointerId === pointerIdRef.current) {\n pointerIdRef.current = null;\n clearTimeout(holdTimerRef.current);\n squishHoldRef.current = 0;\n isDraggingRef.current = false;\n interactionStateRef.current = \"idle\";\n animateRelease(RELEASE_ANIM);\n activeAnimationRef.current = animate(thumbX, isChecked ? V : 0, TOGGLE_ANIM);\n requestAnimationFrame(() => {\n suppressClickRef.current = false;\n });\n }\n }}\n onDragStart={(e) => e.preventDefault()}\n />\n </div>\n </div>\n </Lens>\n </label>\n );\n}\n","\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { animate, motion, useMotionValue, useTransform } from \"framer-motion\";\nimport { Lens } from \"../primitives/Lens\";\nimport {\n LensParams,\n SLIDER_DARK_OVERRIDES,\n SLIDER_GLASS_DEFAULTS,\n SLIDER_LIGHT_OVERRIDES,\n SLIDER_SAFARI_OVERRIDES,\n} from \"../engine/types\";\n\nexport interface GlassSliderProps {\n value?: number;\n defaultValue?: number;\n onValueChange?: (val: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n width?: number;\n trackHeight?: number;\n thumbHeight?: number;\n thumbWidth?: number;\n refractionTrackHeight?: number;\n rubberOvershoot?: number;\n rubberDampening?: number;\n lens?: Partial<LensParams>;\n tintBlur?: number;\n filterResolution?: number;\n name?: string;\n ariaLabel?: string;\n forceExpanded?: boolean;\n theme?: \"light\" | \"dark\";\n onLensMapChange?: (url: string) => void;\n}\n\nconst PRESS_ANIM = { ease: [0.22, 1.15, 0.36, 1.06] as const, duration: 0.32 };\nconst RELEASE_ANIM = { ease: [0.22, 1, 0.36, 1] as const, duration: 0.52 };\n\nfunction rubberBand(drag: number, maxOvershoot: number, dampening: number): number {\n return maxOvershoot * (1 - Math.pow(1 - Math.min(1, drag / dampening), 3));\n}\n\nexport function GlassSlider({\n value: controlledValue,\n defaultValue = 50,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n width: R = 240,\n trackHeight: k = 6,\n thumbHeight: E = 22,\n thumbWidth: customThumbWidth,\n refractionTrackHeight: customRefractionTrackHeight,\n rubberOvershoot: T = 0.05,\n rubberDampening: I = 30,\n lens,\n tintBlur = 4,\n filterResolution,\n name,\n ariaLabel = \"Slider\",\n forceExpanded = false,\n theme = \"dark\",\n onLensMapChange,\n}: GlassSliderProps) {\n const isDark = theme === \"dark\";\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = controlledValue !== undefined ? controlledValue : internalValue;\n\n const updateValue = useCallback(\n (nextRaw: number) => {\n const stepped = step > 0 ? Math.round((nextRaw - min) / step) * step + min : nextRaw;\n const clamped = Math.max(min, Math.min(max, stepped));\n if (controlledValue === undefined) {\n setInternalValue(clamped);\n }\n onValueChange?.(clamped);\n },\n [min, max, step, controlledValue, onValueChange]\n );\n\n // Platform detection for Safari override\n const [isSafari, setIsSafari] = useState(false);\n useEffect(() => {\n if (typeof navigator !== \"undefined\") {\n setIsSafari(\n /^((?!chrome|chromium|android).)*safari/i.test(navigator.userAgent)\n );\n }\n }, []);\n\n // Geometry\n const Y = customThumbWidth ?? Math.round(2 * E); // thumb width: 44px\n const z = R - Y; // travel distance: 196px\n const Z = Y / 2; // thumb half-width: 22px\n const K = E / 2; // thumb half-height: 11px\n const Q = E / 2; // thumb border-radius: 11px\n const J = k / 2; // track border-radius: 3px\n const ee = R * T; // max overshoot\n const et = ee * I; // dampening\n const er = customRefractionTrackHeight ?? Math.round(0.75 * E); // 17px\n const pad = Math.ceil(0.5 * Math.max(Z, K) + ee) + 2; // container padding: 25px\n const containerW = R + 2 * pad;\n const containerH = E + 2 * pad;\n\n const travelRef = useRef(z);\n const thumbWidthRef = useRef(Y);\n const containerWidthRef = useRef(containerW);\n const padRef = useRef(pad);\n const halfWRef = useRef(Z);\n const halfHRef = useRef(K);\n const radiusRef = useRef(Q);\n const overshootRef = useRef(ee);\n const dampeningRef = useRef(et);\n\n useLayoutEffect(() => {\n travelRef.current = z;\n thumbWidthRef.current = Y;\n containerWidthRef.current = containerW;\n padRef.current = pad;\n halfWRef.current = Z;\n halfHRef.current = K;\n radiusRef.current = Q;\n overshootRef.current = ee;\n dampeningRef.current = et;\n });\n\n const valueToPos = useCallback(\n (val: number) => (max > min ? ((val - min) / (max - min)) * z : 0),\n [min, max, z]\n );\n\n const posToValue = useCallback(\n (pos: number) => {\n const clampedPos = Math.max(0, Math.min(z, pos));\n const rawVal = z > 0 ? min + (clampedPos / z) * (max - min) : min;\n return step > 0 ? Math.round((rawVal - min) / step) * step + min : rawVal;\n },\n [min, max, z, step]\n );\n\n // Motion values\n const thumbX = useMotionValue(valueToPos(currentValue));\n const normalizedLensX = useTransform(\n thumbX,\n (pos) => (padRef.current + thumbWidthRef.current / 2 + pos) / containerWidthRef.current\n );\n\n const lensHalfW = useMotionValue(Z);\n const lensHalfH = useMotionValue(K);\n const lensRadius = useMotionValue(Q);\n const tintOpacityVal = useMotionValue(1);\n const trackScaleX = useMotionValue(0.85);\n const trackScaleY = useMotionValue(0.525);\n const tintBlurVal = useMotionValue(tintBlur);\n const shadowOpacityVal = useMotionValue(0);\n const restShadowOpacityVal = useTransform(shadowOpacityVal, (v) => 1 - v);\n\n // Squish simulation\n const squishVal = useMotionValue(0);\n const squishHoldRef = useRef(0);\n const squishTriggerRef = useRef(() => {});\n\n const dynamicLensW = useTransform(\n [lensHalfW, squishVal],\n ([w, sq]: any) => w * (1 - 0.2 * sq)\n );\n const dynamicLensH = useTransform(\n [lensHalfH, squishVal],\n ([h, sq]: any) => h * (1 + 0.4 * sq)\n );\n\n // Physics loop\n useEffect(() => {\n let animId = 0;\n let squishDisp = 0;\n let squishVel = 0;\n let lastTime = 0;\n let lastX = thumbX.get();\n let isRunning = false;\n\n const startLoop = () => {\n if (!isRunning) {\n isRunning = true;\n lastTime = performance.now();\n lastX = thumbX.get();\n animId = requestAnimationFrame(step);\n }\n };\n\n const step = (now: number) => {\n const dt = Math.min((now - lastTime) / 1000, 0.033);\n lastTime = now;\n const curX = thumbX.get();\n const velocity = (curX - lastX) / Math.min(Math.max(dt, 0.008), 0.03);\n lastX = curX;\n\n const absVel = Math.abs(velocity);\n const targetSquish = Math.min(\n 0.35,\n Math.max(Math.min(0.35, 0.012 * Math.pow(absVel, 0.75)), squishHoldRef.current)\n );\n\n const accel = -180 * (squishDisp - targetSquish) - 14 * squishVel;\n squishVel += accel * dt;\n squishDisp += squishVel * dt;\n squishVal.set(squishDisp);\n\n if (\n Math.abs(squishDisp) < 0.0005 &&\n Math.abs(squishVel) < 0.005 &&\n absVel < 0.005 &&\n squishHoldRef.current === 0\n ) {\n isRunning = false;\n squishVal.set(0);\n return;\n }\n\n animId = requestAnimationFrame(step);\n };\n\n squishTriggerRef.current = startLoop;\n const unsub = thumbX.on(\"change\", startLoop);\n\n return () => {\n unsub();\n cancelAnimationFrame(animId);\n squishTriggerRef.current = () => {};\n };\n }, [thumbX, squishVal]);\n\n const animatePress = (animConfig: any) => {\n animate(lensHalfW, 1.5 * halfWRef.current, animConfig);\n animate(lensHalfH, 1.5 * halfHRef.current, animConfig);\n animate(lensRadius, 1.5 * radiusRef.current, animConfig);\n animate(tintOpacityVal, 0, animConfig);\n animate(tintBlurVal, 0, animConfig);\n animate(trackScaleX, 0.95, animConfig);\n animate(trackScaleY, 0.975, animConfig);\n animate(shadowOpacityVal, 1, animConfig);\n };\n\n const animateRelease = (animConfig: any) => {\n animate(lensHalfW, halfWRef.current, animConfig);\n animate(lensHalfH, halfHRef.current, animConfig);\n animate(lensRadius, radiusRef.current, animConfig);\n animate(tintOpacityVal, 1, animConfig);\n animate(tintBlurVal, tintBlur, animConfig);\n animate(trackScaleX, 0.85, animConfig);\n animate(trackScaleY, 0.525, animConfig);\n animate(shadowOpacityVal, 0, animConfig);\n };\n\n // Sync forced expansion\n const forceExpandedRef = useRef(forceExpanded);\n useEffect(() => {\n if (forceExpanded !== forceExpandedRef.current) {\n forceExpandedRef.current = forceExpanded;\n if (forceExpanded) {\n animatePress(PRESS_ANIM);\n squishHoldRef.current = 0.175;\n squishTriggerRef.current();\n } else {\n animateRelease(RELEASE_ANIM);\n squishHoldRef.current = 0;\n }\n }\n }, [forceExpanded]);\n\n // Sync external value changes\n const isDraggingRef = useRef(false);\n useEffect(() => {\n if (!isDraggingRef.current) {\n thumbX.set(valueToPos(currentValue));\n }\n }, [currentValue, valueToPos, thumbX]);\n\n // Update CSS variables --slider-fill and --slider-progress\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n const updateProgress = (pos: number) => {\n if (wrapperRef.current) {\n const fillPx = thumbWidthRef.current / 2 + pos;\n const progress = travelRef.current > 0 ? pos / travelRef.current : 0;\n wrapperRef.current.style.setProperty(\"--slider-fill\", `${fillPx}px`);\n wrapperRef.current.style.setProperty(\n \"--slider-progress\",\n String(Math.max(0, Math.min(1, progress)))\n );\n }\n };\n updateProgress(thumbX.get());\n return thumbX.on(\"change\", updateProgress);\n }, [thumbX]);\n\n // Merge theme and Safari overrides\n const activeLensParams = useMemo(() => {\n const themeOverrides = isDark ? SLIDER_DARK_OVERRIDES : SLIDER_LIGHT_OVERRIDES;\n const safariOverrides = isSafari ? SLIDER_SAFARI_OVERRIDES : {};\n return {\n ...SLIDER_GLASS_DEFAULTS,\n ...themeOverrides,\n ...safariOverrides,\n ...lens,\n specularDark: !isDark,\n };\n }, [isDark, isSafari, lens]);\n\n // Pointer drag tracking\n const trackRef = useRef<HTMLDivElement | null>(null);\n const pointerIdRef = useRef<number | null>(null);\n const startClientXRef = useRef(0);\n const startThumbXRef = useRef(0);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n return (\n <div\n ref={wrapperRef}\n style={{\n display: \"inline-block\",\n position: \"relative\",\n flexShrink: 0,\n width: R,\n height: E,\n overflow: \"visible\",\n userSelect: \"none\",\n }}\n >\n <Lens\n lens={activeLensParams}\n x={normalizedLensX}\n y={0.5}\n lensW={dynamicLensW}\n lensH={dynamicLensH}\n borderRadius={lensRadius}\n tintColor=\"white\"\n tintOpacity={tintOpacityVal}\n tintBlur={tintBlurVal}\n shadowOpacity={shadowOpacityVal}\n restShadowOpacity={restShadowOpacityVal}\n filterResolution={filterResolution}\n onLensMapChange={onLensMapChange}\n style={{\n width: containerW,\n height: containerH,\n overflow: \"visible\",\n margin: -pad,\n }}\n refractionTarget={\n <div\n style={{\n padding: pad,\n height: E,\n display: \"flex\",\n alignItems: \"center\",\n boxSizing: \"content-box\",\n }}\n >\n <motion.div\n style={{\n position: \"relative\",\n width: R,\n height: er,\n borderRadius: er / 2,\n overflow: \"hidden\",\n scaleX: trackScaleX,\n scaleY: trackScaleY,\n }}\n >\n {/* Target Background */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"var(--bg-4, #27272a)\",\n }}\n />\n {/* Target Fill Progress Bar */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"var(--primary, #38bdf8)\",\n borderRadius: \"inherit\",\n transform:\n \"translateX(calc((var(--slider-progress, 0) - 1) * 100%))\",\n }}\n />\n </motion.div>\n </div>\n }\n >\n {/* Real Rendered Track DOM */}\n <div style={{ padding: pad }}>\n {/* Accessible Hidden Native Range Input */}\n <input\n ref={inputRef}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n disabled={disabled}\n name={name}\n aria-label={ariaLabel}\n onChange={(e) => updateValue(Number(e.target.value))}\n style={{\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n />\n\n <div\n ref={trackRef}\n aria-hidden=\"true\"\n style={{\n position: \"relative\",\n width: R,\n height: E,\n display: \"flex\",\n alignItems: \"center\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n }}\n onPointerDown={(e) => {\n if (disabled || pointerIdRef.current !== null) return;\n pointerIdRef.current = e.pointerId;\n e.currentTarget.setPointerCapture(e.pointerId);\n isDraggingRef.current = true;\n inputRef.current?.focus({ preventScroll: true });\n\n const rect = trackRef.current?.getBoundingClientRect();\n const clickPos = rect ? e.clientX - rect.left - Y / 2 : 0;\n const clamped = Math.max(0, Math.min(travelRef.current, clickPos));\n\n thumbX.set(clamped);\n updateValue(posToValue(clamped));\n\n startClientXRef.current = e.clientX;\n startThumbXRef.current = clamped;\n animatePress(PRESS_ANIM);\n squishHoldRef.current = 0.175;\n squishTriggerRef.current();\n }}\n onPointerMove={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n const delta = e.clientX - startClientXRef.current;\n let nextX = startThumbXRef.current + delta;\n\n if (nextX < 0) {\n nextX = -rubberBand(-nextX, overshootRef.current, dampeningRef.current);\n } else if (nextX > travelRef.current) {\n nextX =\n travelRef.current +\n rubberBand(\n nextX - travelRef.current,\n overshootRef.current,\n dampeningRef.current\n );\n }\n\n thumbX.set(nextX);\n updateValue(posToValue(Math.max(0, Math.min(travelRef.current, nextX))));\n }}\n onPointerUp={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n pointerIdRef.current = null;\n isDraggingRef.current = false;\n squishHoldRef.current = 0;\n\n const finalPos = Math.max(0, Math.min(travelRef.current, thumbX.get()));\n animate(thumbX, finalPos, RELEASE_ANIM);\n animateRelease(RELEASE_ANIM);\n }}\n onPointerCancel={(e) => {\n if (e.pointerId !== pointerIdRef.current) return;\n pointerIdRef.current = null;\n isDraggingRef.current = false;\n squishHoldRef.current = 0;\n\n const finalPos = Math.max(0, Math.min(travelRef.current, thumbX.get()));\n animate(thumbX, finalPos, RELEASE_ANIM);\n animateRelease(RELEASE_ANIM);\n }}\n onDragStart={(e) => e.preventDefault()}\n >\n {/* Background Track Line */}\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n height: k,\n borderRadius: J,\n background: \"var(--bg-4, #27272a)\",\n overflow: \"hidden\",\n }}\n >\n {/* Filled Track Segment */}\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: \"var(--slider-fill)\",\n background: \"var(--primary, #38bdf8)\",\n borderRadius: J,\n }}\n />\n </div>\n\n {/* Thumb Hit Area */}\n <motion.div\n style={{\n position: \"absolute\",\n x: thumbX,\n width: Y,\n height: E,\n top: 0,\n left: 0,\n pointerEvents: \"none\",\n }}\n />\n </div>\n </div>\n </Lens>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { animate, motion, useMotionValue } from \"framer-motion\";\nimport { Lens } from \"../primitives/Lens\";\nimport { LensParams } from \"../engine/types\";\n\nexport interface ToggleOption {\n id: string;\n label: string;\n icon?: React.ReactNode;\n activeColor1?: string;\n activeColor2?: string;\n}\n\nexport interface GlassToggleGroupProps {\n options: ToggleOption[];\n value?: string;\n defaultValue?: string;\n onValueChange?: (val: string) => void;\n lens?: Partial<LensParams>;\n theme?: \"light\" | \"dark\";\n className?: string;\n}\n\nconst DEFAULT_TOGGLE_LENS: Partial<LensParams> = {\n lensW: 90,\n lensH: 36,\n borderRadius: 18,\n mapSize: 256,\n depth: 2,\n chromaAmount: 0.5,\n scaleX: 0.12,\n scaleY: 0.12,\n sdfBoundary: true,\n edgeFalloff: true,\n domeDepth: 4,\n splayAmount: 0.4,\n blurAmount: 0,\n brightness: 0.08,\n specularStrength: 1.2,\n specularRotation: 45,\n glowStrength: 0.3,\n glowSpread: 0.5,\n glowExponent: 1.5,\n edgeStrength: 0.4,\n edgeWidth: 2,\n edgeExponent: 1.5,\n edgeShadow: \"0 2px 8px rgba(0, 0, 0, 0.2)\",\n edgeInsetShadow: \"0 -2px 6px rgba(0, 0, 0, 0.15)\",\n};\n\nconst SPRING_TRANSITION = {\n type: \"spring\" as const,\n stiffness: 300,\n damping: 28,\n};\n\nexport function GlassToggleGroup({\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n lens,\n theme = \"dark\",\n className,\n}: GlassToggleGroupProps) {\n const isDark = theme === \"dark\";\n const [internalValue, setInternalValue] = useState(\n defaultValue ?? (options.length > 0 ? options[0].id : \"\")\n );\n const selectedId = controlledValue !== undefined ? controlledValue : internalValue;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const itemRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n\n const lensX = useMotionValue(0.1);\n const lensWidth = useMotionValue(90);\n const lensHeight = useMotionValue(36);\n const lensRadius = useMotionValue(18);\n\n const updateSelection = (id: string) => {\n if (controlledValue === undefined) {\n setInternalValue(id);\n }\n onValueChange?.(id);\n };\n\n // Measure and spring to selected element\n useEffect(() => {\n const el = itemRefs.current.get(selectedId);\n const parent = containerRef.current;\n if (!el || !parent) return;\n\n const parentRect = parent.getBoundingClientRect();\n const itemRect = el.getBoundingClientRect();\n\n if (parentRect.width > 0 && parentRect.height > 0) {\n const centerX = (itemRect.left - parentRect.left + itemRect.width / 2) / parentRect.width;\n animate(lensX, centerX, SPRING_TRANSITION);\n animate(lensWidth, itemRect.width + 12, SPRING_TRANSITION);\n animate(lensHeight, itemRect.height + 6, SPRING_TRANSITION);\n animate(lensRadius, (itemRect.height + 6) / 2, SPRING_TRANSITION);\n }\n }, [selectedId, lensX, lensWidth, lensHeight, lensRadius]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n display: \"inline-block\",\n position: \"relative\",\n padding: \"4px\",\n borderRadius: \"22px\",\n background: \"var(--bg-2, #18181b)\",\n border: \"1px solid var(--border-1, rgba(255, 255, 255, 0.08))\",\n }}\n >\n <Lens\n lens={{ ...DEFAULT_TOGGLE_LENS, ...lens, specularDark: !isDark }}\n x={lensX}\n y={0.5}\n lensW={lensWidth}\n lensH={lensHeight}\n borderRadius={lensRadius}\n refractionTarget={\n /* Refraction Target Layer: glowing colored pill under the selected option */\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n padding: \"4px\",\n }}\n >\n {options.map((opt) => {\n const isSelected = opt.id === selectedId;\n const color1 = opt.activeColor1 ?? \"#38bdf8\";\n const color2 = opt.activeColor2 ?? \"#0284c7\";\n return (\n <div\n key={opt.id}\n style={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"6px\",\n padding: \"8px 16px\",\n opacity: isSelected ? 1 : 0,\n transition: \"opacity 0.2s\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n borderRadius: \"16px\",\n background: `linear-gradient(135deg, ${color1}, ${color2})`,\n boxShadow: `0 0 16px ${color1}44`,\n }}\n />\n </div>\n );\n })}\n </div>\n }\n >\n {/* Real Rendered Button List */}\n <div\n role=\"group\"\n style={{\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n {options.map((opt) => {\n const isSelected = opt.id === selectedId;\n return (\n <button\n key={opt.id}\n ref={(node) => {\n if (node) itemRefs.current.set(opt.id, node);\n else itemRefs.current.delete(opt.id);\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n onClick={() => updateSelection(opt.id)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n padding: \"8px 16px\",\n border: \"none\",\n background: \"transparent\",\n color: isSelected\n ? \"var(--fg-1, #fff)\"\n : \"var(--fg-4, rgba(255, 255, 255, 0.5))\",\n fontSize: \"13px\",\n fontWeight: 500,\n cursor: \"pointer\",\n borderRadius: \"16px\",\n outline: \"none\",\n transition: \"color 0.2s\",\n }}\n >\n {opt.icon && <span style={{ display: \"inline-flex\" }}>{opt.icon}</span>}\n <span>{opt.label}</span>\n </button>\n );\n })}\n </div>\n </Lens>\n </div>\n );\n}\n"]}
|