@razorpay/blade 12.92.0 → 12.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/assets/spark/bottom-frame.jpg +0 -0
  2. package/assets/spark/colorama-center-gradient-map.jpg +0 -0
  3. package/assets/spark/colorama-gradient-map-blue.jpg +0 -0
  4. package/assets/spark/colorama-gradient-map-green.jpg +0 -0
  5. package/assets/spark/ray-pulse.mp4 +0 -0
  6. package/assets/spark/spark-base-video.mp4 +0 -0
  7. package/assets/spark/success-animation-circle.mp4 +0 -0
  8. package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradient.js +9 -0
  9. package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradient.js.map +1 -0
  10. package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradientMount.js +18 -0
  11. package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradientMount.js.map +1 -0
  12. package/build/lib/native/components/Spark/RazorSenseGradient/shader.js +69 -0
  13. package/build/lib/native/components/Spark/RazorSenseGradient/shader.js.map +1 -0
  14. package/build/lib/native/components/Spark/RazorSenseGradient/useFluidGradient.js +7 -0
  15. package/build/lib/native/components/Spark/RazorSenseGradient/useFluidGradient.js.map +1 -0
  16. package/build/lib/native/components/Spark/RzpGlass/PerformanceManager.js +7 -0
  17. package/build/lib/native/components/Spark/RzpGlass/PerformanceManager.js.map +1 -0
  18. package/build/lib/native/components/Spark/RzpGlass/RzpGlass.js +13 -0
  19. package/build/lib/native/components/Spark/RzpGlass/RzpGlass.js.map +1 -0
  20. package/build/lib/native/components/Spark/RzpGlass/RzpGlassMount.js +28 -0
  21. package/build/lib/native/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -0
  22. package/build/lib/native/components/Spark/RzpGlass/presets.js +4 -0
  23. package/build/lib/native/components/Spark/RzpGlass/presets.js.map +1 -0
  24. package/build/lib/native/components/Spark/RzpGlass/rzpGlassShader.js +920 -0
  25. package/build/lib/native/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -0
  26. package/build/lib/native/components/Spark/RzpGlass/utils.js +4 -0
  27. package/build/lib/native/components/Spark/RzpGlass/utils.js.map +1 -0
  28. package/build/lib/native/components/Spark/RzpGlass/webgl-utils.js +7 -0
  29. package/build/lib/native/components/Spark/RzpGlass/webgl-utils.js.map +1 -0
  30. package/build/lib/native/components/index.js +2 -0
  31. package/build/lib/native/components/index.js.map +1 -1
  32. package/build/lib/web/development/_virtual/flatten.js +1 -1
  33. package/build/lib/web/development/_virtual/flatten3.js +1 -1
  34. package/build/lib/web/development/components/Dropdown/FilterChipSelectInput.web.js +23 -15
  35. package/build/lib/web/development/components/Dropdown/FilterChipSelectInput.web.js.map +1 -1
  36. package/build/lib/web/development/components/SideNav/SideNav.web.js +21 -21
  37. package/build/lib/web/development/components/SideNav/SideNav.web.js.map +1 -1
  38. package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js +4 -4
  39. package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
  40. package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradient.js +92 -0
  41. package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradient.js.map +1 -0
  42. package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradientMount.js +110 -0
  43. package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradientMount.js.map +1 -0
  44. package/build/lib/web/development/components/Spark/RazorSenseGradient/index.js +2 -0
  45. package/build/lib/web/development/components/Spark/RazorSenseGradient/index.js.map +1 -0
  46. package/build/lib/web/development/components/Spark/RazorSenseGradient/shader.js +18 -0
  47. package/build/lib/web/development/components/Spark/RazorSenseGradient/shader.js.map +1 -0
  48. package/build/lib/web/development/components/Spark/RazorSenseGradient/useFluidGradient.js +34 -0
  49. package/build/lib/web/development/components/Spark/RazorSenseGradient/useFluidGradient.js.map +1 -0
  50. package/build/lib/web/development/components/Spark/RzpGlass/PerformanceManager.js +455 -0
  51. package/build/lib/web/development/components/Spark/RzpGlass/PerformanceManager.js.map +1 -0
  52. package/build/lib/web/development/components/Spark/RzpGlass/RzpGlass.js +263 -0
  53. package/build/lib/web/development/components/Spark/RzpGlass/RzpGlass.js.map +1 -0
  54. package/build/lib/web/development/components/Spark/RzpGlass/RzpGlassMount.js +908 -0
  55. package/build/lib/web/development/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -0
  56. package/build/lib/web/development/components/Spark/RzpGlass/index.js +24 -0
  57. package/build/lib/web/development/components/Spark/RzpGlass/index.js.map +1 -0
  58. package/build/lib/web/development/components/Spark/RzpGlass/presets.js +151 -0
  59. package/build/lib/web/development/components/Spark/RzpGlass/presets.js.map +1 -0
  60. package/build/lib/web/development/components/Spark/RzpGlass/rzpGlassShader.js +5 -0
  61. package/build/lib/web/development/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -0
  62. package/build/lib/web/development/components/Spark/RzpGlass/utils.js +77 -0
  63. package/build/lib/web/development/components/Spark/RzpGlass/utils.js.map +1 -0
  64. package/build/lib/web/development/components/Spark/RzpGlass/webgl-utils.js +200 -0
  65. package/build/lib/web/development/components/Spark/RzpGlass/webgl-utils.js.map +1 -0
  66. package/build/lib/web/development/components/Spark/index.js +3 -0
  67. package/build/lib/web/development/components/Spark/index.js.map +1 -0
  68. package/build/lib/web/development/components/index.js +3 -0
  69. package/build/lib/web/development/components/index.js.map +1 -1
  70. package/build/lib/web/development/node_modules/es-toolkit/dist/array/flatten.js +1 -1
  71. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/array/flatten.js +1 -1
  72. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/array/sortBy.js +2 -2
  73. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/object/omit.js +2 -2
  74. package/build/lib/web/production/components/Dropdown/FilterChipSelectInput.web.js +23 -15
  75. package/build/lib/web/production/components/Dropdown/FilterChipSelectInput.web.js.map +1 -1
  76. package/build/lib/web/production/components/SideNav/SideNav.web.js +21 -21
  77. package/build/lib/web/production/components/SideNav/SideNav.web.js.map +1 -1
  78. package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js +4 -4
  79. package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
  80. package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradient.js +92 -0
  81. package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradient.js.map +1 -0
  82. package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradientMount.js +110 -0
  83. package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradientMount.js.map +1 -0
  84. package/build/lib/web/production/components/Spark/RazorSenseGradient/index.js +2 -0
  85. package/build/lib/web/production/components/Spark/RazorSenseGradient/index.js.map +1 -0
  86. package/build/lib/web/production/components/Spark/RazorSenseGradient/shader.js +18 -0
  87. package/build/lib/web/production/components/Spark/RazorSenseGradient/shader.js.map +1 -0
  88. package/build/lib/web/production/components/Spark/RazorSenseGradient/useFluidGradient.js +34 -0
  89. package/build/lib/web/production/components/Spark/RazorSenseGradient/useFluidGradient.js.map +1 -0
  90. package/build/lib/web/production/components/Spark/RzpGlass/PerformanceManager.js +455 -0
  91. package/build/lib/web/production/components/Spark/RzpGlass/PerformanceManager.js.map +1 -0
  92. package/build/lib/web/production/components/Spark/RzpGlass/RzpGlass.js +263 -0
  93. package/build/lib/web/production/components/Spark/RzpGlass/RzpGlass.js.map +1 -0
  94. package/build/lib/web/production/components/Spark/RzpGlass/RzpGlassMount.js +908 -0
  95. package/build/lib/web/production/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -0
  96. package/build/lib/web/production/components/Spark/RzpGlass/index.js +24 -0
  97. package/build/lib/web/production/components/Spark/RzpGlass/index.js.map +1 -0
  98. package/build/lib/web/production/components/Spark/RzpGlass/presets.js +151 -0
  99. package/build/lib/web/production/components/Spark/RzpGlass/presets.js.map +1 -0
  100. package/build/lib/web/production/components/Spark/RzpGlass/rzpGlassShader.js +5 -0
  101. package/build/lib/web/production/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -0
  102. package/build/lib/web/production/components/Spark/RzpGlass/utils.js +77 -0
  103. package/build/lib/web/production/components/Spark/RzpGlass/utils.js.map +1 -0
  104. package/build/lib/web/production/components/Spark/RzpGlass/webgl-utils.js +200 -0
  105. package/build/lib/web/production/components/Spark/RzpGlass/webgl-utils.js.map +1 -0
  106. package/build/lib/web/production/components/Spark/index.js +3 -0
  107. package/build/lib/web/production/components/Spark/index.js.map +1 -0
  108. package/build/lib/web/production/components/index.js +3 -0
  109. package/build/lib/web/production/components/index.js.map +1 -1
  110. package/build/types/components/index.d.ts +297 -1
  111. package/build/types/components/index.native.d.ts +297 -1
  112. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rzpGlassShader.js","sources":["../../../../../../src/components/Spark/RzpGlass/rzpGlassShader.ts"],"sourcesContent":["const rzpGlassVertexShader = /* glsl */ `\nprecision mediump float;\n\nattribute vec2 position;\nattribute vec2 uv;\n\n// Zoom & Pan uniforms (computed in vertex shader for efficiency)\nuniform float uZoom;\nuniform vec2 uPan; // vec2(uPanX, uPanY)\n\n// Output varyings\nvarying vec2 vUv; // Raw screen UV (for screen-space effects like feathering)\nvarying vec2 vContentUv; // Transformed UV for video/content sampling (zoom + pan applied)\n\nvoid main() {\n // Raw screen UV for screen-space effects\n vUv = uv;\n \n // Compute zoomed/panned UV for content sampling\n // Zoom: scale around center (0.5, 0.5)\n // Pan: offset the view\n vContentUv = (uv - 0.5) / uZoom + 0.5;\n vContentUv += uPan;\n \n gl_Position = vec4(position, 0, 1);\n}\n`;\n\nconst rzpGlassFragmentShader = /* glsl */ `\nprecision mediump float;\n\nuniform float uTime;\nuniform vec2 iResolution;\nuniform float uDpr;\nuniform sampler2D uVideoTexture;\nuniform sampler2D uGradientMap;\nuniform sampler2D uGradientMap2; // Second gradient map for cross-fade blending\nuniform sampler2D uCenterGradientMap; // Separate gradient map for center ellipse\n\n// Layer toggles (enable/disable actual effects)\nuniform float uEnableDisplacement;\nuniform float uEnableColorama;\nuniform float uEnableBloom;\nuniform float uEnableLightSweep;\n\n// ============================================\n// COLORAMA UNIFORMS (Adobe AE v5 Pipeline)\n// Pipeline: Scalar → Remap → Warp → Wrap → Lookup → Blend\n// ============================================\n\n// --- 1. INPUT PHASE (Scalar Index Generation) ---\nuniform float uInputMin; // Input range min (default 0.0)\nuniform float uInputMax; // Input range max (default 1.0)\n\n// --- 2. MODIFY PHASE (Index Space Warping) ---\nuniform float uModifyGamma; // Gamma curve: <1 = brights, >1 = darks (default 1.0)\nuniform float uPosterizeLevels; // 0 = off, >0 = number of discrete steps\nuniform float uCycleRepetitions; // Stretch/compress the index (default 1.0)\nuniform float uPhaseShift; // Static offset (default 0.0)\nuniform float uCycleSpeed; // Cycling animation speed (default 0.0)\n\n// --- 3. OUTPUT CYCLE (Wrap & Lookup) ---\nuniform float uWrapMode; // 0 = clamp, 1 = wrap/fract (default 1.0)\nuniform float uReverse; // 0 = normal, 1 = reverse gradient (default 0.0)\n\n// --- 4. COMPOSITE ---\nuniform float uBlendWithOriginal; // 0 = full effect, 1 = original (default 0.0)\nuniform float uGradientMapBlend; // 0 = uGradientMap, 1 = uGradientMap2 (default 0.0)\n\n// --- 5. LIGHT EFFECT ---\nuniform float uLightIntensity; // Strength of light sweep effect\nuniform float uFrameCount; // Current frame number\nuniform float uLightStartFrame; // Frame when light effect starts\n\n// --- 6. DISPLACEMENT ---\nuniform float uNumSegments; // Number of glass slits (default 45.0)\nuniform float uSlitAngle; // Angle of slits in radians (default 0.13)\nuniform float uDisplacementX; // X displacement amount (default -12.0)\nuniform float uDisplacementY; // Y displacement amount (default -20.0)\n\n// --- 7. CENTER ELEMENT ---\nuniform float uEnableCenterElement; // Toggle center element (0 = off, 1 = on)\nuniform float uCenterAnimDuration; // Duration of one animation cycle in seconds\nuniform float uCenterAnimTime; // Current animation time in seconds (resets with video loop)\n\n// --- 8. COLOR CORRECTION ---\nuniform float uCCBlackPoint; // Levels black point (default 0.0)\nuniform float uCCWhitePoint; // Levels white point (default 1.0)\nuniform float uCCMidtoneGamma; // Midtone gamma (default 1.2)\nuniform float uCCGamma; // Output gamma (default 1.2)\nuniform float uCCContrast; // Contrast boost (default 0.0)\n\n// --- 9. ZOOM & PAN ---\nuniform float uZoom; // Zoom level (1.0 = normal, 2.0 = 2x zoom) - still needed for edge feather check\nuniform vec4 uEdgeFeather; // Per-side feathering: vec4(top, right, bottom, left) clockwise, 0 = none, 1 = max\nuniform vec2 uRefResolution; // Reference resolution for zoom-independent displacement\nuniform vec4 uVisibleUvBounds; // vec4(minX, minY, maxX, maxY) - visible portion of canvas in container\n\n// --- 10. BACKGROUND COLOR ---\nuniform vec3 uBackgroundColor; // Background color to blend with (RGB 0-1)\n\n// UV coordinates from the vertex shader\nvarying vec2 vUv; // Raw screen UV (for screen-space effects)\nvarying vec2 vContentUv; // Transformed UV with zoom/pan applied (for content sampling)\n\n// ============================================\n// UTILITY FUNCTIONS\n// ============================================\n// Rec. 709 luminance calculation\nfloat luminance(vec3 color) {\n return dot(color, vec3(0.2126, 0.7152, 0.0722));\n}\n\n// ============================================\n// COLORAMA EFFECT (Adobe After Effects v5 Pipeline)\n// ============================================\n//\n// Pipeline:\n// Image → Scalar Field (0-1) → Warp/Animate → Gradient Lookup → Composite\n//\n// This matches AE's indexed gradient remapping with time-domain cycling.\nvec3 applyColoramaWithGradient(\n sampler2D gradientMap, // Gradient map texture to sample from\n float rawIntensity, // Raw luminance from pixel\n float inputMin, // Input range min\n float inputMax, // Input range max\n float gamma, // Gamma curve (pow)\n float posterizeLevels, // 0 = off, else discrete steps\n float cycleReps, // Cycle repetitions (stretch)\n float phaseShift, // Static offset\n float cycleSpeed, // Time-based cycling\n float wrapMode, // 0 = clamp, 1 = wrap\n float reverse // 0 = normal, 1 = flip\n) {\n // ─────────────────────────────────────────────\n // STEP 1: INPUT PHASE - Scalar Index Generation\n // ─────────────────────────────────────────────\n // Normalize intensity to input range\n float t = clamp((rawIntensity - inputMin) / (inputMax - inputMin), 0.0, 1.0);\n\n // ─────────────────────────────────────────────\n // STEP 2: MODIFY PHASE - Index Space Warping\n // ─────────────────────────────────────────────\n\n // a) Gamma / Curves - reshape the intensity distribution\n t = pow(t, gamma);\n\n // b) Posterize - quantize to discrete levels (branchless)\n // When posterizeLevels <= 0, keeps t unchanged\n float posterized = floor(t * posterizeLevels + 0.0001) / max(posterizeLevels, 0.0001);\n t = mix(t, posterized, step(0.001, posterizeLevels));\n\n // c) Cycle Repetitions - stretch/compress across gradient\n t = t * cycleReps;\n\n // d) Phase Shift - static offset\n t = t + phaseShift;\n\n // e) Cycling Animation - time-based offset\n t = t + cycleSpeed * uTime;\n\n // ─────────────────────────────────────────────\n // STEP 3: OUTPUT CYCLE - Wrap & Lookup (branchless)\n // ─────────────────────────────────────────────\n\n // Wrap (fract) vs Clamp - branchless selection\n t = mix(clamp(t, 0.0, 1.0), fract(t), step(0.5, wrapMode));\n\n // Reverse direction - branchless\n t = mix(t, 1.0 - t, step(0.5, reverse));\n\n // Gradient lookup (1D texture sample)\n return texture2D(gradientMap, vec2(t, 0.5)).rgb;\n}\n\n// ============================================\n// DISPLACEMENT FUNCTIONS\n// ============================================\n// Create striped displacement map for glass refraction effect\n// Returns: x = signed displacement (-1 to 1), y = local UV x position within segment\n// gradientStart: gradient value at left edge (typically 1.0 for white)\n// gradientEnd: gradient value at right edge (typically 0.0 for black)\n// gradientPower: power curve for falloff (1.0 = linear, <1.0 = steeper, >1.0 = gentler)\n// centerPoint: center value for signed conversion (typically 0.5)\n// aspect: screen aspect ratio (width/height) for consistent slit angle\nvec2 createStripedDisplacement(\n vec2 uv,\n float numSegments,\n float angle,\n float gradientStart,\n float gradientEnd,\n float gradientPower,\n float centerPoint,\n float aspect\n) {\n // Work in aspect-corrected UV space where x and y have equal visual scale\n // This ensures consistent slit angle regardless of viewport dimensions\n vec2 aspectUV = uv * vec2(aspect, 1.0);\n \n // Apply slant in aspect-corrected space\n float slantedX = aspectUV.x - aspectUV.y * tan(angle);\n\n // Calculate segment properties (account for aspect-scaled x range)\n float segmentWidth = aspect / numSegments;\n float localUVx = fract(slantedX / segmentWidth); // 0-1 within each segment\n\n // Create the displacement map gradient\n // Use smoothstep for smoother interpolation\n float smoothUVx = smoothstep(0.0, 1.0, localUVx);\n // Interpolate from gradientEnd (left) to gradientStart (right)\n float rawGradient = mix(gradientEnd, gradientStart, smoothUVx);\n\n // Apply power curve for falloff control\n rawGradient = pow(rawGradient, gradientPower);\n\n // Convert to signed displacement (-1 to 1) using centerPoint\n // centerPoint is the neutral value (typically 0.5)\n float signedDisplacement = (rawGradient - centerPoint) / centerPoint;\n\n return vec2(signedDisplacement, localUVx);\n}\n\n// Apply displacement offset to UV coordinates\nvec2 applyDisplacement(vec2 uv, float signedDisplacement, vec2 maxDisplacement, vec2 resolution) {\n vec2 displaceOffset = vec2(\n signedDisplacement * maxDisplacement.x / resolution.x,\n signedDisplacement * maxDisplacement.y / resolution.y\n );\n return uv + displaceOffset;\n}\n\n// Create thin slanted stripes with multi-stop gradient color\n// Returns RGB color: gradient stripes with 3 color stops\n// Stop 1 (0%): colorStart, Stop 2 (stopPosition): colorMid, Stop 3 (100%): transparent\nvec4 createStripes(\n vec2 uv,\n float numSegments,\n float angle,\n float stopPosition, // Position of middle stop (0.0 to 1.0)\n vec4 colorStart, // Color at 0% (left edge)\n vec4 colorMid, // Color at stopPosition\n float aspect // Screen aspect ratio for consistent angle\n) {\n // Work in aspect-corrected UV space where x and y have equal visual scale\n vec2 aspectUV = uv * vec2(aspect, 1.0);\n \n // Apply slant in aspect-corrected space\n float slantedX = aspectUV.x - aspectUV.y * tan(angle);\n\n // Calculate segment properties (account for aspect-scaled x range)\n float segmentWidth = aspect / numSegments;\n float localUVx = 1.0 - fract(slantedX / segmentWidth); // 0-1 within each segment, reversed\n\n // Multi-stop gradient:\n // 0% -> colorStart (green)\n // stopPosition -> colorMid (white)\n // 100% -> transparent (black with 0 opacity)\n\n vec4 gradientColor;\n float opacity;\n\n if (localUVx < stopPosition) {\n float t = localUVx / stopPosition;\n gradientColor = mix(colorMid, colorStart, t);\n opacity = 0.5;\n } else {\n float t = (localUVx - stopPosition) / (1.0 - stopPosition);\n gradientColor = mix(vec4(0.0), colorMid, t);\n opacity = 0.5 - t * 0.5;\n }\n\n return gradientColor * opacity;\n}\n\n// Sample texture with displacement applied\nvec4 sampleWithDisplacement(\n sampler2D tex,\n vec2 uv,\n float signedDisplacement,\n vec2 maxDisplacement,\n vec2 resolution\n) {\n vec2 displacedUV = applyDisplacement(uv, signedDisplacement, maxDisplacement, resolution);\n return texture2D(tex, displacedUV);\n}\n\n// ============================================\n// POST-PROCESSING EFFECTS\n// ============================================\nvec3 applyBloom(vec3 color, float intensity, float innerMask) {\n const float whiteCoreThresholdMin = 0.5; // Start of white core mask\n const float whiteCoreThresholdMax = 0.85; // End of white core mask\n const float whiteCoreBlendStrength = 0.85; // How much to blend towards pure white\n\n const float bloomThresholdMin = 0.3; // Start of bloom glow\n const float bloomThresholdMax = 0.7; // End of bloom glow\n const vec3 bloomColor = vec3(1.0, 0.99, 0.97); // Warm white bloom tint\n const float bloomStrength = 0.10; // Intensity of bloom glow\n // -------------------------------\n\n // Calculate how much we're in the \"center\" bright area\n // Use a tighter threshold for the white core\n float whiteCoreMask = smoothstep(whiteCoreThresholdMin, whiteCoreThresholdMax, intensity) * innerMask;\n\n // Pure white target\n vec3 pureWhite = vec3(1.0);\n\n // Blend the center towards pure white (not additive, but replacement blend)\n // This ensures the very center goes to white, not gray\n color = mix(color, pureWhite, whiteCoreMask * whiteCoreBlendStrength);\n\n // Additional soft bloom glow around the white core\n float bloomBase = smoothstep(bloomThresholdMin, bloomThresholdMax, intensity);\n float bloomAmount = bloomBase * innerMask;\n color += bloomColor * bloomAmount * bloomStrength;\n\n return color;\n}\n\n// ============================================\n// ANIMATED POLYGON SHAPE\n// ============================================\n// Struct to return shape data\nstruct ShapeData {\n float shape; // The shape value (0 = outside, 1 = center)\n float gradient; // Gradient from gray (edge) to white (center)\n};\n\n// Signed distance function for a regular polygon\n// p: point to test, r: radius, n: number of sides\nfloat sdPolygon(vec2 p, float r, float n) {\n // Angle and radius\n float an = 3.141593 / n;\n vec2 acs = vec2(cos(an), sin(an));\n\n // Reduce to first sector\n float bn = mod(atan(p.x, p.y), 2.0 * an) - an;\n p = length(p) * vec2(cos(bn), abs(sin(bn)));\n\n // Line sdf\n p -= r * acs;\n p.y += clamp(-p.y, 0.0, r * acs.y);\n\n return length(p) * sign(p.x);\n}\n\n// Fast signed distance function for an ellipse\n// Approximation that avoids expensive acos(), cube roots, and branching\n// Accurate enough for visual effects, ~5x faster than exact version\nfloat sdEllipse(vec2 p, vec2 ab) {\n // Normalize point by ellipse radii\n vec2 q = p / ab;\n float k1 = length(q);\n \n // Early out for points very close to center (avoid division issues)\n if (k1 < 0.0001) return -min(ab.x, ab.y);\n \n // Gradient-based distance approximation\n vec2 q2 = q / ab; // Second normalization for gradient\n float k2 = length(q2);\n \n return k1 * (k1 - 1.0) / k2;\n}\n\n// Helper: Calculate a single shape instance at a given animation phase\nShapeData calculateSingleShape(\n vec2 uv,\n float linearT, // Animation phase 0-1\n float solidCoreMask,\n vec2 resolution,\n // Shape parameters\n float shapeType,\n float shapeWidth,\n float shapeHeight,\n float centerY,\n float animRange,\n float edgeSoftness,\n float grayLevel,\n float shapeAngleStart,\n float shapeAngleEnd,\n float shapeSize\n) {\n // Map 0-1 to position range (left to right)\n float posOffset = (linearT * 2.0 - 1.0) * animRange;\n float centerX = 0.5 + posOffset;\n\n // Animate rotation\n float animatedAngle = mix(shapeAngleStart, shapeAngleEnd, linearT);\n\n // Correct for aspect ratio\n float aspect = resolution.x / resolution.y;\n\n // Calculate position relative to center\n vec2 shapeCenter = vec2(centerX, centerY);\n vec2 delta = uv - shapeCenter;\n\n // Rotate delta by animated angle FIRST\n float cosA = cos(animatedAngle);\n float sinA = sin(animatedAngle);\n vec2 rotatedDelta = vec2(\n delta.x * cosA - delta.y * sinA,\n delta.x * sinA + delta.y * cosA\n );\n\n // Apply aspect correction AFTER rotation\n rotatedDelta.x *= aspect;\n\n // Calculate distance based on shape type\n float dist;\n if (shapeType < 0.5) {\n dist = sdEllipse(rotatedDelta, vec2(shapeWidth, shapeHeight));\n } else {\n vec2 scaledDelta = rotatedDelta / vec2(shapeWidth, shapeHeight);\n dist = sdPolygon(scaledDelta, shapeSize / min(shapeWidth, shapeHeight), shapeType);\n dist *= min(shapeWidth, shapeHeight);\n }\n\n // Normalize distance for gradient\n float normalizedDist;\n if (shapeType < 0.5) {\n normalizedDist = dist / max(shapeWidth, shapeHeight) + 1.0;\n } else {\n normalizedDist = (dist / shapeSize) + 1.0;\n }\n normalizedDist = clamp(normalizedDist, 0.0, 1.0);\n\n // Create soft shape mask\n float shapeMask = 1.0 - smoothstep(-edgeSoftness * 0.1, edgeSoftness * 0.05, dist);\n\n // Create gradient\n float gradient = mix(1.0, grayLevel, smoothstep(0.0, 1.0, normalizedDist));\n\n // Apply solid core mask\n shapeMask *= solidCoreMask;\n\n ShapeData result;\n result.shape = shapeMask;\n result.gradient = gradient;\n return result;\n}\n\n// Creates two staggered animated shapes that move left-to-right\n// When one reaches the far edge, another appears from the left\nShapeData calculateAnimatedShape(\n vec2 uv,\n float time, // Current animation time in seconds\n float solidCoreMask,\n vec2 resolution\n) {\n // --- Configurable parameters ---\n const float shapeType = 3.0; // 0 = ellipse, 3 = triangle, 4 = square, 5 = pentagon, etc.\n const float shapeWidth = 0.1; // Width/horizontal scale (wide)\n const float shapeHeight = 0.8; // Height/vertical scale (short)\n const float centerY = 0.4; // Vertical center position\n float cycleDuration = uCenterAnimDuration; // Seconds per animation cycle (from uniform)\n const float animRange = 0.7; // How far left/right it travels\n const float edgeSoftness = 0.5; // Softness of shape edge\n const float grayLevel = 0.5; // Gray color at shape edge\n const float shapeAngleStart = 0.6; // Rotation angle at start (slight tilt)\n const float shapeAngleEnd = 0.1; // Rotation angle at end (opposite tilt)\n const float shapeSize = 0.4; // Overall size for polygon mode\n const float staggerOffset = 0.4; // Offset between the two shapes (0.5 = half cycle apart)\n const float shape2Scale = 1.3; // Scale multiplier for 2nd shape (1.0 = same size)\n // -------------------------------\n\n // Time-based animation: time / cycleDuration gives progress through cycle\n float linearT1 = fract(time / cycleDuration); // Shape 1: 0->1 repeating\n float linearT2 = fract(time / cycleDuration + staggerOffset); // Shape 2: offset by staggerOffset\n\n // Calculate both shapes (shape 2 is slightly larger)\n ShapeData shape1 = calculateSingleShape(\n uv, linearT1, solidCoreMask, resolution,\n shapeType, shapeWidth, shapeHeight, centerY, animRange,\n edgeSoftness, grayLevel, shapeAngleStart, shapeAngleEnd, shapeSize\n );\n\n ShapeData shape2 = calculateSingleShape(\n uv, linearT2, solidCoreMask, resolution,\n shapeType, shapeWidth * shape2Scale, shapeHeight * shape2Scale, centerY, animRange,\n edgeSoftness, grayLevel, shapeAngleStart, shapeAngleEnd, shapeSize * shape2Scale\n );\n\n // Combine both shapes (take max of masks, blend gradients)\n ShapeData result;\n result.shape = max(shape1.shape, shape2.shape);\n // Weighted average of gradients based on shape masks\n float totalMask = shape1.shape + shape2.shape;\n if (totalMask > 0.001) {\n result.gradient = (shape1.gradient * shape1.shape + shape2.gradient * shape2.shape) / totalMask;\n } else {\n result.gradient = 0.5;\n }\n\n return result;\n}\n\n// Apply shape effect to intensity (for colorama/displacement pipeline)\nfloat applyShapeToIntensity(\n float baseIntensity,\n ShapeData shapeData,\n float effectStrength\n) {\n // Blend the shape gradient into the base intensity\n // This makes the shape area brighter/differently colored through colorama\n float shapeContribution = shapeData.gradient * shapeData.shape;\n return mix(baseIntensity, shapeContribution, shapeData.shape * effectStrength);\n}\n\n\n// AE-style color processing (levels, gamma, contrast). Used in both ripple and normal mode.\nvec3 applyColorCorrection(vec3 color) {\n color = (color - uCCBlackPoint) / (uCCWhitePoint - uCCBlackPoint);\n color = pow(max(color, vec3(0.0)), vec3(1.0 / (uCCMidtoneGamma * uCCGamma)));\n color = color * (1.0 + uCCContrast) - uCCContrast * 0.5;\n return clamp(color, 0.0, 1.0);\n}\n\n// Feather at container edges (visible bounds). Used in both ripple and normal mode.\nvec3 applyEdgeFeathering(vec3 color) {\n // Apply edge feathering when zoomed in\n // Feathering is applied at the container edges (visible bounds), not canvas edges\n // uEdgeFeather = vec4(top, right, bottom, left) — clockwise like CSS\n if (any(greaterThan(uEdgeFeather, vec4(0.0)))) {\n vec2 screenUV = vUv;\n\n // Get visible UV bounds (where container clips the canvas)\n float visMinX = uVisibleUvBounds.x;\n float visMinY = uVisibleUvBounds.y;\n float visMaxX = uVisibleUvBounds.z;\n float visMaxY = uVisibleUvBounds.w;\n\n // Calculate visible dimensions in UV space for aspect-correct feathering on X axis\n float visibleWidth = visMaxX - visMinX;\n float visibleHeight = visMaxY - visMinY;\n float visibleAspect = visibleWidth / visibleHeight;\n\n // Per-side feather amounts (X sides get aspect correction for pixel-equal width)\n float featherTop = uEdgeFeather.x * 0.15 / visibleAspect;\n float featherRight = uEdgeFeather.y * 0.15 / visibleAspect;\n float featherBottom = uEdgeFeather.z * 0.15 / visibleAspect;\n float featherLeft = uEdgeFeather.w * 0.15 / visibleAspect;\n\n // Apply feathering at container edges (visible bounds)\n float left = smoothstep(visMinX, visMinX + featherLeft, screenUV.x);\n float right = smoothstep(visMaxX, visMaxX - featherRight, screenUV.x);\n float bottom = smoothstep(visMinY, visMinY + featherBottom, screenUV.y);\n float top = smoothstep(visMaxY, visMaxY - featherTop, screenUV.y);\n\n float edgeMask = left * right * bottom * top;\n color = mix(vec3(1.0), color, edgeMask);\n }\n return color;\n}\n\nvoid main() {\n // ============================================\n // LAYER 1: Base glass effect (fine slits, whole image)\n // ============================================\n float numSegments = uNumSegments;\n float angle = uSlitAngle;\n const float blurRadius = 9.0;\n const float sigma = 4.0;\n\n // Calculate aspect ratio for consistent slit angles\n float aspect = iResolution.x / iResolution.y;\n\n // Displacement parameters (in pixels, scaled by DPR)\n // Scale displacement by reference resolution ratio to maintain consistency across browser zoom levels\n float resolutionScale = iResolution.x / uRefResolution.x;\n vec2 maxDisplacement = vec2(uDisplacementX, uDisplacementY) * uDpr * resolutionScale;\n\n // Use pre-computed UV from vertex shader (zoom + pan already applied)\n vec2 uv = vContentUv;\n\n // Base displacement (fine slits)\n // Use raw screen UV (vUv) so slit positions stay fixed on screen regardless of pan/zoom\n float gradientStart = 1.0;\n float gradientEnd = 0.0;\n float gradientPower = 1.0;\n float centerPoint = 0.5;\n vec2 displacementData = createStripedDisplacement(\n vUv,\n numSegments,\n angle,\n gradientStart,\n gradientEnd,\n gradientPower,\n centerPoint,\n aspect\n );\n float signedDisplacement = displacementData.x;\n float localUVx = displacementData.y;\n\n // ============================================\n // LAYER 2: Inner glass effect (larger slits, center only, STATIC)\n // ============================================\n // Inner segments are a divisor of outer segments for perfect alignment\n // 45 / 5 = 9 segments (5x larger slits that align with outer grid)\n float innerNumSegments = numSegments;\n float innerAngle = angle; // Same angle as outer\n\n // Inner slits are STATIC - use raw screen UV so slits stay fixed on screen\n vec2 innerDisplacementData = createStripedDisplacement(\n vUv,\n innerNumSegments,\n innerAngle,\n gradientStart,\n gradientEnd,\n gradientPower,\n centerPoint,\n aspect\n );\n float innerSignedDisplacement = innerDisplacementData.x;\n float innerLocalUVx = innerDisplacementData.y;\n\n // ============================================\n // COMPUTE SOLID CORE MASK EARLY (needed for light & displacement masking)\n // ============================================\n vec4 videoFrameSample = texture2D(uVideoTexture, uv);\n float maskIntensity = luminance(videoFrameSample.rgb);\n float solidCoreMask = smoothstep(0.4, 0.7, maskIntensity);\n\n // Store original displacement for shape refraction (before masking)\n float originalInnerDisplacement = innerSignedDisplacement;\n\n // Mask inner displacement by solidCoreMask - no inner displacement in center\n innerSignedDisplacement *= (1.0 - solidCoreMask);\n\n // Inner layer displacement uses same values (scaled by resolutionScale for zoom independence)\n vec2 innerMaxDisplacement = vec2(30.0, 0.0) * uDpr * resolutionScale;\n\n // ============================================\n // CENTER ELEMENT (Static Ellipse + Animated Shapes)\n // ============================================\n float staticEllipseMask = 0.0;\n float staticEllipseGradient = 0.0;\n ShapeData shapeData;\n shapeData.shape = 0.0;\n shapeData.gradient = 0.0;\n\n float centerFadeInDuration = 10.0;\n float centerFramesSinceStart = uFrameCount - uLightStartFrame;\n float centerEffectActivation = clamp(centerFramesSinceStart / centerFadeInDuration, 0.0, 1.0);\n\n if (uEnableCenterElement > 0.5) {\n // Calculate static ellipse mask\n {\n const float ellipseCenterX = 0.3;\n const float ellipseCenterY = -0.15;\n const float ellipseWidth = 0.5;\n const float ellipseHeight = 0.8;\n const float ellipseAngle = 0.3;\n const float ellipseSoftness = 1.0;\n const float ellipseGrayLevel = 0.5;\n\n float aspect = iResolution.x / iResolution.y;\n\n // Use RAW UV (no displacement) for the mask calculation\n vec2 delta = uv - vec2(ellipseCenterX, ellipseCenterY);\n\n // Rotate\n float cosA = cos(ellipseAngle);\n float sinA = sin(ellipseAngle);\n vec2 rotatedDelta = vec2(\n delta.x * cosA - delta.y * sinA,\n delta.x * sinA + delta.y * cosA\n );\n rotatedDelta.x *= aspect;\n\n // Calculate ellipse distance\n float ellipseDist = sdEllipse(rotatedDelta, vec2(ellipseWidth, ellipseHeight));\n\n // Soft shape mask\n staticEllipseMask = 1.0 - smoothstep(-ellipseSoftness * 0.1, ellipseSoftness * 0.05, ellipseDist);\n\n // Gradient\n float normalizedDist = ellipseDist / max(ellipseWidth, ellipseHeight) + 1.0;\n normalizedDist = clamp(normalizedDist, 0.0, 1.0);\n staticEllipseGradient = mix(1.0, ellipseGrayLevel, smoothstep(0.0, 1.0, normalizedDist));\n\n // Apply solid core mask\n staticEllipseMask *= solidCoreMask;\n }\n\n // Block displacement inside the static ellipse\n originalInnerDisplacement *= (1.0 - staticEllipseMask);\n innerSignedDisplacement *= (1.0 - staticEllipseMask);\n signedDisplacement *= (1.0 - staticEllipseMask);\n\n\n\n // Calculate displaced UV for shape - use inner displacement for the shape refraction\n vec2 shapeDisplacedUV = applyDisplacement(uv, originalInnerDisplacement, innerMaxDisplacement, iResolution);\n\n // Calculate animated shape using DISPLACED UVs so glass slits refract through it\n shapeData = calculateAnimatedShape(\n shapeDisplacedUV, // Use displaced UVs!\n uCenterAnimTime, // Time-based animation in seconds (resets with video loop)\n solidCoreMask,\n iResolution\n );\n\n // Combine static ellipse with animated shapes\n {\n float combinedShape = max(shapeData.shape, staticEllipseMask) * centerEffectActivation;\n float totalMask = shapeData.shape + staticEllipseMask;\n float combinedGradient = shapeData.gradient;\n if (totalMask > 0.001) {\n combinedGradient = (shapeData.gradient * shapeData.shape + staticEllipseGradient * staticEllipseMask) / totalMask;\n }\n shapeData.shape = combinedShape;\n shapeData.gradient = combinedGradient;\n }\n }\n\n // ============================================\n // INNER EFFECT ACTIVATION - starts after uLightStartFrame\n // ============================================\n float innerFadeInDuration = 10.0; // Slower fade-in for inner effect\n float innerFramesSinceStart = uFrameCount - uLightStartFrame;\n float innerEffectActivation = clamp(innerFramesSinceStart / innerFadeInDuration, 0.0, 1.0);\n\n // Create edge mask (solidCoreMask already computed earlier for light masking)\n float edgeMask = smoothstep(0.3, 0.6, maskIntensity); // Where shape starts\n\n // Blend outer and inner slits on the edges\n // Inner contribution is multiplied by activation (fades in after frame 200)\n float outerContribution = 1.0 - edgeMask * 0.5 * innerEffectActivation;\n float innerContribution = edgeMask * innerEffectActivation;\n\n // Combined displacement: inner effect fades in over time\n float combinedDisplacement = signedDisplacement * outerContribution +\n innerSignedDisplacement * innerContribution;\n\n // Blend max displacement smoothly\n vec2 combinedMaxDisplacement = maxDisplacement * outerContribution +\n innerMaxDisplacement * innerContribution;\n\n // For the CENTER area (solidCoreMask): use 100% inner (larger) slits displacement\n // For the EDGES: use the combined displacement (blended outer + inner)\n // This ensures the logo center always has the larger slits\n combinedDisplacement = mix(combinedDisplacement, originalInnerDisplacement, solidCoreMask);\n combinedMaxDisplacement = mix(combinedMaxDisplacement, innerMaxDisplacement, solidCoreMask);\n\n // ============================================\n // LAYER 1: DISPLACEMENT (toggleable)\n // ============================================\n vec4 textureSample;\n if (uEnableDisplacement > 0.5) {\n textureSample = sampleWithDisplacement(\n uVideoTexture, uv,\n combinedDisplacement, combinedMaxDisplacement,\n iResolution\n );\n } else {\n // No displacement - sample directly\n textureSample = texture2D(uVideoTexture, uv);\n }\n\n // Blend localUVx for highlights - also fades in with activation\n float combinedLocalUVx = localUVx * outerContribution + innerLocalUVx * innerContribution;\n localUVx = combinedLocalUVx;\n\n // Store innerMask for later use (bloom, etc.) - also tied to activation\n float innerMask = edgeMask * innerEffectActivation;\n\n // Get Phase From: Intensity (Rec. 709 luminance)\n float baseIntensity = luminance(textureSample.rgb);\n\n // Boost intensity in center areas to push them more towards white\n float centerWhiteBoost = 0.1;\n baseIntensity = baseIntensity + innerMask * centerWhiteBoost;\n baseIntensity = clamp(baseIntensity, 0.0, 1.0);\n\n // Keep base intensity for outer colorama (using uGradientMap)\n float outerIntensity = baseIntensity;\n\n // ============================================\n // CENTER GREEN STRIPES OVERLAY (before colorama)\n // ============================================\n float stripeFadeOutDuration = 10.0;\n float stripeFramesSinceStart = uFrameCount - uLightStartFrame;\n // Effect is active UNTIL uLightStartFrame, then fades out\n float stripeEffectActivation = 1.0 - clamp(stripeFramesSinceStart / stripeFadeOutDuration, 0.0, 1.0);\n\n // Animated vertical height mask - grows from 0 to full height\n // Height animation: starts at center (0.5) and expands outward\n float stripeHeightDelay = 15.0; // frames to wait before starting\n float stripeHeightGrowDuration = 80.0; // frames to reach full height\n float stripeHeightProgress = clamp((uFrameCount - stripeHeightDelay) / stripeHeightGrowDuration, 0.0, 1.0);\n // Ease the progress for smoother animation\n float easedHeightProgress = 1.0 - pow(1.0 - stripeHeightProgress, 2.0);\n \n // Calculate animated bounds - expand from center (0.5) outward\n float heightHalfSpan = 0.2 * easedHeightProgress; // 0.06 = half of the 0.12 total height (0.44 to 0.56)\n float softEdge = 0.1 * easedHeightProgress; // Soft edge also scales with progress\n float bottomEdge = 0.5 - heightHalfSpan - softEdge;\n float bottomFull = 0.5 - heightHalfSpan;\n float topFull = 0.5 + heightHalfSpan;\n float topEdge = 0.5 + heightHalfSpan + softEdge;\n \n // When progress is 0, force mask to 0 to avoid glitchy edge at y=0.5\n float stripeHeightMask = easedHeightProgress > 0.001 \n ? smoothstep(bottomEdge, bottomFull, uv.y) * smoothstep(topEdge, topFull, uv.y)\n : 0.0;\n\n vec4 centerGreenSlantedLines = createStripes(\n vUv + vec2(-0.0035, 0.0), // slight offset to avoid moiré\n numSegments,\n uSlitAngle,\n 0.15, // stopPosition (20%)\n vec4(20.0/255.0, 200.0/255.0, 20.0/255.0, 0.2), // colorStart (green at 0%)\n vec4(0.0, 0.0, 0.0, 0.0), // colorMid (white at 20%)\n aspect // aspect ratio for consistent angle\n ) * solidCoreMask * stripeHeightMask;\n\n // Overlay green stripes on center element area\n float stripeOverlayMask = solidCoreMask * stripeEffectActivation;\n // Modify baseIntensity/outerIntensity with stripes before colorama\n vec4 stripedTexture = vec4(textureSample.rgb, 1.0) - centerGreenSlantedLines*0.7 * stripeOverlayMask;\n stripedTexture = clamp(stripedTexture, 0.0, 1.0);\n\n // Update intensity for colorama input\n float stripedIntensity = luminance(stripedTexture.rgb);\n outerIntensity = mix(baseIntensity, stripedIntensity, stripeOverlayMask);\n\n // ============================================\n // LAYER 2: COLORAMA (toggleable)\n // ============================================\n vec3 color;\n if (uEnableColorama > 0.5) {\n // OUTER colorama: uses base intensity, cross-fades between uGradientMap and uGradientMap2\n vec3 outerColoramaResult1 = applyColoramaWithGradient(\n uGradientMap, outerIntensity,\n uInputMin, uInputMax, uModifyGamma, uPosterizeLevels,\n uCycleRepetitions, uPhaseShift, uCycleSpeed,\n uWrapMode, uReverse\n );\n vec3 outerColoramaResult2 = applyColoramaWithGradient(\n uGradientMap2, outerIntensity,\n uInputMin, uInputMax, uModifyGamma, uPosterizeLevels,\n uCycleRepetitions, uPhaseShift, uCycleSpeed,\n uWrapMode, uReverse\n );\n vec3 outerColoramaResult = mix(outerColoramaResult1, outerColoramaResult2, uGradientMapBlend);\n\n // Start with outer colorama as base\n vec3 blendedColorama = outerColoramaResult;\n\n // CENTER colorama: only compute when inside shape (skip texture sample otherwise)\n // This saves a texture lookup + specular pow() for ~90% of pixels\n if (shapeData.shape > 0.001) {\n vec3 centerColoramaResult = applyColoramaWithGradient(\n uCenterGradientMap, shapeData.gradient,\n uInputMin, uInputMax, uModifyGamma, uPosterizeLevels,\n uCycleRepetitions, uPhaseShift, uCycleSpeed,\n uWrapMode, uReverse\n );\n\n // Add specular highlight to center (shiny reflection effect)\n float specularPower = 8.0; // Higher = tighter/smaller highlight\n float specularIntensity = 1.9; // Brightness of the specular\n float specular = pow(shapeData.gradient, specularPower) * specularIntensity;\n centerColoramaResult += vec3(specular); // Add bright highlight\n\n // Blend between outer and center colorama based on shape\n blendedColorama = mix(outerColoramaResult, centerColoramaResult, shapeData.shape);\n }\n\n color = mix(blendedColorama, textureSample.rgb, uBlendWithOriginal);\n } else {\n color = textureSample.rgb;\n }\n\n // Store intensity for bloom (use the blended value)\n float intensity = mix(outerIntensity, shapeData.gradient, shapeData.shape);\n\n // ============================================\n // LAYER 3: BLOOM (toggleable)\n // ============================================\n if (uEnableBloom > 0.5) {\n color = applyBloom(color, intensity, innerMask);\n }\n\n // ============================================\n // LAYER 4: SHAPE HIGHLIGHT (toggleable via light sweep toggle)\n // ============================================\n if (uEnableLightSweep > 0.5) {\n float lightFadeInDuration = 30.0;\n float framesSinceStart = uFrameCount - uLightStartFrame;\n float lightActivation = clamp(framesSinceStart / lightFadeInDuration, 0.0, 1.0);\n\n // Add subtle brightness boost at shape center\n float shapeHighlight = pow(shapeData.gradient, 2.0) * shapeData.shape;\n color += vec3(1.0) * shapeHighlight * 0.15 * uLightIntensity * lightActivation;\n }\n\n // Color correction and edge feathering (shared with ripple mode)\n color = applyColorCorrection(color);\n color = applyEdgeFeathering(color);\n\n // Blend with background color if provided (uBackgroundColor.r < 0 means not set)\n if (uBackgroundColor.r >= 0.0) {\n // Calculate luminance to determine how bright the pixel is\n float brightness = luminance(color);\n \n // Blend white/bright areas with background color\n // Bright areas (close to white) become the background color\n float blendStart = 0.98; // Start blending at this brightness\n float blendEnd = 1.0; // Fully background color at this brightness\n float blendAmount = smoothstep(blendStart, blendEnd, brightness);\n \n // Mix the shader color with background color\n color = mix(color, uBackgroundColor, blendAmount);\n }\n\n gl_FragColor = vec4(color, 1.0);\n}\n`;\n\nexport { rzpGlassFragmentShader, rzpGlassVertexShader };\n"],"names":["rzpGlassVertexShader","rzpGlassFragmentShader"],"mappings":"AAAM,IAAAA,oBAAoB,CAAc,CAAA;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAEM,IAAAC,sBAAsB,CAAc,CAAA;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;"}
@@ -0,0 +1,4 @@
1
+ function loadImage(src){return new Promise(function(resolve,reject){var img=new Image();img.crossOrigin='anonymous';img.onload=function(){return resolve(img);};img.onerror=function(){return reject(new Error(`Failed to load image: ${src}`));};img.src=src;});}function loadVideo(src){return new Promise(function(resolve,reject){var video=document.createElement('video');video.src=src;video.crossOrigin='anonymous';video.loop=true;video.muted=true;video.playsInline=true;video.preload='auto';video.oncanplaythrough=function(){return resolve(video);};video.onerror=function(){return reject(new Error(`Failed to load video: ${src}`));};video.load();});}function isSafari(){var ua=navigator.userAgent.toLowerCase();return ua.includes('safari')&&!ua.includes('chrome')&&!ua.includes('android');}function bestGuessBrowserZoom(){var _visualViewport$scale,_visualViewport,_visualViewport$width,_visualViewport2;var viewportScale=(_visualViewport$scale=(_visualViewport=visualViewport)==null?void 0:_visualViewport.scale)!=null?_visualViewport$scale:1;var viewportWidth=(_visualViewport$width=(_visualViewport2=visualViewport)==null?void 0:_visualViewport2.width)!=null?_visualViewport$width:window.innerWidth;var scrollbarWidth=window.innerWidth-document.documentElement.clientWidth;var innerWidth=viewportScale*viewportWidth+scrollbarWidth;var ratio=outerWidth/innerWidth;var zoomPercentageRounded=Math.round(100*ratio);if(zoomPercentageRounded%5===0){return zoomPercentageRounded/100;}if(zoomPercentageRounded===33)return 1/3;if(zoomPercentageRounded===67)return 2/3;if(zoomPercentageRounded===133)return 4/3;return ratio;}
2
+
3
+ export { bestGuessBrowserZoom, isSafari, loadImage, loadVideo };
4
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../src/components/Spark/RzpGlass/utils.ts"],"sourcesContent":["/**\n * RzpGlass Utility Functions\n */\n\n/**\n * Load an image from URL\n */\nexport function loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => resolve(img);\n img.onerror = () => reject(new Error(`Failed to load image: ${src}`));\n img.src = src;\n });\n}\n\n/**\n * Load a video from URL\n */\nexport function loadVideo(src: string): Promise<HTMLVideoElement> {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n video.src = src;\n video.crossOrigin = 'anonymous';\n video.loop = true;\n video.muted = true;\n video.playsInline = true;\n video.preload = 'auto';\n video.oncanplaythrough = () => resolve(video);\n video.onerror = () => reject(new Error(`Failed to load video: ${src}`));\n video.load();\n });\n}\n\n/**\n * Check if browser is Safari\n */\nexport function isSafari(): boolean {\n const ua = navigator.userAgent.toLowerCase();\n return ua.includes('safari') && !ua.includes('chrome') && !ua.includes('android');\n}\n\n/**\n * Best guess browser zoom level (for Safari which doesn't include zoom in devicePixelRatio)\n */\nexport function bestGuessBrowserZoom(): number {\n const viewportScale = visualViewport?.scale ?? 1;\n const viewportWidth = visualViewport?.width ?? window.innerWidth;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n const innerWidth = viewportScale * viewportWidth + scrollbarWidth;\n\n const ratio = outerWidth / innerWidth;\n const zoomPercentageRounded = Math.round(100 * ratio);\n\n // Common zoom levels divisible by 5%\n if (zoomPercentageRounded % 5 === 0) {\n return zoomPercentageRounded / 100;\n }\n\n // Handle special zoom levels\n if (zoomPercentageRounded === 33) return 1 / 3;\n if (zoomPercentageRounded === 67) return 2 / 3;\n if (zoomPercentageRounded === 133) return 4 / 3;\n\n return ratio;\n}\n"],"names":["loadImage","src","Promise","resolve","reject","img","Image","crossOrigin","onload","onerror","Error","loadVideo","video","document","createElement","loop","muted","playsInline","preload","oncanplaythrough","load","isSafari","ua","navigator","userAgent","toLowerCase","includes","bestGuessBrowserZoom","_visualViewport$scale","_visualViewport","_visualViewport$width","_visualViewport2","viewportScale","visualViewport","scale","viewportWidth","width","window","innerWidth","scrollbarWidth","documentElement","clientWidth","ratio","outerWidth","zoomPercentageRounded","Math","round"],"mappings":"SAOgBA,SAASA,CAACC,GAAW,CAA6B,CAChE,OAAO,IAAIC,OAAO,CAAC,SAACC,OAAO,CAAEC,MAAM,CAAK,CACtC,IAAMC,GAAG,CAAG,IAAIC,KAAK,EAAE,CACvBD,GAAG,CAACE,WAAW,CAAG,WAAW,CAC7BF,GAAG,CAACG,MAAM,CAAG,kBAAML,OAAO,CAACE,GAAG,CAAC,CAC/BA,CAAAA,CAAAA,GAAG,CAACI,OAAO,CAAG,kBAAML,MAAM,CAAC,IAAIM,KAAK,CAAC,CAAA,sBAAA,EAAyBT,GAAG,CAAE,CAAA,CAAC,CAAC,CACrEI,CAAAA,CAAAA,GAAG,CAACJ,GAAG,CAAGA,GAAG,CACf,CAAC,CAAC,CACJ,CAKgB,SAAAU,SAASA,CAACV,GAAW,CAA6B,CAChE,WAAWC,OAAO,CAAC,SAACC,OAAO,CAAEC,MAAM,CAAK,CACtC,IAAMQ,KAAK,CAAGC,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC,CAC7CF,KAAK,CAACX,GAAG,CAAGA,GAAG,CACfW,KAAK,CAACL,WAAW,CAAG,WAAW,CAC/BK,KAAK,CAACG,IAAI,CAAG,IAAI,CACjBH,KAAK,CAACI,KAAK,CAAG,IAAI,CAClBJ,KAAK,CAACK,WAAW,CAAG,IAAI,CACxBL,KAAK,CAACM,OAAO,CAAG,MAAM,CACtBN,KAAK,CAACO,gBAAgB,CAAG,UAAM,CAAA,OAAAhB,OAAO,CAACS,KAAK,CAAC,CAC7CA,CAAAA,CAAAA,KAAK,CAACH,OAAO,CAAG,kBAAML,MAAM,CAAC,IAAIM,KAAK,CAAC,CAAA,sBAAA,EAAyBT,GAAG,CAAE,CAAA,CAAC,CAAC,CACvEW,CAAAA,CAAAA,KAAK,CAACQ,IAAI,EAAE,CACd,CAAC,CAAC,CACJ,CAKgB,SAAAC,QAAQA,EAAY,CAClC,IAAMC,EAAE,CAAGC,SAAS,CAACC,SAAS,CAACC,WAAW,EAAE,CAC5C,OAAOH,EAAE,CAACI,QAAQ,CAAC,QAAQ,CAAC,EAAI,CAACJ,EAAE,CAACI,QAAQ,CAAC,QAAQ,CAAC,EAAI,CAACJ,EAAE,CAACI,QAAQ,CAAC,SAAS,CAAC,CACnF,UAKgBC,oBAAoBA,EAAW,CAAA,IAAAC,qBAAA,CAAAC,eAAA,CAAAC,qBAAA,CAAAC,gBAAA,CAC7C,IAAMC,aAAa,EAAAJ,qBAAA,CAAA,CAAAC,eAAA,CAAGI,cAAc,eAAdJ,eAAA,CAAgBK,KAAK,GAAAN,IAAAA,CAAAA,qBAAA,CAAI,CAAC,CAChD,IAAMO,aAAa,EAAAL,qBAAA,CAAA,CAAAC,gBAAA,CAAGE,cAAc,eAAdF,gBAAA,CAAgBK,KAAK,GAAAN,IAAAA,CAAAA,qBAAA,CAAIO,MAAM,CAACC,UAAU,CAChE,IAAMC,cAAc,CAAGF,MAAM,CAACC,UAAU,CAAGzB,QAAQ,CAAC2B,eAAe,CAACC,WAAW,CAC/E,IAAMH,UAAU,CAAGN,aAAa,CAAGG,aAAa,CAAGI,cAAc,CAEjE,IAAMG,KAAK,CAAGC,UAAU,CAAGL,UAAU,CACrC,IAAMM,qBAAqB,CAAGC,IAAI,CAACC,KAAK,CAAC,GAAG,CAAGJ,KAAK,CAAC,CAGrD,GAAIE,qBAAqB,CAAG,CAAC,GAAK,CAAC,CAAE,CACnC,OAAOA,qBAAqB,CAAG,GAAG,CACpC,CAGA,GAAIA,qBAAqB,GAAK,EAAE,CAAE,OAAQ,CAAA,CAAG,CAAC,CAC9C,GAAIA,qBAAqB,GAAK,EAAE,CAAE,OAAO,CAAC,CAAG,CAAC,CAC9C,GAAIA,qBAAqB,GAAK,GAAG,CAAE,QAAQ,CAAG,CAAC,CAE/C,OAAOF,KAAK,CACd;;;;"}
@@ -0,0 +1,7 @@
1
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
+ import _createClass from '@babel/runtime/helpers/createClass';
3
+
4
+ var FULLSCREEN_QUAD_POSITIONS=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);var FULLSCREEN_QUAD_UVS=new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]);function createShader(gl,type,source){var shader=gl.createShader(type);if(!shader)return null;gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error('Shader compilation error:',gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null;}return shader;}function createProgram(gl,vertexSource,fragmentSource){var format=gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER,gl.MEDIUM_FLOAT);var precision=format?format.precision:null;if(precision&&precision<23){vertexSource=vertexSource.replace(/precision\s+(lowp|mediump)\s+float;/g,'precision highp float;');fragmentSource=fragmentSource.replace(/precision\s+(lowp|mediump)\s+float/g,'precision highp float').replace(/\b(uniform|varying|attribute)\s+(lowp|mediump)\s+(\w+)/g,'$1 highp $3');}var vertexShader=createShader(gl,gl.VERTEX_SHADER,vertexSource);var fragmentShader=createShader(gl,gl.FRAGMENT_SHADER,fragmentSource);if(!vertexShader||!fragmentShader)return null;var program=gl.createProgram();if(!program)return null;gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){console.error('Program linking error:',gl.getProgramInfoLog(program));gl.deleteProgram(program);gl.deleteShader(vertexShader);gl.deleteShader(fragmentShader);return null;}gl.detachShader(program,vertexShader);gl.detachShader(program,fragmentShader);gl.deleteShader(vertexShader);gl.deleteShader(fragmentShader);return program;}function setupFullscreenQuad(gl,program){var positionAttr=arguments.length>2&&arguments[2]!==undefined?arguments[2]:'position';var uvAttr=arguments.length>3&&arguments[3]!==undefined?arguments[3]:'uv';var positionLocation=gl.getAttribLocation(program,positionAttr);var positionBuffer=gl.createBuffer();if(!positionBuffer)return null;gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.bufferData(gl.ARRAY_BUFFER,FULLSCREEN_QUAD_POSITIONS,gl.STATIC_DRAW);gl.enableVertexAttribArray(positionLocation);gl.vertexAttribPointer(positionLocation,2,gl.FLOAT,false,0,0);var uvLocation=gl.getAttribLocation(program,uvAttr);var uvBuffer=gl.createBuffer();if(!uvBuffer)return null;gl.bindBuffer(gl.ARRAY_BUFFER,uvBuffer);gl.bufferData(gl.ARRAY_BUFFER,FULLSCREEN_QUAD_UVS,gl.STATIC_DRAW);gl.enableVertexAttribArray(uvLocation);gl.vertexAttribPointer(uvLocation,2,gl.FLOAT,false,0,0);return {positionBuffer:positionBuffer,uvBuffer:uvBuffer};}var Texture=function(){function Texture(gl){var _params$textureUnit,_params$minFilter,_params$magFilter,_params$wrapS,_params$wrapT,_params$flipY;var params=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,Texture);this.gl=gl;this.textureUnit=(_params$textureUnit=params.textureUnit)!=null?_params$textureUnit:0;this.minFilter=(_params$minFilter=params.minFilter)!=null?_params$minFilter:gl.NEAREST;this.magFilter=(_params$magFilter=params.magFilter)!=null?_params$magFilter:gl.NEAREST;this.wrapS=(_params$wrapS=params.wrapS)!=null?_params$wrapS:gl.CLAMP_TO_EDGE;this.wrapT=(_params$wrapT=params.wrapT)!=null?_params$wrapT:gl.CLAMP_TO_EDGE;this.flipY=(_params$flipY=params.flipY)!=null?_params$flipY:true;this.texture=gl.createTexture();this.bind();this.setParameters();}return _createClass(Texture,[{key:"bind",value:function bind(){var gl=this.gl;gl.activeTexture(gl.TEXTURE0+this.textureUnit);gl.bindTexture(gl.TEXTURE_2D,this.texture);}},{key:"setParameters",value:function setParameters(){var gl=this.gl;gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,this.minFilter);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,this.magFilter);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,this.wrapS);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,this.wrapT);}},{key:"image",value:function image(source){var gl=this.gl;if(!source)return;this.bind();if(this.flipY){gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,true);}gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,source);}},{key:"update",value:function update(source){this.image(source);}},{key:"destroy",value:function destroy(){this.gl.deleteTexture(this.texture);this.texture=null;}}]);}();
5
+
6
+ export { Texture, createProgram, createShader, setupFullscreenQuad };
7
+ //# sourceMappingURL=webgl-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl-utils.js","sources":["../../../../../../src/components/Spark/RzpGlass/webgl-utils.ts"],"sourcesContent":["/**\n * WebGL utility functions for shader compilation, program creation,\n * geometry setup, and texture handling.\n */\n\n// Fullscreen quad vertices (two triangles covering clip space -1 to 1)\n// prettier-ignore\nconst FULLSCREEN_QUAD_POSITIONS = new Float32Array([\n -1, -1, // bottom-left\n 1, -1, // bottom-right\n -1, 1, // top-left\n -1, 1, // top-left\n 1, -1, // bottom-right\n 1, 1, // top-right\n]);\n\n// Standard UV coordinates for fullscreen quad\n// prettier-ignore\nconst FULLSCREEN_QUAD_UVS = new Float32Array([\n 0, 0, // bottom-left\n 1, 0, // bottom-right\n 0, 1, // top-left\n 0, 1, // top-left\n 1, 0, // bottom-right\n 1, 1, // top-right\n]);\n\n/**\n * Creates and compiles a WebGL shader\n */\nfunction createShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader | null {\n const shader = gl.createShader(type);\n if (!shader) return null;\n\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n console.error('Shader compilation error:', gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n return null;\n }\n\n return shader;\n}\n\n/**\n * Creates a WebGL program from vertex and fragment shaders\n */\nfunction createProgram(\n gl: WebGLRenderingContext,\n vertexSource: string,\n fragmentSource: string,\n): WebGLProgram | null {\n // Check shader precision and upgrade if needed\n const format = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT);\n const precision = format ? format.precision : null;\n\n // MEDIUM_FLOAT precision can be 10, 16 or 23 bits depending on device\n // Shaders fail on 10 bit => we force 23-bit by switching to highp\n if (precision && precision < 23) {\n vertexSource = vertexSource.replace(\n /precision\\s+(lowp|mediump)\\s+float;/g,\n 'precision highp float;',\n );\n fragmentSource = fragmentSource\n .replace(/precision\\s+(lowp|mediump)\\s+float/g, 'precision highp float')\n .replace(/\\b(uniform|varying|attribute)\\s+(lowp|mediump)\\s+(\\w+)/g, '$1 highp $3');\n }\n\n const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexSource);\n const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentSource);\n\n if (!vertexShader || !fragmentShader) return null;\n\n const program = gl.createProgram();\n if (!program) return null;\n\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n console.error('Program linking error:', gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n return null;\n }\n\n // Clean up shaders after successful linking\n gl.detachShader(program, vertexShader);\n gl.detachShader(program, fragmentShader);\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n\n return program;\n}\n\ntype FullscreenQuadBuffers = {\n positionBuffer: WebGLBuffer;\n uvBuffer: WebGLBuffer;\n};\n\n/**\n * Sets up a fullscreen quad with position and UV attributes.\n * This is the standard geometry for post-processing shaders.\n *\n * @param gl - WebGL rendering context\n * @param program - WebGL program to get attribute locations from\n * @param positionAttr - Name of position attribute (default: 'position')\n * @param uvAttr - Name of UV attribute (default: 'uv')\n * @returns The created buffers for cleanup, or null if setup failed\n */\nfunction setupFullscreenQuad(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n positionAttr = 'position',\n uvAttr = 'uv',\n): FullscreenQuadBuffers | null {\n // Position attribute\n const positionLocation = gl.getAttribLocation(program, positionAttr);\n const positionBuffer = gl.createBuffer();\n if (!positionBuffer) return null;\n\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, FULLSCREEN_QUAD_POSITIONS, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(positionLocation);\n gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);\n\n // UV attribute\n const uvLocation = gl.getAttribLocation(program, uvAttr);\n const uvBuffer = gl.createBuffer();\n if (!uvBuffer) return null;\n\n gl.bindBuffer(gl.ARRAY_BUFFER, uvBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, FULLSCREEN_QUAD_UVS, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(uvLocation);\n gl.vertexAttribPointer(uvLocation, 2, gl.FLOAT, false, 0, 0);\n\n return { positionBuffer, uvBuffer };\n}\n\ntype TextureOptions = {\n minFilter?: number;\n magFilter?: number;\n wrapS?: number;\n wrapT?: number;\n};\n\n/**\n * OGL-style Texture class for WebGL texture management.\n * Supports images, videos, and canvas elements as sources.\n *\n * @see https://github.com/oframe/ogl/blob/master/src/core/Texture.js\n */\ntype TextureParams = {\n textureUnit?: number;\n minFilter?: number;\n magFilter?: number;\n wrapS?: number;\n wrapT?: number;\n flipY?: boolean;\n};\n\ntype TextureSource = HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | null;\n\nclass Texture {\n public gl: WebGLRenderingContext;\n public texture: WebGLTexture | null;\n public textureUnit: number;\n\n private minFilter: number;\n private magFilter: number;\n private wrapS: number;\n private wrapT: number;\n private flipY: boolean;\n\n constructor(gl: WebGLRenderingContext, params: TextureParams = {}) {\n this.gl = gl;\n this.textureUnit = params.textureUnit ?? 0;\n this.minFilter = params.minFilter ?? gl.NEAREST;\n this.magFilter = params.magFilter ?? gl.NEAREST;\n this.wrapS = params.wrapS ?? gl.CLAMP_TO_EDGE;\n this.wrapT = params.wrapT ?? gl.CLAMP_TO_EDGE;\n this.flipY = params.flipY ?? true;\n\n this.texture = gl.createTexture();\n this.bind();\n this.setParameters();\n }\n\n bind(): void {\n const { gl } = this;\n gl.activeTexture(gl.TEXTURE0 + this.textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n }\n\n private setParameters(): void {\n const { gl } = this;\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, this.minFilter);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, this.magFilter);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, this.wrapS);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, this.wrapT);\n }\n\n /**\n * Upload image data to the texture (OGL-style)\n */\n image(source: TextureSource): void {\n const { gl } = this;\n if (!source) return;\n\n this.bind();\n\n if (this.flipY) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n }\n\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);\n }\n\n /**\n * Update texture from video frame (call each frame for video textures)\n */\n update(source: TextureSource): void {\n this.image(source);\n }\n\n destroy(): void {\n this.gl.deleteTexture(this.texture);\n this.texture = null;\n }\n}\n\nexport { createShader, createProgram, setupFullscreenQuad, Texture };\n\nexport type { FullscreenQuadBuffers, TextureOptions, TextureParams, TextureSource };\n"],"names":["FULLSCREEN_QUAD_POSITIONS","Float32Array","FULLSCREEN_QUAD_UVS","createShader","gl","type","source","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","console","error","getShaderInfoLog","deleteShader","createProgram","vertexSource","fragmentSource","format","getShaderPrecisionFormat","FRAGMENT_SHADER","MEDIUM_FLOAT","precision","replace","vertexShader","VERTEX_SHADER","fragmentShader","program","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","deleteProgram","detachShader","setupFullscreenQuad","positionAttr","arguments","length","undefined","uvAttr","positionLocation","getAttribLocation","positionBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","uvLocation","uvBuffer","Texture","_params$textureUnit","_params$minFilter","_params$magFilter","_params$wrapS","_params$wrapT","_params$flipY","params","_classCallCheck","textureUnit","minFilter","NEAREST","magFilter","wrapS","CLAMP_TO_EDGE","wrapT","flipY","texture","createTexture","bind","setParameters","_createClass","key","value","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_MIN_FILTER","TEXTURE_MAG_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","image","pixelStorei","UNPACK_FLIP_Y_WEBGL","texImage2D","RGBA","UNSIGNED_BYTE","update","destroy","deleteTexture"],"mappings":"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"}
@@ -597,6 +597,8 @@ export { Preview, PreviewBody, PreviewFooter, PreviewHeader } from './Preview/Pr
597
597
  export { GenUIProvider } from './GenUI/GenUIProvider.native.js';
598
598
  export { useGenUI, useGenUIAction } from './GenUI/GenUIContext.native.js';
599
599
  export { GenUISchemaRenderer } from './GenUI/GenUISchemaRenderer.native.js';
600
+ export { RzpGlass as RazorSense } from './Spark/RzpGlass/RzpGlass.js';
601
+ export { FluidGradient as RazorSenseGradient } from './Spark/RazorSenseGradient/FluidGradient.js';
600
602
  export { BottomSheetBody } from './BottomSheet/BottomSheetBody.native.js';
601
603
  export { BottomSheetFooter } from './BottomSheet/BottomSheetFooter.native.js';
602
604
  export { BottomSheetHeader } from './BottomSheet/BottomSheetHeader.native.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- import '../node_modules/es-toolkit/dist/array/flatten.js';
1
+ import '../node_modules/es-toolkit/dist/compat/array/flatten.js';
2
2
  //# sourceMappingURL=flatten.js.map
@@ -1,2 +1,2 @@
1
- import '../node_modules/es-toolkit/dist/compat/array/flatten.js';
1
+ import '../node_modules/es-toolkit/dist/array/flatten.js';
2
2
  //# sourceMappingURL=flatten3.js.map
@@ -80,33 +80,44 @@ var _FilterChipSelectInput = function _FilterChipSelectInput(props) {
80
80
  };
81
81
  useEffect(function () {
82
82
  var valueNotEmpty = typeof value === 'string' && value.trim() !== '' || Array.isArray(value) && value.length > 0;
83
- // since we need to sync state only one time so skipping value checking.
84
- var isValueAndSelectedOptoinsSynced = typeof value === 'string' && value && selectedIndices.length === 1 || Array.isArray(value) && value.length === selectedIndices.length;
83
+
84
+ // Compare actual selected values (not just lengths) to detect controlled value changes
85
+ var currentSelectedValues = selectedIndices.map(function (i) {
86
+ var _options$i;
87
+ return (_options$i = options[i]) === null || _options$i === void 0 ? void 0 : _options$i.value;
88
+ });
89
+ var isSingleValueSynced = typeof value === 'string' && currentSelectedValues.length === 1 && currentSelectedValues[0] === value;
90
+ var isMultiValueSynced = Array.isArray(value) && value.length === currentSelectedValues.length && value.every(function (v) {
91
+ return currentSelectedValues.includes(v);
92
+ });
93
+ var isValueAndSelectedIndicesSynced = isSingleValueSynced || isMultiValueSynced;
85
94
  if (isUnControlled) {
86
95
  if (listViewSelectedFilters[label]) {
87
- var _value = listViewSelectedFilters[label];
88
- setSelectedIndices(_value);
89
- var inputValue = _value.map(function (selectionIndex) {
96
+ var savedIndices = listViewSelectedFilters[label];
97
+ setSelectedIndices(savedIndices);
98
+ var inputValue = savedIndices.map(function (selectionIndex) {
90
99
  return options[selectionIndex].value;
91
100
  });
92
101
  setUncontrolledInputValue(inputValue);
93
102
  setFilterChipGroupSelectedFilters(function (prev) {
94
103
  return prev.includes(label) ? prev : [].concat(_toConsumableArray(prev), [label]);
95
104
  });
105
+ } else {
106
+ setSelectedIndices([]);
96
107
  }
97
108
  } else if (listViewSelectedFilters[label]) {
98
- var _value2 = listViewSelectedFilters[label];
99
- setSelectedIndices(_value2);
100
- // This would be the case when filterChipSelectInput is controlled and are being opened first time
101
- } else if (valueNotEmpty && !isValueAndSelectedOptoinsSynced && options.length > 0) {
102
- var _selectedIndices = typeof value === 'string' ? [options.findIndex(function (option) {
109
+ var _savedIndices = listViewSelectedFilters[label];
110
+ setSelectedIndices(_savedIndices);
111
+ // Sync selected indices when controlled value changes or on first render with options loaded
112
+ } else if (valueNotEmpty && !isValueAndSelectedIndicesSynced && options.length > 0) {
113
+ var newSelectedIndices = typeof value === 'string' ? [options.findIndex(function (option) {
103
114
  return option.value === value;
104
115
  })] : options.map(function (option, index) {
105
116
  return value.includes(option.value) ? index : -1;
106
117
  }).filter(function (index) {
107
118
  return index !== -1;
108
119
  });
109
- setSelectedIndices(_selectedIndices);
120
+ setSelectedIndices(newSelectedIndices);
110
121
  }
111
122
  // eslint-disable-next-line react-hooks/exhaustive-deps
112
123
  }, [isUnControlled, options]);
@@ -135,10 +146,6 @@ var _FilterChipSelectInput = function _FilterChipSelectInput(props) {
135
146
  name: name !== null && name !== void 0 ? name : idBase,
136
147
  values: []
137
148
  });
138
- if (isUnControlled) {
139
- setUncontrolledInputValue([]);
140
- setSelectedIndices([]);
141
- }
142
149
  setFilterChipGroupSelectedFilters(function (prev) {
143
150
  return prev.filter(function (filter) {
144
151
  return filter !== label;
@@ -149,6 +156,7 @@ var _FilterChipSelectInput = function _FilterChipSelectInput(props) {
149
156
  updatedFilters = _objectWithoutProperties(prev, [label].map(_toPropertyKey));
150
157
  return updatedFilters;
151
158
  });
159
+ setUncontrolledInputValue([]);
152
160
  setSelectedIndices([]);
153
161
  };
154
162
  useEffect(function () {
@@ -1 +1 @@
1
- {"version":3,"file":"FilterChipSelectInput.web.js","sources":["../../../../../../src/components/Dropdown/FilterChipSelectInput.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\n\nimport React, { useEffect } from 'react';\nimport { useDropdown } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport { useFilterChipGroupContext } from './FilterChipGroupContext.web';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport { BaseFilterChip } from '~components/FilterChip/BaseFilterChip';\nimport { getActionListContainerRole } from '~components/ActionList/getA11yRoles';\nimport type { BaseFilterChipProps } from '~components/FilterChip/types';\nimport type { DataAnalyticsAttribute } from '~utils/types';\nimport { useId } from '~utils/useId';\nimport { useListViewFilterContext } from '~components/ListView/ListViewFiltersContext.web';\nimport { useFirstRender } from '~utils/useFirstRender';\n\ntype FilterChipSelectInputProps = Pick<\n BaseFilterChipProps,\n 'onKeyDown' | 'value' | 'label' | 'testID' | 'onClick' | 'selectionType' | 'onBlur'\n> & {\n accessibilityLabel?: string;\n onChange?: (props: { name: string; values: string[] }) => void;\n name?: string;\n onClearButtonClick?: (props: { name: string; values: string[] }) => void;\n isDisabled?: boolean;\n} & DataAnalyticsAttribute;\n\nconst _FilterChipSelectInput = (props: FilterChipSelectInputProps): React.ReactElement => {\n const idBase = useId('filter-chip-select-input');\n const {\n onClick,\n onBlur,\n onKeyDown,\n accessibilityLabel,\n testID,\n value,\n onClearButtonClick,\n label,\n onChange,\n name,\n isDisabled,\n ...rest\n } = props;\n const [uncontrolledInputValue, setUncontrolledInputValue] = React.useState<string[]>([]);\n const isFirstRender = useFirstRender();\n\n const {\n options,\n selectedIndices,\n onTriggerClick,\n onTriggerKeydown,\n dropdownBaseId,\n isOpen,\n activeIndex,\n hasFooterAction,\n triggererRef,\n selectionType,\n isControlled,\n setSelectedIndices,\n controlledValueIndices,\n changeCallbackTriggerer,\n } = useDropdown();\n const valueTitle = options.find((option) => option.value === value)?.title ?? value;\n\n const isUnControlled = options.length > 0 && props.value === undefined;\n // Currently we are having 2 context for selectedFilters. One is for FilterChipGroup and other is for ListView\n const { listViewSelectedFilters, setListViewSelectedFilters } = useListViewFilterContext();\n const {\n clearFilterCallbackTriggerer,\n setFilterChipGroupSelectedFilters,\n } = useFilterChipGroupContext();\n\n const getValuesArrayFromIndices = (): string[] => {\n let indices: number[] = [];\n if (isControlled) {\n indices = controlledValueIndices;\n } else {\n indices = selectedIndices;\n }\n\n return indices.map((selectionIndex) => options[selectionIndex].value);\n };\n\n useEffect(() => {\n const valueNotEmpty =\n (typeof value === 'string' && value.trim() !== '') ||\n (Array.isArray(value) && value.length > 0);\n // since we need to sync state only one time so skipping value checking.\n const isValueAndSelectedOptoinsSynced =\n (typeof value === 'string' && value && selectedIndices.length === 1) ||\n (Array.isArray(value) && value.length === selectedIndices.length);\n if (isUnControlled) {\n if (listViewSelectedFilters[label]) {\n const value = (listViewSelectedFilters[label] as unknown) as number[];\n setSelectedIndices(value);\n const inputValue = value.map((selectionIndex) => options[selectionIndex].value);\n setUncontrolledInputValue(inputValue);\n setFilterChipGroupSelectedFilters((prev) =>\n prev.includes(label) ? prev : [...prev, label],\n );\n }\n } else if (listViewSelectedFilters[label]) {\n const value = (listViewSelectedFilters[label] as unknown) as number[];\n setSelectedIndices(value);\n // This would be the case when filterChipSelectInput is controlled and are being opened first time\n } else if (valueNotEmpty && !isValueAndSelectedOptoinsSynced && options.length > 0) {\n const selectedIndices =\n typeof value === 'string'\n ? [options.findIndex((option) => option.value === value)]\n : options\n .map((option, index) => (value.includes(option.value) ? index : -1))\n .filter((index) => index !== -1);\n setSelectedIndices(selectedIndices);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isUnControlled, options]);\n\n const getTitleFromValue = (value: string): string => {\n const option = options.find((option) => option.value === value);\n return option ? option.title : '';\n };\n\n const getUnControlledFilterChipValue = (): string | string[] => {\n if (selectionType === 'single') {\n if (uncontrolledInputValue.length > 0) {\n return getTitleFromValue(uncontrolledInputValue[0]);\n }\n return '';\n }\n return uncontrolledInputValue;\n };\n\n const handleClearButtonClick = (): void => {\n props.onClearButtonClick?.({ name: name ?? idBase, values: getValuesArrayFromIndices() });\n props.onChange?.({ name: name ?? idBase, values: [] });\n if (isUnControlled) {\n setUncontrolledInputValue([]);\n setSelectedIndices([]);\n }\n setFilterChipGroupSelectedFilters((prev) => prev.filter((filter) => filter !== label));\n setListViewSelectedFilters((prev) => {\n const { [label]: _, ...updatedFilters } = prev;\n return updatedFilters;\n });\n setSelectedIndices([]);\n };\n\n useEffect(() => {\n if (clearFilterCallbackTriggerer) {\n handleClearButtonClick();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [clearFilterCallbackTriggerer]);\n\n useEffect(() => {\n if (!isFirstRender) {\n props.onChange?.({\n name: props.name || idBase,\n values: getValuesArrayFromIndices(),\n });\n if (isUnControlled) {\n setUncontrolledInputValue(getValuesArrayFromIndices());\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [changeCallbackTriggerer]);\n useEffect(() => {\n const isValueEmpty = selectedIndices.length === 0;\n if (!isFirstRender && !isValueEmpty) {\n setFilterChipGroupSelectedFilters((prev) => (prev.includes(label) ? prev : [...prev, label]));\n setListViewSelectedFilters((prev) => ({\n ...prev,\n [label]: selectedIndices as number[],\n }));\n } else if (!isFirstRender && isValueEmpty) {\n setFilterChipGroupSelectedFilters((prev) => prev.filter((filter) => filter !== label));\n setListViewSelectedFilters((prev) => {\n const { [label]: _, ...updatedFilters } = prev;\n return updatedFilters;\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [changeCallbackTriggerer]);\n\n const handleKeyDown = (e: React.KeyboardEvent<Element>): void => {\n onKeyDown?.(e);\n onTriggerKeydown?.({ event: e as React.KeyboardEvent<HTMLInputElement> });\n\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n }\n\n if ((e.key === 'Enter' || e.key === ' ') && !isOpen) {\n e.preventDefault();\n e.stopPropagation();\n onTriggerClick();\n }\n };\n\n return (\n <BaseFilterChip\n label={label}\n value={valueTitle ?? getUnControlledFilterChipValue()}\n onClearButtonClick={handleClearButtonClick}\n selectionType={selectionType}\n {...rest}\n ref={triggererRef as any}\n onKeyDown={handleKeyDown}\n accessibilityProps={{\n label: accessibilityLabel ?? label,\n hasPopup: getActionListContainerRole(hasFooterAction, 'FilterChipSelectInput'),\n expanded: isOpen,\n controls: `${dropdownBaseId}-actionlist`,\n activeDescendant: activeIndex >= 0 ? `${dropdownBaseId}-${activeIndex}` : undefined,\n }}\n onClick={(e) => {\n onTriggerClick();\n onClick?.(e);\n }}\n onBlur={(e) => {\n onBlur?.(e);\n }}\n isDisabled={isDisabled}\n />\n );\n};\n\nconst FilterChipSelectInput = assignWithoutSideEffects(_FilterChipSelectInput, {\n componentId: dropdownComponentIds.triggers.FilterChipSelectInput,\n});\n\nexport { FilterChipSelectInput };\n"],"names":["_FilterChipSelectInput","props","_options$find$title","_options$find","idBase","useId","onClick","onBlur","onKeyDown","accessibilityLabel","testID","value","onClearButtonClick","label","onChange","name","isDisabled","rest","_objectWithoutProperties","_excluded","_React$useState","React","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","setUncontrolledInputValue","isFirstRender","useFirstRender","_useDropdown","useDropdown","options","selectedIndices","onTriggerClick","onTriggerKeydown","dropdownBaseId","isOpen","activeIndex","hasFooterAction","triggererRef","selectionType","isControlled","setSelectedIndices","controlledValueIndices","changeCallbackTriggerer","valueTitle","find","option","title","isUnControlled","length","undefined","_useListViewFilterCon","useListViewFilterContext","listViewSelectedFilters","setListViewSelectedFilters","_useFilterChipGroupCo","useFilterChipGroupContext","clearFilterCallbackTriggerer","setFilterChipGroupSelectedFilters","getValuesArrayFromIndices","indices","map","selectionIndex","useEffect","valueNotEmpty","trim","Array","isArray","isValueAndSelectedOptoinsSynced","inputValue","prev","includes","concat","_toConsumableArray","findIndex","index","filter","getTitleFromValue","getUnControlledFilterChipValue","handleClearButtonClick","_props$onClearButtonC","_props$onChange","call","values","_","updatedFilters","_toPropertyKey","_props$onChange2","isValueEmpty","_objectSpread","_defineProperty","handleKeyDown","e","event","key","preventDefault","stopPropagation","_jsx","BaseFilterChip","ref","accessibilityProps","hasPopup","getActionListContainerRole","expanded","controls","activeDescendant","FilterChipSelectInput","assignWithoutSideEffects","componentId","dropdownComponentIds","triggers"],"mappings":"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"}
1
+ {"version":3,"file":"FilterChipSelectInput.web.js","sources":["../../../../../../src/components/Dropdown/FilterChipSelectInput.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\n\nimport React, { useEffect } from 'react';\nimport { useDropdown } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport { useFilterChipGroupContext } from './FilterChipGroupContext.web';\nimport type { DataAnalyticsAttribute } from '~utils/types';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport { BaseFilterChip } from '~components/FilterChip/BaseFilterChip';\nimport { getActionListContainerRole } from '~components/ActionList/getA11yRoles';\nimport type { BaseFilterChipProps } from '~components/FilterChip/types';\nimport { useId } from '~utils/useId';\nimport { useListViewFilterContext } from '~components/ListView/ListViewFiltersContext.web';\nimport { useFirstRender } from '~utils/useFirstRender';\n\ntype FilterChipSelectInputProps = Pick<\n BaseFilterChipProps,\n 'onKeyDown' | 'value' | 'label' | 'testID' | 'onClick' | 'selectionType' | 'onBlur'\n> & {\n accessibilityLabel?: string;\n onChange?: (props: { name: string; values: string[] }) => void;\n name?: string;\n onClearButtonClick?: (props: { name: string; values: string[] }) => void;\n isDisabled?: boolean;\n} & DataAnalyticsAttribute;\n\nconst _FilterChipSelectInput = (props: FilterChipSelectInputProps): React.ReactElement => {\n const idBase = useId('filter-chip-select-input');\n const {\n onClick,\n onBlur,\n onKeyDown,\n accessibilityLabel,\n testID,\n value,\n onClearButtonClick,\n label,\n onChange,\n name,\n isDisabled,\n ...rest\n } = props;\n const [uncontrolledInputValue, setUncontrolledInputValue] = React.useState<string[]>([]);\n const isFirstRender = useFirstRender();\n\n const {\n options,\n selectedIndices,\n onTriggerClick,\n onTriggerKeydown,\n dropdownBaseId,\n isOpen,\n activeIndex,\n hasFooterAction,\n triggererRef,\n selectionType,\n isControlled,\n setSelectedIndices,\n controlledValueIndices,\n changeCallbackTriggerer,\n } = useDropdown();\n const valueTitle = options.find((option) => option.value === value)?.title ?? value;\n\n const isUnControlled = options.length > 0 && props.value === undefined;\n // Currently we are having 2 context for selectedFilters. One is for FilterChipGroup and other is for ListView\n const { listViewSelectedFilters, setListViewSelectedFilters } = useListViewFilterContext();\n const {\n clearFilterCallbackTriggerer,\n setFilterChipGroupSelectedFilters,\n } = useFilterChipGroupContext();\n\n const getValuesArrayFromIndices = (): string[] => {\n let indices: number[] = [];\n if (isControlled) {\n indices = controlledValueIndices;\n } else {\n indices = selectedIndices;\n }\n\n return indices.map((selectionIndex) => options[selectionIndex].value);\n };\n\n useEffect(() => {\n const valueNotEmpty =\n (typeof value === 'string' && value.trim() !== '') ||\n (Array.isArray(value) && value.length > 0);\n\n // Compare actual selected values (not just lengths) to detect controlled value changes\n const currentSelectedValues = selectedIndices.map((i) => options[i]?.value);\n const isSingleValueSynced =\n typeof value === 'string' &&\n currentSelectedValues.length === 1 &&\n currentSelectedValues[0] === value;\n\n const isMultiValueSynced =\n Array.isArray(value) &&\n value.length === currentSelectedValues.length &&\n value.every((v) => currentSelectedValues.includes(v));\n\n const isValueAndSelectedIndicesSynced = isSingleValueSynced || isMultiValueSynced;\n\n if (isUnControlled) {\n if (listViewSelectedFilters[label]) {\n const savedIndices = (listViewSelectedFilters[label] as unknown) as number[];\n setSelectedIndices(savedIndices);\n const inputValue = savedIndices.map((selectionIndex) => options[selectionIndex].value);\n setUncontrolledInputValue(inputValue);\n setFilterChipGroupSelectedFilters((prev) =>\n prev.includes(label) ? prev : [...prev, label],\n );\n } else {\n setSelectedIndices([]);\n }\n } else if (listViewSelectedFilters[label]) {\n const savedIndices = (listViewSelectedFilters[label] as unknown) as number[];\n setSelectedIndices(savedIndices);\n // Sync selected indices when controlled value changes or on first render with options loaded\n } else if (valueNotEmpty && !isValueAndSelectedIndicesSynced && options.length > 0) {\n const newSelectedIndices =\n typeof value === 'string'\n ? [options.findIndex((option) => option.value === value)]\n : options\n .map((option, index) => (value.includes(option.value) ? index : -1))\n .filter((index) => index !== -1);\n setSelectedIndices(newSelectedIndices);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isUnControlled, options]);\n\n const getTitleFromValue = (value: string): string => {\n const option = options.find((option) => option.value === value);\n return option ? option.title : '';\n };\n\n const getUnControlledFilterChipValue = (): string | string[] => {\n if (selectionType === 'single') {\n if (uncontrolledInputValue.length > 0) {\n return getTitleFromValue(uncontrolledInputValue[0]);\n }\n return '';\n }\n return uncontrolledInputValue;\n };\n\n const handleClearButtonClick = (): void => {\n props.onClearButtonClick?.({ name: name ?? idBase, values: getValuesArrayFromIndices() });\n props.onChange?.({ name: name ?? idBase, values: [] });\n setFilterChipGroupSelectedFilters((prev) => prev.filter((filter) => filter !== label));\n setListViewSelectedFilters((prev) => {\n const { [label]: _, ...updatedFilters } = prev;\n return updatedFilters;\n });\n setUncontrolledInputValue([]);\n setSelectedIndices([]);\n };\n\n useEffect(() => {\n if (clearFilterCallbackTriggerer) {\n handleClearButtonClick();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [clearFilterCallbackTriggerer]);\n\n useEffect(() => {\n if (!isFirstRender) {\n props.onChange?.({\n name: props.name || idBase,\n values: getValuesArrayFromIndices(),\n });\n if (isUnControlled) {\n setUncontrolledInputValue(getValuesArrayFromIndices());\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [changeCallbackTriggerer]);\n useEffect(() => {\n const isValueEmpty = selectedIndices.length === 0;\n if (!isFirstRender && !isValueEmpty) {\n setFilterChipGroupSelectedFilters((prev) => (prev.includes(label) ? prev : [...prev, label]));\n setListViewSelectedFilters((prev) => ({\n ...prev,\n [label]: selectedIndices as number[],\n }));\n } else if (!isFirstRender && isValueEmpty) {\n setFilterChipGroupSelectedFilters((prev) => prev.filter((filter) => filter !== label));\n setListViewSelectedFilters((prev) => {\n const { [label]: _, ...updatedFilters } = prev;\n return updatedFilters;\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [changeCallbackTriggerer]);\n\n const handleKeyDown = (e: React.KeyboardEvent<Element>): void => {\n onKeyDown?.(e);\n onTriggerKeydown?.({ event: e as React.KeyboardEvent<HTMLInputElement> });\n\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n }\n\n if ((e.key === 'Enter' || e.key === ' ') && !isOpen) {\n e.preventDefault();\n e.stopPropagation();\n onTriggerClick();\n }\n };\n return (\n <BaseFilterChip\n label={label}\n value={valueTitle ?? getUnControlledFilterChipValue()}\n onClearButtonClick={handleClearButtonClick}\n selectionType={selectionType}\n {...rest}\n ref={triggererRef as any}\n onKeyDown={handleKeyDown}\n accessibilityProps={{\n label: accessibilityLabel ?? label,\n hasPopup: getActionListContainerRole(hasFooterAction, 'FilterChipSelectInput'),\n expanded: isOpen,\n controls: `${dropdownBaseId}-actionlist`,\n activeDescendant: activeIndex >= 0 ? `${dropdownBaseId}-${activeIndex}` : undefined,\n }}\n onClick={(e) => {\n onTriggerClick();\n onClick?.(e);\n }}\n onBlur={(e) => {\n onBlur?.(e);\n }}\n isDisabled={isDisabled}\n />\n );\n};\n\nconst FilterChipSelectInput = assignWithoutSideEffects(_FilterChipSelectInput, {\n componentId: dropdownComponentIds.triggers.FilterChipSelectInput,\n});\n\nexport { FilterChipSelectInput };\n"],"names":["_FilterChipSelectInput","props","_options$find$title","_options$find","idBase","useId","onClick","onBlur","onKeyDown","accessibilityLabel","testID","value","onClearButtonClick","label","onChange","name","isDisabled","rest","_objectWithoutProperties","_excluded","_React$useState","React","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","setUncontrolledInputValue","isFirstRender","useFirstRender","_useDropdown","useDropdown","options","selectedIndices","onTriggerClick","onTriggerKeydown","dropdownBaseId","isOpen","activeIndex","hasFooterAction","triggererRef","selectionType","isControlled","setSelectedIndices","controlledValueIndices","changeCallbackTriggerer","valueTitle","find","option","title","isUnControlled","length","undefined","_useListViewFilterCon","useListViewFilterContext","listViewSelectedFilters","setListViewSelectedFilters","_useFilterChipGroupCo","useFilterChipGroupContext","clearFilterCallbackTriggerer","setFilterChipGroupSelectedFilters","getValuesArrayFromIndices","indices","map","selectionIndex","useEffect","valueNotEmpty","trim","Array","isArray","currentSelectedValues","i","_options$i","isSingleValueSynced","isMultiValueSynced","every","v","includes","isValueAndSelectedIndicesSynced","savedIndices","inputValue","prev","concat","_toConsumableArray","newSelectedIndices","findIndex","index","filter","getTitleFromValue","getUnControlledFilterChipValue","handleClearButtonClick","_props$onClearButtonC","_props$onChange","call","values","_","updatedFilters","_toPropertyKey","_props$onChange2","isValueEmpty","_objectSpread","_defineProperty","handleKeyDown","e","event","key","preventDefault","stopPropagation","_jsx","BaseFilterChip","ref","accessibilityProps","hasPopup","getActionListContainerRole","expanded","controls","activeDescendant","FilterChipSelectInput","assignWithoutSideEffects","componentId","dropdownComponentIds","triggers"],"mappings":"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"}
@@ -183,7 +183,7 @@ var _SideNav = function _SideNav(_ref5, ref) {
183
183
  var l1ContainerRef = React__default.useRef(null);
184
184
  var timeoutIdsRef = React__default.useRef([]);
185
185
  var mouseOverTimeoutRef = React__default.useRef();
186
- var prevIsSideNavFullyCollapsedRef = React__default.useRef();
186
+ var prevIsSideNavCollapsedRef = React__default.useRef();
187
187
  var _React$useState = React__default.useState(false),
188
188
  _React$useState2 = _slicedToArray(_React$useState, 2),
189
189
  isL1Collapsed = _React$useState2[0],
@@ -209,10 +209,10 @@ var _SideNav = function _SideNav(_ref5, ref) {
209
209
  l2DrawerTitle = _React$useState10[0],
210
210
  setL2DrawerTitle = _React$useState10[1];
211
211
  var isMobile = useIsMobile();
212
- var isSideNavFullyCollapsed = _isExpanded === false;
213
- var effectiveIsL1Collapsed = isMobile ? isMobileL2Open : isSideNavFullyCollapsed || isL1Collapsed;
214
- var effectiveIsL1Hovered = isSideNavFullyCollapsed ? false : isL1Hovered;
215
- var sideNavWidth = isSideNavFullyCollapsed ? makeSize(COLLAPSED_L1_WIDTH) : {
212
+ var isSideNavCollapsed = _isExpanded === false;
213
+ var effectiveIsL1Collapsed = isMobile ? isMobileL2Open : isSideNavCollapsed || isL1Collapsed;
214
+ var effectiveIsL1Hovered = isSideNavCollapsed ? false : isL1Hovered;
215
+ var sideNavWidth = isSideNavCollapsed ? makeSize(COLLAPSED_L1_WIDTH) : {
216
216
  base: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_BASE),
217
217
  xl: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_XL)
218
218
  };
@@ -261,7 +261,7 @@ var _SideNav = function _SideNav(_ref5, ref) {
261
261
  });
262
262
  return;
263
263
  }
264
- if (isSideNavFullyCollapsed) {
264
+ if (isSideNavCollapsed) {
265
265
  return;
266
266
  }
267
267
 
@@ -312,11 +312,11 @@ var _SideNav = function _SideNav(_ref5, ref) {
312
312
  isL1Collapsed: effectiveIsL1Collapsed,
313
313
  setIsL1Collapsed: setIsL1Collapsed,
314
314
  isL1Hovered: effectiveIsL1Hovered,
315
- isSideNavFullyCollapsed: isSideNavFullyCollapsed
315
+ isSideNavCollapsed: isSideNavCollapsed
316
316
  };
317
317
  },
318
318
  // eslint-disable-next-line react-hooks/exhaustive-deps
319
- [effectiveIsL1Collapsed, effectiveIsL1Hovered, isSideNavFullyCollapsed]);
319
+ [effectiveIsL1Collapsed, effectiveIsL1Hovered, isSideNavCollapsed, isMobile]);
320
320
  React__default.useEffect(function () {
321
321
  return function () {
322
322
  var _iterator = _createForOfIteratorHelper(timeoutIdsRef.current),
@@ -335,23 +335,23 @@ var _SideNav = function _SideNav(_ref5, ref) {
335
335
  };
336
336
  }, []);
337
337
  React__default.useEffect(function () {
338
- if (!isMobile && isSideNavFullyCollapsed && isL1Hovered) {
338
+ if (!isMobile && isSideNavCollapsed && isL1Hovered) {
339
339
  setIsL1Hovered(false);
340
340
  }
341
- }, [isMobile, isSideNavFullyCollapsed, isL1Hovered]);
341
+ }, [isMobile, isSideNavCollapsed, isL1Hovered]);
342
342
  React__default.useEffect(function () {
343
- var prevIsSideNavFullyCollapsed = prevIsSideNavFullyCollapsedRef.current;
344
- prevIsSideNavFullyCollapsedRef.current = isSideNavFullyCollapsed;
345
- if (isMobile || prevIsSideNavFullyCollapsed === undefined) {
343
+ var prevIsSideNavCollapsed = prevIsSideNavCollapsedRef.current;
344
+ prevIsSideNavCollapsedRef.current = isSideNavCollapsed;
345
+ if (isMobile || prevIsSideNavCollapsed === undefined) {
346
346
  return;
347
347
  }
348
- if (prevIsSideNavFullyCollapsed !== isSideNavFullyCollapsed) {
348
+ if (prevIsSideNavCollapsed !== isSideNavCollapsed) {
349
349
  startL1Transition();
350
350
  onExpandChange === null || onExpandChange === void 0 || onExpandChange({
351
- isExpanded: !isSideNavFullyCollapsed
351
+ isExpanded: !isSideNavCollapsed
352
352
  });
353
353
  }
354
- }, [isMobile, isSideNavFullyCollapsed, onExpandChange, startL1Transition]);
354
+ }, [isMobile, isSideNavCollapsed, onExpandChange, startL1Transition]);
355
355
  return /*#__PURE__*/jsx(SideNavContext.Provider, {
356
356
  value: contextValue,
357
357
  children: isMobile && onDismiss ? /*#__PURE__*/jsxs(Fragment, {
@@ -391,7 +391,7 @@ var _SideNav = function _SideNav(_ref5, ref) {
391
391
  }) : /*#__PURE__*/jsxs(StyledSideNavContainer, _objectSpread(_objectSpread(_objectSpread(_objectSpread({
392
392
  $isSideNavExpandable: typeof _isExpanded !== 'undefined',
393
393
  ref: ref,
394
- className: isSideNavFullyCollapsed ? COLLAPSED : '',
394
+ className: isSideNavCollapsed ? COLLAPSED : '',
395
395
  position: "fixed",
396
396
  backgroundColor: backgroundColor,
397
397
  height: "100%",
@@ -413,7 +413,7 @@ var _SideNav = function _SideNav(_ref5, ref) {
413
413
  return;
414
414
  }
415
415
  onExpandTransitionEnd === null || onExpandTransitionEnd === void 0 || onExpandTransitionEnd({
416
- isExpanded: !isSideNavFullyCollapsed
416
+ isExpanded: !isSideNavCollapsed
417
417
  });
418
418
  },
419
419
  children: [banner ? /*#__PURE__*/jsx(BannerContainer, {
@@ -425,7 +425,7 @@ var _SideNav = function _SideNav(_ref5, ref) {
425
425
  width: "100%",
426
426
  children: [/*#__PURE__*/jsx(StyledL2PortalContainer, {
427
427
  position: "absolute",
428
- display: isSideNavFullyCollapsed ? 'none' : 'block',
428
+ display: isSideNavCollapsed ? 'none' : 'block',
429
429
  backgroundColor: backgroundColor,
430
430
  height: "100%",
431
431
  width: "100%",
@@ -474,7 +474,7 @@ var _SideNav = function _SideNav(_ref5, ref) {
474
474
  // 6. But in case of unhover/leave, we don't want to trigger mouseOut for all child components individually. We want 1 hover out of L1 menu. Thus we use `onMouseLeave`
475
475
  ,
476
476
  onMouseOver: function onMouseOver() {
477
- if (!isMobile && isSideNavFullyCollapsed) {
477
+ if (!isMobile && isSideNavCollapsed) {
478
478
  return;
479
479
  }
480
480
  if (mouseOverTimeoutRef.current) {
@@ -488,7 +488,7 @@ var _SideNav = function _SideNav(_ref5, ref) {
488
488
  }
489
489
  },
490
490
  onMouseLeave: function onMouseLeave() {
491
- if (!isMobile && isSideNavFullyCollapsed) {
491
+ if (!isMobile && isSideNavCollapsed) {
492
492
  return;
493
493
  }
494
494
  if (isL1Collapsed && isL1Hovered) {