{"version":3,"file":"RiveWebGL2.DBFPs5i0.mjs","names":["useRef","useMemo","useState"],"sources":["https:/framerusercontent.com/modules/h0SzadthTsZxZ9CwFKrZ/QIwZIK5jkmgcS8E35z27/RiveWebGL2.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useRef,useEffect,useState,useMemo}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */// Rive runtime to load. All official runtimes (@rive-app/canvas, webgl,\n// webgl2) expose the same JS API, so swapping is just changing this URL.\n// Currently Canvas2D: the webgl2 runtime compiled large shaders on first\n// visit (empty per-site shader cache), blocking the main thread for seconds\n// exactly when users start scrolling. Re-test cold-cache before swapping back.\nconst RIVE_CDN=\"https://unpkg.com/@rive-app/canvas@2.40.0/rive.js\";// const RIVE_CDN = \"https://unpkg.com/@rive-app/webgl2@2.39.2/rive.js\"\nif(typeof document!==\"undefined\"){if(!document.querySelector(\"link[data-rive-script-preload]\")){const l=document.createElement(\"link\");l.rel=\"preload\";l.as=\"script\";l.href=RIVE_CDN;l.crossOrigin=\"anonymous\";l.fetchPriority=\"high\";l.setAttribute(\"data-rive-script-preload\",\"\");document.head.appendChild(l);}}// Runtime debug switch. Lets you turn logs on for a PUBLISHED site without\n// republishing — the property-panel \"Debug Logs\" toggle needs a rebuild, this\n// doesn't. In the browser console:\n//     riveDebug()        → logs ON  (persists across reloads)\n//     riveDebug(false)   → logs OFF\n// Also enabled by a ?riveDebug URL param or a persisted localStorage flag.\nfunction globalDebugOn(){if(typeof window===\"undefined\")return false;return window.__riveDebug===true;}if(typeof window!==\"undefined\"){const w=window;if(w.__riveDebugInit!==true){w.__riveDebugInit=true;try{const params=new URLSearchParams(window.location.search);const fromUrl=params.has(\"riveDebug\")||params.has(\"rivedebug\");const fromStore=window.localStorage?.getItem(\"riveDebug\")===\"1\";if(fromUrl||fromStore)w.__riveDebug=true;}catch{}w.riveDebug=(on=true)=>{w.__riveDebug=!!on;try{if(on)window.localStorage?.setItem(\"riveDebug\",\"1\");else window.localStorage?.removeItem(\"riveDebug\");}catch{}if(typeof console!==\"undefined\"){console.log(`%c[Rive] debug logging ${on?\"ON\":\"OFF\"}`,\"color:#a78bfa;font-weight:600\");}return!!on;};}}function loadRiveScript(){if(typeof window===\"undefined\")return Promise.reject(new Error(\"No window\"));const w=window;if(w.__riveRuntime)return Promise.resolve(w.__riveRuntime);if(w.__riveRuntimeLoading)return w.__riveRuntimeLoading;w.__riveRuntimeLoading=new Promise((resolve,reject)=>{const script=document.createElement(\"script\");script.src=RIVE_CDN;script.async=true;script.crossOrigin=\"anonymous\";script.fetchPriority=\"high\";script.onload=()=>{const mod=w.rive;if(!mod){reject(new Error(\"rive global not found after script load\"));return;}w.__riveRuntime=mod;resolve(mod);};script.onerror=e=>{w.__riveRuntimeLoading=null;reject(e);};document.head.appendChild(script);});return w.__riveRuntimeLoading;}function fetchRivBuffer(src,priority=\"high\"){if(typeof window===\"undefined\")return Promise.reject(new Error(\"No window\"));const w=window;w.__rivBufferCache=w.__rivBufferCache||new Map;const cache=w.__rivBufferCache;const cached=cache.get(src);// First request for a src wins the priority — subsequent layers sharing the\n// same file reuse the in-flight/cached buffer regardless of their hint.\nif(cached)return cached;const promise=fetch(src,{priority,credentials:\"omit\"}).then(r=>{if(!r.ok)throw new Error(`Failed to fetch riv (${r.status}) ${src}`);return r.arrayBuffer();}).catch(e=>{cache.delete(src);throw e;});cache.set(src,promise);return promise;}function cssEscape(value){if(typeof CSS!==\"undefined\"&&typeof CSS.escape===\"function\"){return CSS.escape(value);}return String(value).replace(/[\"\\\\]/g,\"\\\\$&\");}const FIT_MAP={contain:\"Contain\",cover:\"Cover\",fill:\"Fill\",fitWidth:\"FitWidth\",fitHeight:\"FitHeight\",none:\"None\",scaleDown:\"ScaleDown\",layout:\"Layout\"};const ALIGNMENT_MAP={center:\"Center\",topLeft:\"TopLeft\",topCenter:\"TopCenter\",topRight:\"TopRight\",centerLeft:\"CenterLeft\",centerRight:\"CenterRight\",bottomLeft:\"BottomLeft\",bottomCenter:\"BottomCenter\",bottomRight:\"BottomRight\"};// Map the Rive Fit/Alignment to CSS background equivalents so the placeholder\n// image frames the same way the loaded animation will — no jump on cross-fade.\n// (scaleDown ≈ contain, and layout fills the box, so both approximate.)\nconst PLACEHOLDER_SIZE={contain:\"contain\",cover:\"cover\",fill:\"100% 100%\",fitWidth:\"100% auto\",fitHeight:\"auto 100%\",none:\"auto\",scaleDown:\"contain\",layout:\"cover\"};const PLACEHOLDER_POS={center:\"center\",topLeft:\"left top\",topCenter:\"center top\",topRight:\"right top\",centerLeft:\"left center\",centerRight:\"right center\",bottomLeft:\"left bottom\",bottomCenter:\"center bottom\",bottomRight:\"right bottom\"};// Build a Rive Layout from the props. For Fit.Layout the artboard runs Rive's\n// responsive layout engine (alignment is ignored) and layoutScaleFactor scales\n// the layout density — 1 = match the canvas, >1 zooms in. For all other fits it\n// behaves as a normal scale/crop and layoutScaleFactor is unused.\nfunction buildLayout(mod,fit,alignment,layoutScaleFactor){const fitEnum=mod.Fit[FIT_MAP[fit]]??mod.Fit.Contain;const alignEnum=mod.Alignment[ALIGNMENT_MAP[alignment]]??mod.Alignment.Center;return new mod.Layout({fit:fitEnum,alignment:alignEnum,layoutScaleFactor:fit===\"layout\"?layoutScaleFactor:undefined});}// Write a single user-defined binding onto a bound ViewModel instance. Rive VM\n// properties are typed, so the row's `type` decides which accessor to use. A\n// missing property name (or one that doesn't exist on the VM) is skipped rather\n// than throwing, so a half-filled row in the panel never breaks the render.\nfunction applyBinding(vmi,b){if(!vmi||!b||!b.name)return;try{if(b.type===\"number\"){const p=vmi.number?.(b.name);if(p)p.value=Number(b.numberValue)||0;}else if(b.type===\"boolean\"){const p=vmi.boolean?.(b.name);if(p)p.value=!!b.booleanValue;}else if(b.type===\"string\"){const p=vmi.string?.(b.name);if(p)p.value=String(b.stringValue??\"\");}}catch(e){console.error(\"applyBinding failed for\",b?.name,e);}}function clamp255(v){return v<0?0:v>255?255:v;}// Generate a tiling grain texture as a data URL. The grain is centered on\n// neutral gray (128) so, with overlay/soft-light, it adds texture WITHOUT\n// shifting the underlying tone — intensity 0 is a true no-op. Only depends on\n// type/intensity/seed; opacity, blend mode and size are applied via CSS.\nfunction generateNoise(type,intensity,seed){if(typeof document===\"undefined\")return\"\";const TILE=256;const canvas=document.createElement(\"canvas\");canvas.width=TILE;canvas.height=TILE;const ctx=canvas.getContext(\"2d\");if(!ctx)return\"\";const imageData=ctx.createImageData(TILE,TILE);const data=imageData.data;// mulberry32 — small, good-quality seeded PRNG.\nlet s=(Math.floor(seed)||1)>>>0;const random=()=>{s=s+1831565813>>>0;let t=Math.imul(s^s>>>15,1|s);t=t+Math.imul(t^t>>>7,61|t)^t;return((t^t>>>14)>>>0)/4294967296;};const amp=intensity*127.5// full range at intensity 1\n;const deviation=()=>{if(type===\"rough\")return random()>.5?1:-1;if(type===\"digital\"){const levels=4;return(Math.floor(random()*levels)/(levels-1)-.5)*2;}if(type===\"film\"){// Box–Muller Gaussian — the most photographic grain.\nconst u=1-random();const v=random();return Math.sqrt(-2*Math.log(u))*Math.cos(2*Math.PI*v)*.5;}return(random()-.5)*2// standard: uniform\n;};for(let i=0;i<data.length;i+=4){if(type===\"color\"){data[i]=clamp255(128+(random()-.5)*2*amp);data[i+1]=clamp255(128+(random()-.5)*2*amp);data[i+2]=clamp255(128+(random()-.5)*2*amp);}else{const val=clamp255(128+deviation()*amp);data[i]=val;data[i+1]=val;data[i+2]=val;}data[i+3]=255;}ctx.putImageData(imageData,0,0);return canvas.toDataURL();}// Smooth signed noise (2-octave value noise, ~[-1, 1]) used as the acceleration\n// that drives the velocity integrator. Because it's integrated twice into\n// position, the resulting motion is very smooth and flowing regardless of the\n// noise's own cadence.\nfunction hash1(n){const x=Math.sin(n*127.1)*43758.5453;return x-Math.floor(x);}function fnoise(t,seed){let s=0,a=.5,f=1,nrm=0;for(let i=0;i<2;i++){const p=t*f+seed;const k=Math.floor(p);const fr=p-k;const u=fr*fr*(3-2*fr);const h0=hash1(k);const h1=hash1(k+1);s+=a*(h0+(h1-h0)*u);nrm+=a;f*=2;a*=.5;}return s/nrm*2-1;}export default function RiveAnimation(props){const{src=\"\",artboard=\"\",stateMachine=\"State Machine 1\",loading=\"eager-high\",viewModelName=\"\",bindings=[],viewportPropName=\"onViewportEnter\",scrollPropName=\"scrollPosition\",play=true,playOnCanvas=true,fit=\"contain\",alignment=\"center\",layoutScaleFactor=1,offsetX=0,offsetY=0,enterAt=0,scrollStart=100,scrollEnd=0,riveEventName=\"\",emitWindowEvent=\"\",startOnWindowEvent=\"\",scrollNumber,placeholder,grain,ariaLabel=\"\",decorative=false,debug=false}=props;// Debug logging. Gated on `debug` read through refs so the log fn is stable\n// (never in an effect's deps) and toggling debug doesn't re-run effects or\n// re-init Rive. Label = artboard or filename so multiple instances on a\n// page are distinguishable in the console.\nconst debugRef=useRef(debug);debugRef.current=debug;const labelRef=useRef(\"\");labelRef.current=artboard||(src?src.split(\"/\").pop()||src:\"\")||\"RiveAnimation\";const log=useRef((...args)=>{if(typeof console===\"undefined\")return;// Enabled by the per-instance prop OR the runtime switch (riveDebug()).\nif(!debugRef.current&&!globalDebugOn())return;console.log(`%c[Rive ${labelRef.current}]`,\"color:#a78bfa;font-weight:600\",...args);}).current;const scrollNumberEvent=scrollNumber?.event??\"riveSetNumber\";const scrollNumberProp=scrollNumber?.property??\"\";const scrollNumberEnabled=!!scrollNumber&&!!scrollNumberProp;const grainEnabled=!!grain;const grainType=grain?.type??\"standard\";const grainIntensity=grain?.intensity??.5;const grainOpacity=grain?.opacity??.5;const grainBlend=grain?.blendMode??\"overlay\";const grainSize=grain?.size??4;const grainSeed=grain?.seed??1;const grainSpeed=grain?.speed??0;const grainDistance=grain?.distance??100;const grainFadeIn=grain?.fadeIn??0;// One static tile, built only when its pixels change.\nconst noiseUrl=useMemo(()=>grainEnabled?generateNoise(grainType,grainIntensity,grainSeed):\"\",[grainEnabled,grainType,grainIntensity,grainSeed]);// Drift only when asked, playing, and not idling on the editor canvas.\nconst grainAnimated=grainSpeed>0&&play&&(RenderTarget.current()===RenderTarget.canvas?playOnCanvas:true);const grainDivRef=useRef(null);// Fade the grain in on mount (next frame), independent of the Rive load —\n// so it appears as soon as possible, not when the animation finishes.\nconst[grainShown,setGrainShown]=useState(false);useEffect(()=>{if(typeof window===\"undefined\")return;if(!grainEnabled){setGrainShown(false);return;}const raf=requestAnimationFrame(()=>setGrainShown(true));return()=>cancelAnimationFrame(raf);},[grainEnabled]);const placeholderImage=placeholder?.image;const placeholderColor=placeholder?.color??\"#00000000\";const keepPlaceholder=placeholder?.keep??false;const placeholderSrc=placeholderImage?.src??placeholderImage?.srcSet??\"\";// Placeholder fit/alignment. \"match\" follows the Rive canvas (default);\n// otherwise the user's explicit choice overrides it.\nconst placeholderFit=placeholder?.fit??\"match\";const placeholderAlign=placeholder?.alignment??\"match\";const phFit=placeholderFit===\"match\"?fit:placeholderFit;const phAlign=placeholderAlign===\"match\"?alignment:placeholderAlign;// For \"None\", allow an explicit pixel size (0 = the image's natural size).\nconst placeholderW=placeholder?.width??0;const placeholderH=placeholder?.height??0;const phBackgroundSize=phFit===\"none\"?`${placeholderW>0?placeholderW+\"px\":\"auto\"} ${placeholderH>0?placeholderH+\"px\":\"auto\"}`:PLACEHOLDER_SIZE[phFit]??\"cover\";const containerRef=useRef(null);const canvasRef=useRef(null);const riveRef=useRef(null);const riveModuleRef=useRef(null);const vmInstanceRef=useRef(null);const[loaded,setLoaded]=useState(false);// Loading strategy. Eager modes load on mount (high or auto priority); lazy\n// waits until the layer nears the viewport so offscreen Rive files don't\n// compete with the first/visible animation for bandwidth at page load.\nconst isLazy=loading===\"lazy\";const fetchPriorityHint=loading===\"eager-high\"?\"high\":\"auto\";const[shouldLoad,setShouldLoad]=useState(!isLazy);useEffect(()=>{if(typeof window===\"undefined\")return;// Non-lazy (incl. switching the prop to eager) loads immediately.\nif(!isLazy){setShouldLoad(true);return;}if(shouldLoad)return;// Always load on the Framer canvas so the design stays visible while\n// editing, and fall back to loading if IntersectionObserver is absent.\nif(RenderTarget.current()===RenderTarget.canvas||typeof IntersectionObserver===\"undefined\"){setShouldLoad(true);return;}const el=containerRef.current;if(!el)return;const io=new IntersectionObserver(entries=>{if(entries.some(e=>e.isIntersecting)){log(\"lazy: near viewport → loading\");setShouldLoad(true);io.disconnect();}},{rootMargin:\"200px\"});io.observe(el);return()=>io.disconnect();},[isLazy,shouldLoad]);useEffect(()=>{if(typeof document===\"undefined\"||!src||!shouldLoad)return;const selector=`link[data-rive-preload=\"${cssEscape(src)}\"]`;if(document.querySelector(selector))return;const link=document.createElement(\"link\");link.rel=\"preload\";link.as=\"fetch\";link.href=src;link.crossOrigin=\"anonymous\";link.fetchPriority=fetchPriorityHint;link.setAttribute(\"data-rive-preload\",src);document.head.appendChild(link);fetchRivBuffer(src,fetchPriorityHint).catch(()=>{});},[src,shouldLoad,fetchPriorityHint]);useEffect(()=>{if(typeof window===\"undefined\"||!src||!shouldLoad)return;let cancelled=false;const t0=typeof performance!==\"undefined\"?performance.now():0;log(\"init: loading\",{src,artboard:artboard||\"(default)\",stateMachine:stateMachine||\"(default)\",priority:fetchPriorityHint});Promise.all([loadRiveScript(),fetchRivBuffer(src,fetchPriorityHint)]).then(([riveModule,buffer])=>{if(cancelled||!canvasRef.current)return;riveModuleRef.current=riveModule;const anyBindings=(bindings?.length??0)>0;const useViewModel=!!viewModelName||anyBindings;log(\"init: script + buffer ready\",{bytes:buffer.byteLength,ms:typeof performance!==\"undefined\"?Math.round(performance.now()-t0):undefined,autoBind:useViewModel});const instance=new riveModule.Rive({buffer,canvas:canvasRef.current,artboard:artboard||undefined,stateMachines:stateMachine||undefined,autoplay:play,automaticallyHandleEvents:true,// Only enable autoBind when the user actually wants a\n// ViewModel — otherwise Rive logs a warning for every\n// file that doesn't have one linked to the artboard.\nautoBind:useViewModel,layout:buildLayout(riveModule,fit,alignment,layoutScaleFactor),onLoad:()=>{if(cancelled||!canvasRef.current)return;instance.resizeDrawingSurfaceToCanvas();let vmi=null;if(useViewModel){vmi=instance.viewModelInstance??null;if(!vmi){try{const vm=instance.viewModelByName?.(viewModelName);vmi=vm?.defaultInstance?.()??null;if(vmi)instance.bindViewModelInstance(vmi);}catch(e){console.error(\"onLoad: manual VM bind failed\",e);}}}vmInstanceRef.current=vmi;log(\"onLoad: ready\",{stateMachines:instance.stateMachineNames,artboards:instance.contents?.artboards?.map(a=>a.name)??undefined,viewModelBound:!!vmi,viewModelWanted:useViewModel});if(useViewModel&&!vmi){log(\"onLoad: ⚠️ ViewModel requested but none bound — bindings and VM props won't apply\");}// Apply author-defined bindings once the VM is bound,\n// before the first painted frame, so initial values are\n// correct. Live edits are handled by the effect below.\nif(vmi&&anyBindings){for(const b of bindings)applyBinding(vmi,b);log(\"onLoad: applied bindings\",bindings);}if(emitWindowEvent){const evType=riveModule.EventType?.RiveEvent;if(evType){instance.on(evType,riveEvt=>{const name=riveEvt?.data?.name??riveEvt?.name;if(!riveEventName||name===riveEventName){log(\"riveEvent → emit\",{name,emitAs:emitWindowEvent});window.dispatchEvent(new CustomEvent(emitWindowEvent,{detail:riveEvt?.data??null}));}else{log(\"riveEvent (filtered out)\",{name,filter:riveEventName});}});}}setLoaded(true);}});instance.on?.(riveModule.EventType?.LoadError,e=>console.error(`[Rive ${labelRef.current}] LoadError`,e));riveRef.current=instance;}).catch(e=>console.error(`[Rive ${labelRef.current}] init: load rejected`,e));return()=>{cancelled=true;try{riveRef.current?.cleanup?.();}catch(e){console.error(`[Rive ${labelRef.current}] cleanup error`,e);}riveRef.current=null;riveModuleRef.current=null;vmInstanceRef.current=null;setLoaded(false);log(\"cleanup: instance disposed\");};},[src,artboard,stateMachine,viewModelName,// Re-init only when a ViewModel becomes needed/unneeded (first binding\n// added or last removed) — not on every value edit, which the\n// re-apply effect below handles without rebuilding the instance.\n(bindings?.length??0)>0,emitWindowEvent,riveEventName,shouldLoad]);useEffect(()=>{const rive=riveRef.current;if(!rive||!loaded)return;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const shouldPlay=isCanvas?playOnCanvas&&play:play;log(shouldPlay?\"playback: play\":\"playback: pause\",{play,playOnCanvas,isCanvas});if(shouldPlay)rive.play();else rive.pause();},[play,playOnCanvas,loaded]);useEffect(()=>{const rive=riveRef.current;const mod=riveModuleRef.current;if(!rive||!mod||!loaded)return;log(\"layout: update\",{fit,alignment,layoutScaleFactor});rive.layout=buildLayout(mod,fit,alignment,layoutScaleFactor);rive.resizeDrawingSurfaceToCanvas?.();},[fit,alignment,layoutScaleFactor,loaded]);// Re-apply data bindings whenever their values change (panel edits, CMS\n// updates, or values fed in via a code override). Serialised dep so the\n// effect runs on value changes, not just array-identity changes.\nconst bindingsKey=JSON.stringify(bindings??[]);useEffect(()=>{if(!loaded)return;const vmi=vmInstanceRef.current;if(!vmi)return;for(const b of bindings??[])applyBinding(vmi,b);if((bindings?.length??0)>0)log(\"bindings: re-applied\",bindings);// eslint-disable-next-line react-hooks/exhaustive-deps\n},[loaded,bindingsKey]);useEffect(()=>{if(typeof window===\"undefined\")return;const canvas=canvasRef.current;if(!canvas)return;const observer=new ResizeObserver(()=>{riveRef.current?.resizeDrawingSurfaceToCanvas?.();});observer.observe(canvas);return()=>observer.disconnect();},[loaded]);// Drift the grain tile along a smooth, noise-driven path via a GPU transform\n// (composited — no repaint, no recompute). x/y use separate noise channels\n// so the motion wanders organically within ±distance px.\nuseEffect(()=>{if(typeof window===\"undefined\")return;const div=grainDivRef.current;if(!div)return;if(!grainAnimated||grainDistance<=0){div.style.transform=\"translate3d(0,0,0)\";return;}// Velocity integration: noise -> acceleration -> velocity -> position,\n// with a soft spring to center and damping to stay bounded. FORCE drives\n// how hard it's pushed, SPRING how strongly it returns, DAMP how quickly\n// momentum bleeds off (lower = floatier, more drift).\nconst FORCE=1.8;const SPRING=2;const DAMP=.8;let px=0,py=0,vx=0,vy=0;const step=(t,dt)=>{const ax=fnoise(t,11)*FORCE-px*SPRING-vx*DAMP;const ay=fnoise(t,37)*FORCE-py*SPRING-vy*DAMP;vx+=ax*dt;vy+=ay*dt;px+=vx*dt;py+=vy*dt;};// Warm up the simulation so it starts already mid-motion, in a settled\n// state — avoids the lurch from rest on the first frame. simTime keeps\n// the noise phase continuous into the live loop.\nconst PREROLL=3// seconds of simulated time\n;const fixed=1/60;let simTime=0;for(;simTime<PREROLL;simTime+=fixed)step(simTime*grainSpeed,fixed);// Paint the settled position immediately so the first frame isn't (0,0).\ndiv.style.transform=`translate3d(${Math.max(-1,Math.min(1,px))*grainDistance}px, ${Math.max(-1,Math.min(1,py))*grainDistance}px, 0)`;let raf=0;let prev=0;const loop=now=>{if(!prev)prev=now;let dt=(now-prev)/1e3;prev=now;if(dt>.05)dt=.05// clamp after tab-inactive jumps\n;simTime+=dt;step(simTime*grainSpeed,dt);const cx=Math.max(-1,Math.min(1,px))*grainDistance;const cy=Math.max(-1,Math.min(1,py))*grainDistance;div.style.transform=`translate3d(${cx}px, ${cy}px, 0)`;raf=requestAnimationFrame(loop);};raf=requestAnimationFrame(loop);return()=>cancelAnimationFrame(raf);},[grainAnimated,grainSpeed,grainDistance]);const resolveTrigger=()=>{const rive=riveRef.current;let smInput=null;try{for(const name of rive?.stateMachineNames??[]){const inputs=rive.stateMachineInputs(name)??[];const match=inputs.find(i=>i.name===viewportPropName);if(match){smInput=match;break;}}}catch{}const vmi=vmInstanceRef.current;const vmProp=vmi?.boolean?.(viewportPropName)??null;log(\"resolveTrigger\",{prop:viewportPropName,smInput:!!smInput,vmProp:!!vmProp});return{smInput,vmProp};};const resolveScrollTarget=()=>{const rive=riveRef.current;let smInput=null;try{for(const name of rive?.stateMachineNames??[]){const inputs=rive.stateMachineInputs(name)??[];const match=inputs.find(i=>i.name===scrollPropName);if(match){smInput=match;break;}}}catch{}const vmi=vmInstanceRef.current;const vmProp=vmi?.number?.(scrollPropName)??null;log(\"resolveScrollTarget\",{prop:scrollPropName,smInput:!!smInput,vmProp:!!vmProp});return{smInput,vmProp};};useEffect(()=>{if(typeof window===\"undefined\")return;if(!loaded||!startOnWindowEvent)return;if(RenderTarget.current()===RenderTarget.canvas)return;const{smInput,vmProp}=resolveTrigger();if(!smInput&&!vmProp){return;}const handler=()=>{log(\"startOnWindowEvent fired → set true\",{event:startOnWindowEvent,prop:viewportPropName});if(smInput)smInput.value=true;if(vmProp)vmProp.value=true;};log(\"startOnWindowEvent: listening\",{event:startOnWindowEvent});window.addEventListener(startOnWindowEvent,handler);return()=>window.removeEventListener(startOnWindowEvent,handler);},[loaded,startOnWindowEvent,viewportPropName]);useEffect(()=>{if(typeof window===\"undefined\")return;if(!loaded||!containerRef.current)return;if(RenderTarget.current()===RenderTarget.canvas)return;if(startOnWindowEvent)return;const{smInput,vmProp}=resolveTrigger();if(!smInput&&!vmProp){log(`viewport: no \"${viewportPropName}\" input/VM bool found — On Enter disabled`);return;}const setValue=v=>{if(smInput)smInput.value=v;if(vmProp)vmProp.value=v;};const el=containerRef.current;let raf=0;let lastTriggered=null;// Compute visible portion as a ratio against min(elementHeight, vh)\n// so a value of 1.0 is always achievable, even for tall elements.\nconst check=()=>{raf=0;const rect=el.getBoundingClientRect();const vh=window.innerHeight;const top=Math.max(0,rect.top);const bottom=Math.min(vh,rect.bottom);const visible=Math.max(0,bottom-top);const denom=Math.min(rect.height,vh);const ratio=denom>0?visible/denom:0;const triggered=ratio>=enterAt;if(triggered!==lastTriggered){lastTriggered=triggered;log(triggered?\"viewport: enter → true\":\"viewport: leave → false\",{ratio:Math.round(ratio*100)/100,enterAt});setValue(triggered);}};const onScroll=()=>{if(raf)return;raf=requestAnimationFrame(check);};check();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);return()=>{if(raf)cancelAnimationFrame(raf);window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);};},[loaded,viewportPropName,enterAt,startOnWindowEvent]);useEffect(()=>{if(typeof window===\"undefined\")return;if(!loaded||!containerRef.current)return;if(RenderTarget.current()===RenderTarget.canvas)return;const{smInput,vmProp}=resolveScrollTarget();if(!smInput&&!vmProp){log(`scroll: no \"${scrollPropName}\" number input/VM found — scroll scrub disabled`);return;}log(\"scroll: tracking\",{prop:scrollPropName,scrollStart,scrollEnd});const el=containerRef.current;let raf=0;let lastValue=-1;// Log only when progress crosses a new ~10% bucket, so a debug scrub\n// trace stays readable (≤11 lines) instead of one line per frame.\nlet lastBucket=-1;// scrollStart / scrollEnd are percentages of the viewport height\n// measured from the top (0 = viewport top, 100 = viewport bottom).\n// Progress = 0 when the layer's top is at scrollStart%, reaches 100\n// when the layer's top hits scrollEnd%.\nconst update=()=>{raf=0;const vh=window.innerHeight;const startY=scrollStart/100*vh;const endY=scrollEnd/100*vh;const range=startY-endY;if(range<=0)return;const rectTop=el.getBoundingClientRect().top;const raw=(startY-rectTop)/range;const progress=Math.max(0,Math.min(1,raw))*100;if(Math.abs(progress-lastValue)<.01)return;lastValue=progress;if(smInput)smInput.value=progress;if(vmProp)vmProp.value=progress;const bucket=Math.round(progress/10);if(bucket!==lastBucket){lastBucket=bucket;log(\"scroll: progress\",{prop:scrollPropName,value:Math.round(progress)});}};const schedule=()=>{if(raf)return;raf=requestAnimationFrame(update);};update();window.addEventListener(\"scroll\",schedule,{passive:true});window.addEventListener(\"resize\",schedule);return()=>{if(raf)cancelAnimationFrame(raf);window.removeEventListener(\"scroll\",schedule);window.removeEventListener(\"resize\",schedule);};},[loaded,scrollPropName,scrollStart,scrollEnd]);// Listen for a window event (fired by a code override on another element\n// when it scrolls into view) and write its numeric payload to a VM number\n// property (and/or a same-named state-machine number input).\nuseEffect(()=>{if(typeof window===\"undefined\")return;if(!loaded||!scrollNumberEnabled)return;const handler=e=>{const value=Number(e.detail?.value);if(Number.isNaN(value)){log(\"scrollNumber: ignored non-numeric payload\",{detail:e.detail});return;}const rive=riveRef.current;let smInput=null;try{for(const name of rive?.stateMachineNames??[]){const inputs=rive.stateMachineInputs(name)??[];const match=inputs.find(i=>i.name===scrollNumberProp);if(match){smInput=match;break;}}}catch{}const vmProp=vmInstanceRef.current?.number?.(scrollNumberProp)??null;if(smInput)smInput.value=value;if(vmProp)vmProp.value=value;if(!smInput&&!vmProp){log(`scrollNumber: no \"${scrollNumberProp}\" number input/VM found`,{value});}else{log(\"scrollNumber: set\",{prop:scrollNumberProp,value,smInput:!!smInput,vmProp:!!vmProp});}};log(\"scrollNumber: listening\",{event:scrollNumberEvent,prop:scrollNumberProp});window.addEventListener(scrollNumberEvent,handler);return()=>window.removeEventListener(scrollNumberEvent,handler);},[loaded,scrollNumberEnabled,scrollNumberEvent,scrollNumberProp]);const hasPlaceholder=!!placeholderSrc||placeholderColor&&placeholderColor!==\"#00000000\"&&placeholderColor!==\"transparent\"&&placeholderColor!==\"rgba(0, 0, 0, 0)\";// When keepPlaceholder is on, stay visible forever. Otherwise fade out\n// once the Rive is loaded. Always rendering with opacity (rather than\n// conditional-unmount) keeps the transition smooth and avoids flicker\n// if `loaded` briefly toggles during a hot-reload.\nconst placeholderVisible=keepPlaceholder||!loaded;return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,role:decorative?\"presentation\":ariaLabel?\"img\":undefined,\"aria-hidden\":decorative?true:undefined,\"aria-label\":!decorative&&ariaLabel?ariaLabel:undefined,style:{position:\"relative\",width:\"100%\",height:\"100%\",pointerEvents:\"none\",// Contain the grain's blend so it composites against the canvas\n// (and placeholder) only — not the page behind the component.\nisolation:\"isolate\",// Clip the grain's overhang while it drifts.\noverflow:\"hidden\"},children:[hasPlaceholder&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,backgroundColor:placeholderColor,backgroundImage:placeholderSrc?`url(${placeholderSrc})`:undefined,backgroundRepeat:\"no-repeat\",// Frame to match the animation (or the user's override).\nbackgroundSize:phBackgroundSize,backgroundPosition:phFit===\"layout\"?\"center\":PLACEHOLDER_POS[phAlign]??\"center\",transform:`translate3d(${offsetX}px, ${offsetY}px, 0)`,opacity:placeholderVisible?1:0,transition:\"opacity 0.3s ease\",pointerEvents:\"none\",zIndex:0}}),/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"relative\",width:\"100%\",height:\"100%\",display:\"block\",opacity:loaded?1:0,transition:\"opacity 0.3s ease\",// Nudge the canvas position without resizing its draw buffer.\ntransform:`translate3d(${offsetX}px, ${offsetY}px, 0)`,zIndex:1}},src),grainEnabled&&noiseUrl&&/*#__PURE__*/_jsx(\"div\",{ref:grainDivRef,style:{position:\"absolute\",// Overhang by the drift distance so panning never\n// exposes an uncovered edge.\ninset:-Math.max(0,grainDistance),pointerEvents:\"none\",backgroundImage:`url(${noiseUrl})`,backgroundRepeat:\"repeat\",backgroundSize:`${256*grainSize}px`,imageRendering:\"pixelated\",mixBlendMode:grainBlend,// Fade in on mount (not tied to the Rive load); 0 = instant.\nopacity:grainFadeIn>0&&!grainShown?0:grainOpacity,transition:grainFadeIn>0?`opacity ${grainFadeIn}s ease`:undefined,willChange:\"transform\",zIndex:2}})]});}addPropertyControls(RiveAnimation,{// ---------- Source ----------\nsrc:{title:\"Rive File URL\",type:ControlType.String,defaultValue:\"\",placeholder:\"https://…/animation.riv\",description:\"URL to a *.riv* file.\"},artboard:{title:\"Artboard\",type:ControlType.String,defaultValue:\"\",placeholder:\"Leave empty for the default\",description:\"Name of the artboard to render. Leave blank to use the file's default artboard.\"},stateMachine:{title:\"State Machine\",type:ControlType.String,defaultValue:\"State Machine 1\",description:\"Name of the state machine to run.\\nMust match the name in the Rive editor exactly.\"},loading:{title:\"Loading\",type:ControlType.Enum,defaultValue:\"eager-high\",options:[\"eager-high\",\"eager-auto\",\"lazy\"],optionTitles:[\"Eager (High)\",\"Eager (Auto)\",\"Lazy\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\",description:\"When and how aggressively to load this file.\\n**Eager (High)** loads on page load at high priority — use for the hero / above-the-fold animation.\\n**Eager (Auto)** loads on page load but yields bandwidth to high-priority layers.\\n**Lazy** waits until the layer nears the viewport — best for offscreen animations so they don't slow the first one.\"},viewModelName:{title:\"View Model\",type:ControlType.String,defaultValue:\"\",placeholder:\"Leave blank if not used\",description:\"Name of a ViewModel in your Rive file. **Leave blank** if your animation only uses state-machine inputs — otherwise Rive logs a warning for every file without a linked ViewModel.\\nFill this in to bind a *named* ViewModel. Adding **Data Bindings** below auto-binds the artboard's default ViewModel even when this is blank.\"},// ---------- Data binding ----------\nbindings:{title:\"Data Bindings\",type:ControlType.Array,description:\"Push values into your ViewModel. Each row targets a VM property by **name** and type. Names must match the Rive editor exactly.\\nValues can be set here, bound to the CMS, or fed in from a code override.\",control:{type:ControlType.Object,buttonTitle:\"Property\",icon:\"object\",controls:{name:{title:\"Property\",type:ControlType.String,defaultValue:\"\",placeholder:\"e.g. score\"},type:{title:\"Type\",type:ControlType.Enum,defaultValue:\"number\",options:[\"number\",\"boolean\",\"string\"],optionTitles:[\"Number\",\"Boolean\",\"Text\"],displaySegmentedControl:true},numberValue:{title:\"Value\",type:ControlType.Number,defaultValue:0,displayStepper:true,hidden:p=>p.type!==\"number\"},booleanValue:{title:\"Value\",type:ControlType.Boolean,defaultValue:false,hidden:p=>p.type!==\"boolean\"},stringValue:{title:\"Value\",type:ControlType.String,defaultValue:\"\",hidden:p=>p.type!==\"string\"}}}},viewportPropName:{title:\"On Enter Property\",type:ControlType.String,defaultValue:\"onViewportEnter\",description:\"Name of a **boolean** property on your ViewModel (or state machine input) that gets set to *true* when the layer scrolls into view, and *false* when it leaves.\"},scrollPropName:{title:\"Scroll Position Property\",type:ControlType.String,defaultValue:\"scrollPosition\",description:\"Name of a **number** property on your ViewModel (or state machine input) driven *0 → 100* as the layer scrolls through the viewport.\\nUse to scrub a Rive animation with scroll.\"},// ---------- Playback ----------\nplay:{title:\"Playback\",type:ControlType.Boolean,defaultValue:true,enabledTitle:\"Play\",disabledTitle:\"Pause\",description:\"Master play/pause control for the live site.\"},playOnCanvas:{title:\"Play in Editor\",type:ControlType.Boolean,defaultValue:true,enabledTitle:\"Play\",disabledTitle:\"Pause\",description:\"Whether the Rive plays while you're working in the Framer canvas.\\nTurn off if it's distracting while designing.\",hidden:props=>!props.play},// ---------- Layout ----------\nfit:{title:\"Fit\",type:ControlType.Enum,defaultValue:\"contain\",options:[\"contain\",\"cover\",\"fill\",\"fitWidth\",\"fitHeight\",\"none\",\"scaleDown\",\"layout\"],optionTitles:[\"Contain\",\"Cover\",\"Fill\",\"Fit Width\",\"Fit Height\",\"None\",\"Scale Down\",\"Layout\"],description:\"How the Rive artboard sizes inside the layer:\\n**Contain** fits without cropping.\\n**Cover** fills and crops.\\n**Fill** stretches to fit.\\n**Layout** runs Rive's responsive layout engine so the artboard reflows to the layer size (requires a file authored with Layouts).\"},layoutScaleFactor:{title:\"Layout Scale\",type:ControlType.Number,defaultValue:1,min:.1,max:10,step:.1,description:\"Density multiplier for **Layout** fit. *1* matches the layer size; raise to zoom the layout in, lower to fit more content.\",hidden:props=>props.fit!==\"layout\"},alignment:{title:\"Alignment\",type:ControlType.Enum,defaultValue:\"center\",options:[\"center\",\"topLeft\",\"topCenter\",\"topRight\",\"centerLeft\",\"centerRight\",\"bottomLeft\",\"bottomCenter\",\"bottomRight\"],optionTitles:[\"Center\",\"Top Left\",\"Top Center\",\"Top Right\",\"Center Left\",\"Center Right\",\"Bottom Left\",\"Bottom Center\",\"Bottom Right\"],description:\"Where the artboard anchors within the layer when it doesn't fill exactly.\",hidden:props=>props.fit===\"layout\"},offsetX:{title:\"Offset X\",type:ControlType.Number,defaultValue:0,min:-2e3,max:2e3,step:1,unit:\"px\",displayStepper:true,description:\"Nudge the Rive canvas horizontally without resizing it. Positive = right.\"},offsetY:{title:\"Offset Y\",type:ControlType.Number,defaultValue:0,min:-2e3,max:2e3,step:1,unit:\"px\",displayStepper:true,description:\"Nudge the Rive canvas vertically without resizing it. Positive = down.\"},// ---------- Trigger ----------\nenterAt:{title:\"Enter At\",type:ControlType.Number,defaultValue:0,min:0,max:1,step:.05,description:\"How much of the layer must be on screen before *On Enter* fires. *0* fires the moment any pixel is visible; *1* requires the layer to fill the viewport (or be fully visible if it's shorter).\\nWorks for any layer height.\",hidden:props=>!!props.startOnWindowEvent},scrollStart:{title:\"Scroll Start\",type:ControlType.Number,defaultValue:100,min:0,max:100,step:1,unit:\"%\",description:\"Where on screen the scroll-driven animation begins, measured from the top of the viewport. *100%* = layer's top is just past the bottom edge; *0%* = layer's top is at the top of the screen.\"},scrollEnd:{title:\"Scroll End\",type:ControlType.Number,defaultValue:0,min:0,max:100,step:1,unit:\"%\",description:\"Where on screen the scroll-driven animation finishes. *0%* (top) is the common choice; raise it to finish the animation earlier as the layer scrolls up.\"},startOnWindowEvent:{title:\"Start On Window Event\",type:ControlType.String,defaultValue:\"\",placeholder:\"e.g. heroLoaded\",description:\"Listen for a custom *window event* with this name and start the animation when it fires — instead of using scroll position.\\nLeave blank to use the scroll/viewport trigger.\"},// ---------- Scroll-into-view number ----------\nscrollNumber:{title:\"Set Number On Scroll\",type:ControlType.Object,optional:true,icon:\"effect\",description:\"Write a number to a ViewModel property when *another element* scrolls into view. Put the **Scroll Set Number** override on that element (its value is sent via the event below).\",controls:{event:{title:\"Event\",type:ControlType.String,defaultValue:\"riveSetNumber\",description:\"Window event name to listen for. Must match the `EVENT` constant in the override on the trigger element.\"},property:{title:\"Property\",type:ControlType.String,defaultValue:\"\",placeholder:\"e.g. section\",description:\"Name of the **number** ViewModel property (or state-machine number input) to write. VM properties require the *View Model* field set or a Data Binding row so the VM is bound.\"}}},// ---------- Outgoing events ----------\nemitWindowEvent:{title:\"Emit Window Event\",type:ControlType.String,defaultValue:\"\",placeholder:\"e.g. heroAnimationDone\",description:\"When the Rive fires a *Rive Event*, dispatch a `CustomEvent` on `window` with this name.\\nUseful for triggering other components on the page.\"},riveEventName:{title:\"Rive Event Filter\",type:ControlType.String,defaultValue:\"\",placeholder:\"Any event\",description:\"Only rebroadcast Rive events with this specific name.\\nLeave blank to rebroadcast every event the Rive fires.\",hidden:props=>!props.emitWindowEvent},// ---------- Grain overlay ----------\ngrain:{title:\"Grain\",type:ControlType.Object,optional:true,icon:\"effect\",description:\"Adds an animated-feeling film grain over the Rive animation. It's a static texture blended in the canvas's own stacking context, so it never tints the colors — *Intensity 0* is invisible.\",controls:{type:{title:\"Type\",type:ControlType.Enum,defaultValue:\"standard\",options:[\"standard\",\"film\",\"digital\",\"rough\",\"color\"],optionTitles:[\"Standard\",\"Film\",\"Digital\",\"Rough\",\"Color\"],description:\"Grain character. **Film** (Gaussian) is the most photographic. **Color** is intentionally non-neutral and will tint.\"},intensity:{title:\"Intensity\",type:ControlType.Number,defaultValue:.5,min:0,max:1,step:.05,description:\"Grain strength as deviation around neutral gray. 0 = invisible, no tint.\"},opacity:{title:\"Opacity\",type:ControlType.Number,defaultValue:.5,min:0,max:1,step:.05},blendMode:{title:\"Blend Mode\",type:ControlType.Enum,defaultValue:\"overlay\",options:[\"normal\",\"multiply\",\"screen\",\"overlay\",\"darken\",\"lighten\",\"color-dodge\",\"color-burn\",\"hard-light\",\"soft-light\",\"difference\",\"exclusion\",\"hue\",\"saturation\",\"color\",\"luminosity\"],description:\"**overlay** / **soft-light** keep neutral gray as a no-op (recommended). **soft-light** is the gentlest.\"},size:{title:\"Size\",type:ControlType.Number,defaultValue:4,min:.1,max:20,step:.1,displayStepper:true},speed:{title:\"Drift Speed\",type:ControlType.Number,defaultValue:0,min:0,max:2,step:.05,description:\"How fast the grain wanders along a smooth noise-driven path. **0 = static.** GPU transform, so it's basically free on mobile.\"},distance:{title:\"Drift Distance\",type:ControlType.Number,defaultValue:100,min:0,max:300,step:5,unit:\"px\",description:\"Max distance the grain drifts from center (\\xb1). 100 = wander within ~100px.\"},seed:{title:\"Seed\",type:ControlType.Number,defaultValue:1,min:1,max:9999,step:1,displayStepper:true},fadeIn:{title:\"Fade In\",type:ControlType.Number,defaultValue:0,min:0,max:5,step:.1,unit:\"s\",description:\"Fade the grain in over this many seconds on mount (as soon as possible, independent of the Rive load). 0 = appear instantly.\"}}},// ---------- Loading state ----------\nplaceholder:{title:\"Loading State\",type:ControlType.Object,optional:true,icon:\"effect\",description:\"What to show while the Rive file is loading.\\nEnable to add an image or a color behind the canvas.\",controls:{image:{title:\"Image\",type:ControlType.ResponsiveImage,description:\"Optional image shown during loading — usually a static export of the first frame.\"},fit:{title:\"Fit\",type:ControlType.Enum,defaultValue:\"match\",options:[\"match\",\"contain\",\"cover\",\"fill\",\"fitWidth\",\"fitHeight\",\"none\",\"scaleDown\"],optionTitles:[\"Match Animation\",\"Contain\",\"Cover\",\"Fill\",\"Fit Width\",\"Fit Height\",\"None\",\"Scale Down\"],description:\"How the placeholder image is sized. **Match Animation** uses the layer's Fit so it frames exactly like the loaded Rive (no jump on fade).\"},alignment:{title:\"Alignment\",type:ControlType.Enum,defaultValue:\"match\",options:[\"match\",\"center\",\"topLeft\",\"topCenter\",\"topRight\",\"centerLeft\",\"centerRight\",\"bottomLeft\",\"bottomCenter\",\"bottomRight\"],optionTitles:[\"Match Animation\",\"Center\",\"Top Left\",\"Top Center\",\"Top Right\",\"Center Left\",\"Center Right\",\"Bottom Left\",\"Bottom Center\",\"Bottom Right\"],description:\"Where the image anchors when it doesn't fill the box. **Match Animation** follows the layer's Alignment. Ignored for Cover / Fill.\",hidden:p=>p.fit===\"cover\"||p.fit===\"fill\"||p.fit===\"layout\"},width:{title:\"Width\",type:ControlType.Number,defaultValue:0,min:0,max:4e3,step:1,unit:\"px\",description:\"Explicit image width for **None** fit. 0 = natural size.\",hidden:p=>p.fit!==\"none\"},height:{title:\"Height\",type:ControlType.Number,defaultValue:0,min:0,max:4e3,step:1,unit:\"px\",description:\"Explicit image height for **None** fit. 0 = natural size.\",hidden:p=>p.fit!==\"none\"},color:{title:\"Color\",type:ControlType.Color,defaultValue:\"#00000000\",description:\"Background color shown during loading. Default is transparent.\"},keep:{title:\"Keep\",type:ControlType.Boolean,defaultValue:false,enabledTitle:\"Always\",disabledTitle:\"Until Loaded\",description:\"**Always** — keep the placeholder visible behind the canvas after Rive loads.\\n**Until Loaded** — fade out once the Rive is ready.\"}}},// ---------- Accessibility ----------\nariaLabel:{title:\"ARIA Label\",type:ControlType.String,defaultValue:\"\",placeholder:\"Describe the animation\",description:\"Text read aloud by screen readers.\\nDescribe what the animation conveys — e.g. *Looping illustration of a heartbeat*. Leave blank if the Rive is purely decorative and you've turned on *Decorative* below.\",hidden:props=>props.decorative===true},decorative:{title:\"Decorative\",type:ControlType.Boolean,defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Mark this as decorative so screen readers skip it.\\nUse when the Rive is for visual flair only and isn't conveying information.\"},// ---------- Debug ----------\ndebug:{title:\"Debug Logs\",type:ControlType.Boolean,defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Log lifecycle and event activity to the browser console, prefixed with the artboard/file name.\\nUse to check whether the file loaded, the ViewModel bound, and whether scroll/viewport/event triggers are firing and finding their properties. Leave off for production.\\n\\n**On a published site** you don't need this toggle — open the console and run `riveDebug()` to switch logs on live (it persists across reloads; `riveDebug(false)` turns them off). You can also add `?riveDebug` to the URL, which enables logging *from page load* so you catch the init and load logs.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"RiveAnimation\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RiveWebGL2.map"],"mappings":"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"}