{"version":3,"file":"Tableofcontents.ChX4OFmG.mjs","names":["useRef","useState","useCallback","useMemo"],"sources":["https:/framerusercontent.com/modules/LcO8JHyt93pcRwi6LjFC/lxDlZzaZwbyYqvk39ftm/Tableofcontents.js"],"sourcesContent":["// TableOfContents — token-driven, two forms: vertical outline / horizontal tabs.\n// All colors come from LeaderPro themeJSON CSS variables; no ControlType.Color is exposed.\n// Local namespace is --toc-* to avoid self-referencing site tokens (var(--x): var(--x) is invalid).\n// Spacing is derived from --gap-tiny by multipliers; with base=2 it matches the old hard-coded defaults.\n//\n// v5: horizontal mode follows the standard tabs spec\n//   · rail and indicator are decoupled — rail is a 1px hairline across the full width,\n//     indicator is a 3px bar sitting on top of it\n//   · horizontal root padding is zero so the rail truly touches both edges\n//   · horizontal has no hover background, radius or border: state is text color + underline\n//   · Appearance / Indentation / Active Indicator groups are hidden in horizontal mode;\n//     tabs only keep the Indicator / Baseline toggles in Layout (sizes derive from unit)\n//\n// v6: performance\n//   · MutationObserver ignores the component's own subtree and mutations that\n//     don't touch headings — no more full re-collect on every unrelated DOM change\n//   · scroll-spy: offsets are sorted once per measure, lookup is a binary search;\n//     resize / ResizeObserver only mark offsets dirty and coalesce into the next rAF\n//   · setActiveId is only called when the id actually changes (ref mirror)\n//   · list items are memoized — an active change re-renders 2 items, not N\n//   · tab nodes are tracked via a ref map instead of querySelectorAll on every change\n//   · edge-fade scroll handler is rAF-throttled and only sets state on transitions\n//   · typography / cssVars objects are memoized on their leaf inputs\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{memo,useEffect,useState,useCallback,useRef,startTransition,useMemo}from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{getGlobalFontConfig,useScreenSize}from\"https://framerusercontent.com/modules/FOprQmMZ6Ei9KX1yyQYH/enVwGTNuwgyJFuPAsCOr/Font.js\";/* ────────────────────────────────────────────────────────────\n   Token contract (source: actual LeaderPro themeJSON export, not the v0.2 manual names).\n   Note: the uppercase in --text-Inverse / --button-bg-Disable is a ThemeGenerator v0.1.8\n   leftover and CSS var names are case-sensitive. This component uses neither.\n   ──────────────────────────────────────────────────────────── */// Typography contract is not declared here — slot names, weight names and breakpoints\n// all come from getGlobalFontConfig() / useScreenSize() in Theme/Font.tsx.\nconst VAR_TO_CSS={\"--framer-font-size\":\"fontSize\",\"--framer-line-height\":\"lineHeight\",\"--framer-letter-spacing\":\"letterSpacing\",\"--framer-font-family\":\"fontFamily\",\"--framer-font-weight\":\"fontWeight\"};const STYLE_ID=\"toc-token-styles-v6\";// On React 19 + Framer published sites, <style>{css}</style> triggers #418/#422/#425\n// hydration mismatches, so the sheet is appended to document.head in an effect, deduped by id.\nconst STYLE_SHEET=`\n.toc-root {\n    box-sizing: border-box;\n    width: 100%;\n    background: transparent;\n    border-radius: var(--toc-radius);\n    border: var(--toc-border-width) solid var(--toc-border);\n    padding: var(--toc-padding);\n    contain: layout style;\n}\n.toc-list {\n    box-sizing: border-box;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    gap: var(--toc-item-gap);\n}\n.toc-rail {\n    position: absolute;\n    left: 0;\n    top: 0;\n    bottom: 0;\n    width: var(--toc-rail-size);\n    border-radius: calc(var(--toc-rail-size) / 2);\n    background: var(--toc-rail-color);\n    pointer-events: none;\n}\n.toc-item {\n    position: relative;\n}\n.toc-indicator {\n    position: absolute;\n    background: var(--toc-indicator-color);\n    pointer-events: none;\n    transition: opacity var(--toc-duration) var(--toc-easing),\n                width var(--toc-duration) var(--toc-easing),\n                transform var(--toc-duration) var(--toc-easing);\n}\n.toc-link {\n    box-sizing: border-box;\n    display: block;\n    width: 100%;\n    text-align: left;\n    background: none;\n    border: none;\n    border-radius: calc(var(--toc-radius) / 2);\n    margin: 0;\n    cursor: pointer;\n    color: var(--toc-text);\n    padding: var(--toc-link-pad-y) var(--toc-link-pad-x);\n    transition: color var(--toc-duration) var(--toc-easing),\n                background-color var(--toc-duration) var(--toc-easing);\n}\n.toc-link:hover {\n    color: var(--toc-text-hover);\n    background-color: var(--toc-bg-hover);\n}\n.toc-link:active {\n    background-color: var(--toc-bg-pressed);\n}\n.toc-link:focus-visible {\n    outline: 2px solid var(--toc-indicator-color);\n    outline-offset: 2px;\n}\n.toc-link[aria-current=\"location\"] {\n    color: var(--toc-text-active);\n}\n.toc-link[aria-current=\"location\"]:hover {\n    color: var(--toc-text-active);\n}\n.toc-empty {\n    color: var(--toc-text);\n    opacity: 0.6;\n}\n\n/* ── Horizontal: tabs ───────────────────────────────────── */\n/* The rail is the scroller's bottom border rather than an absolutely positioned\n   element in the ul — an absolute element inside a scroll container is sized to\n   clientWidth and scrolls away with the content. */\n.toc-scroller {\n    position: relative;\n    box-sizing: border-box;\n    max-width: 100%;\n    overflow-x: auto;\n    overflow-y: hidden;\n    overscroll-behavior-x: contain;\n    scrollbar-width: none;\n    -ms-overflow-style: none;\n    border-bottom: var(--toc-rail-size) solid var(--toc-rail-color);\n}\n.toc-scroller::-webkit-scrollbar {\n    display: none;\n}\n.toc-scroller[data-wrap=\"true\"] {\n    overflow: visible;\n}\n.toc-scroller[data-fade=\"start\"] {\n    -webkit-mask-image: linear-gradient(to right, transparent 0, #000 var(--toc-fade));\n    mask-image: linear-gradient(to right, transparent 0, #000 var(--toc-fade));\n}\n.toc-scroller[data-fade=\"end\"] {\n    -webkit-mask-image: linear-gradient(to left, transparent 0, #000 var(--toc-fade));\n    mask-image: linear-gradient(to left, transparent 0, #000 var(--toc-fade));\n}\n.toc-scroller[data-fade=\"both\"] {\n    -webkit-mask-image: linear-gradient(to right, transparent 0, #000 var(--toc-fade), #000 calc(100% - var(--toc-fade)), transparent 100%);\n    mask-image: linear-gradient(to right, transparent 0, #000 var(--toc-fade), #000 calc(100% - var(--toc-fade)), transparent 100%);\n}\n.toc-list--h {\n    flex-direction: row;\n    align-items: stretch;\n    gap: var(--toc-item-gap-h);\n    justify-content: var(--toc-justify);\n}\n.toc-list--h[data-wrap=\"true\"] {\n    flex-wrap: wrap;\n    row-gap: 0;\n}\n.toc-list--h .toc-item {\n    flex: 0 0 auto;\n    display: flex;\n}\n.toc-list--h[data-align=\"stretch\"] .toc-item {\n    flex: 1 1 0;\n    min-width: 0;\n}\n/* Tabs don't use background or radius for state — text color + underline is enough;\n   a background would compete with the indicator and deviates from the reference. */\n.toc-list--h .toc-link {\n    white-space: nowrap;\n    text-align: center;\n    border-radius: 0;\n    padding: var(--toc-link-pad-y-h) var(--toc-link-pad-x-h);\n}\n.toc-list--h .toc-link:hover,\n.toc-list--h .toc-link:active {\n    background-color: transparent;\n}\n.toc-list--h[data-align=\"stretch\"] .toc-link {\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .toc-link,\n    .toc-indicator {\n        transition: none;\n    }\n}\n`;/* ────────────────────────────────────────────────────────────\n   Helpers\n   ──────────────────────────────────────────────────────────── */function slugify(input){const base=input.trim().toLowerCase().replace(/[\\s\\u3000]+/g,\"-\").replace(RegExp(\"[^\\\\p{Letter}\\\\p{Number}-]+\",\"gu\"),\"\").replace(/-{2,}/g,\"-\").replace(/^-+|-+$/g,\"\");return base||\"section\";}// Writes both the CSS variable (for descendant rules) and the standard property\n// (what actually applies) — same shape as TextPro's fallbackStyle.\nfunction configToStyle(...configs){const style={};for(const cfg of configs){if(!cfg)continue;for(const[k,v]of Object.entries(cfg)){if(k===\"type\"||v==null)continue;style[k]=v;const standardKey=VAR_TO_CSS[k];if(standardKey)style[standardKey]=v;}}return style;}// Resolves rem/calc tokens to px via a probe div.\n// Priority: prop spacingUnit > token --gap-tiny > fallback 2.\nfunction readTokenPx(el,token){if(!el||typeof window===\"undefined\")return null;const probe=document.createElement(\"div\");probe.style.cssText=`position:absolute;visibility:hidden;pointer-events:none;height:var(${token});`;el.appendChild(probe);const px=parseFloat(getComputedStyle(probe).height);el.removeChild(probe);return Number.isFinite(px)&&px>0?px:null;}const JUSTIFY={start:\"flex-start\",center:\"center\",end:\"flex-end\",stretch:\"flex-start\"};const TocItem=/*#__PURE__*/memo(function TocItem({id,text,isActive,isHorizontal,indent,offset,textStyle,indicator,onSelect,registerRef}){const ref=useCallback(el=>registerRef(id,el),[id,registerRef]);const onClick=useCallback(()=>onSelect(id),[id,onSelect]);const linkStyle=useMemo(()=>isHorizontal?textStyle:{marginLeft:offset,width:`calc(100% - ${offset}px)`,...textStyle},[isHorizontal,offset,textStyle]);return /*#__PURE__*/_jsxs(\"li\",{className:\"toc-item\",ref:ref,children:[!isHorizontal&&indicator&&isActive&&/*#__PURE__*/_jsx(\"span\",{className:\"toc-indicator\",\"aria-hidden\":\"true\",style:indicator.shape===\"line\"?{left:indicator.railVisible?0:indent,top:0,bottom:0,width:indicator.width,borderRadius:indicator.width/2}:{left:indent,top:\"50%\",width:indicator.size,height:indicator.size,transform:\"translateY(-50%)\",borderRadius:indicator.dotRadius}}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",className:\"toc-link\",onClick:onClick,\"aria-current\":isActive?\"location\":undefined,title:isHorizontal?text:undefined,style:linkStyle,children:text})]});});/**\n * @author nickdu\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 260\n * @framerIntrinsicHeight 320\n */export default function TableOfContents(props){const{layout:{orientation=\"vertical\",align=\"start\",wrapItems=false,tabIndicator=true,tabRail=true}={},headings:{includeH1=false,includeH2=true,includeH3=true,includeH4=false,includeH5=false,includeH6=false,scopeSelector=\"\",excludeSelector=\"[data-toc-ignore]\"}={},appearance:{showBorder=false,borderWidth=1,borderRadius=8}={},typography:{textStyle,weight=\"regular\",activeWeight=\"semibold\"}={},spacing:{spacingUnit=0}={},indentation:{indentNested=true,indentSteps=5}={},scrolling:{smoothScroll=true,scrollOffset=80,activationPosition=\"center\",updateHash=false}={},activeIndicator:{showActiveIndicator=true,indicatorShape=\"line\",showRail=true,indicatorWidth=3,indicatorSize=12}={},animation:{enableAnimation=true,animationDuration=200,animationEasing=\"ease\"}={}}=props;const isHorizontal=orientation===\"horizontal\";const rootRef=useRef(null);const listRef=useRef(null);const scrollerRef=useRef(null);const itemRefs=useRef(new Map);const[items,setItems]=useState([]);const[mounted,setMounted]=useState(false);const[activeId,setActiveId]=useState(\"\");const[unit,setUnit]=useState(spacingUnit>0?spacingUnit:2);const[fade,setFade]=useState(\"none\");const[slide,setSlide]=useState({x:0,w:0,ready:false});// Mirror of activeId so the scroll loop can skip setState when nothing changed\nconst activeIdRef=useRef(\"\");// After a click, lock scroll-driven highlighting so smooth scroll\n// doesn't hand the highlight to every heading it passes\nconst lockUntilRef=useRef(0);const clickTargetRef=useRef(null);const registerRef=useCallback((id,el)=>{if(el)itemRefs.current.set(id,el);else itemRefs.current.delete(id);},[]);useEffect(()=>{activeIdRef.current=activeId;},[activeId]);/* ── Mount latch ───────────────────────────────────────── */useEffect(()=>{setMounted(true);},[]);/* ── Stylesheet injection ──────────────────────────────── */useEffect(()=>{if(typeof document===\"undefined\")return;if(document.getElementById(STYLE_ID))return;const el=document.createElement(\"style\");el.id=STYLE_ID;el.textContent=STYLE_SHEET;document.head.appendChild(el);},[]);/* ── Spacing unit: prop > --gap-tiny > 2 ───────────────── */useEffect(()=>{if(spacingUnit>0){setUnit(spacingUnit);return;}const px=readTokenPx(rootRef.current,\"--gap-tiny\");setUnit(px??2);},[spacingUnit]);/* ── Typography: all from Theme/Font.tsx ───────────────── */// getGlobalFontConfig() may return an empty shell before ThemeLeaderPro mounts;\n// optional chaining throughout so the component inherits parent typography instead of throwing.\n// Memos key on the leaf objects, so a stable global config yields stable style objects.\nconst FontConfig=getGlobalFontConfig();const Wsize=useScreenSize();const fontSizeLeaf=FontConfig?.fontsize?.[textStyle]?.[Wsize];const weightLeaf=FontConfig?.weight?.[weight];const activeWeightLeaf=FontConfig?.weight?.[activeWeight];const baseStyle=useMemo(()=>configToStyle(fontSizeLeaf||{},weightLeaf||{}),[fontSizeLeaf,weightLeaf]);const activeStyle=useMemo(()=>configToStyle(fontSizeLeaf||{},activeWeightLeaf||{}),[fontSizeLeaf,activeWeightLeaf]);const levels=useMemo(()=>{const out=[];if(includeH1)out.push(1);if(includeH2)out.push(2);if(includeH3)out.push(3);if(includeH4)out.push(4);if(includeH5)out.push(5);if(includeH6)out.push(6);return out;},[includeH1,includeH2,includeH3,includeH4,includeH5,includeH6]);const selector=useMemo(()=>levels.map(n=>`h${n}`).join(\", \"),[levels]);const minLevel=useMemo(()=>levels.length?Math.min(...levels):1,[levels]);/* ── Collect headings (MutationObserver for CMS / async content) ── */useEffect(()=>{if(typeof window===\"undefined\"||!selector){setItems([]);return;}let raf=0;let timer;const collect=()=>{raf=0;const scope=scopeSelector&&document.querySelector(scopeSelector)||document.body;if(!scope)return;const root=rootRef.current;const nodes=Array.from(scope.querySelectorAll(selector)).filter(el=>{if(excludeSelector&&el.closest(excludeSelector))return false;if(root&&root.contains(el))return false;// Skip hidden headings (Framer keeps copies for inactive breakpoints in the DOM)\nreturn el.offsetParent!==null||el.getClientRects().length>0;});const seen=new Map;const next=[];nodes.forEach(el=>{const text=(el.textContent||\"\").trim();if(!text)return;let id=el.id;if(!id){const base=slugify(text);let n=seen.get(base)??0;let candidate=base;// Dedupe against the whole page, not just this pass — any existing\n// element with this id would make getElementById return the wrong node\nwhile((n>0||document.getElementById(candidate))&&n<500){n+=1;candidate=`${base}-${n}`;}seen.set(base,n);id=candidate;el.id=id;}next.push({id,text,level:parseInt(el.tagName.slice(1),10)});});const sig=next.map(i=>`${i.level}:${i.id}:${i.text}`).join(\"|\");setItems(prev=>{const prevSig=prev.map(i=>`${i.level}:${i.id}:${i.text}`).join(\"|\");return prevSig===sig?prev:next;});};const schedule=()=>{window.clearTimeout(timer);if(raf){cancelAnimationFrame(raf);raf=0;}timer=window.setTimeout(()=>{raf=window.requestAnimationFrame(collect);},150);};// Cheap relevance filter: does this node add/remove a heading?\nconst touchesHeading=n=>{if(n.nodeType!==1)return false;const el=n;return el.matches(selector)||el.querySelector(selector)!==null;};const onMutations=records=>{const root=rootRef.current;for(let r=0;r<records.length;r++){const rec=records[r];const target=rec.target;// Our own re-renders never change the heading set\nif(root&&root.contains(target))continue;// Text swapped inside an existing heading\nif(target.nodeType===1&&target.closest?.(selector))return schedule();const added=rec.addedNodes;for(let i=0;i<added.length;i++)if(touchesHeading(added[i]))return schedule();const removed=rec.removedNodes;for(let i=0;i<removed.length;i++)if(touchesHeading(removed[i]))return schedule();}};collect();// childList only: writing ids onto headings is an attribute change and can't self-trigger\nconst mo=new MutationObserver(onMutations);mo.observe(document.body,{childList:true,subtree:true});return()=>{mo.disconnect();window.clearTimeout(timer);if(raf)cancelAnimationFrame(raf);};},[selector,scopeSelector,excludeSelector]);/* ── Scroll spy ──────────────────────────────────────────\n       Offsets are measured once (and re-measured lazily when marked dirty),\n       sorted, then each scroll frame does a binary search — zero layout reads\n       and O(log n) per frame. resize / ResizeObserver only flip the dirty flag,\n       so bursts of layout changes collapse into a single measure per frame.\n       ──────────────────────────────────────────────────── */useEffect(()=>{if(typeof window===\"undefined\"||items.length===0)return;let tops=[];let ids=[];let viewportH=window.innerHeight;let dirty=true;let raf=null;const measure=()=>{const sy=window.scrollY;const entries=[];for(const item of items){const el=document.getElementById(item.id);if(el){entries.push({id:item.id,top:el.getBoundingClientRect().top+sy});}}// Stable sort keeps document order for equal tops\nentries.sort((a,b)=>a.top-b.top);tops=entries.map(e=>e.top);ids=entries.map(e=>e.id);viewportH=window.innerHeight;dirty=false;};const compute=()=>{raf=null;if(dirty)measure();const sy=window.scrollY;// Unlock early once the click target is reached\nif(clickTargetRef.current!==null&&Math.abs(sy-clickTargetRef.current)<4){lockUntilRef.current=0;clickTargetRef.current=null;}if(Date.now()<lockUntilRef.current)return;if(tops.length===0)return;const viewportY=activationPosition===\"top\"?scrollOffset:activationPosition===\"center\"?viewportH/2:viewportH-scrollOffset;const targetDocY=sy+viewportY;// Last heading whose top <= target; if none, the first one\nlet lo=0;let hi=tops.length;while(lo<hi){const mid=lo+hi>>>1;if(tops[mid]<=targetDocY)lo=mid+1;else hi=mid;}const nextId=ids[lo>0?lo-1:0];if(!nextId||nextId===activeIdRef.current)return;activeIdRef.current=nextId;startTransition(()=>setActiveId(nextId));};const schedule=()=>{if(raf===null)raf=window.requestAnimationFrame(compute);};const invalidate=()=>{dirty=true;schedule();};const onScrollEnd=()=>{lockUntilRef.current=0;clickTargetRef.current=null;};compute();window.addEventListener(\"scroll\",schedule,{passive:true});window.addEventListener(\"resize\",invalidate,{passive:true});window.addEventListener(\"scrollend\",onScrollEnd);// Lazy images / accordions shift heading positions\nlet ro=null;if(typeof ResizeObserver!==\"undefined\"){ro=new ResizeObserver(invalidate);ro.observe(document.body);}return()=>{window.removeEventListener(\"scroll\",schedule);window.removeEventListener(\"resize\",invalidate);window.removeEventListener(\"scrollend\",onScrollEnd);ro?.disconnect();if(raf!==null)cancelAnimationFrame(raf);};},[items,scrollOffset,activationPosition]);/* ── Clear a stale activeId after the heading list changes ── */useEffect(()=>{if(!activeId)return;if(!items.some(i=>i.id===activeId))setActiveId(\"\");},[items,activeId]);/* ── Derived sizes (all from unit) ─────────────────────── */const padding=unit*10// base 2 → 20\n;const itemGap=unit*6// base 2 → 12 (vertical)\n;const indentSize=unit*indentSteps*2// base 2, steps 5 → 20\n;const indicatorGap=unit*4// base 2 → 8\n;const linkPadY=unit;const linkPadX=unit*2;// Horizontal metrics match the reference: 8 left/right, 14 top/bottom\n// (line height 20 → tab height 48), 32 between tabs (visual gap 8+32+8 = 48)\nconst itemGapH=unit*16// base 2 → 32\n;const linkPadYH=unit*7// base 2 → 14\n;const linkPadXH=unit*4// base 2 → 8\n;const fadeSize=unit*12// base 2 → 24\n;// In tabs, rail and indicator are separate: the baseline is a 1px hairline and the\n// 3px bar sits on top. Sharing one thickness makes the baseline look like a divider.\nconst tabIndicatorSize=Math.max(2,Math.round(unit*1.5))// base 2 → 3\n;const tabRailSize=1;// Vertical: the indicator occupies the left gutter, links make room via margin\nconst indicatorGutter=!isHorizontal&&showActiveIndicator?(indicatorShape===\"line\"?indicatorWidth:indicatorSize)+indicatorGap:0;const railVisibleV=showActiveIndicator&&showRail&&indicatorShape===\"line\";const indicatorOn=isHorizontal?tabIndicator:showActiveIndicator;const railSize=isHorizontal?tabRail?tabRailSize:0:railVisibleV?indicatorWidth:0;const verticalIndicator=useMemo(()=>{if(isHorizontal||!showActiveIndicator)return null;return{shape:indicatorShape,width:indicatorWidth,size:indicatorSize,railVisible:railVisibleV,dotRadius:indicatorShape===\"circle\"?\"50%\":indicatorShape===\"rounded\"?indicatorSize/4:0};},[isHorizontal,showActiveIndicator,indicatorShape,indicatorWidth,indicatorSize,railVisibleV]);/* ── Horizontal: sliding indicator measurement ─────────── */// A single indicator translated to the active tab — one per item would mount/unmount\n// instead of moving, and the transition would never fire.\nuseEffect(()=>{if(!isHorizontal||!indicatorOn||!mounted)return;const list=listRef.current;if(!list)return;const node=activeId?itemRefs.current.get(activeId):undefined;if(!node){setSlide(s=>s.ready?{...s,ready:false}:s);return;}const update=()=>{const w=node.offsetWidth;const x=node.offsetLeft;setSlide(s=>s.ready&&s.x===x&&s.w===w?s:{x,w,ready:true});};update();// Font swaps and container width changes both change tab widths\nlet ro=null;if(typeof ResizeObserver!==\"undefined\"){ro=new ResizeObserver(update);ro.observe(list);ro.observe(node);}return()=>ro?.disconnect();},[activeId,items,isHorizontal,indicatorOn,align,wrapItems,unit,mounted]);/* ── Horizontal: edge fade ─────────────────────────────── */useEffect(()=>{if(!isHorizontal||wrapItems||!mounted){setFade(\"none\");return;}const el=scrollerRef.current;if(!el)return;let last=null;let raf=null;const apply=v=>{if(v===last)return;last=v;setFade(v);};const update=()=>{raf=null;const max=el.scrollWidth-el.clientWidth;if(max<=1)return apply(\"none\");const atStart=el.scrollLeft>1;const atEnd=el.scrollLeft<max-1;apply(atStart&&atEnd?\"both\":atStart?\"start\":atEnd?\"end\":\"none\");};const schedule=()=>{if(raf===null)raf=window.requestAnimationFrame(update);};update();el.addEventListener(\"scroll\",schedule,{passive:true});let ro=null;if(typeof ResizeObserver!==\"undefined\"){ro=new ResizeObserver(schedule);ro.observe(el);}return()=>{el.removeEventListener(\"scroll\",schedule);ro?.disconnect();if(raf!==null)cancelAnimationFrame(raf);};},[isHorizontal,wrapItems,items,mounted,unit]);/* ── Horizontal: keep the active tab in view ───────────── */// Only moves the tab strip's own scrollLeft — scrollIntoView would also scroll the page.\nuseEffect(()=>{if(!isHorizontal||wrapItems||!activeId||!mounted)return;const el=scrollerRef.current;const node=itemRefs.current.get(activeId);if(!el||!node)return;const target=node.offsetLeft-(el.clientWidth-node.offsetWidth)/2;const max=Math.max(0,el.scrollWidth-el.clientWidth);const left=Math.min(Math.max(0,target),max);if(Math.abs(el.scrollLeft-left)<2)return;const prefersReduced=typeof window!==\"undefined\"&&window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;el.scrollTo({left,behavior:enableAnimation&&!prefersReduced?\"smooth\":\"auto\"});},[activeId,items,isHorizontal,wrapItems,mounted,enableAnimation]);/* ── Click to jump ─────────────────────────────────────── */const handleClick=useCallback(id=>{if(typeof window===\"undefined\")return;const el=document.getElementById(id);if(!el)return;const prefersReduced=window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;const y=Math.max(0,el.getBoundingClientRect().top+window.scrollY-scrollOffset);// scrollend isn't supported everywhere; the timeout is only an upper bound\nlockUntilRef.current=Date.now()+1500;clickTargetRef.current=y;activeIdRef.current=id;startTransition(()=>setActiveId(id));window.scrollTo({top:y,behavior:smoothScroll&&!prefersReduced?\"smooth\":\"auto\"});// Move focus to the target so keyboard users aren't sent back to the top.\n// tabindex must be removed after blur — removing it while focused makes\n// some browsers drop focus immediately.\nif(!el.hasAttribute(\"tabindex\")){el.setAttribute(\"tabindex\",\"-1\");el.addEventListener(\"blur\",()=>el.removeAttribute(\"tabindex\"),{once:true});}el.focus({preventScroll:true});if(updateHash&&window.history?.replaceState){window.history.replaceState(null,\"\",`#${id}`);}},[scrollOffset,smoothScroll,updateHash]);/* ── Arrow keys move focus (no jump — matches tablist convention) ── */const handleKeyDown=useCallback(e=>{const nextKey=isHorizontal?\"ArrowRight\":\"ArrowDown\";const prevKey=isHorizontal?\"ArrowLeft\":\"ArrowUp\";if(e.key!==nextKey&&e.key!==prevKey&&e.key!==\"Home\"&&e.key!==\"End\")return;const list=listRef.current;if(!list)return;const links=Array.from(list.querySelectorAll(\".toc-link\"));const cur=links.indexOf(document.activeElement);if(cur<0||links.length===0)return;e.preventDefault();let n=cur;if(e.key===nextKey)n=(cur+1)%links.length;else if(e.key===prevKey)n=(cur-1+links.length)%links.length;else if(e.key===\"Home\")n=0;else n=links.length-1;links[n]?.focus();},[isHorizontal]);const cssVars=useMemo(()=>({\"--toc-text\":\"var(--text-secondary)\",\"--toc-text-hover\":\"var(--text-color)\",\"--toc-text-active\":\"var(--primary-color, var(--active-color))\",\"--toc-bg-hover\":\"var(--bg-hover)\",\"--toc-bg-pressed\":\"var(--bg-pressed)\",// Tabs get no frame and no padding: the baseline must span the full width\n    \"--toc-border\":isHorizontal?\"transparent\":showBorder?\"var(--border-color)\":\"transparent\",\"--toc-border-width\":`${!isHorizontal&&showBorder?borderWidth:0}px`,\"--toc-padding\":isHorizontal?\"0px\":`${padding}px`,\"--toc-radius\":`${isHorizontal?0:borderRadius}px`,\"--toc-rail-color\":\"var(--divide-color)\",\"--toc-rail-size\":`${railSize}px`,\"--toc-indicator-color\":\"var(--primary-color, var(--active-color))\",\"--toc-item-gap\":`${itemGap}px`,\"--toc-item-gap-h\":`${itemGapH}px`,\"--toc-link-pad-y\":`${linkPadY}px`,\"--toc-link-pad-x\":`${linkPadX}px`,\"--toc-link-pad-y-h\":`${linkPadYH}px`,\"--toc-link-pad-x-h\":`${linkPadXH}px`,\"--toc-fade\":`${fadeSize}px`,\"--toc-justify\":JUSTIFY[align]??\"flex-start\",\"--toc-duration\":enableAnimation?`${animationDuration}ms`:\"0ms\",\"--toc-easing\":animationEasing}),[isHorizontal,showBorder,borderWidth,padding,borderRadius,railSize,itemGap,itemGapH,linkPadY,linkPadX,linkPadYH,linkPadXH,fadeSize,align,enableAnimation,animationDuration,animationEasing]);// SSR / first frame renders only a static var shell. Typography comes from\n// getGlobalFontConfig() + useScreenSize(), which may not be ready on the server\n// (ThemeLeaderPro is injected client-side); writing it into style would fork SSR/CSR.\n// Typography is applied after mount — same idea as TextPro's isClient.\nif(!mounted){return /*#__PURE__*/_jsx(\"nav\",{ref:rootRef,className:\"toc-root\",style:{...cssVars,padding:0,borderWidth:0,minHeight:0},\"aria-hidden\":\"true\"});}if(items.length===0){return /*#__PURE__*/_jsx(\"nav\",{ref:rootRef,className:\"toc-root\",style:cssVars,\"aria-label\":\"Table of contents\",children:/*#__PURE__*/_jsx(\"span\",{className:\"toc-empty\",style:baseStyle,children:\"Add headings to the page to build this outline.\"})});}const listItems=items.map(item=>{const isActive=activeId===item.id;// Tabs are flat; level indentation has no meaning there\nconst indent=!isHorizontal&&indentNested?(item.level-minLevel)*indentSize:0;return /*#__PURE__*/_jsx(TocItem,{id:item.id,text:item.text,isActive:isActive,isHorizontal:isHorizontal,indent:indent,offset:indent+indicatorGutter,textStyle:isActive?activeStyle:baseStyle,indicator:verticalIndicator,onSelect:handleClick,registerRef:registerRef},item.id);});if(isHorizontal){const cap=Math.round(tabIndicatorSize/2);return /*#__PURE__*/_jsx(\"nav\",{ref:rootRef,className:\"toc-root\",style:cssVars,\"aria-label\":\"Table of contents\",\"data-orientation\":\"horizontal\",children:/*#__PURE__*/_jsx(\"div\",{ref:scrollerRef,className:\"toc-scroller\",\"data-wrap\":wrapItems?\"true\":\"false\",\"data-fade\":fade,children:/*#__PURE__*/_jsxs(\"ul\",{ref:listRef,className:\"toc-list toc-list--h\",\"data-align\":align,\"data-wrap\":wrapItems?\"true\":\"false\",onKeyDown:handleKeyDown,children:[listItems,indicatorOn&&slide.ready&&/*#__PURE__*/_jsx(\"span\",{className:\"toc-indicator\",\"aria-hidden\":\"true\",style:{left:0,// Negative offset lets the bar cover the baseline — no stepped double line\nbottom:`calc(-1 * var(--toc-rail-size))`,width:slide.w,height:tabIndicatorSize,borderRadius:`${cap}px ${cap}px 0 0`,transform:`translateX(${slide.x}px)`}})]})})});}return /*#__PURE__*/_jsx(\"nav\",{ref:rootRef,className:\"toc-root\",style:cssVars,\"aria-label\":\"Table of contents\",\"data-orientation\":\"vertical\",children:/*#__PURE__*/_jsxs(\"ul\",{ref:listRef,className:\"toc-list\",onKeyDown:handleKeyDown,children:[railVisibleV&&/*#__PURE__*/_jsx(\"span\",{className:\"toc-rail\",\"aria-hidden\":\"true\"}),listItems]})});}/* ────────────────────────────────────────────────────────────\n   Property controls — zero ControlType.Color.\n   Typography enums read FontConfig keys directly instead of hand-copied slot names.\n\n   Note: hidden() inside a nested Object only sees that Object's values, so\n   \"hide by orientation\" only works on top-level groups. The two toggles tabs need\n   therefore live inside Layout rather than reusing Active Indicator.\n   ──────────────────────────────────────────────────────────── */// Config may not be ready at module load; fall back to empty arrays,\n// otherwise Object.keys(undefined) would fail the whole component load.\nconst _cfg=getGlobalFontConfig()??{};const FONT_SIZE_KEYS=Object.keys(_cfg.fontsize??{});const FONT_WEIGHT_KEYS=Object.keys(_cfg.weight??{});const isTabs=({layout})=>layout?.orientation===\"horizontal\";addPropertyControls(TableOfContents,{layout:{type:ControlType.Object,title:\"Layout\",controls:{orientation:{type:ControlType.Enum,title:\"Direction\",options:[\"vertical\",\"horizontal\"],optionTitles:[\"Vertical\",\"Tabs\"],defaultValue:\"vertical\",displaySegmentedControl:true},align:{type:ControlType.Enum,title:\"Align\",options:[\"start\",\"center\",\"end\",\"stretch\"],optionTitles:[\"Start\",\"Center\",\"End\",\"Fill\"],defaultValue:\"start\",hidden:({orientation})=>orientation!==\"horizontal\"},wrapItems:{type:ControlType.Boolean,title:\"Overflow\",defaultValue:false,enabledTitle:\"Wrap\",disabledTitle:\"Scroll\",hidden:({orientation})=>orientation!==\"horizontal\"},tabIndicator:{type:ControlType.Boolean,title:\"Indicator\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",hidden:({orientation})=>orientation!==\"horizontal\"},tabRail:{type:ControlType.Boolean,title:\"Baseline\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",hidden:({orientation})=>orientation!==\"horizontal\"}}},headings:{type:ControlType.Object,title:\"Headings\",controls:{includeH1:{type:ControlType.Boolean,title:\"H1\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},includeH2:{type:ControlType.Boolean,title:\"H2\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},includeH3:{type:ControlType.Boolean,title:\"H3\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},includeH4:{type:ControlType.Boolean,title:\"H4\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},includeH5:{type:ControlType.Boolean,title:\"H5\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},includeH6:{type:ControlType.Boolean,title:\"H6\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},scopeSelector:{type:ControlType.String,title:\"Scope\",placeholder:\"e.g. article, #post-body\",defaultValue:\"\",description:\"Empty = whole page\"},excludeSelector:{type:ControlType.String,title:\"Exclude\",placeholder:\"[data-toc-ignore]\",defaultValue:\"[data-toc-ignore]\"}}},appearance:{type:ControlType.Object,title:\"Appearance\",hidden:isTabs,controls:{showBorder:{type:ControlType.Boolean,title:\"Border\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},borderWidth:{type:ControlType.Number,title:\"Width\",defaultValue:1,min:1,max:4,step:1,unit:\"px\",hidden:({showBorder})=>!showBorder},borderRadius:{type:ControlType.Number,title:\"Radius\",defaultValue:8,min:0,max:32,step:1,unit:\"px\"}}},typography:{type:ControlType.Object,title:\"Typography\",controls:{textStyle:{title:\"Style\",type:ControlType.Enum,options:FONT_SIZE_KEYS,optionTitles:FONT_SIZE_KEYS},weight:{title:\"Weight\",type:ControlType.Enum,defaultValue:\"regular\",options:FONT_WEIGHT_KEYS,optionTitles:FONT_WEIGHT_KEYS},activeWeight:{title:\"Active\",type:ControlType.Enum,defaultValue:\"semibold\",options:FONT_WEIGHT_KEYS,optionTitles:FONT_WEIGHT_KEYS}}},spacing:{type:ControlType.Object,title:\"Spacing\",controls:{spacingUnit:{type:ControlType.Number,title:\"Unit\",defaultValue:0,min:0,max:8,step:1,unit:\"px\",description:\"0 = read --gap-tiny from theme\"}}},indentation:{type:ControlType.Object,title:\"Indentation\",hidden:isTabs,controls:{indentNested:{type:ControlType.Boolean,title:\"Indent\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},indentSteps:{type:ControlType.Number,title:\"Steps\",defaultValue:5,min:1,max:12,step:1,description:\"\\xd7 spacing unit \\xd7 2\",hidden:({indentNested})=>!indentNested}}},scrolling:{type:ControlType.Object,title:\"Scrolling\",controls:{activationPosition:{type:ControlType.Enum,title:\"Activate At\",options:[\"top\",\"center\",\"bottom\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],defaultValue:\"center\",displaySegmentedControl:true},smoothScroll:{type:ControlType.Boolean,title:\"Smooth\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},scrollOffset:{type:ControlType.Number,title:\"Offset\",defaultValue:80,min:0,max:200,step:10,unit:\"px\"},updateHash:{type:ControlType.Boolean,title:\"Update URL\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"}}},activeIndicator:{type:ControlType.Object,title:\"Active Indicator\",hidden:isTabs,controls:{showActiveIndicator:{type:ControlType.Boolean,title:\"Indicator\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},indicatorShape:{type:ControlType.Enum,title:\"Shape\",options:[\"line\",\"circle\",\"square\",\"rounded\"],optionTitles:[\"Line\",\"Circle\",\"Square\",\"Rounded\"],defaultValue:\"line\",hidden:({showActiveIndicator})=>!showActiveIndicator},showRail:{type:ControlType.Boolean,title:\"Rail\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",hidden:({showActiveIndicator,indicatorShape})=>!showActiveIndicator||indicatorShape!==\"line\"},indicatorWidth:{type:ControlType.Number,title:\"Thickness\",defaultValue:3,min:1,max:10,step:1,unit:\"px\",hidden:({showActiveIndicator,indicatorShape})=>!showActiveIndicator||indicatorShape!==\"line\"},indicatorSize:{type:ControlType.Number,title:\"Size\",defaultValue:12,min:4,max:32,step:1,unit:\"px\",hidden:({showActiveIndicator,indicatorShape})=>!showActiveIndicator||indicatorShape===\"line\"}}},animation:{type:ControlType.Object,title:\"Animation\",controls:{enableAnimation:{type:ControlType.Boolean,title:\"Enable\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},animationDuration:{type:ControlType.Number,title:\"Duration\",defaultValue:200,min:0,max:1e3,step:50,unit:\"ms\",hidden:({enableAnimation})=>!enableAnimation},animationEasing:{type:ControlType.Enum,title:\"Easing\",options:[\"linear\",\"ease\",\"ease-in\",\"ease-out\",\"ease-in-out\"],optionTitles:[\"Linear\",\"Ease\",\"Ease In\",\"Ease Out\",\"Ease In Out\"],defaultValue:\"ease\",hidden:({enableAnimation})=>!enableAnimation}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TableOfContents\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"320\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"260\",\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Tableofcontents.map"],"mappings":"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"}