{"version":3,"file":"Window.gO0A2Xr1.mjs","names":["React.useRef","_Fragment","__esmMin","init_ssg_sandbox_shims","window","de","l","p","J","init_jsx_runtime","init_npm_react_18_3_1","ce","addStyle","s","CSS","writeMaxCss","maxed","w","quote","name","PHONE","MARGIN","MARK_MAX","MARK_RESTORE","saveMaxed","STORE","boxOf","n","el","setup","win","section","maxBox","MAX","bar","isMax","dx","dy","zoom","r","wide","focus","all","key","order","ORDER","o","i","measure","task","gap","toggleMax","barCursor","resizeTimer","onResize","onDown","e","t","z","sx","sy","ox","oy","baseL","baseT","sw","sh","move","nx","ev","ny","up","onMax","onDouble","withWindow","mark","stop","tries","find","m","timer","Component","props","CLOSE","LIT","LINE","DARK","KEYS","NOT_KEY","init_Window"],"sources":["https:/framerusercontent.com/modules/tWyNxLYPShx2dhsyWn2Z/TkBe8m9uuXWrsr7WNGO3/Window.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";// Window: makes a \"Window - …\" frame act like a window on a real computer.\n// - Drag it by its title bar.\n// - Click anywhere on it to bring it to the front (its title bar lights up, the others dim).\n// - The Maximize box in the title bar (or a double-click on the title bar) fills the screen above the taskbar;\n//   press it again to put the window back. Like a real computer, a maximized window is remembered by its layer\n//   name for the visit: open the next project from a maximized project window and it opens maximized too.\n// Put it on each window frame. The Window Title component holds the layers it looks for:\n// \"Maximize (Don’t change layer name)\" with \"Maximize Mark (Don’t change layer name)\" and\n// \"Restore Mark (Don’t change layer name)\" inside. Phones keep their full-screen windows: no dragging there.\nconst MAX=\"Maximize (Don’t change layer name)\";const CLOSE=\"Close (Don’t change layer name)\";const MARK_MAX=\"Maximize Mark (Don’t change layer name)\";const MARK_RESTORE=\"Restore Mark (Don’t change layer name)\";const LIT=\"var(--token-dFSgQDg3U)\";const LINE=\"var(--token-QCytVHSbN)\";const DARK=\"var(--token-ARramzYvx)\";const PHONE=810;const MARGIN=28;// the title bar's Maximize and Close buttons are keys (a Button Base inside each): the focus colours below leave\n// them alone, a window behind dims them, and a press drops the face into its side like the pixel cursors do\nconst KEYS=`:is([data-framer-name=\"${MAX}\"],[data-framer-name=\"${CLOSE}\"])`;const NOT_KEY=`:not(${KEYS},${KEYS} *)`;const CSS=[`@media (max-width:${PHONE-.02}px){[data-framer-name=\"${MAX}\"]{display:none!important}}`,`[data-wwin][data-wdrag],[data-wwin][data-wdrag] *{user-select:none!important;cursor:grabbing!important}`,`[data-wwin][data-wfocus=\"on\"]{--border-color:${LIT}!important}`,`[data-wwin][data-wfocus=\"off\"]{--border-color:${LINE}!important}`,`[data-wwin][data-wfocus=\"on\"] [data-framer-name=\"Back\"]{background-color:${LIT}!important;--border-color:${LIT}!important}`,`[data-wwin][data-wfocus=\"on\"] [data-framer-name=\"Back\"] ${NOT_KEY}{--framer-text-color:${DARK}!important;--border-color:${DARK}!important}`,`[data-wwin][data-wfocus=\"on\"] [data-framer-name=\"Back\"] svg:not(${KEYS} *) g{fill:${DARK}!important}`,`[data-wwin][data-wfocus=\"on\"] [data-framer-name=\"Back\"] ${KEYS}{opacity:1!important}`,`[data-wwin][data-wfocus=\"off\"] [data-framer-name=\"Front\"]{background-color:transparent!important;--border-color:${LINE}!important}`,`[data-wwin][data-wfocus=\"off\"] [data-framer-name=\"Front\"] ${NOT_KEY}{--framer-text-color:${LIT}!important;--border-color:${LINE}!important}`,`[data-wwin][data-wfocus=\"off\"] [data-framer-name=\"Front\"] svg:not(${KEYS} *) g{fill:${LIT}!important}`,`[data-wwin][data-wfocus=\"off\"] [data-framer-name=\"Front\"] ${KEYS}{opacity:.55!important}`,`${KEYS}:active [data-framer-name=\"Face\"],${KEYS}:active [data-framer-name$=\"Mark (Don’t change layer name)\"]{transform:translate(4px,4px)!important}`,`${KEYS}:active [data-framer-name=\"Side\"]{visibility:hidden!important}`].join(\"\\n\");// windows stack 1, 2, 3… in the order they were last clicked; the taskbar (z-index 10 in the Desktop component)\n// stays above all of them, like on a real computer\nconst ORDER=new WeakMap;function addStyle(){if(typeof document===\"undefined\"||document.getElementById(\"window-override-css\"))return;const s=document.createElement(\"style\");s.id=\"window-override-css\";s.textContent=CSS;document.head.appendChild(s);}// Maximized windows, by layer name, for this visit (tab). They are drawn by a stylesheet, which stays in the page\n// head across page changes, so the next page's window is maximized from its first frame.\nconst STORE=\"window-maxed\";let maxed={};const quote=s=>s.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"');function writeMaxCss(){if(typeof document===\"undefined\")return;let s=document.getElementById(\"window-max-css\");if(!s){s=document.createElement(\"style\");s.id=\"window-max-css\";document.head.appendChild(s);}// the gap above the taskbar is measured on each page (--wmax-bottom); the stored value is the fallback\ns.textContent=Object.keys(maxed).map(name=>{const w=`[data-framer-name=\"${quote(name)}\"]`;return`@media (min-width:${PHONE}px){${w}{left:${MARGIN}px!important;top:${MARGIN}px!important;right:${MARGIN}px!important;bottom:var(--wmax-bottom,${maxed[name]}px)!important;width:auto!important;height:auto!important;translate:none!important}${w} [data-framer-name=\"${MARK_MAX}\"]{opacity:0!important}${w} [data-framer-name=\"${MARK_RESTORE}\"]{opacity:1!important}}`;}).join(\"\\n\");}function saveMaxed(){try{sessionStorage.setItem(STORE,JSON.stringify(maxed));}catch(e){}writeMaxCss();}if(typeof window!==\"undefined\"){try{maxed=JSON.parse(sessionStorage.getItem(STORE)||\"{}\")||{};}catch(e){maxed={};}if(Object.keys(maxed).length)writeMaxCss();}// the first ancestor that draws a box (Framer wraps some layers in display: contents)\nfunction boxOf(el){let n=el;while(n&&getComputedStyle(n).display===\"contents\")n=n.parentElement;return n;}function setup(win){if(win.hasAttribute(\"data-wwin\"))return()=>{};win.setAttribute(\"data-wwin\",\"\");addStyle();const section=boxOf(win.parentElement);// windows stack among themselves only: without this, a raised window would rise above the screen's\n// glass layer (the curve, scanlines and glare) that sits over the whole page\nif(section)section.style.isolation=\"isolate\";const maxBox=win.querySelector(`[data-framer-name=\"${MAX}\"]`);const bar=maxBox?maxBox.parentElement:null;const name=win.getAttribute(\"data-framer-name\")||\"\";const isMax=()=>!!name&&Object.prototype.hasOwnProperty.call(maxed,name);let dx=0;let dy=0;const zoom=()=>{const r=win.getBoundingClientRect();return win.offsetWidth?r.width/win.offsetWidth:1;};const wide=()=>window.innerWidth>=PHONE;const focus=()=>{const all=section?Array.from(section.querySelectorAll(\"[data-wwin]\")):[win];const key=section||win;const order=(ORDER.get(key)||all).filter(o=>all.includes(o)&&o!==win);order.push(win);ORDER.set(key,order);order.forEach((o,i)=>o.style.zIndex=String(Math.min(9,i+1)));all.forEach(o=>o.setAttribute(\"data-wfocus\",o===win?\"on\":\"off\"));};// the gap a maximized window leaves above the taskbar, in the page's own pixels (the screen may be zoomed)\nconst measure=()=>{const task=section&&section.querySelector('[data-framer-name=\"Taskbar\"]');if(!section||!task||!wide())return null;const gap=Math.round(Math.max(0,(section.getBoundingClientRect().bottom-task.getBoundingClientRect().top)/zoom())+10);document.documentElement.style.setProperty(\"--wmax-bottom\",gap+\"px\");return gap;};// keep a margin (MARGIN): the glass bends most at its corners, where the title bar buttons would sit, and a\n// button drawn there answers a few pixels away from where it shows\nconst toggleMax=()=>{if(!wide()||!name)return;focus();if(isMax())delete maxed[name];else maxed[name]=measure()??92;saveMaxed();barCursor();};measure();let resizeTimer=0;const onResize=()=>{window.clearTimeout(resizeTimer);resizeTimer=window.setTimeout(measure,150);};window.addEventListener(\"resize\",onResize);const onDown=e=>{focus();if(!bar||!wide()||isMax()||e.button!==0)return;const t=e.target;if(!bar.contains(t)||t.closest(\"a, button, [data-framer-name='\"+MAX+\"']\"))return;e.preventDefault();const z=zoom();const sx=e.clientX;const sy=e.clientY;const ox=dx;const oy=dy;const baseL=win.offsetLeft;const baseT=win.offsetTop;const w=win.offsetWidth;const sw=section?section.offsetWidth:window.innerWidth;const sh=section?section.offsetHeight:window.innerHeight;win.setAttribute(\"data-wdrag\",\"\");const move=ev=>{const nx=ox+(ev.clientX-sx)/z;const ny=oy+(ev.clientY-sy)/z;dx=Math.min(sw-120-baseL,Math.max(-(w-120)-baseL,nx));dy=Math.min(sh-80-baseT,Math.max(-baseT,ny));win.style.setProperty(\"translate\",`${dx}px ${dy}px`);};const up=()=>{window.removeEventListener(\"pointermove\",move);window.removeEventListener(\"pointerup\",up);window.removeEventListener(\"pointercancel\",up);win.removeAttribute(\"data-wdrag\");};window.addEventListener(\"pointermove\",move);window.addEventListener(\"pointerup\",up);window.addEventListener(\"pointercancel\",up);};const onMax=e=>{e.preventDefault();e.stopPropagation();toggleMax();};const onDouble=e=>{const t=e.target;if(t.closest(\"a, [data-framer-name='\"+MAX+\"']\"))return;toggleMax();};if(bar&&wide())bar.style.touchAction=\"none\";// the title bar asks for the grab cursor (the maximize box for a pointer), except while maximized\nconst barCursor=()=>{if(bar)bar.style.cursor=wide()&&!isMax()?\"grab\":\"\";};if(maxBox)maxBox.style.cursor=\"pointer\";barCursor();win.addEventListener(\"pointerdown\",onDown);if(maxBox)maxBox.addEventListener(\"click\",onMax);if(bar)bar.addEventListener(\"dblclick\",onDouble);return()=>{window.removeEventListener(\"resize\",onResize);window.clearTimeout(resizeTimer);win.removeEventListener(\"pointerdown\",onDown);if(maxBox)maxBox.removeEventListener(\"click\",onMax);if(bar)bar.removeEventListener(\"dblclick\",onDouble);win.removeAttribute(\"data-wwin\");};}export function withWindow(Component){return /*#__PURE__*/React.forwardRef(function WindowOverride(props,ref){const mark=React.useRef(null);React.useEffect(()=>{let stop=()=>{};let tries=0;// Framer can mount the window a moment after this effect runs: look again for a short while\nconst find=()=>{const m=mark.current;const win=m?m.previousElementSibling:null;if(win&&win.querySelector(`[data-framer-name=\"${MAX}\"]`))stop=setup(win);else if(tries++<20)timer=window.setTimeout(find,150);};let timer=window.setTimeout(find,0);return()=>{window.clearTimeout(timer);stop();};},[]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{...props,ref:ref}),/*#__PURE__*/_jsx(\"span\",{ref:mark,\"data-window-mark\":\"\",style:{display:\"none\"}})]});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withWindow\":{\"type\":\"reactHoc\",\"name\":\"withWindow\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Window.map"],"mappings":"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"}