{"version":3,"file":"shared-lib.nfHowJAx.mjs","names":["useState"],"sources":["https:/framerusercontent.com/modules/I1DC9cTt2FcHsDUAaRxW/OobIpExjjda7YDjHO9YN/SVG.js","https:/framerusercontent.com/modules/9muYaW1MvHoRQJ0P7dkP/V2GVvLqiMxXRSxszkCSa/focus.js","https:/framerusercontent.com/modules/YfmtnpWjJrP37sQ18QUZ/9Y2P24U2SBIbf2fPVsOX/hover.js","https:/framerusercontent.com/modules/8tQkbr8KFr2szJheF1CE/JR5BLJj8pm98O32ISHgt/siteMetadata.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 24\n * @framerIntrinsicHeight 24\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */function SVG(props){const[customSvgElement,setCustomSvgElement]=useState(null);useEffect(()=>{const svgContent=props.customSvgCode;processCustomSVGContent(svgContent);});const processCustomSVGContent=svgContent=>{const replacements=[[/width=\"[^\"]*\"/,'width=\"100%\"'],[/height=\"[^\"]*\"/,'height=\"100%\"']];const hasCustomStroke=svgContent.includes('stroke=\"');const hasCustomStrokeWidth=svgContent.includes('stroke-width=\"');const hasLineCap=svgContent.includes('stroke-linecap=\"');const hasLineJoin=svgContent.includes('stroke-linejoin=\"');if(svgContent.includes(\"<circle\")){// Find the circle element and update its fill attribute\nconst circleFillRegex=/<circle[^>]*fill=\"([^\"]*)\"/;const match=svgContent.match(circleFillRegex);if(match){// Update the fill attribute with the custom color\nconst updatedCircle=match[0].replace(match[1],props.customColor);svgContent=svgContent.replace(circleFillRegex,updatedCircle);}else{// If there is no fill attribute, add it with the custom color\nreplacements.push([/<circle/g,`<circle fill=\"${props.customColor}\"`]);}}if(hasCustomStroke){if(!hasLineCap){replacements.push([/<path/g,`<path stroke=\"${props.customColor}\"`]);}else{replacements.push([/<path/g,`<path stroke=\"${props.customColor}\" stroke-linecap=\"${props.lineCap}\"`]);}if(hasCustomStrokeWidth){replacements.push([/stroke-width=\"(?!0\\b)\\d+(\\.\\d+)?\"/g,`stroke-width=\"${props.customStrokeWidth}\"`]);}}else{replacements.push([/<path/g,`<path fill=\"${props.customColor}\"`]);}if(svgContent.includes('overflow=\"')){replacements.push([/overflow=\"[^\"]*\"/,`overflow=\"visible\"`]);}else{replacements.push([/<svg/,`<svg overflow=\"visible\"`]);}if(!hasLineJoin){replacements.push([/<path/g,`<path stroke-linejoin=\"${props.lineJoin}\"`]);}else{replacements.push([/stroke-linejoin=\"[^\"]*\"/,`stroke-linejoin=\"${props.lineJoin}\"`]);}replacements.forEach(([regex,replacement])=>{svgContent=svgContent.replace(regex,replacement);});setCustomSvgElement(svgContent);};const customContainerStyle={padding:`${props.customPadding}px`,display:\"flex\",flexDirection:\"column\",alignItems:\"center\",justifyContent:\"center\",overflow:\"visible\"};return /*#__PURE__*/_jsx(\"div\",{dangerouslySetInnerHTML:{__html:customSvgElement},style:customContainerStyle});}SVG.defaultProps={customSvgCode:`<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"> <g clip-path=\"url(#clip0_967_124)\"> <path d=\"M18 6.09674C18 6.0348 18.0246 5.97539 18.0684 5.93159L23.6013 0.398708C23.7484 0.251575 24 0.35578 24 0.563858V11.9033C24 11.9652 23.9754 12.0246 23.9316 12.0684L18 18V6.09674Z\" fill=\"white\"/> <path d=\"M6 18V6.56386C6 6.35578 5.74843 6.25158 5.60129 6.39871L0.0684074 11.9316C0.0246069 11.9754 0 12.0348 0 12.0967V23.7664C0 23.8954 0.104567 24 0.233557 24H11.9033C11.9652 24 12.0246 23.9754 12.0684 23.9316L18 18H6Z\" fill=\"white\"/> </g> <defs> <clipPath id=\"clip0_967_124\"> <rect width=\"24\" height=\"24\" fill=\"white\"/> </clipPath> </defs> </svg>`,customColor:\"#ffffff\",customPadding:0,customStrokeWidth:2,lineCap:\"butt\",lineJoin:\"miter\"};addPropertyControls(SVG,{customSvgCode:{type:ControlType.String,title:\"SVG Code\",displayTextArea:false},customColor:{type:ControlType.Color,title:\"Color\",defaultValue:\"#ffffff\"},customPadding:{type:ControlType.Number,title:\"Padding\",defaultValue:0,min:0,step:1,displayStepper:true,description:\"More components at [Framer University](https://frameruni.link/cc).\"},customStrokeWidth:{type:ControlType.Number,title:\"Stroke\",defaultValue:2,min:0,step:.1,displayStepper:true,hidden:props=>!props.customSvgCode.includes('stroke=\"')},lineCap:{type:ControlType.Enum,title:\"Line Cap\",options:[\"butt\",\"round\",\"square\"],optionTitles:[\"Butt\",\"Round\",\"Square\"],defaultValue:\"butt\",hidden:props=>!props.customSvgCode.includes('stroke=\"')},lineJoin:{type:ControlType.Enum,title:\"Line Join\",options:[\"round\",\"miter\",\"bevel\"],optionTitles:[\"Round\",\"Miter\",\"Bevel\"],defaultValue:\"miter\",hidden:props=>!props.customSvgCode.includes('stroke=\"')}});export default SVG;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SVG\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"24\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerIntrinsicWidth\":\"24\",\"framerDisableUnlink\":\"*\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SVG.map","import{ControlType}from\"framer\";export function getFocusStyle({color,width,style,offset}={}){const result={};if(color){result[\"--framer-focus-outline\"]=`${width}px ${style} ${color}`;result[\"--framer-focus-outline-offset\"]=`${offset}px`;}return result;}export const focusControls={color:{type:ControlType.Color,defaultValue:\"#09f\"},width:{type:ControlType.Number,displayStepper:true,defaultValue:1,min:0},style:{type:ControlType.Enum,options:[\"solid\",\"dashed\",\"dotted\",\"double\"],optionTitles:[\"Solid\",\"Dashed\",\"Dotted\",\"double\"],defaultValue:\"solid\"},offset:{type:ControlType.Number,displayStepper:true}};\nexport const __FramerMetadata__ = {\"exports\":{\"focusControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getFocusStyle\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"FocusOptions\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./focus.map","import{ControlType}from\"framer\";export function getHoverStyle({fillColor,textColor,borderColor}={}){return{\"--framer-hover-background-color\":fillColor,\"--framer-hover-color\":textColor,\"--framer-hover-border-color\":borderColor};}export const hoverControls={fillColor:{type:ControlType.Color,title:\"Fill\",optional:true},textColor:{type:ControlType.Color,title:\"Text\",optional:true},borderColor:{type:ControlType.Color,title:\"Border\",optional:true}};\nexport const __FramerMetadata__ = {\"exports\":{\"HoverOptions\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getHoverStyle\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"hoverControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./hover.map","// Generated by Framer (7b363e7)\nconst valuesByLocaleId={vj0iWnosq:{v0:\"Blabla - Turn your customer interactions into revenue with AI\",v1:\"Blabla brings all your comments and DMs into one place. With AI, you reply faster, save time, and turn your audience into customers. ✨\"}};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>\\n  window.intercomSettings = {\\n    api_base: \\\"https://api-iam.intercom.io\\\",\\n    app_id: \\\"hv6odyy5\\\",\\n  };\\n</script>\\n\\n\\n<script>\\n  // We pre-filled your app ID in the widget URL: 'https://widget.intercom.io/widget/hv6odyy5'\\n  (function(){var w=window;var ic=w.Intercom;if(typeof ic===\\\"function\\\"){ic('reattach_activator');ic('update',w.intercomSettings);}else{var d=document;var i=function(){i.c(arguments);};i.q=[];i.c=function(args){i.q.push(args);};w.Intercom=i;var l=function(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/hv6odyy5';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);};if(document.readyState==='complete'){l();}else if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})();\\n</script>\",customHTMLBodyStart:'<!-- Google Tag Manager (noscript) -->\\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-NQB4NDPC\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\\n<!-- End Google Tag Manager (noscript) -->\\n\\n<style>\\n* {\\n    -webkit-tap-highlight-color: transparent;\\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\n* {\\n  outline: none !important;\\n}\\n\\nbutton, select, input {\\n  outline: none !important;\\n  box-shadow: none !important;\\n}\\n</style>',customHTMLHeadStart:\"<!-- Google Tag Manager -->\\n<script>(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-NQB4NDPC');</script>\\n<!-- End Google Tag Manager -->\\n\\n<!-- TikTok Pixel Code Start -->\\n<script>\\n!function (w, d, t) {\\n  w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=[\\\"page\\\",\\\"track\\\",\\\"identify\\\",\\\"instances\\\",\\\"debug\\\",\\\"on\\\",\\\"off\\\",\\\"once\\\",\\\"ready\\\",\\\"alias\\\",\\\"group\\\",\\\"enableCookie\\\",\\\"disableCookie\\\",\\\"holdConsent\\\",\\\"revokeConsent\\\",\\\"grantConsent\\\"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for(\\nvar e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var r=\\\"https://analytics.tiktok.com/i18n/pixel/events.js\\\",o=n&&n.partner;ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};n=document.createElement(\\\"script\\\")\\n;n.type=\\\"text/javascript\\\",n.async=!0,n.src=r+\\\"?sdkid=\\\"+e+\\\"&lib=\\\"+t;e=document.getElementsByTagName(\\\"script\\\")[0];e.parentNode.insertBefore(n,e)};\\n\\n\\n  ttq.load('CTTDIEBC77UDUQAR1KO0');\\n  ttq.page();\\n}(window, document, 'ttq');\\n</script>\\n<!-- TikTok Pixel Code End -->\\n\\n<!-- FirstPromoter Tracking Script -->\\n<script>\\n  (function(w){\\n    w.fpr = w.fpr || function(){\\n      w.fpr.q = w.fpr.q || [];\\n      w.fpr.q[arguments[0] === 'set' ? 'unshift' : 'push'](arguments);\\n    };\\n  })(window);\\n  fpr(\\\"init\\\", {cid:\\\"x33uy1vy\\\"}); <!-- Replace with your actual cid -->\\n  fpr(\\\"click\\\");\\n</script>\\n<script src=\\\"https://cdn.firstpromoter.com/fpr.js\\\" async=\\\"\\\"></script>\\n\\n\\n<!-- Add this script in the Head or a Global Code Component in Framer -->\\n<script>\\n  (function() {\\n    // Define your app's base URL\\n    const APP_BASE_URL = 'https://app.blabla.ai'; // Replace with your actual app URL\\n\\n    /**\\n     * Extracts all query parameters from the current URL.\\n     * @returns {Object} An object containing all query parameters.\\n     */\\n    function getAllQueryParameters() {\\n      const urlParams = new URLSearchParams(window.location.search);\\n      const params = {};\\n      for (const [key, value] of urlParams.entries()) {\\n        params[key] = value;\\n      }\\n      return params;\\n    }\\n\\n    /**\\n     * Appends query parameters to a given URL without duplicating existing parameters.\\n     * @param {string} url - The original URL.\\n     * @param {Object} queryParams - An object containing query parameters.\\n     * @returns {string} - The updated URL with query parameters appended.\\n     */\\n   function appendQueryParameters(url, queryParams) {\\n      try {\\n        const urlObj = new URL(url, window.location.origin);\\n        let updated = false;\\n\\n        // Only set a parameter if it's not already present\\n        for (const key in queryParams) {\\n          if (queryParams.hasOwnProperty(key)) {\\n            if (!urlObj.searchParams.has(key)) {\\n              urlObj.searchParams.set(key, queryParams[key]);\\n              updated = true;\\n            }\\n          }\\n        }\\n\\n        return updated ? urlObj.toString() : url;\\n      } catch (error) {\\n        console.error('Invalid URL:', url);\\n        return url;\\n      }\\n    }\\n\\n    /**\\n     * Determines if a link should be processed for appending query parameters.\\n     * @param {string} url - The href attribute of the link.\\n     * @returns {boolean} - True if the link should be processed; false otherwise.\\n     */\\n    function shouldProcessLink(url) {\\n       const excludedProtocols = ['tel:', 'mailto:', 'javascript:'];\\n      return (\\n        (url.startsWith('/') || url.startsWith(APP_BASE_URL)) &&\\n        !excludedProtocols.some(protocol => url.startsWith(protocol))\\n      );\\n    }\\n    \\n    /**\\n     * Updates all outbound anchor links by appending query parameters.\\n     */\\n    function updateOutboundLinks(queryParams) {\\n      if (Object.keys(queryParams).length === 0) return; // No query parameters to append\\n\\n      const links = document.querySelectorAll('a[href]');\\n      links.forEach(link => {\\n        const href = link.getAttribute('href');\\n        if (href && shouldProcessLink(href)) {\\n          const updatedURL = appendQueryParameters(href, queryParams);\\n          link.setAttribute('href', updatedURL);\\n        }\\n      });\\n    }\\n\\n    /**\\n     * Updates all outbound buttons by appending query parameters to their data-href attribute.\\n     * Assumes buttons navigate using the data-href attribute.\\n     */\\n    function updateOutboundButtons(queryParams) {\\n      if (Object.keys(queryParams).length === 0) return; // No query parameters to append\\n\\n      const buttons = document.querySelectorAll('button[data-href]');\\n      buttons.forEach(button => {\\n        const targetURL = button.getAttribute('data-href');\\n        if (targetURL && shouldProcessLink(targetURL)) {\\n          const updatedURL = appendQueryParameters(targetURL, queryParams);\\n          button.setAttribute('data-href', updatedURL);\\n\\n          // Optionally, remove existing click listeners to prevent multiple redirects\\n          // Clone the button to remove all event listeners\\n          const newButton = button.cloneNode(true);\\n          button.parentNode.replaceChild(newButton, button);\\n\\n          // Attach a new click event listener\\n          newButton.addEventListener('click', function() {\\n            window.location.href = updatedURL;\\n          });\\n        }\\n      });\\n    }\\n\\n    /**\\n     * Intercepts JavaScript-based redirects and appends query parameters.\\n     */\\nfunction interceptJavaScriptRedirects(queryParams) {\\n  if (Object.keys(queryParams).length === 0) return; // No query parameters to append\\n\\n  // --- Remove this entire block for window.location\\n  // const originalLocation = window.location;\\n  // Object.defineProperty(window, 'location', {\\n  //   configurable: true,\\n  //   enumerable: true,\\n  //   get: function() {\\n  //     return originalLocation;\\n  //   },\\n  //   set: function(url) {\\n  //     if (typeof url === 'string' && shouldProcessLink(url)) {\\n  //       const updatedURL = appendQueryParameters(url, queryParams);\\n  //       originalLocation.href = updatedURL;\\n  //     } else {\\n  //       originalLocation.href = url;\\n  //     }\\n  //   }\\n  // });\\n\\n  // Override window.open is still somewhat feasible, but also be careful with this\\n  const originalOpen = window.open;\\n  window.open = function(url, target, features) {\\n    if (typeof url === 'string' && shouldProcessLink(url)) {\\n      const updatedURL = appendQueryParameters(url, queryParams);\\n      return originalOpen.call(window, updatedURL, target, features);\\n    }\\n    return originalOpen.call(window, url, target, features);\\n  };\\n}\\n\\n\\n    /**\\n     * Removes all query parameters from the current URL without reloading the page.\\n     */\\n    function removeQueryParameters() {\\n      const url = new URL(window.location.href);\\n      if (url.search) {\\n        url.search = '';\\n        window.history.replaceState({}, document.title, url.toString());\\n      }\\n    }\\n\\n    /**\\n     * Observes DOM changes and updates new outbound links and buttons.\\n     */\\n    function observeDOMChanges(queryParams) {\\n      if (Object.keys(queryParams).length === 0) return; // No query parameters to append\\n\\n      const observer = new MutationObserver(mutations => {\\n        mutations.forEach(mutation => {\\n          // console.log('MutationObserver fired!', mutation);\\n\\n          if (mutation.type === 'childList') {\\n            mutation.addedNodes.forEach(node => {\\n              if (node.nodeType === Node.ELEMENT_NODE) {\\n                const element = node;\\n\\n                // Handle newly added anchor links\\n                if (element.tagName === 'A') {\\n                  const href = element.getAttribute('href');\\n                  if (href && shouldProcessLink(href)) {\\n                    const updatedURL = appendQueryParameters(href, queryParams);\\n                    element.setAttribute('href', updatedURL);\\n                  }\\n                }\\n\\n                // Handle newly added buttons with data-href\\n                if (element.tagName === 'BUTTON' && element.hasAttribute('data-href')) {\\n                  const targetURL = element.getAttribute('data-href');\\n                  if (targetURL && shouldProcessLink(targetURL)) {\\n                    const updatedURL = appendQueryParameters(targetURL, queryParams);\\n                    element.setAttribute('data-href', updatedURL);\\n\\n                    // Clone the button to remove existing event listeners\\n                    const newButton = element.cloneNode(true);\\n                    element.parentNode.replaceChild(newButton, element);\\n\\n                    // Attach a new click event listener\\n                    newButton.addEventListener('click', function() {\\n                      window.location.href = updatedURL;\\n                    });\\n                  }\\n                }\\n\\n                // Recursively handle nested links and buttons\\n                const nestedLinks = element.querySelectorAll('a[href]');\\n                nestedLinks.forEach(link => {\\n                  const href = link.getAttribute('href');\\n                  if (href && shouldProcessLink(href)) {\\n                    const updatedURL = appendQueryParameters(href, queryParams);\\n                    link.setAttribute('href', updatedURL);\\n                  }\\n                });\\n\\n                const nestedButtons = element.querySelectorAll('button[data-href]');\\n                nestedButtons.forEach(button => {\\n                  const targetURL = button.getAttribute('data-href');\\n                  if (targetURL && shouldProcessLink(targetURL)) {\\n                    const updatedURL = appendQueryParameters(targetURL, queryParams);\\n                    button.setAttribute('data-href', updatedURL);\\n\\n                    // Clone the button to remove existing event listeners\\n                    const newButton = button.cloneNode(true);\\n                    button.parentNode.replaceChild(newButton, button);\\n\\n                    // Attach a new click event listener\\n                    newButton.addEventListener('click', function() {\\n                      window.location.href = updatedURL;\\n                    });\\n                  }\\n                });\\n              }\\n            });\\n          }\\n        });\\n      });\\n\\n      observer.observe(document.body, { childList: true, subtree: true });\\n    }\\n\\n    /**\\n     * Initializes all tracking functions.\\n     */\\n    function initializeTracking() {\\n      const queryParams = getAllQueryParameters();\\n\\n      // console.log('[UTM Debug] queryParams:', queryParams);\\n\\n\\n      // Update outbound links and buttons with query parameters\\n      updateOutboundLinks(queryParams);\\n      updateOutboundButtons(queryParams);\\n\\n      // Intercept JavaScript-based redirects to append query parameters\\n      interceptJavaScriptRedirects(queryParams);\\n\\n      // Observe DOM changes to handle dynamically added content\\n      observeDOMChanges(queryParams);\\n\\n      // // Optionally, remove query parameters from the landing page URL for a cleaner look\\n      // removeQueryParameters();\\n    }\\n\\n    // Execute the tracking initialization when the DOM is fully loaded\\n    document.addEventListener('DOMContentLoaded', initializeTracking);\\n  })();\\n</script>\",description:getLocalizedValue(\"v1\",activeLocale)??\"Blabla regroupe tous les commentaires et messages priv\\xe9s au m\\xeame endroit. Avec son IA, vous r\\xe9pondez plus vite, gagnez du temps et transformez votre audience en clients. ✨\",favicon:\"https://framerusercontent.com/assets/FHoW2UXtjw66rLGktwqoVXjXM0.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/HNEQlJLjAb1EoM50MOQPSY1FeQ.jpg\",title:getLocalizedValue(\"v0\",activeLocale)??\"Blabla - Transformez vos interactions clients en revenus gr\\xe2ce \\xe0 l'IA\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}