{"version":3,"file":"ButtonHoverAnimation.DEMpLRdP.mjs","names":["React.useRef","React.useCallback","_Fragment","React.useLayoutEffect","React.useEffect"],"sources":["https:/framerusercontent.com/modules/yFIzhdWKa9p5UHgg88Dw/1Umpd4Qp9qtu4HXgdpbv/ButtonHoverAnimation.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import{forwardRef}from\"react\";const SCOPE=\"framer-fill-left-override\";const FILL_LEFT_MS=1100;const FILL_EASE=\"cubic-bezier(0.22, 1, 0.36, 1)\";const ENTER_ABORT_THRESHOLD=.62;const EXIT_RESTART_THRESHOLD=.28;// Label colour timing.\n//\n// FILL_EASE front-loads the movement: by 150ms the fill has\n// already crossed roughly half the button, which is where the\n// text sits. So the delay is short. Raise LABEL_IN_DELAY_MS if\n// the text turns before the fill reaches it, lower it if the\n// text feels late.\nconst LABEL_IN_DELAY_MS=90;const LABEL_IN_MS=160;const LABEL_OUT_MS=140;const css=`\n.${SCOPE} {\n  position: relative;\n  overflow: hidden;\n  isolation: isolate;\n  transform: translateZ(0);\n}\n\n\n.${SCOPE} .ffl-fill {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  z-index: 0;\n  background: var(--ffl-accent, #D2BBA0);\n  transform: translate3d(-110%, 0, 0);\n  transition: none;\n  pointer-events: none;\n  will-change: transform;\n}\n\n.${SCOPE} .ffl-content {\n  position: relative;\n  z-index: 2;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%;\n}\n\n.${SCOPE} .ffl-content > * {\n  position: relative;\n  z-index: 2;\n}\n\n/* Label colour on hover.\n   Applied to every descendant because Framer sets colour on the\n   inner text nodes, not on the wrapper. */\n.${SCOPE} .ffl-content,\n.${SCOPE} .ffl-content * {\n  transition: color ${LABEL_OUT_MS}ms ease 0ms;\n}\n\n.${SCOPE}:hover .ffl-content,\n.${SCOPE}:hover .ffl-content *,\n.${SCOPE}:focus-visible .ffl-content,\n.${SCOPE}:focus-visible .ffl-content * {\n  color: var(--ffl-label-hover, #FFFFFF) !important;\n  transition: color ${LABEL_IN_MS}ms ease ${LABEL_IN_DELAY_MS}ms;\n}\n`;let injected=false;const canUseDOM=typeof window!==\"undefined\"&&typeof document!==\"undefined\";const useIsomorphicLayoutEffect=canUseDOM?React.useLayoutEffect:React.useEffect;function ensureCss(){if(!canUseDOM||injected)return;const style=document.createElement(\"style\");style.textContent=css;document.head.appendChild(style);injected=true;}function readTranslateX(el){if(!canUseDOM)return 0;const t=window.getComputedStyle(el).transform;if(!t||t===\"none\")return 0;const m2=t.match(/^matrix\\((.+)\\)$/);if(m2){const parts=m2[1].split(\",\").map(s=>parseFloat(s.trim()));return Number.isFinite(parts[4])?parts[4]:0;}const m3=t.match(/^matrix3d\\((.+)\\)$/);if(m3){const parts=m3[1].split(\",\").map(s=>parseFloat(s.trim()));return Number.isFinite(parts[12])?parts[12]:0;}return 0;}function mergeHandlers(a,b){return e=>{a?.(e);b?.(e);};}function wrapChildren(children){return /*#__PURE__*/_jsx(\"span\",{className:\"ffl-content\",children:children});}export function withFillLeftHover(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const rootRef=React.useRef(null);const fillARef=React.useRef(null);const fillBRef=React.useRef(null);const activeIdxRef=React.useRef(0);const phaseRef=React.useRef([\"idle\",\"idle\"]);const fallbackTimerRef=React.useRef([null,null]);React.useEffect(()=>{ensureCss();},[]);const setRefs=node=>{rootRef.current=node;if(typeof ref===\"function\")ref(node);else if(ref&&typeof ref===\"object\"){ref.current=node;}};const fillRefAt=i=>i===0?fillARef:fillBRef;const otherIdx=i=>i===0?1:0;const clearFallback=React.useCallback(i=>{const t=fallbackTimerRef.current[i];if(t&&typeof clearTimeout!==\"undefined\")clearTimeout(t);fallbackTimerRef.current[i]=null;},[]);React.useEffect(()=>{return()=>{clearFallback(0);clearFallback(1);};},[clearFallback]);const snapLeft=React.useCallback(i=>{const el=fillRefAt(i).current;if(!el)return;clearFallback(i);el.style.transition=\"none\";el.style.transform=\"translate3d(-110%,0,0)\";el.getBoundingClientRect();phaseRef.current[i]=\"idle\";},[clearFallback]);const animateTo=React.useCallback((i,x,ms)=>{const el=fillRefAt(i).current;if(!el)return;clearFallback(i);el.style.transition=`transform ${ms}ms ${FILL_EASE}`;el.style.transform=`translate3d(${x},0,0)`;},[clearFallback]);const getEnterProgress=React.useCallback(i=>{const el=fillRefAt(i).current;if(!el)return 0;const w=el.getBoundingClientRect().width||1;const x=readTranslateX(el);const startX=-1.1*w;const endX=0;return Math.min(Math.max((x-startX)/(endX-startX),0),1);},[]);const getExitProgress=React.useCallback(i=>{const el=fillRefAt(i).current;if(!el)return 0;const w=el.getBoundingClientRect().width||1;const x=readTranslateX(el);return Math.min(Math.max(x/(1.1*w),0),1);},[]);const scheduleFallbackIdle=React.useCallback((i,ms)=>{clearFallback(i);if(typeof setTimeout===\"undefined\")return;fallbackTimerRef.current[i]=setTimeout(()=>{const ph=phaseRef.current[i];if(ph===\"leavingRight\"||ph===\"leavingLeft\")snapLeft(i);},ms+120);},[clearFallback,snapLeft]);const startEnter=React.useCallback(i=>{const el=fillRefAt(i).current;if(!el)return;el.style.transition=\"none\";el.style.transform=\"translate3d(-110%,0,0)\";el.getBoundingClientRect();phaseRef.current[i]=\"entering\";animateTo(i,\"0%\",FILL_LEFT_MS);},[animateTo]);const startExitRight=React.useCallback(i=>{phaseRef.current[i]=\"leavingRight\";animateTo(i,\"110%\",FILL_LEFT_MS);scheduleFallbackIdle(i,FILL_LEFT_MS);},[animateTo,scheduleFallbackIdle]);const startBackLeft=React.useCallback((i,enterP)=>{const backMs=Math.max(140,Math.round(FILL_LEFT_MS*enterP));phaseRef.current[i]=\"leavingLeft\";animateTo(i,\"-110%\",backMs);scheduleFallbackIdle(i,backMs);},[animateTo,scheduleFallbackIdle]);useIsomorphicLayoutEffect(()=>{snapLeft(0);snapLeft(1);activeIdxRef.current=0;},[snapLeft]);const enterFill=React.useCallback(()=>{const active=activeIdxRef.current;const ph=phaseRef.current[active];if(ph===\"leavingRight\"){const exitP=getExitProgress(active);const other=otherIdx(active);const otherPhase=phaseRef.current[other];if(exitP>=EXIT_RESTART_THRESHOLD&&otherPhase===\"idle\"){activeIdxRef.current=other;startEnter(other);return;}phaseRef.current[active]=\"entering\";animateTo(active,\"0%\",FILL_LEFT_MS);return;}if(ph===\"leavingLeft\"){phaseRef.current[active]=\"entering\";animateTo(active,\"0%\",FILL_LEFT_MS);return;}if(ph===\"idle\"){startEnter(active);}},[getExitProgress,startEnter,animateTo]);const leaveFill=React.useCallback(()=>{const idx=activeIdxRef.current;const ph=phaseRef.current[idx];const enterP=getEnterProgress(idx);if((ph===\"entering\"||ph===\"entered\")&&enterP<ENTER_ABORT_THRESHOLD){startBackLeft(idx,enterP);return;}startExitRight(idx);},[getEnterProgress,startBackLeft,startExitRight]);const onFillTransitionEnd=React.useCallback(e=>{if(e.propertyName!==\"transform\")return;const t=e.target;const idx=t===fillARef.current?0:t===fillBRef.current?1:0;const ph=phaseRef.current[idx];if(ph===\"entering\"){phaseRef.current[idx]=\"entered\";return;}if(ph===\"leavingRight\"||ph===\"leavingLeft\"){snapLeft(idx);const hovered=!!rootRef.current?.matches?.(\":hover\");if(hovered&&activeIdxRef.current===idx)startEnter(idx);}},[snapLeft,startEnter]);const className=[props.className,SCOPE].filter(Boolean).join(\" \");const style={...props.style,[\"--ffl-accent\"]:props.fillLeftColor||\"#9E8164\",[\"--ffl-label-hover\"]:props.labelHoverColor||\"#FFFFFF\"};const content=/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"span\",{ref:fillARef,className:\"ffl-fill\",\"aria-hidden\":\"true\",onTransitionEnd:onFillTransitionEnd}),/*#__PURE__*/_jsx(\"span\",{ref:fillBRef,className:\"ffl-fill\",\"aria-hidden\":\"true\",onTransitionEnd:onFillTransitionEnd}),wrapChildren(props.children)]});return /*#__PURE__*/_jsx(Component,{ref:setRefs,...props,className:className,style:style,onMouseEnter:mergeHandlers(props.onMouseEnter,enterFill),onMouseLeave:mergeHandlers(props.onMouseLeave,leaveFill),onFocus:mergeHandlers(props.onFocus,enterFill),onBlur:mergeHandlers(props.onBlur,leaveFill),children:content});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withFillLeftHover\":{\"type\":\"reactHoc\",\"name\":\"withFillLeftHover\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ButtonHoverAnimation.map"],"mappings":"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"}