{"version":3,"file":"TOC.DPvZO2Rh.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/qxJzTazoPSi7j2YwBASr/gwDHaEwDRMkRnmf2dDoV/TOC.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";function findContainer(selfEl){// 1순위: data-framer-name=\"content-area\"\nconst byName=document.querySelector('[data-framer-name=\"content-area\"]');if(byName)return byName;// 2순위: CMS rich text 컨테이너 (Framer CMS 자동 클래스)\nconst cmsSelectors=[\"[class*='richText']\",\"[class*='rich-text']\",\"[class*='cms-content']\",\"[class*='richtextarea']\",\"[data-framer-cms]\",\"[class*='framer-text']\"];for(const sel of cmsSelectors){const el=document.querySelector(sel);if(el&&el.querySelector(\"h2, h3\"))return el;}// 3순위: TOC 위로 올라가며 h2/h3가 있는 형제 탐색\nlet node=selfEl;for(let i=0;i<12;i++){const parent=node?.parentElement??null;if(!parent)break;const siblings=Array.from(parent.children);for(const sibling of siblings){if(sibling===node)continue;if(sibling.querySelector(\"h2, h3\"))return sibling;}node=parent;}return null;}export default function TOC({tocType=\"H2+H3\",debug=false}){const[items,setItems]=useState([]);const[activeId,setActiveId]=useState(null);const[debugInfo,setDebugInfo]=useState(\"\");const selfRef=useRef(null);const[fontSize,setFontSize]=useState(14);const[lineHeight,setLineHeight]=useState(\"135%\");const OFFSET=100;const CLICK_OFFSET=10;const ACTIVE_COLOR=\"#0050FF\";const HOVER_COLOR=\"#000000\";const DEFAULT_COLOR=\"#4B566E\";useEffect(()=>{const update=()=>{setFontSize(window.innerWidth>=1280?14:11);setLineHeight(window.innerWidth>=1280?\"135%\":\"130%\");};update();window.addEventListener(\"resize\",update);return()=>window.removeEventListener(\"resize\",update);},[]);useEffect(()=>{const interval=setInterval(()=>{const container=findContainer(selfRef.current);if(debug){if(!container){const allWithH=Array.from(document.querySelectorAll(\"div, section, article, main\"));const info=allWithH.filter(el=>el.querySelectorAll(\"h2, h3\").length>0).slice(0,5).map(el=>`${el.tagName}.${el.className.slice(0,60)} (${el.querySelectorAll(\"h2,h3\").length}개)`).join(\"\\n\");setDebugInfo(\"컨테이너 없음. h2/h3 있는 요소:\\n\"+info);}else{setDebugInfo(`찾음: ${container.tagName}.${container.className?.slice(0,80)}\nh2/h3: ${container.querySelectorAll(\"h2,h3\").length}개`);}}if(!container)return;const allHeadings=Array.from(container.querySelectorAll(\"h2, h3\"));if(allHeadings.length===0)return;const tocItems=[];let lastH2=null;allHeadings.forEach((el,index)=>{const id=`heading-${index}`;el.id=id;const level=el.tagName.toLowerCase();if(level===\"h2\"){tocItems.push({text:el.innerText,id,level});lastH2=id;}else if(level===\"h3\"&&tocType===\"H2+H3\"&&lastH2){tocItems.push({text:el.innerText,id,level,parentId:lastH2});}});setItems(tocType===\"H2\"?tocItems.filter(i=>i.level===\"h2\"):tocItems);clearInterval(interval);},300);return()=>clearInterval(interval);},[tocType,debug]);useEffect(()=>{const handleScroll=()=>{const container=findContainer(selfRef.current);if(!container)return;const selectors=tocType===\"H2+H3\"?\"h2, h3\":\"h2\";const headings=Array.from(container.querySelectorAll(selectors));let closest=null;let minDist=Infinity;headings.forEach(el=>{const dist=Math.abs(el.getBoundingClientRect().top-OFFSET);if(dist<minDist){minDist=dist;closest=el.id;}});if(closest)setActiveId(closest);};window.addEventListener(\"scroll\",handleScroll,{passive:true});handleScroll();return()=>window.removeEventListener(\"scroll\",handleScroll);},[tocType,items]);// ✅ 핵심 수정: offsetTop → getBoundingClientRect().top + scrollY\n// offsetTop은 가장 가까운 positioned 부모 기준 상대값이라\n// Framer의 중첩 div 구조에서 부정확합니다.\n// getBoundingClientRect().top + scrollY는 항상 페이지 절대 Y 좌표를 반환합니다.\nconst handleClick=id=>{const el=document.getElementById(id);if(!el)return;const top=el.getBoundingClientRect().top+window.scrollY;window.scrollTo({top:top-OFFSET-CLICK_OFFSET,behavior:\"smooth\"});};return /*#__PURE__*/_jsxs(\"div\",{ref:selfRef,style:{position:\"sticky\",top:80,paddingRight:8},children:[debug&&debugInfo&&/*#__PURE__*/_jsx(\"pre\",{style:{fontSize:10,background:\"#fff3cd\",padding:8,borderRadius:4,marginBottom:12,whiteSpace:\"pre-wrap\",wordBreak:\"break-all\",color:\"#333\"},children:debugInfo}),items.map(item=>{const isActive=activeId===item.id;return /*#__PURE__*/_jsx(\"div\",{onClick:()=>handleClick(item.id),style:{marginLeft:item.level===\"h3\"?16:0,fontSize,lineHeight,fontFamily:\"Inter, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial\",fontWeight:isActive?600:400,color:isActive?ACTIVE_COLOR:DEFAULT_COLOR,opacity:item.level===\"h3\"?.7:1,cursor:\"pointer\",marginBottom:item.level===\"h3\"?7:9,transition:\"color 0.15s ease, font-weight 0.15s ease\",userSelect:\"none\"},onMouseEnter:e=>{if(!isActive)e.currentTarget.style.color=HOVER_COLOR;},onMouseLeave:e=>{e.currentTarget.style.color=isActive?ACTIVE_COLOR:DEFAULT_COLOR;},children:item.text},item.id);})]});}addPropertyControls(TOC,{tocType:{title:\"TOC\",type:ControlType.Enum,defaultValue:\"H2+H3\",options:[\"H2\",\"H2+H3\"]},debug:{title:\"Debug\",type:ControlType.Boolean,defaultValue:false}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TOC\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TOC.map"],"mappings":"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"}