{"version":3,"file":"shared-lib.DsFgEVCG.mjs","names":["useMemo"],"sources":["https:/framer.com/m/framer/icon-nullstate.js@0.7.0","https:/framerusercontent.com/modules/Ma20hU0GGRxLxZphbywl/OSpwWF91FHPVFyQJjMHt/utils.js","https:/framerusercontent.com/modules/kAAiPfrWhUd4N1siZPzh/FXYd9US4jQxyy2T7Uv1v/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 (4a9db03)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:'<!-- BODY -->\\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-TNCB7J4\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\\n\\n<script>\\n(function(){\\n  // Don\\'t show if previously set\\n  var saved = (window.__outraConsent && window.__outraConsent.get(\\'outra_cookie_consent\\'));\\n  if (saved) return;\\n\\n  const wrap = document.createElement(\\'div\\');\\n  wrap.setAttribute(\\'role\\',\\'dialog\\');\\n  wrap.setAttribute(\\'aria-live\\',\\'polite\\');\\n  wrap.setAttribute(\\'aria-label\\',\\'Cookie consent\\');\\n  wrap.style.cssText = [\\n    \"position:fixed\",\"inset:auto 0 0 0\",\"z-index:2147483647\",\"background:#000\",\"color:#fff\",\\n    \"padding:15px\",\"display:flex\",\"flex-wrap:wrap\",\"gap:10px\",\"align-items:center\",\\n    \"justify-content:center\",\"text-align:center\",\"box-shadow:0 -6px 20px rgba(0,0,0,.2)\",\\n    \"font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif\"\\n  ].join(\";\");\\n\\n  const p = document.createElement(\\'p\\');\\n  p.style.cssText = \"margin:0 0 10px 0;max-width:1000px;line-height:1.4;width:100%\";\\n  p.innerHTML = \\'We use cookies to enhance your experience. <a href=\"/privacy-policy\" style=\"color:#4A90E2;text-decoration:underline\">Privacy Policy</a>\\';\\n\\n  const btnRow = document.createElement(\\'div\\');\\n  btnRow.style.cssText = \"width:100%;display:flex;gap:10px;justify-content:center;flex-wrap:wrap\";\\n\\n  const accept = document.createElement(\\'button\\');\\n  accept.textContent = \\'Accept All\\';\\n  accept.style.cssText = [\"background:#647BF7\",\"color:#fff\",\"border:none\",\"padding:8px 16px\",\\n    \"cursor:pointer\",\"border-radius:4px\",\"font-weight:600\"].join(\";\");\\n\\n  const reject = document.createElement(\\'button\\');\\n  reject.textContent = \\'Reject Non-Essential\\';\\n  reject.style.cssText = [\"background:transparent\",\"color:#fff\",\"border:1px solid #fff\",\\n    \"padding:8px 16px\",\"cursor:pointer\",\"border-radius:4px\"].join(\";\");\\n\\n  btnRow.append(accept, reject);\\n  wrap.append(p, btnRow);\\n  document.body.appendChild(wrap);\\n\\n  // dataLayer shim\\n  window.dataLayer = window.dataLayer || [];\\n  window.gtag = window.gtag || function(){ dataLayer.push(arguments); };\\n\\n  accept.onclick = function(){\\n    try {\\n      gtag(\\'consent\\',\\'update\\',{\\n        analytics_storage:\\'granted\\',\\n        ad_storage:\\'granted\\',\\n        ad_user_data:\\'granted\\',\\n        ad_personalization:\\'granted\\'\\n      });\\n      dataLayer.push({event:\\'consent_accepted_all\\'});\\n    } catch(e){}\\n    // persist for 12 months across *.outra.co.uk\\n    window.__outraConsent.set(\\'outra_cookie_consent\\',\\'accepted\\',365);\\n    wrap.remove();\\n  };\\n\\n  reject.onclick = function(){\\n    try {\\n      gtag(\\'consent\\',\\'update\\',{\\n        analytics_storage:\\'denied\\',\\n        ad_storage:\\'denied\\',\\n        ad_user_data:\\'denied\\',\\n        ad_personalization:\\'denied\\'\\n      });\\n      dataLayer.push({event:\\'consent_rejected_non_essential\\'});\\n    } catch(e){}\\n    window.__outraConsent.set(\\'outra_cookie_consent\\',\\'rejected\\',365);\\n    wrap.remove();\\n  };\\n})();\\n</script>\\n\\n<script>\\n(function () {\\n  window.dataLayer = window.dataLayer || [];\\n\\n  function consentAccepted() {\\n    try {\\n      if (window.__outraConsent?.get) {\\n        return window.__outraConsent.get(\"outra_cookie_consent\") === \"accepted\";\\n      }\\n    } catch(e){}\\n    return false;\\n  }\\n\\n  document.addEventListener(\"submit\", function (e) {\\n    const f = e.target;\\n    if (!(f instanceof HTMLFormElement)) return;\\n\\n    const type = f.getAttribute(\"data-track\");\\n    if (!type) return;\\n\\n    const emailEl = f.querySelector(\\'input[type=\"email\"]\\');\\n    const emailVal = emailEl?.value.trim();\\n\\n    const payload = { event: type, label: \"lead\" };\\n    if (consentAccepted() && emailVal) payload.email = emailVal;\\n\\n    window.dataLayer.push(payload);\\n  }, true);\\n})();\\n</script>\\n\\n<script>\\n(function () {\\n  window.dataLayer = window.dataLayer || [];\\n\\n  function consentAccepted() {\\n    try {\\n      if (window.__outraConsent?.get) {\\n        return window.__outraConsent.get(\"outra_cookie_consent\") === \"accepted\";\\n      }\\n    } catch(e){}\\n    return false;\\n  }\\n\\n  // Listen for Calendly\\'s widget postMessage\\n  window.addEventListener(\"message\", function (e) {\\n    const data = e && e.data;\\n    if (!data || typeof data !== \"object\") return;\\n\\n    // Calendly success event\\n    if (data.event === \"calendly.event_scheduled\") {\\n      const email = data.payload?.invitee?.email || undefined;\\n\\n      const payload = { event: \"book_demo\", label: \"lead\" };\\n      if (consentAccepted() && email) payload.email = email;\\n\\n      window.dataLayer.push(payload);\\n    }\\n  });\\n})();\\n</script>\\n\\n',customHTMLHeadEnd:\"<!-- Consent Mode defaults (BEFORE GTM) -->\\n<script>\\n  (function() {\\n    // --- helpers: cross-subdomain cookie (.outra.co.uk) ---\\n    function setCookie(name, value, days) {\\n      var expires = \\\"\\\";\\n      if (days) {\\n        var d = new Date();\\n        d.setTime(d.getTime() + (days*24*60*60*1000));\\n        expires = \\\"; expires=\\\" + d.toUTCString();\\n      }\\n      document.cookie = name + \\\"=\\\" + (value || \\\"\\\") + expires + \\\"; path=/; domain=.outra.co.uk; SameSite=Lax\\\";\\n    }\\n    function getCookie(name) {\\n      var nameEQ = name + \\\"=\\\";\\n      var ca = document.cookie.split(';');\\n      for (var i=0; i<ca.length; i++) {\\n        var c = ca[i];\\n        while (c.charAt(0)==' ') c = c.substring(1,c.length);\\n        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\\n      }\\n      return null;\\n    }\\n\\n    window.dataLayer = window.dataLayer || [];\\n    function gtag(){ dataLayer.push(arguments); }\\n\\n    // Consent Mode v2 defaults: DENY everything non-essential\\n    gtag('consent','default',{\\n      ad_personalization: 'denied',\\n      ad_storage: 'denied',\\n      ad_user_data: 'denied',\\n      analytics_storage: 'denied',\\n      functionality_storage: 'denied',\\n      personalization_storage: 'denied',\\n      security_storage: 'granted',\\n      wait_for_update: 500\\n    });\\n    gtag('set','ads_data_redaction', true);\\n    gtag('set','url_passthrough', false);\\n\\n    // Restore previous decision BEFORE GTM if present\\n    var saved = getCookie('outra_cookie_consent'); // 'accepted' | 'rejected'\\n    if (saved === 'accepted') {\\n      gtag('consent','update', {\\n        analytics_storage:'granted',\\n        ad_storage:'granted',\\n        ad_user_data:'granted',\\n        ad_personalization:'granted'\\n      });\\n      dataLayer.push({event:'consent_restore', consent_status:'accepted'});\\n    } else if (saved === 'rejected') {\\n      gtag('consent','update', {\\n        analytics_storage:'denied',\\n        ad_storage:'denied',\\n        ad_user_data:'denied',\\n        ad_personalization:'denied'\\n      });\\n      dataLayer.push({event:'consent_restore', consent_status:'rejected'});\\n    }\\n\\n    // Expose cookie helpers for the banner handlers below\\n    window.__outraConsent = { set: setCookie, get: getCookie };\\n  })();\\n</script>\\n\\n<!-- GTM (Head) -->\\n<script>\\n(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n})(window,document,'script','dataLayer','GTM-TNCB7J4');\\n</script>\\n\",description:\"Plug data from billions of different data points into your audience and watch the effectiveness of your targeting skyrocket. \",favicon:\"https://framerusercontent.com/assets/lSftr1dxh0WXX3pM3vLFOwyspN8.svg\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/wZY0fOqdKZmjjrVM1Vo6qAPj0Y.webp\",title:\"Outra | Upgrade your audience with the UK’s most powerful data\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"uQAAgD,IACjB,CAClB,EAAkB,CAC3B,MAAO,OACP,OAAQ,OACR,QAAS,OACT,eAAgB,SAChB,WAAY,SACf,CASK,EAAkB,CACpB,GAAG,EACH,aAAc,EACd,WAAY,2BACZ,OAAQ,uCACR,MAAO,UACP,cAAe,SAClB,CACY,EAA0B,GAAkB,EAAG,IACnC,EAAK,MAAO,CAC7B,MAAO,EACF,MACR,CAAC,CACJ,ICvBoL,SAAgB,EAAiB,EAAS,EAAa,EAAW,GAAG,EAAc,EAAsB,CAC/R,IAAM,EAAiBA,MAAY,CAAC,GAAG,GAAY,MAAO,GAAyD,SAAU,EAAE,OAAO,KAAK,IAAM,EAAe,EAAW,aAAa,CAAC,QAAQ,QAAQ,GAAG,CAC3C,OAA7H,EAAsB,IAAkE,EAAY,EAAS,EAAe,EAAuB,CAAC,EAAc,EAAW,CAAC,CAAwD,OAA5C,EAAa,EAAc,uBAT9N,IAAgC,CAI2E,EAAc,CAAC,QAAQ,CAAC,KAAK,EAAY,aAAa,CAAC,YAAY,CAAC,KAAK,EAAY,aAAa,CAAC,UAAU,CAAC,KAAK,EAAY,aAAa,CAAC,aAAa,CAAC,KAAK,EAAY,aAAa,CAAC,aAAa,CAAC,KAAK,EAAY,aAAa,CAAC,CAAO,GAAa,EAAI,IAAS,EAAI,KAAK,GAAG,EAAE,aAAa,CAAC,SAAS,EAAO,CAAC,ICH3b,SAAwB,EAAS,EAAO,EAAa,CAAC,MAAM,CAAC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAwmJ,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAipF,YAAY,gIAAgI,QAAQ,uEAAuE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,iEAAiE"}