{"version":3,"file":"CaseStudySidePanel.DtEvGuok.mjs","names":["useRef","useState","p"],"sources":["https:/framerusercontent.com/modules/iqpuVmx9yqIy0a3NQsil/eWrXuqbfG8aIbDsdA3v0/CaseStudySidePanel.js"],"sourcesContent":["// CaseStudySidePanel ‚Äî Sticky side panel TOC for Framer case study pages.\n//\n// What it does:\n//   - Renders a vertical list of section links (Intro, Mission, etc.)\n//   - Clicking a link smooth-scrolls to that section in the page\n//   - Active state automatically tracks the section currently in view\n//     (ScrollSpy via IntersectionObserver)\n//   - Appears with your TextFadeUp animation when it enters viewport\n//   - Optionally wrapped in liquid glass material to match NavBar\n//\n// Setup:\n//   1. In Framer: Assets ‚Üí Code ‚Üí \"+\" ‚Üí New Code File. Name it\n//      \"CaseStudySidePanel\" ‚Üí paste this file ‚Üí save.\n//   2. Drop the component onto your case study page.\n//   3. For each item in the \"Sections\" array, set:\n//      - Label: what the user sees (\"Intro\", \"Mission\", \"Outcome\")\n//      - Section ID: must match the ID set on the corresponding\n//        section element in Framer.\n//   4. On the case study page itself, give each section element an ID:\n//      - Select the section frame in Framer\n//      - In the right panel under \"Identity\" ‚Üí set Name & ID\n//      - The ID is what this component scrolls to.\n/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion,useInView}from\"framer-motion\";import{useEffect,useRef,useState}from\"react\";// Matches the user's TextFadeUp override:\n//   ease: [0.05, 1, 0.4, 1], duration: 1.5\nconst FADE_UP_EASE=[.05,1,.4,1];function applyOpacity(color,alpha){if(!color)return`rgba(255, 255, 255, ${alpha})`;const trimmed=color.trim();if(trimmed.startsWith(\"#\")){let hex=trimmed.slice(1);if(hex.length===3){hex=hex.split(\"\").map(c=>c+c).join(\"\");}if(hex.length>=6){const r=parseInt(hex.slice(0,2),16);const g=parseInt(hex.slice(2,4),16);const b=parseInt(hex.slice(4,6),16);return`rgba(${r}, ${g}, ${b}, ${alpha})`;}}const m=trimmed.match(/rgba?\\(\\s*(\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)/);if(m)return`rgba(${m[1]}, ${m[2]}, ${m[3]}, ${alpha})`;return trimmed;}export default function CaseStudySidePanel(props){const{sections,scrollOffset,enableSticky,stickyTop,useGlassMaterial,fillColor,trackOpacity,glassBlur,glassSaturation,edgeHighlight,edgeBorder,innerShadow,shadowStrength,padding,borderRadius,fontFamily,fontSize,fontWeight,letterSpacing,titleText,showTitle,titleFontSize,titleFontWeight,titleColor,inactiveColor,activeColor,hoverColor,activeFontWeight,itemSpacing,itemPaddingV,itemPaddingH,textAlign,showActiveIndicator,activeIndicatorColor,activeIndicatorWidth,enableEntranceAnimation,animationDuration,animationDelay,animationItemStagger}=props;const containerRef=useRef(null);// Skip the \"once\" gate when not in published preview ‚Äî on canvas this\n// would lock items into the post-animation state.\nconst isCanvas=RenderTarget.current()===RenderTarget.canvas;const isInView=useInView(containerRef,{once:true,margin:\"-40px\"});const[activeSection,setActiveSection]=useState(null);const[hoveredIndex,setHoveredIndex]=useState(null);// Scroll lock ‚Äî set when the user clicks a tab so the IntersectionObserver\n// doesn't flicker the active state through intermediate sections as the\n// smooth-scroll passes through them. Released by `scrollend` (modern\n// browsers) or a timeout fallback (Safari).\nconst scrollLockRef=useRef(null);const scrollLockTimerRef=useRef(null);// ScrollSpy ‚Äî observe all configured sections and mark the most-visible\n// one as active. Uses IntersectionObserver with a rootMargin offset\n// matching `scrollOffset` so the \"active\" section flips when the\n// section crosses just under any fixed nav.\nuseEffect(()=>{if(typeof window===\"undefined\")return;if(isCanvas)return;// skip observer on canvas ‚Äî no real scroll\nconst observed=[];sections.forEach(({sectionId})=>{if(!sectionId)return;const el=document.getElementById(sectionId);if(el)observed.push(el);});if(observed.length===0)return;// Init active section to the first observed section\nif(observed[0])setActiveSection(observed[0].id);const observer=new IntersectionObserver(entries=>{// If a programmatic scroll is in flight (user clicked a tab),\n// skip observer updates so intermediate sections don't\n// briefly become active as the smooth-scroll passes through.\nif(scrollLockRef.current)return;// Update active to the entry with the largest visible area\nconst visible=entries.filter(e=>e.isIntersecting).sort((a,b)=>b.intersectionRatio-a.intersectionRatio);if(visible.length>0){setActiveSection(visible[0].target.id);}},{rootMargin:`-${scrollOffset+20}px 0px -50% 0px`,threshold:[0,.1,.25,.5,.75,1]});observed.forEach(el=>observer.observe(el));return()=>observer.disconnect();},[sections,scrollOffset,isCanvas]);const scrollToSection=sectionId=>{if(typeof window===\"undefined\"||!sectionId)return;const el=document.getElementById(sectionId);if(!el){console.warn(`[CaseStudySidePanel] No element found with id=\"${sectionId}\". Set the section's ID in Framer under Identity.`);return;}const top=el.getBoundingClientRect().top+window.pageYOffset-scrollOffset;// Set the scroll lock BEFORE starting the scroll so the next\n// observer callback (which fires on the first intersection change)\n// is suppressed. Optimistically commit the target as active.\nscrollLockRef.current=sectionId;setActiveSection(sectionId);window.scrollTo({top,behavior:\"smooth\"});// Release the lock when the scroll settles. Modern browsers fire\n// `scrollend` after smooth-scroll completes ‚Äî use that if available.\n// Fallback timeout covers Safari and edge cases where the user\n// interacts mid-scroll. Both paths share the same release fn.\nconst release=()=>{scrollLockRef.current=null;window.removeEventListener(\"scrollend\",release);if(scrollLockTimerRef.current!==null){clearTimeout(scrollLockTimerRef.current);scrollLockTimerRef.current=null;}};if(\"onscrollend\"in window){window.addEventListener(\"scrollend\",release,{once:true});}if(scrollLockTimerRef.current!==null){clearTimeout(scrollLockTimerRef.current);}scrollLockTimerRef.current=window.setTimeout(release,1200);};// Clean up the timer on unmount so a pending release doesn't run\n// against a stale ref after the component is gone.\nuseEffect(()=>{return()=>{if(scrollLockTimerRef.current!==null){clearTimeout(scrollLockTimerRef.current);scrollLockTimerRef.current=null;}};},[]);// ---- Glass material (when enabled) ‚Äî matches NavBar / GlassButton ----\nconst glassFilter=`blur(${glassBlur}px) saturate(${glassSaturation}%)`;const glassBackground=[`linear-gradient(180deg,`,`  rgba(255,255,255, ${edgeHighlight*.55}) 0%,`,`  rgba(255,255,255, ${edgeHighlight*.12}) 22%,`,`  rgba(255,255,255, 0) 50%,`,`  rgba(0,0,0, 0.04) 100%)`,`, ${applyOpacity(fillColor,trackOpacity)}`].join(\" \").replace(/\\s+/g,\" \");const glassBoxShadow=[`inset 0 1.5px 0 rgba(255, 255, 255, ${Math.min(1,edgeHighlight+.15)})`,`inset 0 -1px 0 rgba(0, 0, 0, 0.06)`,`inset 0 0 0 1px rgba(0, 0, 0, ${edgeBorder})`,`inset 0 -10px 12px -10px rgba(0, 0, 0, ${innerShadow})`,`0 1px 1px rgba(0, 0, 0, ${shadowStrength*.25})`,`0 8px 24px -8px rgba(0, 0, 0, ${shadowStrength*1.1})`,`0 24px 40px -16px rgba(0, 0, 0, ${shadowStrength*.7})`].join(\", \");// Animation: matches TextFadeUp exactly.\n// On canvas, run a single quick play so Framer designers can see the\n// state without it being permanently animated/hidden.\nconst animationProps=enableEntranceAnimation?{initial:{opacity:0,y:8,filter:\"blur(6px)\"},animate:isCanvas||isInView?{opacity:1,y:0,filter:\"blur(0px)\"}:{opacity:0,y:8,filter:\"blur(6px)\"},transition:{duration:animationDuration,ease:FADE_UP_EASE,delay:animationDelay}}:{};const itemEnter=i=>enableEntranceAnimation?{initial:{opacity:0,y:8,filter:\"blur(6px)\"},animate:isCanvas||isInView?{opacity:1,y:0,filter:\"blur(0px)\"}:{opacity:0,y:8,filter:\"blur(6px)\"},transition:{duration:animationDuration,ease:FADE_UP_EASE,delay:animationDelay+(i+(showTitle?1:0))*animationItemStagger}}:{};return /*#__PURE__*/_jsxs(motion.div,{ref:containerRef,style:{display:\"flex\",flexDirection:\"column\",gap:itemSpacing,padding:useGlassMaterial?padding:0,borderRadius:useGlassMaterial?borderRadius:0,background:useGlassMaterial?glassBackground:\"transparent\",backdropFilter:useGlassMaterial?glassFilter:undefined,WebkitBackdropFilter:useGlassMaterial?glassFilter:undefined,boxShadow:useGlassMaterial?glassBoxShadow:undefined,fontFamily,width:\"100%\",boxSizing:\"border-box\",// Sticky positioning ‚Äî keeps the panel pinned within its\n// parent scroll container as the user scrolls past it.\n// For this to work in Framer, the panel needs to live in\n// a column/stack alongside the case study content (not\n// inside a fixed-height container).\nposition:enableSticky?\"sticky\":\"static\",top:enableSticky?stickyTop:undefined,alignSelf:enableSticky?\"flex-start\":undefined},...animationProps,children:[showTitle&&titleText&&/*#__PURE__*/_jsx(motion.div,{style:{fontSize:titleFontSize,fontWeight:titleFontWeight,color:titleColor,letterSpacing,marginBottom:4,textAlign},...enableEntranceAnimation?{initial:{opacity:0,y:8,filter:\"blur(6px)\"},animate:isCanvas||isInView?{opacity:1,y:0,filter:\"blur(0px)\"}:{opacity:0,y:8,filter:\"blur(6px)\"},transition:{duration:animationDuration,ease:FADE_UP_EASE,delay:animationDelay}}:{},children:titleText}),sections.map((section,i)=>{const isActive=activeSection===section.sectionId;const isHovered=hoveredIndex===i;// Color priority: active > hover > inactive\nconst itemColor=isActive?activeColor:isHovered?hoverColor:inactiveColor;return /*#__PURE__*/_jsxs(motion.button,{onClick:()=>scrollToSection(section.sectionId),onMouseEnter:()=>setHoveredIndex(i),onMouseLeave:()=>setHoveredIndex(null),type:\"button\",style:{position:\"relative\",display:\"flex\",alignItems:\"center\",justifyContent:textAlign===\"center\"?\"center\":textAlign===\"right\"?\"flex-end\":\"flex-start\",border:0,background:\"transparent\",padding:`${itemPaddingV}px ${itemPaddingH}px`,// Active indicator reserves space on the LEFT\n// for left/center alignment, and on the RIGHT\n// when right-aligned ‚Äî so visible text stays\n// optically aligned.\npaddingLeft:showActiveIndicator?textAlign===\"right\"?itemPaddingH:itemPaddingH+activeIndicatorWidth+8:itemPaddingH,paddingRight:showActiveIndicator?textAlign===\"right\"?itemPaddingH+activeIndicatorWidth+8:itemPaddingH:itemPaddingH,fontFamily,fontSize,fontWeight:isActive?activeFontWeight:fontWeight,letterSpacing,color:itemColor,transition:\"color 220ms cubic-bezier(0.32, 0.72, 0, 1), font-weight 220ms cubic-bezier(0.32, 0.72, 0, 1)\",cursor:\"pointer\",textAlign,borderRadius:8,// KILL all browser default button styling that\n// creates outlines, focus boxes, and weird\n// tap highlights.\noutline:\"none\",appearance:\"none\",WebkitAppearance:\"none\",WebkitTapHighlightColor:\"transparent\",whiteSpace:\"nowrap\"},...itemEnter(i),children:[showActiveIndicator&&/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":\"true\",style:{position:\"absolute\",// Place indicator opposite the text:\n// left for left/center alignment, right\n// for right alignment.\nleft:textAlign===\"right\"?undefined:itemPaddingH,right:textAlign===\"right\"?itemPaddingH:undefined,top:\"50%\",transform:\"translateY(-50%)\",width:activeIndicatorWidth,height:isActive?14:4,borderRadius:999,background:isActive?activeIndicatorColor:applyOpacity(activeIndicatorColor,.2),transition:\"height 320ms cubic-bezier(0.23, 1, 0.32, 1), background 320ms cubic-bezier(0.23, 1, 0.32, 1)\"}}),section.label]},i);})]});}addPropertyControls(CaseStudySidePanel,{// ---- Sections ----\nsections:{type:ControlType.Array,title:\"Sections\",control:{type:ControlType.Object,controls:{label:{type:ControlType.String,title:\"Label\",defaultValue:\"Intro\",description:\"What the user sees in the panel.\"},sectionId:{type:ControlType.String,title:\"Section ID\",defaultValue:\"intro\",placeholder:\"intro\",description:\"Must match the ID set on the section element in Framer (Identity ‚\\xdc\\xed Name / ID).\"}}},defaultValue:[{label:\"Intro\",sectionId:\"intro\"},{label:\"Mission\",sectionId:\"mission\"},{label:\"Process\",sectionId:\"process\"},{label:\"Outcome\",sectionId:\"outcome\"}]},// ---- Title ----\nshowTitle:{type:ControlType.Boolean,title:\"Show Title\",defaultValue:false},titleText:{type:ControlType.String,title:\"Title\",defaultValue:\"Contents\",hidden:p=>!p.showTitle},titleFontSize:{type:ControlType.Number,title:\"Title Size\",defaultValue:13,min:10,max:22,step:.5,unit:\"px\",hidden:p=>!p.showTitle},titleFontWeight:{type:ControlType.Number,title:\"Title Weight\",defaultValue:600,min:100,max:900,step:100,hidden:p=>!p.showTitle},titleColor:{type:ControlType.Color,title:\"Title Color\",defaultValue:\"rgba(0, 0, 0, 0.4)\",hidden:p=>!p.showTitle},// ---- Scroll behavior ----\nscrollOffset:{type:ControlType.Number,title:\"Scroll Offset\",defaultValue:80,min:0,max:240,step:4,unit:\"px\",description:\"Extra space above the section when scrolling to it. Set to your fixed nav height + a small buffer.\"},// ---- Sticky positioning ----\nenableSticky:{type:ControlType.Boolean,title:\"Sticky\",defaultValue:true,description:\"Pins the panel as the user scrolls. Requires the panel to live in a column/stack alongside your case study content (not a fixed-height container).\"},stickyTop:{type:ControlType.Number,title:\"Sticky Top\",defaultValue:120,min:0,max:400,step:4,unit:\"px\",description:\"Distance from the top of the viewport when the panel sticks. Should clear your fixed nav.\",hidden:p=>!p.enableSticky},// ---- Item layout ----\nitemSpacing:{type:ControlType.Number,title:\"Item Gap\",defaultValue:16,min:0,max:32,step:1,unit:\"px\",description:\"Vertical gap between items. Generous (14‚\\xc4\\xec20px) gives each item breathing room ‚\\xc4\\xee the refined look. Tight (2‚\\xc4\\xec6px) makes them cramped.\"},itemPaddingV:{type:ControlType.Number,title:\"Item Pad V\",defaultValue:6,min:0,max:24,step:1,unit:\"px\"},itemPaddingH:{type:ControlType.Number,title:\"Item Pad H\",defaultValue:0,min:0,max:24,step:1,unit:\"px\"},textAlign:{type:ControlType.Enum,title:\"Text Align\",defaultValue:\"left\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],displaySegmentedControl:true,description:\"Horizontal alignment of section labels (and title, if shown). Active indicator flips sides for right-aligned to stay opposite the text.\"},// ---- Typography ----\nfontFamily:{type:ControlType.String,title:\"Font\",defaultValue:\"Inter, -apple-system, BlinkMacSystemFont, sans-serif\",description:\"Explicit font family. Inter matches Framer's default body text. Change here if you use a different font on the page.\"},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:17,min:10,max:24,step:.5,unit:\"px\",description:\"17px matches Framer's default body text. Bump to 18-20 for a more prominent TOC.\"},fontWeight:{type:ControlType.Number,title:\"Font Weight\",defaultValue:400,min:100,max:900,step:100,description:\"Inactive items' weight. Regular (400) matches body text.\"},activeFontWeight:{type:ControlType.Number,title:\"Active Weight\",defaultValue:400,min:100,max:900,step:100,description:\"Active item's weight. Default 400 matches inactive ‚\\xc4\\xee refined sites differentiate by color alone (Caleb Wu / Apple style). Bump to 500‚\\xc4\\xec600 only if you want weight + color hierarchy.\"},letterSpacing:{type:ControlType.Number,title:\"Letter Spacing\",defaultValue:0,min:-2,max:2,step:.05,unit:\"px\"},inactiveColor:{type:ControlType.Color,title:\"Inactive Color\",defaultValue:\"rgba(0, 0, 0, 0.55)\",description:\"Inactive item color. 0.55 = clearly readable but receded. Lower (0.4) makes items feel washed out; higher (0.7+) reduces hierarchy with active.\"},activeColor:{type:ControlType.Color,title:\"Active Color\",defaultValue:\"#000\"},hoverColor:{type:ControlType.Color,title:\"Hover Color\",defaultValue:\"rgba(0, 0, 0, 0.7)\",description:\"Color on cursor hover (only for non-active items).\"},// ---- Active indicator ----\nshowActiveIndicator:{type:ControlType.Boolean,title:\"Active Indicator\",defaultValue:false,description:\"Vertical pill on the left of each item; grows when active. Off = clean text-only (color differentiation only).\"},activeIndicatorColor:{type:ControlType.Color,title:\"Indicator Color\",defaultValue:\"#000\",hidden:p=>!p.showActiveIndicator},activeIndicatorWidth:{type:ControlType.Number,title:\"Indicator Width\",defaultValue:2,min:1,max:6,step:1,unit:\"px\",hidden:p=>!p.showActiveIndicator},// ---- Glass material (optional) ----\nuseGlassMaterial:{type:ControlType.Boolean,title:\"Glass Material\",defaultValue:false,description:\"Wrap the panel in liquid glass material matching NavBar/GlassButton. Off = clean text-only TOC.\"},fillColor:{type:ControlType.Color,title:\"Fill\",defaultValue:\"#FFFFFF\",hidden:p=>!p.useGlassMaterial},trackOpacity:{type:ControlType.Number,title:\"Track Opacity\",defaultValue:.1,min:0,max:1,step:.01,hidden:p=>!p.useGlassMaterial},glassBlur:{type:ControlType.Number,title:\"Glass Blur\",defaultValue:22,min:0,max:40,step:.5,unit:\"px\",hidden:p=>!p.useGlassMaterial},glassSaturation:{type:ControlType.Number,title:\"Glass Saturation\",defaultValue:180,min:50,max:250,step:5,unit:\"%\",hidden:p=>!p.useGlassMaterial},edgeHighlight:{type:ControlType.Number,title:\"Edge Highlight\",defaultValue:.85,min:0,max:1,step:.05,hidden:p=>!p.useGlassMaterial},edgeBorder:{type:ControlType.Number,title:\"Edge Border\",defaultValue:.11,min:0,max:.3,step:.01,hidden:p=>!p.useGlassMaterial},innerShadow:{type:ControlType.Number,title:\"Inner Shadow\",defaultValue:.1,min:0,max:.3,step:.01,hidden:p=>!p.useGlassMaterial},shadowStrength:{type:ControlType.Number,title:\"Shadow Strength\",defaultValue:.22,min:0,max:.6,step:.01,hidden:p=>!p.useGlassMaterial},padding:{type:ControlType.Number,title:\"Panel Padding\",defaultValue:16,min:4,max:40,step:1,unit:\"px\",hidden:p=>!p.useGlassMaterial},borderRadius:{type:ControlType.Number,title:\"Panel Radius\",defaultValue:14,min:0,max:40,step:1,unit:\"px\",hidden:p=>!p.useGlassMaterial},// ---- Entrance animation (TextFadeUp recipe) ----\nenableEntranceAnimation:{type:ControlType.Boolean,title:\"Entrance Animation\",defaultValue:true,description:\"Fade-up with blur as the panel enters viewport. Matches your TextFadeUp override.\"},animationDuration:{type:ControlType.Number,title:\"Duration\",defaultValue:1.5,min:.2,max:3,step:.05,unit:\"s\",hidden:p=>!p.enableEntranceAnimation},animationDelay:{type:ControlType.Number,title:\"Delay\",defaultValue:0,min:0,max:2,step:.05,unit:\"s\",hidden:p=>!p.enableEntranceAnimation},animationItemStagger:{type:ControlType.Number,title:\"Item Stagger\",defaultValue:.05,min:0,max:.4,step:.01,unit:\"s\",description:\"Per-item delay added on top of the base delay. 0 = all items appear together.\",hidden:p=>!p.enableEntranceAnimation}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CaseStudySidePanel\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CaseStudySidePanel.map"],"mappings":"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"}