{"version":3,"file":"shared-lib.DiIck2Jt.mjs","names":["useMemo","useRef","useState","metadata","metadata","siteMetadata","metadataVersion","__FramerMetadata__","siteMetadata"],"sources":["https:/framerusercontent.com/modules/DBlEr9u2SYeuIe50MDRC/mhseRsbskWG1Sl4qRRPO/CircularProgressGraph.js","https:/framerusercontent.com/modules/c5UgWUFLa5RTzFygOtMk/zd4NM4CbVYdYGcPOUK0W/siteMetadata.js","https:/framerusercontent.com/modules/1SvoDiRWHxikPVn4YWYS/Z9RO1grFmd6bTmVD9Iw5/augiA20Il.js","https:/framerusercontent.com/modules/UsKZxhdxeNhmxkVI4YIH/raGzlCyMVtIcGNGpABP5/p7AHBFBRI.js"],"sourcesContent":["// Circular Graph component with customizable stroke, fill, value, font, and animation toggle\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useMemo,useRef,useLayoutEffect,useState}from\"react\";import{useInView}from\"framer-motion\";/**\n * Circular Graph\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function CircularProgressGraph(props){const{value=66,strokeWidth=2,strokeColor=\"#fff\",fillColor=\"#FFB347\",valueFont={fontSize:32,variant:\"Bold\",letterSpacing:\"-0.04em\",lineHeight:\"1em\"},textStyle=\"Custom\",animate=true,animationDuration=.9,style={}}=props;// Determine which font style to use\nconst appliedFont=useMemo(()=>{if(textStyle&&textStyle!==\"Custom\"&&textStyleMap[textStyle]){return textStyleMap[textStyle];}return valueFont;},[textStyle,valueFont]);// Sizing\n// Responsive sizing\nconst containerRef=useRef(null);const[containerSize,setContainerSize]=useState({width:180,height:220});useLayoutEffect(()=>{if(!containerRef.current)return;const node=containerRef.current;function update(){setContainerSize({width:node.offsetWidth,height:node.offsetHeight});}update();// @ts-ignore\nconst ro=new(window.ResizeObserver||window.MozResizeObserver||window.WebKitResizeObserver)(update);ro.observe(node);return()=>ro.disconnect();},[]);// Reserve space for text below the SVG\nconst textMargin=16;const minTextHeight=32;const textHeight=Math.max(minTextHeight,containerSize.height*.13);const availableHeight=Math.max(0,containerSize.height-textHeight-textMargin);const size=Math.max(0,Math.min(containerSize.width,availableHeight));const radius=(size-strokeWidth)/2;const center=size/2;// Clamp value\nconst percent=Math.max(0,Math.min(100,value));// Animation for appear effect and counter\nconst[animatedPercent,setAnimatedPercent]=useState(animate?0:percent);const[displayedValue,setDisplayedValue]=useState(animate?0:percent);// In-view detection\nconst inViewRef=useRef(null);const isInView=useInView(inViewRef,{once:true,margin:\"-20% 0px -20% 0px\"});useLayoutEffect(()=>{if(!animate){setAnimatedPercent(percent);setDisplayedValue(percent);return;}if(!isInView)return;let frame;let start=null;const duration=Math.max(.1,animationDuration)*1e3// ms\n;const from=0;const to=percent;function step(ts){if(start===null)start=ts;const elapsed=ts-start;let t=Math.min(1,elapsed/duration);// ease-out cubic\nt=1-Math.pow(1-t,3);const current=from+(to-from)*t;setAnimatedPercent(current);setDisplayedValue(Math.round(current));if(t<1){frame=requestAnimationFrame(step);}else{setAnimatedPercent(to);setDisplayedValue(Math.round(to));}}frame=requestAnimationFrame(step);return()=>cancelAnimationFrame(frame);},[percent,animate,isInView,animationDuration]);// Ensure innerRadius is always between 0 and maxInnerRadius\nconst maxInnerRadius=Math.max(0,radius-strokeWidth*2);const innerRadius=maxInnerRadius*(animatedPercent/100);// Anchor the bottom of the inner circle to the bottom of the outer circle\n// If innerRadius is 0, innerCenterY should be at the bottom; if max, at center\nconst innerCenterY=center+radius-innerRadius;// Use solid fill color for inner circle\nconst fill=fillColor;// Calculate y positions for lines (in px, relative to SVG)\n// Top line at the top of the inner circle (animated)\nconst topY=innerCenterY-innerRadius;// Bottom line at the bottom of the outer circle\nconst bottomY=center+radius;// Calculate SVG vertical offset to center it in the available space\nconst svgTop=Math.max(0,(containerSize.height-textHeight-textMargin-size)/2);return /*#__PURE__*/_jsxs(\"div\",{ref:el=>{containerRef.current=el;inViewRef.current=el;},style:{...style,width:\"100%\",height:\"100%\",minHeight:120,position:\"relative\",background:\"transparent\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:0,width:\"100%\",height:1,background:strokeColor,top:svgTop+topY,zIndex:2}}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:0,width:\"100%\",height:1,background:strokeColor,top:svgTop+bottomY,zIndex:2}}),/*#__PURE__*/_jsx(\"div\",{style:{width:size,height:size,position:\"absolute\",left:\"50%\",top:svgTop,transform:\"translateX(-50%)\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:/*#__PURE__*/_jsxs(\"svg\",{width:size,height:size,style:{display:\"block\",position:\"relative\",zIndex:1},children:[/*#__PURE__*/_jsx(\"circle\",{cx:center,cy:center,r:radius,stroke:strokeColor,strokeWidth:strokeWidth,fill:\"none\",style:{paintOrder:\"stroke\"}}),/*#__PURE__*/_jsx(\"circle\",{cx:center,cy:innerCenterY,r:innerRadius,fill:fill,style:{}})]})}),/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",left:0,width:\"100%\",top:svgTop+size+textMargin,color:strokeColor,textAlign:\"center\",userSelect:\"none\",...appliedFont,fontSize:appliedFont.fontSize||Math.max(20,size*.22)},children:[displayedValue,\"%\"]})]});}const textStyles=[{key:\"Custom\",title:\"Custom\"},{key:\"heading1\",title:\"Heading 1\"},{key:\"heading2\",title:\"Heading 2\"},{key:\"heading3\",title:\"Heading 3\"},{key:\"heading4\",title:\"Heading 4\"},{key:\"paragraph\",title:\"Paragraph\"},{key:\"buttonText\",title:\"Button Text\"}];const textStyleMap={heading1:{fontSize:\"40px\",variant:\"Bold\",letterSpacing:\"-0.04em\",lineHeight:\"1em\"},heading2:{fontSize:\"32px\",variant:\"Semibold\",letterSpacing:\"-0.03em\",lineHeight:\"1em\"},heading3:{fontSize:\"22px\",variant:\"Semibold\",letterSpacing:\"-0.01em\",lineHeight:\"1.2em\"},heading4:{fontSize:\"15px\",variant:\"Medium\",letterSpacing:\"-0.01em\",lineHeight:\"1em\"},paragraph:{fontSize:\"15px\",variant:\"Medium\",letterSpacing:\"-0.01em\",lineHeight:\"1.3em\"},buttonText:{variant:\"Semibold\",fontSize:\"14px\",letterSpacing:\"-0.01em\",lineHeight:\"1em\"}};addPropertyControls(CircularProgressGraph,{value:{type:ControlType.Number,title:\"Value\",min:0,max:100,defaultValue:66,unit:\"%\",displayStepper:true},strokeWidth:{type:ControlType.Number,title:\"Stroke Width\",min:1,max:16,defaultValue:2,unit:\"px\",displayStepper:true},strokeColor:{type:ControlType.Color,title:\"Stroke Color\",defaultValue:\"#FFFFFF\"},fillColor:{type:ControlType.Color,title:\"Fill Color\",defaultValue:\"#FFB347\"},textStyle:{type:ControlType.Enum,title:\"Text Style\",options:textStyles.map(s=>s.key),optionTitles:textStyles.map(s=>s.title),defaultValue:\"Custom\"},valueFont:{type:ControlType.Font,title:\"Value Font\",defaultValue:{fontSize:32,variant:\"Bold\",letterSpacing:\"-0.04em\",lineHeight:\"1em\"},controls:\"extended\",defaultFontType:\"sans-serif\",hidden:props=>props.textStyle&&props.textStyle!==\"Custom\"},animate:{type:ControlType.Boolean,title:\"Animate\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},animationDuration:{type:ControlType.Number,title:\"Anim Duration\",min:.1,max:10,step:.1,defaultValue:.9,unit:\"s\",displayStepper:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CircularProgressGraph\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CircularProgressGraph.map","const metadata=params=>({description:\"Made with Framer\",title:\"My Framer Site\"});export default metadata;export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (3406f4c)\nimport siteMetadata from\"https://framerusercontent.com/modules/c5UgWUFLa5RTzFygOtMk/zd4NM4CbVYdYGcPOUK0W/siteMetadata.js\";export default function metadata(params,activeLocale){return{breakpoints:[{hash:\"72rtr7\"}],description:siteMetadata(params,activeLocale).description,elements:{},robots:\"max-image-preview:large\",serializationId:\"framer-ETJyr\",title:siteMetadata(params,activeLocale).title||\"Home\",viewport:\"width=1200\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (3406f4c)\nimport siteMetadata from\"https://framerusercontent.com/modules/c5UgWUFLa5RTzFygOtMk/zd4NM4CbVYdYGcPOUK0W/siteMetadata.js\";export default function metadata(params,activeLocale){return{breakpoints:[{hash:\"zmy0qv\"}],description:siteMetadata(params,activeLocale).description,elements:{},robots:\"max-image-preview:large\",serializationId:\"framer-Na431\",title:siteMetadata(params,activeLocale).title||\"Showcase\",viewport:\"width=1200\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}