@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.
- package/assets/spark/bottom-frame.jpg +0 -0
- package/assets/spark/colorama-center-gradient-map.jpg +0 -0
- package/assets/spark/colorama-gradient-map-blue.jpg +0 -0
- package/assets/spark/colorama-gradient-map-green.jpg +0 -0
- package/assets/spark/ray-pulse.mp4 +0 -0
- package/assets/spark/spark-base-video.mp4 +0 -0
- package/assets/spark/success-animation-circle.mp4 +0 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradient.js +9 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradient.js.map +1 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradientMount.js +18 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradientMount.js.map +1 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/shader.js +69 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/shader.js.map +1 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/useFluidGradient.js +7 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/useFluidGradient.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/PerformanceManager.js +7 -0
- package/build/lib/native/components/Spark/RzpGlass/PerformanceManager.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/RzpGlass.js +13 -0
- package/build/lib/native/components/Spark/RzpGlass/RzpGlass.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/RzpGlassMount.js +28 -0
- package/build/lib/native/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/presets.js +4 -0
- package/build/lib/native/components/Spark/RzpGlass/presets.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/rzpGlassShader.js +920 -0
- package/build/lib/native/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/utils.js +4 -0
- package/build/lib/native/components/Spark/RzpGlass/utils.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/webgl-utils.js +7 -0
- package/build/lib/native/components/Spark/RzpGlass/webgl-utils.js.map +1 -0
- package/build/lib/native/components/index.js +2 -0
- package/build/lib/native/components/index.js.map +1 -1
- package/build/lib/web/development/_virtual/flatten.js +1 -1
- package/build/lib/web/development/_virtual/flatten3.js +1 -1
- package/build/lib/web/development/components/Dropdown/FilterChipSelectInput.web.js +23 -15
- package/build/lib/web/development/components/Dropdown/FilterChipSelectInput.web.js.map +1 -1
- package/build/lib/web/development/components/SideNav/SideNav.web.js +21 -21
- package/build/lib/web/development/components/SideNav/SideNav.web.js.map +1 -1
- package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js +4 -4
- package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
- package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradient.js +92 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradient.js.map +1 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradientMount.js +110 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradientMount.js.map +1 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/index.js +2 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/index.js.map +1 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/shader.js +18 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/shader.js.map +1 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/useFluidGradient.js +34 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/useFluidGradient.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/PerformanceManager.js +455 -0
- package/build/lib/web/development/components/Spark/RzpGlass/PerformanceManager.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/RzpGlass.js +263 -0
- package/build/lib/web/development/components/Spark/RzpGlass/RzpGlass.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/RzpGlassMount.js +908 -0
- package/build/lib/web/development/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/index.js +24 -0
- package/build/lib/web/development/components/Spark/RzpGlass/index.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/presets.js +151 -0
- package/build/lib/web/development/components/Spark/RzpGlass/presets.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/rzpGlassShader.js +5 -0
- package/build/lib/web/development/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/utils.js +77 -0
- package/build/lib/web/development/components/Spark/RzpGlass/utils.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/webgl-utils.js +200 -0
- package/build/lib/web/development/components/Spark/RzpGlass/webgl-utils.js.map +1 -0
- package/build/lib/web/development/components/Spark/index.js +3 -0
- package/build/lib/web/development/components/Spark/index.js.map +1 -0
- package/build/lib/web/development/components/index.js +3 -0
- package/build/lib/web/development/components/index.js.map +1 -1
- package/build/lib/web/development/node_modules/es-toolkit/dist/array/flatten.js +1 -1
- package/build/lib/web/development/node_modules/es-toolkit/dist/compat/array/flatten.js +1 -1
- package/build/lib/web/development/node_modules/es-toolkit/dist/compat/array/sortBy.js +2 -2
- package/build/lib/web/development/node_modules/es-toolkit/dist/compat/object/omit.js +2 -2
- package/build/lib/web/production/components/Dropdown/FilterChipSelectInput.web.js +23 -15
- package/build/lib/web/production/components/Dropdown/FilterChipSelectInput.web.js.map +1 -1
- package/build/lib/web/production/components/SideNav/SideNav.web.js +21 -21
- package/build/lib/web/production/components/SideNav/SideNav.web.js.map +1 -1
- package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js +4 -4
- package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
- package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradient.js +92 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradient.js.map +1 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradientMount.js +110 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradientMount.js.map +1 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/index.js +2 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/index.js.map +1 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/shader.js +18 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/shader.js.map +1 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/useFluidGradient.js +34 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/useFluidGradient.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/PerformanceManager.js +455 -0
- package/build/lib/web/production/components/Spark/RzpGlass/PerformanceManager.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/RzpGlass.js +263 -0
- package/build/lib/web/production/components/Spark/RzpGlass/RzpGlass.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/RzpGlassMount.js +908 -0
- package/build/lib/web/production/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/index.js +24 -0
- package/build/lib/web/production/components/Spark/RzpGlass/index.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/presets.js +151 -0
- package/build/lib/web/production/components/Spark/RzpGlass/presets.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/rzpGlassShader.js +5 -0
- package/build/lib/web/production/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/utils.js +77 -0
- package/build/lib/web/production/components/Spark/RzpGlass/utils.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/webgl-utils.js +200 -0
- package/build/lib/web/production/components/Spark/RzpGlass/webgl-utils.js.map +1 -0
- package/build/lib/web/production/components/Spark/index.js +3 -0
- package/build/lib/web/production/components/Spark/index.js.map +1 -0
- package/build/lib/web/production/components/index.js +3 -0
- package/build/lib/web/production/components/index.js.map +1 -1
- package/build/types/components/index.d.ts +297 -1
- package/build/types/components/index.native.d.ts +297 -1
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformanceManager.js","sources":["../../../../../../../src/components/Spark/RzpGlass/PerformanceManager.ts"],"sourcesContent":["/**\n * PerformanceManager\n *\n * Detects GPU tier and device capability, then produces recommended\n * RzpGlass render settings. Uses a layered heuristic approach:\n *\n * 1. WEBGL_debug_renderer_info – parse GPU renderer/vendor strings\n * 2. failIfMajorPerformanceCaveat – fast browser-level GPU check\n * 3. Device signals – deviceMemory, hardwareConcurrency, mobile UA\n *\n * Tier definitions:\n * high – discrete / flagship mobile GPU, ample memory\n * mid – integrated / mid-range mobile GPU\n * low – software renderer, very old GPU, or constrained device\n * unknown – could not determine (treated as mid for safety)\n */\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport type GpuTier = 'high' | 'mid' | 'low' | 'potato' | 'unknown';\n\nexport type RenderSettings = {\n /** Max rendered pixel count passed to RzpGlassMount */\n maxPixelCount: number;\n /** Minimum device pixel ratio passed to RzpGlassMount */\n minPixelRatio: number;\n};\n\nexport type PerformanceProfile = {\n tier: GpuTier;\n /** Raw GL_RENDERER string (null if extension unavailable) */\n gpuRenderer: string | null;\n /** Raw GL_VENDOR string (null if extension unavailable) */\n gpuVendor: string | null;\n /** navigator.deviceMemory in GB (null if unavailable) */\n deviceMemory: number | null;\n /** navigator.hardwareConcurrency */\n hardwareConcurrency: number;\n isMobile: boolean;\n /** Whether the browser signalled a major performance caveat */\n hasMajorPerformanceCaveat: boolean;\n /** Render settings for the detected tier */\n renderSettings: RenderSettings;\n};\n\n// ---------------------------------------------------------------------------\n// Known renderer pattern lists\n// ---------------------------------------------------------------------------\n\n/**\n * Patterns that indicate a software / CPU renderer (potato tier).\n * These devices cannot run WebGL at any usable framerate.\n */\nconst POTATO_TIER_PATTERNS: RegExp[] = [\n /swiftshader/,\n /llvmpipe/,\n /softpipe/,\n /microsoft basic render/,\n /virgl/,\n];\n\n/**\n * Patterns that strongly indicate a low-end GPU.\n * Tested against the lowercased GL_RENDERER string.\n */\nconst LOW_TIER_PATTERNS: RegExp[] = [\n // Old Intel integrated\n /intel.*hd\\s*(graphics)?\\s*(2000|3000|4000|400|500|510|520|530)/,\n /intel.*gma/,\n // Old AMD integrated\n /amd.*radeon.*r[2-5]\\s/,\n /amd.*radeon.*hd\\s*(6|7)\\d{3}/,\n // Very old NVIDIA\n /nvidia.*geforce\\s*(4|5|6|7|8|9)\\d{2}[^0]/,\n // Old mobile GPUs\n /mali-(4|t[0-9]|g5[0-7])\\d*/,\n /adreno\\s*(3|4)\\d{2}/,\n /powervr.*sgx/,\n /vivante/,\n /gc\\d{3}[^0-9]/, // Vivante GC series\n];\n\n/**\n * Patterns that indicate a high-end GPU.\n */\nconst HIGH_TIER_PATTERNS: RegExp[] = [\n // NVIDIA discrete\n /nvidia.*rtx/,\n /nvidia.*gtx\\s*1[0-9]{3}/,\n /nvidia.*gtx\\s*[2-9]\\d{3}/,\n /nvidia.*quadro/,\n /nvidia.*titan/,\n // AMD discrete\n /amd.*rx\\s*(5|6|7)\\d{3}/,\n /amd.*radeon\\s*(pro|rx)\\s*(vega|5|6|7)/,\n /radeon\\s*r9/,\n // Apple Silicon\n /apple\\s*(m[1-9]|a1[5-9]|a[2-9]\\d)/,\n // Modern mobile flagship\n /adreno\\s*(7[3-9]\\d|8\\d{2})/,\n /mali-g(7[1-9]|[89]\\d|[1-9]\\d{2})/,\n /gpu\\s*family\\s*(apple\\s*[5-9]|apple\\s*[1-9]\\d)/,\n];\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isMobileDevice(): boolean {\n return /android|iphone|ipad|ipod|mobile/i.test(navigator.userAgent);\n}\n\nfunction getDeviceMemoryGB(): number | null {\n const mem = (navigator as Navigator & { deviceMemory?: number }).deviceMemory;\n return mem != null ? mem : null;\n}\n\nfunction getCpuCores(): number {\n return navigator.hardwareConcurrency ?? 2;\n}\n\n/**\n * Probes the WEBGL_debug_renderer_info extension to get raw GPU strings.\n * Returns nulls if the extension is unavailable or blocked (privacy protection).\n */\nfunction getGpuStrings(\n gl: WebGLRenderingContext,\n): { renderer: string | null; vendor: string | null } {\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (!ext) return { renderer: null, vendor: null };\n\n const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL) as string | null;\n const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL) as string | null;\n return { renderer, vendor };\n}\n\n/**\n * Checks whether the browser signals a major performance caveat (software/swiftshader).\n */\nfunction checkMajorPerformanceCaveat(): boolean {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl', { failIfMajorPerformanceCaveat: true });\n return gl === null;\n}\n\n/**\n * Classify a GPU into a tier using the renderer / vendor strings.\n * Returns null if classification is inconclusive.\n */\nfunction classifyByRendererString(renderer: string | null, vendor: string | null): GpuTier | null {\n if (!renderer && !vendor) return null;\n\n const combined = `${renderer ?? ''} ${vendor ?? ''}`.toLowerCase();\n\n for (const pattern of POTATO_TIER_PATTERNS) {\n if (pattern.test(combined)) return 'potato';\n }\n\n for (const pattern of LOW_TIER_PATTERNS) {\n if (pattern.test(combined)) return 'low';\n }\n\n for (const pattern of HIGH_TIER_PATTERNS) {\n if (pattern.test(combined)) return 'high';\n }\n\n return null; // inconclusive – fall through to device signals\n}\n\n/**\n * Derive a tier purely from device-level signals (no GPU string needed).\n */\nfunction classifyByDeviceSignals(memoryGB: number | null, cores: number, mobile: boolean): GpuTier {\n // Very constrained device\n if (memoryGB !== null && memoryGB <= 2) return 'low';\n if (cores <= 2) return 'low';\n\n // Well-resourced device\n if (memoryGB !== null && memoryGB >= 8 && cores >= 8 && !mobile) return 'high';\n if (memoryGB !== null && memoryGB >= 6 && cores >= 6) return 'high';\n\n return 'mid';\n}\n\n// ---------------------------------------------------------------------------\n// Per-tier render settings\n// ---------------------------------------------------------------------------\n\nconst RENDER_SETTINGS: Record<GpuTier, RenderSettings> = {\n high: {\n // ~4K equivalent\n maxPixelCount: 1920 * 1080 * 4,\n minPixelRatio: 2,\n },\n mid: {\n // ~1080p equivalent\n maxPixelCount: 1920 * 1080 * 2,\n minPixelRatio: 1,\n },\n low: {\n // ~720p max\n maxPixelCount: 1280 * 720,\n minPixelRatio: 1,\n },\n potato: {\n // Software renderer – show static fallback immediately\n maxPixelCount: 0,\n minPixelRatio: 1,\n },\n unknown: {\n // Treat conservatively – same as mid\n maxPixelCount: 1920 * 1080 * 2,\n minPixelRatio: 1,\n },\n};\n\n/**\n * Maps PerformanceLevel → RenderSettings so callers can apply the right\n * pixel budget when the level changes. Reuses RENDER_SETTINGS values so the\n * two tables stay in sync.\n *\n * 3 (full) → high tier settings\n * 2 (stable) → mid tier settings\n * 1 (degraded) → low tier settings\n * 0 (fallback) → low tier settings (canvas will be hidden anyway)\n */\nconst LEVEL_RENDER_SETTINGS: Record<PerformanceLevel, RenderSettings> = {\n 3: RENDER_SETTINGS.high,\n 2: RENDER_SETTINGS.mid,\n 1: RENDER_SETTINGS.low,\n 0: RENDER_SETTINGS.low,\n};\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Builds a PerformanceProfile by inspecting the provided WebGL context and\n * available browser / navigator APIs. No async work is performed.\n *\n * @example\n * ```ts\n * const profile = PerformanceManager.detect(gl);\n * console.log(profile.tier); // 'high' | 'mid' | 'low' | 'unknown'\n *\n * const mount = new RzpGlassMount(\n * el,\n * assets,\n * {},\n * 0,\n * profile.renderSettings.minPixelRatio,\n * profile.renderSettings.maxPixelCount,\n * );\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nclass PerformanceManager {\n /**\n * Detect GPU tier and return a full PerformanceProfile.\n *\n * @param gl - An existing WebGLRenderingContext (e.g. from RzpGlassMount).\n * If not provided, a temporary offscreen context is created.\n */\n static detect(gl?: WebGLRenderingContext): PerformanceProfile {\n let ownedCanvas = false;\n let ctx = gl ?? null;\n\n if (!ctx) {\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n ctx = canvas.getContext('webgl') ?? null;\n ownedCanvas = true;\n }\n\n const mobile = isMobileDevice();\n const memoryGB = getDeviceMemoryGB();\n const cores = getCpuCores();\n const hasMajorPerformanceCaveat = checkMajorPerformanceCaveat();\n\n let gpuRenderer: string | null = null;\n let gpuVendor: string | null = null;\n\n if (ctx) {\n const { renderer, vendor } = getGpuStrings(ctx);\n gpuRenderer = renderer;\n gpuVendor = vendor;\n if (ownedCanvas) {\n // Let the browser GC the temp context – no explicit destroy needed\n ctx = null;\n }\n }\n\n // Immediate potato-tier signal from caveat check (software renderer)\n let tier: GpuTier;\n if (hasMajorPerformanceCaveat) {\n tier = 'potato';\n } else {\n tier =\n classifyByRendererString(gpuRenderer, gpuVendor) ??\n classifyByDeviceSignals(memoryGB, cores, mobile);\n }\n\n // Downgrade high → mid on mobile (thermal / power constraints)\n if (tier === 'high' && mobile) {\n tier = 'mid';\n }\n\n return {\n tier,\n gpuRenderer,\n gpuVendor,\n deviceMemory: memoryGB,\n hardwareConcurrency: cores,\n isMobile: mobile,\n hasMajorPerformanceCaveat,\n renderSettings: RENDER_SETTINGS[tier],\n };\n }\n\n /**\n * Convenience: returns only the recommended RenderSettings without the\n * full diagnostic data.\n */\n static getRenderSettings(gl?: WebGLRenderingContext): RenderSettings {\n return PerformanceManager.detect(gl).renderSettings;\n }\n}\n\n// ---------------------------------------------------------------------------\n// WebGLPerformanceController\n// ---------------------------------------------------------------------------\n\n/** Performance level: 3 = full quality, 0 = static fallback */\nexport type PerformanceLevel = 0 | 1 | 2 | 3;\n\nexport type WebGLPerformanceControllerOptions = {\n gl: WebGLRenderingContext;\n /** Called whenever the level changes (including forced fallback at level 0) */\n onLevelChange?: ((level: PerformanceLevel) => void) | null;\n};\n\nconst TIER_INITIAL_STATE: Record<GpuTier, PerformanceLevel> = {\n high: 3,\n mid: 2,\n low: 1,\n potato: 0,\n unknown: 2,\n};\n\n/**\n * Monitors real-time FPS and fires onLevelChange when quality should be adjusted.\n * Initial level is seeded from the GPU tier detected by PerformanceManager.\n *\n * Level semantics:\n * 3 – full quality\n * 2 – stable\n * 1 – degraded\n * 0 – static fallback (onLevelChange(0) fired)\n *\n * @example\n * ```ts\n * const controller = new WebGLPerformanceController({\n * canvas,\n * gl,\n * onLevelChange: (level) => {\n * if (level === 0) showStaticFallback();\n * },\n * });\n *\n * // When done:\n * controller.dispose();\n * ```\n */\nclass WebGLPerformanceController {\n private onLevelChange: ((level: PerformanceLevel) => void) | null;\n\n private level: PerformanceLevel;\n\n private readonly cooldown = 3000;\n private lastChange = 0;\n\n private frameCount = 0;\n private lastTime = performance.now();\n private fps = 60;\n\n private rafId: number | null = null;\n private disposed = false;\n\n constructor({ gl, onLevelChange = null }: WebGLPerformanceControllerOptions) {\n this.onLevelChange = onLevelChange;\n\n const { tier } = PerformanceManager.detect(gl);\n this.level = TIER_INITIAL_STATE[tier];\n\n if (this.level === 0) {\n this.forceStaticFallback();\n return;\n }\n\n onLevelChange?.(this.level);\n this.startMonitoring();\n document.addEventListener('visibilitychange', this.handleVisibilityChange);\n }\n\n private handleVisibilityChange = (): void => {\n if (document.hidden) {\n // Pause the monitoring loop — RAF is throttled while hidden and would\n // produce artificially low FPS readings that trigger false fallbacks.\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n } else {\n // Reset FPS state so the stale hidden-period sample is discarded,\n // then resume monitoring from a clean baseline.\n this.frameCount = 0;\n this.lastTime = performance.now();\n this.fps = 60;\n this.startMonitoring();\n }\n };\n\n private setLevel(level: PerformanceLevel): void {\n if (this.level === level) return;\n\n const now = performance.now();\n if (now - this.lastChange < this.cooldown) return;\n\n this.level = level;\n this.lastChange = now;\n\n if (level === 0) {\n this.forceStaticFallback();\n return;\n }\n\n this.onLevelChange?.(level);\n }\n\n forceStaticFallback(): void {\n this.level = 0;\n this.onLevelChange?.(0);\n }\n\n private evaluatePerformance(): void {\n if (this.fps < 20) {\n this.setLevel(0);\n } else if (this.fps < 40) {\n this.setLevel(1);\n } else if (this.fps < 55) {\n this.setLevel(2);\n } else {\n this.setLevel(3);\n }\n }\n\n private startMonitoring(): void {\n const loop = (): void => {\n if (this.disposed) return;\n\n const now = performance.now();\n this.frameCount++;\n\n if (now - this.lastTime >= 1000) {\n this.fps = this.frameCount;\n this.frameCount = 0;\n this.lastTime = now;\n this.evaluatePerformance();\n }\n\n this.rafId = requestAnimationFrame(loop);\n };\n\n this.rafId = requestAnimationFrame(loop);\n }\n\n isPotato(): boolean {\n return this.level === 0;\n }\n\n /** Current performance level (3 = full, 0 = fallback) */\n getLevel(): PerformanceLevel {\n return this.level;\n }\n\n /** Stop the monitoring loop and release resources */\n dispose(): void {\n this.disposed = true;\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n document.removeEventListener('visibilitychange', this.handleVisibilityChange);\n }\n}\n\nexport { WebGLPerformanceController, RENDER_SETTINGS, LEVEL_RENDER_SETTINGS };\n"],"names":["POTATO_TIER_PATTERNS","LOW_TIER_PATTERNS","HIGH_TIER_PATTERNS","isMobileDevice","test","navigator","userAgent","getDeviceMemoryGB","mem","deviceMemory","getCpuCores","_navigator$hardwareCo","hardwareConcurrency","getGpuStrings","gl","ext","getExtension","renderer","vendor","getParameter","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","checkMajorPerformanceCaveat","canvas","document","createElement","getContext","failIfMajorPerformanceCaveat","classifyByRendererString","combined","concat","toLowerCase","_i","_POTATO_TIER_PATTERNS","length","pattern","_i2","_LOW_TIER_PATTERNS","_i3","_HIGH_TIER_PATTERNS","classifyByDeviceSignals","memoryGB","cores","mobile","RENDER_SETTINGS","high","maxPixelCount","minPixelRatio","mid","low","potato","unknown","LEVEL_RENDER_SETTINGS","PerformanceManager","_classCallCheck","_createClass","key","value","detect","ownedCanvas","ctx","_canvas$getContext","width","height","hasMajorPerformanceCaveat","gpuRenderer","gpuVendor","_getGpuStrings","tier","_classifyByRendererSt","isMobile","renderSettings","getRenderSettings","TIER_INITIAL_STATE","WebGLPerformanceController","_ref","_this","_ref$onLevelChange","onLevelChange","_defineProperty","performance","now","hidden","rafId","cancelAnimationFrame","frameCount","lastTime","fps","startMonitoring","_PerformanceManager$d","level","forceStaticFallback","addEventListener","handleVisibilityChange","setLevel","_this$onLevelChange","lastChange","cooldown","call","_this$onLevelChange2","evaluatePerformance","_this2","loop","disposed","requestAnimationFrame","isPotato","getLevel","dispose","removeEventListener"],"mappings":"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"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
|
+
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
3
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
5
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
6
|
+
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
7
|
+
import { useCallback, forwardRef, useState, useRef, useEffect } from 'react';
|
|
8
|
+
import { RzpGlassMount } from './RzpGlassMount.js';
|
|
9
|
+
import { PRESETS } from './presets.js';
|
|
10
|
+
import { jsx } from 'react/jsx-runtime';
|
|
11
|
+
|
|
12
|
+
var _excluded = ["width", "height", "className", "style", "onLoad", "onError", "preset", "cdnPath", "gradientMapSrc", "gradientMap2Src", "gradientMapCanvas", "imageSrc"],
|
|
13
|
+
_excluded2 = ["width", "height", "className", "style", "onLoad", "onError", "cdnPath", "gradientMapCanvas", "gradientMapSrc", "gradientMap2Src", "imageSrc"];
|
|
14
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
15
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
16
|
+
var DEFAULT_CDN_PATH = 'https://cdn.jsdelivr.net/gh/razorpay/blade@feat/expose-assets-folder/packages/blade/assets/spark';
|
|
17
|
+
var getDefaultAssets = function getDefaultAssets(cdnPath) {
|
|
18
|
+
return {
|
|
19
|
+
videoSrc: "".concat(cdnPath, "/spark-base-video.mp4"),
|
|
20
|
+
imageSrc: "".concat(cdnPath, "/bottom-frame.jpg"),
|
|
21
|
+
gradientMapSrc: "".concat(cdnPath, "/colorama-gradient-map-green.jpg"),
|
|
22
|
+
gradientMap2Src: "".concat(cdnPath, "/colorama-gradient-map-blue.jpg"),
|
|
23
|
+
centerGradientMapSrc: "".concat(cdnPath, "/colorama-center-gradient-map.jpg")
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Hook to merge multiple refs into one
|
|
29
|
+
*/
|
|
30
|
+
function useMergeRefs(refs) {
|
|
31
|
+
return useCallback(function (value) {
|
|
32
|
+
refs.forEach(function (ref) {
|
|
33
|
+
if (typeof ref === 'function') {
|
|
34
|
+
ref(value);
|
|
35
|
+
} else if (ref != null) {
|
|
36
|
+
ref.current = value;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}, [refs]);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Extract config from props (exclude non-config props).
|
|
44
|
+
* Strips undefined values so they don't clobber preset defaults.
|
|
45
|
+
*/
|
|
46
|
+
function extractConfig(props) {
|
|
47
|
+
var _width = props.width,
|
|
48
|
+
_height = props.height,
|
|
49
|
+
_className = props.className,
|
|
50
|
+
_style = props.style,
|
|
51
|
+
_onLoad = props.onLoad,
|
|
52
|
+
_onError = props.onError,
|
|
53
|
+
_preset = props.preset,
|
|
54
|
+
_cdnPath = props.cdnPath,
|
|
55
|
+
_gradientMapSrc = props.gradientMapSrc,
|
|
56
|
+
_gradientMap2Src = props.gradientMap2Src,
|
|
57
|
+
_gradientMapCanvas = props.gradientMapCanvas,
|
|
58
|
+
_imageSrc = props.imageSrc,
|
|
59
|
+
config = _objectWithoutProperties(props, _excluded);
|
|
60
|
+
|
|
61
|
+
// Drop keys with undefined values so preset config isn't overridden by unset props
|
|
62
|
+
return Object.fromEntries(
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
64
|
+
Object.entries(config).filter(function (_ref) {
|
|
65
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
66
|
+
v = _ref2[1];
|
|
67
|
+
return v !== undefined;
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
var ASSET_KEYS = new Set(['videoSrc', 'imageSrc', 'gradientMapSrc', 'gradientMap2Src', 'centerGradientMapSrc']);
|
|
71
|
+
|
|
72
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return */
|
|
73
|
+
function getPresetDefinition(preset) {
|
|
74
|
+
if (preset && preset in PRESETS) return _objectSpread({}, PRESETS[preset]);
|
|
75
|
+
return {};
|
|
76
|
+
}
|
|
77
|
+
function getPresetConfig(preset) {
|
|
78
|
+
var def = getPresetDefinition(preset);
|
|
79
|
+
return Object.fromEntries(Object.entries(def).filter(function (_ref3) {
|
|
80
|
+
var _ref4 = _slicedToArray(_ref3, 1),
|
|
81
|
+
k = _ref4[0];
|
|
82
|
+
return !ASSET_KEYS.has(k);
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
function getPresetAssets(preset) {
|
|
86
|
+
var def = getPresetDefinition(preset);
|
|
87
|
+
return Object.fromEntries(Object.entries(def).filter(function (_ref5) {
|
|
88
|
+
var _ref6 = _slicedToArray(_ref5, 1),
|
|
89
|
+
k = _ref6[0];
|
|
90
|
+
return ASSET_KEYS.has(k);
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Merge preset config with user-provided config.
|
|
96
|
+
* Preset values are used as base; any explicit prop overrides them.
|
|
97
|
+
*/
|
|
98
|
+
function resolveConfig(props) {
|
|
99
|
+
return _objectSpread(_objectSpread({}, getPresetConfig(props.preset)), extractConfig(props));
|
|
100
|
+
}
|
|
101
|
+
var RzpGlass = /*#__PURE__*/forwardRef(function RzpGlass(props, forwardedRef) {
|
|
102
|
+
var _presetAssets$videoSr, _ref7, _ref8, _presetAssets$centerG, _configProps$edgeFeat;
|
|
103
|
+
var _props$width = props.width,
|
|
104
|
+
width = _props$width === void 0 ? '100%' : _props$width,
|
|
105
|
+
_props$height = props.height,
|
|
106
|
+
height = _props$height === void 0 ? '100%' : _props$height,
|
|
107
|
+
className = props.className,
|
|
108
|
+
style = props.style,
|
|
109
|
+
onLoad = props.onLoad,
|
|
110
|
+
onError = props.onError,
|
|
111
|
+
cdnPathProp = props.cdnPath,
|
|
112
|
+
gradientMapCanvas = props.gradientMapCanvas,
|
|
113
|
+
gradientMapSrcProp = props.gradientMapSrc,
|
|
114
|
+
gradientMap2SrcProp = props.gradientMap2Src,
|
|
115
|
+
imageSrcProp = props.imageSrc,
|
|
116
|
+
configProps = _objectWithoutProperties(props, _excluded2);
|
|
117
|
+
|
|
118
|
+
// Get default assets based on cdnPath
|
|
119
|
+
var cdnPath = cdnPathProp !== null && cdnPathProp !== void 0 ? cdnPathProp : DEFAULT_CDN_PATH;
|
|
120
|
+
var defaultAssets = getDefaultAssets(cdnPath);
|
|
121
|
+
|
|
122
|
+
// Resolve assets: prop overrides preset, preset overrides default
|
|
123
|
+
var presetAssets = getPresetAssets(props.preset);
|
|
124
|
+
var imageSrc = imageSrcProp !== null && imageSrcProp !== void 0 ? imageSrcProp : presetAssets.imageSrc;
|
|
125
|
+
var videoSrc = imageSrc ? undefined : (_presetAssets$videoSr = presetAssets.videoSrc) !== null && _presetAssets$videoSr !== void 0 ? _presetAssets$videoSr : defaultAssets.videoSrc;
|
|
126
|
+
var gradientMapSrc = (_ref7 = gradientMapSrcProp !== null && gradientMapSrcProp !== void 0 ? gradientMapSrcProp : presetAssets.gradientMapSrc) !== null && _ref7 !== void 0 ? _ref7 : defaultAssets.gradientMapSrc;
|
|
127
|
+
var gradientMap2Src = (_ref8 = gradientMap2SrcProp !== null && gradientMap2SrcProp !== void 0 ? gradientMap2SrcProp : presetAssets.gradientMap2Src) !== null && _ref8 !== void 0 ? _ref8 : defaultAssets.gradientMap2Src;
|
|
128
|
+
var centerGradientMapSrc = (_presetAssets$centerG = presetAssets.centerGradientMapSrc) !== null && _presetAssets$centerG !== void 0 ? _presetAssets$centerG : defaultAssets.centerGradientMapSrc;
|
|
129
|
+
var _useState = useState(false),
|
|
130
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
131
|
+
isInitialized = _useState2[0],
|
|
132
|
+
setIsInitialized = _useState2[1];
|
|
133
|
+
var _useState3 = useState(null),
|
|
134
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
135
|
+
error = _useState4[0],
|
|
136
|
+
setError = _useState4[1];
|
|
137
|
+
var divRef = useRef(null);
|
|
138
|
+
var mountRef = useRef(null);
|
|
139
|
+
|
|
140
|
+
// Initialize on mount
|
|
141
|
+
useEffect(function () {
|
|
142
|
+
var init = /*#__PURE__*/function () {
|
|
143
|
+
var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
144
|
+
var config, _error, _t;
|
|
145
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
146
|
+
while (1) switch (_context.prev = _context.next) {
|
|
147
|
+
case 0:
|
|
148
|
+
if (!(!divRef.current || mountRef.current)) {
|
|
149
|
+
_context.next = 1;
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
return _context.abrupt("return");
|
|
153
|
+
case 1:
|
|
154
|
+
_context.prev = 1;
|
|
155
|
+
config = resolveConfig(props);
|
|
156
|
+
mountRef.current = new RzpGlassMount(divRef.current, {
|
|
157
|
+
videoSrc: videoSrc,
|
|
158
|
+
imageSrc: imageSrc,
|
|
159
|
+
gradientMapSrc: gradientMapSrc,
|
|
160
|
+
gradientMap2Src: gradientMap2Src,
|
|
161
|
+
centerGradientMapSrc: centerGradientMapSrc
|
|
162
|
+
}, config);
|
|
163
|
+
_context.next = 2;
|
|
164
|
+
return mountRef.current.loadAssets();
|
|
165
|
+
case 2:
|
|
166
|
+
setIsInitialized(true);
|
|
167
|
+
onLoad === null || onLoad === void 0 || onLoad();
|
|
168
|
+
_context.next = 4;
|
|
169
|
+
break;
|
|
170
|
+
case 3:
|
|
171
|
+
_context.prev = 3;
|
|
172
|
+
_t = _context["catch"](1);
|
|
173
|
+
_error = _t instanceof Error ? _t : new Error(String(_t));
|
|
174
|
+
setError(_error);
|
|
175
|
+
onError === null || onError === void 0 || onError(_error);
|
|
176
|
+
case 4:
|
|
177
|
+
case "end":
|
|
178
|
+
return _context.stop();
|
|
179
|
+
}
|
|
180
|
+
}, _callee, null, [[1, 3]]);
|
|
181
|
+
}));
|
|
182
|
+
return function init() {
|
|
183
|
+
return _ref9.apply(this, arguments);
|
|
184
|
+
};
|
|
185
|
+
}();
|
|
186
|
+
void init();
|
|
187
|
+
return function () {
|
|
188
|
+
var _mountRef$current;
|
|
189
|
+
(_mountRef$current = mountRef.current) === null || _mountRef$current === void 0 || _mountRef$current.dispose();
|
|
190
|
+
mountRef.current = null;
|
|
191
|
+
setIsInitialized(false);
|
|
192
|
+
};
|
|
193
|
+
}, [cdnPath, videoSrc, imageSrc, gradientMapSrc, gradientMap2Src, centerGradientMapSrc, configProps.preset]);
|
|
194
|
+
|
|
195
|
+
// Update uniforms when config props change
|
|
196
|
+
useEffect(function () {
|
|
197
|
+
if (isInitialized && mountRef.current) {
|
|
198
|
+
var config = resolveConfig(props);
|
|
199
|
+
mountRef.current.setUniforms(config);
|
|
200
|
+
}
|
|
201
|
+
}, [isInitialized, configProps.preset,
|
|
202
|
+
// Colorama
|
|
203
|
+
configProps.inputMin, configProps.inputMax, configProps.modifyGamma, configProps.posterizeLevels, configProps.cycleRepetitions, configProps.phaseShift, configProps.cycleSpeed, configProps.wrapMode, configProps.reverse, configProps.blendWithOriginal,
|
|
204
|
+
// Displacement
|
|
205
|
+
configProps.numSegments, configProps.slitAngle, configProps.displacementX, configProps.displacementY,
|
|
206
|
+
// Center element
|
|
207
|
+
configProps.enableCenterElement, configProps.centerAnimDuration,
|
|
208
|
+
// Color correction
|
|
209
|
+
configProps.ccBlackPoint, configProps.ccWhitePoint, configProps.ccMidtoneGamma, configProps.ccGamma, configProps.ccContrast,
|
|
210
|
+
// Zoom & Pan
|
|
211
|
+
configProps.zoom, configProps.panX, configProps.panY].concat(_toConsumableArray((_configProps$edgeFeat = configProps.edgeFeather) !== null && _configProps$edgeFeat !== void 0 ? _configProps$edgeFeat : [0, 0, 0, 0]), [
|
|
212
|
+
// Effect toggles
|
|
213
|
+
configProps.enableDisplacement, configProps.enableColorama, configProps.enableBloom, configProps.enableLightSweep,
|
|
214
|
+
// Light
|
|
215
|
+
configProps.lightIntensity, configProps.lightStartFrame,
|
|
216
|
+
// Playback
|
|
217
|
+
configProps.paused, configProps.startTime, configProps.endTime, configProps.animateLightIndependently,
|
|
218
|
+
// Cycle animation
|
|
219
|
+
configProps.animateCycleReps, configProps.cycleRepetitionsStart, configProps.cycleRepetitionsEnd, configProps.cycleRepetitionsStartFrame, configProps.cycleRepetitionsDuration,
|
|
220
|
+
// Gradient map blend
|
|
221
|
+
configProps.gradientMapBlend, configProps.gradientMapBlendDuration]));
|
|
222
|
+
|
|
223
|
+
// Update gradient map texture when a canvas is provided
|
|
224
|
+
useEffect(function () {
|
|
225
|
+
if (isInitialized && mountRef.current && gradientMapCanvas) {
|
|
226
|
+
mountRef.current.updateGradientMapTexture(gradientMapCanvas);
|
|
227
|
+
}
|
|
228
|
+
}, [isInitialized, gradientMapCanvas]);
|
|
229
|
+
var mergedRef = useMergeRefs([divRef, forwardedRef]);
|
|
230
|
+
|
|
231
|
+
// Convert width/height to string if number
|
|
232
|
+
var widthStyle = typeof width === 'number' ? "".concat(width, "px") : width;
|
|
233
|
+
var heightStyle = typeof height === 'number' ? "".concat(height, "px") : height;
|
|
234
|
+
if (error) {
|
|
235
|
+
return /*#__PURE__*/jsx("div", {
|
|
236
|
+
ref: mergedRef,
|
|
237
|
+
className: className,
|
|
238
|
+
style: _objectSpread({
|
|
239
|
+
width: widthStyle,
|
|
240
|
+
height: heightStyle
|
|
241
|
+
}, style)
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
return /*#__PURE__*/jsx("div", {
|
|
245
|
+
ref: mergedRef,
|
|
246
|
+
className: className,
|
|
247
|
+
style: _objectSpread(_objectSpread({
|
|
248
|
+
width: widthStyle,
|
|
249
|
+
height: heightStyle,
|
|
250
|
+
position: 'relative',
|
|
251
|
+
overflow: 'hidden',
|
|
252
|
+
backgroundColor: 'transparent',
|
|
253
|
+
transition: '2s opacity'
|
|
254
|
+
}, isInitialized ? {
|
|
255
|
+
opacity: 1
|
|
256
|
+
} : {
|
|
257
|
+
opacity: 0
|
|
258
|
+
}), style)
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
export { RzpGlass, RzpGlass as default };
|
|
263
|
+
//# sourceMappingURL=RzpGlass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RzpGlass.js","sources":["../../../../../../../src/components/Spark/RzpGlass/RzpGlass.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable react/react-in-jsx-scope */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable @typescript-eslint/no-implicit-any-catch */\n/* eslint-disable @typescript-eslint/no-shadow */\n/**\n * RzpGlass React Component\n *\n * A React wrapper for the RzpGlassMount WebGL shader effect.\n * Manages the component lifecycle with useEffect hooks.\n *\n * @example\n * ```tsx\n * // Uses default assets and config\n * <RzpGlass width=\"400px\" height=\"300px\" />\n *\n * // With custom assets\n * <RzpGlass\n * videoSrc=\"/custom_video.mp4\"\n * gradientMapSrc=\"/custom-gradient.jpg\"\n * enableBloom={true}\n * />\n * ```\n */\n\nimport { forwardRef, useEffect, useRef, useState, useCallback } from 'react';\nimport { RzpGlassMount } from './RzpGlassMount';\nimport type {\n RzpGlassProps,\n RzpGlassConfig,\n RzpGlassAssets,\n RzpGlassPresetDefinition,\n} from './types';\nimport { PRESETS } from './presets';\nimport type { RzpGlassPreset } from './presets';\n\nconst DEFAULT_CDN_PATH =\n 'https://cdn.jsdelivr.net/gh/razorpay/blade@feat/expose-assets-folder/packages/blade/assets/spark';\n\nconst getDefaultAssets = (cdnPath: string): Required<RzpGlassAssets> => ({\n videoSrc: `${cdnPath}/spark-base-video.mp4`,\n imageSrc: `${cdnPath}/bottom-frame.jpg`,\n gradientMapSrc: `${cdnPath}/colorama-gradient-map-green.jpg`,\n gradientMap2Src: `${cdnPath}/colorama-gradient-map-blue.jpg`,\n centerGradientMapSrc: `${cdnPath}/colorama-center-gradient-map.jpg`,\n});\n\n/**\n * Hook to merge multiple refs into one\n */\nfunction useMergeRefs<T>(refs: (React.Ref<T> | undefined)[]): React.RefCallback<T> {\n return useCallback(\n (value: T) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n },\n [refs],\n );\n}\n\n/**\n * Extract config from props (exclude non-config props).\n * Strips undefined values so they don't clobber preset defaults.\n */\nfunction extractConfig(props: RzpGlassProps): Partial<RzpGlassConfig> {\n const {\n width: _width,\n height: _height,\n className: _className,\n style: _style,\n onLoad: _onLoad,\n onError: _onError,\n preset: _preset,\n cdnPath: _cdnPath,\n gradientMapSrc: _gradientMapSrc,\n gradientMap2Src: _gradientMap2Src,\n gradientMapCanvas: _gradientMapCanvas,\n imageSrc: _imageSrc,\n ...config\n } = props;\n\n // Drop keys with undefined values so preset config isn't overridden by unset props\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n Object.entries(config).filter(([, v]) => v !== undefined),\n ) as Partial<RzpGlassConfig>;\n}\n\nconst ASSET_KEYS = new Set<string>([\n 'videoSrc',\n 'imageSrc',\n 'gradientMapSrc',\n 'gradientMap2Src',\n 'centerGradientMapSrc',\n]);\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return */\nfunction getPresetDefinition(preset: RzpGlassPreset | undefined): RzpGlassPresetDefinition {\n if (preset && preset in PRESETS) return { ...PRESETS[preset] };\n return {};\n}\n\nfunction getPresetConfig(preset: RzpGlassPreset | undefined): Partial<RzpGlassConfig> {\n const def = getPresetDefinition(preset) as Record<string, unknown>;\n return Object.fromEntries(\n Object.entries(def).filter(([k]) => !ASSET_KEYS.has(k)),\n ) as Partial<RzpGlassConfig>;\n}\n\nfunction getPresetAssets(preset: RzpGlassPreset | undefined): Partial<RzpGlassAssets> {\n const def = getPresetDefinition(preset) as Record<string, unknown>;\n return Object.fromEntries(\n Object.entries(def).filter(([k]) => ASSET_KEYS.has(k)),\n ) as Partial<RzpGlassAssets>;\n}\n\n/**\n * Merge preset config with user-provided config.\n * Preset values are used as base; any explicit prop overrides them.\n */\nfunction resolveConfig(props: RzpGlassProps): Partial<RzpGlassConfig> {\n return {\n ...getPresetConfig(props.preset),\n ...extractConfig(props),\n };\n}\n\nexport const RzpGlass = forwardRef<HTMLDivElement, RzpGlassProps>(function RzpGlass(\n props,\n forwardedRef,\n) {\n const {\n width = '100%',\n height = '100%',\n className,\n style,\n onLoad,\n onError,\n cdnPath: cdnPathProp,\n gradientMapCanvas,\n gradientMapSrc: gradientMapSrcProp,\n gradientMap2Src: gradientMap2SrcProp,\n imageSrc: imageSrcProp,\n ...configProps\n } = props;\n\n // Get default assets based on cdnPath\n const cdnPath: string = cdnPathProp ?? DEFAULT_CDN_PATH;\n const defaultAssets = getDefaultAssets(cdnPath);\n\n // Resolve assets: prop overrides preset, preset overrides default\n const presetAssets = getPresetAssets(props.preset);\n const imageSrc = imageSrcProp ?? presetAssets.imageSrc;\n const videoSrc = imageSrc ? undefined : presetAssets.videoSrc ?? defaultAssets.videoSrc;\n const gradientMapSrc =\n gradientMapSrcProp ?? presetAssets.gradientMapSrc ?? defaultAssets.gradientMapSrc;\n const gradientMap2Src =\n gradientMap2SrcProp ?? presetAssets.gradientMap2Src ?? defaultAssets.gradientMap2Src;\n const centerGradientMapSrc =\n presetAssets.centerGradientMapSrc ?? defaultAssets.centerGradientMapSrc;\n\n const [isInitialized, setIsInitialized] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const divRef = useRef<HTMLDivElement>(null);\n const mountRef = useRef<RzpGlassMount | null>(null);\n\n // Initialize on mount\n useEffect(() => {\n const init = async () => {\n if (!divRef.current || mountRef.current) return;\n\n try {\n const config = resolveConfig(props);\n\n mountRef.current = new RzpGlassMount(\n divRef.current,\n {\n videoSrc,\n imageSrc,\n gradientMapSrc,\n gradientMap2Src,\n centerGradientMapSrc,\n },\n config,\n );\n\n await mountRef.current.loadAssets();\n setIsInitialized(true);\n onLoad?.();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n onError?.(error);\n }\n };\n\n void init();\n\n return () => {\n mountRef.current?.dispose();\n mountRef.current = null;\n setIsInitialized(false);\n };\n }, [\n cdnPath,\n videoSrc,\n imageSrc,\n gradientMapSrc,\n gradientMap2Src,\n centerGradientMapSrc,\n configProps.preset,\n ]);\n\n // Update uniforms when config props change\n useEffect(() => {\n if (isInitialized && mountRef.current) {\n const config = resolveConfig(props);\n mountRef.current.setUniforms(config);\n }\n }, [\n isInitialized,\n configProps.preset,\n // Colorama\n configProps.inputMin,\n configProps.inputMax,\n configProps.modifyGamma,\n configProps.posterizeLevels,\n configProps.cycleRepetitions,\n configProps.phaseShift,\n configProps.cycleSpeed,\n configProps.wrapMode,\n configProps.reverse,\n configProps.blendWithOriginal,\n // Displacement\n configProps.numSegments,\n configProps.slitAngle,\n configProps.displacementX,\n configProps.displacementY,\n // Center element\n configProps.enableCenterElement,\n configProps.centerAnimDuration,\n // Color correction\n configProps.ccBlackPoint,\n configProps.ccWhitePoint,\n configProps.ccMidtoneGamma,\n configProps.ccGamma,\n configProps.ccContrast,\n // Zoom & Pan\n configProps.zoom,\n configProps.panX,\n configProps.panY,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...(configProps.edgeFeather ?? [0, 0, 0, 0]),\n // Effect toggles\n configProps.enableDisplacement,\n configProps.enableColorama,\n configProps.enableBloom,\n configProps.enableLightSweep,\n // Light\n configProps.lightIntensity,\n configProps.lightStartFrame,\n // Playback\n configProps.paused,\n configProps.startTime,\n configProps.endTime,\n configProps.animateLightIndependently,\n // Cycle animation\n configProps.animateCycleReps,\n configProps.cycleRepetitionsStart,\n configProps.cycleRepetitionsEnd,\n configProps.cycleRepetitionsStartFrame,\n configProps.cycleRepetitionsDuration,\n // Gradient map blend\n configProps.gradientMapBlend,\n configProps.gradientMapBlendDuration,\n ]);\n\n // Update gradient map texture when a canvas is provided\n useEffect(() => {\n if (isInitialized && mountRef.current && gradientMapCanvas) {\n mountRef.current.updateGradientMapTexture(gradientMapCanvas);\n }\n }, [isInitialized, gradientMapCanvas]);\n\n const mergedRef = useMergeRefs([divRef, forwardedRef]);\n\n // Convert width/height to string if number\n const widthStyle = typeof width === 'number' ? `${width}px` : width;\n const heightStyle = typeof height === 'number' ? `${height}px` : height;\n\n if (error) {\n return (\n <div\n ref={mergedRef}\n className={className}\n style={{\n width: widthStyle,\n height: heightStyle,\n ...style,\n }}\n />\n );\n }\n\n return (\n <div\n ref={mergedRef}\n className={className}\n style={{\n width: widthStyle,\n height: heightStyle,\n position: 'relative',\n overflow: 'hidden',\n backgroundColor: 'transparent',\n transition: '2s opacity',\n ...(isInitialized ? { opacity: 1 } : { opacity: 0 }),\n ...style,\n }}\n />\n );\n});\n\nexport default RzpGlass;\n"],"names":["DEFAULT_CDN_PATH","getDefaultAssets","cdnPath","videoSrc","concat","imageSrc","gradientMapSrc","gradientMap2Src","centerGradientMapSrc","useMergeRefs","refs","useCallback","value","forEach","ref","current","extractConfig","props","_width","width","_height","height","_className","className","_style","style","_onLoad","onLoad","_onError","onError","_preset","preset","_cdnPath","_gradientMapSrc","_gradientMap2Src","_gradientMapCanvas","gradientMapCanvas","_imageSrc","config","_objectWithoutProperties","_excluded","Object","fromEntries","entries","filter","_ref","_ref2","_slicedToArray","v","undefined","ASSET_KEYS","Set","getPresetDefinition","PRESETS","_objectSpread","getPresetConfig","def","_ref3","_ref4","k","has","getPresetAssets","_ref5","_ref6","resolveConfig","RzpGlass","forwardRef","forwardedRef","_presetAssets$videoSr","_ref7","_ref8","_presetAssets$centerG","_configProps$edgeFeat","_props$width","_props$height","cdnPathProp","gradientMapSrcProp","gradientMap2SrcProp","imageSrcProp","configProps","_excluded2","defaultAssets","presetAssets","_useState","useState","_useState2","isInitialized","setIsInitialized","_useState3","_useState4","error","setError","divRef","useRef","mountRef","useEffect","init","_ref9","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_error","_t","wrap","_context","prev","next","abrupt","RzpGlassMount","loadAssets","Error","String","stop","apply","arguments","_mountRef$current","dispose","setUniforms","inputMin","inputMax","modifyGamma","posterizeLevels","cycleRepetitions","phaseShift","cycleSpeed","wrapMode","reverse","blendWithOriginal","numSegments","slitAngle","displacementX","displacementY","enableCenterElement","centerAnimDuration","ccBlackPoint","ccWhitePoint","ccMidtoneGamma","ccGamma","ccContrast","zoom","panX","panY","_toConsumableArray","edgeFeather","enableDisplacement","enableColorama","enableBloom","enableLightSweep","lightIntensity","lightStartFrame","paused","startTime","endTime","animateLightIndependently","animateCycleReps","cycleRepetitionsStart","cycleRepetitionsEnd","cycleRepetitionsStartFrame","cycleRepetitionsDuration","gradientMapBlend","gradientMapBlendDuration","updateGradientMapTexture","mergedRef","widthStyle","heightStyle","_jsx","position","overflow","backgroundColor","transition","opacity"],"mappings":"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"}
|