{"version":3,"file":"CookieConsentAndFormTracking.CcAnyfbY.mjs","names":["forwardRef","useRef"],"sources":["https:/framerusercontent.com/modules/2ndo8cHsXgCDNDif7w80/xtUC9OQpZ1QqmKJnRRim/CookieConsentAndFormTracking.js"],"sourcesContent":["// CookieConsentAndFormTracking — CE-TRACKING 2026-10-01d\n// - Export par défaut (ancienne bannière) : DÉSACTIVÉ, rend null. La bannière unique est celle du\n//   script global (Site Settings > Custom Code > fin de <body>). Aucun chargement GTM / Meta / GA4 ici.\n// - withFormSuccessTracking : un Lead (lead_source = form) UNIQUEMENT quand LA requête d'envoi de CE\n//   formulaire, pour CET envoi, reçoit une réponse serveur réussie. Une seule fois par envoi.\n//   Une requête n'est rattachée à un envoi que si TOUTES ces conditions sont réunies :\n//     1. POST vers le service de formulaires Framer (hôte api.framer.com, chemin /forms/...) ;\n//     2. partie pendant que l'envoi est « en attente », dans les 10 s qui suivent l'événement submit ;\n//     3. son corps contient TOUS les champs texte non vides de ce formulaire avec des valeurs\n//        IDENTIQUES à celles saisies au moment du submit (deux noms communs ne suffisent jamais) ;\n//     4. elle correspond à UN SEUL envoi en attente (si deux formulaires identiques sont ambigus,\n//        la requête n'est rattachée à aucun : pas de Lead plutôt qu'un Lead douteux).\n//   L'identifiant de l'envoi est figé au départ de la requête. La réponse ne vaut succès que si :\n//     statut 2xx, réponse non opaque, et corps JSON éventuel sans indication d'échec\n//     (success:false, ok:false, error, errors). Sinon : échec, aucun Lead.\n//   Réponse tardive d'un envoi expiré (20 s) ou remplacé : ignorée.\n//   Aucune détection visuelle (« Success ») et aucune détection de /merci : la redirection native\n//   Framer vers /merci reste active mais ne vaut jamais preuve.\n//   Le consentement et la déduplication finale (Meta eventID + GA4) sont gérés par window.ceTrack.lead.\n// Debug : ?ce_debug=1 -> logs [CE form] dans la console ; window.__ceFormDebug() renvoie l'historique,\n// y compris les POST vus pendant un envoi et la raison d'un éventuel refus de rattachement.\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{forwardRef,useEffect,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function CookieConsentBanner(_props){return null;}addPropertyControls(CookieConsentBanner,{note:{type:ControlType.String,title:\"Info\",defaultValue:\"D\\xe9sactiv\\xe9 : banni\\xe8re g\\xe9r\\xe9e par le Custom Code\"}});// ---------------------------------------------------------------------------------------------\n// Réglages\n// ---------------------------------------------------------------------------------------------\nconst SUBMIT_HOSTS=[\"api.framer.com\"]// service de formulaires Framer (à confirmer au 1er test réel)\n;const SUBMIT_PATH=/\\/forms?\\//i;const MATCH_WINDOW_MS=1e4// la requête doit partir dans les 10 s qui suivent le submit\n;const ATTEMPT_TIMEOUT_MS=2e4// sans réponse réussie en 20 s : envoi expiré, plus jamais validé\n;const DOUBLE_SUBMIT_MS=2e3// deuxième clic pendant un envoi en cours : rattaché au premier\n;const MIN_MATCHED_FIELDS=2// nombre minimum de champs texte non vides comparés valeur par valeur\n;function registry(){const w=window;if(!w.__ceFormRegistry){w.__ceFormRegistry={attempts:new Map,current:new WeakMap,log:[],patched:false};w.__ceFormDebug=()=>w.__ceFormRegistry.log.slice();}return w.__ceFormRegistry;}function debugOn(){try{return/[?&]ce_debug=1/.test(location.search)||sessionStorage.getItem(\"ce_debug\")===\"1\";}catch{return false;}}function flog(...args){const msg=args.map(a=>typeof a===\"string\"?a:safeJson(a)).join(\" \");const r=registry();r.log.push({t:new Date().toISOString(),msg});if(r.log.length>300)r.log.shift();if(debugOn()&&typeof console!==\"undefined\")console.log(\"[CE form]\",...args);}function safeJson(v){try{return JSON.stringify(v);}catch{return String(v);}}function newSubmissionId(){const c=window.crypto;if(c&&typeof c.randomUUID===\"function\")return c.randomUUID();return`${Date.now()}-${Math.random().toString(36).slice(2)}-${Math.random().toString(36).slice(2)}`;}function sendFormLead(submissionId){const w=window;if(w.ceTrack&&typeof w.ceTrack.lead===\"function\"){w.ceTrack.lead(\"form\",submissionId);}else{w.__ceQueue=w.__ceQueue||[];w.__ceQueue.push([\"lead\",\"form\",submissionId]);}}// ---------------------------------------------------------------------------------------------\n// Empreinte de l'envoi : champs texte non vides, valeurs saisies au moment du submit\n// ---------------------------------------------------------------------------------------------\nconst TEXT_TYPES=[\"text\",\"email\",\"tel\",\"number\",\"url\",\"search\",\"date\",\"textarea\",\"select-one\"];function norm(v){return String(v==null?\"\":v).replace(/\\r\\n/g,\"\\n\").trim();}function snapshotForm(form){const out=[];const seen=new Set;Array.from(form.elements).forEach(el=>{const name=el&&typeof el.name===\"string\"?el.name.trim():\"\";const type=String(el&&el.type||\"\").toLowerCase();if(!name||seen.has(name)||TEXT_TYPES.indexOf(type)===-1)return;const value=norm(el.value);if(!value)return;seen.add(name);out.push([name,value]);});return out;}// Paires nom -> valeurs présentes dans le corps de la requête (FormData, URLSearchParams, JSON).\nfunction bodyPairs(body){const out=new Map;const add=(k,v)=>{if(v!=null&&typeof v===\"object\")return;const list=out.get(k)||[];list.push(norm(v));out.set(k,list);};const walk=(value,depth)=>{if(!value||typeof value!==\"object\"||depth>5)return;if(Array.isArray(value)){value.forEach(v=>{if(v&&typeof v===\"object\"&&!Array.isArray(v)&&typeof v.name===\"string\"&&\"value\"in v){add(v.name,v.value);}else if(Array.isArray(v)&&typeof v[0]===\"string\"&&v.length===2){add(v[0],v[1]);}walk(v,depth+1);});return;}Object.keys(value).forEach(k=>{const v=value[k];if(v==null||typeof v!==\"object\")add(k,v);else walk(v,depth+1);});};try{if(!body)return null;if(typeof FormData!==\"undefined\"&&body instanceof FormData){body.forEach((v,k)=>{if(typeof v===\"string\")add(k,v);});return out;}if(typeof URLSearchParams!==\"undefined\"&&body instanceof URLSearchParams){body.forEach((v,k)=>add(k,v));return out;}if(typeof body===\"string\"){const s=body.trim();if(s.startsWith(\"{\")||s.startsWith(\"[\")){walk(JSON.parse(s),0);return out;}new URLSearchParams(s).forEach((v,k)=>add(k,v));return out;}}catch{return null;}return null// Blob, ArrayBuffer, ReadableStream : contenu non lisible -> jamais rattaché\n;}// Tous les champs texte non vides de l'envoi doivent être présents avec la MÊME valeur.\nfunction bodyMatchesSnapshot(pairs,snapshot){if(!pairs||snapshot.length<MIN_MATCHED_FIELDS)return false;return snapshot.every(([name,value])=>{const values=pairs.get(name);return!!values&&values.indexOf(value)!==-1;});}function isSubmitEndpoint(url){try{const u=new URL(url,location.href);return SUBMIT_HOSTS.indexOf(u.hostname)!==-1&&SUBMIT_PATH.test(u.pathname);}catch{return false;}}// Rattache une requête qui part MAINTENANT à l'unique envoi en attente qui lui correspond.\n// L'identifiant de l'envoi est figé au départ de la requête.\nfunction claimAttempt(method,url,body){if(String(method).toUpperCase()!==\"POST\")return null;const r=registry();const now=Date.now();const pending=Array.from(r.attempts.values()).filter(x=>x.state===\"pending\"&&now-x.startedAt<=MATCH_WINDOW_MS);if(pending.length===0)return null;if(!isSubmitEndpoint(url)){flog(\"POST ignor\\xe9 pendant un envoi : adresse hors service de formulaires\",url);return null;}const pairs=bodyPairs(body);const matches=pending.filter(x=>bodyMatchesSnapshot(pairs,x.snapshot));if(matches.length===0){flog(\"POST ignor\\xe9 : contenu diff\\xe9rent des valeurs saisies dans le formulaire\",url);return null;}if(matches.length>1){flog(\"POST ignor\\xe9 : correspond \\xe0 plusieurs envois en attente (ambigu)\",url,matches.map(m=>m.id));return null;}const a=matches[0];a.inFlight+=1;flog(\"Requ\\xeate d'envoi rattach\\xe9e\",a.id,url);return a.id;}// Signification de la réponse : 2xx non opaque, sans indication d'échec dans un corps JSON éventuel.\nfunction bodySaysFailure(text){const s=(text||\"\").trim();if(!s||s[0]!==\"{\"&&s[0]!==\"[\")return false;try{const j=JSON.parse(s);if(!j||typeof j!==\"object\"||Array.isArray(j))return false;if(j.success===false||j.ok===false)return true;if(j.error)return true;if(Array.isArray(j.errors)&&j.errors.length>0)return true;if(typeof j.status===\"string\"&&/^(error|fail|failed|invalid)$/i.test(j.status))return true;return false;}catch{return false;}}function settle(id,ok,detail){const a=registry().attempts.get(id);if(!a)return;a.inFlight=Math.max(0,a.inFlight-1);if(a.state!==\"pending\"){flog(\"R\\xe9ponse ignor\\xe9e : envoi\",a.state,id,detail);return;}if(ok){a.state=\"success\";if(a.timer!==null)window.clearTimeout(a.timer);flog(\"Envoi r\\xe9ussi -> Lead\",id,detail);sendFormLead(id);return;}if(a.inFlight===0){a.state=\"failed\";if(a.timer!==null)window.clearTimeout(a.timer);flog(\"Envoi \\xe9chou\\xe9 -> aucun Lead\",id,detail);}else{flog(\"\\xc9chec d'une requ\\xeate, une autre est encore en cours\",id,detail);}}export function installNetworkTracking(){if(typeof window===\"undefined\")return;const r=registry();if(r.patched)return;r.patched=true;const w=window;const origFetch=w.fetch?w.fetch.bind(w):null;if(origFetch){w.fetch=function(input,init){const method=init&&init.method||input&&typeof input===\"object\"&&input.method||\"GET\";const url=typeof input===\"string\"?input:input&&(input.url||input.href)||String(input);const id=claimAttempt(String(method),String(url),init?init.body:undefined);const p=origFetch(input,init);if(!id)return p;return p.then(res=>{const okStatus=!!res&&res.ok&&res.type!==\"opaque\"&&res.type!==\"opaqueredirect\";if(!okStatus){settle(id,false,`HTTP ${res&&res.status} ${res&&res.type} ${url}`);return res;}let clone=null;try{clone=res.clone();}catch{clone=null;}if(!clone){settle(id,true,`HTTP ${res.status} ${url}`);return res;}clone.text().then(text=>{const failed=bodySaysFailure(text);settle(id,!failed,`HTTP ${res.status}${failed?\" (corps = \\xe9chec)\":\"\"} ${url}`);}).catch(()=>settle(id,true,`HTTP ${res.status} (corps illisible) ${url}`));return res;},err=>{settle(id,false,`r\\xe9seau ${url}`);throw err;});};}const XHR=w.XMLHttpRequest;if(XHR&&XHR.prototype){const origOpen=XHR.prototype.open;const origSend=XHR.prototype.send;XHR.prototype.open=function(method,url,...rest){this.__ceMethod=method;this.__ceUrl=url;return origOpen.call(this,method,url,...rest);};XHR.prototype.send=function(body){const xhr=this;const id=claimAttempt(String(xhr.__ceMethod||\"GET\"),String(xhr.__ceUrl||\"\"),body);if(id){xhr.addEventListener(\"loadend\",()=>{let text=\"\";try{text=xhr.responseType===\"\"||xhr.responseType===\"text\"?String(xhr.responseText||\"\"):\"\";}catch{text=\"\";}const ok=xhr.status>=200&&xhr.status<300&&!bodySaysFailure(text);settle(id,ok,`XHR ${xhr.status} ${xhr.__ceUrl}`);});}return origSend.call(this,body);};}flog(\"Suivi r\\xe9seau install\\xe9\");}// ---------------------------------------------------------------------------------------------\n// Suivi d'un formulaire précis\n// ---------------------------------------------------------------------------------------------\nexport function attachFormLeadTracking(form){installNetworkTracking();const r=registry();const onSubmit=()=>{if(typeof form.checkValidity===\"function\"&&!form.checkValidity()){flog(\"Envoi bloqu\\xe9 par la validation du navigateur : aucune tentative\");return;}const now=Date.now();const prevId=r.current.get(form);const prev=prevId?r.attempts.get(prevId):undefined;if(prev&&prev.state===\"pending\"){if(now-prev.startedAt<DOUBLE_SUBMIT_MS){flog(\"Double clic : rattach\\xe9 \\xe0 l'envoi en cours\",prev.id);return;}prev.state=\"superseded\";if(prev.timer!==null)window.clearTimeout(prev.timer);flog(\"Envoi pr\\xe9c\\xe9dent remplac\\xe9 (ne pourra plus \\xeatre valid\\xe9)\",prev.id);}const snapshot=snapshotForm(form);if(snapshot.length<MIN_MATCHED_FIELDS){flog(\"ATTENTION : moins de 2 champs texte nomm\\xe9s et remplis, envoi non suivi\",snapshot.map(s=>s[0]));return;}const a={id:newSubmissionId(),form,snapshot,startedAt:now,state:\"pending\",inFlight:0,timer:null};a.timer=window.setTimeout(()=>{if(a.state===\"pending\"){a.state=\"expired\";flog(\"Envoi expir\\xe9 sans r\\xe9ponse r\\xe9ussie -> aucun Lead\",a.id);}},ATTEMPT_TIMEOUT_MS);r.attempts.set(a.id,a);r.current.set(form,a.id);if(r.attempts.size>30){const oldest=r.attempts.keys().next().value;if(oldest)r.attempts.delete(oldest);}flog(\"Nouvel envoi\",a.id,\"champs compar\\xe9s\",snapshot.map(s=>s[0]));};form.addEventListener(\"submit\",onSubmit,true);flog(\"Formulaire suivi\",form.getAttribute(\"name\")||form.id||\"(sans nom)\");return()=>form.removeEventListener(\"submit\",onSubmit,true);}function mergeRefs(...refs){return node=>{refs.forEach(ref=>{if(!ref)return;if(typeof ref===\"function\")ref(node);else ref.current=node;});};}function findForm(root){if(!root)return null;if(root instanceof HTMLFormElement)return root;const inner=root.querySelector(\"form\");if(inner)return inner;const outer=root.closest?root.closest(\"form\"):null;return outer||null;}// Override à appliquer sur le calque Formulaire (Form). Nom conservé pour garder les liaisons existantes.\nexport function withFormSuccessTracking(Component){const Wrapped=/*#__PURE__*/forwardRef(function WithFormSuccessTracking(props,ref){const rootRef=useRef(null);useEffect(()=>{if(typeof window===\"undefined\")return;const form=findForm(rootRef.current);if(!form){flog(\"ATTENTION : \\xe9l\\xe9ment <form> introuvable pour cet override\");return;}return attachFormLeadTracking(form);},[]);return /*#__PURE__*/_jsx(Component,{ref:mergeRefs(ref,rootRef),...props});});return Wrapped;}\nexport const __FramerMetadata__ = {\"exports\":{\"attachFormLeadTracking\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withFormSuccessTracking\":{\"type\":\"reactHoc\",\"name\":\"withFormSuccessTracking\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"installNetworkTracking\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CookieConsentAndFormTracking.map"],"mappings":"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"}