{"version":3,"file":"LocalStorageField.CQmPmoz5.mjs","names":[],"sources":["https:/framerusercontent.com/modules/AVlIGSVgpDTpPr36wSb1/nnesUecr5EaKLwaNauCn/LocalStorageField.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useState,useMemo}from\"react\";/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 200\n * @framerIntrinsicHeight 40\n */export default function LocalStorageField(props){const{templateText,fallbackText,nameTransform,emailTransform,font,fontColor,padding,textAlign,wrapText}=props;const[storageValues,setStorageValues]=useState({});const isCanvas=RenderTarget.current()===RenderTarget.canvas;// Find localStorage key that contains the search term\nconst findMatchingKey=searchTerm=>{if(!searchTerm||typeof window===\"undefined\"||!window.localStorage)return null;const keys=Object.keys(window.localStorage);const lowerSearchTerm=searchTerm.toLowerCase();// Find the first key that contains the search term (case-insensitive)\nreturn keys.find(key=>key.toLowerCase().includes(lowerSearchTerm));};// Clean value by removing quotes\nconst cleanValue=value=>{if(!value)return\"\";// Remove leading and trailing quotes (both single and double)\nreturn value.replace(/^[\"']|[\"']$/g,\"\");};// Load all localStorage values\nconst loadStorageValues=()=>{if(typeof window===\"undefined\"||!window.localStorage)return{};const values={};// Common field patterns to look for\nconst fieldPatterns=[\"firstName\",\"lastname\",\"email\",\"phone\",\"company\",\"city\",\"country\"];fieldPatterns.forEach(pattern=>{const matchingKey=findMatchingKey(pattern);if(matchingKey){const value=window.localStorage.getItem(matchingKey);values[pattern.toLowerCase()]=cleanValue(value)||\"\";}});// Also check for any other variables in the template\nconst variableMatches=templateText?.match(/\\{([^}]+)\\}/g)||[];variableMatches.forEach(match=>{const varName=match.slice(1,-1).toLowerCase();if(!values[varName]){const matchingKey=findMatchingKey(varName);if(matchingKey){const value=window.localStorage.getItem(matchingKey);values[varName]=cleanValue(value)||\"\";}}});return values;};// Read from localStorage with SSR safety\nuseEffect(()=>{if(isCanvas)return;try{const values=loadStorageValues();setStorageValues(values);}catch(error){console.error(\"Error reading localStorage:\",error);setStorageValues({});}},[templateText,isCanvas]);// Listen for storage events (when localStorage changes in another tab/window)\nuseEffect(()=>{if(isCanvas)return;const handleStorageChange=()=>{// Reload all values when any storage changes\nconst values=loadStorageValues();setStorageValues(values);};window.addEventListener(\"storage\",handleStorageChange);return()=>window.removeEventListener(\"storage\",handleStorageChange);},[templateText,isCanvas]);// Text transformation functions\nconst transformText=(text,transform)=>{if(!text||!transform||transform===\"none\")return text;switch(transform){case\"uppercase\":return text.toUpperCase();case\"lowercase\":return text.toLowerCase();case\"capitalize\":return text.charAt(0).toUpperCase()+text.slice(1).toLowerCase();case\"startCase\":return text.toLowerCase().split(\" \").map(word=>word.charAt(0).toUpperCase()+word.slice(1)).join(\" \");default:return text;}};// Apply transformations to specific field types\nconst applyFieldTransform=(value,fieldName)=>{const lowerFieldName=fieldName.toLowerCase();// Apply name transformations to name fields\nif((lowerFieldName.includes(\"firstname\")||lowerFieldName.includes(\"lastname\")||lowerFieldName.includes(\"name\"))&&nameTransform){return transformText(value,nameTransform);}// Apply email transformations to email fields\nif(lowerFieldName.includes(\"email\")&&emailTransform){return transformText(value,emailTransform);}return value;};// Process template text and replace variables\nconst processTemplate=()=>{if(!templateText)return\"\";let processed=templateText;let hasReplacements=false;// Replace all {variable} patterns\nconst variableMatches=templateText.match(/\\{([^}]+)\\}/g)||[];variableMatches.forEach(match=>{const varName=match.slice(1,-1);const lowerVarName=varName.toLowerCase();if(storageValues[lowerVarName]){const transformedValue=applyFieldTransform(storageValues[lowerVarName],lowerVarName);processed=processed.replace(match,transformedValue);hasReplacements=true;}});// If no replacements were made and we have a fallback, use it\nif(!hasReplacements&&fallbackText){return fallbackText;}return processed;};// Memoize the display text\nconst displayText=useMemo(()=>{if(isCanvas){return templateText||\"{Your text with {variables}}\";}return processTemplate();},[isCanvas,templateText,fallbackText,storageValues,nameTransform,emailTransform]);// Compute text styles\nconst textStyles=useMemo(()=>{const styles={padding:typeof padding===\"number\"?`${padding}px`:padding,display:\"block\",width:\"100%\",wordBreak:wrapText?\"break-word\":\"normal\",whiteSpace:wrapText?\"normal\":\"nowrap\",overflow:wrapText?\"visible\":\"hidden\",textOverflow:wrapText?\"clip\":\"ellipsis\",color:fontColor,textAlign:textAlign||\"left\"};// Apply all font properties\nif(font){if(font.fontFamily)styles.fontFamily=font.fontFamily;if(font.fontSize!==undefined)styles.fontSize=typeof font.fontSize===\"number\"?`${font.fontSize}px`:font.fontSize;if(font.fontWeight!==undefined)styles.fontWeight=font.fontWeight;if(font.lineHeight!==undefined)styles.lineHeight=font.lineHeight;if(font.letterSpacing!==undefined)styles.letterSpacing=typeof font.letterSpacing===\"number\"?`${font.letterSpacing}px`:font.letterSpacing;// Only use font.textAlign if textAlign prop is not explicitly set\nif(font.textAlign&&!textAlign)styles.textAlign=font.textAlign;}return styles;},[padding,font,fontColor,textAlign,wrapText]);return /*#__PURE__*/_jsx(\"div\",{style:textStyles,children:displayText});}// Property Controls\naddPropertyControls(LocalStorageField,{templateText:{type:ControlType.String,title:\"Template Text\",defaultValue:\"Hello {firstName}!\",placeholder:\"Text with {variables}\",description:\"Use {variableName} to insert localStorage values\",displayTextArea:true},fallbackText:{type:ControlType.String,title:\"Fallback Text\",defaultValue:\"\",placeholder:\"Text when no variables found\",description:\"Text to display when no localStorage variables are found\"},nameTransform:{type:ControlType.Enum,title:\"Name Transform\",defaultValue:\"startCase\",options:[\"none\",\"uppercase\",\"lowercase\",\"capitalize\",\"startCase\"],optionTitles:[\"None\",\"UPPERCASE\",\"lowercase\",\"Capitalize\",\"Start Case\"],description:\"Transform for name fields (firstName, lastName, etc.)\"},emailTransform:{type:ControlType.Enum,title:\"Email Transform\",defaultValue:\"lowercase\",options:[\"none\",\"uppercase\",\"lowercase\"],optionTitles:[\"None\",\"UPPERCASE\",\"lowercase\"],description:\"Transform for email fields\"},// Font with Framer's native font picker and extended controls\nfont:{type:\"font\",title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontFamily:\"Inter\",fontSize:16,fontWeight:400,lineHeight:1.5,letterSpacing:0,textAlign:\"left\"}},fontColor:{type:ControlType.Color,title:\"Font Color\",defaultValue:\"#000000\"},textAlign:{type:ControlType.Enum,title:\"Text Align\",defaultValue:\"left\",options:[\"left\",\"center\",\"right\",\"justify\"],optionTitles:[\"Left\",\"Center\",\"Right\",\"Justify\"],description:\"How to align the text horizontally\"},wrapText:{type:ControlType.Boolean,title:\"Wrap Text\",defaultValue:true,description:\"Whether to wrap text to multiple lines\"},// Layout\npadding:{type:ControlType.FusedNumber,title:\"Padding\",defaultValue:0,toggleKey:\"paddingMixed\",toggleTitles:[\"All\",\"Individual\"],valueKeys:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"],min:0}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LocalStorageField\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"40\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicWidth\":\"200\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LocalStorageField.map"],"mappings":"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"}