{"version":3,"file":"LocaleTextAlignment.arFlCSSV.mjs","names":["useState"],"sources":["https:/framerusercontent.com/modules/8PhieXoDZppQWLAjE4l5/6Z1XRetiaMUJdx9lON3p/LocaleTextAlignment.js"],"sourcesContent":["// Component that automatically detects locale and applies text alignment globally to all text elements on the page\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState,startTransition}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */export default function GlobalLocaleAlignment(props){const{enabled,localeMode,manualLocale,showIndicator,indicatorPosition}=props;const[textDirection,setTextDirection]=useState(\"ltr\");const[detectedLocale,setDetectedLocale]=useState(\"\");useEffect(()=>{if(!enabled||typeof window===\"undefined\")return;const updateAlignment=()=>{// Get locale based on mode\nconst locale=localeMode===\"manual\"?manualLocale:navigator.language||navigator.languages?.[0]||\"en\";// RTL languages (Arabic, Hebrew, Persian, Urdu, etc.)\nconst rtlLanguages=[\"ar\",\"he\",\"fa\",\"ur\",\"ps\",\"sd\",\"ku\",\"dv\",\"yi\"];// Check if the language code starts with any RTL language\nconst isRTL=rtlLanguages.some(lang=>locale.toLowerCase().startsWith(lang));startTransition(()=>{setTextDirection(isRTL?\"rtl\":\"ltr\");setDetectedLocale(locale);});// Create or update global CSS for text alignment\nconst styleId=\"global-locale-alignment\";let existingStyle=document.getElementById(styleId);if(!existingStyle){existingStyle=document.createElement(\"style\");existingStyle.id=styleId;document.head.appendChild(existingStyle);}// Apply global text alignment without affecting layout\nconst css=`\n                /* Preserve ALL center alignment with highest priority */\n                *[style*=\"text-align: center\"],\n                *[style*=\"text-align:center\"],\n                *.text-center,\n                *[class*=\"text-center\"],\n                *[data-text-align=\"center\"] {\n                    text-align: center !important;\n                    direction: ltr !important;\n                }\n                \n                /* Only apply RTL changes for specific text elements that are NOT centered */\n                ${isRTL?`\n                /* Target specific text elements only if they don't have center alignment */\n                p:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                h1:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                h2:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                h3:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                h4:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                h5:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                h6:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                span:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                div:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]):not([style*=\"display: flex\"]):not([style*=\"display:flex\"]):not(.flex):not([class*=\"flex\"]):not([style*=\"display: grid\"]):not([style*=\"display:grid\"]):not(.grid):not([class*=\"grid\"]),\n                label:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                li:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                td:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                th:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]) {\n                    text-align: right !important;\n                    direction: rtl !important;\n                }\n                \n                /* Apply RTL to input elements but preserve center alignment */\n                input:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                textarea:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]),\n                select:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]) {\n                    direction: rtl !important;\n                    text-align: right !important;\n                }\n                \n                /* Apply RTL to button text but preserve center alignment */\n                button:not([style*=\"text-align: center\"]):not([style*=\"text-align:center\"]):not(.text-center):not([class*=\"text-center\"]):not([data-text-align=\"center\"]) {\n                    direction: rtl !important;\n                }\n                `:\"\"}\n                \n                /* Always preserve layout containers */\n                [style*=\"display: flex\"],\n                [style*=\"display:flex\"],\n                .flex,\n                [class*=\"flex\"],\n                [style*=\"display: grid\"],\n                [style*=\"display:grid\"],\n                .grid,\n                [class*=\"grid\"] {\n                    direction: ltr !important;\n                }\n                \n                /* Always preserve media elements */\n                img, video, canvas, svg, iframe {\n                    direction: ltr !important;\n                }\n            `;existingStyle.textContent=css;};// Initial update\nupdateAlignment();// Only set up listeners for auto mode\nif(localeMode===\"auto\"){// Listen for language changes\nwindow.addEventListener(\"languagechange\",updateAlignment);// Also listen for storage events in case language is changed in another tab\nwindow.addEventListener(\"storage\",updateAlignment);// Poll for changes every 2 seconds as a fallback\nconst pollInterval=setInterval(()=>{const currentLocale=navigator.language||navigator.languages?.[0]||\"en\";if(currentLocale!==detectedLocale){updateAlignment();}},2e3);// Cleanup function\nreturn()=>{window.removeEventListener(\"languagechange\",updateAlignment);window.removeEventListener(\"storage\",updateAlignment);clearInterval(pollInterval);const style=document.getElementById(\"global-locale-alignment\");if(style){style.remove();}};}else{// For manual mode, just cleanup on unmount\nreturn()=>{const style=document.getElementById(\"global-locale-alignment\");if(style){style.remove();}};}},[enabled,localeMode,manualLocale,detectedLocale]);// Don't render anything if disabled\nif(!enabled)return null;// Position styles for indicator\nconst getIndicatorPosition=()=>{const positions={\"top-left\":{top:10,left:10},\"top-right\":{top:10,right:10},\"bottom-left\":{bottom:10,left:10},\"bottom-right\":{bottom:10,right:10}};return positions[indicatorPosition];};return /*#__PURE__*/_jsx(\"div\",{style:{position:\"fixed\",...getIndicatorPosition(),zIndex:9999,pointerEvents:\"none\",...props.style},children:showIndicator&&/*#__PURE__*/_jsxs(\"div\",{style:{backgroundColor:\"rgba(0, 0, 0, 0.8)\",color:\"white\",padding:\"8px 12px\",borderRadius:\"6px\",fontSize:\"12px\",fontFamily:\"system-ui, -apple-system, sans-serif\",display:\"flex\",alignItems:\"center\",gap:\"6px\",boxShadow:\"0 2px 8px rgba(0, 0, 0, 0.2)\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:\"8px\",height:\"8px\",borderRadius:\"50%\",backgroundColor:textDirection===\"rtl\"?\"#ff6b6b\":\"#51cf66\"}}),/*#__PURE__*/_jsxs(\"span\",{children:[textDirection.toUpperCase(),\" (\",detectedLocale,\") \",localeMode===\"manual\"?\"Manual\":\"Auto\"]})]})});}addPropertyControls(GlobalLocaleAlignment,{enabled:{type:ControlType.Boolean,title:\"Enable Global Alignment\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},localeMode:{type:ControlType.Enum,title:\"Locale Detection\",options:[\"auto\",\"manual\"],optionTitles:[\"Auto-detect\",\"Manual\"],defaultValue:\"manual\",displaySegmentedControl:true,hidden:({enabled})=>!enabled},manualLocale:{type:ControlType.Enum,title:\"Language\",options:[\"en\",\"ar\",\"he\",\"fa\",\"ur\",\"fr\",\"es\",\"de\",\"it\",\"pt\",\"ru\",\"zh\",\"ja\",\"ko\"],optionTitles:[\"English\",\"Arabic\",\"Hebrew\",\"Persian\",\"Urdu\",\"French\",\"Spanish\",\"German\",\"Italian\",\"Portuguese\",\"Russian\",\"Chinese\",\"Japanese\",\"Korean\"],defaultValue:\"en\",hidden:({enabled,localeMode})=>!enabled||localeMode!==\"manual\"},showIndicator:{type:ControlType.Boolean,title:\"Show Indicator\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",hidden:({enabled})=>!enabled},indicatorPosition:{type:ControlType.Enum,title:\"Indicator Position\",options:[\"top-left\",\"top-right\",\"bottom-left\",\"bottom-right\"],optionTitles:[\"Top Left\",\"Top Right\",\"Bottom Left\",\"Bottom Right\"],defaultValue:\"top-right\",hidden:({enabled,showIndicator})=>!enabled||!showIndicator}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"GlobalLocaleAlignment\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LocaleTextAlignment.map"],"mappings":"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"}