{"version":3,"file":"VerdigrisSideNav.DFmY7_Qi.mjs","names":["useState","useRef","useCallback","useLayoutEffect","useEffect"],"sources":["https:/framerusercontent.com/modules/Uuprmi9sMvNdMTQAovhV/0CBVz7ZCodPjnwhT4lx7/VerdigrisSideNav.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useLayoutEffect,useRef,useState,useCallback}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";// useLayoutEffect warns during Framer's server render; fall back there.\nconst useIsoLayoutEffect=typeof window!==\"undefined\"?useLayoutEffect:useEffect;// ---- dot spring -------------------------------------------------------------\nconst STIFF=320;const DAMP=22;const MAX_V=1400// px/s where stretch + blur max out\n;const MAX_STRETCH=.9;const MAX_BLUR=3;// ---- click scroll -----------------------------------------------------------\nconst SETTLE_MS=150// no scroll events for this long = the smooth scroll ended\n;const FIRST_SCROLL_MS=300// wait this long for the smooth scroll to start\n;const MAX_LOCK_MS=3e3// never hold the highlight longer than this\n;// ---- section labels ---------------------------------------------------------\nconst MAX_LABEL_CHARS=60;const MIN_FIT_PX=48;// Guard every numeric style against an undefined prop, so a missing value can\n// never collapse the layout (e.g. gap: \"undefinedpx\").\nfunction n(v,fallback){return typeof v===\"number\"&&!Number.isNaN(v)?v:fallback;}// A ComponentInstance control is undefined when empty and an array (often\n// with a single child) when the user drops a layer in.\nfunction hasSlot(node){if(node===null||node===undefined||node===false)return false;if(Array.isArray(node))return node.length>0;return true;}// ---- target resolution ------------------------------------------------------\n// \"The Problem\" -> \"theproblem\" so layer names match regardless of\n// casing, spaces, punctuation or emoji.\nfunction norm(s){return(s||\"\").toLowerCase().replace(/[^a-z0-9]/g,\"\");}// Find a single element by DOM id first, then by Framer layer name.\nfunction findByToken(token,ownEl){const raw=(token||\"\").trim();if(!raw)return null;// 1) exact DOM id\nconst byId=document.getElementById(raw);if(byId)return byId;// 2) exact layer name\nconst exact=document.querySelector(`[data-framer-name=\"${raw.replace(/\"/g,'\\\\\"')}\"]`);if(exact&&(!ownEl||!ownEl.contains(exact)))return exact;// 3) normalized layer name\nconst want=norm(raw);if(!want)return null;const all=Array.from(document.querySelectorAll(\"[data-framer-name]\"));for(const el of all){if(ownEl&&(ownEl.contains(el)||el.contains(ownEl)))continue;if(norm(el.getAttribute(\"data-framer-name\")||\"\")===want)return el;}return null;}// Deepest element that contains every match.\nfunction commonAncestor(els){const real=els.filter(Boolean);if(real.length===0)return null;let node=real[0];while(node){const c=node;if(real.every(el=>c.contains(el)))return c;node=node.parentElement;}return null;}// Climb from a matched element up to the direct child of the shared\n// container, so a heading resolves to the whole section that owns it.\nfunction liftToSectionEl(el,container){if(!el||!container||el===container)return el;let node=el;while(node.parentElement&&node.parentElement!==container){node=node.parentElement;if(node===document.body)return el;}return node.parentElement===container?node:el;}// Fallback: largest group of sibling section frames on the page.\nfunction detectGroup(minH,ignore,ownEl){const all=Array.from(document.querySelectorAll(\"[data-framer-name]\")).filter(el=>el.offsetHeight>=minH&&(!ownEl||!ownEl.contains(el)&&!el.contains(ownEl)));const groups=new Map;for(const el of all){const p=el.parentElement;if(!p)continue;const arr=groups.get(p)||[];arr.push(el);groups.set(p,arr);}let best=[];groups.forEach(arr=>{if(arr.length>best.length)best=arr;});return best.filter(el=>{const name=(el.getAttribute(\"data-framer-name\")||\"\").toLowerCase();return!ignore.has(name);});}// ---- section labels ---------------------------------------------------------\nconst TEXT_SEL='[data-framer-component-type=\"RichTextContainer\"], h1, h2, h3, h4, h5, h6, p';const LABEL_SEED_SEL='[data-framer-component-type=\"RichTextContainer\"], h1, h2, h3, h4, h5, h6';// Rendered text, so \"research\" styled uppercase reads \"RESEARCH\".\nfunction labelText(el){return(el.innerText||el.textContent||\"\").replace(/\\s+/g,\" \").trim();}// A section's eyebrow label: the short, single-line text that opens it,\n// reached through the section's first-child chain.\nfunction sectionLabel(section){let node=section.firstElementChild;for(let depth=0;node&&depth<4;depth++){if(node.matches(TEXT_SEL)){const raw=(node.innerText||node.textContent||\"\").trim();if(!raw||raw.includes(\"\\n\"))return null;if(raw.length>MAX_LABEL_CHARS)return null;return node.offsetHeight>0?node:null;}node=node.firstElementChild;}return null;}// Every visible child of `parent` that opens with a label.\nfunction collectSections(parent,ownEl){const anchors=[];let height=0;for(const child of Array.from(parent.children)){if(ownEl&&(ownEl.contains(child)||child.contains(ownEl)))continue;const h=child.offsetHeight;if(!h)continue;const label=sectionLabel(child);if(!label)continue;anchors.push(label);height+=h;}return{anchors,height};}// Find the column of labelled sections. Every label-like text that opens a\n// frame nominates that frame's parent; the parent whose labelled sections\n// cover the most height wins, so the page's main column beats any small\n// card list.\nfunction detectSections(root,ownEl,containerName){const finish=(container,anchors)=>anchors.length?{container,anchors,texts:anchors.map(labelText)}:null;if(containerName&&containerName.trim()){const named=findByToken(containerName,ownEl);if(named)return finish(named,collectSections(named,ownEl).anchors);}const candidates=new Set;root.querySelectorAll(LABEL_SEED_SEL).forEach(text=>{if(ownEl&&ownEl.contains(text))return;let node=text;for(let depth=0;depth<4;depth++){const section=node.parentElement;if(!section||section.firstElementChild!==node)break;if(section.parentElement)candidates.add(section.parentElement);node=section;}});let bestContainer=null;let bestAnchors=[];let bestHeight=0;for(const c of Array.from(candidates)){if(ownEl&&ownEl.contains(c))continue;const g=collectSections(c,ownEl);if(g.anchors.length<2||g.height<=bestHeight)continue;bestContainer=c;bestAnchors=g.anchors;bestHeight=g.height;}return bestContainer?finish(bestContainer,bestAnchors):null;}// The style most of the labels share, so one off-style label can't skew it.\nfunction readLabelStyle(anchors){const tally=new Map;for(const a of anchors){const textEl=a.querySelector(\"p, h1, h2, h3, h4, h5, h6\")||a;const cs=getComputedStyle(textEl);const style={fontFamily:cs.fontFamily,fontSize:cs.fontSize,fontWeight:cs.fontWeight,letterSpacing:cs.letterSpacing,textTransform:cs.textTransform};const key=JSON.stringify(style);const hit=tally.get(key);if(hit)hit.count++;else tally.set(key,{count:1,style});}let best=null;let bestCount=0;for(const t of Array.from(tally.values())){if(t.count>bestCount){best=t.style;bestCount=t.count;}}return best;}const EMPTY={targets:[],container:null,texts:null,style:null};const ITEM_CLASS=\"verdigris-side-nav-item\";const ITEM_CSS=`.${ITEM_CLASS}{appearance:none;-webkit-appearance:none;background:none;border:0;margin:0;padding:0;font:inherit;color:inherit;text-align:left;display:block;width:100%;-webkit-tap-highlight-color:transparent}.${ITEM_CLASS}:focus{outline:none}.${ITEM_CLASS}:focus-visible{outline:1px solid currentColor;outline-offset:3px;border-radius:2px}`;/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 200\n */export default function VerdigrisSideNav(props){const{source,items,labels,sectionsIn,liftToSection,autoDetect,ignoreNames,minSectionHeight,topOffset,scrollOffset,beforeFirst,matchLabelStyle,fitBeside,contentGap,font,customTypography,typography,letterCase,fontSize,fontWeight,letterSpacing,lineHeight,listGap,inactiveColor,hoverColor,activeColor,idleOpacity,siblingDim,fadeDuration,showUnderline,dot,dotDeform,dotOffsetY,underlineColor,underlineWidth,underlineHeight}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const customDot=hasSlot(dot);const fromPage=source===\"labels\";const noneBeforeFirst=beforeFirst===\"none\";// resolved numbers — never undefined\nconst gapPx=n(listGap,16);const sizePx=n(fontSize,14);const weight=n(fontWeight,300);const trackEm=n(letterSpacing,-.02);const leadingPx=n(lineHeight,20);const idleOp=n(idleOpacity,.35);const dimOp=n(siblingDim,.5);const fadeS=n(fadeDuration,.3);const topOff=n(topOffset,200);const scrollOff=n(scrollOffset,120);const nudgeY=n(dotOffsetY,0);const dotSize=n(underlineWidth,6)>0?n(underlineWidth,6):6;const dotGap=n(underlineHeight,12);const sideGap=n(contentGap,32);const[active,setActive]=useState(noneBeforeFirst?-1:0);const[hovered,setHovered]=useState(-1);const[navHover,setNavHover]=useState(false);// Section labels mode: what the page says, once it has been read.\nconst[page,setPage]=useState(null);const[pagePending,setPagePending]=useState(fromPage);// Fit beside content: px free between the nav and the content column.\nconst[fitPx,setFitPx]=useState(null);const[overflowing,setOverflowing]=useState(false);const navRef=useRef(null);const itemRefs=useRef([]);const dotRef=useRef(null);const resolvedCache=useRef(null);const pageKey=useRef(\"\");// Click scroll: the item held active while the smooth scroll runs.\nconst lock=useRef(null);// A clicked item that can't reach the spy line because the page bottomed\n// out stays active until the user scrolls.\nconst pinned=useRef(null);const lockRelease=useRef(()=>{});const spring=useRef({py:0,vy:0,ty:0,raf:0,running:false,last:0,started:false});// Manual rows: \"Labels\" (comma separated) overrides the Sections array.\nconst manualRows=!fromPage&&labels&&labels.trim()?labels.split(\",\").map(l=>l.trim()).filter(Boolean).map(l=>({label:l,sectionId:\"\"})):items||[];const manualKey=manualRows.map(r=>`${r.label}|${r.sectionId}`).join(\"~\");const rows=fromPage&&page&&page.texts.length?page.texts.map(l=>({label:l,sectionId:\"\"})):manualRows;const rowKey=rows.map(r=>r.label).join(\"~\");// Manual mode: resolve every row to a real element on the page.\n// Each target can be a DOM id, or the name of ANY layer — a stack,\n// a component instance, a heading, anything named in the layer panel.\nconst resolveManual=useCallback(()=>{const own=navRef.current;const list=manualKey?manualKey.split(\"~\"):[];const targets=list.map(r=>r.split(\"|\")[1]||\"\");const direct=targets.map(t=>findByToken(t,own));if(direct.some(Boolean)){const container=commonAncestor(direct.filter(Boolean));return{targets:liftToSection?direct.map(el=>liftToSectionEl(el,container)):direct,container,texts:null,style:null};}if(!autoDetect)return{...EMPTY,targets:direct};const ignore=new Set((ignoreNames||\"\").split(\",\").map(s=>s.trim().toLowerCase()).filter(Boolean));const group=detectGroup(n(minSectionHeight,300),ignore,own);return{targets:targets.map((_,i)=>group[i]??null),container:group.length?group[0].parentElement:null,texts:null,style:null};},[manualKey,liftToSection,autoDetect,ignoreNames,minSectionHeight]);// Section labels mode: read the labels off the page. \"Labels\" renames by\n// position (blank keeps the page's text, \"-\" hides that section).\nconst resolvePage=useCallback(()=>{const own=navRef.current;let found=null;if(!isCanvas){found=detectSections(document,own,sectionsIn);}else if(own){// On the canvas, only look inside the frame the nav sits in.\nlet scope=own.parentElement;for(let i=0;scope&&i<10&&!found;i++){found=detectSections(scope,own,sectionsIn);scope=scope.parentElement;}}if(!found)return null;const hit=found;const renames=(labels||\"\").split(\",\").map(s=>s.trim());const targets=[];const texts=[];hit.anchors.forEach((a,i)=>{if(renames[i]===\"-\")return;targets.push(a);texts.push(renames[i]||hit.texts[i]);});return{targets,container:hit.container,texts,style:readLabelStyle(hit.anchors)};},[isCanvas,sectionsIn,labels]);const resolve=useCallback(()=>{if(fromPage){const r=resolvePage();if(r&&r.targets.length)return r;}return resolveManual();},[fromPage,resolvePage,resolveManual]);// Cached lookup. The DOM query is expensive, so it only re-runs on mount,\n// on resize, on the late-mount timers, or when a cached node has detached.\nconst getResolved=useCallback(force=>{const cached=resolvedCache.current;const stale=!cached||cached.targets.some(el=>el&&!el.isConnected);if(force||stale)resolvedCache.current=resolve();return resolvedCache.current||EMPTY;},[resolve]);// drop the cache whenever the section list or resolution rules change\nuseEffect(()=>{resolvedCache.current=null;},[resolve]);// Push what was read off the page into state (only when it changed).\nconst syncPage=useCallback(r=>{if(!fromPage)return;const next=r.texts?{texts:r.texts,style:r.style}:null;const key=JSON.stringify(next);if(key!==pageKey.current){pageKey.current=key;setPage(next);}setPagePending(false);},[fromPage]);// Room between the nav's left edge and the content column.\nconst syncFit=useCallback(r=>{const nav=navRef.current;if(!fitBeside||isCanvas||!nav||!r.container){setFitPx(null);return;}const navLeft=nav.getBoundingClientRect().left;const col=r.container.getBoundingClientRect();// only constrain a nav that sits in the left gutter\nconst next=navLeft<col.left?Math.floor(col.left-navLeft-sideGap):null;setFitPx(prev=>prev===next||prev!==null&&next!==null&&Math.abs(prev-next)<1?prev:next);},[fitBeside,isCanvas,sideGap]);// ---- scroll spy ---------------------------------------------------------\nuseEffect(()=>{const update=force=>{const r=getResolved(force);if(force){syncPage(r);syncFit(r);}if(isCanvas||lock.current)return;if(pinned.current!==null&&r.targets[pinned.current]){setActive(pinned.current);return;}const els=r.targets;// bottom of the page always lights up the last resolvable item\nconst atBottom=window.innerHeight+window.scrollY>=document.documentElement.scrollHeight-2;if(atBottom){for(let i=els.length-1;i>=0;i--){if(els[i]){setActive(i);return;}}}// A click lands its target at the scroll offset, so the spy line\n// never sits above that or the clicked item wouldn't light up.\nconst line=Math.max(topOff,scrollOff+2);let current=-1;els.forEach((el,i)=>{if(!el)return;if(el.getBoundingClientRect().top-line<=1)current=i;});setActive(current<0?noneBeforeFirst?-1:0:current);};const release=keepClicked=>{const held=lock.current;if(!held)return;clearTimeout(held.timer);lock.current=null;if(keepClicked){const el=getResolved().targets[held.index];const atBottom=window.innerHeight+window.scrollY>=document.documentElement.scrollHeight-2;if(el&&atBottom){const top=el.getBoundingClientRect().top;if(top>=0&&top<window.innerHeight){pinned.current=held.index;}}}update(false);};const onScroll=()=>{const held=lock.current;if(held){clearTimeout(held.timer);if(performance.now()>held.deadline){release(true);return;}held.timer=window.setTimeout(()=>release(true),SETTLE_MS);return;}pinned.current=null;update(false);};// the user taking over the scroll ends the click hold right away\nconst onUserScroll=()=>{pinned.current=null;if(lock.current)release(false);};const onKey=e=>{const keys=[\"ArrowUp\",\"ArrowDown\",\"PageUp\",\"PageDown\",\"Home\",\"End\",\" \"];if(keys.includes(e.key))onUserScroll();};const onResize=()=>update(true);lockRelease.current=release;update(true);if(isCanvas){// canvas: no scrolling, just read the page once it has rendered\nconst timers=[200,1e3].map(ms=>setTimeout(()=>update(true),ms));return()=>timers.forEach(clearTimeout);}window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onResize);window.addEventListener(\"wheel\",onUserScroll,{passive:true});window.addEventListener(\"touchstart\",onUserScroll,{passive:true});window.addEventListener(\"keydown\",onKey);// sections and images can mount / reflow late on first paint\nconst timers=[200,600,1200,2500].map(ms=>setTimeout(()=>update(true),ms));// web fonts change label widths and section heights\nlet alive=true;if(document.fonts&&document.fonts.ready){document.fonts.ready.then(()=>alive&&update(true));}return()=>{alive=false;window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onResize);window.removeEventListener(\"wheel\",onUserScroll);window.removeEventListener(\"touchstart\",onUserScroll);window.removeEventListener(\"keydown\",onKey);timers.forEach(clearTimeout);if(lock.current)clearTimeout(lock.current.timer);lock.current=null;};},[isCanvas,getResolved,syncPage,syncFit,topOff,scrollOff,noneBeforeFirst]);// ---- dot springs to the active item, deforming with velocity ------------\nuseEffect(()=>{const nav=navRef.current;const dotEl=dotRef.current;if(!nav||!dotEl)return;const el=active>=0?itemRefs.current[active]:null;if(!el){// nothing active: hide the dot and let it appear in place next time\ndotEl.style.opacity=\"0\";cancelAnimationFrame(spring.current.raf);spring.current.running=false;spring.current.started=false;return;}const base=\"translate(-100%, -50%)\";const deform=vy=>{if(!dotDeform){dotEl.style.transform=base;return;}const speed=Math.min(MAX_V,Math.abs(vy));const k=speed/MAX_V*MAX_STRETCH;const sy=1+k;const sx=1-k*.5;dotEl.style.transform=`${base} scaleX(${sx}) scaleY(${sy})`;dotEl.style.filter=k>.001?`blur(${speed/MAX_V*MAX_BLUR}px)`:\"none\";};const rest=()=>{dotEl.style.transform=base;dotEl.style.filter=\"none\";};const ty=el.offsetTop+el.offsetHeight/2+nudgeY;const s=spring.current;s.ty=ty;if(!s.started){s.py=ty;s.vy=0;dotEl.style.top=`${ty}px`;dotEl.style.opacity=\"1\";rest();s.started=true;return;}dotEl.style.opacity=\"1\";const tick=t=>{const dt=Math.min(.032,(t-s.last)/1e3||.016);s.last=t;const a=-STIFF*(s.py-s.ty)-DAMP*s.vy;s.vy+=a*dt;s.py+=s.vy*dt;dotEl.style.top=`${s.py}px`;deform(s.vy);if(Math.abs(s.py-s.ty)<.3&&Math.abs(s.vy)<.3){s.py=s.ty;dotEl.style.top=`${s.ty}px`;rest();s.running=false;return;}s.raf=requestAnimationFrame(tick);};if(!s.running){s.running=true;s.last=performance.now();s.raf=requestAnimationFrame(tick);}},[active,rowKey,dotDeform,nudgeY,customDot,gapPx,leadingPx,fitPx]);useEffect(()=>()=>cancelAnimationFrame(spring.current.raf),[]);// ---- fit beside content: hide when a word can't fit ---------------------\nconst fitted=fitBeside&&!isCanvas&&fitPx!==null;useIsoLayoutEffect(()=>{const nav=navRef.current;if(!nav||!fitted){if(overflowing)setOverflowing(false);return;}const over=nav.scrollWidth>nav.clientWidth+1;if(over!==overflowing)setOverflowing(over);});// ---- smooth jump --------------------------------------------------------\nconst handleClick=i=>{const el=getResolved(true).targets[i];if(!el)return;const maxY=document.documentElement.scrollHeight-window.innerHeight;const y=el.getBoundingClientRect().top+window.scrollY-scrollOff;const reduce=typeof window.matchMedia===\"function\"&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;// hold the highlight on the clicked item until the scroll settles\nsetActive(i);pinned.current=null;if(lock.current)clearTimeout(lock.current.timer);lock.current={index:i,timer:window.setTimeout(()=>lockRelease.current(true),FIRST_SCROLL_MS),deadline:performance.now()+MAX_LOCK_MS};window.scrollTo({top:Math.max(0,Math.min(y,Math.max(0,maxY))),behavior:reduce?\"auto\":\"smooth\"});};// ---- opacity model ------------------------------------------------------\n// the nav idles dim and wakes on hover; hovering one item dims its siblings\nconst hiddenForRoom=fitted&&(fitPx<MIN_FIT_PX||overflowing);const waitingForPage=fromPage&&pagePending&&!isCanvas;const hidden=hiddenForRoom||waitingForPage;const navOpacity=hidden?0:isCanvas?1:navHover?1:idleOp;const itemOpacity=i=>{if(isCanvas)return 1;if(hovered===-1)return 1;return i===hovered?1:dimOp;};const ease=`${fadeS}s cubic-bezier(0.4, 0, 0.2, 1)`;// Match labels: copy the page's label type, keep the nav's own colours.\nconst labelStyle=!customTypography&&fromPage&&matchLabelStyle&&page&&page.style?page.style:null;const containerStyle={position:\"relative\",display:\"flex\",flexDirection:\"column\",gap:`${gapPx}px`,rowGap:`${gapPx}px`,fontFamily:labelStyle?labelStyle.fontFamily:customTypography&&typography?.fontFamily||font||\"Work Sans, sans-serif\",opacity:navOpacity,visibility:hidden?\"hidden\":\"visible\",pointerEvents:hidden?\"none\":undefined,transition:`opacity ${ease}, visibility 0s linear ${hidden?fadeS:0}s`,willChange:\"opacity\",...fitted?{width:\"max-content\",maxWidth:`${Math.max(0,fitPx)}px`}:null};const textStyle=labelStyle?{fontSize:labelStyle.fontSize,fontWeight:labelStyle.fontWeight,letterSpacing:labelStyle.letterSpacing,textTransform:labelStyle.textTransform}:{fontSize:`${sizePx}px`,fontWeight:weight,letterSpacing:`${trackEm}em`,...customTypography?typography:{},textTransform:\"none\"};// The indicator wrapper carries the spring. Its contents are either the\n// built-in circle or whatever layer / component was dropped into the slot.\nconst dotShared={position:\"absolute\",left:`-${dotGap}px`,top:\"0px\",transform:\"translate(-100%, -50%)\",transformOrigin:\"center center\",willChange:\"transform, filter, top\",opacity:isCanvas?1:0,pointerEvents:\"none\"};const dotWrapperStyle=customDot?{...dotShared,width:\"max-content\",height:\"max-content\",display:\"flex\",alignItems:\"center\",justifyContent:\"flex-end\"}:{...dotShared,width:`${dotSize}px`,height:`${dotSize}px`,borderRadius:\"50%\",backgroundColor:underlineColor||\"rgb(15, 15, 16)\"};return /*#__PURE__*/_jsxs(\"nav\",{ref:navRef,\"aria-label\":\"Sections\",\"aria-hidden\":hidden||undefined,style:containerStyle,onMouseEnter:()=>setNavHover(true),onMouseLeave:()=>{setNavHover(false);setHovered(-1);},children:[/*#__PURE__*/_jsx(\"style\",{children:ITEM_CSS}),showUnderline&&/*#__PURE__*/_jsx(\"div\",{ref:dotRef,style:dotWrapperStyle,children:customDot?dot:null}),rows.map((item,i)=>{const isActive=i===active;const isHovered=i===hovered;const color=isActive?activeColor||\"rgb(15, 15, 16)\":isHovered?hoverColor||\"rgb(15, 15, 16)\":inactiveColor||\"rgb(207, 209, 213)\";return /*#__PURE__*/_jsx(\"button\",{type:\"button\",className:ITEM_CLASS,ref:el=>{itemRefs.current[i]=el;},\"aria-current\":isActive?\"location\":undefined,tabIndex:hidden?-1:undefined,onClick:()=>handleClick(i),onMouseEnter:()=>setHovered(i),style:{cursor:\"pointer\",userSelect:\"none\",opacity:itemOpacity(i),transition:`opacity ${ease}`,willChange:\"opacity\",color:color},children:/*#__PURE__*/_jsx(\"span\",{style:{...textStyle,lineHeight:customTypography?typography?.lineHeight||`${leadingPx}px`:`${leadingPx}px`,color:color,transition:`color ${ease}`},children:letterCase===\"capitalize\"?item.label.toLocaleLowerCase().replace(/(^|\\s)(\\S)/g,(_,space,char)=>space+char.toLocaleUpperCase()):letterCase===\"uppercase\"?item.label.toLocaleUpperCase():item.label})},`${item.label}-${i}`);})]});}addPropertyControls(VerdigrisSideNav,{source:{type:ControlType.Enum,title:\"Items from\",options:[\"manual\",\"labels\"],optionTitles:[\"Manual\",\"Section labels\"],defaultValue:\"manual\",displaySegmentedControl:true,description:\"Section labels reads each section's eyebrow label off the page, so the nav always says what the page says.\"},items:{type:ControlType.Array,title:\"Sections\",hidden:props=>props.source===\"labels\",control:{type:ControlType.Object,controls:{label:{type:ControlType.String,title:\"Label\",defaultValue:\"Section\"},sectionId:{type:ControlType.String,title:\"Target\",defaultValue:\"\",description:\"Name of ANY layer on the page — a stack, a component instance, a heading — or a DOM id. Matching ignores case and spaces.\"}}},defaultValue:[{label:\"CONTEXT\",sectionId:\"Context\"},{label:\"PROBLEM\",sectionId:\"The Problem\"},{label:\"RESEARCH\",sectionId:\"Research\"},{label:\"SOLUTION\",sectionId:\"Solution\"},{label:\"VALIDATION\",sectionId:\"Usability testing and impact\"},{label:\"REFLECTION\",sectionId:\"Reflection\"}]},liftToSection:{type:ControlType.Boolean,title:\"Lift to section\",defaultValue:true,hidden:props=>props.source===\"labels\",description:\"Point at a heading and scroll to the whole section that contains it. Turn off to scroll to the exact layer.\"},labels:{type:ControlType.String,title:\"Labels\",defaultValue:\"\",description:\"Manual: comma-separated labels that override Sections and map to page sections by order. Section labels: optional renames by position — leave an entry blank to keep the page's text, or write - to hide that section.\"},sectionsIn:{type:ControlType.String,title:\"Sections in\",defaultValue:\"\",hidden:props=>props.customTypography||props.source!==\"labels\",description:\"Optional. Name of the layer that holds the sections. Leave empty to find the main column automatically.\"},autoDetect:{type:ControlType.Boolean,title:\"Auto-detect\",defaultValue:true,hidden:props=>props.source===\"labels\",description:\"Fallback: if no Target matches, map items by order\"},ignoreNames:{type:ControlType.String,title:\"Ignore layers\",defaultValue:\"Hero, Footer, Navigation, Content, Stack\",hidden:props=>props.source===\"labels\"||!props.autoDetect,description:\"Layer names to skip when auto-detecting, comma separated\"},minSectionHeight:{type:ControlType.Number,title:\"Min height\",defaultValue:300,min:50,max:1500,step:10,hidden:props=>props.source===\"labels\"||!props.autoDetect,description:\"Layers shorter than this aren't treated as sections\"},topOffset:{type:ControlType.Number,title:\"Top offset\",defaultValue:200,min:0,max:900,step:1,description:\"Distance from top before a section is considered active\"},scrollOffset:{type:ControlType.Number,title:\"Scroll offset\",defaultValue:120,min:0,max:600,step:1,description:\"Top padding when scrolling to a section\"},beforeFirst:{type:ControlType.Enum,title:\"Above first\",options:[\"first\",\"none\"],optionTitles:[\"Highlight first\",\"None\"],defaultValue:\"first\",displaySegmentedControl:true,description:\"What's highlighted before the first section reaches the top offset, e.g. while the hero is on screen.\"},fitBeside:{type:ControlType.Boolean,title:\"Fit beside content\",defaultValue:false,description:\"Keep the nav in the gutter left of the content: labels sit on one line when there's room, wrap when there isn't, and the nav hides when a word no longer fits.\"},contentGap:{type:ControlType.Number,title:\"Content gap\",defaultValue:32,min:0,max:200,step:1,unit:\"px\",hidden:props=>!props.fitBeside,description:\"Space kept between the nav and the content column\"},// ---- type ---------------------------------------------------------------\ncustomTypography:{type:ControlType.Boolean,title:\"Custom type\",defaultValue:false,description:\"Choose your own font and size instead of matching section labels.\"},typography:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:13,variant:\"Medium\",letterSpacing:\"0.03em\",lineHeight:\"20px\"},hidden:props=>!props.customTypography},letterCase:{type:ControlType.Enum,title:\"Letter case\",options:[\"original\",\"capitalize\",\"uppercase\"],optionTitles:[\"Original\",\"Capitalized\",\"Uppercase\"],defaultValue:\"original\"},matchLabelStyle:{type:ControlType.Boolean,title:\"Match labels\",defaultValue:false,hidden:props=>props.source!==\"labels\",description:\"Use the font, size, weight, tracking and case of the page's section labels. Colours stay as set below.\"},font:{type:ControlType.String,title:\"Font family\",defaultValue:\"Work Sans, sans-serif\",hidden:props=>props.customTypography||props.source===\"labels\"&&!!props.matchLabelStyle},fontSize:{type:ControlType.Number,title:\"Font size\",defaultValue:14,min:8,max:48,step:1,unit:\"px\",hidden:props=>props.customTypography||props.source===\"labels\"&&!!props.matchLabelStyle},fontWeight:{type:ControlType.Number,title:\"Font weight\",defaultValue:300,min:100,max:900,step:100,hidden:props=>props.customTypography||props.source===\"labels\"&&!!props.matchLabelStyle},letterSpacing:{type:ControlType.Number,title:\"Letter spacing\",defaultValue:-.02,min:-.1,max:.2,step:.01,unit:\"em\",hidden:props=>props.customTypography||props.source===\"labels\"&&!!props.matchLabelStyle},lineHeight:{type:ControlType.Number,title:\"Line height\",defaultValue:20,min:8,max:60,step:1,unit:\"px\"},listGap:{type:ControlType.Number,title:\"Gap between items\",defaultValue:16,min:0,max:60,step:1,unit:\"px\"},// ---- colors -------------------------------------------------------------\ninactiveColor:{type:ControlType.Color,title:\"Inactive color\",defaultValue:\"rgb(207, 209, 213)\"},hoverColor:{type:ControlType.Color,title:\"Hover color\",defaultValue:\"rgb(15, 15, 16)\"},activeColor:{type:ControlType.Color,title:\"Active color\",defaultValue:\"rgb(15, 15, 16)\"},// ---- dimming ------------------------------------------------------------\nidleOpacity:{type:ControlType.Number,title:\"Idle opacity\",defaultValue:.35,min:0,max:1,step:.05,description:\"Opacity of the whole nav when the mouse is away\"},siblingDim:{type:ControlType.Number,title:\"Sibling dim\",defaultValue:.5,min:0,max:1,step:.05,description:\"Opacity of the other items while one is hovered\"},fadeDuration:{type:ControlType.Number,title:\"Fade duration\",defaultValue:.3,min:0,max:1.5,step:.05,unit:\"s\"},// ---- indicator ----------------------------------------------------------\nshowUnderline:{type:ControlType.Boolean,title:\"Show dot\",defaultValue:true},dot:{type:ControlType.ComponentInstance,title:\"Custom dot\",hidden:props=>!props.showUnderline,description:\"Drop in any layer or component to use instead of the circle. Leave empty for the built-in dot.\"},underlineColor:{type:ControlType.Color,title:\"Dot color\",defaultValue:\"rgb(15, 15, 16)\",hidden:props=>!props.showUnderline||!!props.dot},underlineWidth:{type:ControlType.Number,title:\"Dot size\",defaultValue:6,min:2,max:24,step:1,unit:\"px\",hidden:props=>!props.showUnderline||!!props.dot},underlineHeight:{type:ControlType.Number,title:\"Dot gap\",defaultValue:12,min:0,max:40,step:1,unit:\"px\",hidden:props=>!props.showUnderline,description:\"Distance from the left edge of the labels\"},dotOffsetY:{type:ControlType.Number,title:\"Dot nudge Y\",defaultValue:0,min:-40,max:40,step:1,unit:\"px\",hidden:props=>!props.showUnderline,description:\"Fine-tune vertical centering against the label\"},dotDeform:{type:ControlType.Boolean,title:\"Squash on travel\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",hidden:props=>!props.showUnderline,description:\"Stretch and blur the indicator with its speed. Turn off for a custom dot you want kept crisp.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"VerdigrisSideNav\",\"slots\":[\"dot\"],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicWidth\":\"200\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./VerdigrisSideNav.map"],"mappings":"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"}