{"version":3,"file":"shared-lib.B1JvEhuJ.mjs","names":[],"sources":["https:/framer.com/m/framer/icon-nullstate.js@0.7.0","https:/framerusercontent.com/modules/Ma20hU0GGRxLxZphbywl/OSpwWF91FHPVFyQJjMHt/utils.js","https:/framerusercontent.com/modules/gqFlnn7Jo5hGThHmUFZz/biydeqDIOyN9Aj0jBqDq/siteMetadata.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nexport const containerStyles = {\n    width: \"100%\",\n    height: \"100%\",\n    display: \"flex\",\n    justifyContent: \"center\",\n    alignItems: \"center\"\n};\nconst nullIconStyle = {\n    minWidth: \"10px\",\n    minHeight: \"10px\",\n    maxWidth: \"20px\",\n    maxHeight: \"20px\",\n    width: \"60%\",\n    height: \"60%\"\n};\nconst emptyStateStyle = {\n    ...containerStyles,\n    borderRadius: 6,\n    background: \"rgba(149, 149, 149, 0.1)\",\n    border: \"1px dashed rgba(149, 149, 149, 0.15)\",\n    color: \"#a5a5a5\",\n    flexDirection: \"column\"\n};\nexport const NullState = /*#__PURE__*/ React.forwardRef((_, ref)=>{\n    return(/*#__PURE__*/ _jsx(\"div\", {\n        style: emptyStateStyle,\n        ref: ref\n    }));\n}) /*\n\n<svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                viewBox=\"0 0 30 30\"\n                style={nullIconStyle}\n            >\n                <path\n                    d=\"M 12.857 0 C 19.958 0 25.714 5.756 25.714 12.857 C 25.714 19.958 19.958 25.714 12.857 25.714 C 5.756 25.714 0 19.958 0 12.857 C 0 5.756 5.756 0 12.857 0 Z\"\n                    fill=\"#FFFFFF\"\n                ></path>\n                <path\n                    d=\"M 20.357 20.357 L 27.857 27.857\"\n                    fill=\"transparent\"\n                    strokeWidth=\"4.28\"\n                    stroke=\"#FFFFFF\"\n                    strokeLinecap=\"round\"\n                ></path>\n                <g transform=\"translate(9.643 6.429)\">\n                    <path\n                        d=\"M 3.214 12.857 L 3.214 12.857\"\n                        fill=\"transparent\"\n                        strokeWidth=\"3.75\"\n                        stroke=\"currentColor\"\n                        strokeLinecap=\"round\"\n                    ></path>\n                    <path\n                        d=\"M 0 3.214 C 0 1.004 1.843 0 3.214 0 C 4.586 0 6.429 0.603 6.429 3.214 C 6.429 5.826 3.214 5.913 3.214 7.232 C 3.214 8.552 3.214 8.571 3.214 8.571\"\n                        fill=\"transparent\"\n                        strokeWidth=\"3.22\"\n                        stroke=\"currentColor\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                    ></path>\n                </g>\n            </svg>\n            */ ;\n\nexport const __FramerMetadata__ = {\"exports\":{\"containerStyles\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"NullState\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}}}}\n//# sourceMappingURL=./nullstate.map","import{useMemo}from\"react\";import{ControlType}from\"framer\";/*\n ** ICON UTILS\n ** Pull as much re-usable logic into here as possible\n ** This will make it easier to replace in all icon components\n */ export const containerStyles={width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\"};export const defaultEvents={onClick:{type:ControlType.EventHandler},onMouseDown:{type:ControlType.EventHandler},onMouseUp:{type:ControlType.EventHandler},onMouseEnter:{type:ControlType.EventHandler},onMouseLeave:{type:ControlType.EventHandler}};const findByArray=(arr,search)=>arr.find(a=>a.toLowerCase().includes(search));export function getIconSelection(iconKeys,selectByList,iconSearch=\"\",iconSelection,lowercaseIconKeyPairs){// gotta get the exact match first THEN find\n// have a set and try to access ?\nif(selectByList)return iconSelection;if(iconSearch==null||(iconSearch===null||iconSearch===void 0?void 0:iconSearch.length)===0)return null;const iconSearchTerm=iconSearch.toLowerCase().replace(/-|\\s/g,\"\");var _iconSearchTerm;// check for exact match, otherwise use .find\nconst searchResult=(_iconSearchTerm=lowercaseIconKeyPairs[iconSearchTerm])!==null&&_iconSearchTerm!==void 0?_iconSearchTerm:findByArray(iconKeys,iconSearchTerm);return searchResult;}export function useIconSelection(iconKeys,selectByList,iconSearch=\"\",iconSelection,lowercaseIconKeyPairs){// Clean search term\nconst iconSearchResult=useMemo(()=>{if(iconSearch==null||(iconSearch===null||iconSearch===void 0?void 0:iconSearch.length)===0)return null;const iconSearchTerm=iconSearch.toLowerCase().replace(/-|\\s/g,\"\");var _iconSearchTerm;// check for exact match, otherwise use .find\nconst searchResult=(_iconSearchTerm=lowercaseIconKeyPairs[iconSearchTerm])!==null&&_iconSearchTerm!==void 0?_iconSearchTerm:findByArray(iconKeys,iconSearchTerm);return searchResult;},[iconSelection,iconSearch]);const name=selectByList?iconSelection:iconSearchResult;return name;}\nexport const __FramerMetadata__ = {\"exports\":{\"getIconSelection\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"containerStyles\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useIconSelection\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"defaultEvents\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./utils.map","// Generated by Framer (2f96024)\nconst valuesByLocaleId={AtrX74UwH:{v0:\"01فلک\",v1:\"تعرف على 01Flk، روبوت الذكاء الاصطناعي من الجيل التالي المصمم لتعزيز المحادثات باستجابات بديهية، وتكامل سلس، وأتمتة قوية.\"}};function getLocalizedValue(key,locale){while(locale){const values=valuesByLocaleId[locale.id];if(values){const value=values[key];if(value)return value;}locale=locale.fallback;}}export default function metadata(params,activeLocale){return{customHTMLBodyEnd:'<script>\\nwindow.addEventListener(\\'DOMContentLoaded\\', () => {\\n  const synth = window.speechSynthesis;\\n  let voices = [];\\n\\n  const preferredVoices = {\\n    \\'ar-SA\\': [\\'Google Noura\\', \\'Microsoft Hoda\\', \\'Apple Maged\\', \\'Apple Layla\\'],\\n    \\'en-US\\': [\\'Google US English Female\\', \\'Microsoft Jenny\\', \\'Apple Samantha\\', \\'Apple Siri Female\\', \\'Google UK English Female\\']\\n  };\\n\\n  const arabicYearToWords = (year) => {\\n    const units = [\"\", \"واحدٍ\", \"اثنينِ\", \"ثلاثةٍ\", \"أربعةٍ\", \"خمسةٍ\", \"ستةٍ\", \"سبعةٍ\", \"ثمانيةٍ\", \"تسعةٍ\"];\\n    const tens = [\"\", \"عشرَةَ\", \"عشرِينَ\", \"ثلاثِينَ\", \"أربعِينَ\", \"خمسِينَ\", \"ستينَ\", \"سبعينَ\", \"ثمانينَ\", \"تسعينَ\"];\\n\\n    const lastTwo = year % 100;\\n    const thousands = \"ألفينِ\";\\n    if (lastTwo === 0) return `${thousands}`;\\n    if (lastTwo < 10) return `${thousands} و${units[lastTwo]}`;\\n    if (lastTwo < 20) {\\n      if (lastTwo === 10) return `${thousands} وعشرَةَ`;\\n      return `${thousands} و${units[lastTwo % 10]} عشرَ`;\\n    }\\n    const u = lastTwo % 10;\\n    const t = Math.floor(lastTwo / 10);\\n    return `${thousands} و${u > 0 ? units[u] + \" و\" : \"\"}${tens[t]}`;\\n  };\\n\\n  const englishYearToWords = (year) => {\\n    const a = [\"\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\",\\n      \"eleven\", \"twelve\", \"thirteen\", \"fourteen\", \"fifteen\", \"sixteen\", \"seventeen\", \"eighteen\", \"nineteen\"];\\n    const b = [\"\", \"\", \"twenty\", \"thirty\", \"forty\", \"fifty\", \"sixty\", \"seventy\", \"eighty\", \"ninety\"];\\n    const lastTwo = year % 100;\\n    if (lastTwo === 0) return \"two thousand\";\\n    if (lastTwo < 20) return `two thousand ${a[lastTwo]}`;\\n    const tens = Math.floor(lastTwo / 10);\\n    const ones = lastTwo % 10;\\n    return `two thousand ${b[tens]}${ones > 0 ? \"-\" + a[ones] : \"\"}`;\\n  };\\n\\n  const transformYearsInText = (text, lang) => {\\n    return text.replace(/\\\\b(20[2-9][0-9]|2030|2040|2050)\\\\b/g, (match) => {\\n      const y = parseInt(match);\\n      return lang === \\'ar-SA\\' ? arabicYearToWords(y) : englishYearToWords(y);\\n    });\\n  };\\n\\n  const cleanText = (text, lang) =>\\n    transformYearsInText(text.replace(/[^\\\\p{L}\\\\p{N}\\\\s\\\\.,!?\\'\"()،؛]/gu, \\'\\').trim(), lang);\\n\\n  const getLang = (text) =>\\n    /[\\\\u0600-\\\\u06FF]/.test(text) ? \\'ar-SA\\' : \\'en-US\\';\\n\\n  const findBestVoice = (lang) => {\\n    const prefs = preferredVoices[lang] || [];\\n    return prefs.map(name =>\\n      voices.find(v => v.name.includes(name) && v.lang === lang)\\n    ).find(Boolean) || voices.find(v => v.lang === lang);\\n  };\\n\\n  const speakElement = (el) => {\\n    const rawText = el.innerText || el.textContent;\\n    const lang = getLang(rawText);\\n    const text = cleanText(rawText, lang);\\n    if (text.length < 2) return;\\n\\n    const voice = findBestVoice(lang);\\n    const utter = new SpeechSynthesisUtterance(text);\\n    utter.lang = lang;\\n    utter.rate = lang === \\'ar-SA\\' ? 0.95 : 1;\\n    utter.pitch = 1;\\n    if (voice) utter.voice = voice;\\n\\n    el.classList.add(\\'speaking-gold\\');\\n    setTimeout(() => el.classList.remove(\\'speaking-gold\\'), 1500);\\n\\n    synth.cancel();\\n    synth.speak(utter);\\n  };\\n\\n  const loadVoices = () => { voices = synth.getVoices(); };\\n  loadVoices();\\n  if (synth.onvoiceschanged !== undefined) synth.onvoiceschanged = loadVoices;\\n\\n  document.body.addEventListener(\\'click\\', (e) => {\\n    const el = e.target.closest(\\'p, div, span, h1, h2, h3, h4, h5, h6, li\\');\\n    if (el) speakElement(el);\\n  });\\n});\\n</script>\\n\\n<style>\\n.speaking-gold {\\n  background: radial-gradient(circle, rgba(255,215,0,0.25) 0%, transparent 70%);\\n  transition: background 0.4s ease;\\n  border-radius: 6px;\\n}\\n</style>\\n',description:getLocalizedValue(\"v1\",activeLocale)??\"01FLK builds luxury brands and smart platforms with ultra-precise design, fast performance, and custom experiences — powered by innovation, AI, and elegant creativity.\\n\",favicon:\"https://framerusercontent.com/assets/4gVs9wsGn2P2r2Lh9ZnSfCveqQ.gif\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/v3sohddvA5hoZGHdlcIuMFkFA7Y.jpeg\",title:getLocalizedValue(\"v0\",activeLocale)??\"01Flk\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"mQAyBa,AAzBb,GAAgD,CAChD,GAA+B,CAClB,EAAkB,CAC3B,MAAO,OACP,OAAQ,OACR,QAAS,OACT,eAAgB,SAChB,WAAY,QACf,EASK,EAAkB,CACpB,GAAG,EACH,aAAc,EACd,WAAY,2BACZ,OAAQ,uCACR,MAAO,UACP,cAAe,QAClB,EACY,EAA0B,EAAiB,CAAC,EAAG,IACnC,EAAK,MAAO,CAC7B,MAAO,EACF,KACR,EAAC,CACJ,GCvBoL,SAAgB,EAAiB,EAAS,EAAa,EAAW,GAAG,EAAc,EAAsB,CAC/R,IAAM,EAAiB,EAAQ,IAAI,CAAC,GAAG,GAAY,MAAO,GAAyD,SAAU,EAAE,OAAO,KAAK,IAAM,EAAe,EAAW,aAAa,CAAC,QAAQ,QAAQ,GAAG,CAAC,IAAI,EACjN,IAAM,GAAc,EAAgB,EAAsB,KAAkE,EAAY,EAAS,EAAe,CAAC,OAAO,CAAc,EAAC,CAAC,EAAc,CAAW,EAAC,CAAO,EAAK,EAAa,EAAc,EAAiB,OAAO,CAAM,kBAL6F,AAJpX,GAA2B,IAAgC,CAI2E,EAAc,CAAC,QAAQ,CAAC,KAAK,EAAY,YAAa,EAAC,YAAY,CAAC,KAAK,EAAY,YAAa,EAAC,UAAU,CAAC,KAAK,EAAY,YAAa,EAAC,aAAa,CAAC,KAAK,EAAY,YAAa,EAAC,aAAa,CAAC,KAAK,EAAY,YAAa,CAAC,EAAO,EAAY,CAAC,EAAI,IAAS,EAAI,KAAK,GAAG,EAAE,aAAa,CAAC,SAAS,EAAO,CAAC,GCH5Q,SAAS,EAAkB,EAAI,EAAO,CAAC,KAAM,GAAO,CAAC,IAAM,EAAO,EAAiB,EAAO,IAAI,GAAG,EAAO,CAAC,IAAM,EAAM,EAAO,GAAK,GAAG,EAAM,OAAO,CAAO,GAAO,EAAO,QAAU,CAAC,UAAwB,EAAS,EAAO,EAAa,CAAC,MAAM,CAAC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAilH,YAAY,EAAkB,KAAK,EAAa,EAAE;EAA4K,QAAQ,sEAAsE,OAAO,0BAA0B,YAAY,wEAAwE,MAAM,EAAkB,KAAK,EAAa,EAAE,OAAQ,CAAE,gBAAj9I,EAAiB,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,2HAA4H,CAAC"}