{"version":3,"file":"Header.BFr4U0Yl.mjs","names":["useState"],"sources":["https:/framerusercontent.com/modules/Nj5nSGMb3DaDxtwZ9895/DUXZIl0ADvodMjINZaU4/Header.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useState}from\"react\";// Woordmerk schaalt met de schermbreedte: 164 px op telefoon, 200 px bij 1280,\n// 224 px bij 1600, 248 px bij 1920 en maximaal 280 px. De verhouding van de\n// SVG (677 bij 116) blijft behouden; letters worden niet uitgerekt.\nexport function withWoordmerkMaat(Component){return props=>/*#__PURE__*/_jsx(Component,{...props,style:{...props.style||{},width:\"clamp(164px, calc(7.5vw + 104px), 280px)\",height:\"auto\",aspectRatio:\"677 / 116\"}});}// ---------- Menuknop mobiel: aria-expanded en aria-controls ----------\n// Het mobiele menu is een Framer-variant van Navigation: \"Mobiel\" (dicht, knop \"Menu openen\")\n// en \"Variant 3\" (open, knop \"Menu sluiten\"). Framer zet op de knop wel een wisselend\n// aria-label, maar geen aria-expanded of aria-controls (WCAG 4.1.2).\n// withMenuKnop leest na elke render het aria-label dat Framer voor de actieve variant zet en\n// geeft de knop aria-expanded (false/true). Is het menu open, dan wijst aria-controls naar de nav\n// \"Hoofdmenu\" (id vv-hoofdmenu, gezet door withHuidigePagina). Als het menu dicht is, bestaat\n// die nav niet in de pagina en laten we aria-controls weg.\n// Openen en sluiten blijven bij Framer (tap op de knop wisselt de variant); de override sluit het\n// menu alleen via diezelfde tap bij Escape of na een klik op een link.\nconst MENU_ID=\"vv-hoofdmenu\";let navGemount=false;// Framer wisselt de menuvariant alleen op een tap (pointerdown + pointerup), niet op element.click().\nfunction tikOp(knop){const o={bubbles:true,cancelable:true,pointerId:1,isPrimary:true,button:0,pointerType:\"mouse\"};knop.dispatchEvent(new PointerEvent(\"pointerdown\",o));knop.dispatchEvent(new PointerEvent(\"pointerup\",o));}function zoekKnop(){return document.querySelector(\"[data-vv-menuknop]\");}function isOpen(knop){return!!knop&&knop.getAttribute(\"aria-label\")===\"Menu sluiten\";}// Op het frame \"Menu\" (HTML-tag button) in de component Navigation.\n// - aria-expanded en aria-controls (zie hierboven);\n// - Escape sluit het open menu en zet de focus terug op de knop;\n// - een klik op een link terwijl het menu open is (een menulink of \"Bespreek je project\") sluit het\n//   menu. Navigation staat in de Site Layout en blijft bij een paginawissel staan, dus zonder dit\n//   bleef het menu open over de nieuwe pagina liggen.\nexport function withMenuKnop(Component){return props=>{const[open,setOpen]=useState(false);const[heeftNav,setHeeftNav]=useState(false);useEffect(()=>{navGemount=true;},[]);useEffect(()=>{if(typeof document===\"undefined\")return;const knop=zoekKnop();if(!knop)return;const nuOpen=isOpen(knop);const nav=nuOpen&&!!document.getElementById(MENU_ID);if(nuOpen!==open)setOpen(nuOpen);if(nav!==heeftNav)setHeeftNav(nav);});useEffect(()=>{if(!open)return;const sluit=focus=>{const knop=zoekKnop();if(!isOpen(knop))return;tikOp(knop);if(focus)knop.focus();};const opToets=e=>{if(e.key===\"Escape\")sluit(true);};const opKlik=e=>{const a=e.target?.closest?.(\"a[href]\");if(!a)return;if(e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;if(a.target&&a.target!==\"_self\")return;// Na de klik, zodat de Framer-router de link eerst afhandelt.\nwindow.setTimeout(()=>sluit(false),0);};document.addEventListener(\"keydown\",opToets);document.addEventListener(\"click\",opKlik);return()=>{document.removeEventListener(\"keydown\",opToets);document.removeEventListener(\"click\",opKlik);};},[open]);return /*#__PURE__*/_jsx(Component,{...props,\"data-vv-menuknop\":\"\",\"aria-expanded\":open?\"true\":\"false\",\"aria-controls\":open&&heeftNav?MENU_ID:undefined});};}// ---------- Actieve menulink ----------\n// Framer markeert alleen de link die precies naar de huidige pagina wijst\n// (data-framer-page-link-current) en zet geen aria-current. Deze override:\n// - zet aria-current=\"page\" op de link naar de huidige pagina (menu en footer);\n// - markeert ook de sectie: op /blog/<artikel> is \"Blog\" actief (aria-current=\"true\" en dezelfde\n//   actieve stijl als op /blog, via data-framer-page-link-current). Dat geldt voor elke menulink\n//   met een eigen pad, dus ook Werk op /werk/<case> en Diensten op /diensten/<dienst>.\n// De actieve kleur komt uit de linkstijl Nav Link (link.current); hier wordt geen kleur gezet.\n// Framer wisselt pagina's zonder herladen; een MutationObserver op body werkt de markering bij.\nconst LINKS='nav[aria-label=\"Hoofdmenu\"] a[href], footer a[href]';function schoonPad(p){return p.length>1?p.replace(/\\/+$/,\"\"):p;}function markeerHuidig(){if(typeof document===\"undefined\")return;const hier=schoonPad(window.location.pathname);document.querySelectorAll(LINKS).forEach(a=>{let doel;try{const url=new URL(a.href,window.location.href);if(url.origin!==window.location.origin)return;doel=schoonPad(url.pathname);}catch{return;}const exact=doel===hier;const sectie=!exact&&doel!==\"/\"&&hier.startsWith(doel+\"/\");const waarde=exact?\"page\":sectie?\"true\":null;if(waarde){if(a.getAttribute(\"aria-current\")!==waarde)a.setAttribute(\"aria-current\",waarde);}else if(a.hasAttribute(\"aria-current\")){a.removeAttribute(\"aria-current\");}// Actieve stijl voor de sectie. Alleen weghalen wat deze override zelf heeft gezet.\nif(sectie){if(!a.hasAttribute(\"data-framer-page-link-current\")){a.setAttribute(\"data-framer-page-link-current\",\"true\");a.setAttribute(\"data-vv-sectie\",\"true\");}}else if(a.hasAttribute(\"data-vv-sectie\")){a.removeAttribute(\"data-vv-sectie\");if(!exact)a.removeAttribute(\"data-framer-page-link-current\");}});}let volgers=0;let waarnemer=null;let wacht=0;function plan(){if(wacht)return;wacht=window.requestAnimationFrame(()=>{wacht=0;markeerHuidig();});}// Op het frame \"Links\" (nav Hoofdmenu) in de component Navigation.\n// Geeft de nav ook de id \"vv-hoofdmenu\" (voor aria-controls van de menuknop, zie withMenuKnop).\n// Die id komt pas na de eerste mount in de browser: op de server rendert Framer de header per\n// breakpoint, en een vaste id zou dan meerdere keren in de HTML staan.\nexport function withHuidigePagina(Component){return props=>{const[navId,setNavId]=useState(navGemount?MENU_ID:undefined);useEffect(()=>{navGemount=true;setNavId(MENU_ID);},[]);useEffect(()=>{markeerHuidig();volgers++;if(!waarnemer){waarnemer=new MutationObserver(plan);waarnemer.observe(document.body,{subtree:true,childList:true,attributes:true,attributeFilter:[\"data-framer-page-link-current\",\"href\"]});window.addEventListener(\"popstate\",plan);}return()=>{volgers--;if(volgers<=0&&waarnemer){waarnemer.disconnect();waarnemer=null;window.removeEventListener(\"popstate\",plan);}};},[]);return /*#__PURE__*/_jsx(Component,{...props,id:navId});};}// ---------- Huidige pagina in een subnavigatie (diensten en specialisaties) ----------\n// Op het frame \"Subnavigatie\" in de sjablonen /diensten/:slug en /specialisaties/:slug\n// (CMS-lijst met één link per dienst of specialisatie). Zet op de link naar de pagina waar de\n// bezoeker is aria-current=\"page\" en data-framer-page-link-current, zodat de linkstijl\n// \"Subnavigatie\" (link.current) de huidige keuze gevuld toont, ook als Framer dat attribuut\n// voor een CMS-link zelf niet zet. Alleen weghalen wat deze override zelf heeft gezet.\n// Framer wisselt pagina's zonder herladen; een MutationObserver op de lijst werkt de markering bij.\nfunction markeerSubnav(){if(typeof document===\"undefined\")return;const hier=schoonPad(window.location.pathname);document.querySelectorAll(\"[data-vv-subnav] a[href]\").forEach(a=>{let doel;try{const url=new URL(a.href,window.location.href);if(url.origin!==window.location.origin)return;doel=schoonPad(url.pathname);}catch{return;}if(doel===hier){if(a.getAttribute(\"aria-current\")!==\"page\")a.setAttribute(\"aria-current\",\"page\");if(!a.hasAttribute(\"data-framer-page-link-current\")){a.setAttribute(\"data-framer-page-link-current\",\"true\");a.setAttribute(\"data-vv-subnav-huidig\",\"true\");}}else{if(a.getAttribute(\"aria-current\")===\"page\")a.removeAttribute(\"aria-current\");if(a.hasAttribute(\"data-vv-subnav-huidig\")){a.removeAttribute(\"data-vv-subnav-huidig\");a.removeAttribute(\"data-framer-page-link-current\");}}});}export function withSubnavHuidig(Component){return props=>{useEffect(()=>{markeerSubnav();});useEffect(()=>{let wachtSub=0;const planSub=()=>{if(wachtSub)return;wachtSub=window.requestAnimationFrame(()=>{wachtSub=0;markeerSubnav();});};const obs=new MutationObserver(planSub);obs.observe(document.body,{subtree:true,childList:true,attributes:true,attributeFilter:[\"href\"]});window.addEventListener(\"popstate\",planSub);return()=>{obs.disconnect();window.removeEventListener(\"popstate\",planSub);if(wachtSub)window.cancelAnimationFrame(wachtSub);};},[]);return /*#__PURE__*/_jsx(Component,{...props,\"data-vv-subnav\":\"\"});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withWoordmerkMaat\":{\"type\":\"reactHoc\",\"name\":\"withWoordmerkMaat\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withHuidigePagina\":{\"type\":\"reactHoc\",\"name\":\"withHuidigePagina\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withMenuKnop\":{\"type\":\"reactHoc\",\"name\":\"withMenuKnop\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withSubnavHuidig\":{\"type\":\"reactHoc\",\"name\":\"withSubnavHuidig\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Header.map"],"mappings":"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"}