{"version":3,"file":"ProgramTabButton.H7l_ZbGC.mjs","names":["getProgramsActiveStore","setProgramsActiveSlug","useProgramsActiveSlug","useState","startTransition","_Fragment","useState","startTransition"],"sources":["https:/framerusercontent.com/modules/743JePLqBtvyvGVDTrmH/SAyZdagfjXTfoPOKtcZP/ProgramCard.js","https:/framerusercontent.com/modules/vRXYgto1Kf7cXeahJA2C/qIUKDKSBMQuopYwR1zCQ/ProgramTabButton.js"],"sourcesContent":["// Program Card\n// The \"active program\" content block (heading + description + button on the\n// left, short description + labels on the right), meant to be placed inside\n// a Framer Collection List bound to the \"Programs\" CMS collection. Only the\n// card whose Slug matches the currently active tab (see \"Program Tab\n// Button\") renders its content; the rest render nothing. State is shared\n// with the separate tabs Collection List through the same window-level\n// store used by ProgramTabButton, since the two Collection Lists render\n// fully independent React trees and cannot share state through props or\n// context directly.\n//\n// Typography note: Description and Short Description both match the\n// project's \"Body-16px\" text style (Instrument Sans, weight 500, 16px,\n// line-height 1.5em, letter-spacing -0.02em). Description wraps at\n// maxWidth 400px, Short Description at maxWidth 320px. The text+button\n// wrapper itself carries no maxWidth (it can grow to fill the flex-basis\n// space); the heading and description each cap their own width instead\n// (heading at 600px, description at 400px) so long titles/paragraphs still\n// wrap sensibly even though their parent no longer does.\n// The heading renders as an <h2> (not <h1> — a single card is one of\n// several tab panels on the page, not the page's own top-level heading,\n// so <h2> is the correct semantic level). Its font size is editable via\n// the \"Title Font Size\" control (default 70px, matching the original\n// hardcoded value) instead of being hardcoded.\n//\n// Layout / responsiveness: the two-column layout (text+button on the left,\n// labels card on the right) used to be a fixed CSS Grid (2fr 1fr), which\n// doesn't reflow on narrow viewports — around the 768px / 568px\n// breakpoints the columns just got squeezed instead of stacking. Switched\n// to a flex row with `flexWrap: \"wrap\"`; both the left wrapper and the\n// right card have `minWidth: 280` (and keep their previous flex-basis\n// ratio, ~2:1, when there's room), so once the available width can no\n// longer fit both at 280px+gap, they automatically wrap onto their own\n// lines — no separate breakpoint-specific code needed, it just responds to\n// the actual rendered width. The gap between/around the two columns is\n// editable via separate \"Gap X\" (columnGap) / \"Gap Y\" (rowGap) controls,\n// both default 20px — X is the horizontal space between the columns when\n// side by side, Y is the vertical space between them once they wrap onto\n// stacked lines.\n// On larger breakpoints the labels card no longer stretches indefinitely:\n// it's capped by the editable \"Card Max Width\" control (Number, default\n// 490px, matches the original ~1:2 proportion against the text column at\n// the project's max content width). Below the minWidth/wrap point this cap\n// simply has no effect since the card is already narrower than it.\n//\n// Animation: only the ENTER is animated (opacity 0 -> 1, duration 0.4s,\n// ease-in-out) — the outgoing card unmounts immediately instead of fading\n// out. This is intentional: each card is a separate Collection List row\n// stacked vertically (not an absolute overlay), so if the old card faded\n// out for 0.4s while the new one faded in, BOTH would be mounted and\n// taking up vertical space at the same time, which visibly grows the\n// section's height for that instant and makes the tab row \"jump\". With an\n// instant exit, only ever one card occupies space, so the section height\n// never fluctuates and nothing jumps.\n// Canvas safety: on the Framer canvas (RenderTarget.canvas) the animation\n// is skipped entirely and the active card renders as a plain, fully\n// visible div — motion's enter animation does not reliably play on the\n// static canvas render.\n//\n// Bug fix (cards invisible / height 0): the shared window-level store used\n// to only get initialized by whichever instance's effect happened to fire\n// FIRST while the store was still empty — regardless of that instance's\n// own \"Default Active\" setting. Since the store lives on `window`, it also\n// survives code hot-reloads during editing, so a stale value from an\n// earlier test click (or from before Slugs were filled in) could get\n// stuck and match none of the real Slugs, leaving every card inactive\n// (height 0) with no way to recover without a full page reload. Fixed by\n// making \"Default Active\" authoritative and self-healing: the instance\n// with defaultActive=true now force-claims the store on every mount,\n// overwriting any stale value, instead of only acting when the store\n// happened to still be empty.\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useEffect,useState,startTransition}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion}from\"framer-motion\";function getProgramsActiveStore(){if(typeof window===\"undefined\"){return{activeSlug:null,listeners:new Set};}const w=window;if(!w.__programsActiveStore){w.__programsActiveStore={activeSlug:null,listeners:new Set};}return w.__programsActiveStore;}function setProgramsActiveSlug(slug){const store=getProgramsActiveStore();if(store.activeSlug===slug)return;store.activeSlug=slug;store.listeners.forEach(listener=>listener(slug));}function useProgramsActiveSlug(slug,defaultActive){const store=getProgramsActiveStore();const[activeSlug,setActiveSlugState]=useState(defaultActive?slug:store.activeSlug);useEffect(()=>{const listener=newSlug=>startTransition(()=>setActiveSlugState(newSlug));store.listeners.add(listener);if(defaultActive){// Authoritative: the designated default always (re)claims the\n// store on mount, even if it already holds a (possibly stale)\n// value from an earlier session/edit.\nsetProgramsActiveSlug(slug);}else if(store.activeSlug!==null){startTransition(()=>setActiveSlugState(store.activeSlug));}return()=>{store.listeners.delete(listener);};// eslint-disable-next-line react-hooks/exhaustive-deps\n},[]);return activeSlug;}/**\n * Program Card\n *\n * @framerSupportedLayoutWidth fill\n * @framerSupportedLayoutHeight auto\n */export default function ProgramCard(props){const{title,titleFontSize,description,shortDescription,buttonText,buttonLink,label1,label2,label3,slug,defaultActive,cardMaxWidth,gapX,gapY,style}=props;const activeSlug=useProgramsActiveSlug(slug,defaultActive);const[isButtonHovered,setIsButtonHovered]=useState(false);const isActive=activeSlug===slug;const hasLink=Boolean(buttonLink);const isCanvas=RenderTarget.current()===RenderTarget.canvas;if(!isActive)return null;const cardContent=/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:30,flex:\"2 1 280px\",minWidth:280,alignItems:\"flex-start\"},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:20},children:[/*#__PURE__*/_jsx(\"h2\",{style:{margin:0,maxWidth:600,fontFamily:'\"Instrument Sans\", sans-serif',fontWeight:600,fontSize:titleFontSize,lineHeight:\"1.1em\",letterSpacing:\"-0.02em\",color:\"rgb(255, 255, 255)\"},children:title}),/*#__PURE__*/_jsx(\"div\",{style:{maxWidth:400},children:/*#__PURE__*/_jsx(\"p\",{style:{margin:0,fontFamily:'\"Instrument Sans\", sans-serif',fontWeight:500,fontSize:16,lineHeight:\"1.5em\",letterSpacing:\"-0.02em\",color:\"rgb(255, 255, 255)\"},children:description})})]}),/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",flexDirection:\"row\",gap:40,alignItems:\"center\"},children:buttonText&&/*#__PURE__*/_jsx(\"a\",{href:hasLink?buttonLink:undefined,role:hasLink?undefined:\"button\",tabIndex:hasLink?undefined:0,onMouseEnter:()=>setIsButtonHovered(true),onMouseLeave:()=>setIsButtonHovered(false),onFocus:()=>setIsButtonHovered(true),onBlur:()=>setIsButtonHovered(false),style:{display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",width:\"max-content\",whiteSpace:\"nowrap\",textDecoration:\"none\",cursor:\"pointer\",fontFamily:'\"Instrument Sans\", sans-serif',fontSize:16,fontWeight:600,lineHeight:\"1.5em\",letterSpacing:\"-0.32px\",padding:\"18px 30px\",borderRadius:\"100px\",border:\"1px solid rgba(0, 113, 235, 0.2)\",color:isButtonHovered?\"rgb(5, 36, 70)\":\"rgb(255, 255, 255)\",backgroundColor:isButtonHovered?\"rgb(255, 255, 255)\":\"rgb(0, 113, 235)\",transition:\"background-color 0.3s ease, color 0.3s ease\"},children:buttonText})})]}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",justifyContent:\"space-between\",gap:70,flex:\"1 1 280px\",minWidth:280,maxWidth:cardMaxWidth,padding:20,borderRadius:10,backgroundColor:\"rgba(255, 255, 255, 0.1)\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{maxWidth:320},children:/*#__PURE__*/_jsx(\"p\",{style:{margin:0,fontFamily:'\"Instrument Sans\", sans-serif',fontWeight:500,fontSize:16,lineHeight:\"1.5em\",letterSpacing:\"-0.02em\",color:\"rgb(255, 255, 255)\"},children:shortDescription})}),/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:10},children:[label1,label2,label3].filter(Boolean).map((label,i)=>/*#__PURE__*/_jsx(\"div\",{style:{fontFamily:'\"Instrument Sans\", sans-serif',fontWeight:600,fontSize:16,lineHeight:\"1.5em\",letterSpacing:\"-0.02em\",color:\"rgb(255, 255, 255)\"},children:label},i))})]})]});const wrapStyle={display:\"flex\",flexWrap:\"wrap\",columnGap:gapX,rowGap:gapY,alignItems:\"flex-start\",width:\"100%\",...style};// On the canvas, skip framer-motion's enter animation entirely and just\n// render the active card at full opacity — the canvas's static render\n// doesn't reliably run the animation, which previously left the card\n// stuck invisible at its initial opacity: 0 while editing.\nif(isCanvas){return /*#__PURE__*/_jsx(\"div\",{style:wrapStyle,children:cardContent});}return /*#__PURE__*/_jsx(motion.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.4,ease:\"easeInOut\"},style:wrapStyle,children:cardContent},slug||\"program-card\");}addPropertyControls(ProgramCard,{title:{type:ControlType.String,title:\"Title\",defaultValue:\"Program\"},titleFontSize:{type:ControlType.Number,title:\"Title Font Size\",defaultValue:70,min:10,max:120,step:1,unit:\"px\",displayStepper:true},description:{type:ControlType.String,title:\"Description\",displayTextArea:true},shortDescription:{type:ControlType.String,title:\"Short Description\",displayTextArea:true},buttonText:{type:ControlType.String,title:\"Button Text\",defaultValue:\"Learn more\"},buttonLink:{type:ControlType.Link,title:\"Button Link\"},label1:{type:ControlType.String,title:\"Label 1\"},label2:{type:ControlType.String,title:\"Label 2\"},label3:{type:ControlType.String,title:\"Label 3\"},slug:{type:ControlType.String,title:\"Slug\",defaultValue:\"\"},defaultActive:{type:ControlType.Boolean,title:\"Default Active\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},cardMaxWidth:{type:ControlType.Number,title:\"Card Max Width\",defaultValue:490,min:280,max:800,step:10,unit:\"px\",displayStepper:true},gapX:{type:ControlType.Number,title:\"Gap X\",defaultValue:20,min:0,max:100,step:1,unit:\"px\",displayStepper:true},gapY:{type:ControlType.Number,title:\"Gap Y\",defaultValue:20,min:0,max:100,step:1,unit:\"px\",displayStepper:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ProgramCard\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"fill\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ProgramCard.map","// Program Tab Button\n// A single clickable tab, meant to be placed inside a Framer Collection List\n// bound to the \"Programs\" CMS collection (bind Title -> title, Slug -> slug\n// via the \"+\" icon on each prop once the instance sits inside the list).\n// It coordinates the active tab with a separate \"Program Card\" Collection\n// List (bound to the same collection) through a small shared window-level\n// store, because the two Collection Lists render fully independent React\n// trees and cannot share state through props or context directly.\n//\n// States: Active tab shows a \"glass\" pill (10% white background, 20% white\n// border) with fully white text. Inactive tabs are text-only at White 70%\n// opacity (matches the project's \"/With Opacity/White 70%\" color style),\n// brightening to full white on hover/focus.\n//\n// Animation: the active pill is a separate absolutely-positioned\n// motion.span with a shared `layoutId`. Framer Motion tracks that layoutId\n// across all Program Tab Button instances on the page (they don't need to\n// share a React parent for this to work), so when the active tab changes\n// the pill smoothly slides/resizes from the old tab to the new one instead\n// of popping between them.\n// Canvas safety: on the Framer canvas (RenderTarget.canvas) the pill is\n// rendered as a plain static span instead of a motion.span with layoutId —\n// the shared-layout animation doesn't reliably initialize on the canvas's\n// static render.\n//\n// Bug fix (nothing ever shows active): the shared window-level store used\n// to only get initialized by whichever instance's effect happened to fire\n// FIRST while the store was still empty — regardless of that instance's\n// own \"Default Active\" setting. Since the store lives on `window`, it also\n// survives code hot-reloads during editing, so a stale value from an\n// earlier test click (or from before Slugs were filled in) could get\n// stuck and match none of the real Slugs, leaving every tab inactive with\n// no way to recover without a full page reload. Fixed by making \"Default\n// Active\" authoritative and self-healing: the instance with\n// defaultActive=true now force-claims the store on every mount,\n// overwriting any stale value, instead of only acting when the store\n// happened to still be empty.\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState,startTransition}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion}from\"framer-motion\";function getProgramsActiveStore(){if(typeof window===\"undefined\"){return{activeSlug:null,listeners:new Set};}const w=window;if(!w.__programsActiveStore){w.__programsActiveStore={activeSlug:null,listeners:new Set};}return w.__programsActiveStore;}function setProgramsActiveSlug(slug){const store=getProgramsActiveStore();if(store.activeSlug===slug)return;store.activeSlug=slug;store.listeners.forEach(listener=>listener(slug));}function useProgramsActiveSlug(slug,defaultActive){const store=getProgramsActiveStore();const[activeSlug,setActiveSlugState]=useState(defaultActive?slug:store.activeSlug);useEffect(()=>{const listener=newSlug=>startTransition(()=>setActiveSlugState(newSlug));store.listeners.add(listener);if(defaultActive){// Authoritative: the designated default always (re)claims the\n// store on mount, even if it already holds a (possibly stale)\n// value from an earlier session/edit.\nsetProgramsActiveSlug(slug);}else if(store.activeSlug!==null){startTransition(()=>setActiveSlugState(store.activeSlug));}return()=>{store.listeners.delete(listener);};// eslint-disable-next-line react-hooks/exhaustive-deps\n},[]);return activeSlug;}const PILL_STYLE={position:\"absolute\",inset:0,borderRadius:\"100px\",backgroundColor:\"rgba(255, 255, 255, 0.1)\",border:\"1px solid rgba(255, 255, 255, 0.2)\",zIndex:0};/**\n * Program Tab Button\n *\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function ProgramTabButton(props){const{title,slug,defaultActive,style}=props;const activeSlug=useProgramsActiveSlug(slug,defaultActive);const[isHovered,setIsHovered]=useState(false);const isActive=activeSlug===slug;const isCanvas=RenderTarget.current()===RenderTarget.canvas;function handleClick(){if(!slug)return;startTransition(()=>setProgramsActiveSlug(slug));}return /*#__PURE__*/_jsxs(\"button\",{onClick:handleClick,onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>setIsHovered(false),onFocus:()=>setIsHovered(true),onBlur:()=>setIsHovered(false),\"aria-pressed\":isActive,style:{position:\"relative\",appearance:\"none\",cursor:\"pointer\",width:\"max-content\",fontFamily:'\"Instrument Sans\", sans-serif',fontSize:16,fontWeight:500,lineHeight:\"1.5em\",letterSpacing:\"-0.02em\",padding:\"4px 16px\",borderRadius:\"100px\",border:\"1px solid transparent\",backgroundColor:\"transparent\",color:isActive||isHovered?\"rgb(255, 255, 255)\":\"rgba(255, 255, 255, 0.7)\",transition:\"color 0.3s ease\",...style},children:[isActive&&(isCanvas?/*#__PURE__*/_jsx(\"span\",{style:PILL_STYLE}):/*#__PURE__*/_jsx(motion.span,{layoutId:\"programsActiveTabPill\",transition:{type:\"spring\",stiffness:500,damping:40},style:PILL_STYLE})),/*#__PURE__*/_jsx(\"span\",{style:{position:\"relative\",zIndex:1},children:title})]});}addPropertyControls(ProgramTabButton,{title:{type:ControlType.String,title:\"Title\",defaultValue:\"Program\"},slug:{type:ControlType.String,title:\"Slug\",defaultValue:\"\"},defaultActive:{type:ControlType.Boolean,title:\"Default Active\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ProgramTabButton\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ProgramTabButton.map"],"mappings":"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"}