{"version":3,"file":"StatCount.CfGpc6U9.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/iR6uyhIFFUfcFvd8rfpV/YzpkEmDrLDof0XdhNga9/StatCount.js"],"sourcesContent":["// StatCount.tsx  ·  WinSphere telwerk-overrides (doc 131 c1 en c5)\n// -----------------------------------------------------------------------------\n// HET ENE telwerk-bestand van het project. Golf P5 (eindcontrole, 23 aug 2026)\n// heeft `WSTelOp.tsx` hierin opgenomen en verwijderd: er waren twee bestanden\n// met dezelfde techniek omdat twee bouwgolven parallel liepen.\n//\n// Twee exports:\n//   withCountUp      het grote cijfer van een sectie telt op zodra het in beeld\n//                    komt (/b2b, /cases 2x, /over-ons, /vs-pagina, /accountancy)\n//   withBalkVulling  een voortgangsbalk onthult zich van links naar rechts\n//                    (/vs-pagina, 2x; anker `ws-vulanker`)\n//\n// Beide zijn bewust OVERRIDES en geen componenten: de tekstnode in Framer blijft\n// precies zoals hij is, dus de brontekst, de EN-vertaling van die node en de kale\n// server-HTML (GEO) veranderen niet. Het telwerk gebeurt alleen in de browser en\n// zet aan het eind exact de oorspronkelijke tekst terug.\n//\n// Regels die hier hard in zitten:\n// - doc 131 c1: telt in 0,6s ease-out, EEN keer, tabular-nums verplicht zodat de\n//   breedte niet springt; alleen het cijfer beweegt, het label eronder niet.\n// - doc 131 a3: de curve is ons ease-out-token cubic-bezier(0.23, 1, 0.32, 1),\n//   niet een zelfbedachte curve. De bezier wordt echt uitgerekend (Newton),\n//   niet benaderd met een andere formule.\n// - doc 131 a5 / `animate`: bij prefers-reduced-motion en in de statische render\n//   staat het eindgetal er meteen (en staat de balk meteen vol, zonder\n//   transition); er wordt dan geen enkele DOM-wijziging gedaan.\n// - Framer-runtime-patroon (memory): IntersectionObserver vuurt op deze site niet\n//   betrouwbaar door de smooth-scroll-laag, dus in-beeld-detectie via rAF-poll,\n//   hetzelfde patroon als CostOfDelay.tsx en TrajectRoadmap.tsx.\n// - `withBalkVulling` raakt alleen clip-path, nooit transform: dat zou botsen met\n//   de transform die Framer zelf op frames zet.\n//\n// Faalgedrag is veilig: als er geen cijfer in de tekst staat, als de waarde 0 is,\n// of als React tussendoor hertekent, blijft simpelweg het eindgetal staan; als het\n// anker van de balk ontbreekt staat de balk meteen vol.\n// -----------------------------------------------------------------------------\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";import{useIsStaticRenderer}from\"framer\";const DUUR_MS=600// doc 131 a3: grote massa / signature moment, plafond 0,6s\n;const IN_BEELD=.85// zelfde drempel als CostOfDelay.tsx\n;const ANKER_BALK=\"ws-vulanker\";/** Ons ease-out-token, echt uitgerekend. */function maakEasing(p1x,p1y,p2x,p2y){const A=(a1,a2)=>1-3*a2+3*a1;const B=(a1,a2)=>3*a2-6*a1;const C=a1=>3*a1;const calc=(t,a1,a2)=>((A(a1,a2)*t+B(a1,a2))*t+C(a1))*t;const slope=(t,a1,a2)=>3*A(a1,a2)*t*t+2*B(a1,a2)*t+C(a1);return x=>{if(x<=0)return 0;if(x>=1)return 1;let t=x;for(let i=0;i<8;i++){const s=slope(t,p1x,p2x);if(s===0)break;t-=(calc(t,p1x,p2x)-x)/s;}if(t<0)t=0;if(t>1)t=1;return calc(t,p1y,p2y);};}const easeOut=maakEasing(.23,1,.32,1);function stilgezet(){try{return!!(typeof window!==\"undefined\"&&window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches);}catch(e){return false;}}/** Eerste tekstnode met een cijfer erin. */function vindCijferNode(root){if(typeof document===\"undefined\")return null;const walker=document.createTreeWalker(root,NodeFilter.SHOW_TEXT);let n=walker.nextNode();while(n){if(/\\d/.test(n.nodeValue||\"\"))return n;n=walker.nextNode();}return null;}/**\n * Splitst \"€ 16.800\" in voorvoegsel, getal en achtervoegsel. De duizendscheiding\n * wordt uit de BRON gelezen en niet uit een locale: zo telt \"€ 168.000\" (nl) met\n * punten en \"€168,000\" (en) met komma's, zonder dat de override de taal kent.\n */function leesDoel(node){const origineel=node.nodeValue||\"\";const match=origineel.match(/\\d[\\d.,\\u00A0\\u202F\\u2009 ]*\\d|\\d/);if(!match||match.index===undefined)return null;const stuk=match[0];const voor=origineel.slice(0,match.index);const na=origineel.slice(match.index+stuk.length);// Decimaal getal (\"7,5\" of \"7.5\"): een scheider met hoogstens twee cijfers\n// erachter is geen duizendtalscheiding maar een decimaalteken. Zonder deze\n// tak telde \"7,5 dag\" naar 75 en sprong het pas op het eind terug naar 7,5.\nconst decimaal=stuk.match(/^(\\d+)([.,])(\\d{1,2})$/);if(decimaal){const eindDec=parseFloat(decimaal[1]+\".\"+decimaal[3]);if(!Number.isFinite(eindDec)||eindDec<=0)return null;return{node,origineel,voor,na,eind:eindDec,scheider:\"\",decimalen:decimaal[3].length,decScheider:decimaal[2]};}const cijfers=stuk.replace(/\\D/g,\"\");if(!cijfers)return null;const eind=parseInt(cijfers,10);if(!Number.isFinite(eind)||eind<=0)return null;const scheiders=stuk.replace(/\\d/g,\"\");return{node,origineel,voor,na,eind,scheider:scheiders.length>0?scheiders.charAt(0):\"\",decimalen:0,decScheider:\"\"};}function formatteer(n,doel){if(doel.decimalen>0){return n.toFixed(doel.decimalen).replace(\".\",doel.decScheider);}const s=String(Math.round(n));if(doel.scheider===\"\")return s;return s.replace(/\\B(?=(\\d{3})+(?!\\d))/g,doel.scheider);}function schrijf(doel,waarde){doel.node.nodeValue=doel.voor+formatteer(waarde,doel)+doel.na;}/**\n * withCountUp\n *\n * Zet dit als code-override op de tekstnode met het cijfer. Meer instellingen\n * zijn er bewust niet: een pagina heeft er precies een tot drie, en de duur en\n * de curve liggen vast in doc 131. Er is geen anker nodig: de override meet zijn\n * eigen wrapper.\n */export function withCountUp(Component){return function StatCount(props){const wrapRef=useRef(null);const isStatic=useIsStaticRenderer();useEffect(()=>{if(typeof window===\"undefined\")return;if(isStatic)return;// Reduced motion: eindgetal blijft gewoon staan, wij doen niets.\nif(stilgezet())return;const root=wrapRef.current;if(!root)return;const node=vindCijferNode(root);if(!node)return;const doel=leesDoel(node);if(!doel)return;const drager=node.parentElement;const vorigeNums=drager?drager.style.fontVariantNumeric:\"\";if(drager)drager.style.fontVariantNumeric=\"tabular-nums\";let raf=0;let start=0;let bezig=false;// Audit 29 aug (T-127 / D8-03): zonder deze regel stond de eindwaarde\n// al zichtbaar in beeld en sprong hij daarna terug naar nul (circa\n// 83 ms zichtbare terugsprong bij 60 fps, gemeten op / en /vs-pagina).\n// De startwaarde wordt daarom meteen bij mount geschreven, voordat de\n// rAF-poll begint; `bezig` gaat in dezelfde stap aan zodat de opruim-\n// functie de oorspronkelijke tekst terugzet als de component verdwijnt\n// voordat het telwerk is gestart. Statische render en\n// prefers-reduced-motion vallen hier niet doorheen: die keren hierboven\n// al terug, dus daar blijft het eindgetal onaangeroerd staan.\nbezig=true;schrijf(doel,0);const meet=()=>{const el=root.firstElementChild;if(!el||typeof el.getBoundingClientRect!==\"function\")return null;return el.getBoundingClientRect();};const tel=nu=>{if(!start)start=nu;const t=Math.min(1,(nu-start)/DUUR_MS);schrijf(doel,doel.eind*easeOut(t));if(t<1){raf=requestAnimationFrame(tel);return;}node.nodeValue=doel.origineel;if(drager)drager.style.fontVariantNumeric=vorigeNums;raf=0;};const wacht=()=>{const r=meet();if(r&&r.top<window.innerHeight*IN_BEELD&&r.bottom>0){schrijf(doel,0);raf=requestAnimationFrame(tel);return;}raf=requestAnimationFrame(wacht);};raf=requestAnimationFrame(wacht);return()=>{if(raf)cancelAnimationFrame(raf);if(bezig)node.nodeValue=doel.origineel;if(drager)drager.style.fontVariantNumeric=vorigeNums;};},[isStatic]);return /*#__PURE__*/_jsx(\"div\",{ref:wrapRef,style:{display:\"contents\"},children:/*#__PURE__*/_jsx(Component,{...props})});};}/**\n * withBalkVulling\n *\n * Onthult een voortgangsbalk van links naar rechts zodra het ankervlak\n * (`#ws-vulanker`) in beeld komt. clip-path, dus geen layout en geen botsing met\n * de transform die Framer zelf op frames zet. Overgenomen uit `WSTelOp.tsx`\n * (golf P2-1) toen dat bestand in dit bestand werd opgenomen; gedrag ongewijzigd.\n */export function withBalkVulling(Component){return function WSBalkVulling(props){const isStatic=useIsStaticRenderer();const[vol,setVol]=useState(false);const[zonderBeweging,setZonderBeweging]=useState(false);useEffect(()=>{if(isStatic||typeof window===\"undefined\")return;if(stilgezet()){setZonderBeweging(true);setVol(true);return;}const el=document.getElementById(ANKER_BALK);if(!el){setVol(true);return;}let raf=0;const wacht=()=>{const r=el.getBoundingClientRect();if(r.top<window.innerHeight*IN_BEELD&&r.bottom>0){setVol(true);return;}raf=requestAnimationFrame(wacht);};raf=requestAnimationFrame(wacht);return()=>{if(raf!==0)cancelAnimationFrame(raf);};},[isStatic]);const klaar=isStatic||zonderBeweging||vol;const style={...props.style||{},clipPath:klaar?\"inset(0 0 0 0)\":\"inset(0 100% 0 0)\",transition:isStatic||zonderBeweging?\"none\":\"clip-path \"+DUUR_MS+\"ms cubic-bezier(0.23, 1, 0.32, 1)\"};return /*#__PURE__*/_jsx(Component,{...props,style:style});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withCountUp\":{\"type\":\"reactHoc\",\"name\":\"withCountUp\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withBalkVulling\":{\"type\":\"reactHoc\",\"name\":\"withBalkVulling\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./StatCount.map"],"mappings":"gMAsC4E,SAAS,EAAW,EAAI,EAAI,EAAI,EAAI,CAAC,IAAM,GAAG,EAAG,IAAK,EAAE,EAAE,EAAG,EAAE,EAAS,GAAG,EAAG,IAAK,EAAE,EAAG,EAAE,EAAS,EAAE,GAAI,EAAE,EAAS,GAAM,EAAE,EAAG,MAAO,EAAE,EAAG,CAAE,EAAE,EAAE,EAAE,EAAG,CAAE,GAAG,EAAE,EAAE,CAAE,GAAG,EAAQ,GAAO,EAAE,EAAG,IAAK,EAAE,EAAE,EAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAG,CAAE,EAAE,EAAE,EAAE,CAAE,EAAE,MAAO,IAAG,CAAC,GAAG,GAAG,EAAE,MAAO,GAAE,GAAG,GAAG,EAAE,MAAO,GAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAM,EAAE,EAAM,EAAE,EAAI,CAAG,EAAE,GAAG,IAAI,EAAE,MAAM,IAAI,EAAK,EAAE,EAAI,CAAG,EAAE,GAAG,CAAE,CAAuB,OAAnB,EAAE,IAAE,EAAE,GAAK,EAAE,IAAE,EAAE,GAAS,EAAK,EAAE,EAAI,CAAG,CAAE,CAAE,CAAuC,SAAS,GAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAS,IAAS,QAAa,EAAO,YAAY,EAAO,WAAW,kCAAkC,CAAC,CAAC,QAAS,MAAS,CAAC,MAAO,EAAM,CAAC,CAA6C,SAAS,EAAe,EAAK,CAAC,GAAG,OAAO,SAAW,IAAY,OAAO,KAAK,IAAM,EAAO,SAAS,iBAAiB,EAAK,WAAW,SAAS,EAAM,EAAE,EAAO,SAAS,EAAE,KAAM,GAAE,CAAC,GAAG,KAAK,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,EAAO,SAAS,CAAE,CAAC,OAAO,IAAK,CAIt9B,SAAS,EAAS,EAAK,CAAC,IAAM,EAAU,EAAK,WAAW,GAAS,EAAM,EAAU,MAAM,mCAAmC,EAAE,GAAG,CAAC,GAAO,EAAM,QAAQ,IAAA,GAAU,OAAO,KAAK,IAAM,EAAK,EAAM,GAAS,EAAK,EAAU,MAAM,EAAE,EAAM,KAAK,EAAQ,EAAG,EAAU,MAAM,EAAM,MAAM,EAAK,MAAM,EAGtR,EAAS,EAAK,MAAM,wBAAwB,EAAE,GAAG,EAAS,CAAC,IAAM,EAAQ,WAAW,EAAS,GAAG,IAAI,EAAS,EAAE,EAAuD,MAAlD,CAAC,OAAO,SAAS,CAAO,GAAG,GAAS,EAAS,KAAW,CAAC,OAAK,YAAU,OAAK,KAAG,KAAK,EAAQ,SAAS,GAAG,UAAU,EAAS,EAAE,CAAC,OAAO,YAAY,EAAS,EAAE,CAAE,CAAC,IAAM,EAAQ,EAAK,QAAQ,MAAM,EAAE,EAAE,GAAG,CAAC,EAAQ,OAAO,KAAK,IAAM,EAAK,SAAS,EAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,SAAS,CAAI,GAAG,GAAM,EAAE,OAAO,KAAK,IAAM,EAAU,EAAK,QAAQ,MAAM,EAAE,EAAE,MAAM,CAAC,OAAK,YAAU,OAAK,KAAG,OAAK,SAAS,EAAU,OAAO,EAAE,EAAU,OAAO,CAAC,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,CAAE,CAAC,SAAS,EAAW,EAAE,EAAK,CAAC,GAAG,EAAK,UAAU,EAAG,OAAO,EAAE,QAAQ,EAAK,SAAS,CAAC,CAAC,QAAQ,IAAI,EAAK,WAAW,EAAG,IAAM,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC,EAAiC,OAA5B,EAAK,WAAW,GAAU,EAAS,EAAE,QAAQ,wBAAwB,EAAK,QAAQ,CAAE,CAAC,SAAS,EAAQ,EAAK,EAAO,CAAC,EAAK,KAAK,UAAU,EAAK,KAAK,EAAW,EAAO,CAAI,EAAE,EAAK,EAAG,CAOh4B,SAAgB,EAAY,EAAU,CAAC,OAAO,SAAmB,EAAM,CAAC,IAAM,EAAQA,EAAO,IAAI,EAAQ,EAAS,EAAoB,EAUqoB,OAVnoB,MAAc,CACzJ,GADoK,IAAS,QAAsB,GAChM,EAAU,EAAE,OAAO,IAAM,EAAK,EAAQ,QAAQ,GAAG,CAAC,EAAK,OAAO,IAAM,EAAK,EAAe,CAAI,EAAE,GAAG,CAAC,EAAK,OAAO,IAAM,EAAK,EAAS,CAAI,EAAE,GAAG,CAAC,EAAK,OAAO,IAAM,EAAO,EAAK,cAAoB,EAAW,EAAO,EAAO,MAAM,mBAAmB,GAAM,IAAO,EAAO,MAAM,mBAAmB,gBAAe,IAAI,EAAI,EAAM,EAAM,EAAM,EAAM,GAS/U,EAAM,GAAK,EAAQ,EAAK,CAAC,EAAE,IAAM,MAAS,CAAC,IAAM,EAAG,EAAK,kBAAmF,MAA9D,CAAC,GAAI,OAAO,EAAG,uBAAwB,WAAkB,KAAY,EAAG,sBAAsB,CAAE,EAAQ,EAAI,GAAI,CAAC,AAAU,IAAM,EAAG,IAAM,EAAE,KAAK,IAAI,GAAG,EAAG,GAAO,CAAO,EAAqC,GAAnC,EAAQ,EAAK,EAAK,KAAK,EAAQ,CAAC,CAAC,EAAK,EAAE,EAAE,CAAC,EAAI,sBAAsB,CAAG,EAAE,MAAO,CAAC,EAAK,UAAU,EAAK,UAAa,IAAO,EAAO,MAAM,mBAAmB,GAAW,EAAI,CAAE,EAAQ,MAAU,CAAC,IAAM,EAAE,EAAK,EAAE,GAAG,GAAG,EAAE,IAAI,EAAO,YAAY,GAAU,EAAE,OAAO,EAAE,CAAC,EAAQ,EAAK,CAAC,EAAE,EAAI,sBAAsB,CAAG,EAAE,MAAO,CAAC,EAAI,sBAAsB,CAAK,CAAE,EAAmC,MAAjC,GAAI,sBAAsB,CAAK,MAAY,CAAI,GAAI,qBAAqB,CAAG,EAAK,IAAM,EAAK,UAAU,EAAK,WAAa,IAAO,EAAO,MAAM,mBAAmB,EAAW,CAAE,EAAE,CAAC,CAAQ,CAAC,EAAsB,EAAK,MAAM,CAAC,IAAI,EAAQ,MAAM,CAAC,QAAQ,UAAU,EAAE,SAAsB,EAAK,EAAU,CAAC,GAAG,CAAK,CAAC,CAAC,CAAC,CAAE,CAAE,CAOv4B,SAAgB,EAAgB,EAAU,CAAC,OAAO,SAAuB,EAAM,CAAC,IAAM,EAAS,EAAoB,EAAO,CAAC,EAAI,GAAQC,EAAS,EAAK,EAAO,CAAC,EAAe,GAAmBA,EAAS,EAAK,EAAE,MAAc,CAAC,GAAG,GAAiB,IAAS,OAAY,OAAO,GAAG,EAAU,EAAE,CAAC,EAAkB,EAAI,EAAE,EAAO,EAAI,EAAE,MAAO,CAAC,IAAM,EAAG,SAAS,eAAe,CAAU,EAAE,GAAG,CAAC,EAAG,CAAC,EAAO,EAAI,EAAE,MAAO,CAAC,IAAI,EAAI,EAAQ,MAAU,CAAC,IAAM,EAAE,EAAG,sBAAsB,EAAE,GAAG,EAAE,IAAI,EAAO,YAAY,GAAU,EAAE,OAAO,EAAE,CAAC,EAAO,EAAI,EAAE,MAAO,CAAC,EAAI,sBAAsB,CAAK,CAAE,EAAmC,MAAjC,GAAI,sBAAsB,CAAK,MAAY,CAAI,IAAM,GAAE,qBAAqB,CAAG,CAAE,CAAE,EAAE,CAAC,CAAQ,CAAC,EAAE,IAAM,EAAM,GAAU,GAAgB,EAAU,EAAM,CAAC,GAAG,EAAM,OAAO,CAAC,EAAE,SAAS,EAAM,iBAAiB,oBAAoB,WAAW,GAAU,EAAe,OAAO,gDAAwD,EAAE,OAAoB,EAAK,EAAU,CAAC,GAAG,EAAY,OAAK,CAAC,CAAE,CAAE,6BAjCv5B,IAA6C,IAAwC,EAAO,EAAQ,IACvI,EAAS,IACT,EAAW,cAA2d,EAAQ,EAAW,IAAI,EAAE,IAAI,CAAC"}