{"version":3,"file":"Program_Schedule.DeFill8V.mjs","names":["useId","useRef","useCallback","useState","__esmMin","init_npm_react_18_3_1","_e","de","init_jsx_runtime","ne","c","p","ie","ce","motion","init_framer_motion_DhsWWWsN","init_framer_DKWANagr","addPropertyControls","ControlType","parseTime","raw","t","_parseWarnedSet","parts","h","m","formatTime","clamped","totalMinutes","mm","use24h","period","formatRange","session","DayTabBar","instanceId","highlightId","tabRefs","handleKeyDown","count","days","next","i","e","onChange","makeLabel","labelFormat","day","tabStyle","tabAlign","trackColor","isActive","activeIndex","panelId","el","fontWeight","textActive","textInactive","prefersReduced","activeColor","SessionCards","sessions","props","ScheduleTable","headerStyle","rowBackground","index","EventSchedule","daysProp","flatOverrides","mergedDays","base","d","override","sum","SEED_DAY1","SEED_DAY2","initialIndex","defaultDay","activeDayIndex","setActiveDayIndex","safeIndex","activeDay","containerRef","containerWidth","setContainerWidth","element","updateWidth","observer","isMobile","backgroundColor","tabLabelFormat","tabTrackColor","tabActiveColor","tabInactiveColor","tabTextActive","tabTextInactive","primaryColor","SESSION_OBJECT_CONTROLS","init_Program_Schedule","s"],"sources":["https:/framerusercontent.com/modules/5pI6hpS4oC0QIp57SWZC/GgkxFMhhevduX3bZlTQr/Program_Schedule.js"],"sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// EventSchedule — Framer Code Component\n// 8th FITSPA Annual Fintech Conference 2026  |  Task 1.6: expand & detail\n// ─────────────────────────────────────────────────────────────────────────────\n//\n// PHASE PLAN\n//   1.1 — types, seed data, property controls, basic list render       ✓\n//   1.2 — time helpers, getDayRange, getSessionRect, assignLanes       ✓\n//   1.3 — pill / underline segmented tab control                       ✓\n//   1.4 — time ruler + grid, sticky label col, lane rows, placeholders ✓\n//   1.5 — real session cards with adaptive content tiers               ✓\n//   1.6 — expand / detail: panel, popover, inline                      ✓ (this)\n//\n// ─────────────────────────────────────────────────────────────────────────────\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import React,{useState,useId,useRef,useCallback,useEffect,useLayoutEffect}from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{motion,AnimatePresence}from\"framer-motion\";// ─── 2. Seed data ─────────────────────────────────────────────────────────────\nconst SEED_DAY1={label:\"Day 1\",dateLabel:\"6 Oct\",sessions:[{id:\"d1-00\",startTime:\"07:30\",endTime:\"08:30\",title:\"Arrival and Registration\",type:\"logistics\",sponsor:\"\",featured:false},{id:\"d1-01\",startTime:\"08:30\",endTime:\"09:00\",title:\"Welcome Remarks & Sponsor and Partner Acknowledgement\",type:\"remarks\",sponsor:\"Host\",featured:false},{id:\"d1-02\",startTime:\"09:00\",endTime:\"09:10\",title:\"Opening Remarks\",type:\"remarks\",sponsor:\"Vincent Tumwijukye, FITSPA Chairperson Co-Founder & CEO at Future Link Technologies\",featured:false},{id:\"d1-03\",startTime:\"09:10\",endTime:\"09:20\",title:\"Scaling What Matters: Trusted Infrastructure, Shared Innovation, and Inclusion for Every Ugandan\",type:\"remarks\",sponsor:\"Albert Gitta, Chief Technology & Innovation Officer, MTN MoMo\",featured:false},{id:\"d1-04\",startTime:\"09:20\",endTime:\"10:20\",title:\"Keynote Address and Q&A Session\",type:\"keynote\",sponsor:\"Ken Njoroge, Founder, Investor & Technology Entrepreneur; CEO, PANI Africa\",featured:true},{id:\"d1-05\",startTime:\"10:20\",endTime:\"10:30\",title:\"99.9% Uptime: A Financial Service Product\",type:\"remarks\",sponsor:\"Dennis Kahindi, General Manager, Raxio | The Data Centre Company\",featured:false},{id:\"d1-06\",startTime:\"10:30\",endTime:\"11:30\",title:\"Panel 1: Building the Rails for Uganda's Digital Economy: Enabling Uganda's 10X Growth Ambition\",type:\"panel\",sponsor:\"Bank of Uganda | Agent Banking Company | PSPA\",featured:false},{id:\"d1-07\",startTime:\"11:30\",endTime:\"11:40\",title:\"Business Showcase: ManageEngine\",type:\"showcase\",sponsor:\"Dennis Tela\",featured:false},{id:\"d1-08\",startTime:\"11:40\",endTime:\"11:50\",title:\"Building a Digital Financial Ecosystem that works for everyone\",type:\"remarks\",sponsor:\"Japhet Aritho, Managing Director, Airtel Mobile Commerce Uganda (AMCUL)\",featured:false},{id:\"d1-09\",startTime:\"11:50\",endTime:\"12:50\",title:\"Panel 2: Beyond Access: Building a Digital Financial Ecosystem That Works for Everyone\",type:\"panel\",sponsor:\"Airtel Money\",featured:false},{id:\"d1-10\",startTime:\"12:50\",endTime:\"14:00\",title:\"Lunch\",type:\"break\",sponsor:\"\",featured:false},{id:\"d1-11\",startTime:\"14:00\",endTime:\"14:10\",title:\"Business Showcase: MTN MoMo\",type:\"showcase\",sponsor:\"Nelson Bamwine, Senior Manager, Product Development & Innovation, MTN MoMo\",featured:false},{id:\"d1-12\",startTime:\"14:10\",endTime:\"14:20\",title:\"Business Showcase: aBi Finance\",type:\"showcase\",sponsor:\"aBi Finance\",featured:false},{id:\"d1-13\",startTime:\"14:20\",endTime:\"15:20\",title:\"Panel 3: FinTechs as an Enabler of Sustainable Agricultural Finance\",type:\"panel\",sponsor:\"aBi Finance\",featured:false},{id:\"d1-14\",startTime:\"15:20\",endTime:\"17:00\",title:\"Digital Agriculture Reference Bureau & AI Launch\",type:\"launch\",sponsor:\"Axiom Zorn | FSD Uganda\",featured:false},{id:\"d1-15\",startTime:\"17:00\",endTime:\"19:00\",title:\"Networking Cocktail\",type:\"break\",sponsor:\"\",featured:false}]};const SEED_DAY2={label:\"Day 2\",dateLabel:\"7 Oct\",sessions:[{id:\"d2-01\",startTime:\"07:30\",endTime:\"08:45\",title:\"Arrival & Registration\",type:\"logistics\",sponsor:\"\",featured:false},{id:\"d2-02\",startTime:\"08:45\",endTime:\"09:00\",title:\"Welcome & Day 2 Opening\",type:\"remarks\",sponsor:\"Doreen Lukandwa, Vice Chairperson FITSPA\",featured:false},{id:\"d2-03\",startTime:\"09:00\",endTime:\"09:15\",title:\"FITSPA FinTech Fund\",type:\"launch\",sponsor:\"Daniel Mutumba, Senior Manager, Access-to-Finance Programs | Asigma\",featured:false},{id:\"d2-04\",startTime:\"09:15\",endTime:\"10:15\",title:\"CEOs & Founders Fireside chat: The Next Leap: Why Collaboration, Interoperability, and AI Will Matter More in the Decade Ahead\",type:\"keynote\",sponsor:\"MTN MoMo\",featured:false},{id:\"d2-05\",startTime:\"10:15\",endTime:\"10:25\",title:\"Mobilising Capital for Sustainable Enterprise Growth\",type:\"remarks\",sponsor:\"Mona Muguma Ssebuliba, Executive Director aBI Finance\",featured:true},{id:\"d2-06\",startTime:\"10:25\",endTime:\"10:35\",title:\"Business Showcase\",type:\"showcase\",sponsor:\"Yellow Card\",featured:false},{id:\"d2-07\",startTime:\"10:35\",endTime:\"10:45\",title:\"Device Financing for MSMEs: A new partnership to unlock access to affordable devices\",type:\"launch\",sponsor:\"UNCDF & Richblack\",featured:false},{id:\"d2-08\",startTime:\"10:45\",endTime:\"10:55\",title:\"Business Showcase: From Access to Growth\",type:\"showcase\",sponsor:\"Mina Shahid, CEO, Numida\",featured:false},{id:\"d2-09\",startTime:\"10:55\",endTime:\"11:55\",title:\"Panel 1: From Access to Growth\",type:\"panel\",sponsor:\"Numida\",featured:false},{id:\"d2-10\",startTime:\"11:55\",endTime:\"12:05\",title:\"Business Showcase: PawaPay\",type:\"showcase\",sponsor:\"Jessica Tusiime, Country Director, PawaPay Uganda\",featured:false},{id:\"d2-11\",startTime:\"12:05\",endTime:\"13:05\",title:\"Panel 2: Built in Uganda, Ready for Africa: Making Fintech Growth Easier Across Markets\",type:\"panel\",sponsor:\"PawaPay\",featured:false},{id:\"d2-12\",startTime:\"13:05\",endTime:\"14:05\",title:\"Lunch\",type:\"break\",sponsor:\"\",featured:false},{id:\"d2-13\",startTime:\"14:05\",endTime:\"14:15\",title:\"Business Showcase\",type:\"showcase\",sponsor:\"Yo Uganda\",featured:false},{id:\"d2-14\",startTime:\"14:15\",endTime:\"15:15\",title:\"Panel 3: Safe and Reliable Payments as a Driver of Fintech Innovation, Financial Inclusion and a Thriving Digital Economy\",type:\"panel\",sponsor:\"Yo Uganda\",featured:false},{id:\"d2-15\",startTime:\"15:15\",endTime:\"15:25\",title:\"Furaha Interlude: Responsible purpose driven digital finance\",type:\"remarks\",sponsor:\"Furaha\",featured:false},{id:\"d2-16\",startTime:\"15:25\",endTime:\"16:25\",title:\"Panel 4: Advancing a More Responsible and Productive Digital Credit Market in Uganda\",type:\"panel\",sponsor:\"UNCDF | FITSPA\",featured:false},{id:\"d2-17\",startTime:\"16:25\",endTime:\"16:55\",title:\"Recognition Responsible Digital Lenders and Code of Conduct subscribers\",type:\"showcase\",sponsor:\"UNCDF | FITSPA\",featured:false},{id:\"d2-18\",startTime:\"16:55\",endTime:\"17:00\",title:\"Conference Closing Remarks & Appreciation\",type:\"remarks\",sponsor:\"FITSPA\",featured:false},{id:\"d2-19\",startTime:\"17:00\",endTime:\"19:00\",title:\"Networking Cocktail\",type:\"break\",sponsor:\"\",featured:false}]};// ─── 3. Pure time & layout helpers ────────────────────────────────────────────\n//\n// All functions are pure (no React, no side-effects beyond a one-time warn).\n// They are exported so they can be unit-tested independently.\n// ── 3a. parseTime ─────────────────────────────────────────────────────────────\n/** Set of already-warned bad values so we warn only once per value. */const _parseWarnedSet=new Set;/**\n * parseTime(\"HH:MM\") → minutes since midnight (integer ≥ 0).\n *\n * Edge cases handled:\n *   - null / undefined / \"\"   → 0  (warn once)\n *   - \"9:5\"                   → 545  (lenient, no zero-padding required)\n *   - \"25:00\" / \"12:99\"       → 0  (out-of-range, warn once)\n *   - \"not-a-time\"            → 0  (warn once)\n */export function parseTime(t){const raw=(t??\"\").trim();if(!raw){// Empty string is the most common case (missing endTime); warn once.\nif(!_parseWarnedSet.has(\"__empty__\")){console.warn(\"[EventSchedule] parseTime: received empty time string — defaulting to 0\");_parseWarnedSet.add(\"__empty__\");}return 0;}const parts=raw.split(\":\");const h=parseInt(parts[0]??\"\",10);const m=parseInt(parts[1]??\"\",10);if(isNaN(h)||isNaN(m)||h<0||h>23||m<0||m>59){if(!_parseWarnedSet.has(raw)){console.warn(`[EventSchedule] parseTime: unrecognised time \"${raw}\" — defaulting to 0`);_parseWarnedSet.add(raw);}return 0;}return h*60+m;}// ── 3b. formatTime ────────────────────────────────────────────────────────────\n/**\n * formatTime(minutes, use24h) → display string.\n *\n * use24h = true  → \"09:45\",  \"13:00\"\n * use24h = false → \"9:45 am\", \"1:00 pm\"  (space before am/pm, no leading zero)\n *\n * Clamps input to [0, 1439] so it is safe to call with any number.\n */export function formatTime(totalMinutes,use24h){// Clamp to a valid 24-h range\nconst clamped=Math.max(0,Math.min(1439,Math.round(totalMinutes)));const h=Math.floor(clamped/60);const m=clamped%60;const mm=m.toString().padStart(2,\"0\");if(use24h){return`${h.toString().padStart(2,\"0\")}:${mm}`;}const period=h>=12?\"pm\":\"am\";const h12=h%12===0?12:h%12;return`${h12}:${mm} ${period}`;}/** Convenience: format a session's start–end range as one display string. */export function formatRange(session,use24h){return`${formatTime(parseTime(session.startTime),use24h)} – ${formatTime(parseTime(session.endTime),use24h)}`;}/**\n * formatDuration(minutes) → human-friendly string.\n * e.g. 60 → \"1 h\", 90 → \"1 h 30 min\", 45 → \"45 min\", 5 → \"5 min\"\n */export function formatDuration(minutes){const m=Math.round(Math.max(0,minutes));const h=Math.floor(m/60);const rem=m%60;if(h>0&&rem>0)return`${h} h ${rem} min`;if(h>0)return`${h} h`;return`${m} min`;}/**\n * getDayRange(day, settings) → { startMin, endMin }\n *\n * If startHour === endHour (i.e. the user left both at the same value, or the\n * auto-fit mode is implied by a special sentinel), we auto-fit to the\n * sessions' earliest start / latest end, rounded OUT to the nearest\n * tickMinutes interval so ticks land on clean boundaries.\n *\n * Assumption: \"auto-fit\" is triggered when startHour >= endHour in props.\n * Otherwise the explicit startHour/endHour from props are used.\n */export function getDayRange(day,settings){const{startHour,endHour,tickMinutes}=settings;const tick=tickMinutes||30;// Auto-fit when the user hasn't set a meaningful range\nif(startHour>=endHour){if(!day.sessions.length){// Nothing to fit — fall back to a sensible default\nreturn{startMin:7*60,endMin:20*60};}const allStarts=day.sessions.map(s=>parseTime(s.startTime));const allEnds=day.sessions.map(s=>{const end=parseTime(s.endTime);// Zero end → treat as start + 30 min\nreturn end>0?end:parseTime(s.startTime)+30;});const earliest=Math.min(...allStarts);const latest=Math.max(...allEnds);// Round DOWN to tick for start, UP to tick for end\nconst startMin=Math.floor(earliest/tick)*tick;const endMin=Math.ceil(latest/tick)*tick;return{startMin,endMin};}return{startMin:startHour*60,endMin:endHour*60};}/**\n * getSessionRect(session, rangeStart, pixelsPerHour, minCardWidth)\n *\n * Edge cases:\n *   - Missing / unparseable endTime   → duration = 30 min\n *   - endTime === startTime (zero)    → duration = 30 min\n *   - endTime < startTime (reversed)  → duration = |end − start|  (swap)\n *   - Duration renders narrower than minCardWidth → width = minCardWidth\n */export function getSessionRect(session,rangeStart,pixelsPerHour,minCardWidth){const start=parseTime(session.startTime);let end=parseTime(session.endTime);// Handle zero / missing endTime\nif(end===0||end===start){end=start+30;}// Handle reversed times (end before start)\nconst[lo,hi]=end<start?[end,start]:[start,end];const durationMinutes=hi-lo;const left=(lo-rangeStart)*pixelsPerHour/60;const naturalWidth=durationMinutes*pixelsPerHour/60;const width=Math.max(naturalWidth,minCardWidth);return{left,width,naturalWidth,durationMinutes};}/**\n * assignLanes(sessions, pixelsPerHour, minCardWidth, rangeStart)\n *\n * Places each session into the lowest-numbered lane where it does not visually\n * overlap the last card already placed in that lane.  Overlap is determined by\n * rendered pixel position, not just time range — so a 5-minute card that has\n * been stretched to minCardWidth will block the next card correctly.\n *\n * Track grouping: sessions that share a non-empty `track` string are pre-sorted\n * together and will always attempt to land in the same lane group before\n * spilling to a new lane.\n *\n * Sessions with identical startTime are processed in source order; the first\n * takes lane 0, the next finds lane 0 blocked (same left) and goes to lane 1.\n */export function assignLanes(sessions,pixelsPerHour,minCardWidth,rangeStart){if(!sessions.length)return[];// Compute rects first\nconst withRects=sessions.map(s=>({session:s,rect:getSessionRect(s,rangeStart,pixelsPerHour,minCardWidth)}));// Sort by left position (= start time), then by session source order for ties\nconst sorted=[...withRects].sort((a,b)=>a.rect.left-b.rect.left);// laneRightEdge[laneIndex] = pixel position where the last card in that\n// lane ends (left + width).  A new card fits if its left ≥ this value.\nconst laneRightEdge=[];// Track → preferred lane index.  First session in a track claims a lane;\n// subsequent ones in the same track prefer that lane before trying others.\nconst trackLane={};const result=[];for(const{session,rect}of sorted){const trackKey=(session.track??\"\").trim();const preferredLane=trackKey?trackLane[trackKey]??-1:-1;let chosenLane=-1;// Build ordered list of lanes to try: preferred track lane first, then\n// existing lanes in index order, then a new lane at the end.\nconst lanesToTry=[];if(preferredLane>=0)lanesToTry.push(preferredLane);for(let i=0;i<laneRightEdge.length;i++){if(i!==preferredLane)lanesToTry.push(i);}lanesToTry.push(laneRightEdge.length)// always try a brand-new lane last\n;for(const laneIdx of lanesToTry){const rightEdge=laneRightEdge[laneIdx]??0;if(rect.left>=rightEdge){chosenLane=laneIdx;break;}}// Should never stay -1 because a new lane is always tried, but guard anyway\nif(chosenLane<0)chosenLane=laneRightEdge.length;// Use the rendered (minCardWidth-clamped) width for collision tracking\n// so that short sessions stretched to minCardWidth correctly push\n// subsequent sessions into the next lane — producing the staircase\n// layout seen in the reference screenshot.\nlaneRightEdge[chosenLane]=rect.left+rect.width;if(trackKey&&trackLane[trackKey]===undefined){trackLane[trackKey]=chosenLane;}result.push({session,rect,lane:chosenLane});}return result;}// ─── 4. Visual helpers ────────────────────────────────────────────────────────\nfunction getTheme(type,props){const map={logistics:props.colorLogistics,remarks:props.colorRemarks,keynote:props.colorKeynote,panel:props.colorPanel,showcase:props.colorShowcase,launch:props.colorLaunch,break:props.colorBreak};return map[type]??props.colorLogistics;}function DayTabBar({days,activeIndex,onChange,labelFormat,tabStyle,tabAlign,trackColor,activeColor,inactiveColor,textActive,textInactive,fontWeight,prefersReduced}){// Unique ID per instance so layoutId never clashes with a sibling component.\nconst instanceId=useId();const highlightId=`tab-highlight-${instanceId}`;// Roving tabindex: the tablist itself is not focusable; only the active\n// tab has tabIndex=0; all others have tabIndex=-1.\nconst tabRefs=useRef([]);const handleKeyDown=useCallback((e,i)=>{const count=days.length;let next=i;if(e.key===\"ArrowRight\"){e.preventDefault();next=(i+1)%count;}else if(e.key===\"ArrowLeft\"){e.preventDefault();next=(i-1+count)%count;}else if(e.key===\"Home\"){e.preventDefault();next=0;}else if(e.key===\"End\"){e.preventDefault();next=count-1;}else return;onChange(next);tabRefs.current[next]?.focus();},[days.length,onChange]);function makeLabel(day){if(labelFormat===\"date\")return day.dateLabel;if(labelFormat===\"both\")return`${day.label} \\xb7 ${day.dateLabel}`;return day.label;}// ── Pill style ────────────────────────────────────────────────────────────\nif(tabStyle===\"pill\"){return /*#__PURE__*/_jsx(\"div\",{role:\"tablist\",\"aria-label\":\"Conference days\",style:{display:\"flex\",justifyContent:tabAlign===\"center\"?\"center\":tabAlign===\"right\"?\"flex-end\":\"flex-start\",padding:\"12px 16px 0\",position:\"relative\",// Scroll horizontally when tabs overflow on narrow screens\noverflowX:\"auto\",overflowY:\"visible\",scrollbarWidth:\"none\"},children:/*#__PURE__*/_jsx(\"div\",{style:{display:\"inline-flex\",gap:2,background:trackColor,borderRadius:999,padding:3,position:\"relative\",// Prevent the track from shrinking so buttons stay full-size\nflexShrink:0},children:days.map((day,i)=>{const isActive=i===activeIndex;const panelId=`tab-panel-${instanceId}-${i}`;return /*#__PURE__*/_jsxs(\"button\",{ref:el=>{tabRefs.current[i]=el;},role:\"tab\",\"aria-selected\":isActive,\"aria-controls\":panelId,id:`tab-${instanceId}-${i}`,tabIndex:isActive?0:-1,onClick:()=>onChange(i),onKeyDown:e=>handleKeyDown(e,i),style:{// Reset\nborder:\"none\",cursor:\"pointer\",outline:\"none\",// Layout\nposition:\"relative\",zIndex:1,display:\"inline-flex\",alignItems:\"center\",gap:6,padding:\"6px 16px\",borderRadius:999,// Typography\nfontFamily:\"Montserrat, sans-serif\",fontSize:13,fontWeight:isActive?Math.min(fontWeight+300,700):fontWeight,// Colour: text over the sliding highlight\ncolor:isActive?textActive:textInactive,// Keep background transparent — the motion.div\n// sits behind via absolute positioning\nbackground:\"transparent\",transition:prefersReduced?\"none\":\"color 0.2s ease, font-weight 0.2s ease\",// Focus ring visible without affecting layout\nboxShadow:\"none\"},children:[isActive&&/*#__PURE__*/_jsx(motion.span,{layoutId:highlightId,\"aria-hidden\":\"true\",style:{position:\"absolute\",inset:0,borderRadius:999,background:activeColor,zIndex:-1},transition:prefersReduced?{duration:0}:{type:\"spring\",stiffness:500,damping:40,duration:.22}}),makeLabel(day)]},i);})})});}// ── Underline style ───────────────────────────────────────────────────────\nreturn /*#__PURE__*/_jsx(\"div\",{role:\"tablist\",\"aria-label\":\"Conference days\",style:{display:\"flex\",justifyContent:tabAlign===\"center\"?\"center\":tabAlign===\"right\"?\"flex-end\":\"flex-start\",alignItems:\"flex-end\",padding:\"12px 16px 0\",gap:0,borderBottom:`2px solid ${trackColor}`,position:\"relative\"},children:days.map((day,i)=>{const isActive=i===activeIndex;const panelId=`tab-panel-${instanceId}-${i}`;return /*#__PURE__*/_jsxs(\"button\",{ref:el=>{tabRefs.current[i]=el;},role:\"tab\",\"aria-selected\":isActive,\"aria-controls\":panelId,id:`tab-${instanceId}-${i}`,tabIndex:isActive?0:-1,onClick:()=>onChange(i),onKeyDown:e=>handleKeyDown(e,i),style:{border:\"none\",background:\"transparent\",cursor:\"pointer\",outline:\"none\",position:\"relative\",padding:\"8px 18px 10px\",fontFamily:\"Montserrat, sans-serif\",fontSize:13,fontWeight:isActive?Math.min(fontWeight+300,700):fontWeight,color:isActive?textActive:textInactive,transition:prefersReduced?\"none\":\"color 0.2s ease\",display:\"inline-flex\",alignItems:\"center\",gap:6},children:[makeLabel(day),isActive&&/*#__PURE__*/_jsx(motion.span,{layoutId:highlightId,\"aria-hidden\":\"true\",style:{position:\"absolute\",bottom:-2,left:0,right:0,height:2,borderRadius:\"2px 2px 0 0\",background:activeColor,zIndex:1},transition:prefersReduced?{duration:0}:{type:\"spring\",stiffness:500,damping:40,duration:.22}})]},i);})});}// ─── 5. Sub-components ────────────────────────────────────────────────────────\nfunction TimeChip({label,textColor}){return /*#__PURE__*/_jsx(\"span\",{style:{display:\"inline-block\",padding:\"2px 7px\",borderRadius:999,background:\"rgba(0,0,0,0.15)\",color:textColor,fontSize:10,fontWeight:600,letterSpacing:\"0.02em\",whiteSpace:\"nowrap\"},children:label});}function SessionCards({sessions,props}){return /*#__PURE__*/_jsx(\"div\",{\"aria-label\":\"Conference schedule\",style:{display:\"flex\",flexDirection:\"column\",gap:8},children:sessions.map(session=>{return /*#__PURE__*/_jsxs(\"article\",{style:{padding:\"14px 14px 15px\",border:\"1px solid #C8DDED\",borderRadius:props.borderRadius,background:\"#EAF2F9\",fontFamily:\"Montserrat, sans-serif\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{color:\"#052B4C\",fontSize:11,fontWeight:700,marginBottom:8,whiteSpace:\"nowrap\"},children:formatRange(session,props.use24h)}),/*#__PURE__*/_jsx(\"div\",{style:{color:\"#052B4C\",fontSize:14,fontWeight:session.featured?700:600,lineHeight:1.4},children:session.title}),props.showSponsor&&session.sponsor&&/*#__PURE__*/_jsx(\"div\",{style:{color:\"#052B4C\",fontSize:11,lineHeight:1.4,marginTop:9,opacity:.72,overflowWrap:\"anywhere\"},children:session.sponsor})]},session.id);})});}function ScheduleTable({sessions,props}){const headerStyle={padding:\"12px 14px\",background:props.primaryColor,color:\"#FFFFFF\",fontSize:11,fontWeight:700,letterSpacing:\"0.08em\",textAlign:\"left\",textTransform:\"uppercase\",whiteSpace:\"nowrap\"};return /*#__PURE__*/_jsx(\"div\",{style:{overflowX:\"auto\",border:`1px solid ${props.primaryColor}24`,borderRadius:props.borderRadius,background:\"#FFFFFF\"},children:/*#__PURE__*/_jsxs(\"table\",{\"aria-label\":\"Conference schedule\",style:{width:\"100%\",minWidth:620,borderCollapse:\"collapse\",tableLayout:\"fixed\",fontFamily:\"Montserrat, sans-serif\"},children:[/*#__PURE__*/_jsxs(\"colgroup\",{children:[/*#__PURE__*/_jsx(\"col\",{style:{width:126}}),/*#__PURE__*/_jsx(\"col\",{}),/*#__PURE__*/_jsx(\"col\",{style:{width:180}})]}),/*#__PURE__*/_jsx(\"thead\",{children:/*#__PURE__*/_jsxs(\"tr\",{children:[/*#__PURE__*/_jsx(\"th\",{scope:\"col\",style:headerStyle,children:\"Time\"}),/*#__PURE__*/_jsx(\"th\",{scope:\"col\",style:headerStyle,children:\"Session\"}),/*#__PURE__*/_jsx(\"th\",{scope:\"col\",style:headerStyle,children:\"Speaker / sponsor\"})]})}),/*#__PURE__*/_jsx(\"tbody\",{children:sessions.map((session,index)=>{const rowBackground=index%2===0?\"#FFFFFF\":`${props.primaryColor}06`;return /*#__PURE__*/_jsxs(\"tr\",{style:{background:rowBackground},children:[/*#__PURE__*/_jsx(\"td\",{style:{padding:\"14px\",borderBottom:`1px solid ${props.primaryColor}16`,color:props.primaryColor,fontSize:12,fontWeight:700,verticalAlign:\"top\",whiteSpace:\"nowrap\"},children:formatRange(session,props.use24h)}),/*#__PURE__*/_jsx(\"td\",{style:{padding:\"14px\",borderBottom:`1px solid ${props.primaryColor}16`,color:\"#17251F\",fontSize:13,fontWeight:session.featured?700:600,lineHeight:1.4,verticalAlign:\"top\",overflowWrap:\"anywhere\"},children:session.title}),/*#__PURE__*/_jsx(\"td\",{style:{padding:\"14px\",borderBottom:`1px solid ${props.primaryColor}16`,color:\"#53635B\",fontSize:12,lineHeight:1.4,verticalAlign:\"top\",overflowWrap:\"anywhere\"},children:session.sponsor||\"-\"})]},session.id);})})]})});}// ── 5b. TimelineCard ──────────────────────────────────────────────────────────\n//\n// A real, focusable card for the timeline view.  Width drives which content\n// tier is rendered:\n//\n//   w < 130 px  → \"nano\":  title only (single-line ellipsis)\n//   130 ≤ w < 220 px → \"compact\": time chip + title (2-line clamp)\n//   w ≥ 220 px  → \"full\":  time chip + title + sponsor + description (if any)\n//\n// All thresholds are constants so they're easy to tune without grep-hunting.\nconst CARD_NANO=130// px — below this: title-only\n;const CARD_FULL=220// px — at/above this: full content\n;function TimelineCard({session,rect,lane,laneRowHeight:LANE_H,props,onActivate,selectedId}){const theme=getTheme(session.type,props);const timeStr=formatRange(session,props.use24h);const startStr=formatTime(parseTime(session.startTime),props.use24h);const endStr=formatTime(parseTime(session.endTime),props.use24h);// Card geometry.  cardW is the slot width used for tier decisions.\n// The button itself is inset an additional 2px each side for breathing room.\nconst cardW=Math.max(rect.width-4,24);const cardH=LANE_H-8;const pad=Math.min(props.cardPadding,Math.floor(cardH/4));// Content tier based on rendered width\nconst tier=cardW<CARD_NANO?\"nano\":cardW<CARD_FULL?\"compact\":\"full\";// aria-label: \"Title, start to end, sponsor\"\nconst ariaLabel=[session.title,`${startStr} to ${endStr}`,session.sponsor?session.sponsor:null].filter(Boolean).join(\", \");const showChip=tier!==\"nano\"&&props.showTimeChip;const showSponsor=tier===\"full\"&&props.showSponsor;const showDesc=tier===\"full\"&&props.showDescription&&!!session.description;// Title line clamp: nano = 1 line, others = 2 lines\nconst titleClamp=tier===\"nano\"?1:2;const isSelected=selectedId===session.id;const isClickable=props.expandMode!==\"none\";// Shadow / selected outline\nconst baseShadow=props.cardShadow?`0 1px 4px 0 ${theme.accent}30, 0 0 0 1px ${theme.accent}18`:\"none\";const shadow=isSelected?`0 0 0 2px ${theme.accent}, 0 2px 8px 0 ${theme.accent}28`:baseShadow;return /*#__PURE__*/_jsxs(\"button\",{\"aria-label\":ariaLabel,\"aria-pressed\":isClickable?isSelected:undefined,title:ariaLabel,onClick:isClickable&&onActivate?e=>onActivate(session,e.currentTarget):undefined,style:{// Reset button defaults\nappearance:\"none\",WebkitAppearance:\"none\",border:\"none\",cursor:isClickable?\"pointer\":\"default\",textAlign:\"left\",// Positioning — lane index drives the vertical row\nposition:\"absolute\",top:lane*LANE_H+6,left:rect.left+2,width:Math.max(cardW-4,20),height:cardH-4,// Card chrome\nbackground:theme.background,borderRadius:props.borderRadius,borderLeft:`4px solid ${theme.accent}`,boxShadow:shadow,boxSizing:\"border-box\",padding:`${pad}px ${pad}px ${pad}px ${pad+2}px`,overflow:\"hidden\",// Content layout: title fills available space, time string\n// is pinned to the bottom — matching the screenshot\nfontFamily:\"Montserrat, sans-serif\",fontWeight:props.fontWeight,display:\"flex\",flexDirection:\"column\",justifyContent:\"space-between\",// Featured cards full opacity; others slightly dimmed\nopacity:session.featured?1:.92,outline:\"none\",zIndex:isSelected?1:\"auto\",transition:\"box-shadow 0.15s ease\"},onFocus:e=>{if(!isSelected)e.currentTarget.style.outline=`2px solid ${theme.accent}`;},onBlur:e=>{e.currentTarget.style.outline=\"none\";},children:[/*#__PURE__*/_jsxs(\"div\",{style:{overflow:\"hidden\",flex:\"1 1 auto\",minHeight:0},children:[/*#__PURE__*/_jsx(\"span\",{style:{display:\"-webkit-box\",WebkitLineClamp:titleClamp,WebkitBoxOrient:\"vertical\",overflow:\"hidden\",fontSize:tier===\"nano\"?10:13,fontWeight:session.featured?700:props.fontWeight+100,color:theme.text,lineHeight:1.35,// Nano: collapse to single ellipsis line\n...tier===\"nano\"?{display:\"block\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\",WebkitLineClamp:undefined,WebkitBoxOrient:undefined}:{}},children:session.title}),showSponsor&&/*#__PURE__*/_jsxs(\"span\",{style:{display:\"flex\",alignItems:\"center\",gap:4,marginTop:3,overflow:\"hidden\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{width:5,height:5,borderRadius:\"50%\",background:theme.accent,flexShrink:0,display:\"inline-block\"}}),session.sponsorLogo&&/*#__PURE__*/_jsx(\"img\",{src:session.sponsorLogo,alt:\"\",\"aria-hidden\":\"true\",style:{height:11,width:\"auto\",objectFit:\"contain\",flexShrink:0,borderRadius:1}}),session.sponsor&&/*#__PURE__*/_jsx(\"span\",{style:{fontSize:10,color:theme.text,opacity:.6,fontWeight:props.fontWeight,whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\"},children:session.sponsor})]}),showDesc&&/*#__PURE__*/_jsx(\"span\",{style:{display:\"-webkit-box\",WebkitLineClamp:2,WebkitBoxOrient:\"vertical\",overflow:\"hidden\",fontSize:10,color:theme.text,opacity:.5,fontWeight:props.fontWeight,lineHeight:1.4,marginTop:3},children:session.description})]}),showChip&&/*#__PURE__*/_jsx(\"span\",{style:{flexShrink:0,fontSize:11,color:theme.text,opacity:.55,fontWeight:props.fontWeight,whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\",marginTop:4,lineHeight:1},children:timeStr})]});}function SessionRow({session,props,selectedId,onActivate}){const theme=getTheme(session.type,props);const timeStr=formatRange(session,props.use24h);const durationMin=Math.max(0,parseTime(session.endTime)-parseTime(session.startTime));const isClickable=props.expandMode!==\"none\";const isSelected=selectedId===session.id;const isInline=props.expandMode===\"inline\";const rowRef=useRef(null);return /*#__PURE__*/_jsxs(motion.div,{layout:true,initial:{opacity:0,y:6},animate:{opacity:1,y:0},exit:{opacity:0,y:-6},transition:{duration:.18,ease:\"easeOut\"},children:[/*#__PURE__*/_jsxs(\"div\",{ref:rowRef,role:isClickable?\"button\":undefined,tabIndex:isClickable?0:undefined,\"aria-pressed\":isClickable?isSelected:undefined,\"aria-label\":`${session.title}, ${timeStr}`,onClick:isClickable?()=>onActivate(session,rowRef.current):undefined,onKeyDown:isClickable?e=>{if(e.key===\"Enter\"||e.key===\" \"){e.preventDefault();onActivate(session,rowRef.current);}}:undefined,style:{display:\"flex\",alignItems:\"flex-start\",gap:12,padding:`${props.cardPadding}px`,borderRadius:props.borderRadius,background:theme.background,borderLeft:isSelected?`4px solid ${theme.accent}`:session.featured?`4px solid ${theme.accent}`:`4px solid transparent`,boxShadow:isSelected?`0 0 0 2px ${theme.accent}`:\"none\",minHeight:props.cardMinHeight,marginBottom:6,fontFamily:\"Montserrat, sans-serif\",cursor:isClickable?\"pointer\":\"default\",position:\"relative\",overflow:\"hidden\",boxSizing:\"border-box\",outline:\"none\",transition:\"box-shadow 0.15s ease\"},onFocus:e=>{if(!isSelected)e.currentTarget.style.outline=`2px solid ${theme.accent}`;},onBlur:e=>{e.currentTarget.style.outline=\"none\";},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:8,height:8,borderRadius:\"50%\",background:theme.accent,flexShrink:0,marginTop:5}}),/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0},children:[/*#__PURE__*/_jsx(\"div\",{style:{color:theme.text,fontSize:13,fontWeight:session.featured?700:props.fontWeight+100,lineHeight:1.35,marginBottom:props.showTimeChip||props.showSponsor?4:0,maxHeight:\"2.7em\",overflow:\"hidden\"},children:session.title}),(props.showTimeChip||props.showSponsor)&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:6,flexWrap:\"wrap\"},children:[props.showTimeChip&&/*#__PURE__*/_jsx(TimeChip,{label:timeStr,textColor:theme.text}),props.showSponsor&&session.sponsor&&/*#__PURE__*/_jsx(\"span\",{style:{color:theme.text,opacity:.65,fontSize:10,fontWeight:props.fontWeight},children:session.sponsor}),/*#__PURE__*/_jsxs(\"span\",{style:{color:theme.text,opacity:.4,fontSize:10,fontWeight:props.fontWeight,marginLeft:\"auto\"},children:[durationMin,\"m\"]})]})]})]}),isInline&&isSelected&&/*#__PURE__*/_jsx(InlineDetail,{session:session,props:props})]});}// ── 5b. DebugTable ────────────────────────────────────────────────────────────\n/**\n * Renders a compact monospaced table of computed layout values for each\n * session in the active day.  Visible only when props.debugLayout = true.\n *\n * Columns: ID | Title (truncated) | Start | End | Duration | Left px | Width px | Lane\n */function DebugTable({laned,rangeStart,rangeEnd,use24h,primaryColor}){const MONO={fontFamily:\"ui-monospace, 'Cascadia Code', 'Courier New', monospace\",fontSize:11};const TH={...MONO,padding:\"4px 8px\",textAlign:\"left\",fontWeight:700,borderBottom:`2px solid ${primaryColor}`,whiteSpace:\"nowrap\",color:primaryColor,background:\"#f8f9fa\"};const TD={...MONO,padding:\"3px 8px\",borderBottom:\"1px solid #dee2e6\",whiteSpace:\"nowrap\",verticalAlign:\"top\"};// Lane count for stats row\nconst laneCount=laned.length?Math.max(...laned.map(l=>l.lane))+1:0;return /*#__PURE__*/_jsxs(\"div\",{style:{margin:\"16px 16px 0\",border:\"1px solid #dee2e6\",borderRadius:8,overflow:\"auto\",maxHeight:320},children:[/*#__PURE__*/_jsxs(\"div\",{style:{padding:\"6px 10px\",background:primaryColor,color:\"#fff\",fontSize:11,fontWeight:700,letterSpacing:\"0.06em\",display:\"flex\",justifyContent:\"space-between\",alignItems:\"center\"},children:[/*#__PURE__*/_jsx(\"span\",{children:\"🔍 DEBUG — Layout table\"}),/*#__PURE__*/_jsxs(\"span\",{style:{opacity:.7},children:[\"range \",formatTime(rangeStart,use24h),\"–\",formatTime(rangeEnd,use24h),\" \\xb7 \",laned.length,\" sessions\",\" \\xb7 \",laneCount,\" lane\",laneCount!==1?\"s\":\"\"]})]}),/*#__PURE__*/_jsxs(\"table\",{style:{width:\"100%\",borderCollapse:\"collapse\"},children:[/*#__PURE__*/_jsx(\"thead\",{children:/*#__PURE__*/_jsx(\"tr\",{children:[\"ID\",\"Title\",\"Start\",\"End\",\"Dur (m)\",\"Left (px)\",\"Width (px)\",\"Lane\"].map(h=>/*#__PURE__*/_jsx(\"th\",{style:TH,children:h},h))})}),/*#__PURE__*/_jsx(\"tbody\",{children:laned.map(({session:s,rect,lane},i)=>{// Alternate row tint\nconst rowBg=i%2===0?\"#fff\":\"#f8f9fa\";// Highlight sessions whose rendered width > natural width\nconst stretched=rect.width>rect.durationMinutes*140/60;return /*#__PURE__*/_jsxs(\"tr\",{style:{background:rowBg},children:[/*#__PURE__*/_jsx(\"td\",{style:{...TD,color:\"#666\"},children:s.id}),/*#__PURE__*/_jsx(\"td\",{style:{...TD,maxWidth:140,overflow:\"hidden\",textOverflow:\"ellipsis\"},children:s.title.length>28?s.title.slice(0,27)+\"…\":s.title}),/*#__PURE__*/_jsx(\"td\",{style:TD,children:formatTime(parseTime(s.startTime),use24h)}),/*#__PURE__*/_jsx(\"td\",{style:TD,children:formatTime(parseTime(s.endTime),use24h)}),/*#__PURE__*/_jsx(\"td\",{style:{...TD,color:rect.durationMinutes<20?\"#e67700\":\"inherit\"},children:rect.durationMinutes}),/*#__PURE__*/_jsx(\"td\",{style:TD,children:Math.round(rect.left)}),/*#__PURE__*/_jsxs(\"td\",{style:{...TD,color:stretched?\"#e67700\":\"inherit\"},children:[Math.round(rect.width),stretched?\" ⚠\":\"\"]}),/*#__PURE__*/_jsx(\"td\",{style:{...TD,fontWeight:700,color:primaryColor},children:lane})]},s.id);})})]})]});}/** SVG icons for the two layout modes */const ICONS={list:/*#__PURE__*/_jsxs(\"svg\",{width:\"15\",height:\"15\",viewBox:\"0 0 15 15\",fill:\"none\",children:[/*#__PURE__*/_jsx(\"rect\",{x:\"1\",y:\"2\",width:\"13\",height:\"2.5\",rx:\"1\",fill:\"currentColor\"}),/*#__PURE__*/_jsx(\"rect\",{x:\"1\",y:\"6.25\",width:\"13\",height:\"2.5\",rx:\"1\",fill:\"currentColor\"}),/*#__PURE__*/_jsx(\"rect\",{x:\"1\",y:\"10.5\",width:\"13\",height:\"2.5\",rx:\"1\",fill:\"currentColor\"})]}),grid:/*#__PURE__*/_jsxs(\"svg\",{width:\"15\",height:\"15\",viewBox:\"0 0 15 15\",fill:\"none\",children:[/*#__PURE__*/_jsx(\"rect\",{x:\"1\",y:\"1\",width:\"5.5\",height:\"5.5\",rx:\"1\",fill:\"currentColor\"}),/*#__PURE__*/_jsx(\"rect\",{x:\"8.5\",y:\"1\",width:\"5.5\",height:\"5.5\",rx:\"1\",fill:\"currentColor\"}),/*#__PURE__*/_jsx(\"rect\",{x:\"1\",y:\"8.5\",width:\"5.5\",height:\"5.5\",rx:\"1\",fill:\"currentColor\"}),/*#__PURE__*/_jsx(\"rect\",{x:\"8.5\",y:\"8.5\",width:\"5.5\",height:\"5.5\",rx:\"1\",fill:\"currentColor\"})]})};function LayoutSwitcher({active,onChange,primaryColor,compact=false}){const modes=[\"list\",\"grid\"];const titles={list:\"List view\",grid:\"Grid view\"};const btnSize=compact?22:28;const iconSize=compact?12:15;return /*#__PURE__*/_jsx(\"div\",{role:\"group\",\"aria-label\":\"Layout switcher\",style:{display:\"flex\",alignItems:\"center\",gap:1,padding:compact?\"2px 3px\":\"3px 4px\",background:\"rgba(0,0,0,0.05)\",borderRadius:8,flexShrink:0},children:modes.map(mode=>{const isActive=active===mode;const icon=/*#__PURE__*/React.cloneElement(ICONS[mode],{width:iconSize,height:iconSize});return /*#__PURE__*/_jsx(\"button\",{title:titles[mode],\"aria-pressed\":isActive,onClick:()=>onChange(mode),style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",width:btnSize,height:btnSize,border:\"none\",borderRadius:5,cursor:\"pointer\",background:isActive?primaryColor:\"transparent\",color:isActive?\"#fff\":primaryColor,opacity:isActive?1:.55,transition:\"background 0.15s, color 0.15s, opacity 0.15s\",padding:0},children:icon},mode);})});}function InlineDetail({session,props:p}){const theme=getTheme(session.type,p);const[descExpanded,setDescExpanded]=useState(false);const hasDesc=!!session.description;return /*#__PURE__*/_jsx(motion.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:\"auto\"},exit:{opacity:0,height:0},transition:{duration:.2,ease:[.4,0,.2,1]},style:{overflow:\"hidden\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{margin:\"4px 0 6px\",padding:\"12px 14px 14px\",background:theme.background,borderRadius:p.borderRadius,borderLeft:`3px solid ${theme.accent}`,fontFamily:\"Montserrat, sans-serif\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{display:\"inline-block\",padding:\"1px 7px\",borderRadius:999,background:`${theme.accent}20`,color:theme.accent,fontSize:9,fontWeight:700,letterSpacing:\"0.1em\",textTransform:\"uppercase\",marginBottom:6},children:TYPE_LABELS[session.type]??session.type}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:6,marginBottom:8,flexWrap:\"wrap\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontSize:11,fontWeight:600,color:theme.text,opacity:.75},children:formatRange(session,p.use24h)}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:10,color:theme.text,opacity:.4,background:`${theme.accent}14`,padding:\"1px 6px\",borderRadius:999},children:formatDuration(Math.abs(parseTime(session.endTime)-parseTime(session.startTime)))})]}),session.sponsor&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:6,marginBottom:8},children:[session.sponsorLogo&&/*#__PURE__*/_jsx(\"img\",{src:session.sponsorLogo,alt:session.sponsor,style:{height:16,width:\"auto\",objectFit:\"contain\",borderRadius:2}}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:10,color:theme.text,opacity:.6,fontWeight:p.fontWeight+100},children:session.sponsor})]}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:11,color:theme.text,opacity:hasDesc?.65:.3,lineHeight:1.55,fontStyle:hasDesc?\"normal\":\"italic\",fontWeight:p.fontWeight,marginBottom:session.link?10:0},children:hasDesc?/*#__PURE__*/_jsxs(_Fragment,{children:[descExpanded?session.description:session.description.slice(0,120)+(session.description.length>120?\"…\":\"\"),session.description.length>120&&/*#__PURE__*/_jsx(\"button\",{onClick:e=>{e.stopPropagation();setDescExpanded(v=>!v);},style:{background:\"none\",border:\"none\",color:theme.accent,fontSize:10,cursor:\"pointer\",padding:\"0 2px\",fontFamily:\"inherit\",fontWeight:600},children:descExpanded?\" Less\":\" More\"})]}):\"More details soon\"}),session.link&&/*#__PURE__*/_jsx(\"a\",{href:session.link,target:\"_blank\",rel:\"noopener noreferrer\",onClick:e=>e.stopPropagation(),style:{display:\"inline-flex\",alignItems:\"center\",gap:4,padding:\"4px 10px\",borderRadius:p.borderRadius,background:theme.accent,color:\"#fff\",fontSize:10,fontWeight:700,textDecoration:\"none\",letterSpacing:\"0.04em\",fontFamily:\"inherit\"},children:\"Learn more →\"})]})},\"inline-detail\");}function GridView({sessions,props,selectedId,onActivate}){if(!sessions.length){return /*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",height:120,color:props.primaryColor,opacity:.3,fontSize:13,fontFamily:\"Montserrat, sans-serif\"},children:\"No sessions\"});}const isClickable=props.expandMode!==\"none\";const isInline=props.expandMode===\"inline\";return /*#__PURE__*/_jsx(AnimatePresence,{mode:\"popLayout\",initial:false,children:/*#__PURE__*/_jsx(\"div\",{style:{display:\"grid\",gridTemplateColumns:\"repeat(2, 1fr)\",gap:8},children:sessions.map(session=>{const theme=getTheme(session.type,props);const timeStr=formatRange(session,props.use24h);const durMin=Math.max(0,parseTime(session.endTime)-parseTime(session.startTime));const isSelected=selectedId===session.id;return /*#__PURE__*/_jsx(GridCard,{session:session,theme:theme,timeStr:timeStr,durMin:durMin,props:props,isSelected:isSelected,isClickable:isClickable,isInline:isInline,onActivate:onActivate},session.id);})})});}function GridCard({session,theme,timeStr,durMin,props,isSelected,isClickable,isInline,onActivate}){const cardRef=useRef(null);return /*#__PURE__*/_jsxs(motion.div,{layout:true,initial:{opacity:0,scale:.97},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.97},transition:{duration:.16,ease:\"easeOut\"},children:[/*#__PURE__*/_jsxs(\"div\",{ref:cardRef,role:isClickable?\"button\":undefined,tabIndex:isClickable?0:undefined,\"aria-pressed\":isClickable?isSelected:undefined,\"aria-label\":`${session.title}, ${timeStr}`,onClick:isClickable?()=>onActivate(session,cardRef.current):undefined,onKeyDown:isClickable?e=>{if(e.key===\"Enter\"||e.key===\" \"){e.preventDefault();onActivate(session,cardRef.current);}}:undefined,style:{padding:props.cardPadding,borderRadius:props.borderRadius,background:theme.background,borderLeft:isSelected?`4px solid ${theme.accent}`:session.featured?`4px solid ${theme.accent}`:`4px solid transparent`,boxShadow:isSelected?`0 0 0 2px ${theme.accent}`:\"none\",fontFamily:\"Montserrat, sans-serif\",boxSizing:\"border-box\",display:\"flex\",flexDirection:\"column\",gap:4,height:\"100%\",minHeight:props.cardMinHeight,cursor:isClickable?\"pointer\":\"default\",outline:\"none\",transition:\"box-shadow 0.15s ease\"},onFocus:e=>{if(!isSelected)e.currentTarget.style.outline=`2px solid ${theme.accent}`;},onBlur:e=>{e.currentTarget.style.outline=\"none\";},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"flex-start\",gap:8},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:7,height:7,borderRadius:\"50%\",background:theme.accent,flexShrink:0,marginTop:4}}),/*#__PURE__*/_jsx(\"div\",{style:{color:theme.text,fontSize:12,fontWeight:session.featured?700:props.fontWeight+100,lineHeight:1.35,flex:1},children:session.title})]}),(props.showTimeChip||props.showSponsor)&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:5,flexWrap:\"wrap\",paddingLeft:15,marginTop:\"auto\"},children:[props.showTimeChip&&/*#__PURE__*/_jsx(TimeChip,{label:timeStr,textColor:theme.text}),props.showSponsor&&session.sponsor&&/*#__PURE__*/_jsx(\"span\",{style:{color:theme.text,opacity:.65,fontSize:10,fontWeight:props.fontWeight},children:session.sponsor}),/*#__PURE__*/_jsxs(\"span\",{style:{color:theme.text,opacity:.4,fontSize:10,fontWeight:props.fontWeight,marginLeft:\"auto\"},children:[durMin,\"m\"]})]})]}),isInline&&isSelected&&/*#__PURE__*/_jsx(InlineDetail,{session:session,props:props})]},session.id);}// ─── 5d-ii. SessionDetailPanel ────────────────────────────────────────────────\n//\n// Full-width detail area that slides in below the timeline when a card is\n// clicked (expandMode = \"panel\").  Focus is moved inside on open and returned\n// to the trigger card on close.\nconst TYPE_LABELS={logistics:\"Logistics\",remarks:\"Remarks\",keynote:\"Keynote\",panel:\"Panel\",showcase:\"Showcase\",launch:\"Launch\",break:\"Break\"};function SessionDetailPanel({session,props:p,onClose,triggerRef}){const theme=session?getTheme(session.type,p):null;const closeBtnRef=useRef(null);const[descExpanded,setDescExpanded]=useState(false);// Reset desc toggle when a different session is opened\nuseEffect(()=>{setDescExpanded(false);},[session?.id]);// Move focus into the panel when it opens\nuseEffect(()=>{if(session){closeBtnRef.current?.focus();}},[session?.id]);// Keyboard: Esc closes\nuseEffect(()=>{if(!session)return;const handler=e=>{if(e.key===\"Escape\"){onClose();triggerRef.current?.focus();}};document.addEventListener(\"keydown\",handler);return()=>document.removeEventListener(\"keydown\",handler);},[session,onClose,triggerRef]);return /*#__PURE__*/_jsx(AnimatePresence,{children:session&&theme&&/*#__PURE__*/_jsx(motion.div,{role:\"region\",\"aria-label\":`Details for ${session.title}`,initial:{opacity:0,height:0},animate:{opacity:1,height:\"auto\"},exit:{opacity:0,height:0},transition:{duration:.22,ease:[.4,0,.2,1]},style:{overflow:\"hidden\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{margin:\"8px 0 4px\",padding:\"16px 18px 18px\",background:theme.background,borderRadius:p.borderRadius,borderLeft:`4px solid ${theme.accent}`,fontFamily:\"Montserrat, sans-serif\",position:\"relative\"},children:[/*#__PURE__*/_jsx(\"button\",{ref:closeBtnRef,\"aria-label\":\"Close session details\",onClick:()=>{onClose();triggerRef.current?.focus();},style:{position:\"absolute\",top:12,right:12,width:28,height:28,borderRadius:\"50%\",border:`1px solid ${theme.accent}40`,background:`${theme.accent}12`,color:theme.text,cursor:\"pointer\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",fontSize:16,lineHeight:1,fontFamily:\"inherit\",outline:\"none\"},onFocus:e=>{e.currentTarget.style.outline=`2px solid ${theme.accent}`;},onBlur:e=>{e.currentTarget.style.outline=\"none\";},children:\"\\xd7\"}),/*#__PURE__*/_jsx(\"div\",{style:{display:\"inline-block\",padding:\"2px 8px\",borderRadius:999,background:`${theme.accent}20`,color:theme.accent,fontSize:10,fontWeight:700,letterSpacing:\"0.1em\",textTransform:\"uppercase\",marginBottom:8},children:TYPE_LABELS[session.type]??session.type}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:16,fontWeight:session.featured?700:600,color:theme.text,lineHeight:1.35,marginBottom:6,paddingRight:36},children:session.title}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:8,marginBottom:10,flexWrap:\"wrap\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontSize:12,fontWeight:600,color:theme.text,opacity:.75},children:formatRange(session,p.use24h)}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:11,color:theme.text,opacity:.45,background:`${theme.accent}14`,padding:\"1px 7px\",borderRadius:999},children:formatDuration(Math.abs(parseTime(session.endTime)-parseTime(session.startTime)))})]}),session.sponsor&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:8,marginBottom:10},children:[session.sponsorLogo&&/*#__PURE__*/_jsx(\"img\",{src:session.sponsorLogo,alt:session.sponsor,style:{height:20,width:\"auto\",objectFit:\"contain\",borderRadius:2}}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:11,color:theme.text,opacity:.65,fontWeight:p.fontWeight+100},children:session.sponsor})]}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:12,color:theme.text,opacity:session.description?.7:.35,lineHeight:1.6,fontWeight:p.fontWeight,fontStyle:session.description?\"normal\":\"italic\",marginBottom:session.link?0:2},children:session.description?/*#__PURE__*/_jsxs(_Fragment,{children:[descExpanded?session.description:session.description.slice(0,160)+(session.description.length>160?\"…\":\"\"),session.description.length>160&&/*#__PURE__*/_jsx(\"button\",{onClick:()=>setDescExpanded(v=>!v),style:{background:\"none\",border:\"none\",color:theme.accent,fontSize:11,cursor:\"pointer\",padding:\"0 3px\",fontFamily:\"inherit\",fontWeight:600},children:descExpanded?\"Less\":\"More\"})]}):\"More details soon\"}),session.link&&/*#__PURE__*/_jsx(\"a\",{href:session.link,target:\"_blank\",rel:\"noopener noreferrer\",style:{display:\"inline-flex\",alignItems:\"center\",gap:5,marginTop:14,padding:\"7px 16px\",borderRadius:p.borderRadius,background:theme.accent,color:\"#fff\",fontSize:11,fontWeight:700,textDecoration:\"none\",letterSpacing:\"0.04em\",fontFamily:\"inherit\"},children:\"Learn more →\"})]})},session.id)});}function SessionPopover({session,anchorEl,containerEl,props:p,onClose}){const theme=session?getTheme(session.type,p):null;const popRef=useRef(null);const closeBtnRef=useRef(null);const[pos,setPos]=useState({top:0,left:0});// Compute position relative to the component container\nuseLayoutEffect(()=>{if(!session||!anchorEl||!containerEl)return;const aRect=anchorEl.getBoundingClientRect();const cRect=containerEl.getBoundingClientRect();const popW=280;let left=aRect.left-cRect.left;// Keep inside right edge\nif(left+popW>cRect.width)left=cRect.width-popW-8;if(left<8)left=8;setPos({top:aRect.bottom-cRect.top+6,left});},[session?.id,anchorEl,containerEl]);// Focus close button on open\nuseEffect(()=>{if(session)closeBtnRef.current?.focus();},[session?.id]);// Outside click closes\nuseEffect(()=>{if(!session)return;const handler=e=>{if(popRef.current&&!popRef.current.contains(e.target)&&anchorEl&&!anchorEl.contains(e.target)){onClose();}};document.addEventListener(\"mousedown\",handler);return()=>document.removeEventListener(\"mousedown\",handler);},[session,anchorEl,onClose]);// Esc closes\nuseEffect(()=>{if(!session)return;const handler=e=>{if(e.key===\"Escape\"){onClose();anchorEl?.focus();}};document.addEventListener(\"keydown\",handler);return()=>document.removeEventListener(\"keydown\",handler);},[session,anchorEl,onClose]);return /*#__PURE__*/_jsx(AnimatePresence,{children:session&&theme&&/*#__PURE__*/_jsxs(motion.div,{ref:popRef,role:\"dialog\",\"aria-modal\":\"false\",\"aria-label\":`Details for ${session.title}`,initial:{opacity:0,y:-6,scale:.97},animate:{opacity:1,y:0,scale:1},exit:{opacity:0,y:-6,scale:.97},transition:{duration:.16,ease:[.4,0,.2,1]},style:{position:\"absolute\",top:pos.top,left:pos.left,width:280,zIndex:20,background:p.backgroundColor,borderRadius:p.borderRadius,boxShadow:`0 4px 24px 0 rgba(0,0,0,0.14), 0 0 0 1px ${theme.accent}28`,padding:\"14px 16px 16px\",fontFamily:\"Montserrat, sans-serif\",overflow:\"hidden\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,left:0,right:0,height:3,background:theme.accent,borderRadius:`${p.borderRadius}px ${p.borderRadius}px 0 0`}}),/*#__PURE__*/_jsx(\"button\",{ref:closeBtnRef,\"aria-label\":\"Close\",onClick:()=>{onClose();anchorEl?.focus();},style:{position:\"absolute\",top:10,right:10,width:24,height:24,borderRadius:\"50%\",border:`1px solid ${theme.accent}30`,background:`${theme.accent}10`,color:theme.text,cursor:\"pointer\",fontSize:14,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",fontFamily:\"inherit\",outline:\"none\"},onFocus:e=>{e.currentTarget.style.outline=`2px solid ${theme.accent}`;},onBlur:e=>{e.currentTarget.style.outline=\"none\";},children:\"\\xd7\"}),/*#__PURE__*/_jsx(\"div\",{style:{display:\"inline-block\",padding:\"1px 7px\",borderRadius:999,background:`${theme.accent}20`,color:theme.accent,fontSize:9,fontWeight:700,letterSpacing:\"0.1em\",textTransform:\"uppercase\",marginBottom:6,marginTop:4},children:TYPE_LABELS[session.type]??session.type}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:13,fontWeight:600,color:theme.text,lineHeight:1.35,marginBottom:5,paddingRight:28},children:session.title}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:6,marginBottom:session.sponsor?8:10,flexWrap:\"wrap\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontSize:11,fontWeight:600,color:theme.text,opacity:.7},children:formatRange(session,p.use24h)}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:10,color:theme.text,opacity:.4,background:`${theme.accent}14`,padding:\"1px 6px\",borderRadius:999},children:formatDuration(Math.abs(parseTime(session.endTime)-parseTime(session.startTime)))})]}),session.sponsor&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:6,marginBottom:8},children:[session.sponsorLogo&&/*#__PURE__*/_jsx(\"img\",{src:session.sponsorLogo,alt:session.sponsor,style:{height:16,width:\"auto\",objectFit:\"contain\",borderRadius:2}}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:10,color:theme.text,opacity:.6,fontWeight:p.fontWeight+100},children:session.sponsor})]}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:11,color:theme.text,opacity:session.description?.65:.3,lineHeight:1.55,fontStyle:session.description?\"normal\":\"italic\",fontWeight:p.fontWeight,marginBottom:session.link?12:0},children:session.description||\"More details soon\"}),session.link&&/*#__PURE__*/_jsx(\"a\",{href:session.link,target:\"_blank\",rel:\"noopener noreferrer\",style:{display:\"inline-flex\",alignItems:\"center\",gap:4,padding:\"5px 12px\",borderRadius:p.borderRadius,background:theme.accent,color:\"#fff\",fontSize:10,fontWeight:700,textDecoration:\"none\",letterSpacing:\"0.04em\",fontFamily:\"inherit\"},children:\"Learn more →\"})]},session.id)});}// ─── 5e. TimelineView ─────────────────────────────────────────────────────────\n/**\n * Horizontal Gantt-style timeline (Task 1.5 visual redesign).\n *\n * Layout anatomy\n * ──────────────\n *  ┌─ outer (overflow:hidden, width:100%) ─────────────────────────────────┐\n *  │ ┌─ scroller (overflow-x:auto) ───────────────────────────────────────┐│\n *  │ │  ┌─ canvas (position:relative, width = totalPx, minWidth 100%) ───┐││\n *  │ │  │  ruler strip (sticky top, full width)                          │││\n *  │ │  │  lane area (position:relative, height = laneCount × LANE_H)    │││\n *  │ │  │    vertical grid lines                                         │││\n *  │ │  │    TimelineCard buttons                                        │││\n *  │ │  └────────────────────────────────────────────────────────────────┘││\n *  │ └────────────────────────────────────────────────────────────────────┘│\n *  └───────────────────────────────────────────────────────────────────────┘\n *\n * No left label column — the ruler spans full width from the first tick.\n * The outer wrapper has overflow:hidden so the page never gets a horizontal\n * scrollbar; all sideways scrolling happens inside the scroller.\n * The ruler is sticky at top:0 so it stays visible during vertical scroll\n * when the component is given a fixed height.\n */function TimelineView({laned,dayRange,settings,props}){// ── Selection state ───────────────────────────────────────────────────────\nconst[selectedSession,setSelectedSession]=useState(null);const[anchorEl,setAnchorEl]=useState(null);const triggerRef=useRef(null);// The outer wrapper element is the popover container reference\nconst outerRef=useRef(null);const handleActivate=useCallback((session,el)=>{if(selectedSession?.id===session.id){// Toggle off\nsetSelectedSession(null);setAnchorEl(null);}else{setSelectedSession(session);setAnchorEl(el);triggerRef.current=el;}},[selectedSession]);const handleClose=useCallback(()=>{setSelectedSession(null);setAnchorEl(null);},[]);if(!laned.length){return /*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",height:120,color:props.primaryColor,opacity:.3,fontSize:13,fontFamily:\"Montserrat, sans-serif\"},children:\"No sessions\"});}const{pixelsPerHour,tickMinutes}=settings;const rangeStart=dayRange.startMin;const rangeEnd=dayRange.endMin;// Total scrollable canvas width\nconst totalPx=(rangeEnd-rangeStart)/60*pixelsPerHour;const LANE_H=props.laneRowHeight// configurable row height\n;const RULER_H=40// ruler strip height — taller for legibility\n;const TICK_H_HOUR=10// tick mark height at the hour\n;const TICK_H_HALF=5// tick mark height at sub-hour intervals\n;// Derive colours — ruler and canvas share the component background\nconst bg=props.backgroundColor;const rulerText=props.rulerTextColor;const gridLine=props.gridLineColor;// Tick positions (minutes since midnight)\nconst ticks=[];for(let m=rangeStart;m<=rangeEnd;m+=tickMinutes){ticks.push(m);}// Lane count\nconst laneCount=laned.length?Math.max(...laned.map(l=>l.lane))+1:1;const lanesHeight=laneCount*LANE_H;const isInline=props.expandMode===\"inline\";return /* Outer: clips page-level overflow; also acts as popover bound *//*#__PURE__*/_jsxs(\"div\",{ref:outerRef,style:{width:\"100%\",overflow:\"hidden\",fontFamily:\"Montserrat, sans-serif\",background:bg,position:\"relative\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{overflowX:\"auto\",overflowY:\"visible\",scrollbarWidth:\"thin\",scrollbarColor:`${gridLine}44 transparent`},children:/*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",width:totalPx,minWidth:\"100%\",background:bg},children:[/*#__PURE__*/_jsx(\"div\",{style:{position:\"sticky\",top:0,zIndex:2,height:RULER_H,background:bg,borderBottom:`1px solid ${gridLine}20`},children:ticks.map(m=>{const x=(m-rangeStart)/60*pixelsPerHour;const isHour=m%60===0;const tickH=isHour?TICK_H_HOUR:TICK_H_HALF;return /*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",bottom:0,left:x,width:1,height:tickH,background:gridLine,opacity:isHour?.4:.2,pointerEvents:\"none\"}}),isHour&&/*#__PURE__*/_jsx(\"span\",{style:{position:\"absolute\",top:6,left:x+4,fontSize:12,fontWeight:700,color:rulerText,whiteSpace:\"nowrap\",pointerEvents:\"none\",userSelect:\"none\",lineHeight:1},children:formatTime(m,props.use24h)}),!isHour&&/*#__PURE__*/_jsx(\"span\",{style:{position:\"absolute\",top:22,left:x+3,fontSize:10,fontWeight:400,color:rulerText,opacity:.45,whiteSpace:\"nowrap\",pointerEvents:\"none\",userSelect:\"none\",lineHeight:1},children:formatTime(m,props.use24h)})]},m);})}),/*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",height:lanesHeight},children:[ticks.map(m=>{const x=(m-rangeStart)/60*pixelsPerHour;const isHour=m%60===0;return /*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:0,left:x,width:1,height:lanesHeight,background:gridLine,opacity:isHour?.12:.05,pointerEvents:\"none\"}},`grid-${m}`);}),laned.map(({session,rect,lane})=>/*#__PURE__*/_jsx(TimelineCard,{session:session,rect:rect,lane:lane,laneRowHeight:LANE_H,props:props,selectedId:selectedSession?.id??null,onActivate:handleActivate},session.id))]})]})}),props.expandMode===\"panel\"&&/*#__PURE__*/_jsx(\"div\",{style:{padding:\"0 4px\"},children:/*#__PURE__*/_jsx(SessionDetailPanel,{session:selectedSession,props:props,onClose:handleClose,triggerRef:triggerRef})}),props.expandMode===\"popover\"&&/*#__PURE__*/_jsx(SessionPopover,{session:selectedSession,anchorEl:anchorEl,containerEl:outerRef.current,props:props,onClose:handleClose}),isInline&&selectedSession&&/*#__PURE__*/_jsx(\"div\",{style:{padding:\"0 4px\"},children:/*#__PURE__*/_jsx(InlineDetail,{session:selectedSession,props:props})})]});}// ─── 6. Main component ────────────────────────────────────────────────────────\nexport default function EventSchedule(props){const{days:daysProp,primaryColor,tabActiveColor,tabInactiveColor,tabTextActive,tabTextInactive,tabTrackColor,tabStyle,tabAlign,tabLabelFormat,defaultDay,backgroundColor,fontWeight}=props;// Overlay the per-day session arrays onto the days prop.\n// Always normalise sessions to [] so downstream code never sees undefined.\nconst flatDay1=props.sessionsDay1??[];const flatDay2=props.sessionsDay2??[];const flatOverrides=[flatDay1,flatDay2];const mergedDays=(daysProp??[]).map((d,i)=>{const base={...d,sessions:d.sessions??[]};const override=flatOverrides[i];return override&&override.length>0?{...base,sessions:override}:base;});// Guard: Framer serialises empty Day shells at publish time; fall back to\n// seed data whenever no sessions have been entered via the panel.\nconst totalSessions=mergedDays.reduce((sum,d)=>sum+(d.sessions?.length??0),0);const days=totalSessions>0?mergedDays:[SEED_DAY1,SEED_DAY2];// defaultDay is 1-based from the panel; clamp to valid range.\nconst initialIndex=Math.min(Math.max(0,(defaultDay??1)-1),Math.max(0,days.length-1));const[activeDayIndex,setActiveDayIndex]=useState(initialIndex);const safeIndex=Math.min(activeDayIndex,Math.max(0,days.length-1));const activeDay=days[safeIndex];const containerRef=useRef(null);const[containerWidth,setContainerWidth]=useState(0);useEffect(()=>{const element=containerRef.current;if(!element)return;const updateWidth=()=>{setContainerWidth(element.getBoundingClientRect().width);};updateWidth();if(typeof ResizeObserver===\"undefined\")return;const observer=new ResizeObserver(updateWidth);observer.observe(element);return()=>observer.disconnect();},[]);const isMobile=containerWidth>0&&containerWidth<640;// The panel id for the active tab's content region (ARIA)\nconst instanceId=useId();// ─────────────────────────────────────────────────────────────────────────\nreturn /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{display:\"flex\",flexDirection:\"column\",background:backgroundColor,fontFamily:\"Montserrat, sans-serif\",fontWeight,width:\"100%\",boxSizing:\"border-box\"},children:[/*#__PURE__*/_jsx(DayTabBar,{days:days,activeIndex:safeIndex,onChange:setActiveDayIndex,labelFormat:tabLabelFormat,tabStyle:tabStyle,tabAlign:tabAlign,trackColor:tabTrackColor,activeColor:tabActiveColor,inactiveColor:tabInactiveColor,textActive:tabTextActive,textInactive:tabTextInactive,fontWeight:fontWeight,prefersReduced:false}),/*#__PURE__*/_jsx(\"div\",{id:`tab-panel-${instanceId}-${safeIndex}`,role:\"tabpanel\",\"aria-labelledby\":`tab-${instanceId}-${safeIndex}`,style:{padding:\"8px 16px 16px\"},children:activeDay?isMobile?/*#__PURE__*/_jsx(SessionCards,{sessions:activeDay.sessions,props:props}):/*#__PURE__*/_jsx(ScheduleTable,{sessions:activeDay.sessions,props:props}):/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",height:120,color:primaryColor,opacity:.3,fontSize:13,fontFamily:\"Montserrat, sans-serif\"},children:\"No sessions\"})})]});}// ─── 7. Default props ─────────────────────────────────────────────────────────\nEventSchedule.defaultProps={days:[SEED_DAY1,SEED_DAY2],startHour:7,endHour:20,tickMinutes:30,use24h:true,pixelsPerHour:140,minCardWidth:110,tabLabelFormat:\"both\",colorLogistics:{background:\"#F1F3F5\",text:\"#495057\",accent:\"#868E96\"},colorRemarks:{background:\"#EDF2FF\",text:\"#3B5BDB\",accent:\"#4C6EF5\"},colorKeynote:{background:\"#D3F9D8\",text:\"#1B4332\",accent:\"#2F9E44\"},colorPanel:{background:\"#E6FCF5\",text:\"#087F5B\",accent:\"#12B886\"},colorShowcase:{background:\"#FFF9DB\",text:\"#7C4F00\",accent:\"#F59F00\"},colorLaunch:{background:\"#F3F0FF\",text:\"#5F3DC4\",accent:\"#7950F2\"},colorBreak:{background:\"#FFF5F5\",text:\"#C92A2A\",accent:\"#FA5252\"},primaryColor:\"#356854\",tabStyle:\"pill\",tabAlign:\"left\",tabTrackColor:\"#E8EDF0\",tabActiveColor:\"#356854\",tabInactiveColor:\"#E8EDF0\",tabTextActive:\"#FFFFFF\",tabTextInactive:\"#495057\",defaultDay:1,backgroundColor:\"#FFFFFF\",borderRadius:10,cardPadding:10,cardMinHeight:72,cardShadow:false,fontWeight:400,layoutMode:\"table\",laneRowHeight:72,rulerBg:\"#F7F8FA\",rulerTextColor:\"#356854\",gridLineColor:\"#356854\",showLaneLabels:true,expandMode:\"panel\",showSponsor:true,showTimeChip:true,showDescription:false,debugLayout:false,sessionsDay1:SEED_DAY1.sessions,sessionsDay2:SEED_DAY2.sessions};// ─── 8. Property controls ─────────────────────────────────────────────────────\nconst SESSION_OBJECT_CONTROLS={id:{type:ControlType.String,title:\"ID\",defaultValue:\"s-01\"},startTime:{type:ControlType.String,title:\"Start\",defaultValue:\"09:00\"},endTime:{type:ControlType.String,title:\"End\",defaultValue:\"09:30\"},title:{type:ControlType.String,title:\"Title\",defaultValue:\"Session\"},type:{type:ControlType.Enum,title:\"Type\",options:[\"logistics\",\"remarks\",\"keynote\",\"panel\",\"showcase\",\"launch\",\"break\"],optionTitles:[\"Logistics\",\"Remarks\",\"Keynote\",\"Panel\",\"Showcase\",\"Launch\",\"Break\"],defaultValue:\"remarks\"},sponsor:{type:ControlType.String,title:\"Sponsor\",defaultValue:\"\"},sponsorLogo:{type:ControlType.Image,title:\"Logo\"},description:{type:ControlType.String,title:\"Description\",defaultValue:\"\",displayTextArea:true},link:{type:ControlType.Link,title:\"Link\"},featured:{type:ControlType.Boolean,title:\"Featured\",defaultValue:false},track:{type:ControlType.String,title:\"Track\",defaultValue:\"\"}};addPropertyControls(EventSchedule,{// DAYS ────────────────────────────────────────────────────────────────────\ndays:{type:ControlType.Array,title:\"Days\",control:{type:ControlType.Object,controls:{label:{type:ControlType.String,title:\"Label\",defaultValue:\"Day 1\"},dateLabel:{type:ControlType.String,title:\"Date\",defaultValue:\"6 Oct\"}}}},// SESSIONS ────────────────────────────────────────────────────────────────\n// Framer cannot render Array-inside-Object-inside-Array, so each day's\n// sessions are exposed as independent top-level arrays pre-seeded with the\n// real conference programme. Add, edit, or remove entries directly.\nsessionsDay1:{type:ControlType.Array,title:\"Day 1 sessions\",control:{type:ControlType.Object,controls:SESSION_OBJECT_CONTROLS},defaultValue:SEED_DAY1.sessions.map(s=>({...s,description:s.description??\"\"}))},sessionsDay2:{type:ControlType.Array,title:\"Day 2 sessions\",control:{type:ControlType.Object,controls:SESSION_OBJECT_CONTROLS},defaultValue:SEED_DAY2.sessions.map(s=>({...s,description:s.description??\"\"}))},use24h:{type:ControlType.Boolean,title:\"24-hour clock\",defaultValue:true},// TABS ────────────────────────────────────────────────────────────────────\ndefaultDay:{type:ControlType.Number,title:\"Default day\",defaultValue:1,min:1,max:10,step:1,displayStepper:true},tabLabelFormat:{type:ControlType.Enum,title:\"Label format\",options:[\"label\",\"date\",\"both\"],optionTitles:[\"Day 1\",\"6 Oct\",\"Day 1 \\xb7 6 Oct\"],defaultValue:\"both\"},tabStyle:{type:ControlType.Enum,title:\"Tab style\",options:[\"pill\",\"underline\"],optionTitles:[\"Pill\",\"Underline\"],defaultValue:\"pill\"},tabAlign:{type:ControlType.Enum,title:\"Alignment\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Centre\",\"Right\"],defaultValue:\"left\"},tabTrackColor:{type:ControlType.Color,title:\"Track colour\",defaultValue:\"#E8EDF0\"},tabActiveColor:{type:ControlType.Color,title:\"Active colour\",defaultValue:\"#356854\"},tabTextActive:{type:ControlType.Color,title:\"Active text\",defaultValue:\"#FFFFFF\"},tabTextInactive:{type:ControlType.Color,title:\"Inactive text\",defaultValue:\"#495057\"},// CHROME ──────────────────────────────────────────────────────────────────\nprimaryColor:{type:ControlType.Color,title:\"Primary colour\",defaultValue:\"#356854\"},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FFFFFF\"},borderRadius:{type:ControlType.Number,title:\"Card radius\",defaultValue:10,min:0,max:32,step:1,displayStepper:true},fontWeight:{type:ControlType.Enum,title:\"Base weight\",options:[300,400,500,600],optionTitles:[\"Light\",\"Regular\",\"Medium\",\"SemiBold\"],defaultValue:400},showSponsor:{type:ControlType.Boolean,title:\"Show sponsor\",defaultValue:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"SessionType\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"LanedSession\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getDayRange\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"EventSchedule\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"getSessionRect\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"formatTime\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"formatRange\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"formatDuration\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseTime\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"Day\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SessionRect\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DayRange\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"Session\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"assignLanes\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Program_Schedule.map"],"mappings":"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"}