{"version":3,"file":"YMCASchedule.cxIo7LRH.mjs","names":["useState","useRef","useCallback","_Fragment","useMemo"],"sources":["https:/framerusercontent.com/modules/HJymeDE7rD6V2wYRl6Sd/hpXIXtiBSpurOfW9TN2U/YMCASchedule.js"],"sourcesContent":["// YMCA Schedule Component for Framer\n// ─────────────────────────────────────────────────────────────────────────────\n// v7 CHANGES:\n//  • Click-to-pin overlay (desktop): clicking a block pins its overlay open\n//    (with the same x close button mobile already had) until it's closed via\n//    the x, a click outside it, or clicking that same block again. It tracks\n//    its anchor block on scroll/resize so it stays visually attached as the\n//    page scrolls. Hover previews still work independently and aren't\n//    suppressed by a pinned overlay.\n//  • Per-week fetching: the /blocks feed now accepts `week=YYYY-MM-DD` (any\n//    date in the target Monday–Sunday week; clamped server-side to last\n//    month through next month). A SCHEDULE-kind endpoint (or one with no\n//    `kind` param) is now fetched one week at a time and cached by its\n//    Monday date — only the week(s) the current view actually needs are\n//    requested, plus a forward prefetch of the following week so paging via\n//    WeekNavigator feels instant. An EVENT-kind endpoint is untouched: it's\n//    still fetched once, full three-month span, no week param. See\n//    isEventKindEndpoint / fetchWeek / getNeededDates below.\n// v6 CHANGES:\n//  • Multi-tab events: an event may carry an optional `scheduleTabs` array in\n//    addition to its primary `scheduleTab`. The event renders on every listed\n//    tab — the feed uses this to show senior/family/teen-tagged group exercise\n//    classes on both their audience calendar and the Group Exercise calendar\n//    (COMP-1397). The Today tab still shows each event once.\n//  • Day View: week/3-day instances now support a Week/Day toggle (top-left,\n//    above the time column). Day view shows a single day for the active tab,\n//    with forward/back arrows like the Today tab. Does not apply to the\n//    Today tab itself. Changing the date range (WeekNavigator) while in Day\n//    view snaps back to the first day of the newly selected range.\n//  • Large Text toggle: enableLargeText + largeTextIncrease props bump event\n//    card AND overlay font sizes by a uniform px amount when on.\n// ─────────────────────────────────────────────────────────────────────────────\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useState,useEffect,useRef,useCallback,useMemo}from\"react\";import*as ReactDOM from\"react-dom\";// ─── FONT LOADING HOOK ───────────────────────────────────────────────────────\nfunction useFontReady(fontName=\"Cachet Pro\"){const[ready,setReady]=useState(false);useEffect(()=>{document.fonts.load(`1em \"${fontName}\"`).then(()=>setReady(true));},[fontName]);return ready;}// ─── CONTRAST UTILITIES ──────────────────────────────────────────────────────\n// WCAG relative luminance + contrast ratio.\n// Used to decide whether to render light or dark text on a given bg color.\n// Accepts #RGB, #RRGGBB, or rgb()/rgba() strings — API colors may arrive in\n// any of these formats, so parsing needs to be forgiving.\nfunction parseColor(input){if(!input)return null;const str=input.trim();const hexMatch=str.match(/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/);if(hexMatch){let hex=hexMatch[1];if(hex.length===3)hex=hex.split(\"\").map(c=>c+c).join(\"\");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[r,g,b];}const rgbMatch=str.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i);if(rgbMatch){return[parseInt(rgbMatch[1],10),parseInt(rgbMatch[2],10),parseInt(rgbMatch[3],10)];}return null;}function relativeLuminance(r,g,b){const ch=[r,g,b].map(c=>{const s=c/255;return s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4);});return .2126*ch[0]+.7152*ch[1]+.0722*ch[2];}// Returns null (rather than a biased fallback number) when either color fails\n// to parse, so callers can decide on a safe default instead of silently\n// skewing toward one text color.\nfunction contrastRatio(color1,color2){const rgb1=parseColor(color1);const rgb2=parseColor(color2);if(!rgb1||!rgb2)return null;const L1=relativeLuminance(...rgb1);const L2=relativeLuminance(...rgb2);const lighter=Math.max(L1,L2);const darker=Math.min(L1,L2);return(lighter+.05)/(darker+.05);}// Directly compares both candidate text colors against the actual background\n// and picks whichever is more readable — no arbitrary reference threshold,\n// no cliff-edge misclassification, self-correcting for any bg color.\n// `lightBias` multiplies the light-color contrast score before comparing,\n// letting the light color win close calls. 1.0 = pure best-contrast (no bias).\n// Higher values require dark text to win by a wider margin before it's used.\n// If the bg color can't be parsed, defaults to the light color (most common case).\nfunction pickReadableTextColor(bgHex,lightColor,darkColor,lightBias=1){const contrastLight=contrastRatio(lightColor,bgHex);const contrastDark=contrastRatio(darkColor,bgHex);if(contrastLight===null||contrastDark===null){return{color:lightColor,isDark:false};}return contrastDark>contrastLight*lightBias?{color:darkColor,isDark:true}:{color:lightColor,isDark:false};}const UI_STRINGS={en:{loading:\"Loading schedule...\",noon:\"Noon\",am:h=>`${h} AM`,pm:h=>`${h-12} PM`,today:\"TODAY\",todayLabel:d=>`TODAY — ${d}`,week:\"WEEK\",day:\"DAY\"},es:{loading:\"Cargando horario...\",noon:\"Mediod\\xeda\",am:h=>`${h} AM`,pm:h=>`${h-12} PM`,today:\"HOY\",todayLabel:d=>`HOY — ${d}`,week:\"SEMANA\",day:\"D\\xcdA\"},ru:{loading:\"Загрузка расписания...\",noon:\"Полдень\",am:h=>`${h} AM`,pm:h=>`${h-12} PM`,today:\"СЕГОДНЯ\",todayLabel:d=>`СЕГОДНЯ — ${d}`,week:\"НЕДЕЛЯ\",day:\"ДЕНЬ\"},uk:{loading:\"Завантаження розкладу...\",noon:\"Полудень\",am:h=>`${h} AM`,pm:h=>`${h-12} PM`,today:\"СЬОГОДНІ\",todayLabel:d=>`СЬОГОДНІ — ${d}`,week:\"ТИЖДЕНЬ\",day:\"ДЕНЬ\"}};// ─── PLACEHOLDER DATA ────────────────────────────────────────────────────────\nfunction generatePlaceholderData(){const now=new Date;const monday=new Date(now);monday.setDate(now.getDate()-now.getDay()+1);monday.setHours(0,0,0,0);const d=(dayOffset,h,m=0)=>{const dt=new Date(monday);dt.setDate(monday.getDate()+dayOffset);dt.setHours(h,m,0,0);return dt.toISOString();};return[// ── GYM ──\n{id:\"g1\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(0,5),endTime:d(0,8),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g2\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(1,5),endTime:d(1,8),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g3\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(2,5),endTime:d(2,8),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g4\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(3,5),endTime:d(3,8),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g5\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(4,5),endTime:d(4,8),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g6\",title:\"Open Pickleball\",scheduleTab:\"gym\",activityType:\"Pickleball\",startTime:d(0,8),endTime:d(0,11,30),location:\"Court 1\",instructor:\"Open Play\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"g7\",title:\"Open Pickleball\",scheduleTab:\"gym\",activityType:\"Pickleball\",startTime:d(1,8,30),endTime:d(1,11),location:\"Court 1\",instructor:\"Open Play\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"g8\",title:\"Open Pickleball\",scheduleTab:\"gym\",activityType:\"Pickleball\",startTime:d(2,8),endTime:d(2,11,30),location:\"Court 1\",instructor:\"Open Play\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"g9\",title:\"Open Pickleball\",scheduleTab:\"gym\",activityType:\"Pickleball\",startTime:d(3,8),endTime:d(3,11,30),location:\"Court 1\",instructor:\"Open Play\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"g10\",title:\"Open Pickleball\",scheduleTab:\"gym\",activityType:\"Pickleball\",startTime:d(4,8),endTime:d(4,11,30),location:\"Court 1\",instructor:\"Open Play\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"g11\",title:\"Open Pickleball\",scheduleTab:\"gym\",activityType:\"Pickleball\",startTime:d(5,8),endTime:d(5,11,30),location:\"Court 1\",instructor:\"Open Play\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"g12\",title:\"Youth Basketball\",scheduleTab:\"gym\",activityType:\"Basketball\",startTime:d(1,11),endTime:d(1,14),location:\"Court 2\",instructor:\"Coach Marcus\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g13\",title:\"Youth Basketball\",scheduleTab:\"gym\",activityType:\"Basketball\",startTime:d(3,11),endTime:d(3,14),location:\"Court 2\",instructor:\"Coach Marcus\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g14\",title:\"Youth Basketball\",scheduleTab:\"gym\",activityType:\"Basketball\",startTime:d(0,16),endTime:d(0,18),location:\"Court 2\",instructor:\"Coach Marcus\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g15\",title:\"Youth Basketball\",scheduleTab:\"gym\",activityType:\"Basketball\",startTime:d(2,16),endTime:d(2,18),location:\"Court 2\",instructor:\"Coach Marcus\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g16\",title:\"Youth Basketball\",scheduleTab:\"gym\",activityType:\"Basketball\",startTime:d(4,16),endTime:d(4,18),location:\"Court 2\",instructor:\"Coach Marcus\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g17\",title:\"Youth Basketball\",scheduleTab:\"gym\",activityType:\"Basketball\",startTime:d(6,13),endTime:d(6,16),location:\"Court 2\",instructor:\"Coach Marcus\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g18\",title:\"Youth Volleyball\",scheduleTab:\"gym\",activityType:\"Volleyball\",startTime:d(0,14),endTime:d(0,16),location:\"Court 3\",instructor:\"Coach Tina\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g19\",title:\"Youth Volleyball\",scheduleTab:\"gym\",activityType:\"Volleyball\",startTime:d(1,14),endTime:d(1,16),location:\"Court 3\",instructor:\"Coach Tina\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g20\",title:\"Youth Volleyball\",scheduleTab:\"gym\",activityType:\"Volleyball\",startTime:d(2,14),endTime:d(2,16),location:\"Court 3\",instructor:\"Coach Tina\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g21\",title:\"Youth Volleyball\",scheduleTab:\"gym\",activityType:\"Volleyball\",startTime:d(3,14),endTime:d(3,16),location:\"Court 3\",instructor:\"Coach Tina\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g22\",title:\"Youth Volleyball\",scheduleTab:\"gym\",activityType:\"Volleyball\",startTime:d(4,14),endTime:d(4,16),location:\"Court 3\",instructor:\"Coach Tina\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g23\",title:\"Youth Volleyball\",scheduleTab:\"gym\",activityType:\"Volleyball\",startTime:d(5,12),endTime:d(5,14),location:\"Court 3\",instructor:\"Coach Tina\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g24\",title:\"Youth Basketball Side 1\",scheduleTab:\"gym\",activityType:\"Basketball\",startTime:d(0,16,30),endTime:d(0,18,30),location:\"Court 1\",instructor:\"Coach Dan\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g25\",title:\"Youth Basketball Side 1\",scheduleTab:\"gym\",activityType:\"Basketball\",startTime:d(3,16,30),endTime:d(3,18,30),location:\"Court 1\",instructor:\"Coach Dan\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"g26\",title:\"Teen Late Night Side 2\",scheduleTab:\"gym\",activityType:\"Teen Night\",startTime:d(0,17),endTime:d(0,19),location:\"Court 2\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"g27\",title:\"Teen Late Night Side 2\",scheduleTab:\"gym\",activityType:\"Teen Night\",startTime:d(3,17),endTime:d(3,19),location:\"Court 2\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"g28\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(0,19),endTime:d(0,21),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g29\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(1,19),endTime:d(1,21),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g30\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(2,19),endTime:d(2,21),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g31\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(3,19),endTime:d(3,21),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g32\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(4,19),endTime:d(4,21),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g33\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(5,8),endTime:d(5,10),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g34\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(5,12),endTime:d(5,14),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g35\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(5,15),endTime:d(5,17),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g36\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(6,8),endTime:d(6,12),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g37\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(6,12),endTime:d(6,14),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g38\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(6,15),endTime:d(6,17),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g39\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(1,11),endTime:d(1,13),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"g40\",title:\"Open Gym\",scheduleTab:\"gym\",activityType:\"Open Gym\",startTime:d(1,13),endTime:d(1,15),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},// ── GROUP EXERCISE ──\n{id:\"ge1\",title:\"Morning Yoga\",scheduleTab:\"groupExercise\",activityType:\"Yoga\",startTime:d(0,6),endTime:d(0,7),location:\"Studio A\",instructor:\"Sarah K.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"ge2\",title:\"Zumba\",scheduleTab:\"groupExercise\",activityType:\"Zumba\",startTime:d(0,9),endTime:d(0,10),location:\"Studio B\",instructor:\"Maria L.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"ge3\",title:\"Spin Class\",scheduleTab:\"groupExercise\",activityType:\"Spin\",startTime:d(1,6),endTime:d(1,7),location:\"Spin Room\",instructor:\"Jake T.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"ge4\",title:\"Pilates\",scheduleTab:\"groupExercise\",activityType:\"Pilates\",startTime:d(1,9),endTime:d(1,10),location:\"Studio A\",instructor:\"Anna P.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"ge5\",title:\"Strength Training\",scheduleTab:\"groupExercise\",activityType:\"Strength\",startTime:d(2,7),endTime:d(2,8,30),location:\"Weight Room\",instructor:\"Carlos M.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"ge6\",title:\"Morning Yoga\",scheduleTab:\"groupExercise\",activityType:\"Yoga\",startTime:d(2,9),endTime:d(2,10),location:\"Studio A\",instructor:\"Sarah K.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"ge7\",title:\"Zumba\",scheduleTab:\"groupExercise\",activityType:\"Zumba\",startTime:d(3,9),endTime:d(3,10),location:\"Studio B\",instructor:\"Maria L.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"ge8\",title:\"Cycle & Core\",scheduleTab:\"groupExercise\",activityType:\"Spin\",startTime:d(4,6),endTime:d(4,7),location:\"Spin Room\",instructor:\"Jake T.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"ge9\",title:\"HIIT\",scheduleTab:\"groupExercise\",activityType:\"HIIT\",startTime:d(4,9),endTime:d(4,10),location:\"Studio B\",instructor:\"Carlos M.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"ge10\",title:\"Weekend Yoga\",scheduleTab:\"groupExercise\",activityType:\"Yoga\",startTime:d(5,9),endTime:d(5,10,30),location:\"Studio A\",instructor:\"Sarah K.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},// ── POOL ──\n{id:\"p1\",title:\"Lap Swim\",scheduleTab:\"pool\",activityType:\"Lap Swim\",startTime:d(0,5,30),endTime:d(0,8),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"p2\",title:\"Swim Lessons\",scheduleTab:\"pool\",activityType:\"Swim Lessons\",startTime:d(0,9),endTime:d(0,10),location:\"Lesson Pool\",instructor:\"Coach Rivera\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"p3\",title:\"Water Aerobics\",scheduleTab:\"pool\",activityType:\"Water Aerobics\",startTime:d(0,10),endTime:d(0,11),location:\"Lap Pool\",instructor:\"Janet W.\",ageGroup:\"Seniors\",branchLocation:\"Downtown\"},{id:\"p4\",title:\"Lap Swim\",scheduleTab:\"pool\",activityType:\"Lap Swim\",startTime:d(1,5,30),endTime:d(1,8),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"p5\",title:\"Swim Lessons\",scheduleTab:\"pool\",activityType:\"Swim Lessons\",startTime:d(1,9),endTime:d(1,10),location:\"Lesson Pool\",instructor:\"Coach Rivera\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"p6\",title:\"Aqua Zumba\",scheduleTab:\"pool\",activityType:\"Water Aerobics\",startTime:d(2,10),endTime:d(2,11),location:\"Lap Pool\",instructor:\"Maria L.\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"p7\",title:\"Lap Swim\",scheduleTab:\"pool\",activityType:\"Lap Swim\",startTime:d(3,5,30),endTime:d(3,8),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"p8\",title:\"Swim Lessons\",scheduleTab:\"pool\",activityType:\"Swim Lessons\",startTime:d(1,9),endTime:d(1,10),location:\"Lesson Pool\",instructor:\"Coach Rivera\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"p9\",title:\"Lap Swim\",scheduleTab:\"pool\",activityType:\"Lap Swim\",startTime:d(4,5,30),endTime:d(4,8),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"Adults\",branchLocation:\"Downtown\"},{id:\"p10\",title:\"Open Swim\",scheduleTab:\"pool\",activityType:\"Open Swim\",startTime:d(5,10),endTime:d(5,16),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"p11\",title:\"Open Swim\",scheduleTab:\"pool\",activityType:\"Open Swim\",startTime:d(6,12),endTime:d(6,17),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},// ── SENIOR ──\n{id:\"s1\",title:\"Senior Yoga\",scheduleTab:\"senior\",activityType:\"Yoga\",startTime:d(0,8),endTime:d(0,9),location:\"Studio A\",instructor:\"Helen R.\",ageGroup:\"Seniors\",branchLocation:\"Downtown\"},{id:\"s2\",title:\"Silver Sneakers\",scheduleTab:\"senior\",activityType:\"Silver Sneakers\",startTime:d(0,10),endTime:d(0,11),location:\"Studio B\",instructor:\"Bob K.\",ageGroup:\"Seniors\",branchLocation:\"Downtown\"},{id:\"s3\",title:\"Chair Fitness\",scheduleTab:\"senior\",activityType:\"Chair Fitness\",startTime:d(1,9),endTime:d(1,10),location:\"Studio A\",instructor:\"Helen R.\",ageGroup:\"Seniors\",branchLocation:\"Downtown\"},{id:\"s4\",title:\"Silver Sneakers\",scheduleTab:\"senior\",activityType:\"Silver Sneakers\",startTime:d(2,10),endTime:d(2,11),location:\"Studio B\",instructor:\"Bob K.\",ageGroup:\"Seniors\",branchLocation:\"Downtown\"},{id:\"s5\",title:\"Senior Yoga\",scheduleTab:\"senior\",activityType:\"Yoga\",startTime:d(3,8),endTime:d(3,9),location:\"Studio A\",instructor:\"Helen R.\",ageGroup:\"Seniors\",branchLocation:\"Downtown\"},{id:\"s6\",title:\"Tai Chi\",scheduleTab:\"senior\",activityType:\"Tai Chi\",startTime:d(4,9),endTime:d(4,10),location:\"Studio A\",instructor:\"Master Chen\",ageGroup:\"Seniors\",branchLocation:\"Downtown\"},{id:\"s7\",title:\"Chair Fitness\",scheduleTab:\"senior\",activityType:\"Chair Fitness\",startTime:d(5,10),endTime:d(5,11),location:\"Studio A\",instructor:\"Helen R.\",ageGroup:\"Seniors\",branchLocation:\"Downtown\"},// ── FAMILY ──\n{id:\"f1\",title:\"Family Swim\",scheduleTab:\"family\",activityType:\"Family Swim\",startTime:d(0,10),endTime:d(0,12),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"f2\",title:\"Family Gym\",scheduleTab:\"family\",activityType:\"Family Gym\",startTime:d(0,14),endTime:d(0,16),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"f3\",title:\"Kids Yoga\",scheduleTab:\"family\",activityType:\"Yoga\",startTime:d(1,10),endTime:d(1,11),location:\"Studio A\",instructor:\"Sarah K.\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"f4\",title:\"Family Swim\",scheduleTab:\"family\",activityType:\"Family Swim\",startTime:d(2,10),endTime:d(2,12),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"f5\",title:\"Parent & Tot\",scheduleTab:\"family\",activityType:\"Parent & Tot\",startTime:d(3,9),endTime:d(3,10),location:\"Studio B\",instructor:\"Amy D.\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},{id:\"f6\",title:\"Family Gym\",scheduleTab:\"family\",activityType:\"Family Gym\",startTime:d(4,14),endTime:d(4,16),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"f7\",title:\"Family Swim\",scheduleTab:\"family\",activityType:\"Family Swim\",startTime:d(5,11),endTime:d(5,14),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"f8\",title:\"Family Swim\",scheduleTab:\"family\",activityType:\"Family Swim\",startTime:d(6,13),endTime:d(6,16),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"All Ages\",branchLocation:\"Downtown\"},{id:\"f9\",title:\"Kids Craft & Play\",scheduleTab:\"family\",activityType:\"Kids Activity\",startTime:d(5,10),endTime:d(5,11),location:\"Studio B\",instructor:\"Amy D.\",ageGroup:\"Youth\",branchLocation:\"Downtown\"},// ── TEEN ──\n{id:\"t1\",title:\"Teen Open Gym\",scheduleTab:\"teen\",activityType:\"Teen Night\",startTime:d(0,15),endTime:d(0,17),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t2\",title:\"Teen Open Gym\",scheduleTab:\"teen\",activityType:\"Teen Night\",startTime:d(1,15),endTime:d(1,17),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t3\",title:\"Teen Open Gym\",scheduleTab:\"teen\",activityType:\"Teen Night\",startTime:d(2,15),endTime:d(2,17),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t4\",title:\"Teen Open Gym\",scheduleTab:\"teen\",activityType:\"Teen Night\",startTime:d(3,15),endTime:d(3,17),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t5\",title:\"Teen Open Gym\",scheduleTab:\"teen\",activityType:\"Teen Night\",startTime:d(4,15),endTime:d(4,17),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t6\",title:\"Teen Basketball\",scheduleTab:\"teen\",activityType:\"Basketball\",startTime:d(0,17),endTime:d(0,19),location:\"Court 1\",instructor:\"Coach Marcus\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t7\",title:\"Teen Basketball\",scheduleTab:\"teen\",activityType:\"Basketball\",startTime:d(2,17),endTime:d(2,19),location:\"Court 1\",instructor:\"Coach Marcus\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t8\",title:\"Teen Basketball\",scheduleTab:\"teen\",activityType:\"Basketball\",startTime:d(4,17),endTime:d(4,19),location:\"Court 1\",instructor:\"Coach Marcus\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t9\",title:\"Teen Swim\",scheduleTab:\"teen\",activityType:\"Teen Swim\",startTime:d(1,16),endTime:d(1,18),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t10\",title:\"Teen Swim\",scheduleTab:\"teen\",activityType:\"Teen Swim\",startTime:d(3,16),endTime:d(3,18),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t11\",title:\"Late Night\",scheduleTab:\"teen\",activityType:\"Teen Night\",startTime:d(4,19),endTime:d(4,21),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t12\",title:\"Late Night\",scheduleTab:\"teen\",activityType:\"Teen Night\",startTime:d(5,19),endTime:d(5,21),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t13\",title:\"Teen Fitness\",scheduleTab:\"teen\",activityType:\"Teen Fitness\",startTime:d(0,9),endTime:d(0,10),location:\"Weight Room\",instructor:\"Carlos M.\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t14\",title:\"Teen Fitness\",scheduleTab:\"teen\",activityType:\"Teen Fitness\",startTime:d(2,9),endTime:d(2,10),location:\"Weight Room\",instructor:\"Carlos M.\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t15\",title:\"Teen Fitness\",scheduleTab:\"teen\",activityType:\"Teen Fitness\",startTime:d(4,9),endTime:d(4,10),location:\"Weight Room\",instructor:\"Carlos M.\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t16\",title:\"Teen Volleyball\",scheduleTab:\"teen\",activityType:\"Volleyball\",startTime:d(1,17),endTime:d(1,19),location:\"Court 2\",instructor:\"Coach Tina\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t17\",title:\"Teen Volleyball\",scheduleTab:\"teen\",activityType:\"Volleyball\",startTime:d(3,17),endTime:d(3,19),location:\"Court 2\",instructor:\"Coach Tina\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t18\",title:\"Weekend Open Gym\",scheduleTab:\"teen\",activityType:\"Teen Night\",startTime:d(5,13),endTime:d(5,16),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t19\",title:\"Weekend Open Gym\",scheduleTab:\"teen\",activityType:\"Teen Night\",startTime:d(6,13),endTime:d(6,16),location:\"Main Gym\",instructor:\"Staff\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t20\",title:\"Teen Swim\",scheduleTab:\"teen\",activityType:\"Teen Swim\",startTime:d(5,16),endTime:d(5,18),location:\"Lap Pool\",instructor:\"Lifeguard\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t21\",title:\"Teen Dance\",scheduleTab:\"teen\",activityType:\"Teen Dance\",startTime:d(0,12),endTime:d(0,13),location:\"Studio B\",instructor:\"Maria L.\",ageGroup:\"Teen\",branchLocation:\"Downtown\"},{id:\"t22\",title:\"Teen Dance\",scheduleTab:\"teen\",activityType:\"Teen Dance\",startTime:d(3,12),endTime:d(3,13),location:\"Studio B\",instructor:\"Maria L.\",ageGroup:\"Teen\",branchLocation:\"Downtown\"}];}// ─── HELPERS ─────────────────────────────────────────────────────────────────\nfunction isSameDay(a,b){return a.getFullYear()===b.getFullYear()&&a.getMonth()===b.getMonth()&&a.getDate()===b.getDate();}function fmtTime(d){return d.toLocaleTimeString(\"en-US\",{hour:\"numeric\",minute:\"2-digit\"});}function isMobilePointer(){if(typeof window===\"undefined\")return false;return window.matchMedia(\"(pointer: coarse)\").matches;}// Normalizes scheduleTab values so API data using plural forms (e.g. \"teens\")\n// still matches the component's internal singular tab keys (e.g. \"teen\").\n// Trims whitespace, lowercases, handles \"families\", and otherwise strips a\n// single trailing \"s\".\nfunction normalizeTab(tab){const t=(tab||\"\").trim().toLowerCase();if(t===\"families\")return\"family\";return t.endsWith(\"s\")&&t!==\"s\"?t.slice(0,-1):t;}// An event belongs to a tab when the tab appears in its `scheduleTabs` array\n// (feed events that live on several calendars, e.g. senior GX classes on both\n// Senior and Group Exercise), or — for events without one — when its single\n// `scheduleTab` matches.\nfunction eventMatchesTab(evt,tab){const target=normalizeTab(tab);const tabs=evt.scheduleTabs&&evt.scheduleTabs.length?evt.scheduleTabs:[evt.scheduleTab];return tabs.some(t=>normalizeTab(t)===target);}// Accepts every shape the /blocks feed has ever returned and produces a flat\n// event array with descriptions inlined:\n//  • {\"descriptions\": {key: text}, \"schedule\": [...]} — current SCHEDULE\n//    shape: long-form descriptions are deduped into a top-level map and each\n//    occurrence carries a `descriptionKey` into it. Re-attach the text here\n//    so the rest of the component keeps reading evt.description.\n//  • bare array — kind=EVENT responses (description stays inline) and older\n//    cached SCHEDULE payloads.\n//  • {\"events\": [...]} — legacy CMS wrapper.\nfunction normalizeApiData(data){if(Array.isArray(data))return data;if(data&&Array.isArray(data.schedule)){const descriptions=data.descriptions??{};return data.schedule.map(e=>e&&e.descriptionKey&&descriptions[e.descriptionKey]?{...e,description:descriptions[e.descriptionKey]}:e);}if(data&&Array.isArray(data.events))return data.events;return[];}// ─── PER-WEEK FETCHING (v7) ──────────────────────────────────────────────────\n// The /blocks feed now supports `week=YYYY-MM-DD` (any date in the target\n// week — Monday through Sunday — clamped server-side to last month through\n// next month). A SCHEDULE-kind endpoint returns ~20kB per week instead of a\n// ~5MB three-month blob, so the schedule fetches one week at a time and\n// caches each by its Monday date, refetching only the week(s) currently on\n// screen. An EVENT-kind endpoint is unaffected — it still returns the full\n// three-month span in one shot, so it keeps the original fetch-once behavior.\n// Detects whether an apiEndpoint points at the EVENT feed (kind=EVENT), which\n// should NOT get the week= treatment. Anything else — kind=SCHEDULE, no kind\n// param at all, or an unrecognized value — is treated as the per-week feed.\nfunction isEventKindEndpoint(endpoint){const match=endpoint.match(/[?&]kind=([^&]+)/i);if(!match)return false;let value=match[1];try{value=decodeURIComponent(value);}catch{// leave as-is if it wasn't actually percent-encoded\n}return value.trim().toLowerCase()===\"event\";}// Monday (local calendar day, midnight) of the week containing `date`.\n// Mirrors WeekNavigator's getMondayOfWeek so both components agree on where\n// a week boundary falls.\nfunction mondayOf(date){const d=new Date(date);d.setHours(0,0,0,0);const dow=d.getDay();const diff=dow===0?-6:1-dow;d.setDate(d.getDate()+diff);return d;}function formatDateYMD(date){const y=date.getFullYear();const m=String(date.getMonth()+1).padStart(2,\"0\");const day=String(date.getDate()).padStart(2,\"0\");return`${y}-${m}-${day}`;}// The cache key AND the value sent as `week=`. Any date within a week maps\n// to the same key (its Monday), so days from the same calendar week always\n// hit the same cache entry regardless of which view is asking.\nfunction weekKeyFor(date){return formatDateYMD(mondayOf(date));}function buildWeekUrl(endpoint,weekKey){const sep=endpoint.includes(\"?\")?\"&\":\"?\";return`${endpoint}${sep}week=${weekKey}`;}// Full 7-day week, Monday-anchored, shifted by whole weeks via weekOffset.\n// Pulled out to a standalone function so both the render path and the\n// per-week fetch effect compute identical day lists from the same offset.\nfunction computeWeekDays(weekOffset){return Array.from({length:7},(_,i)=>{const now=new Date;const dow=now.getDay();const monday=new Date(now);monday.setDate(now.getDate()-(dow===0?6:dow-1)+weekOffset*7);const day=new Date(monday);day.setDate(monday.getDate()+i);return day;});}// Compact 3-day window, anchored on real \"today\" (not Monday) and shifted 3\n// days at a time via the same weekOffset nav control as week view.\nfunction computeThreeDays(weekOffset){return Array.from({length:3},(_,i)=>{const now=new Date;const anchor=new Date(now);anchor.setDate(now.getDate()+weekOffset*3);const day=new Date(anchor);day.setDate(anchor.getDate()+i);return day;});}// The day currently shown by the Today tab's own forward/back arrows\n// (independent of weekOffset).\nfunction computeViewDay(todayDayOffset){const baseToday=new Date;const viewDay=new Date(baseToday);viewDay.setDate(baseToday.getDate()+todayDayOffset);viewDay.setHours(0,0,0,0);return viewDay;}// The set of calendar dates the current view actually needs data for. Used\n// both to decide which week(s) to fetch and to decide whether the view is\n// still \"loading\" (i.e. waiting on a week that isn't cached yet).\nfunction getNeededDates(activeTab,todayDayOffset,viewMode,selectedDay,weekOffset,isThreeDayView){if(activeTab===\"today\")return[computeViewDay(todayDayOffset)];if(viewMode===\"day\")return[selectedDay];return isThreeDayView?computeThreeDays(weekOffset):computeWeekDays(weekOffset);}// Parses the \"Branch:Tab\" rule list used to decide which branch+tab\n// combinations should render the 3-day view instead of the full week view.\n// Format: comma-separated pairs, e.g. \"Everett:gym, Marysville:pool\".\n// Whitespace around branch/tab names is trimmed; matching is case-insensitive.\nfunction parseThreeDayRules(rules){if(!rules)return[];return rules.split(\",\").map(pair=>pair.trim()).filter(Boolean).map(pair=>{const[branch,tab]=pair.split(\":\");return{branch:(branch||\"\").trim().toLowerCase(),tab:(tab||\"\").trim().toLowerCase()};}).filter(r=>r.branch&&r.tab);}// A given component instance matches the 3-day view when at least one branch\n// named in filterBranch pairs with the current activeTab in the rule list.\n// Today view is never affected by this — callers should guard for that.\nfunction matchesThreeDayView(filterBranch,activeTab,rules){if(!rules.length||!filterBranch)return false;const branches=filterBranch.split(\",\").map(b=>b.trim().toLowerCase()).filter(Boolean);const tab=(activeTab||\"\").trim().toLowerCase();return rules.some(r=>r.tab===tab&&branches.includes(r.branch));}// ─── NAV ARROWS ──────────────────────────────────────────────────────────────\nfunction ChevronLeft({size,color}){return /*#__PURE__*/_jsx(\"svg\",{width:size,height:size,viewBox:\"0 0 24 24\",fill:\"none\",stroke:color,strokeWidth:\"2.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\",style:{display:\"block\"},children:/*#__PURE__*/_jsx(\"polyline\",{points:\"15 18 9 12 15 6\"})});}function ChevronRight({size,color}){return /*#__PURE__*/_jsx(\"svg\",{width:size,height:size,viewBox:\"0 0 24 24\",fill:\"none\",stroke:color,strokeWidth:\"2.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\",style:{display:\"block\"},children:/*#__PURE__*/_jsx(\"polyline\",{points:\"9 18 15 12 9 6\"})});}// Icon for the \"Week\" toggle button: a grid of columns, evoking a multi-day\n// week layout (similar to a photo-gallery/grid icon).\nfunction IconWeekView({size,color}){return /*#__PURE__*/_jsxs(\"svg\",{width:size,height:size,viewBox:\"0 0 24 24\",fill:\"none\",stroke:color,strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",style:{display:\"block\"},children:[/*#__PURE__*/_jsx(\"rect\",{x:\"3\",y:\"4\",width:\"18\",height:\"16\",rx:\"2\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"7.5\",y1:\"4\",x2:\"7.5\",y2:\"20\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"12\",y1:\"4\",x2:\"12\",y2:\"20\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"16.5\",y1:\"4\",x2:\"16.5\",y2:\"20\"})]});}// Icon for the \"Day\" toggle button: a single framed rectangle, evoking one\n// isolated day/card (similar to a single-item view icon).\nfunction IconDayView({size,color}){return /*#__PURE__*/_jsxs(\"svg\",{width:size,height:size,viewBox:\"0 0 24 24\",fill:\"none\",stroke:color,strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",style:{display:\"block\"},children:[/*#__PURE__*/_jsx(\"line\",{x1:\"5\",y1:\"5\",x2:\"19\",y2:\"5\"}),/*#__PURE__*/_jsx(\"rect\",{x:\"5\",y:\"8.5\",width:\"14\",height:\"7\",rx:\"1.5\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"5\",y1:\"19\",x2:\"19\",y2:\"19\"})]});}function OverlayPortal({state,onClose,isMobile,pinned,baseFont,overlayWidth,overlayPadding,overlayBorderRadius,overlayBorderWidth,overlayBorderColor,overlayShadow,overlayOffset,overlayTitleSize,overlayTitleWeight,overlayMetaSize,overlayMetaWeight,overlayTextColor,overlayTextOpacityMeta,overlayCloseButtonSize,overlayCloseButtonColor,overlayDescMaxHeight,descriptionFontSize,descriptionLineHeight,darkEventTextColor}){const{evt,color,anchorRect,anchorEl,useDarkText}=state;// Show the explicit close (x) button whenever the overlay can't be\n// dismissed by a mouseleave — i.e. on mobile taps, or when pinned open\n// via a desktop click.\nconst showCloseButton=isMobile||pinned;// If the event bg needs dark text, override ALL overlay text to dark\nconst textColor=useDarkText?darkEventTextColor:overlayTextColor;const closeColor=useDarkText?darkEventTextColor:overlayCloseButtonColor;const ref=useRef(null);const[pos,setPos]=useState({top:-9999,left:-9999});// Shared positioning logic: given the anchor's current viewport rect,\n// pick whichever side (right/left/below/above) has room for the overlay,\n// then clamp to the viewport. Used both for the initial placement and\n// (when pinned) for every scroll/resize reposition so the overlay tracks\n// its anchor block's on-screen position live.\nconst computePosition=useCallback(rect=>{if(!ref.current)return;const ol=ref.current;const olH=ol.offsetHeight,olW=ol.offsetWidth;const vw=window.innerWidth,vh=window.innerHeight;const gap=overlayOffset;const spaceRight=vw-rect.right,spaceLeft=rect.left,spaceBottom=vh-rect.bottom;let top=0,left=0;if(spaceRight>=olW+gap){left=rect.right+gap;top=rect.top;}else if(spaceLeft>=olW+gap){left=rect.left-olW-gap;top=rect.top;}else if(spaceBottom>=olH+gap){top=rect.bottom+gap;left=rect.left;}else{top=rect.top-olH-gap;left=rect.left;}top=Math.max(8,Math.min(top,vh-olH-8));left=Math.max(8,Math.min(left,vw-olW-8));setPos({top,left});},[overlayOffset]);useEffect(()=>{computePosition(anchorRect);},[anchorRect,computePosition,baseFont,descriptionFontSize,descriptionLineHeight,evt,isMobile,overlayBorderWidth,overlayCloseButtonSize,overlayDescMaxHeight,overlayMetaSize,overlayMetaWeight,overlayOffset,overlayPadding,overlayTitleSize,overlayTitleWeight,overlayWidth]);// While pinned, keep the overlay attached to its anchor block as the\n// page (or an internal scroll container) scrolls, so it reads as\n// \"attached\" to the block rather than fixed to a spot on screen.\nuseEffect(()=>{if(!pinned||!anchorEl)return;const reposition=()=>computePosition(anchorEl.getBoundingClientRect());reposition();// capture:true so scrolling inside the schedule's internal\n// overflow-auto containers (not just window scroll) is caught too.\nwindow.addEventListener(\"scroll\",reposition,true);window.addEventListener(\"resize\",reposition);return()=>{window.removeEventListener(\"scroll\",reposition,true);window.removeEventListener(\"resize\",reposition);};},[pinned,anchorEl,computePosition]);useEffect(()=>{if(!isMobile&&!pinned)return;const handler=e=>{if(ref.current&&!ref.current.contains(e.target))onClose();};const id=setTimeout(()=>document.addEventListener(\"mousedown\",handler),50);return()=>{clearTimeout(id);document.removeEventListener(\"mousedown\",handler);};},[isMobile,pinned,onClose]);const start=new Date(evt.startTime),end=new Date(evt.endTime);const timeStr=`${fmtTime(start)} – ${fmtTime(end)}`;const dateStr=start.toLocaleDateString(\"en-US\",{weekday:\"long\",month:\"long\",day:\"numeric\"});const ic=path=>/*#__PURE__*/_jsx(\"svg\",{width:overlayMetaSize,height:overlayMetaSize,viewBox:\"0 0 24 24\",fill:\"none\",stroke:textColor,strokeWidth:\"1.8\",strokeLinecap:\"round\",strokeLinejoin:\"round\",style:{display:\"block\",flexShrink:0,opacity:overlayTextOpacityMeta},children:path});const IconClock=ic(/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"circle\",{cx:\"12\",cy:\"12\",r:\"10\"}),/*#__PURE__*/_jsx(\"polyline\",{points:\"12 6 12 12 16 14\"})]}));const IconCalendar=ic(/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"rect\",{x:\"3\",y:\"4\",width:\"18\",height:\"18\",rx:\"2\",ry:\"2\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"16\",y1:\"2\",x2:\"16\",y2:\"6\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"8\",y1:\"2\",x2:\"8\",y2:\"6\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"3\",y1:\"10\",x2:\"21\",y2:\"10\"})]}));const IconPin=ic(/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"path\",{d:\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"}),/*#__PURE__*/_jsx(\"circle\",{cx:\"12\",cy:\"10\",r:\"3\"})]}));const IconPerson=ic(/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"path\",{d:\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"}),/*#__PURE__*/_jsx(\"circle\",{cx:\"12\",cy:\"7\",r:\"4\"})]}));const IconGroup=ic(/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"path\",{d:\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"}),/*#__PURE__*/_jsx(\"circle\",{cx:\"9\",cy:\"7\",r:\"4\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M23 21v-2a4 4 0 0 0-3-3.87\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M16 3.13a4 4 0 0 1 0 7.75\"})]}));const IconBuilding=ic(/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"path\",{d:\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"}),/*#__PURE__*/_jsx(\"polyline\",{points:\"9 22 9 12 15 12 15 22\"})]}));const IconDescription=ic(/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"line\",{x1:\"3\",y1:\"6\",x2:\"21\",y2:\"6\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"3\",y1:\"10\",x2:\"21\",y2:\"10\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"3\",y1:\"14\",x2:\"17\",y2:\"14\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"3\",y1:\"18\",x2:\"14\",y2:\"18\"})]}));const metaStyle={fontFamily:baseFont,fontSize:overlayMetaSize,fontWeight:overlayMetaWeight,color:textColor,opacity:overlayTextOpacityMeta,lineHeight:1.4,margin:0};const MetaRow=({icon,value,mb=overlayPadding*.3})=>{if(!value||value.trim()===\"\")return null;return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:7,marginBottom:mb},children:[icon,/*#__PURE__*/_jsx(\"span\",{style:metaStyle,children:value})]});};const hasDescription=typeof evt.description===\"string\"&&evt.description.trim()!==\"\";const portal=/*#__PURE__*/_jsxs(\"div\",{ref:ref,style:{position:\"fixed\",top:pos.top,left:pos.left,width:overlayWidth,background:color,borderRadius:overlayBorderRadius,padding:overlayPadding,boxSizing:\"border-box\",boxShadow:overlayShadow,border:overlayBorderWidth>0?`${overlayBorderWidth}px solid ${overlayBorderColor}`:\"none\",zIndex:99999,fontFamily:baseFont,animation:\"ymca-overlay-in 0.15s ease forwards\",pointerEvents:\"auto\"},children:[/*#__PURE__*/_jsx(\"style\",{children:`@keyframes ymca-overlay-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } }`}),showCloseButton&&/*#__PURE__*/_jsx(\"button\",{onClick:onClose,style:{position:\"absolute\",top:overlayPadding*.6,right:overlayPadding*.6,background:\"none\",border:\"none\",cursor:\"pointer\",padding:2,lineHeight:1,color:closeColor,fontSize:overlayCloseButtonSize,fontWeight:\"700\",opacity:.8,fontFamily:baseFont},\"aria-label\":\"Close\",children:\"\\xd7\"}),/*#__PURE__*/_jsx(\"div\",{style:{fontFamily:baseFont,fontSize:overlayTitleSize,fontWeight:overlayTitleWeight,color:textColor,lineHeight:1.25,marginBottom:overlayPadding*.5,paddingRight:showCloseButton?overlayCloseButtonSize+8:0},children:evt.title}),/*#__PURE__*/_jsx(\"div\",{style:{height:1,background:textColor,opacity:.2,marginBottom:overlayPadding*.5}}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:7,marginBottom:overlayPadding*.3},children:[IconClock,/*#__PURE__*/_jsx(\"span\",{style:{...metaStyle,opacity:1,fontWeight:overlayTitleWeight},children:timeStr})]}),/*#__PURE__*/_jsx(MetaRow,{icon:IconCalendar,value:dateStr,mb:overlayPadding*.5}),/*#__PURE__*/_jsx(MetaRow,{icon:IconPin,value:evt.location}),/*#__PURE__*/_jsx(MetaRow,{icon:IconPerson,value:evt.instructor}),/*#__PURE__*/_jsx(MetaRow,{icon:IconGroup,value:evt.ageGroup}),/*#__PURE__*/_jsx(MetaRow,{icon:IconBuilding,value:evt.branchLocation,mb:hasDescription?overlayPadding*.5:0}),hasDescription&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"div\",{style:{height:1,background:textColor,opacity:.15,marginBottom:overlayPadding*.4}}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",gap:7,alignItems:\"flex-start\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{paddingTop:1,flexShrink:0},children:IconDescription}),/*#__PURE__*/_jsx(\"div\",{style:{maxHeight:overlayDescMaxHeight,overflowY:\"auto\",scrollbarWidth:\"thin\",scrollbarColor:\"rgba(0,0,0,0.2) transparent\"},children:/*#__PURE__*/_jsx(\"p\",{style:{fontFamily:baseFont,fontSize:descriptionFontSize,fontWeight:overlayMetaWeight,color:textColor,opacity:overlayTextOpacityMeta,lineHeight:descriptionLineHeight,margin:0,whiteSpace:\"pre-wrap\"},children:evt.description})})]})]})]});if(typeof document===\"undefined\")return null;return /*#__PURE__*/ReactDOM.createPortal(portal,document.body);}// ─── MAIN COMPONENT ──────────────────────────────────────────────────────────\nexport default function YMCASchedule({language=\"en\",activeTab=\"gym\",filterActivityType=\"\",filterInstructor=\"\",filterAgeGroup=\"\",filterLocation=\"\",filterBranch=\"\",threeDayViewRules=\"\",timeColumnWidth=56,dataSource=\"placeholder\",apiEndpoint=\"\",useApiColors=true,startHour=5,endHour=21,gridBackground=\"#f0f0f0\",hourBlockColor=\"#e8e8e8\",hourBlockBorderRadius=8,hourBlockGap=3,todayHeaderBg=\"#1a1a1a\",todayHeaderText=\"#ffffff\",otherDayHeaderBg=\"#555555\",otherDayHeaderText=\"#ffffff\",defaultHeaderBg=\"#d0d0d0\",defaultHeaderText=\"#555555\",timeColumnText=\"#888888\",playheadColor=\"#ed1c24\",colorOpenGym=\"#c8c8c8\",colorPickleball=\"#20bdbe\",colorBasketball=\"#0060af\",colorVolleyball=\"#fcaf17\",colorTeenNight=\"#c6168d\",colorTeenSwim=\"#0089d0\",colorTeenFitness=\"#a92b31\",colorTeenDance=\"#f47920\",colorYoga=\"#5c2e91\",colorZumba=\"#f15922\",colorSpin=\"#0089d0\",colorPilates=\"#92278f\",colorStrength=\"#a92b31\",colorHIIT=\"#f47920\",colorLapSwim=\"#00aeef\",colorSwimLessons=\"#0060af\",colorWaterAerobics=\"#20bdbe\",colorOpenSwim=\"#00aeef\",colorSilverSneakers=\"#01a490\",colorChairFitness=\"#006b6b\",colorTaiChi=\"#5c2e91\",colorFamilySwim=\"#20bdbe\",colorFamilyGym=\"#0060af\",colorParentTot=\"#fcaf17\",colorKidsActivity=\"#f15922\",colorDefault=\"#00aeef\",eventTextColor=\"#ffffff\",darkEventTextColor=\"#1a1a1a\",lightTextBias=1,eventFontSize=13,eventFontWeight=\"700\",eventFontFamily=\"Cachet Pro\",eventTimeSize=11,eventLocationSize=11,cardBorderRadius=10,cardPadding=6,containerBorderRadius=16,columnGap=3,rowHeightPerHour=80,todayBannerBorderRadius=0,todayIndicatorColor=\"#1a1a1a\",todayIndicatorBorderRadius=20,todayNavArrowSize=18,todayNavArrowGap=8,overlayWidth=220,overlayPadding=14,overlayBorderRadius=12,overlayBorderWidth=0,overlayBorderColor=\"rgba(255,255,255,0.4)\",overlayShadow=\"0 8px 32px rgba(0,0,0,0.28), 0 2px 8px rgba(0,0,0,0.16)\",overlayOffset=10,overlayFontFamily=\"Cachet Pro\",overlayTitleSize=16,overlayTitleWeight=\"700\",overlayMetaSize=13,overlayMetaWeight=\"400\",overlayTextColor=\"#ffffff\",overlayTextOpacityMeta=.85,overlayCloseButtonSize=20,overlayCloseButtonColor=\"#ffffff\",overlayDescMaxHeight=100,descriptionFontSize=13,descriptionLineHeight=1.5,enableLargeText=false,largeTextIncrease=4,viewToggleButtonSize=32,viewToggleButtonPadding=6,viewToggleButtonRadius=8,viewToggleIconColor=\"#ffffff\",viewToggleIconColorInactive=\"#888888\",viewToggleHoverBg=\"#e5e5e5\"}){const fontsReady=useFontReady(\"Cachet Pro\");const t=UI_STRINGS[language]??UI_STRINGS.en;const baseFont=eventFontFamily&&eventFontFamily!==\"inherit\"?`\"${eventFontFamily}\", sans-serif`:'\"Cachet Pro\", sans-serif';const overlayFont=overlayFontFamily&&overlayFontFamily!==\"inherit\"?`\"${overlayFontFamily}\", sans-serif`:'\"Cachet Pro\", sans-serif';// ── Large Text: uniform font-size bump applied to event cards + overlay ──\nconst fontBump=enableLargeText?largeTextIncrease:0;const effEventFontSize=eventFontSize+fontBump;const effEventTimeSize=eventTimeSize+fontBump;const effEventLocationSize=eventLocationSize+fontBump;const effOverlayTitleSize=overlayTitleSize+fontBump;const effOverlayMetaSize=overlayMetaSize+fontBump;const effDescriptionFontSize=descriptionFontSize+fontBump;const[weekOffset,setWeekOffset]=useState(typeof window!==\"undefined\"?window.__ymcaWeekOffset??0:0);useEffect(()=>{const handler=e=>setWeekOffset(e.detail??0);window.addEventListener(\"ymca-week-offset\",handler);return()=>window.removeEventListener(\"ymca-week-offset\",handler);},[]);// Broadcasts the current branch so WeekNavigator (read-only on this\n// channel) can decide whether to switch into its own 3-day mode. Mirrors\n// the weekOffset wiring above, but one-way: WeekNavigator has no branch\n// selector UI of its own.\nuseEffect(()=>{if(typeof window!==\"undefined\"){window.__ymcaBranch=filterBranch;window.dispatchEvent(new CustomEvent(\"ymca-branch\",{detail:filterBranch}));}},[filterBranch]);// Broadcasts the current active schedule tab the same way, for setups\n// where branch is fixed per instance and the tab is what varies (e.g.\n// branch-first pages with a gym/pool/family tab switcher on top).\n// WeekNavigator uses this as a third condition alongside its branch match.\nuseEffect(()=>{if(typeof window!==\"undefined\"){window.__ymcaActiveTab=activeTab;window.dispatchEvent(new CustomEvent(\"ymca-active-tab\",{detail:activeTab}));}},[activeTab]);const[todayDayOffset,setTodayDayOffset]=useState(0);useEffect(()=>{if(activeTab!==\"today\")setTodayDayOffset(0);},[activeTab]);// ── Day View (week/3-day instances only, never the Today tab) ──────────\n// viewMode toggles between the full multi-day grid and a single-day view\n// for the active tab. selectedDay tracks which calendar day is shown in\n// Day view; it resets to the first day of the current range whenever the\n// WeekNavigator range (weekOffset) changes.\nconst[viewMode,setViewMode]=useState(\"week\");const[selectedDay,setSelectedDay]=useState(()=>{const d=new Date;d.setHours(0,0,0,0);return d;});// ── Data fetching (v7: per-week vs full-feed) ──────────────────────────\n// \"Full\" mode: placeholder data, or an API endpoint whose kind=EVENT —\n// fetched once, exactly as before. `fullEvents`/`loadingState` back this.\nconst[fullEvents,setFullEvents]=useState([]);const[loadingState,setLoadingState]=useState(false);// \"Per-week\" mode: any other API endpoint (kind=SCHEDULE, or no kind\n// param at all). Each week's response is cached by its Monday date so\n// revisiting a week already on screen is instant, and only the week(s)\n// actually needed for the current view are ever requested.\nconst[weekCache,setWeekCache]=useState(new Map);const weekCacheRef=useRef(weekCache);useEffect(()=>{weekCacheRef.current=weekCache;},[weekCache]);const fetchingWeeksRef=useRef(new Set);const[currentTime,setCurrentTime]=useState(new Date);const scrollRef=useRef(null);// Two independent overlay slots:\n//  • pinnedOverlay — opened by clicking a block. Stays open (with a\n//    close button) until explicitly dismissed via the x button or a\n//    click outside it, and tracks its anchor block on scroll/resize.\n//  • hoverOverlay — a transient desktop-only preview shown on\n//    mouseenter/mouseleave. Independent of pinnedOverlay, so hovering a\n//    different block while one is pinned still shows its own preview.\nconst[pinnedOverlay,setPinnedOverlay]=useState(null);const[hoverOverlay,setHoverOverlay]=useState(null);const hideTimerRef=useRef(null);const mobile=isMobilePointer();// Whether this instance's current branch+tab combination should render\n// the compact 3-day view instead of the full 7-day week view. Never\n// applies to the Today view, which already has its own layout.\nconst threeDayRules=parseThreeDayRules(threeDayViewRules);const isThreeDayView=activeTab!==\"today\"&&matchesThreeDayView(filterBranch,activeTab,threeDayRules);const prevRangeRef=useRef(null);// Transient hover preview (desktop only). Never overrides the pinned\n// overlay's own state — they're rendered as two independent portals.\nconst showHoverOverlay=useCallback((evt,color,useDarkText,el)=>{if(hideTimerRef.current)clearTimeout(hideTimerRef.current);setHoverOverlay({evt,color,anchorEl:el,anchorRect:el.getBoundingClientRect(),useDarkText});},[]);const hideHoverOverlay=useCallback(()=>{hideTimerRef.current=setTimeout(()=>setHoverOverlay(null),80);},[]);// Click/tap handler: pins a block's overlay open. Clicking the block\n// that's already pinned toggles it closed; clicking any other block\n// replaces the pinned overlay with that block's instead.\nconst togglePinnedOverlay=useCallback((evt,color,useDarkText,el)=>{setPinnedOverlay(prev=>{if(prev&&prev.evt.id===evt.id)return null;return{evt,color,anchorEl:el,anchorRect:el.getBoundingClientRect(),useDarkText};});},[]);const activityColors={\"Open Gym\":colorOpenGym,Pickleball:colorPickleball,Basketball:colorBasketball,Volleyball:colorVolleyball,\"Teen Night\":colorTeenNight,\"Teen Swim\":colorTeenSwim,\"Teen Fitness\":colorTeenFitness,\"Teen Dance\":colorTeenDance,Yoga:colorYoga,Zumba:colorZumba,Spin:colorSpin,Pilates:colorPilates,Strength:colorStrength,HIIT:colorHIIT,\"Lap Swim\":colorLapSwim,\"Swim Lessons\":colorSwimLessons,\"Water Aerobics\":colorWaterAerobics,\"Open Swim\":colorOpenSwim,\"Silver Sneakers\":colorSilverSneakers,\"Chair Fitness\":colorChairFitness,\"Tai Chi\":colorTaiChi,\"Family Swim\":colorFamilySwim,\"Family Gym\":colorFamilyGym,\"Parent & Tot\":colorParentTot,\"Kids Activity\":colorKidsActivity};const getEventColor=evt=>{if(useApiColors&&evt.color&&evt.color.trim()!==\"\")return evt.color;return activityColors[evt.activityType]??colorDefault;};// Whether this instance is on the per-week feed (kind=SCHEDULE / no kind\n// param) or the full three-month feed (kind=EVENT) — or placeholder data,\n// which is always \"full\" (single generated batch, no fetching at all).\nconst dataMode=useMemo(()=>{if(dataSource!==\"api\"||!apiEndpoint)return\"full\";return isEventKindEndpoint(apiEndpoint)?\"full\":\"perWeek\";},[dataSource,apiEndpoint]);// ── Full-feed fetch (placeholder data, or an EVENT-kind endpoint) ──────\n// Unchanged from before: fetch once on mount / whenever the endpoint\n// changes. Skipped entirely in per-week mode.\nuseEffect(()=>{if(dataMode===\"perWeek\")return;const load=async()=>{setLoadingState(true);try{if(dataSource===\"api\"&&apiEndpoint){const res=await fetch(apiEndpoint);const data=await res.json();const normalized=normalizeApiData(data);setFullEvents(normalized.length?normalized:generatePlaceholderData());}else{setFullEvents(generatePlaceholderData());}}catch{setFullEvents(generatePlaceholderData());}setLoadingState(false);};load();},[dataSource,apiEndpoint,dataMode]);// ── Per-week fetch + cache ──────────────────────────────────────────────\n// Fetches a single week (keyed by its Monday date) and stores it in\n// weekCache. No-ops if that week is already cached or already in flight,\n// so repeated calls for the same key (from the driving effect below,\n// or from prefetching) are cheap. On failure, caches an empty array for\n// that week so the UI doesn't spin forever retrying — the rest of the\n// schedule (other cached weeks) keeps working.\nconst fetchWeek=useCallback(key=>{if(weekCacheRef.current.has(key))return;if(fetchingWeeksRef.current.has(key))return;fetchingWeeksRef.current.add(key);(async()=>{try{const res=await fetch(buildWeekUrl(apiEndpoint,key));const data=await res.json();const normalized=normalizeApiData(data);setWeekCache(prev=>{const next=new Map(prev);next.set(key,normalized);return next;});}catch{setWeekCache(prev=>{const next=new Map(prev);next.set(key,[]);return next;});}finally{fetchingWeeksRef.current.delete(key);}})();},[apiEndpoint]);// Drives which week(s) get fetched: whatever the current view actually\n// needs, plus a forward-biased prefetch of the following week so paging\n// ahead via WeekNavigator feels instant. Re-runs whenever the view's\n// reference date(s) could have changed — deliberately does NOT depend on\n// weekCache itself (checked via weekCacheRef instead), so caching a week\n// doesn't re-trigger this effect.\nuseEffect(()=>{if(dataMode!==\"perWeek\")return;const neededDates=getNeededDates(activeTab,todayDayOffset,viewMode,selectedDay,weekOffset,isThreeDayView);const neededKeys=Array.from(new Set(neededDates.map(weekKeyFor)));neededKeys.forEach(fetchWeek);// Prefetch the week after the latest date currently in view.\nconst latest=neededDates.reduce((a,b)=>b>a?b:a);const prefetchDate=new Date(latest);prefetchDate.setDate(prefetchDate.getDate()+7);fetchWeek(weekKeyFor(prefetchDate));},[dataMode,activeTab,todayDayOffset,viewMode,selectedDay,weekOffset,isThreeDayView,fetchWeek]);// Merges every cached week into one flat list (deduped by id, though\n// weeks shouldn't overlap in practice). This is what the rest of the\n// component reads as `events` when in per-week mode.\nconst perWeekEvents=useMemo(()=>{const map=new Map;weekCache.forEach(weekEvents=>{weekEvents.forEach(e=>map.set(e.id,e));});return Array.from(map.values());},[weekCache]);// Loading is \"per-view\" in per-week mode: true only while a week the\n// current view actually needs (not a background prefetch) hasn't\n// resolved yet. Already-cached weeks — including ones fetched ahead of\n// time — show instantly.\nconst isPerWeekLoading=useMemo(()=>{if(dataMode!==\"perWeek\")return false;const neededDates=getNeededDates(activeTab,todayDayOffset,viewMode,selectedDay,weekOffset,isThreeDayView);const neededKeys=Array.from(new Set(neededDates.map(weekKeyFor)));return neededKeys.some(k=>!weekCache.has(k));},[dataMode,activeTab,todayDayOffset,viewMode,selectedDay,weekOffset,isThreeDayView,weekCache]);const events=dataMode===\"perWeek\"?perWeekEvents:fullEvents;const loading=dataMode===\"perWeek\"?isPerWeekLoading:loadingState;useEffect(()=>{const tick=setInterval(()=>setCurrentTime(new Date),6e4);return()=>clearInterval(tick);},[]);useEffect(()=>{if(scrollRef.current){const now=new Date;const offsetHours=now.getHours()+now.getMinutes()/60-startHour;scrollRef.current.scrollTop=Math.max(0,offsetHours*rowHeightPerHour-80);}},[events,rowHeightPerHour,startHour]);// Full 7-day week, Monday-anchored, shifted by whole weeks via weekOffset.\nconst weekDays=computeWeekDays(weekOffset);// Compact 3-day window, anchored on real \"today\" (not Monday) and shifted\n// 3 days at a time using the same weekOffset nav control as week view.\nconst threeDays=computeThreeDays(weekOffset);const displayDays=isThreeDayView?threeDays:weekDays;// When the WeekNavigator's range changes (weekOffset), snap Day view back\n// to the first day of the newly selected range, per spec.\nuseEffect(()=>{const previous=prevRangeRef.current;const rangeChanged=previous!==null&&(previous.weekOffset!==weekOffset||previous.isThreeDayView!==isThreeDayView);if(rangeChanged||previous===null&&weekOffset!==0){setSelectedDay(displayDays[0]);}prevRangeRef.current={weekOffset,isThreeDayView};// eslint-disable-next-line react-hooks/exhaustive-deps\n},[weekOffset,isThreeDayView]);const hours=Array.from({length:endHour-startHour},(_,i)=>startHour+i);const parseFilter=f=>f?f.split(\",\").map(s=>s.trim().toLowerCase()).filter(Boolean):[];const filterEvents=useCallback(evts=>{const af=parseFilter(filterActivityType);const inf=parseFilter(filterInstructor);const agf=parseFilter(filterAgeGroup);const lf=parseFilter(filterLocation);const bf=parseFilter(filterBranch);return evts.filter(e=>{if(af.length&&!af.includes(e.activityType.toLowerCase()))return false;if(inf.length&&!inf.includes(e.instructor.toLowerCase()))return false;if(agf.length&&!agf.includes(e.ageGroup.toLowerCase()))return false;if(lf.length&&!lf.includes(e.location.toLowerCase()))return false;if(bf.length&&!bf.includes(e.branchLocation.toLowerCase()))return false;return true;});},[filterActivityType,filterInstructor,filterAgeGroup,filterLocation,filterBranch]);const getEventsForDay=(day,tab)=>{const tabEvents=tab===\"today\"?events:events.filter(e=>eventMatchesTab(e,tab));return filterEvents(tabEvents).filter(e=>isSameDay(new Date(e.startTime),day));};const timeToY=timeStr=>{const d=new Date(timeStr);const hourIndex=d.getHours()+d.getMinutes()/60-startHour;return hourIndex*rowHeightPerHour;};const eventHeight=(start,end)=>{const dh=(new Date(end).getTime()-new Date(start).getTime())/36e5;return Math.max(dh*rowHeightPerHour-columnGap*2,20);};// ── Layout: proper cluster-based column assignment ────────────────────────\n// Previous approach assigned totalCols per-event by checking only DIRECT\n// overlaps, which breaks down in chains (A overlaps B, B overlaps C, but\n// A and C don't overlap each other) — A and C would get different\n// totalCols even though they're visually sharing the same column space,\n// producing inconsistent widths and visual overlap.\n// Fix: group all transitively-overlapping events into one cluster first,\n// then give every event in that cluster the SAME totalCols (the number of\n// columns the cluster actually needed). This is the standard approach\n// used by calendar apps (Google Calendar, etc).\nconst layoutEvents=dayEvents=>{if(!dayEvents.length)return[];const sorted=[...dayEvents].sort((a,b)=>new Date(a.startTime).getTime()-new Date(b.startTime).getTime());// Step 1: group into clusters of transitively-overlapping events\nconst clusters=[];let currentCluster=[];let clusterEnd=-Infinity;for(const evt of sorted){const start=new Date(evt.startTime).getTime();const end=new Date(evt.endTime).getTime();if(currentCluster.length===0||start<clusterEnd){currentCluster.push(evt);clusterEnd=Math.max(clusterEnd,end);}else{clusters.push(currentCluster);currentCluster=[evt];clusterEnd=end;}}if(currentCluster.length)clusters.push(currentCluster);// Step 2: within each cluster, greedily assign columns, then apply\n// one shared totalCols (the cluster's column count) to every event in it.\nconst result=[];for(const cluster of clusters){const columns=[];const clusterResult=[];for(const evt of cluster){const start=new Date(evt.startTime).getTime();const end=new Date(evt.endTime).getTime();let placed=false;for(let c=0;c<columns.length;c++){const lastEnd=columns[c][columns[c].length-1].end;if(lastEnd<=start){columns[c].push({end});clusterResult.push({...evt,col:c});placed=true;break;}}if(!placed){columns.push([{end}]);clusterResult.push({...evt,col:columns.length-1});}}const totalCols=columns.length;for(const item of clusterResult){result.push({...item,totalCols});}}return result;};const playheadY=timeToY(new Date(currentTime.getFullYear(),currentTime.getMonth(),currentTime.getDate(),currentTime.getHours(),currentTime.getMinutes()).toISOString());const isToday=day=>isSameDay(day,new Date);const totalGridHeight=(endHour-startHour)*rowHeightPerHour;// Controls the full width of the time-label column. Since the labels are\n// right-aligned within it (anchored 8px from its right edge, against the\n// grid), shrinking this value pulls the times closer to the left edge of\n// the component; growing it pushes them further away.\nconst TIME_COL_WIDTH=timeColumnWidth;const INLINE_TIME_THRESHOLD=38;const overlayProps={baseFont:overlayFont,overlayWidth,overlayPadding,overlayBorderRadius,overlayBorderWidth,overlayBorderColor,overlayShadow,overlayOffset,overlayTitleSize:effOverlayTitleSize,overlayTitleWeight,overlayMetaSize:effOverlayMetaSize,overlayMetaWeight,overlayTextColor,overlayTextOpacityMeta,overlayCloseButtonSize,overlayCloseButtonColor,overlayDescMaxHeight,descriptionFontSize:effDescriptionFontSize,descriptionLineHeight,darkEventTextColor};// Renders both overlay slots for the current view. The hover preview is\n// suppressed when it refers to the same event as the pinned overlay, so\n// the two portals never stack on top of one another for one block.\nconst renderOverlays=()=>/*#__PURE__*/_jsxs(_Fragment,{children:[pinnedOverlay&&/*#__PURE__*/_jsx(OverlayPortal,{state:pinnedOverlay,onClose:()=>setPinnedOverlay(null),isMobile:mobile,pinned:true,...overlayProps}),hoverOverlay&&hoverOverlay.evt.id!==pinnedOverlay?.evt.id&&/*#__PURE__*/_jsx(OverlayPortal,{state:hoverOverlay,onClose:()=>setHoverOverlay(null),isMobile:mobile,pinned:false,...overlayProps})]});const renderEventCard=(evt,_context)=>{const y=timeToY(evt.startTime);const h=eventHeight(evt.startTime,evt.endTime);const color=getEventColor(evt);const{color:cardTextColor,isDark:dark}=pickReadableTextColor(color,eventTextColor,darkEventTextColor,lightTextBias);const start=new Date(evt.startTime),end=new Date(evt.endTime);const timeStr=`${fmtTime(start)}–${fmtTime(end)}`;const showInlineTime=h<=INLINE_TIME_THRESHOLD;const showBelowTime=!showInlineTime&&h>45;const showLocation=!showInlineTime&&h>60;const showInstructor=!showInlineTime&&h>80;const widthPct=100/evt.totalCols;const leftPct=evt.col/evt.totalCols*100;const pv=showInlineTime?0:cardPadding;const ph=showInlineTime?cardPadding*.6:cardPadding;return /*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",top:y+columnGap,// Percentage left + gap offset within the bounded column container\nleft:`calc(${leftPct}% + ${columnGap}px)`,width:`calc(${widthPct}% - ${columnGap*2}px)`,height:h,background:color,borderRadius:cardBorderRadius,padding:`${pv}px ${ph}px`,boxSizing:\"border-box\",overflow:\"hidden\",zIndex:2,cursor:\"pointer\",transition:\"filter 0.15s ease\",display:\"flex\",flexDirection:\"column\",justifyContent:showInlineTime?\"center\":\"flex-start\"},onMouseEnter:e=>{e.currentTarget.style.filter=\"brightness(1.1)\";if(!mobile)showHoverOverlay(evt,color,dark,e.currentTarget);},onMouseLeave:e=>{e.currentTarget.style.filter=\"brightness(1)\";if(!mobile)hideHoverOverlay();},onClick:e=>{e.stopPropagation();togglePinnedOverlay(evt,color,dark,e.currentTarget);},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:4,overflow:\"hidden\",flexShrink:0},children:[/*#__PURE__*/_jsx(\"span\",{style:{color:cardTextColor,fontFamily:baseFont,fontWeight:eventFontWeight,fontSize:effEventFontSize,lineHeight:1.2,wordBreak:showInlineTime?\"normal\":\"break-word\",whiteSpace:showInlineTime?\"nowrap\":\"normal\",flexShrink:0},children:evt.title}),showInlineTime&&/*#__PURE__*/_jsx(\"span\",{style:{color:cardTextColor,fontFamily:baseFont,fontSize:effEventTimeSize,opacity:.85,whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\",flexShrink:1,minWidth:0},children:timeStr})]}),showBelowTime&&/*#__PURE__*/_jsx(\"div\",{style:{color:cardTextColor,fontFamily:baseFont,fontSize:effEventTimeSize,opacity:.85,marginTop:2},children:timeStr}),showLocation&&/*#__PURE__*/_jsx(\"div\",{style:{color:cardTextColor,fontFamily:baseFont,fontSize:effEventLocationSize,opacity:.75,marginTop:1},children:evt.location}),showInstructor&&/*#__PURE__*/_jsx(\"div\",{style:{color:cardTextColor,fontFamily:baseFont,fontSize:effEventLocationSize,opacity:.75},children:evt.instructor})]},evt.id);};const renderHourBlocks=isCurrentDay=>/*#__PURE__*/_jsx(_Fragment,{children:hours.map(h=>/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:(h-startHour)*rowHeightPerHour,left:0,right:0,height:rowHeightPerHour-hourBlockGap,background:isCurrentDay?\"rgba(255,255,255,0.55)\":hourBlockColor,borderRadius:hourBlockBorderRadius,zIndex:0}},h))});const renderTimeColumn=()=>/*#__PURE__*/_jsx(\"div\",{style:{width:TIME_COL_WIDTH,flexShrink:0,position:\"relative\",height:totalGridHeight},children:hours.map(h=>/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:(h-startHour)*rowHeightPerHour+4,right:8,left:0,textAlign:\"right\",color:timeColumnText,fontFamily:baseFont,fontSize:11,fontWeight:\"500\"},children:h===12?t.noon:h>12?t.pm(h):t.am(h)},h))});// ── Week/Day toggle, rendered above the time column in week/3-day views ──\nconst viewToggleIconSize=Math.max(4,viewToggleButtonSize-viewToggleButtonPadding*2);const renderViewModeToggle=()=>/*#__PURE__*/_jsx(\"div\",{style:{width:TIME_COL_WIDTH,flexShrink:0,display:\"flex\",flexDirection:\"column\",alignItems:\"center\",justifyContent:\"center\",gap:4,padding:\"4px 4px\",boxSizing:\"border-box\"},children:[\"week\",\"day\"].map(mode=>{const isActive=viewMode===mode;const restingBg=isActive?todayIndicatorColor:defaultHeaderBg;const iconColor=isActive?viewToggleIconColor:viewToggleIconColorInactive;return /*#__PURE__*/_jsx(\"button\",{onClick:()=>setViewMode(mode),\"aria-label\":mode===\"week\"?t.week:t.day,style:{width:viewToggleButtonSize,height:viewToggleButtonSize,background:restingBg,border:\"none\",borderRadius:viewToggleButtonRadius,padding:viewToggleButtonPadding,boxSizing:\"border-box\",cursor:\"pointer\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",transition:\"background 0.15s\"},onMouseEnter:e=>e.currentTarget.style.background=viewToggleHoverBg,onMouseLeave:e=>e.currentTarget.style.background=restingBg,children:mode===\"week\"?/*#__PURE__*/_jsx(IconWeekView,{size:viewToggleIconSize,color:iconColor}):/*#__PURE__*/_jsx(IconDayView,{size:viewToggleIconSize,color:iconColor})},mode);})});if(!fontsReady){return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",background:gridBackground,borderRadius:containerBorderRadius,opacity:0}});}if(loading){return /*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",height:\"100%\",background:gridBackground,borderRadius:containerBorderRadius,color:timeColumnText,fontFamily:baseFont,fontSize:14},children:t.loading});}// ─── TODAY VIEW ───────────────────────────────────────────────────────────\nif(activeTab===\"today\"){const viewDay=computeViewDay(todayDayOffset);const isViewingToday=isSameDay(viewDay,new Date);const todayEvents=filterEvents(events.filter(e=>isSameDay(new Date(e.startTime),viewDay)));const laid=layoutEvents(todayEvents);const dateStr=viewDay.toLocaleDateString(\"en-US\",{weekday:\"long\",month:\"long\",day:\"numeric\",...isViewingToday?{}:{year:\"numeric\"}});const headerLabel=isViewingToday?t.todayLabel(dateStr):dateStr;// When viewing a day other than actual today (via the chevrons),\n// the banner swaps to the \"other day\" bg/text colors instead of the\n// Today colors, so it's visually obvious you've navigated away.\nconst headerBg=isViewingToday?todayHeaderBg:otherDayHeaderBg;const headerTextColor=isViewingToday?todayHeaderText:otherDayHeaderText;return /*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\",height:\"100%\",background:gridBackground,borderRadius:containerBorderRadius,overflow:\"hidden\",fontFamily:baseFont,display:\"flex\",flexDirection:\"column\"},children:[renderOverlays(),/*#__PURE__*/_jsxs(\"div\",{style:{background:headerBg,color:headerTextColor,padding:\"0 16px\",height:48,display:\"flex\",alignItems:\"center\",justifyContent:\"space-between\",flexShrink:0,borderRadius:todayBannerBorderRadius},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:baseFont,fontWeight:\"700\",fontSize:15,letterSpacing:\"0.05em\",color:headerTextColor},children:headerLabel}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:todayNavArrowGap},children:[/*#__PURE__*/_jsx(\"button\",{onClick:()=>setTodayDayOffset(o=>o-1),style:{background:\"none\",border:\"none\",padding:0,cursor:\"pointer\",display:\"flex\",alignItems:\"center\",opacity:.85,transition:\"opacity 0.15s\"},onMouseEnter:e=>e.currentTarget.style.opacity=\"1\",onMouseLeave:e=>e.currentTarget.style.opacity=\"0.85\",\"aria-label\":\"Previous day\",children:/*#__PURE__*/_jsx(ChevronLeft,{size:todayNavArrowSize,color:headerTextColor})}),!isViewingToday&&/*#__PURE__*/_jsx(\"button\",{onClick:()=>setTodayDayOffset(0),style:{background:\"none\",border:\"none\",borderRadius:4,padding:\"2px 8px\",cursor:\"pointer\",color:headerTextColor,fontSize:11,fontWeight:\"600\",fontFamily:baseFont,opacity:.85,transition:\"opacity 0.15s\",letterSpacing:\"0.04em\"},onMouseEnter:e=>e.currentTarget.style.opacity=\"1\",onMouseLeave:e=>e.currentTarget.style.opacity=\"0.85\",children:t.today}),/*#__PURE__*/_jsx(\"button\",{onClick:()=>setTodayDayOffset(o=>o+1),style:{background:\"none\",border:\"none\",padding:0,cursor:\"pointer\",display:\"flex\",alignItems:\"center\",opacity:.85,transition:\"opacity 0.15s\"},onMouseEnter:e=>e.currentTarget.style.opacity=\"1\",onMouseLeave:e=>e.currentTarget.style.opacity=\"0.85\",\"aria-label\":\"Next day\",children:/*#__PURE__*/_jsx(ChevronRight,{size:todayNavArrowSize,color:headerTextColor})})]})]}),/*#__PURE__*/_jsx(\"div\",{ref:scrollRef,style:{overflowY:\"auto\",flex:1},children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\"},children:[renderTimeColumn(),/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0,position:\"relative\",height:totalGridHeight},children:[renderHourBlocks(true),isViewingToday&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:0,right:0,top:playheadY,height:2,background:playheadColor,zIndex:8},children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:-5,top:-4,width:10,height:10,borderRadius:\"50%\",background:playheadColor}})}),laid.map(evt=>renderEventCard(evt,\"today\"))]})]})})]});}// ─── DAY VIEW (non-Today tabs) ──────────────────────────────────────────\n// Mirrors the Today view's single-day layout, but scoped to the active\n// schedule tab and driven by selectedDay/viewMode instead of\n// todayDayOffset. The Week/Day toggle stays visible so the user can\n// switch back.\nif(viewMode===\"day\"){const isViewingToday=isSameDay(selectedDay,new Date);const dayEvents=layoutEvents(getEventsForDay(selectedDay,activeTab));const dateStr=selectedDay.toLocaleDateString(\"en-US\",{weekday:\"long\",month:\"long\",day:\"numeric\",...isViewingToday?{}:{year:\"numeric\"}});const headerLabel=isViewingToday?t.todayLabel(dateStr):dateStr;const headerBg=isViewingToday?todayHeaderBg:otherDayHeaderBg;const headerTextColor=isViewingToday?todayHeaderText:otherDayHeaderText;return /*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\",height:\"100%\",background:gridBackground,borderRadius:containerBorderRadius,overflow:\"hidden\",fontFamily:baseFont,display:\"flex\",flexDirection:\"column\"},children:[renderOverlays(),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexShrink:0},children:[renderViewModeToggle(),/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,background:headerBg,color:headerTextColor,padding:\"0 16px\",minHeight:48,display:\"flex\",alignItems:\"center\",justifyContent:\"space-between\",margin:\"4px 2px\",borderRadius:todayBannerBorderRadius},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:baseFont,fontWeight:\"700\",fontSize:15,letterSpacing:\"0.05em\",color:headerTextColor},children:headerLabel}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:todayNavArrowGap},children:[/*#__PURE__*/_jsx(\"button\",{onClick:()=>setSelectedDay(d=>{const nd=new Date(d);nd.setDate(d.getDate()-1);return nd;}),style:{background:\"none\",border:\"none\",padding:0,cursor:\"pointer\",display:\"flex\",alignItems:\"center\",opacity:.85,transition:\"opacity 0.15s\"},onMouseEnter:e=>e.currentTarget.style.opacity=\"1\",onMouseLeave:e=>e.currentTarget.style.opacity=\"0.85\",\"aria-label\":\"Previous day\",children:/*#__PURE__*/_jsx(ChevronLeft,{size:todayNavArrowSize,color:headerTextColor})}),!isViewingToday&&/*#__PURE__*/_jsx(\"button\",{onClick:()=>{const today=new Date;today.setHours(0,0,0,0);setSelectedDay(today);},style:{background:\"none\",border:\"none\",borderRadius:4,padding:\"2px 8px\",cursor:\"pointer\",color:headerTextColor,fontSize:11,fontWeight:\"600\",fontFamily:baseFont,opacity:.85,transition:\"opacity 0.15s\",letterSpacing:\"0.04em\"},onMouseEnter:e=>e.currentTarget.style.opacity=\"1\",onMouseLeave:e=>e.currentTarget.style.opacity=\"0.85\",children:t.today}),/*#__PURE__*/_jsx(\"button\",{onClick:()=>setSelectedDay(d=>{const nd=new Date(d);nd.setDate(d.getDate()+1);return nd;}),style:{background:\"none\",border:\"none\",padding:0,cursor:\"pointer\",display:\"flex\",alignItems:\"center\",opacity:.85,transition:\"opacity 0.15s\"},onMouseEnter:e=>e.currentTarget.style.opacity=\"1\",onMouseLeave:e=>e.currentTarget.style.opacity=\"0.85\",\"aria-label\":\"Next day\",children:/*#__PURE__*/_jsx(ChevronRight,{size:todayNavArrowSize,color:headerTextColor})})]})]})]}),/*#__PURE__*/_jsx(\"div\",{ref:scrollRef,style:{overflowY:\"auto\",flex:1},children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\"},children:[renderTimeColumn(),/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0,position:\"relative\",height:totalGridHeight},children:[renderHourBlocks(true),isViewingToday&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:0,right:0,top:playheadY,height:2,background:playheadColor,zIndex:8},children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:-5,top:-4,width:10,height:10,borderRadius:\"50%\",background:playheadColor}})}),dayEvents.map(evt=>renderEventCard(evt,\"today\"))]})]})})]});}// ─── WEEK VIEW / 3-DAY VIEW ────────────────────────────────────────────────\n// Both share identical rendering logic (headers, hour grid, cluster layout,\n// playhead, event cards) — only the day list differs: displayDays holds\n// 7 Monday-anchored days for week view, or 3 today-anchored days when\n// isThreeDayView matches this instance's branch+tab combo.\nreturn /*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\",height:\"100%\",background:gridBackground,borderRadius:containerBorderRadius,overflow:\"hidden\",fontFamily:baseFont,display:\"flex\",flexDirection:\"column\"},children:[renderOverlays(),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexShrink:0},children:[renderViewModeToggle(),displayDays.map((day,i)=>{const today=isToday(day);const dayName=day.toLocaleDateString(\"en-US\",{weekday:\"short\"});return /*#__PURE__*/_jsxs(\"div\",{style:{flex:1,textAlign:\"center\",padding:\"10px 4px\",background:today?todayIndicatorColor:defaultHeaderBg,color:today?todayHeaderText:defaultHeaderText,borderRadius:today?todayIndicatorBorderRadius:0,margin:\"4px 2px\",fontFamily:baseFont,fontWeight:\"700\",fontSize:13,letterSpacing:\"0.04em\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontSize:18,display:\"block\",lineHeight:1},children:day.getDate()}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:11},children:dayName})]},i);})]}),/*#__PURE__*/_jsx(\"div\",{ref:scrollRef,style:{flex:1,overflowY:\"auto\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",position:\"relative\",gap:hourBlockGap},children:[renderTimeColumn(),displayDays.map((day,di)=>{const dayEvents=getEventsForDay(day,activeTab);const laid=layoutEvents(dayEvents);const today=isToday(day);return /*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0,position:\"relative\",height:totalGridHeight},children:[renderHourBlocks(today),today&&playheadY>=0&&playheadY<=totalGridHeight&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:0,right:0,top:playheadY,height:2,background:playheadColor,zIndex:8,pointerEvents:\"none\"},children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:-4,top:-4,width:10,height:10,borderRadius:\"50%\",background:playheadColor}})}),laid.map(evt=>renderEventCard(evt,\"week\"))]},di);})]})})]});}// ─── FRAMER PROPERTY CONTROLS ────────────────────────────────────────────────\naddPropertyControls(YMCASchedule,{language:{type:ControlType.Enum,title:\"Language\",options:[\"en\",\"es\",\"ru\",\"uk\"],optionTitles:[\"English\",\"Spanish\",\"Russian\",\"Ukrainian\"],defaultValue:\"en\",description:\"Controls built-in UI text (loading message, time labels, Today button).\"},activeTab:{type:ControlType.Enum,title:\"Active Tab\",options:[\"today\",\"gym\",\"groupExercise\",\"pool\",\"senior\",\"family\",\"teen\"],optionTitles:[\"Today\",\"Gym Schedule\",\"Group Exercise\",\"Pool Schedule\",\"Senior Schedule\",\"Family Schedule\",\"Teen Schedule\"],defaultValue:\"gym\"},dataSource:{type:ControlType.Enum,title:\"Data Source\",options:[\"placeholder\",\"api\"],optionTitles:[\"Placeholder Data\",\"Live API\"],defaultValue:\"placeholder\"},apiEndpoint:{type:ControlType.String,title:\"API Endpoint\",defaultValue:\"\",placeholder:\"https://your-cms.com/api/events\",hidden:props=>props.dataSource!==\"api\"},useApiColors:{type:ControlType.Boolean,title:\"Use API Colors\",defaultValue:true,description:\"When on, the 'color' hex field on each API event drives the block and overlay background. Falls back to Activity Type color props when off or when no color field is present.\"},filterActivityType:{type:ControlType.String,title:\"Filter: Activity\",defaultValue:\"\",placeholder:\"Basketball,Pickleball (or blank)\"},filterInstructor:{type:ControlType.String,title:\"Filter: Instructor\",defaultValue:\"\",placeholder:\"Coach Sarah (or blank)\"},filterAgeGroup:{type:ControlType.String,title:\"Filter: Age Group\",defaultValue:\"\",placeholder:\"Youth,Seniors (or blank)\"},filterLocation:{type:ControlType.String,title:\"Filter: Location\",defaultValue:\"\",placeholder:\"Court 1 (or blank)\"},filterBranch:{type:ControlType.String,title:\"Filter: Branch\",defaultValue:\"\",placeholder:\"Downtown, Everett, Marysville, Mill Creek, Monroe, Mukilteo, Stanwood, Camp Casey (or blank)\",description:\"Branches: Downtown \\xb7 Everett \\xb7 Marysville \\xb7 Mill Creek \\xb7 Monroe \\xb7 Mukilteo \\xb7 Stanwood \\xb7 Camp Casey\"},threeDayViewRules:{type:ControlType.String,title:\"3-Day View Rules\",defaultValue:\"\",placeholder:\"Everett:gym, Marysville:pool\",description:\"Comma-separated Branch:Tab pairs. When this instance's Filter: Branch and Active Tab match a pair here, it renders a compact 3-day view (today + next 2 days) instead of the full week view. Doesn't apply to the Today tab.\"},timeColumnWidth:{type:ControlType.Number,title:\"Time Column Width\",defaultValue:56,min:24,max:120,step:1,description:\"Width of the hour-label column. Also houses the Week/Day toggle buttons above it, so very narrow values may crowd the buttons.\"},startHour:{type:ControlType.Number,title:\"Start Hour\",defaultValue:5,min:0,max:12,step:1},endHour:{type:ControlType.Number,title:\"End Hour\",defaultValue:21,min:13,max:24,step:1},rowHeightPerHour:{type:ControlType.Number,title:\"Row Height / Hour\",defaultValue:80,min:40,max:200,step:4},gridBackground:{type:ControlType.Color,title:\"Grid Background\",defaultValue:\"#f0f0f0\"},hourBlockColor:{type:ControlType.Color,title:\"Hour Block Color\",defaultValue:\"#e8e8e8\",description:\"Fill color of the 1-hour slot rectangles\"},hourBlockBorderRadius:{type:ControlType.Number,title:\"Hour Block Radius\",defaultValue:8,min:0,max:30,step:1},hourBlockGap:{type:ControlType.Number,title:\"Hour Block Gap\",defaultValue:3,min:0,max:20,step:1,description:\"Vertical gap between hour blocks and horizontal gap between day columns\"},todayHeaderBg:{type:ControlType.Color,title:\"Today Header BG\",defaultValue:\"#1a1a1a\"},todayHeaderText:{type:ControlType.Color,title:\"Today Header Text\",defaultValue:\"#ffffff\"},otherDayHeaderBg:{type:ControlType.Color,title:\"Other Day Header BG\",defaultValue:\"#555555\",description:\"Banner background for the Today tab / Day view when viewing a day other than the actual current date (i.e. after using the forward/back arrows).\"},otherDayHeaderText:{type:ControlType.Color,title:\"Other Day Header Text\",defaultValue:\"#ffffff\",description:\"Banner text/icon color for the Today tab / Day view when viewing a day other than the actual current date.\"},defaultHeaderBg:{type:ControlType.Color,title:\"Day Header BG\",defaultValue:\"#d0d0d0\"},defaultHeaderText:{type:ControlType.Color,title:\"Day Header Text\",defaultValue:\"#555555\"},timeColumnText:{type:ControlType.Color,title:\"Time Labels\",defaultValue:\"#888888\"},playheadColor:{type:ControlType.Color,title:\"Playhead Color\",defaultValue:\"#ed1c24\"},todayNavArrowSize:{type:ControlType.Number,title:\"Today Arrow Size\",defaultValue:18,min:10,max:40,step:1},todayNavArrowGap:{type:ControlType.Number,title:\"Today Arrow Gap\",defaultValue:8,min:0,max:40,step:1},todayBannerBorderRadius:{type:ControlType.Number,title:\"Today Banner Radius\",defaultValue:0,min:0,max:40,step:1,description:\"Corner radius of the Today view header bar\"},todayIndicatorColor:{type:ControlType.Color,title:\"Today Indicator Color\",defaultValue:\"#1a1a1a\",description:\"Background color of the current day pill in week view headers\"},todayIndicatorBorderRadius:{type:ControlType.Number,title:\"Today Indicator Radius\",defaultValue:20,min:0,max:40,step:1,description:\"Corner radius of the current day pill in week view headers\"},// ── Overlay ──\noverlayWidth:{type:ControlType.Number,title:\"Overlay: Width\",defaultValue:220,min:140,max:480,step:4},overlayPadding:{type:ControlType.Number,title:\"Overlay: Padding\",defaultValue:14,min:4,max:40,step:2},overlayBorderRadius:{type:ControlType.Number,title:\"Overlay: Corner Radius\",defaultValue:12,min:0,max:40,step:1},overlayBorderWidth:{type:ControlType.Number,title:\"Overlay: Border Width\",defaultValue:0,min:0,max:8,step:1},overlayBorderColor:{type:ControlType.Color,title:\"Overlay: Border Color\",defaultValue:\"rgba(255,255,255,0.4)\"},overlayShadow:{type:ControlType.String,title:\"Overlay: Box Shadow\",defaultValue:\"0 8px 32px rgba(0,0,0,0.28), 0 2px 8px rgba(0,0,0,0.16)\",description:\"Full CSS box-shadow value\"},overlayOffset:{type:ControlType.Number,title:\"Overlay: Offset Gap\",defaultValue:10,min:0,max:40,step:1,description:\"Gap in px between card edge and overlay\"},overlayFontFamily:{type:ControlType.String,title:\"Overlay: Font Family\",defaultValue:\"Cachet Pro\"},overlayTitleSize:{type:ControlType.Number,title:\"Overlay: Title Size\",defaultValue:16,min:10,max:32,step:1},overlayTitleWeight:{type:ControlType.Enum,title:\"Overlay: Title Weight\",options:[\"400\",\"500\",\"600\",\"700\",\"800\"],defaultValue:\"700\"},overlayMetaSize:{type:ControlType.Number,title:\"Overlay: Meta Size\",defaultValue:13,min:9,max:22,step:1},overlayMetaWeight:{type:ControlType.Enum,title:\"Overlay: Meta Weight\",options:[\"400\",\"500\",\"600\",\"700\",\"800\"],defaultValue:\"400\"},overlayTextColor:{type:ControlType.Color,title:\"Overlay: Text Color\",defaultValue:\"#ffffff\"},overlayTextOpacityMeta:{type:ControlType.Number,title:\"Overlay: Meta Opacity\",defaultValue:.85,min:.2,max:1,step:.05},overlayCloseButtonSize:{type:ControlType.Number,title:\"Overlay: Close Btn Size\",defaultValue:20,min:14,max:36,step:1},overlayCloseButtonColor:{type:ControlType.Color,title:\"Overlay: Close Btn Color\",defaultValue:\"#ffffff\"},overlayDescMaxHeight:{type:ControlType.Number,title:\"Overlay: Desc Max Height\",defaultValue:100,min:40,max:400,step:4},descriptionFontSize:{type:ControlType.Number,title:\"Description: Font Size\",defaultValue:13,min:8,max:24,step:1,description:\"Font size of the event description text in the overlay.\"},descriptionLineHeight:{type:ControlType.Number,title:\"Description: Line Height\",defaultValue:1.5,min:1,max:2.5,step:.05,description:\"Line height of the event description text in the overlay.\"},// ── Event Card ──\neventTextColor:{type:ControlType.Color,title:\"Event Text Color\",defaultValue:\"#ffffff\"},darkEventTextColor:{type:ControlType.Color,title:\"Event Dark Text Color\",defaultValue:\"#1a1a1a\",description:\"Used automatically on any block whose background has lower contrast with white than #00aeef does. Also applied to that block's overlay.\"},lightTextBias:{type:ControlType.Number,title:\"White Text Preference\",defaultValue:1,min:1,max:3,step:.1,description:\"1 = pick whichever text color has best contrast. Higher values favor white/light text, requiring dark text to win by a wider margin before it's used.\"},eventFontSize:{type:ControlType.Number,title:\"Event Title Size\",defaultValue:13,min:9,max:20,step:1},eventFontWeight:{type:ControlType.Enum,title:\"Event Font Weight\",options:[\"400\",\"500\",\"600\",\"700\",\"800\"],defaultValue:\"700\"},eventFontFamily:{type:ControlType.String,title:\"Font Family\",defaultValue:\"Cachet Pro\"},eventTimeSize:{type:ControlType.Number,title:\"Event Time Size\",defaultValue:11,min:8,max:16,step:1},eventLocationSize:{type:ControlType.Number,title:\"Event Location Size\",defaultValue:11,min:8,max:16,step:1},cardBorderRadius:{type:ControlType.Number,title:\"Card Corner Radius\",defaultValue:10,min:0,max:30,step:1},cardPadding:{type:ControlType.Number,title:\"Card Padding\",defaultValue:6,min:2,max:24,step:1,description:\"Interior padding of event cards (px)\"},containerBorderRadius:{type:ControlType.Number,title:\"Container Radius\",defaultValue:16,min:0,max:40,step:1},columnGap:{type:ControlType.Number,title:\"Card Gap\",defaultValue:3,min:0,max:12,step:1},// ── Large Text ──\nenableLargeText:{type:ControlType.Boolean,title:\"Large Text\",defaultValue:false,description:\"Bumps up event card and overlay font sizes for improved readability.\"},largeTextIncrease:{type:ControlType.Number,title:\"Large Text: Increase By\",defaultValue:4,min:0,max:20,step:1,description:\"Amount (px) added to event title, time, location, and overlay title/meta/description font sizes when Large Text is on.\"},// ── Week/Day View Toggle ──\nviewToggleButtonSize:{type:ControlType.Number,title:\"View Toggle: Button Size\",defaultValue:32,min:20,max:60,step:1,description:\"Width/height of the Week/Day toggle buttons (px).\"},viewToggleButtonPadding:{type:ControlType.Number,title:\"View Toggle: Padding\",defaultValue:6,min:0,max:20,step:1,description:\"Padding between the button edge and the icon (px).\"},viewToggleButtonRadius:{type:ControlType.Number,title:\"View Toggle: Radius\",defaultValue:8,min:0,max:30,step:1},viewToggleIconColor:{type:ControlType.Color,title:\"View Toggle: Selected Icon Color\",defaultValue:\"#ffffff\"},viewToggleIconColorInactive:{type:ControlType.Color,title:\"View Toggle: Unselected Icon Color\",defaultValue:\"#888888\"},viewToggleHoverBg:{type:ControlType.Color,title:\"View Toggle: Hover Background\",defaultValue:\"#e5e5e5\",description:\"Button background shown while hovering either the Week or Day toggle button.\"},// ── Event Card Colors ──\ncolorOpenGym:{type:ControlType.Color,title:\"Color: Open Gym\",defaultValue:\"#c8c8c8\"},colorPickleball:{type:ControlType.Color,title:\"Color: Pickleball\",defaultValue:\"#20bdbe\"},colorBasketball:{type:ControlType.Color,title:\"Color: Basketball\",defaultValue:\"#0060af\"},colorVolleyball:{type:ControlType.Color,title:\"Color: Volleyball\",defaultValue:\"#fcaf17\"},colorTeenNight:{type:ControlType.Color,title:\"Color: Teen Night\",defaultValue:\"#c6168d\"},colorTeenSwim:{type:ControlType.Color,title:\"Color: Teen Swim\",defaultValue:\"#0089d0\"},colorTeenFitness:{type:ControlType.Color,title:\"Color: Teen Fitness\",defaultValue:\"#a92b31\"},colorTeenDance:{type:ControlType.Color,title:\"Color: Teen Dance\",defaultValue:\"#f47920\"},colorYoga:{type:ControlType.Color,title:\"Color: Yoga\",defaultValue:\"#5c2e91\"},colorZumba:{type:ControlType.Color,title:\"Color: Zumba\",defaultValue:\"#f15922\"},colorSpin:{type:ControlType.Color,title:\"Color: Spin\",defaultValue:\"#0089d0\"},colorPilates:{type:ControlType.Color,title:\"Color: Pilates\",defaultValue:\"#92278f\"},colorStrength:{type:ControlType.Color,title:\"Color: Strength\",defaultValue:\"#a92b31\"},colorHIIT:{type:ControlType.Color,title:\"Color: HIIT\",defaultValue:\"#f47920\"},colorLapSwim:{type:ControlType.Color,title:\"Color: Lap Swim\",defaultValue:\"#00aeef\"},colorSwimLessons:{type:ControlType.Color,title:\"Color: Swim Lessons\",defaultValue:\"#0060af\"},colorWaterAerobics:{type:ControlType.Color,title:\"Color: Water Aerobics\",defaultValue:\"#20bdbe\"},colorOpenSwim:{type:ControlType.Color,title:\"Color: Open Swim\",defaultValue:\"#00aeef\"},colorSilverSneakers:{type:ControlType.Color,title:\"Color: Silver Sneakers\",defaultValue:\"#01a490\"},colorChairFitness:{type:ControlType.Color,title:\"Color: Chair Fitness\",defaultValue:\"#006b6b\"},colorTaiChi:{type:ControlType.Color,title:\"Color: Tai Chi\",defaultValue:\"#5c2e91\"},colorFamilySwim:{type:ControlType.Color,title:\"Color: Family Swim\",defaultValue:\"#20bdbe\"},colorFamilyGym:{type:ControlType.Color,title:\"Color: Family Gym\",defaultValue:\"#0060af\"},colorParentTot:{type:ControlType.Color,title:\"Color: Parent & Tot\",defaultValue:\"#fcaf17\"},colorKidsActivity:{type:ControlType.Color,title:\"Color: Kids Activity\",defaultValue:\"#f15922\"},colorDefault:{type:ControlType.Color,title:\"Color: Default\",defaultValue:\"#00aeef\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"YMCASchedule\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./YMCASchedule.map"],"mappings":"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"}