{"version":3,"file":"FetchRoundedText.BinpYPVM.mjs","names":["useState","useMemo"],"sources":["https:/framerusercontent.com/modules/jex36yfU7NdobElf706r/HYoasKEINbYjRaAlamWg/FetchRoundedText.js"],"sourcesContent":["// Instructions: Create a Framer text component that fetches a long decimal, lets the user round it as desired, and append a suffix after the data.\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";import{startTransition,useEffect,useMemo,useState}from\"react\";/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function FetchRoundedText(props){const{url,content,decimals,roundingMode,locale,useGrouping,suffix,loadingText,errorText,textColor,font,style}=props;const isStatic=useIsStaticRenderer();const isThumbnail=RenderTarget.current()===RenderTarget.thumbnail;const[fetchState,setFetchState]=useState({status:\"idle\"});useEffect(()=>{if(isThumbnail)return;if(typeof window===\"undefined\")return;if(!url||!url.trim()){startTransition(()=>setFetchState({status:\"idle\"}));return;}const controller=new AbortController;startTransition(()=>setFetchState({status:\"loading\"}));(async()=>{try{const res=await fetch(url,{method:\"GET\",signal:controller.signal});if(!res.ok)throw new Error(`HTTP ${res.status}`);const text=await res.text();startTransition(()=>setFetchState({status:\"success\",rawText:text}));}catch(e){if(e?.name===\"AbortError\")return;startTransition(()=>setFetchState({status:\"error\",message:e?.message?String(e.message):\"Fetch failed\"}));}})();return()=>controller.abort();},[url,isThumbnail]);const displayedRaw=useMemo(()=>{if(isThumbnail||isStatic)return content;if(fetchState.status===\"success\")return fetchState.rawText;if(fetchState.status===\"error\")return content;if(fetchState.status===\"loading\")return\"\";return content;},[fetchState,isStatic,isThumbnail,content]);const formatted=useMemo(()=>{const safeDecimals=Number.isFinite(decimals)?Math.max(0,Math.min(20,Math.round(decimals))):0;const raw=(displayedRaw??\"\").trim();if(!raw)return\"\";const num=Number.parseFloat(raw);if(!Number.isFinite(num)){// If server returns non-numeric text, show it as-is (plus suffix).\nreturn raw+(suffix||\"\");}const factor=Math.pow(10,safeDecimals);let rounded=num;if(safeDecimals===0){if(roundingMode===\"floor\")rounded=Math.floor(num);else if(roundingMode===\"ceil\")rounded=Math.ceil(num);else rounded=Math.round(num);}else{const scaled=num*factor;if(roundingMode===\"floor\")rounded=Math.floor(scaled)/factor;else if(roundingMode===\"ceil\")rounded=Math.ceil(scaled)/factor;else rounded=Math.round(scaled)/factor;}const nf=new Intl.NumberFormat(locale||undefined,{minimumFractionDigits:safeDecimals,maximumFractionDigits:safeDecimals,useGrouping});return nf.format(rounded)+(suffix||\"\");},[displayedRaw,decimals,roundingMode,locale,useGrouping,suffix]);const statusText=useMemo(()=>{if(isThumbnail)return formatted;if(!isStatic&&fetchState.status===\"loading\")return loadingText;if(!isStatic&&fetchState.status===\"error\")return errorText;return formatted;},[isStatic,isThumbnail,fetchState.status,formatted,loadingText,errorText]);const isFixedWidth=!!style&&style.width===\"100%\";const isFixedHeight=!!style&&style.height===\"100%\";return /*#__PURE__*/_jsx(\"span\",{style:{position:\"relative\",display:\"inline-block\",color:textColor,...isFixedWidth?{width:\"100%\"}:{width:\"max-content\",minWidth:\"max-content\"},...isFixedHeight?{height:\"100%\"}:undefined,whiteSpace:\"pre-wrap\",overflow:\"hidden\",textOverflow:\"ellipsis\",...font,...style},\"aria-live\":isStatic||isThumbnail?\"off\":\"polite\",children:statusText});}addPropertyControls(FetchRoundedText,{url:{type:ControlType.String,title:\"URL\",defaultValue:\"\",placeholder:\"https://example.com/value.txt\"},content:{type:ControlType.String,title:\"Content\",defaultValue:\"12345.6789012345\",placeholder:\"Fallback text / default value\",displayTextArea:true},decimals:{type:ControlType.Number,title:\"Decimals\",defaultValue:2,min:0,max:20,step:1},roundingMode:{type:ControlType.Enum,title:\"Rounding\",defaultValue:\"round\",options:[\"round\",\"floor\",\"ceil\"],optionTitles:[\"Round\",\"Floor\",\"Ceil\"],displaySegmentedControl:true},locale:{type:ControlType.String,title:\"Locale\",defaultValue:\"en-US\",placeholder:\"en-US\"},useGrouping:{type:ControlType.Boolean,title:\"Grouping\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\",placeholder:\"e.g. %\"},loadingText:{type:ControlType.String,title:\"Loading\",defaultValue:\"Loading…\"},errorText:{type:ControlType.String,title:\"Error\",defaultValue:\"—\"},textColor:{type:ControlType.Color,title:\"Text\",defaultValue:\"#000000\"},font:{type:ControlType.Font,title:\"Text Style\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:15,variant:\"Medium\",letterSpacing:\"-0.01em\",lineHeight:1.3}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FetchRoundedText\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FetchRoundedText.map"],"mappings":"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"}