{"version":3,"file":"BorderReveal_1.CvbK7y8T.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/f67cgTyjlvva1G8ifRZc/deQZh8RIa5hztCOroINC/BorderReveal_1.js"],"sourcesContent":["// Animated border that transforms from left to right or top to bottom when in view, with arrow icon control for direction and full Framer animation control. Only triggers on layer in view.\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useRef,useEffect,useState,startTransition}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * BorderReveal\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight fixed\n */export default function BorderReveal(props){const{direction=\"leftToRight\",transition={type:\"tween\",ease:\"easeInOut\",duration:.7,delay:0},borderColor,size,borderRadius,replay=false,style}=props;const ref=useRef(null);const[inView,setInView]=useState(false);const[hasAnimated,setHasAnimated]=useState(false);const isStatic=useIsStaticRenderer();useEffect(()=>{if(isStatic){setInView(true);return;}const node=ref.current;if(!node)return;let observer=null;observer=new window.IntersectionObserver(([entry])=>{if(replay){startTransition(()=>setInView(entry.isIntersecting));}else{if(entry.isIntersecting&&!hasAnimated){startTransition(()=>setInView(true));setHasAnimated(true);}}},{threshold:0});observer.observe(node);return()=>{if(observer&&node)observer.unobserve(node);};},[isStatic,replay,hasAnimated]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...style,position:\"relative\",width:direction===\"leftToRight\"?\"100%\":size,height:direction===\"leftToRight\"?size:\"100%\",minWidth:5,minHeight:5,overflow:\"hidden\",borderRadius,background:\"transparent\"},children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:direction===\"leftToRight\"?0:undefined,top:direction===\"topToBottom\"?0:undefined,width:direction===\"leftToRight\"?inView?\"100%\":0:size,height:direction===\"topToBottom\"?inView?\"100%\":0:size,background:borderColor,borderRadius,transition:transition.type===\"tween\"?`${direction===\"leftToRight\"?\"width\":\"height\"} ${transition.duration??.7}s ${transition.ease===\"linear\"?\"linear\":transition.ease===\"easeIn\"?\"cubic-bezier(0.4,0,1,1)\":transition.ease===\"easeOut\"?\"cubic-bezier(0,0,0.2,1)\":transition.ease===\"easeInOut\"?\"cubic-bezier(0.4,0,0.2,1)\":\"cubic-bezier(0.4,0,0.2,1)\"} ${transition.delay??0}s`:transition.type===\"spring\"?undefined:undefined},\"aria-hidden\":\"true\"})});}addPropertyControls(BorderReveal,{direction:{type:ControlType.Enum,title:\"Direction\",options:[\"leftToRight\",\"topToBottom\"],optionTitles:[\"→\",\"↓\"],defaultValue:\"leftToRight\",displaySegmentedControl:true},replay:{type:ControlType.Boolean,title:\"Replay\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},transition:{type:ControlType.Transition,title:\"Animation\"},borderColor:{type:ControlType.Color,title:\"Border Color\",defaultValue:\"#222\"},size:{type:ControlType.Number,title:\"Size\",defaultValue:4,min:1,max:40,step:1,unit:\"px\"},borderRadius:{type:ControlType.Number,title:\"Radius\",defaultValue:2,min:0,max:20,step:1,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"BorderReveal\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./BorderReveal_1.map"],"mappings":"qNAMG,SAAwB,EAAa,EAAM,CAAC,GAAK,CAAC,YAAU,cAAc,aAAW,CAAC,KAAK,QAAQ,KAAK,YAAY,SAAS,GAAG,MAAM,CAAC,EAAE,cAAY,OAAK,eAAa,SAAO,GAAM,SAAO,EAAY,EAAIA,EAAO,IAAI,EAAO,CAAC,EAAO,GAAWC,EAAS,EAAK,EAAO,CAAC,EAAY,GAAgBA,EAAS,EAAK,EAAQ,EAAS,EAAoB,EAA8c,OAA5c,MAAc,CAAC,GAAG,EAAS,CAAC,EAAU,EAAI,EAAE,MAAO,CAAC,IAAM,EAAK,EAAI,QAAQ,GAAG,CAAC,EAAK,OAAO,IAAI,EAAS,KAA2Q,MAAtQ,GAAS,IAAI,EAAO,sBAAsB,CAAC,KAAS,CAAI,EAAQ,MAAoB,EAAU,EAAM,cAAc,CAAC,EAAW,EAAM,gBAAgB,CAAC,IAAa,MAAoB,EAAU,EAAI,CAAC,EAAE,EAAe,EAAI,EAAI,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAS,QAAQ,CAAI,MAAY,CAAI,GAAU,GAAK,EAAS,UAAU,CAAI,CAAE,CAAE,EAAE,CAAC,EAAS,EAAO,CAAW,CAAC,EAAsB,EAAK,MAAM,CAAK,MAAI,MAAM,CAAC,GAAG,EAAM,SAAS,WAAW,MAAM,IAAY,cAAc,OAAO,EAAK,OAAO,IAAY,cAAc,EAAK,OAAO,SAAS,EAAE,UAAU,EAAE,SAAS,SAAS,eAAa,WAAW,aAAa,EAAE,SAAsB,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,KAAK,IAAY,cAAc,EAAE,IAAA,GAAU,IAAI,IAAY,cAAc,EAAE,IAAA,GAAU,MAAM,IAAY,cAAc,EAAO,OAAO,EAAE,EAAK,OAAO,IAAY,cAAc,EAAO,OAAO,EAAE,EAAK,WAAW,EAAY,eAAa,WAAW,EAAW,OAAO,QAAQ,GAAG,IAAY,cAAc,QAAQ,SAAS,GAAG,EAAW,UAAU,GAAG,IAAI,EAAW,OAAO,SAAS,SAAS,EAAW,OAAO,SAAS,0BAA0B,EAAW,OAAO,UAAU,2BAA0B,EAAW,KAAmB,6BAAwD,GAAG,EAAW,OAAO,EAAE,IAAG,EAAW,KAAgB,IAAA,GAAmB,EAAE,cAAc,MAAM,CAAC,CAAC,CAAC,CAAE,qBAL5sD,IAA6D,IAAwE,EAKwkD,EAAoB,EAAa,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,YAAY,QAAQ,CAAC,cAAc,aAAa,EAAE,aAAa,CAAC,IAAI,GAAG,EAAE,aAAa,cAAc,wBAAwB,EAAI,EAAE,OAAO,CAAC,KAAK,EAAY,QAAQ,MAAM,SAAS,aAAa,GAAM,aAAa,MAAM,cAAc,IAAI,EAAE,WAAW,CAAC,KAAK,EAAY,WAAW,MAAM,WAAW,EAAE,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,MAAM,EAAE,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC"}