{"version":3,"file":"Circular_Timer.CuGbpw0o.mjs","names":["React.useRef","React.useState","React.useCallback","customEvent"],"sources":["https:/framerusercontent.com/modules/mZkkarNRHyH2kJoStv22/FEFPC2jO5GO3IMtLtXrW/Circular_Timer.js"],"sourcesContent":["// @ts-nocheck\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{useEffect}from\"react\";import{motion,useAnimation}from\"framer-motion\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * @framerDisableUnlink\n * @framerIntrinsicWidth 200\n * @framerIntrinsicHeight 200\n */export default function CircularTimer(props){const{duration,color,trackColor,strokeWidth,isPlaying,loop,restartKey,onComplete,style}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const controls=useAnimation();const rootRef=React.useRef(null);const[runtimePlaying,setRuntimePlaying]=React.useState(Boolean(isPlaying));const[runtimeRestartNonce,setRuntimeRestartNonce]=React.useState(0);const runTokenRef=React.useRef(0);const previousRestartKeyRef=React.useRef(String(restartKey));// 100x100 viewBox for scalable vector graphics\nconst center=50;const normalizedStroke=Math.min(strokeWidth,50);const radius=center-normalizedStroke/2;const circumference=2*Math.PI*radius;const stopAndNormalizeEmpty=React.useCallback(()=>{runTokenRef.current+=1;controls.stop();controls.set({strokeDashoffset:circumference});},[circumference,controls]);useEffect(()=>{if(!isCanvas)return;stopAndNormalizeEmpty();React.startTransition(()=>{setRuntimePlaying(false);});},[isCanvas,stopAndNormalizeEmpty]);useEffect(()=>{if(isCanvas){stopAndNormalizeEmpty();React.startTransition(()=>{setRuntimePlaying(false);});return;}React.startTransition(()=>{setRuntimePlaying(Boolean(isPlaying));});if(isPlaying){return;}stopAndNormalizeEmpty();},[isCanvas,isPlaying,stopAndNormalizeEmpty]);useEffect(()=>{const nextRestartKey=String(restartKey);if(previousRestartKeyRef.current===nextRestartKey)return;previousRestartKeyRef.current=nextRestartKey;if(isCanvas){stopAndNormalizeEmpty();return;}stopAndNormalizeEmpty();React.startTransition(()=>{setRuntimeRestartNonce(value=>value+1);});},[isCanvas,restartKey,stopAndNormalizeEmpty]);useEffect(()=>{const root=rootRef.current;if(!root||typeof window===\"undefined\")return;const handleControl=event=>{const customEvent=event;const detail=customEvent.detail;if(!detail)return;if(isCanvas){stopAndNormalizeEmpty();React.startTransition(()=>{setRuntimePlaying(false);});return;}if(detail.playing===false){stopAndNormalizeEmpty();React.startTransition(()=>{setRuntimePlaying(false);});return;}if(detail.restart){stopAndNormalizeEmpty();}if(typeof detail.playing===\"boolean\"){React.startTransition(()=>{setRuntimePlaying(detail.playing);});}if(detail.restart){React.startTransition(()=>{setRuntimeRestartNonce(value=>value+1);});}};root.addEventListener(\"industriesTimerControl\",handleControl);return()=>{root.removeEventListener(\"industriesTimerControl\",handleControl);};},[isCanvas,stopAndNormalizeEmpty]);useEffect(()=>{if(isCanvas){stopAndNormalizeEmpty();return;}const token=runTokenRef.current+1;runTokenRef.current=token;const runTimer=async()=>{if(!runtimePlaying){controls.stop();return;}controls.stop();controls.set({strokeDashoffset:circumference});const animationPromise=controls.start({strokeDashoffset:0,transition:{duration:duration/1e3,ease:\"linear\",repeat:loop?Infinity:0}});if(!loop){await animationPromise;if(runTokenRef.current===token&&onComplete){onComplete();}}};runTimer();return()=>{if(runTokenRef.current===token){runTokenRef.current+=1;}};},[isCanvas,runtimePlaying,duration,loop,runtimeRestartNonce,circumference,controls,onComplete,stopAndNormalizeEmpty]);return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,\"data-circular-timer-root\":\"\",style:{...style,display:\"flex\",justifyContent:\"center\",alignItems:\"center\"},children:/*#__PURE__*/_jsxs(\"svg\",{width:\"100%\",height:\"100%\",viewBox:\"0 0 100 100\",style:{transform:\"rotate(-90deg)\",overflow:\"visible\"},children:[/*#__PURE__*/_jsx(\"circle\",{cx:center,cy:center,r:radius,fill:\"transparent\",stroke:trackColor,strokeWidth:normalizedStroke}),/*#__PURE__*/_jsx(motion.circle,{cx:center,cy:center,r:radius,fill:\"transparent\",stroke:color,strokeWidth:normalizedStroke,strokeDasharray:circumference,initial:{strokeDashoffset:circumference},animate:controls,strokeLinecap:\"round\"})]})});}CircularTimer.defaultProps={duration:5e3,color:\"#0099FF\",trackColor:\"#E5E5E5\",strokeWidth:4,isPlaying:true,loop:false,restartKey:\"1\"};addPropertyControls(CircularTimer,{duration:{type:ControlType.Number,title:\"Duration (ms)\",min:100,max:36e5,step:100,defaultValue:5e3,displayStepper:true},color:{type:ControlType.Color,title:\"Progress Color\",defaultValue:\"#0099FF\"},trackColor:{type:ControlType.Color,title:\"Track Color\",defaultValue:\"#E5E5E5\"},strokeWidth:{type:ControlType.Number,title:\"Outline Width\",min:1,max:50,step:1,defaultValue:4,unit:\"px\",displayStepper:true},isPlaying:{type:ControlType.Boolean,title:\"State\",enabledTitle:\"Play\",disabledTitle:\"Pause\",defaultValue:true},loop:{type:ControlType.Boolean,title:\"Loop Progress\",defaultValue:false},restartKey:{type:ControlType.String,title:\"Restart Key\",defaultValue:\"1\",description:\"Change this in each variant (e.g. 1, 2, 3) to force the timer to restart.\"},onComplete:{type:ControlType.EventHandler}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CircularTimer\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"200\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"* @framerIntrinsicWidth 200\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Circular_Timer.map"],"mappings":"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"}