@jorgerdz/timeview 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +21 -0
  3. package/README.md +263 -0
  4. package/dist/cli/timeview.js +6710 -0
  5. package/dist/timeview.cjs +1 -0
  6. package/dist/timeview.js +5667 -0
  7. package/dist/tokens.css +67 -0
  8. package/dist/types/timeview/BandedTimeline.d.ts +11 -0
  9. package/dist/types/timeview/BandedTimeline.d.ts.map +1 -0
  10. package/dist/types/timeview/DensityHeatmap.d.ts +11 -0
  11. package/dist/types/timeview/DensityHeatmap.d.ts.map +1 -0
  12. package/dist/types/timeview/LaneCalendar.d.ts +11 -0
  13. package/dist/types/timeview/LaneCalendar.d.ts.map +1 -0
  14. package/dist/types/timeview/MetricTimeline.d.ts +8 -0
  15. package/dist/types/timeview/MetricTimeline.d.ts.map +1 -0
  16. package/dist/types/timeview/SpanMatrix.d.ts +8 -0
  17. package/dist/types/timeview/SpanMatrix.d.ts.map +1 -0
  18. package/dist/types/timeview/config.d.ts +22 -0
  19. package/dist/types/timeview/config.d.ts.map +1 -0
  20. package/dist/types/timeview/core/aggregate.d.ts +113 -0
  21. package/dist/types/timeview/core/aggregate.d.ts.map +1 -0
  22. package/dist/types/timeview/core/calendar.d.ts +27 -0
  23. package/dist/types/timeview/core/calendar.d.ts.map +1 -0
  24. package/dist/types/timeview/core/intervals.d.ts +8 -0
  25. package/dist/types/timeview/core/intervals.d.ts.map +1 -0
  26. package/dist/types/timeview/core/labels.d.ts +5 -0
  27. package/dist/types/timeview/core/labels.d.ts.map +1 -0
  28. package/dist/types/timeview/core/metric.d.ts +58 -0
  29. package/dist/types/timeview/core/metric.d.ts.map +1 -0
  30. package/dist/types/timeview/core/time.d.ts +22 -0
  31. package/dist/types/timeview/core/time.d.ts.map +1 -0
  32. package/dist/types/timeview/dashboard.d.ts +17 -0
  33. package/dist/types/timeview/dashboard.d.ts.map +1 -0
  34. package/dist/types/timeview/data.d.ts +21 -0
  35. package/dist/types/timeview/data.d.ts.map +1 -0
  36. package/dist/types/timeview/export.d.ts +14 -0
  37. package/dist/types/timeview/export.d.ts.map +1 -0
  38. package/dist/types/timeview/index.d.ts +28 -0
  39. package/dist/types/timeview/index.d.ts.map +1 -0
  40. package/dist/types/timeview/registry.d.ts +285 -0
  41. package/dist/types/timeview/registry.d.ts.map +1 -0
  42. package/dist/types/timeview/shared/Caption.d.ts +9 -0
  43. package/dist/types/timeview/shared/Caption.d.ts.map +1 -0
  44. package/dist/types/timeview/shared/EmptyState.d.ts +16 -0
  45. package/dist/types/timeview/shared/EmptyState.d.ts.map +1 -0
  46. package/dist/types/timeview/shared/Legend.d.ts +10 -0
  47. package/dist/types/timeview/shared/Legend.d.ts.map +1 -0
  48. package/dist/types/timeview/shared/Tooltip.d.ts +15 -0
  49. package/dist/types/timeview/shared/Tooltip.d.ts.map +1 -0
  50. package/dist/types/timeview/shared/useMeasuredWidth.d.ts +2 -0
  51. package/dist/types/timeview/shared/useMeasuredWidth.d.ts.map +1 -0
  52. package/dist/types/timeview/types.d.ts +158 -0
  53. package/dist/types/timeview/types.d.ts.map +1 -0
  54. package/docs/AGENT-USAGE.md +93 -0
  55. package/docs/COMPATIBILITY.md +134 -0
  56. package/docs/STUDIO.md +41 -0
  57. package/examples/README.md +21 -0
  58. package/examples/configs/bandedTimeline.json +31 -0
  59. package/examples/configs/densityHeatmap.json +33 -0
  60. package/examples/configs/laneCalendar.json +31 -0
  61. package/examples/configs/metricTimeline.json +51 -0
  62. package/examples/configs/spanMatrix.json +31 -0
  63. package/package.json +94 -0
  64. package/render.html +12 -0
  65. package/src/render.tsx +67 -0
  66. package/src/styles/tokens.css +67 -0
  67. package/src/timeview/BandedTimeline.tsx +620 -0
  68. package/src/timeview/DensityHeatmap.tsx +513 -0
  69. package/src/timeview/LaneCalendar.tsx +496 -0
  70. package/src/timeview/MetricTimeline.tsx +993 -0
  71. package/src/timeview/SpanMatrix.tsx +721 -0
  72. package/src/timeview/config.ts +399 -0
  73. package/src/timeview/core/aggregate.ts +317 -0
  74. package/src/timeview/core/calendar.ts +81 -0
  75. package/src/timeview/core/intervals.ts +52 -0
  76. package/src/timeview/core/labels.ts +19 -0
  77. package/src/timeview/core/metric.ts +263 -0
  78. package/src/timeview/core/time.ts +103 -0
  79. package/src/timeview/dashboard.ts +80 -0
  80. package/src/timeview/data.ts +242 -0
  81. package/src/timeview/export.ts +48 -0
  82. package/src/timeview/index.ts +106 -0
  83. package/src/timeview/registry.ts +207 -0
  84. package/src/timeview/shared/Caption.tsx +40 -0
  85. package/src/timeview/shared/EmptyState.tsx +90 -0
  86. package/src/timeview/shared/Legend.tsx +67 -0
  87. package/src/timeview/shared/Tooltip.tsx +59 -0
  88. package/src/timeview/shared/useMeasuredWidth.ts +21 -0
  89. package/src/timeview/types.ts +159 -0
  90. package/vite.config.ts +11 -0
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react"),t=require("react/jsx-runtime");var n=864e5;function r(e){return e instanceof Date?e:new Date(e)}function i(e){let t=r(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())}function a(e){let t=[];if((e.events||[]).forEach(e=>t.push(new Date(e.at).getTime())),(e.intervals||[]).forEach(e=>{t.push(new Date(e.range.start).getTime()),t.push(new Date(e.range.end).getTime())}),(e.series?.samples||[]).forEach(e=>{t.push(new Date(e.at).getTime())}),!t.length){let e=Date.UTC(2026,0,5);return[e,e+24*n]}let r=Math.min(...t),i=Math.max(...t),a=e=>{let t=new Date(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())};return[a(r),a(i)+n]}function o(e,t,n){let i=r(e).getTime(),a=r(t).getTime(),o=Math.max(1,a-i),s=(e=>(r(e).getTime()-i)/o*n);return s.invert=e=>new Date(i+e/n*o),s.domain=[i,a],s.width=n,s}function s(e,t){let a=[],o=i(e),s=r(t).getTime();for(;o<=s;)a.push(new Date(o)),o+=n;return a}function c(e,t){let a=[],o=new Date(i(e)),s=(o.getUTCDay()+6)%7;o=new Date(o.getTime()-s*n);let c=r(t).getTime();for(;o.getTime()<=c;){let e=new Date(o.getTime()),t=new Date(o.getTime()+7*n);a.push({start:e,end:t}),o=t}return a}var l=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],u=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],d={day:e=>r(e).getUTCDate(),dow:e=>u[r(e).getUTCDay()],mon:e=>l[r(e).getUTCMonth()],monDay:e=>`${l[r(e).getUTCMonth()]} ${r(e).getUTCDate()}`,full:e=>`${u[r(e).getUTCDay()]}, ${l[r(e).getUTCMonth()]} ${r(e).getUTCDate()}`,time:e=>{let t=r(e),n=t.getUTCHours(),i=t.getUTCMinutes();if(n===0&&i===0)return null;let a=n>=12?`PM`:`AM`;return`${(n+11)%12+1}:${String(i).padStart(2,`0`)} ${a} UTC`},span:(e,t)=>{let r=Math.max(1,Math.round((i(t)-i(e))/n));return r===1?`1 day`:`${r} days`}};function f(e){let t=[...e].sort((e,t)=>e._s-t._s),n=[];return t.forEach(e=>{let t=-1;for(let r=0;r<n.length;r++)if(e._s>=n[r]){t=r;break}t===-1&&(t=n.length,n.push(0)),n[t]=e._e,e._lane=t}),n.length}function p(e){let t=[];e.forEach(e=>{t.push([e._s,1]),t.push([e._e,-1])}),t.sort((e,t)=>e[0]-t[0]||t[1]-e[1]);let n=[],r=0,i=null;return t.forEach(([e,t])=>{let a=r;r+=t,a<2&&r>=2&&(i=e),a>=2&&r<2&&i!=null&&(n.push([i,e]),i=null)}),n}function m(e,t){let n={};return(e.labels||[]).forEach((e,r)=>{n[e.id]=t[r%t.length]}),n}function h(e,t,n=`#ffffff`){return`color-mix(in srgb, ${e} ${t}%, ${n})`}function g(e,t){return(e.labels||[]).find(e=>e.id===t)?.name||t||``}function _({position:e,text:n,narrow:r}){return(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-font)`,fontSize:r?12:13,lineHeight:1.5,color:`var(--tv-ink-3)`,padding:e===`top`?`0 0 14px`:`14px 0 0`,borderTop:e===`bottom`?`1px solid var(--tv-line)`:`none`,marginTop:e===`bottom`?4:0,maxWidth:760},children:[(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10.5,letterSpacing:`.06em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`,marginRight:8},children:`Note`}),n]})}function v({title:e,description:n,icon:r=`calendar`,variant:i=`overlay`,background:a=!1,bordered:o=!1,height:s=200,narrow:c=!1}){let l=i===`panel`;return(0,t.jsxs)(`div`,{style:{position:l?`relative`:`absolute`,inset:l?void 0:0,height:l?s:void 0,border:o?`1px solid var(--tv-grid)`:`none`,borderRadius:o?`var(--tv-r-md)`:void 0,display:`flex`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,gap:n?7:6,padding:c?16:20,pointerEvents:`none`,textAlign:`center`,background:a?`rgba(255,255,255,0.55)`:void 0},children:[(0,t.jsx)(y,{icon:r,size:r===`grid`||r===`matrix`?28:30}),(0,t.jsx)(`div`,{style:{fontSize:c?13.5:14,fontWeight:600,color:`var(--tv-ink-3)`,lineHeight:1.25},children:e}),n&&(0,t.jsx)(`div`,{style:{fontSize:12.5,color:`var(--tv-ink-4)`,lineHeight:1.35,maxWidth:320},children:n})]})}function y({icon:e,size:n}){return(0,t.jsx)(`svg`,{width:n,height:n,viewBox:`0 0 24 24`,fill:`none`,stroke:`var(--tv-ink-5)`,strokeWidth:`1.5`,"aria-hidden":`true`,children:e===`trend`?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`path`,{d:`M3 17l5-6 4 3 5-7`}),(0,t.jsx)(`path`,{d:`M3 21h18`})]}):e===`grid`?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`rect`,{x:`3`,y:`3`,width:`7`,height:`7`,rx:`1.5`}),(0,t.jsx)(`rect`,{x:`14`,y:`3`,width:`7`,height:`7`,rx:`1.5`}),(0,t.jsx)(`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1.5`}),(0,t.jsx)(`rect`,{x:`14`,y:`14`,width:`7`,height:`7`,rx:`1.5`})]}):e===`matrix`?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`rect`,{x:`3`,y:`5`,width:`18`,height:`14`,rx:`2`}),(0,t.jsx)(`path`,{d:`M3 10h18M8 14h5`})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`rect`,{x:`3`,y:`5`,width:`18`,height:`14`,rx:`2`}),(0,t.jsx)(`path`,{d:`M3 10h18M8 3v4M16 3v4`})]})})}function b({labels:e,colors:n,position:r,vertical:i=!1}){return(0,t.jsx)(`div`,{style:{display:`flex`,flexDirection:i?`column`:`row`,flexWrap:`wrap`,gap:i?8:`8px 16px`,alignItems:i?`stretch`:`center`,padding:i?0:r===`top`?`0 0 14px`:`14px 0 2px`},children:e.map(e=>{let r=n[e.id];return(0,t.jsxs)(`div`,{style:{display:`inline-flex`,alignItems:`center`,gap:8,minWidth:0,flex:`none`,maxWidth:i?`100%`:240},children:[(0,t.jsx)(`span`,{style:{width:11,height:11,borderRadius:3,background:r,boxShadow:`inset 0 0 0 1px rgba(0,0,0,0.14)`,flex:`none`}}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:12.5,color:`var(--tv-ink-2)`,fontWeight:500,lineHeight:1.3,whiteSpace:i?`normal`:`nowrap`,overflow:i?`visible`:`hidden`,textOverflow:i?`clip`:`ellipsis`},children:e.name})]},e.id)})})}function x({left:e,top:n,width:r,color:i,label:a,title:o,line:s,sub:c,kindLabel:l,isEvent:u}){let d={width:9,height:9,borderRadius:u?1:`50%`,background:u?`#fff`:i,border:u?`2px solid ${i}`:`none`,transform:u?`rotate(45deg)`:`none`,flex:`none`};return(0,t.jsx)(`div`,{"data-tv-transient":`tooltip`,style:{position:`absolute`,left:e,top:n,width:r,pointerEvents:`none`,zIndex:50},children:(0,t.jsxs)(`div`,{style:{background:`#fff`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-md)`,boxShadow:`var(--tv-shadow-pop)`,padding:`10px 13px`},children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:7,marginBottom:5},children:[(0,t.jsx)(`span`,{style:d}),(0,t.jsxs)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.05em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`},children:[l,` · `,a]})]}),(0,t.jsx)(`div`,{style:{fontSize:14,fontWeight:600,color:`var(--tv-ink)`,marginBottom:4,lineHeight:1.3},children:o}),(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-3)`,lineHeight:1.45},children:s}),(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-4)`,marginTop:2},children:c})]})})}function ee(t=1200){let n=(0,e.useRef)(null),[r,i]=(0,e.useState)(t);return(0,e.useLayoutEffect)(()=>{let e=n.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e)i(t.contentRect.width)});return t.observe(e),i(e.getBoundingClientRect().width),()=>t.disconnect()},[]),[n,r]}function S(e,t){let[n,r]=a(e),i=(e.intervals||[]).map(e=>({...e,_s:new Date(e.range.start).getTime(),_e:new Date(e.range.end).getTime(),_lane:0})),o;return t===`lanes`?(i.sort((e,t)=>e._s-t._s).forEach((e,t)=>e._lane=t),o=i.length):t===`layered`?(i.forEach(e=>e._lane=0),o=1):o=f(i),{t0:n,t1:r,intervals:i,events:(e.events||[]).map(e=>({...e,_t:new Date(e.at).getTime()})),laneCount:o,spans:t===`hatched`?p(i):[]}}var C={comfortable:{laneH:44,gap:8,pad:24,axisH:46,weekH:24,railH:30,band:14,dot:8,layeredH:120},compact:{laneH:30,gap:5,pad:16,axisH:38,weekH:20,railH:24,band:12.5,dot:7,layeredH:92}};function w({dataset:r,spec:i,palette:a}){let[l,u]=ee(),[f,p]=(0,e.useState)(null),[y,w]=(0,e.useState)(null),T=C[i.density||`comfortable`]||C.comfortable,E=i.overlapMode||`lanes`,D=i.events?.showLabels!==!1,O=i.legend?.position||`bottom`,k=i.caption?.position||`bottom`,A=i.caption?.text||``,te=O!==`off`&&(r.labels||[]).length>0,j=k!==`off`&&!!A,M=e=>{let t=l.current.getBoundingClientRect();return{mx:e.clientX-t.left,my:e.clientY-t.top}},N=(0,e.useMemo)(()=>S(r,E),[r,E]),P=(0,e.useMemo)(()=>m(r,a),[r,a]),F=N.intervals.length===0&&N.events.length===0,I=O===`right`?Math.min(230,Math.max(170,u*.22)):0,L=Math.max(120,u-T.pad*2-(I?I+T.pad:0)),R=o(N.t0,N.t1,L),z=s(N.t0,N.t1).filter(e=>e.getTime()<N.t1),B=c(N.t0,N.t1),V=L/Math.max(1,z.length),H=V>=30?1:V>=18?2:V>=11?3:7,U=V<22,W=(0,e.useMemo)(()=>{if(E!==`layered`)return{rows:{},count:1};let e={},t=[];return[...N.intervals].sort((e,t)=>e._s-t._s).forEach(n=>{let r=R(n._s)+6,i=26+n.title.length*6.6,a=t.findIndex(e=>r>=e+8);a===-1&&(a=t.length),t[a]=r+i,e[n.id]=a}),{rows:e,count:Math.max(1,t.length)}},[E,N,L]),G=F?150:E===`layered`?Math.max(96,W.count*26+26):Math.max(T.laneH,N.laneCount*T.laneH),K=G+T.gap;return(0,t.jsxs)(`div`,{ref:l,className:`tv-component`,style:{background:`var(--tv-canvas)`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-lg)`,boxShadow:`var(--tv-shadow-1)`,padding:T.pad,fontFamily:`var(--tv-font)`,color:`var(--tv-ink)`,position:`relative`,width:`100%`,overflow:`hidden`},children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`baseline`,justifyContent:`space-between`,gap:12,marginBottom:k===`top`||O===`top`?14:16,flexWrap:`wrap`},children:[(0,t.jsx)(`div`,{style:{minWidth:0},children:(0,t.jsx)(`div`,{style:{fontSize:U?15:17,fontWeight:600,letterSpacing:`-0.01em`,color:`var(--tv-ink)`,lineHeight:1.25},children:i.title||r.meta?.title})}),(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-4)`,whiteSpace:`nowrap`,flex:`none`},children:[d.monDay(N.t0),` – `,d.monDay(new Date(N.t1-n))]})]}),j&&k===`top`&&(0,t.jsx)(_,{position:k,text:A,narrow:U}),te&&O===`top`&&(0,t.jsx)(b,{labels:r.labels||[],colors:P,position:O}),(0,t.jsxs)(`div`,{style:{display:`flex`,gap:T.pad,alignItems:`stretch`},children:[(0,t.jsxs)(`div`,{style:{width:L,flex:`none`},children:[(0,t.jsx)(()=>(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`div`,{style:{position:`relative`,height:T.weekH,marginBottom:4},children:B.map((e,n)=>{let r=Math.max(0,R(e.start)),i=Math.min(L,R(e.end));if(i-r<4)return null;let a=e.start.getTime()<N.t0?new Date(N.t0):e.start;return(0,t.jsx)(`div`,{style:{position:`absolute`,left:r,width:i-r,top:0,bottom:0,background:n%2?`var(--tv-rail-2)`:`var(--tv-rail)`,borderRadius:5,display:`flex`,alignItems:`center`,paddingLeft:9,overflow:`hidden`},children:(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10.5,fontWeight:500,color:`var(--tv-ink-3)`,letterSpacing:`.02em`,whiteSpace:`nowrap`},children:i-r>78&&!U?`Week of ${d.monDay(a)}`:d.monDay(a)})},n)})}),(0,t.jsx)(`div`,{style:{position:`relative`,height:T.axisH},children:z.map((e,n)=>{let r=R(e),i=(e.getUTCDay()+6)%7==0,a=n%H===0;return(0,t.jsxs)(`div`,{style:{position:`absolute`,left:r,top:0},children:[(0,t.jsx)(`div`,{style:{width:1,height:7,background:i?`var(--tv-grid-week)`:`var(--tv-grid)`}}),a&&(0,t.jsxs)(`div`,{style:{position:`absolute`,left:0,top:9,transform:`translateX(-50%)`,textAlign:`center`},children:[(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:U?11:12.5,fontWeight:600,color:`var(--tv-ink-2)`,lineHeight:1},children:d.day(e)}),!U&&(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-font)`,fontSize:10,color:`var(--tv-ink-4)`,marginTop:3,lineHeight:1},children:d.dow(e)})]})]},n)})})]}),{}),(0,t.jsxs)(`div`,{style:{position:`relative`,width:L,height:K,marginTop:6},onMouseLeave:()=>p(e=>e&&e.sticky?e:null),children:[z.map((e,n)=>{let r=(e.getUTCDay()+6)%7==0;return(0,t.jsx)(`div`,{style:{position:`absolute`,left:R(e),top:0,bottom:0,width:1,background:r?`var(--tv-grid-week)`:`var(--tv-grid)`}},n)}),(0,t.jsx)(`div`,{style:{position:`absolute`,left:L-.5,top:0,bottom:0,width:1,background:`var(--tv-grid-week)`}}),N.spans.map(([e,n],r)=>(0,t.jsx)(`div`,{style:{position:`absolute`,left:R(e),width:R(n)-R(e),top:0,bottom:0,background:`repeating-linear-gradient(135deg, rgba(21,24,30,0.05) 0 5px, transparent 5px 11px)`,borderLeft:`1px dashed var(--tv-ink-5)`,borderRight:`1px dashed var(--tv-ink-5)`,pointerEvents:`none`}},`sp`+r)),N.events.map(e=>(0,t.jsx)(`div`,{style:{position:`absolute`,left:R(e._t),top:-2,bottom:0,width:1,background:`var(--tv-ink-5)`,pointerEvents:`none`}},`hl`+e.id)),N.intervals.map(e=>{let n=P[e.labelIds?.[0]??``]||`#64748b`,r=R(e._s),i=Math.max(3,R(e._e)-R(e._s)),a=E===`layered`,o=a?0:e._lane*T.laneH,s=a?G:T.laneH-T.gap,c=f?.id===e.id,l=y===e.id,u=i<54,m=[a?null:`inset 3px 0 0 0 ${n}`,l?`var(--tv-focus-ring)`:c?`var(--tv-shadow-pop)`:null].filter(Boolean).join(`, `)||`none`;return(0,t.jsxs)(`div`,{tabIndex:0,role:`button`,onMouseEnter:t=>p({kind:`interval`,id:e.id,iv:e,c:n,...M(t)}),onMouseMove:t=>p({kind:`interval`,id:e.id,iv:e,c:n,...M(t)}),onFocus:()=>p({kind:`interval`,id:e.id,iv:e,c:n,mx:T.pad+Math.min(r+90,r+i/2),my:96}),onBlur:()=>p(null),onClick:()=>w(t=>t===e.id?null:e.id),style:{position:`absolute`,left:r,width:i,top:o,height:s,background:a?h(n,30,`#ffffff`):h(n,13,`#ffffff`),opacity:a?.62:1,mixBlendMode:a?`multiply`:`normal`,border:`1px solid ${c||l?n:h(n,34,`#ffffff`)}`,borderRadius:`var(--tv-r-sm)`,cursor:`pointer`,outline:`none`,boxShadow:m,transition:`box-shadow var(--tv-fast) var(--tv-ease), border-color var(--tv-fast) var(--tv-ease), background var(--tv-fast)`,display:`flex`,alignItems:`center`,gap:7,padding:a?`0 8px`:`0 9px`,overflow:`hidden`,zIndex:c||l?5:1},children:[!a&&(0,t.jsx)(`span`,{style:{width:T.dot,height:T.dot,borderRadius:`50%`,background:n,flex:`none`}}),!a&&!u&&(0,t.jsx)(`span`,{style:{fontSize:T.band,fontWeight:500,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`,flex:`1 1 auto`,minWidth:0},children:e.title}),!a&&!u&&!U&&i>130&&(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10.5,color:`var(--tv-ink-4)`,flex:`none`,whiteSpace:`nowrap`,letterSpacing:`.01em`},children:d.span(e._s,e._e)})]},e.id)}),E===`layered`&&N.intervals.map(e=>{let n=P[e.labelIds?.[0]??``]||`#64748b`,r=R(e._s),i=W.rows[e.id]||0;return(0,t.jsxs)(`div`,{style:{position:`absolute`,left:r+5,top:8+i*26,display:`inline-flex`,alignItems:`center`,gap:6,padding:`2px 8px 2px 6px`,background:`rgba(255,255,255,0.92)`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-pill)`,boxShadow:`var(--tv-shadow-1)`,pointerEvents:`none`,maxWidth:Math.max(60,L-r-8)},children:[(0,t.jsx)(`span`,{style:{width:7,height:7,borderRadius:`50%`,background:n,flex:`none`}}),(0,t.jsx)(`span`,{style:{fontSize:11.5,fontWeight:500,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:e.title})]},`ll`+e.id)}),F&&(0,t.jsx)(v,{title:`No events or intervals in this window`,description:`Add intervals or milestones to see them on the timeline.`,icon:`calendar`,narrow:U})]}),N.events.length>0&&(0,t.jsx)(`div`,{style:{position:`relative`,width:L,height:D?T.railH+14:T.railH,marginTop:8,borderTop:`1px solid var(--tv-line)`,paddingTop:10},children:N.events.map(n=>{let r=P[n.labelIds?.[0]??``]||`var(--tv-ink-2)`,i=R(n._t),a=f?.id===n.id,o=Math.max(46,Math.min(L-46,i)),s=(e,t)=>p({kind:`event`,id:n.id,ev:n,c:r,...t||M(e)});return(0,t.jsxs)(e.Fragment,{children:[(0,t.jsx)(`div`,{tabIndex:0,onMouseEnter:e=>s(e),onMouseMove:e=>s(e),onFocus:()=>s(null,{mx:T.pad+i,my:K+120}),onBlur:()=>p(null),style:{position:`absolute`,left:i,top:0,transform:`translateX(-50%)`,cursor:`pointer`,outline:`none`,padding:3},children:(0,t.jsx)(`span`,{style:{display:`block`,width:11,height:11,transform:`rotate(45deg)`,background:`#fff`,border:`2px solid ${r}`,borderRadius:2,boxShadow:a?`0 0 0 4px ${h(r,18,`#ffffff`)}`:`none`,transition:`box-shadow var(--tv-fast)`}})}),D&&(0,t.jsx)(`span`,{style:{position:`absolute`,left:o,top:22,transform:`translateX(-50%)`,fontSize:11,fontWeight:500,color:a?`var(--tv-ink)`:`var(--tv-ink-2)`,whiteSpace:`nowrap`,textAlign:`center`,pointerEvents:`none`},children:n.title})]},n.id)})})]}),te&&O===`right`&&(0,t.jsxs)(`div`,{style:{width:I,flex:`none`,paddingTop:T.weekH+6},children:[(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.08em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`,marginBottom:12},children:`Legend`}),(0,t.jsx)(b,{labels:r.labels||[],colors:P,position:O,vertical:!0})]})]}),te&&O===`bottom`&&(0,t.jsx)(b,{labels:r.labels||[],colors:P,position:O}),j&&k===`bottom`&&(0,t.jsx)(_,{position:k,text:A,narrow:U}),f&&(()=>{let e=f.kind===`event`,n=e?f.ev:f.iv,i=e?d.full(f.ev._t):`${d.full(f.iv._s)} → ${d.full(new Date(f.iv._e))}`,a=e?d.time(f.ev._t)||`All-day milestone`:d.span(f.iv._s,f.iv._e);return(0,t.jsx)(x,{left:Math.max(8,Math.min(u-234-8,f.mx-234/2)),top:Math.max(8,f.my-96),width:234,color:f.c,label:g(r,n.labelIds?.[0]),title:n.title,line:i,sub:a,kindLabel:e?`Milestone`:`Interval`,isEvent:e})})()]})}function T(e){return e instanceof Date?e:new Date(e)}function E(e){let t=T(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())}function D(e,t){return c(e,t).map((e,t)=>{let r=[];for(let t=0;t<7;t++)r.push(new Date(e.start.getTime()+t*n));return{index:t,start:e.start,end:e.end,days:r}})}function O(e,t){let r=E(e);for(let e of t){let t=E(e.start),i=Math.round((r-t)/n);if(i>=0&&i<7)return{wi:e.index,col:i}}return null}function k(e,t,r){let i=E(e),a=E(t),o=[];return r.forEach(e=>{let t=E(e.start),r=t+6*n,s=Math.max(i,t),c=Math.min(a,r);s>c||o.push({wi:e.index,c0:Math.round((s-t)/n),c1:Math.round((c-t)/n),startsHere:i>=t&&i<=r,endsHere:a>=t&&a<=r})}),o}function A(e,t){return E(e)===E(t)}var te=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],j=[`M`,`T`,`W`,`T`,`F`,`S`,`S`],M={comfortable:{pad:22,headH:30,laneH:26,milestoneH:26,vgap:5,chip:12.5,dot:7,diamond:11},compact:{pad:16,headH:25,laneH:21,milestoneH:22,vgap:4,chip:11.5,dot:6,diamond:10}};function N(e){if(e==null)return null;if(e===`auto`){let e=new Date;return Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())}return E(e)}function P(e,t){let[n,r]=a(e),i=D(n,r),o=(e.intervals||[]).map(e=>({...e,_s:new Date(e.range.start).getTime(),_e:new Date(e.range.end).getTime(),_lane:0})),s;if(t===`category`){let t={};(e.labels||[]).forEach((e,n)=>{t[e.id]=n}),o.forEach(e=>{e._lane=t[e.labelIds?.[0]||``]??0}),s=Math.max(1,(e.labels||[]).length)}else s=Math.max(1,f(o));let c=(e.events||[]).map(e=>({...e,_t:new Date(e.at).getTime()})),l=i.map(e=>({week:e,segs:[],events:[],maxLane:-1}));return o.forEach(e=>{k(e._s,e._e,i).forEach(t=>{l[t.wi].segs.push({...t,iv:e}),l[t.wi].maxLane=Math.max(l[t.wi].maxLane,e._lane)})}),c.forEach(e=>{let t=O(e._t,i);t&&l[t.wi].events.push({ev:e,col:t.col})}),{t0:n,t1:r,weeks:i,perWeek:l,intervals:o,events:c,laneCount:s}}function F({dataset:r,spec:i,palette:a}){let[o,s]=ee(),[c,l]=(0,e.useState)(null),[u,f]=(0,e.useState)(null),p=M[i.density||`comfortable`]||M.comfortable,y=i.laneMode||`packed`,S=i.events?.showLabels!==!1,C=i.legend?.position||`bottom`,w=i.caption?.position||`bottom`,T=N(i.today),D=s<560,O=s<430,k=C===`right`&&D?`bottom`:C,A=k!==`off`&&(r.labels||[]).length>0,F=i.caption?.text||``,I=w!==`off`&&!!F,L=(0,e.useMemo)(()=>P(r,y),[r,y]),R=(0,e.useMemo)(()=>m(r,a),[r,a]),z=L.intervals.length===0&&L.events.length===0,B=k===`right`?Math.min(220,Math.max(168,s*.2)):0,V=Math.max(120,s-p.pad*2-(B?B+p.pad:0)),H=V/7,U=e=>{let t=E(e);return t>=L.t0&&t<L.t1},W=e=>{let t=o.current.getBoundingClientRect();return{mx:e.clientX-t.left,my:e.clientY-t.top}},G=()=>(0,t.jsx)(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(7, 1fr)`,width:V,borderBottom:`1px solid var(--tv-grid-week)`,marginBottom:2},children:te.map((e,n)=>(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:O?10:11,fontWeight:600,letterSpacing:`.04em`,color:n>=5?`var(--tv-ink-4)`:`var(--tv-ink-3)`,textTransform:`uppercase`,padding:`0 0 7px 7px`,textAlign:`left`},children:O?j[n]:e},n))}),K=({pw:e,last:n})=>{let{week:r,segs:i,events:a,maxLane:o}=e,s=Math.max(0,o+1),m=a.length>0,g=(m?p.milestoneH:0)+s*p.laneH+(s||m?p.vgap:0);return(0,t.jsxs)(`div`,{style:{position:`relative`,width:V,borderBottom:n?`none`:`1px solid var(--tv-grid-week)`},children:[(0,t.jsx)(`div`,{style:{position:`absolute`,inset:0,display:`grid`,gridTemplateColumns:`repeat(7, 1fr)`,pointerEvents:`none`},children:r.days.map((e,n)=>{let r=!U(e);return(0,t.jsx)(`div`,{style:{borderLeft:n===0?`none`:`1px solid var(--tv-grid)`,background:r?`transparent`:n>=5?`var(--tv-rail)`:`transparent`}},n)})}),(0,t.jsx)(`div`,{style:{position:`relative`,display:`grid`,gridTemplateColumns:`repeat(7, 1fr)`,height:p.headH,alignItems:`start`},children:r.days.map((e,n)=>{let i=!U(e),a=T!=null&&E(e)===T,o=e.getUTCDate();return(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`baseline`,gap:5,padding:`6px 0 0 7px`,minWidth:0},children:[(o===1||r.index===0&&n===0)&&!O&&(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,fontWeight:600,color:i?`var(--tv-ink-5)`:`var(--tv-accent)`,letterSpacing:`.02em`},children:d.mon(e)}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:O?11.5:12.5,fontWeight:600,lineHeight:1,letterSpacing:`.01em`,color:i?`var(--tv-ink-5)`:a?`#fff`:`var(--tv-ink-2)`,background:a?`var(--tv-accent)`:`transparent`,borderRadius:`var(--tv-r-pill)`,padding:a?`3px 6px`:0,margin:a?`-3px 0`:0,boxShadow:a?`0 1px 2px rgba(79,70,229,.35)`:`none`},children:o})]},n)})}),g>0&&(0,t.jsxs)(`div`,{style:{position:`relative`,width:V,height:g,marginBottom:p.vgap},children:[m&&a.map(({ev:e,col:n})=>{let r=R[e.labelIds?.[0]||``]||`var(--tv-ink-2)`,i=c?.id===e.id,a=u===e.id,o=n*H;return(0,t.jsxs)(`div`,{tabIndex:0,role:`button`,"aria-label":`Milestone: ${e.title}, ${d.full(e._t)}`,onMouseEnter:t=>l({kind:`event`,id:e.id,ev:e,c:r,...W(t)}),onMouseMove:t=>l({kind:`event`,id:e.id,ev:e,c:r,...W(t)}),onFocus:()=>l({kind:`event`,id:e.id,ev:e,c:r,mx:o+60,my:70}),onMouseLeave:()=>l(null),onBlur:()=>l(null),onClick:()=>f(t=>t===e.id?null:e.id),style:{position:`absolute`,left:o,top:0,width:H,height:p.milestoneH,display:`flex`,alignItems:`center`,gap:6,padding:`0 4px 0 7px`,cursor:`pointer`,outline:`none`,borderRadius:`var(--tv-r-sm)`,boxShadow:a?`var(--tv-focus-ring)`:`none`,minWidth:0},children:[(0,t.jsx)(`span`,{style:{width:p.diamond,height:p.diamond,transform:`rotate(45deg)`,flex:`none`,background:`#fff`,border:`2px solid ${r}`,borderRadius:2,boxShadow:i?`0 0 0 4px ${h(r,18)}`:`0 1px 1px rgba(16,24,40,.12)`,transition:`box-shadow var(--tv-fast) var(--tv-ease)`}}),S&&!O&&(0,t.jsx)(`span`,{style:{fontSize:p.chip-.5,fontWeight:500,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`,flex:`1 1 auto`,minWidth:0},children:e.title})]},`m`+e.id)}),i.map((e,n)=>{let r=e.iv,i=R[r.labelIds?.[0]||``]||`#64748b`,a=e.c0*H+2,o=Math.max(10,(e.c1-e.c0+1)*H-4),s=(m?p.milestoneH:0)+r._lane*p.laneH,g=p.laneH-3,_=c?.id===r.id,v=u===r.id,y=o<46||O,b=!e.startsHere,x=!e.endsHere,ee=[e.startsHere?`inset 3px 0 0 0 ${i}`:null,v?`var(--tv-focus-ring)`:_?`var(--tv-shadow-pop)`:null].filter(Boolean).join(`, `)||`none`;return(0,t.jsxs)(`div`,{tabIndex:0,role:`button`,"aria-label":`${r.title}, ${d.full(r._s)} to ${d.full(new Date(r._e))}`,onMouseEnter:e=>l({kind:`interval`,id:r.id,iv:r,c:i,...W(e)}),onMouseMove:e=>l({kind:`interval`,id:r.id,iv:r,c:i,...W(e)}),onFocus:()=>l({kind:`interval`,id:r.id,iv:r,c:i,mx:a+Math.min(90,o/2),my:s+150}),onMouseLeave:()=>l(null),onBlur:()=>l(null),onClick:()=>f(e=>e===r.id?null:r.id),style:{position:`absolute`,left:a,width:o,top:s,height:g,background:h(i,13),display:`flex`,alignItems:`center`,gap:6,padding:`0 ${y?5:8}px 0 ${e.startsHere?y?7:9:6}px`,border:`1px solid ${_||v?i:h(i,34)}`,borderTopLeftRadius:b?0:`var(--tv-r-sm)`,borderBottomLeftRadius:b?0:`var(--tv-r-sm)`,borderTopRightRadius:x?0:`var(--tv-r-sm)`,borderBottomRightRadius:x?0:`var(--tv-r-sm)`,borderLeftStyle:b?`dashed`:`solid`,borderRightStyle:x?`dashed`:`solid`,boxShadow:ee,cursor:`pointer`,outline:`none`,overflow:`hidden`,transition:`box-shadow var(--tv-fast) var(--tv-ease), border-color var(--tv-fast) var(--tv-ease)`,zIndex:_||v?6:2,minWidth:0},children:[e.startsHere&&!y&&(0,t.jsx)(`span`,{style:{width:p.dot,height:p.dot,borderRadius:`50%`,background:i,flex:`none`}}),!y&&(0,t.jsx)(`span`,{style:{fontSize:p.chip,fontWeight:500,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`,flex:`1 1 auto`,minWidth:0},children:r.title}),e.startsHere&&!y&&!D&&o>150&&(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,color:`var(--tv-ink-4)`,flex:`none`,whiteSpace:`nowrap`},children:d.span(r._s,r._e)})]},r.id+`-`+n)})]})]})};return(0,t.jsxs)(`div`,{ref:o,className:`tv-component`,style:{background:`var(--tv-canvas)`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-lg)`,boxShadow:`var(--tv-shadow-1)`,padding:p.pad,fontFamily:`var(--tv-font)`,color:`var(--tv-ink)`,position:`relative`,width:`100%`,overflow:`hidden`},children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`baseline`,justifyContent:`space-between`,gap:12,marginBottom:14,flexWrap:`wrap`},children:[(0,t.jsx)(`div`,{style:{fontSize:D?15:17,fontWeight:600,letterSpacing:`-0.01em`,color:`var(--tv-ink)`,lineHeight:1.25,minWidth:0},children:i.title||r.meta?.title}),(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-4)`,whiteSpace:`nowrap`,flex:`none`},children:[d.monDay(L.t0),` – `,d.monDay(new Date(L.t1-n))]})]}),I&&w===`top`&&(0,t.jsx)(_,{position:w,text:F,narrow:D}),A&&k===`top`&&(0,t.jsx)(b,{labels:r.labels||[],colors:R,position:k}),(0,t.jsxs)(`div`,{style:{display:`flex`,gap:p.pad,alignItems:`flex-start`},children:[(0,t.jsxs)(`div`,{style:{width:V,flex:`none`},children:[!z&&(0,t.jsx)(G,{}),z?(0,t.jsx)(v,{title:`No events or intervals in this window`,description:`Add intervals or milestones to populate the calendar.`,icon:`calendar`,variant:`panel`,bordered:!0,height:200,narrow:D}):L.perWeek.map((e,n)=>(0,t.jsx)(K,{pw:e,last:n===L.perWeek.length-1},n))]}),A&&k===`right`&&(0,t.jsxs)(`div`,{style:{width:B,flex:`none`,paddingTop:4},children:[(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.08em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`,marginBottom:12},children:`Legend`}),(0,t.jsx)(b,{labels:r.labels||[],colors:R,position:k,vertical:!0})]})]}),A&&k===`bottom`&&(0,t.jsx)(b,{labels:r.labels||[],colors:R,position:k}),I&&w===`bottom`&&(0,t.jsx)(_,{position:w,text:F,narrow:D}),c&&(()=>{let e=c.kind===`event`,n=e?c.ev:c.iv,i=e?d.full(c.ev._t):`${d.full(c.iv._s)} → ${d.full(new Date(c.iv._e))}`,a=e?d.time(c.ev._t)||`All-day milestone`:d.span(c.iv._s,c.iv._e);return(0,t.jsx)(x,{left:Math.max(8,Math.min(s-234-8,c.mx-234/2)),top:Math.max(8,c.my-96),width:234,color:c.c,label:g(r,n.labelIds?.[0]),title:n.title,line:i,sub:a,kindLabel:e?`Milestone`:`Interval`,isEvent:e})})()]})}function I(e){return e instanceof Date?e:new Date(e)}function L(e){let t=I(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())}function R(e,t,r=`day`){let i=I(e).getTime(),a=I(t).getTime();if(r===`week`)return c(i,a).map((e,t)=>({key:`w`+t,index:t,start:e.start.getTime(),end:e.end.getTime(),label:String(d.day(e.start)),sub:d.mon(e.start),range:[e.start.getTime(),e.end.getTime()-n],mode:`week`}));let o=[],s=L(i),l=0;for(;s<a;){let e=new Date(s);o.push({key:`d`+s,index:l++,start:s,end:s+n,label:String(d.day(e)),sub:d.dow(e),range:[s,s],mode:`day`,isMonday:(e.getUTCDay()+6)%7==0,isWeekend:e.getUTCDay()===0||e.getUTCDay()===6}),s+=n}return o}function z(e,t={}){let n=t.bucket||`day`,r=t.measure||`count`,i=t.groupBy||`category`,[o,s]=a(e),c=R(o,s,n),l=i===`category`?(e.labels||[]).map(e=>({id:e.id,name:e.name,labelId:e.id})):[{id:`__all`,name:`All activity`,labelId:null}],u=e=>i===`category`?e:`__all`,d={};l.forEach(e=>{d[e.id]={},c.forEach(t=>{d[e.id][t.key]={count:0,durationMs:0,items:[]}})}),(e.intervals||[]).forEach(e=>{let t=new Date(e.range.start).getTime(),n=new Date(e.range.end).getTime(),r=e.labelIds?.[0],i=u(r);!i||!d[i]||c.forEach(a=>{let o=Math.min(n,a.end)-Math.max(t,a.start);if(o<=0)return;let s=d[i][a.key];s.durationMs+=o,s.count+=1,s.items.push({id:e.id,kind:`interval`,title:e.title,overlapMs:o,labelId:r})})}),(e.events||[]).forEach(e=>{let t=new Date(e.at).getTime(),n=e.labelIds?.[0],r=u(n);if(!r||!d[r])return;let i=c.find(e=>t>=e.start&&t<e.end);if(!i)return;let a=d[r][i.key];a.count+=1,a.items.push({id:e.id,kind:`event`,title:e.title,labelId:n})});let f=e=>e?r===`duration`?e.durationMs:e.count:0,p=0,m={};c.forEach(e=>{let t=0,n=0,r=0;l.forEach(i=>{let a=d[i.id][e.key];p=Math.max(p,f(a)),t+=f(a),n+=a.count,r+=a.durationMs}),m[e.key]={value:t,count:n,durationMs:r}});let h=0;return c.forEach(e=>{h=Math.max(h,m[e.key].value)}),{t0:o,t1:s,buckets:c,groups:l,cells:d,max:p,totals:m,totalMax:h,measure:r,bucket:n,groupBy:i,value:f}}function B(e,t={}){let n=t.bucket||`day`,r=t.groupBy||`category`,i=z(e,{bucket:n,measure:`count`,groupBy:r}),a=0,o=0,s=i.groups.map(e=>{let t=i.buckets.map((t,n)=>{let r=i.cells[e.id][t.key].items,s=r.filter(e=>e.kind===`interval`),c=r.filter(e=>e.kind===`event`);return a=Math.max(a,s.length),s.length>0&&(o+=1),{bucketKey:t.key,index:n,spanCount:s.length,present:s.length>0,overlap:s.length>=2,runStart:!1,runEnd:!1,eventCount:c.length,intervals:s,events:c}});t.forEach((e,n)=>{let r=t[n-1],i=t[n+1];e.runStart=e.present&&!(r&&r.present),e.runEnd=e.present&&!(i&&i.present)});let n=[],r=null;return t.forEach((t,i)=>{t.present?r?(r.c1=i,r.cells.push(t),r.peak=Math.max(r.peak,t.spanCount)):(r={c0:i,c1:i,cells:[t],peak:t.spanCount,title:``,labelId:e.labelId,span:1},n.push(r)):r=null}),n.forEach(n=>{let r=[...t[n.c0].intervals].sort((e,t)=>(t.overlapMs||0)-(e.overlapMs||0))[0];n.title=r?r.title:``,n.labelId=e.labelId,n.span=n.c1-n.c0+1}),{id:e.id,name:e.name,labelId:e.labelId,cells:t,runs:n}});return{t0:i.t0,t1:i.t1,buckets:i.buckets,groups:i.groups,rows:s,maxOverlap:a,presentCells:o,bucket:n,groupBy:r}}function V(e){if(!e||e<=0)return`0h`;let t=e/36e5;if(t<24)return Math.round(t)+`h`;let n=t/24;return(n>=9.95?Math.round(n):n.toFixed(1))+`d`}var H=`#475569`,U={comfortable:{pad:22,rowH:34,labelW:138,cellMin:34,head:30,num:11.5},compact:{pad:16,rowH:27,labelW:116,cellMin:27,head:26,num:10.5}};function W(e,t,n){return n?`var(--tv-rail)`:h(t,16+e**.85*76)}function G(e){return e>.52?`#fff`:`var(--tv-ink-2)`}function K({dataset:r,spec:i,palette:a}){let[o,s]=ee(),[c,l]=(0,e.useState)(null),[u,f]=(0,e.useState)(null),p=U[i.density||`comfortable`]||U.comfortable,h=i.measure||`count`,g=i.bucket||`day`,y=i.groupBy||`category`,b=i.scaleMode||`category`,x=i.showValues!==!1,S=i.caption?.position||`bottom`,C=i.caption?.text||``,w=S!==`off`&&!!C,T=s<560,E=(0,e.useMemo)(()=>m(r,a),[r,a]),D=(0,e.useMemo)(()=>z(r,{bucket:g,measure:h,groupBy:y}),[r,g,h,y]),O=D.max===0,k=T?Math.max(84,p.labelW-30):p.labelW,A=e=>b===`uniform`||y===`none`?H:E[e.labelId||``]||H,te=e=>D.max>0?e/D.max:0,j=e=>{let t=o.current.getBoundingClientRect();return{mx:e.clientX-t.left,my:e.clientY-t.top}},M=e=>h===`duration`?e.durationMs>0?V(e.durationMs):``:e.count>0?String(e.count):``,N=()=>{let e=[0,.18,.42,.7,1],n=h===`duration`?`duration`:`count`,r=h===`duration`?V(D.max):D.max;return(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,flexWrap:`wrap`,padding:`14px 0 2px`,borderTop:`1px solid var(--tv-line)`,marginTop:6},children:[(0,t.jsxs)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.08em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`},children:[`Density · `,n]}),(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:4},children:[(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10.5,color:`var(--tv-ink-4)`},children:`0`}),(0,t.jsx)(`div`,{style:{display:`flex`,gap:2},children:e.map((e,n)=>(0,t.jsx)(`span`,{title:n===0?`empty`:void 0,style:{width:22,height:13,borderRadius:3,background:W(e,H,e===0),boxShadow:`inset 0 0 0 1px rgba(16,24,40,0.06)`}},n))}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10.5,color:`var(--tv-ink-3)`},children:r})]}),b===`category`&&y===`category`&&(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:11.5,color:`var(--tv-ink-4)`},children:`· each row ramps its own category hue`})]})},P={position:`sticky`,left:0,zIndex:3,background:`var(--tv-canvas)`},F=`${k}px repeat(${D.buckets.length}, minmax(${p.cellMin}px, 1fr))`,I=k+D.buckets.length*p.cellMin;return(0,t.jsxs)(`div`,{ref:o,className:`tv-component`,style:{background:`var(--tv-canvas)`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-lg)`,boxShadow:`var(--tv-shadow-1)`,padding:p.pad,fontFamily:`var(--tv-font)`,color:`var(--tv-ink)`,position:`relative`,width:`100%`,overflow:`hidden`},children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`baseline`,justifyContent:`space-between`,gap:12,marginBottom:6,flexWrap:`wrap`},children:[(0,t.jsx)(`div`,{style:{fontSize:T?15:17,fontWeight:600,letterSpacing:`-0.01em`,color:`var(--tv-ink)`,lineHeight:1.25,minWidth:0},children:i.title||r.meta?.title}),(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-4)`,whiteSpace:`nowrap`,flex:`none`},children:[d.monDay(D.t0),` – `,d.monDay(new Date(D.t1-n))]})]}),(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-3)`,marginBottom:16},children:[h===`duration`?`active duration`:`item count`,` · per `,g,` · by `,y===`none`?`total`:`category`]}),w&&S===`top`&&(0,t.jsx)(_,{position:S,text:C,narrow:T}),(0,t.jsxs)(`div`,{style:{position:`relative`,overflowX:`auto`,overflowY:`hidden`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-md)`},children:[(0,t.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:F,minWidth:I},children:[(0,t.jsx)(`div`,{style:{...P,height:p.head,borderBottom:`1px solid var(--tv-line)`,display:`flex`,alignItems:`center`,paddingLeft:11},children:(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.06em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`},children:g===`week`?`Week`:`Day`})}),D.buckets.map(e=>{let n=e.mode===`week`||e.isMonday,r=e.mode===`day`&&new Date(e.start).getUTCDate()===1;return(0,t.jsxs)(`div`,{style:{height:p.head,borderBottom:`1px solid var(--tv-line)`,borderLeft:`1px solid ${n?`var(--tv-grid-week)`:`var(--tv-grid)`}`,display:`flex`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,background:e.isWeekend?`var(--tv-rail)`:`transparent`,gap:1,overflow:`hidden`},children:[(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,fontWeight:600,color:r?`var(--tv-accent)`:`var(--tv-ink-2)`,lineHeight:1},children:e.label}),!T&&(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:9,color:`var(--tv-ink-4)`,lineHeight:1},children:e.sub})]},e.key)}),D.groups.map((n,r)=>{let i=A(n),a=r===D.groups.length-1;return(0,t.jsxs)(e.Fragment,{children:[(0,t.jsxs)(`div`,{style:{...P,height:p.rowH,display:`flex`,alignItems:`center`,gap:8,padding:`0 10px`,borderBottom:a?`none`:`1px solid var(--tv-grid)`,boxShadow:`1px 0 0 var(--tv-line)`},children:[(0,t.jsx)(`span`,{style:{width:9,height:9,borderRadius:2,background:i,flex:`none`,boxShadow:`inset 0 0 0 1px rgba(0,0,0,0.14)`}}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:T?11.5:12.5,fontWeight:500,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:n.name})]},n.id+`-label`),D.buckets.map(e=>{let o=D.cells[n.id][e.key],s=D.value(o),m=te(s),g=s===0,_=e.mode===`week`||e.isMonday,v=n.id+`|`+e.key,y=c?.id===v,b=u===v,ee=x?M(o):``;return(0,t.jsx)(`div`,{tabIndex:0,role:`button`,"aria-label":`${n.name}, ${e.mode===`week`?`week of `:``}${d.monDay(new Date(e.start))}: ${o.count} items${h===`duration`?`, `+V(o.durationMs):``}`,onMouseEnter:t=>l({id:v,g:n,b:e,cell:o,base:i,...j(t)}),onMouseMove:t=>l({id:v,g:n,b:e,cell:o,base:i,...j(t)}),onFocus:()=>l({id:v,g:n,b:e,cell:o,base:i,mx:k+e.index*40,my:80+r*p.rowH}),onMouseLeave:()=>l(null),onBlur:()=>l(null),onClick:()=>f(e=>e===v?null:v),style:{height:p.rowH,borderBottom:a?`none`:`1px solid var(--tv-canvas)`,borderLeft:`1px solid ${g?_?`var(--tv-grid-week)`:`var(--tv-grid)`:`rgba(255,255,255,0.7)`}`,background:W(m,i,g),display:`flex`,alignItems:`center`,justifyContent:`center`,cursor:`pointer`,outline:`none`,position:`relative`,boxShadow:b?`var(--tv-focus-ring)`:y?`inset 0 0 0 2px rgba(255,255,255,0.85), var(--tv-shadow-pop)`:`none`,zIndex:y||b?4:`auto`,transition:`box-shadow var(--tv-fast) var(--tv-ease)`},children:ee&&(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:p.num,fontWeight:600,color:G(m),lineHeight:1,pointerEvents:`none`},children:ee})},n.id+e.key)})]},n.id)})]}),O&&(0,t.jsx)(v,{title:`No activity in this window`,icon:`grid`,background:!0,narrow:T})]}),(0,t.jsx)(N,{}),w&&S===`bottom`&&(0,t.jsx)(_,{position:S,text:C,narrow:T}),c&&(0,t.jsx)(ne,{left:Math.max(8,Math.min(s-248-8,c.mx-124)),top:Math.max(8,c.my-96),width:248,base:c.base,group:c.g.name,range:c.b.mode===`week`?`${d.full(new Date(c.b.start))} → ${d.full(new Date(c.b.end-864e5))}`:d.full(new Date(c.b.start)),count:c.cell.count,durationMs:c.cell.durationMs,items:c.cell.items,cmap:E})]})}function ne({left:e,top:n,width:r,base:i,group:a,range:o,count:s,durationMs:c,items:l,cmap:u}){let d=l.slice(0,4),f=l.length-d.length;return(0,t.jsx)(`div`,{style:{position:`absolute`,left:e,top:n,width:r,pointerEvents:`none`,zIndex:50},children:(0,t.jsxs)(`div`,{style:{background:`#fff`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-md)`,boxShadow:`var(--tv-shadow-pop)`,padding:`10px 13px`},children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:7,marginBottom:5},children:[(0,t.jsx)(`span`,{style:{width:9,height:9,borderRadius:2,background:i,flex:`none`}}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.05em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`},children:a})]}),(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-3)`,lineHeight:1.45,marginBottom:6},children:o}),(0,t.jsxs)(`div`,{style:{display:`flex`,gap:16,marginBottom:s?8:0},children:[(0,t.jsx)(re,{value:s,label:`items`}),(0,t.jsx)(re,{value:V(c),label:`active`})]}),d.length>0&&(0,t.jsxs)(`div`,{style:{borderTop:`1px solid var(--tv-line)`,paddingTop:7,display:`flex`,flexDirection:`column`,gap:4},children:[d.map(e=>(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:7,minWidth:0},children:[(0,t.jsx)(`span`,{style:{width:7,height:7,flex:`none`,borderRadius:e.kind===`event`?1:`50%`,transform:e.kind===`event`?`rotate(45deg)`:`none`,background:e.kind===`event`?`#fff`:u[e.labelId||``]||i,border:e.kind===`event`?`1.5px solid ${u[e.labelId||``]||i}`:`none`}}),(0,t.jsx)(`span`,{style:{fontSize:11.5,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:e.title}),e.kind===`interval`&&(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,color:`var(--tv-ink-4)`,marginLeft:`auto`,flex:`none`},children:V(e.overlapMs)})]},e.id+e.kind)),f>0&&(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10.5,color:`var(--tv-ink-4)`},children:[`+`,f,` more`]})]})]})})}function re({value:e,label:n}){return(0,t.jsxs)(`div`,{children:[(0,t.jsx)(`div`,{style:{fontSize:17,fontWeight:600,color:`var(--tv-ink)`,lineHeight:1},children:e}),(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:9.5,color:`var(--tv-ink-4)`,textTransform:`uppercase`,letterSpacing:`.05em`,marginTop:3},children:n})]})}var q=`#475569`,ie=.6,ae=2.5,oe=.15,J={comfortable:{pad:22,rowH:38,barH:20,labelW:150,cellMin:30,head:30,cap:3,dot:6,dia:11,num:10},compact:{pad:16,rowH:29,barH:15,labelW:124,cellMin:23,head:26,cap:3,dot:5,dia:9.5,num:9.5}};function se(e,t){return`${e.id}|${t.bucketKey}`}function ce(e){if(!e)return null;let t=E(e);return Number.isNaN(t)?null:t}function le(e){return typeof e!=`number`||!Number.isFinite(e)?1:Math.min(ae,Math.max(ie,e))}function ue({dataset:r,spec:i,palette:a}){let[o,s]=ee(),c=(0,e.useRef)({}),[l,u]=(0,e.useState)(null),[f,p]=(0,e.useState)(null),[g,y]=(0,e.useState)({r:0,c:0}),[b,x]=(0,e.useState)(()=>le(i.zoom)),S=J[i.density||`comfortable`]||J.comfortable,C=i.bucket||`day`,w=i.groupBy||`category`,T=i.showCounts!==!1,E=i.events?.showMarkers!==!1,D=i.legend?.position||`bottom`,O=i.caption?.position||`bottom`,k=i.caption?.text||``,A=O!==`off`&&!!k,te=D!==`off`&&(r.labels||[]).length>0,j=s<560,M=b,N=Math.max(18,Math.round(S.cellMin*M)),P=Math.round(M*100),F=(0,e.useMemo)(()=>m(r,a),[r,a]),I=(0,e.useMemo)(()=>B(r,{bucket:C,groupBy:w}),[r,C,w]),L=ce(i.today),R=L==null?-1:I.buckets.findIndex(e=>L>=e.start&&L<e.end),z=I.presentCells===0&&(r.events||[]).length===0,V=j?Math.max(92,S.labelW-34):S.labelW,H=`${V}px repeat(${I.buckets.length}, minmax(${N}px, 1fr))`,U=V+I.buckets.length*N,W={position:`sticky`,left:0,zIndex:3,background:`var(--tv-canvas)`},G=e=>w===`none`?q:F[e.labelId||``]||q;(0,e.useEffect)(()=>{x(le(i.zoom))},[i.zoom]);let K=e=>x(le(Number(e.toFixed(2)))),ne=e=>{let t=o.current?.getBoundingClientRect();return t?{mx:e.clientX-t.left,my:e.clientY-t.top}:{mx:0,my:0}},re=(e,t)=>{let n=c.current[`${e}_${t}`];n&&(y({r:e,c:t}),n.focus())},ie=(e,t,n)=>{let r=I.rows.length,i=I.buckets.length,a=t,o=n;if(e.key===`ArrowRight`)o=Math.min(i-1,n+1);else if(e.key===`ArrowLeft`)o=Math.max(0,n-1);else if(e.key===`ArrowDown`)a=Math.min(r-1,t+1);else if(e.key===`ArrowUp`)a=Math.max(0,t-1);else if(e.key===`Home`)o=0;else if(e.key===`End`)o=i-1;else if(e.key===`Enter`||e.key===` `){e.preventDefault();let r=I.rows[t],i=se(r,r.cells[n]);p(e=>e===i?null:i);return}else return;e.preventDefault(),re(a,o)},ue=({vertical:e=!1})=>(0,t.jsx)(`div`,{style:{display:`flex`,flexDirection:e?`column`:`row`,flexWrap:`wrap`,gap:e?8:`8px 16px`,alignItems:e?`stretch`:`center`},children:(r.labels||[]).map(n=>(0,t.jsxs)(`div`,{style:{display:`inline-flex`,alignItems:`center`,gap:8,minWidth:0,maxWidth:e?`100%`:240},children:[(0,t.jsx)(`span`,{style:{width:16,height:9,borderRadius:3,background:h(F[n.id],22),flex:`none`,boxShadow:`inset 3px 0 0 0 ${F[n.id]}, inset 0 0 0 1px ${h(F[n.id],34)}`}}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:12.5,color:`var(--tv-ink-2)`,fontWeight:500,lineHeight:1.3,whiteSpace:e?`normal`:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:n.name})]},n.id))}),me=()=>(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:16,flexWrap:`wrap`},children:[(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.08em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`},children:`Key`}),(0,t.jsx)(de,{label:`active span`,children:(0,t.jsx)(`span`,{style:{width:26,height:11,borderRadius:4,background:h(q,20),boxShadow:`inset 3px 0 0 0 ${q}, inset 0 0 0 1px ${h(q,34)}`}})}),(0,t.jsx)(de,{label:`overlap (2+)`,children:(0,t.jsx)(`span`,{style:{width:26,height:11,borderRadius:4,background:`repeating-linear-gradient(135deg, rgba(255,255,255,.55) 0 2px, transparent 2px 4px), ${h(q,40)}`,boxShadow:`inset 0 0 0 1px ${h(q,50)}`}})}),(0,t.jsx)(de,{label:`milestone`,children:(0,t.jsx)(`span`,{style:{width:11,height:11,transform:`rotate(45deg)`,borderRadius:2,background:`#fff`,border:`2px solid ${q}`}})})]});return(0,t.jsxs)(`div`,{ref:o,className:`tv-component`,style:{background:`var(--tv-canvas)`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-lg)`,boxShadow:`var(--tv-shadow-1)`,padding:S.pad,fontFamily:`var(--tv-font)`,color:`var(--tv-ink)`,position:`relative`,width:`100%`,overflow:`hidden`},children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`baseline`,justifyContent:`space-between`,gap:12,marginBottom:6,flexWrap:`wrap`},children:[(0,t.jsx)(`div`,{style:{fontSize:j?15:17,fontWeight:600,letterSpacing:0,color:`var(--tv-ink)`,lineHeight:1.25,minWidth:0},children:i.title||r.meta?.title}),(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,flex:`none`,flexWrap:`wrap`,justifyContent:`flex-end`},children:[(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-4)`,whiteSpace:`nowrap`,flex:`none`},children:[d.monDay(I.t0),` - `,d.monDay(new Date(I.t1-n))]}),(0,t.jsxs)(`div`,{"data-tv-transient":!0,style:{display:`inline-flex`,alignItems:`center`,gap:2,border:`1px solid var(--tv-line)`,borderRadius:6,background:`var(--tv-rail)`,padding:2,boxShadow:`inset 0 1px 0 rgba(255,255,255,.8)`},children:[(0,t.jsx)(fe,{label:`Zoom out`,disabled:M<=.601,onClick:()=>K(M-oe),children:`-`}),(0,t.jsxs)(`button`,{type:`button`,title:`Reset zoom`,"aria-label":`Reset zoom`,onClick:()=>K(1),style:{minWidth:42,height:24,border:0,borderRadius:4,background:`transparent`,color:`var(--tv-ink-3)`,fontFamily:`var(--tv-mono)`,fontSize:10.5,fontWeight:600,cursor:`pointer`},children:[P,`%`]}),(0,t.jsx)(fe,{label:`Zoom in`,disabled:M>=ae-.001,onClick:()=>K(M+oe),children:`+`})]})]})]}),(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-3)`,marginBottom:16},children:[`interval presence / per `,C,` / by `,w===`none`?`total`:`category`]}),A&&O===`top`&&(0,t.jsx)(_,{position:O,text:k,narrow:j}),te&&D===`top`&&(0,t.jsx)(`div`,{style:{paddingBottom:14},children:(0,t.jsx)(ue,{})}),(0,t.jsxs)(`div`,{style:{display:`flex`,gap:S.pad,alignItems:`flex-start`},children:[(0,t.jsxs)(`div`,{style:{flex:`1 1 auto`,minWidth:0,position:`relative`,overflowX:`auto`,overflowY:`hidden`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-md)`},role:`grid`,"aria-label":i.title||r.meta?.title,children:[(0,t.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:H,minWidth:U},children:[(0,t.jsx)(`div`,{style:{...W,height:S.head,borderBottom:`1px solid var(--tv-line)`,display:`flex`,alignItems:`center`,paddingLeft:11},children:(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.06em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`},children:C===`week`?`Week`:`Day`})}),I.buckets.map((e,n)=>{let r=e.mode===`week`||e.isMonday,i=e.mode===`day`&&new Date(e.start).getUTCDate()===1,a=n===R;return(0,t.jsxs)(`div`,{style:{height:S.head,borderBottom:`1px solid var(--tv-line)`,borderLeft:`1px solid ${r?`var(--tv-grid-week)`:`var(--tv-grid)`}`,display:`flex`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,background:a?`var(--tv-accent-soft)`:e.isWeekend?`var(--tv-rail)`:`transparent`,gap:1,overflow:`hidden`},children:[(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,fontWeight:600,color:a||i?`var(--tv-accent)`:`var(--tv-ink-2)`,lineHeight:1},children:e.label}),!j&&(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:9,color:`var(--tv-ink-4)`,lineHeight:1},children:e.sub})]},e.key)}),I.rows.map((n,r)=>{let i=G(n),a=r===I.rows.length-1;return(0,t.jsxs)(e.Fragment,{children:[(0,t.jsxs)(`div`,{role:`rowheader`,style:{...W,height:S.rowH,display:`flex`,alignItems:`center`,gap:8,padding:`0 10px`,borderBottom:a?`none`:`1px solid var(--tv-grid)`,boxShadow:`1px 0 0 var(--tv-line)`},children:[(0,t.jsx)(`span`,{style:{width:14,height:8,borderRadius:2,flex:`none`,background:h(i,22),boxShadow:`inset 3px 0 0 0 ${i}, inset 0 0 0 1px ${h(i,34)}`}}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:j?11.5:12.5,fontWeight:500,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:n.name})]}),n.cells.map((e,o)=>{let s=I.buckets[o],m=s.mode===`week`||s.isMonday,_=se(n,e),v=l?.id===_,b=f===_,x=o===R,ee=g.r===r&&g.c===o;return(0,t.jsxs)(`div`,{role:`gridcell`,ref:e=>{c.current[`${r}_${o}`]=e},tabIndex:ee?0:-1,"aria-label":`${n.name}, ${s.mode===`week`?`week of `:``}${d.monDay(new Date(s.start))}: ${e.present?`${e.spanCount} ${e.spanCount===1?`active span`:`overlapping spans`}`:`no span`}${e.eventCount?`, ${e.eventCount} milestone${e.eventCount===1?``:`s`}`:``}`,onMouseEnter:t=>u({id:_,row:n,bucket:s,cell:e,hue:i,...ne(t)}),onMouseMove:t=>u({id:_,row:n,bucket:s,cell:e,hue:i,...ne(t)}),onFocus:()=>{y({r,c:o}),u({id:_,row:n,bucket:s,cell:e,hue:i,mx:V+o*N,my:70+r*S.rowH})},onMouseLeave:()=>u(null),onBlur:()=>u(null),onClick:()=>p(e=>e===_?null:_),onKeyDown:e=>ie(e,r,o),style:{height:S.rowH,position:`relative`,cursor:`pointer`,outline:`none`,borderBottom:a?`none`:`1px solid var(--tv-grid)`,borderLeft:`1px solid ${m?`var(--tv-grid-week)`:`var(--tv-grid)`}`,background:x?`var(--tv-accent-soft)`:s.isWeekend?h(`#f5f7f9`,60):`transparent`,boxShadow:b?`var(--tv-focus-ring)`:`none`,zIndex:b||v?5:`auto`,transition:`box-shadow var(--tv-fast) var(--tv-ease)`},children:[e.present&&(0,t.jsxs)(`div`,{style:{position:`absolute`,top:(S.rowH-S.barH)/2,height:S.barH,left:e.runStart?3:-1,right:e.runEnd?3:-1,background:e.overlap?`repeating-linear-gradient(135deg, rgba(255,255,255,.5) 0 2.5px, transparent 2.5px 5px), ${h(i,40)}`:h(i,v?26:19),borderTop:`1px solid ${h(i,e.overlap?52:36)}`,borderBottom:`1px solid ${h(i,e.overlap?52:36)}`,borderLeft:e.runStart?`1px solid ${h(i,36)}`:`none`,borderRight:e.runEnd?`1px solid ${h(i,36)}`:`none`,borderTopLeftRadius:e.runStart?6:0,borderBottomLeftRadius:e.runStart?6:0,borderTopRightRadius:e.runEnd?6:0,borderBottomRightRadius:e.runEnd?6:0,boxShadow:e.runStart?`inset ${S.cap}px 0 0 0 ${i}`:`none`,display:`flex`,alignItems:`center`,justifyContent:e.runStart?`flex-start`:`flex-end`,padding:`0 5px`,transition:`background var(--tv-fast) var(--tv-ease)`},children:[e.runStart&&(0,t.jsx)(`span`,{style:{width:S.dot,height:S.dot,borderRadius:`50%`,background:i,flex:`none`,marginLeft:2,boxShadow:`0 0 0 1.5px rgba(255,255,255,.7)`}}),e.overlap&&T&&(0,t.jsx)(`span`,{style:{marginLeft:`auto`,fontFamily:`var(--tv-mono)`,fontSize:S.num,fontWeight:600,color:h(i,90,`#1d2330`),lineHeight:1,background:`rgba(255,255,255,.82)`,borderRadius:3,padding:`1px 3px`},children:e.spanCount})]}),E&&e.eventCount>0&&(0,t.jsx)(`span`,{style:{position:`absolute`,top:e.present?3:(S.rowH-S.dia)/2-1,left:`50%`,transform:`translateX(-50%) rotate(45deg)`,width:S.dia,height:S.dia,borderRadius:2,background:`#fff`,border:`2px solid ${i}`,boxShadow:`0 1px 1px rgba(16,24,40,.14)`,zIndex:2}}),ee&&!b&&(0,t.jsx)(`span`,{"aria-hidden":`true`,style:{position:`absolute`,inset:1,borderRadius:4,pointerEvents:`none`,boxShadow:`var(--tv-focus-ring)`}})]},s.key)})]},n.id)})]}),z&&(0,t.jsx)(v,{title:`No spans in this window`,icon:`matrix`,background:!0,narrow:j})]}),te&&D===`right`&&!j&&(0,t.jsxs)(`div`,{style:{width:Math.min(220,Math.max(168,s*.2)),flex:`none`,paddingTop:4},children:[(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.08em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`,marginBottom:12},children:`Legend`}),(0,t.jsx)(ue,{vertical:!0})]})]}),(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:18,flexWrap:`wrap`,padding:`14px 0 2px`,borderTop:`1px solid var(--tv-line)`,marginTop:6},children:[(0,t.jsx)(me,{}),te&&D===`bottom`&&(0,t.jsx)(ue,{})]}),A&&O===`bottom`&&(0,t.jsx)(_,{position:O,text:k,narrow:j}),l&&(0,t.jsx)(pe,{left:Math.max(8,Math.min(s-244-8,l.mx-122)),top:Math.max(8,l.my-96),width:244,hue:l.hue,group:l.row.name,range:l.bucket.mode===`week`?`${d.full(new Date(l.bucket.start))} - ${d.full(new Date(l.bucket.end-864e5))}`:d.full(new Date(l.bucket.start)),cell:l.cell,cmap:F})]})}function de({label:e,children:n}){return(0,t.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:7},children:[n,(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:11.5,color:`var(--tv-ink-3)`},children:e})]})}function fe({label:e,disabled:n,onClick:r,children:i}){return(0,t.jsx)(`button`,{type:`button`,title:e,"aria-label":e,disabled:n,onClick:r,style:{width:24,height:24,border:0,borderRadius:4,background:n?`transparent`:`#fff`,color:n?`var(--tv-ink-5)`:`var(--tv-ink-2)`,fontFamily:`var(--tv-mono)`,fontSize:15,fontWeight:700,lineHeight:`22px`,cursor:n?`default`:`pointer`,boxShadow:n?`none`:`0 1px 1px rgba(16,24,40,.08)`},children:i})}function pe({left:e,top:n,width:r,hue:i,group:a,range:o,cell:s,cmap:c}){let l=s.intervals.slice(0,4),u=s.intervals.length-l.length;return(0,t.jsx)(`div`,{"data-tv-transient":!0,style:{position:`absolute`,left:e,top:n,width:r,pointerEvents:`none`,zIndex:50},children:(0,t.jsxs)(`div`,{style:{background:`#fff`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-md)`,boxShadow:`var(--tv-shadow-pop)`,padding:`10px 13px`},children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:7,marginBottom:5},children:[(0,t.jsx)(`span`,{style:{width:14,height:8,borderRadius:2,background:h(i,22),flex:`none`,boxShadow:`inset 3px 0 0 0 ${i}`}}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.05em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`},children:a})]}),(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-3)`,lineHeight:1.45,marginBottom:6},children:o}),(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`baseline`,gap:7,marginBottom:s.intervals.length||s.events.length?8:0},children:[(0,t.jsx)(`span`,{style:{fontSize:17,fontWeight:600,color:`var(--tv-ink)`,lineHeight:1},children:s.spanCount}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,color:`var(--tv-ink-4)`,textTransform:`uppercase`,letterSpacing:`.05em`},children:s.spanCount===1?`active span`:s.spanCount===0?`no span`:`overlapping spans`})]}),(l.length>0||s.events.length>0)&&(0,t.jsxs)(`div`,{style:{borderTop:`1px solid var(--tv-line)`,paddingTop:7,display:`flex`,flexDirection:`column`,gap:4},children:[l.map(e=>(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:7,minWidth:0},children:[(0,t.jsx)(`span`,{style:{width:13,height:7,borderRadius:2,flex:`none`,background:h(c[e.labelId||``]||i,22),boxShadow:`inset 2.5px 0 0 0 ${c[e.labelId||``]||i}`}}),(0,t.jsx)(`span`,{style:{fontSize:11.5,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:e.title}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,color:`var(--tv-ink-4)`,marginLeft:`auto`,flex:`none`},children:V(e.overlapMs)})]},e.id)),s.events.map(e=>(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:7,minWidth:0},children:[(0,t.jsx)(`span`,{style:{width:8,height:8,flex:`none`,borderRadius:1,transform:`rotate(45deg)`,background:`#fff`,border:`1.5px solid ${c[e.labelId||``]||i}`}}),(0,t.jsx)(`span`,{style:{fontSize:11.5,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:e.title})]},e.id)),u>0&&(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10.5,color:`var(--tv-ink-4)`},children:[`+`,u,` more`]})]})]})})}var me=5*n;function he(e){let t=e instanceof Date?e:new Date(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())}function ge(e,t,n=5){if(!(t>e)){let t=Number.isFinite(e)?e:0;return{lo:t-1,hi:t+1,step:1,ticks:[t-1,t,t+1]}}let r=(t-e)/Math.max(1,n),i=10**Math.floor(Math.log10(r)),a=r/i,o=(a>=5?5:a>=2.5?2.5:a>=2?2:a>=1?1:.5)*i,s=Math.floor(e/o)*o,c=Math.ceil(t/o)*o,l=[];for(let e=s;e<=c+o*1e-6;e+=o)l.push(Math.round(e*1e3)/1e3);return{lo:s,hi:c,step:o,ticks:l}}function _e(e,t){let r=(t-e)/n,i=[],a=(n,r,a)=>{n>=e-1&&n<=t+1&&i.push({t:n,label:r,strong:a})};if(r<=16){let i=r<=8?1:2,o=he(e),s=o;for(s<e&&(s+=n);s<=t;s+=n){if(Math.round((s-o)/864e5)%i!==0)continue;let e=new Date(s);a(s,d.monDay(e),e.getUTCDate()===1)}}else if(r<=70){let r=he(e),i=(new Date(r).getUTCDay()+6)%7;for(r+=(7-i)%7*n;r<=t;r+=7*n){let e=new Date(r);a(r,d.monDay(e),e.getUTCDate()<=7)}}else if(r<=240){let n=Date.UTC(new Date(e).getUTCFullYear(),new Date(e).getUTCMonth(),1);for(;n<=t;){let e=new Date(n);a(n,d.mon(e),!0),a(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),15),`15`,!1),n=Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+1,1)}}else{let n=Date.UTC(new Date(e).getUTCFullYear(),new Date(e).getUTCMonth(),1);if(n<e){let e=new Date(n);n=Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+1,1)}for(;n<=t;){let e=new Date(n);a(n,d.mon(e),e.getUTCMonth()===0),n=Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+1,1)}}return i}function ve(e,t){return e.find(e=>t>=e._s&&t<e._e)||null}function ye(e){let t=e.series,r=(t?.samples||[]).map(e=>({t:Date.parse(e.at),at:e.at,value:e.value})).filter(e=>Number.isFinite(e.t)&&Number.isFinite(e.value)).sort((e,t)=>e.t-t.t),i=(e.intervals||[]).map(e=>({...e,_s:Date.parse(e.range.start),_e:he(e.range.end)+n})).filter(e=>Number.isFinite(e._s)&&Number.isFinite(e._e)&&e._e>e._s).sort((e,t)=>e._s-t._s),a=(e.events||[]).map(e=>({id:e.id,title:e.title,labelIds:e.labelIds,_t:Date.parse(e.at)})).filter(e=>Number.isFinite(e._t)).sort((e,t)=>e._t-t._t),o=[];r.forEach(e=>o.push(e.t)),i.forEach(e=>o.push(e._s,e._e)),a.forEach(e=>o.push(e._t));let s=o.length?Math.min(...o):Date.UTC(2026,0,1),c=o.length?Math.max(...o):s+30*n;c<=s&&(c=s+n);let l=r.map(e=>e.value);return{samples:r,states:i,events:a,T0:s,T1:c,unit:t?.unit||``,name:t?.name||`Value`,target:typeof t?.target?.value==`number`?{value:t.target.value,label:t.target.label||`goal`}:null,vMin:l.length?Math.min(...l):0,vMax:l.length?Math.max(...l):1}}function be(e,t=90,r=null){let i=r?Date.parse(r):NaN,a=Number.isFinite(i)?Math.min(e.T1,i):e.T1,o=Math.min(e.T1-e.T0,t*n),s=a,c=a-o;return c<e.T0&&(c=e.T0,s=Math.min(e.T1,c+o)),s>e.T1&&(s=e.T1,c=Math.max(e.T0,s-o)),s-c<me&&(s=c+me),[c,s]}function xe(e,t,n,r=`pan`){let i=n.T1-n.T0,a=Math.max(me,Math.min(i,t-e));r===`pan`&&(a=Math.min(i,t-e));let o=e,s=o+a;return o<n.T0&&(o=n.T0,s=o+a),s>n.T1&&(s=n.T1,o=s-a),o<n.T0&&(o=n.T0),[o,s]}function Se(e,t){if(!e.length)return null;let n=t instanceof Date?t.getTime():t,r=0,i=e.length-1;for(;r<i;){let t=r+i>>1;e[t].t<n?r=t+1:i=t}let a=e[Math.max(0,r-1)],o=e[r];return Math.abs(a.t-n)<=Math.abs(o.t-n)?a:o}function Ce(e,t){let n=[];for(let r=0;r<e.length-1;r+=1){let i=e[r],a=e[r+1],o=[];t.forEach(e=>{[e._s,e._e].forEach(e=>{e>i.t&&e<a.t&&o.push(e)})}),o.sort((e,t)=>e-t);let s=i;[...o,a.t].forEach(e=>{let r=e===a.t?a:{t:e,at:new Date(e).toISOString(),value:i.value+(a.value-i.value)*((e-i.t)/(a.t-i.t))},o=ve(t,(s.t+r.t)/2);n.push({a:s,b:r,labelId:o?.labelIds?.[0]||null}),s=r})}return n}var we=`#15181e`,Te={comfortable:{pad:22,plotH:300,bandH:30,miniH:56,axisW:50,xAxisH:30,dot:3.4,line:2.2,valueLabel:11},compact:{pad:16,plotH:226,bandH:24,miniH:46,axisW:44,xAxisH:26,dot:2.8,line:2,valueLabel:10}};function Ee(e){let t=Math.round(e/n);return t<=90?`${t} days`:`${Math.round(t/30)} months`}function De(e,t){return Math.abs(e[0]-t[0])<864e5&&Math.abs(e[1]-t[1])<864e5}function Oe(e){return Number.isInteger(e)?String(e):e.toFixed(1)}function ke({dataset:n,spec:r,palette:i}){let[a,s]=ee(1100),[c,l]=(0,e.useState)(null),[u,f]=(0,e.useState)(null),[p,g]=(0,e.useState)(null),y=(0,e.useRef)(!1),b=Te[r.density||`comfortable`]||Te.comfortable,x=r.stateMode||`band`,S=x!==`off`,C=r.showPoints!==!1,w=!!r.showValues,T=r.showTarget!==!1,E=r.events?.showMarkers!==!1,D=r.minimap!==!1,O=r.yAxis===`full`,k=r.legend?.position||`bottom`,A=r.caption?.position||`bottom`,te=r.caption?.text||``,j=A!==`off`&&!!te,M=(0,e.useMemo)(()=>ye(n),[n]),N=(0,e.useMemo)(()=>m(n,i),[n,i]),P=(0,e.useMemo)(()=>be(M,r.defaultDays||90,r.today),[M,r.defaultDays,r.today]),[F,I]=(0,e.useState)(P);(0,e.useEffect)(()=>{I(P),l(null),f(null),g(null)},[P]);let[L,R]=F,z=s<560,B=M.samples.length===0,V=k!==`off`&&S&&(n.labels||[]).length>0,H=z?Math.max(36,b.axisW-12):b.axisW,U=k===`right`&&!z?Math.min(210,Math.max(160,s*.2)):0,W=Math.max(140,s-b.pad*2-H-(U?U+b.pad:0)),G=z?Math.max(180,b.plotH-70):b.plotH,K=(0,e.useMemo)(()=>o(L,R,W),[L,R,W]),ne=(0,e.useMemo)(()=>M.samples.filter(e=>e.t>=L&&e.t<=R),[M.samples,L,R]),re=O?M.samples:ne.length?ne:M.samples,q=re.length?Math.min(...re.map(e=>e.value)):0,ie=re.length?Math.max(...re.map(e=>e.value)):1;T&&M.target&&(q=Math.min(q,M.target.value),ie=Math.max(ie,M.target.value));let ae=(ie-q)*.12||1,oe=ge(q-ae,ie+ae,z?4:5),J=e=>(1-(e-oe.lo)/Math.max(1e-9,oe.hi-oe.lo))*G,se=(0,e.useMemo)(()=>_e(L,R),[L,R]),ce=(0,e.useMemo)(()=>Ce(M.samples,M.states),[M.samples,M.states]),le=M.T1-M.T0,ue=R-L>=le-1,de=R-L<=me+1,fe=De(F,P),pe=C&&ne.length<=130,he=e=>e.map((e,t)=>`${t?`L`:`M`}${K(e.t).toFixed(1)} ${J(e.value).toFixed(1)}`).join(` `),ke=e=>e.length<2?``:`M${K(e[0].t).toFixed(1)} ${G} L${e.map(e=>`${K(e.t).toFixed(1)} ${J(e.value).toFixed(1)}`).join(` L`)} L${K(e[e.length-1].t).toFixed(1)} ${G} Z`,Ne=(0,e.useMemo)(()=>{let e=[];return ce.forEach(t=>{let n=e[e.length-1];!n||n.labelId!==t.labelId?e.push({labelId:t.labelId,points:[t.a,t.b]}):n.points.push(t.b)}),e},[ce]),Fe=(0,e.useCallback)(e=>{let t=(L+R)/2,n=(R-L)*(e<0?.62:1/.62);I(xe(t-n/2,t+n/2,M,`zoom`))},[M,L,R]),ze=(0,e.useCallback)((e,t)=>{let n=R-L,r=n*t,i=e-Math.max(0,Math.min(1,(e-L)/n))*r;I(xe(i,i+r,M,`zoom`))},[M,L,R]),Be=(0,e.useCallback)(e=>{let t=e*(R-L)*.5;I(xe(L+t,R+t,M,`pan`))},[M,L,R]),Ve=(0,e.useCallback)(()=>I(P),[P]),He=(0,e.useCallback)((e,t)=>I(xe(e,t,M,`pan`)),[M]),Ue=e=>{let t=a.current?.getBoundingClientRect();return t?{mx:e.clientX-t.left,my:e.clientY-t.top}:{mx:0,my:0}},We=e=>{e.preventDefault();let t=e.clientX,n=[L,R],r=!1;y.current=!0;let i=e=>{let i=e.clientX-t;Math.abs(i)>3&&(r=!0);let a=-(i/W)*(n[1]-n[0]);I(xe(n[0]+a,n[1]+a,M,`pan`))},o=e=>{if(window.removeEventListener(`pointermove`,i),window.removeEventListener(`pointerup`,o),y.current=!1,!r&&M.samples.length&&a.current){let t=a.current.getBoundingClientRect(),n=e.clientX-t.left-(b.pad+H),r=Se(M.samples,K.invert(n));if(!r)return;let i=M.samples.indexOf(r);f(e=>e?.kind===`sample`&&e.id===r.t?null:{kind:`sample`,id:r.t}),g(i)}};window.addEventListener(`pointermove`,i),window.addEventListener(`pointerup`,o)},Ge=e=>{if(y.current||!M.samples.length||!a.current)return;let t=a.current.getBoundingClientRect(),n=e.clientX-t.left-(b.pad+H);if(n<-2||n>W+2){l(null);return}let r=Se(M.samples,K.invert(n));r&&l({kind:`sample`,point:r,...Ue(e)})},Ke=e=>{if(B||!a.current)return;let t=a.current.getBoundingClientRect().left+b.pad+H,n=e.clientX-t;if(!(n>=0&&n<=W))return;let r=e.shiftKey||Math.abs(e.deltaX)>Math.abs(e.deltaY);if(e.preventDefault(),r){let t=(e.shiftKey&&Math.abs(e.deltaY)>Math.abs(e.deltaX)?e.deltaY:e.deltaX)/Math.max(1,W)*(R-L);I(xe(L+t,R+t,M,`pan`));return}let i=Math.exp(e.deltaY*.0015),o=Math.max(.88,Math.min(1.14,i));ze(K.invert(n).getTime(),o)},qe=e=>{if(!M.samples.length)return;let t=p??M.samples.findIndex(e=>e.t>=L);if(t<0&&(t=0),e.key===`ArrowRight`)t=Math.min(M.samples.length-1,t+1);else if(e.key===`ArrowLeft`)t=Math.max(0,t-1);else if(e.key===`Home`)t=0;else if(e.key===`End`)t=M.samples.length-1;else if(e.key===`Enter`||e.key===` `){e.preventDefault();let n=M.samples[t];f(e=>e?.kind===`sample`&&e.id===n.t?null:{kind:`sample`,id:n.t});return}else if(e.key===`+`||e.key===`=`){e.preventDefault(),Fe(-1);return}else if(e.key===`-`){e.preventDefault(),Fe(1);return}else return;e.preventDefault(),g(t);let n=M.samples[t];if(n.t<L||n.t>R){let e=R-L;I(xe(n.t-e/2,n.t+e/2,M,`pan`))}l({kind:`sample`,point:n,mx:b.pad+H+K(n.t),my:b.pad+G/2})},Je=c?.kind===`sample`?c.point:u?.kind===`sample`?M.samples.find(e=>e.t===u.id)||null:p==null?null:M.samples[p]||null,Ye=-1e9,Y=`${d.monDay(new Date(L))} - ${d.monDay(new Date(R))}`;return(0,t.jsxs)(`div`,{ref:a,className:`tv-component`,style:{background:`var(--tv-canvas)`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-lg)`,boxShadow:`var(--tv-shadow-1)`,padding:b.pad,fontFamily:`var(--tv-font)`,color:`var(--tv-ink)`,position:`relative`,width:`100%`,overflow:`hidden`},children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`baseline`,justifyContent:`space-between`,gap:12,marginBottom:4,flexWrap:`wrap`},children:[(0,t.jsx)(`div`,{style:{fontSize:z?15:17,fontWeight:600,letterSpacing:0,color:`var(--tv-ink)`,lineHeight:1.25,minWidth:0},children:r.title||n.meta?.title||M.name}),(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-3)`,whiteSpace:`nowrap`,flex:`none`},children:Y})]}),(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`baseline`,justifyContent:`space-between`,gap:12,marginBottom:14,flexWrap:`wrap`},children:[(0,t.jsxs)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-4)`},children:[M.name.toLowerCase(),` · `,M.samples.length,` log`,M.samples.length===1?``:`s`,M.unit?` · ${M.unit}`:``]}),(0,t.jsx)(Pe,{onZoom:Fe,onPan:Be,onReset:Ve,span:Ee(R-L),atFull:ue,atMin:de,isDefault:fe})]}),j&&A===`top`&&(0,t.jsx)(_,{position:A,text:te,narrow:z}),V&&k===`top`&&(0,t.jsx)(`div`,{style:{paddingBottom:14},children:(0,t.jsx)(je,{dataset:n,cmap:N,mode:x})}),(0,t.jsxs)(`div`,{style:{display:`flex`,gap:b.pad,alignItems:`flex-start`},children:[(0,t.jsx)(`div`,{style:{flex:`1 1 auto`,minWidth:0},children:(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`stretch`},children:[(0,t.jsx)(`div`,{style:{width:H,height:G,position:`relative`,flex:`none`},children:!B&&oe.ticks.map(e=>(0,t.jsx)(`div`,{style:{position:`absolute`,right:8,top:J(e),transform:`translateY(-50%)`,fontFamily:`var(--tv-mono)`,fontSize:z?10:11,color:`var(--tv-ink-4)`,whiteSpace:`nowrap`},children:e},e))}),(0,t.jsxs)(`div`,{style:{position:`relative`,width:W,flex:`none`},children:[(0,t.jsxs)(`div`,{style:{position:`relative`,width:W,height:G,overflow:`hidden`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-sm)`,background:`var(--tv-canvas)`},children:[(0,t.jsxs)(`svg`,{width:W,height:G,style:{position:`absolute`,inset:0,pointerEvents:`none`,display:`block`},children:[!B&&oe.ticks.map(e=>(0,t.jsx)(`line`,{x1:0,x2:W,y1:J(e),y2:J(e),stroke:`var(--tv-grid)`,strokeWidth:1},`y-${e}`)),se.map((e,n)=>(0,t.jsx)(`line`,{x1:K(e.t),x2:K(e.t),y1:0,y2:G,stroke:e.strong?`var(--tv-grid-week)`:`var(--tv-grid)`,strokeWidth:1},`x-${n}`)),!B&&x===`tint`?Ne.map((e,n)=>e.labelId&&e.points.length>1&&(0,t.jsx)(`path`,{d:ke(e.points),fill:h(N[e.labelId]||we,9),stroke:`none`},`area-${n}`)):!B&&M.samples.length>1&&(0,t.jsx)(`path`,{d:ke(M.samples),fill:`rgba(21,24,30,0.045)`,stroke:`none`}),!B&&x===`tint`?ce.map((e,n)=>(0,t.jsx)(`line`,{x1:K(e.a.t),y1:J(e.a.value),x2:K(e.b.t),y2:J(e.b.value),stroke:e.labelId?N[e.labelId]||we:`var(--tv-ink-4)`,strokeWidth:b.line,strokeLinecap:`round`},`segment-${n}`)):!B&&M.samples.length>1&&(0,t.jsx)(`path`,{d:he(M.samples),fill:`none`,stroke:we,strokeWidth:b.line,strokeLinecap:`round`,strokeLinejoin:`round`}),!B&&T&&M.target&&M.target.value>=oe.lo&&M.target.value<=oe.hi&&(0,t.jsxs)(`g`,{children:[(0,t.jsx)(`line`,{x1:0,x2:W,y1:J(M.target.value),y2:J(M.target.value),stroke:`var(--tv-ink-3)`,strokeWidth:1.4,strokeDasharray:`4 3`}),(0,t.jsx)(`rect`,{x:Math.max(4,W-72),y:J(M.target.value)-9,width:68,height:16,rx:3,fill:`#fff`,opacity:.92}),(0,t.jsxs)(`text`,{x:W-7,y:J(M.target.value)+3.5,textAnchor:`end`,fontFamily:`var(--tv-mono)`,fontSize:10.5,fill:`var(--tv-ink-3)`,children:[M.target.label,` `,Oe(M.target.value)]})]}),!B&&pe&&M.samples.map(e=>{let n=K(e.t);if(n<-6||n>W+6)return null;let r=ve(M.states,e.t),i=x===`tint`&&r?.labelIds?.[0]?N[r.labelIds[0]]:we;return(0,t.jsx)(`circle`,{cx:n,cy:J(e.value),r:b.dot,fill:i,stroke:`#fff`,strokeWidth:1.25},e.t)}),!B&&w&&M.samples.map(e=>{let n=K(e.t);return n<8||n>W-8||n-Ye<34?null:(Ye=n,(0,t.jsx)(`text`,{x:n,y:J(e.value)-b.dot-4,textAnchor:`middle`,fontFamily:`var(--tv-mono)`,fontSize:b.valueLabel,fill:`var(--tv-ink-3)`,children:Oe(e.value)},`value-${e.t}`))})]}),!B&&E&&M.events.map(e=>{let n=K(e._t);if(n<-2||n>W+2)return null;let r=S&&e.labelIds?.[0]?N[e.labelIds[0]]:`var(--tv-ink-3)`;return(0,t.jsxs)(`span`,{children:[(0,t.jsx)(`span`,{style:{position:`absolute`,left:n,top:0,bottom:0,width:1,background:`var(--tv-grid-week)`,pointerEvents:`none`}}),(0,t.jsx)(`span`,{tabIndex:0,role:`button`,"aria-label":e.title,onMouseEnter:t=>l({kind:`event`,event:e,...Ue(t)}),onMouseMove:t=>l({kind:`event`,event:e,...Ue(t)}),onMouseLeave:()=>l(null),onFocus:()=>l({kind:`event`,event:e,mx:b.pad+H+n,my:120}),onBlur:()=>l(null),style:{position:`absolute`,left:n,top:3,transform:`translateX(-50%)`,cursor:`pointer`,outline:`none`,padding:3},children:(0,t.jsx)(`span`,{style:{display:`block`,width:11,height:11,transform:`rotate(45deg)`,background:`#fff`,border:`2px solid ${r}`,borderRadius:2}})})]},e.id)}),Je&&!B&&K(Je.t)>=-2&&K(Je.t)<=W+2&&(0,t.jsx)(Ae,{x:K(Je.t),y:J(Je.value),color:x===`tint`&&ve(M.states,Je.t)?.labelIds?.[0]?N[ve(M.states,Je.t).labelIds[0]]:we,selected:u?.kind===`sample`&&u.id===Je.t,dot:b.dot}),!B&&(0,t.jsx)(`div`,{tabIndex:0,role:`application`,"aria-label":`${M.name} chart, ${Y}. Arrow keys move between readings; plus and minus zoom. Vertical scroll zooms around the cursor; horizontal or shift-scroll pans.`,onPointerDown:We,onMouseMove:Ge,onMouseLeave:()=>l(null),onWheel:Ke,onKeyDown:qe,style:{position:`absolute`,inset:0,cursor:`crosshair`,outline:`none`,touchAction:`pan-y`}}),B&&(0,t.jsx)(v,{title:`No measurements in this window`,description:`Log a value to start the trend line.`,icon:`trend`,narrow:z})]}),(0,t.jsx)(`div`,{style:{position:`relative`,width:W,height:b.xAxisH,marginTop:6},children:se.map((e,n)=>(0,t.jsx)(`div`,{style:{position:`absolute`,left:K(e.t),top:0,transform:`translateX(-50%)`,textAlign:`center`,whiteSpace:`nowrap`},children:(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:z?10.5:11.5,fontWeight:e.strong?600:500,color:e.strong?`var(--tv-ink-2)`:`var(--tv-ink-4)`,lineHeight:1},children:e.label})},n))}),!B&&x===`band`&&M.states.length>0&&(0,t.jsx)(Ie,{states:M.states,x:e=>K(e),plotW:W,cmap:N,height:b.bandH,narrow:z,selected:u?.kind===`state`?String(u.id):null,onSelect:e=>f(t=>t?.kind===`state`&&t.id===e?null:{kind:`state`,id:e}),onHover:(e,t)=>l({kind:`state`,state:e,...t?Ue(t):{mx:b.pad+H+(K(e._s)+K(e._e))/2,my:G+100}}),onLeave:()=>l(null)}),D&&!B&&(0,t.jsxs)(`div`,{style:{marginTop:12},children:[(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:9.5,letterSpacing:`.08em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`,marginBottom:5},children:`Full history · drag to move window`}),(0,t.jsx)(Le,{model:{...M,states:S?M.states:[]},viewport:F,cmap:N,width:W,height:b.miniH,onScrub:He})]})]})]})}),V&&k===`right`&&!z&&(0,t.jsxs)(`div`,{style:{width:U,flex:`none`,paddingTop:2},children:[(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.08em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`,marginBottom:12},children:`Phases`}),(0,t.jsx)(je,{dataset:n,cmap:N,mode:x,vertical:!0})]})]}),(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:18,flexWrap:`wrap`,padding:`14px 0 2px`,borderTop:`1px solid var(--tv-line)`,marginTop:14},children:[(0,t.jsx)(Me,{mode:x,hasTarget:T&&!!M.target,hasEvents:E&&M.events.length>0,seriesName:M.name.toLowerCase()}),V&&k===`bottom`&&(0,t.jsx)(je,{dataset:n,cmap:N,mode:x})]}),j&&A===`bottom`&&(0,t.jsx)(_,{position:A,text:te,narrow:z}),c&&!B&&(0,t.jsx)(Re,{hover:c,model:M,dataset:n,cmap:N,showStates:S,showTarget:T,width:s,stateAt:e=>ve(M.states,e)})]})}function Ae({x:e,y:n,color:r,selected:i,dot:a}){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`div`,{style:{position:`absolute`,left:e,top:0,bottom:0,width:1,background:`var(--tv-accent)`,opacity:.5,pointerEvents:`none`}}),(0,t.jsx)(`div`,{style:{position:`absolute`,left:e,top:n,width:a*2+4,height:a*2+4,transform:`translate(-50%,-50%)`,borderRadius:`50%`,background:r,border:`2px solid #fff`,boxShadow:i?`var(--tv-focus-ring)`:`0 1px 3px rgba(16,24,40,.25)`,pointerEvents:`none`}})]})}function je({dataset:e,cmap:n,mode:r,vertical:i=!1}){return(0,t.jsx)(`div`,{style:{display:`flex`,flexDirection:i?`column`:`row`,flexWrap:`wrap`,gap:i?8:`8px 16px`,alignItems:i?`stretch`:`center`},children:(e.labels||[]).map(e=>(0,t.jsxs)(`div`,{style:{display:`inline-flex`,alignItems:`center`,gap:8,minWidth:0,flex:`none`,maxWidth:i?`100%`:`none`},children:[(0,t.jsx)(`span`,{style:{width:16,height:9,borderRadius:3,background:h(n[e.id],r===`tint`?30:22),flex:`none`,boxShadow:`inset 3px 0 0 0 ${n[e.id]}, inset 0 0 0 1px ${h(n[e.id],34)}`}}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:12.5,color:`var(--tv-ink-2)`,fontWeight:500,lineHeight:1.3,whiteSpace:i?`normal`:`nowrap`},children:e.name})]},e.id))})}function Me({mode:e,hasTarget:n,hasEvents:r,seriesName:i}){return(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:15,flexWrap:`wrap`},children:[(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.08em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`},children:`Key`}),(0,t.jsx)(Ne,{label:i,children:(0,t.jsxs)(`svg`,{width:`26`,height:`12`,"aria-hidden":`true`,children:[(0,t.jsx)(`line`,{x1:`1`,y1:`6`,x2:`25`,y2:`6`,stroke:e===`tint`?`var(--tv-ink-3)`:we,strokeWidth:`2`}),(0,t.jsx)(`circle`,{cx:`13`,cy:`6`,r:`2.6`,fill:e===`tint`?`var(--tv-ink-3)`:we})]})}),n&&(0,t.jsx)(Ne,{label:`goal`,children:(0,t.jsx)(`svg`,{width:`26`,height:`12`,"aria-hidden":`true`,children:(0,t.jsx)(`line`,{x1:`1`,y1:`6`,x2:`25`,y2:`6`,stroke:`var(--tv-ink-3)`,strokeWidth:`1.5`,strokeDasharray:`4 3`})})}),e===`tint`&&(0,t.jsx)(Ne,{label:`line tinted by phase`,children:(0,t.jsxs)(`svg`,{width:`26`,height:`12`,"aria-hidden":`true`,children:[(0,t.jsx)(`line`,{x1:`1`,y1:`6`,x2:`13`,y2:`6`,stroke:`#2f6fed`,strokeWidth:`2.4`}),(0,t.jsx)(`line`,{x1:`13`,y1:`6`,x2:`25`,y2:`6`,stroke:`#0f9f6e`,strokeWidth:`2.4`})]})}),r&&(0,t.jsx)(Ne,{label:`milestone`,children:(0,t.jsx)(`span`,{style:{width:11,height:11,transform:`rotate(45deg)`,borderRadius:2,background:`#fff`,border:`2px solid var(--tv-ink-3)`}})})]})}function Ne({label:e,children:n}){return(0,t.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:7},children:[n,(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:11.5,color:`var(--tv-ink-3)`},children:e})]})}function Pe({onZoom:e,onPan:n,onReset:r,span:i,atFull:a,atMin:o,isDefault:s}){return(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,flexWrap:`wrap`},children:[(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-4)`,letterSpacing:`.02em`,marginRight:2},children:i}),(0,t.jsxs)(`div`,{style:{display:`flex`,gap:4},children:[(0,t.jsx)(Fe,{label:`‹`,title:`Pan back`,onClick:()=>n(-1)}),(0,t.jsx)(Fe,{label:`›`,title:`Pan forward`,onClick:()=>n(1)})]}),(0,t.jsxs)(`div`,{style:{display:`flex`,gap:4},children:[(0,t.jsx)(Fe,{label:`-`,title:`Zoom out`,onClick:()=>e(1),disabled:a}),(0,t.jsx)(Fe,{label:`+`,title:`Zoom in`,onClick:()=>e(-1),disabled:o})]}),(0,t.jsx)(Fe,{label:`Reset`,title:`Reset to default viewport`,onClick:r,disabled:s,wide:!0})]})}function Fe({label:e,title:n,onClick:r,disabled:i,wide:a}){return(0,t.jsx)(`button`,{type:`button`,"aria-label":n,title:n,onClick:r,disabled:i,style:{appearance:`none`,height:28,minWidth:a?`auto`:28,padding:a?`0 10px`:0,display:`inline-flex`,alignItems:`center`,justifyContent:`center`,border:`1px solid var(--tv-line)`,borderRadius:7,background:i?`var(--tv-rail)`:`#fff`,color:i?`var(--tv-ink-5)`:`var(--tv-ink-2)`,cursor:i?`default`:`pointer`,fontFamily:`var(--tv-mono)`,fontSize:12,fontWeight:600,boxShadow:i?`none`:`var(--tv-shadow-1)`},children:e})}function Ie({states:e,x:n,plotW:r,cmap:i,height:a,narrow:o,selected:s,onSelect:c,onHover:l,onLeave:u}){return(0,t.jsx)(`div`,{style:{position:`relative`,width:r,height:a,marginTop:8},children:e.map(e=>{let a=i[e.labelIds?.[0]||``]||`#64748b`,d=n(e._s),f=n(e._e),p=Math.max(0,d),m=Math.min(r,f);if(m-p<.5)return null;let g=d>=-.5,_=s===e.id;return(0,t.jsxs)(`div`,{role:`button`,tabIndex:0,onMouseEnter:t=>l(e,t),onMouseMove:t=>l(e,t),onMouseLeave:u,onFocus:()=>l(e,null),onBlur:u,onClick:()=>c(e.id),style:{position:`absolute`,left:p,width:m-p,top:0,bottom:0,cursor:`pointer`,outline:`none`,background:h(a,17),borderRadius:6,borderTop:`1px solid ${h(a,32)}`,borderBottom:`1px solid ${h(a,32)}`,boxShadow:[g?`inset 3px 0 0 0 ${a}`:null,_?`var(--tv-focus-ring)`:null].filter(Boolean).join(`, `)||`none`,display:`flex`,alignItems:`center`,gap:7,padding:`0 9px`,overflow:`hidden`},children:[g&&(0,t.jsx)(`span`,{style:{width:6,height:6,borderRadius:`50%`,background:a,flex:`none`}}),m-p>52&&(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:o?11:12,fontWeight:500,color:`var(--tv-ink-2)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:e.title})]},e.id)})})}function Le({model:n,viewport:r,cmap:i,width:a,height:o,onScrub:s}){let c=(0,e.useRef)(null),l=o-5-14,u=e=>(e-n.T0)/Math.max(1,n.T1-n.T0)*a,d=Math.max(1,n.vMax-n.vMin),f=e=>7+(1-(e-n.vMin)/d)*l,p=n.samples.map((e,t)=>`${t?`L`:`M`}${u(e.t).toFixed(1)} ${f(e.value).toFixed(1)}`).join(` `),[m,g]=r,_=u(m),v=u(g),y=e=>{let t=c.current?.getBoundingClientRect();if(!t)return n.T0;let r=Math.max(0,Math.min(1,(e-t.left)/t.width));return n.T0+r*(n.T1-n.T0)};return(0,t.jsxs)(`div`,{ref:c,onPointerDown:e=>{e.preventDefault();let t=g-m,n=c.current?.getBoundingClientRect(),r=n?e.clientX>=n.left+_-6&&e.clientX<=n.left+v+6:!1,i=(m+g)/2,a=r?y(e.clientX)-i:0,o=e=>{let n=y(e)-a;s(n-t/2,n+t/2)};o(e.clientX);let l=e=>o(e.clientX),u=()=>{window.removeEventListener(`pointermove`,l),window.removeEventListener(`pointerup`,u)};window.addEventListener(`pointermove`,l),window.addEventListener(`pointerup`,u)},style:{position:`relative`,width:a,height:o,cursor:`ew-resize`,background:`var(--tv-frame)`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-md)`,overflow:`hidden`,touchAction:`none`},children:[(0,t.jsxs)(`svg`,{width:a,height:o,style:{position:`absolute`,inset:0,pointerEvents:`none`},children:[n.states.map(e=>{let n=i[e.labelIds?.[0]||``]||`#64748b`,r=Math.max(0,u(e._s)),s=Math.min(a,u(e._e));return s-r<.5?null:(0,t.jsx)(`rect`,{x:r,y:o-5,width:s-r,height:5,fill:h(n,60)},e.id)}),n.samples.length>1&&(0,t.jsx)(`path`,{d:p,fill:`none`,stroke:`var(--tv-ink-3)`,strokeWidth:1.4,strokeLinejoin:`round`,strokeLinecap:`round`})]}),(0,t.jsx)(`div`,{style:{position:`absolute`,top:0,bottom:0,left:0,width:Math.max(0,_),background:`rgba(245,247,249,0.74)`,pointerEvents:`none`}}),(0,t.jsx)(`div`,{style:{position:`absolute`,top:0,bottom:0,left:Math.min(a,v),right:0,background:`rgba(245,247,249,0.74)`,pointerEvents:`none`}}),(0,t.jsxs)(`div`,{style:{position:`absolute`,top:0,bottom:0,left:_,width:Math.max(8,v-_),border:`1.5px solid var(--tv-accent)`,borderRadius:5,background:`var(--tv-accent-soft)`,pointerEvents:`none`},children:[(0,t.jsx)(`span`,{style:{position:`absolute`,left:-1,top:`50%`,transform:`translateY(-50%)`,width:3,height:16,background:`var(--tv-accent)`,borderRadius:2}}),(0,t.jsx)(`span`,{style:{position:`absolute`,right:-1,top:`50%`,transform:`translateY(-50%)`,width:3,height:16,background:`var(--tv-accent)`,borderRadius:2}})]})]})}function Re({hover:e,model:r,dataset:i,cmap:a,showStates:o,showTarget:s,width:c,stateAt:l}){let u=Math.max(8,Math.min(c-230-8,e.mx-230/2)),f=Math.max(8,e.my-104),p=``,m=``,_=`Reading`,v=we,y=null;if(e.kind===`sample`){let n=l(e.point.t);v=o&&n?.labelIds?.[0]?a[n.labelIds[0]]:we;let c=s&&r.target?Math.round((e.point.value-r.target.value)*10)/10:null;y=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`baseline`,gap:5,marginBottom:3},children:[(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:21,fontWeight:600,color:`var(--tv-ink)`,lineHeight:1},children:Oe(e.point.value)}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:12,color:`var(--tv-ink-4)`},children:r.unit}),c!=null&&(0,t.jsxs)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,marginLeft:`auto`,color:c>0?`#c2410c`:c<0?`#0f9f6e`:`var(--tv-ink-4)`},children:[c>0?`+`:``,Oe(c),` vs goal`]})]}),(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-3)`,lineHeight:1.45},children:d.full(new Date(e.point.t))}),o&&n?.labelIds?.[0]&&(0,t.jsxs)(`div`,{style:{display:`inline-flex`,alignItems:`center`,gap:6,marginTop:6},children:[(0,t.jsx)(`span`,{style:{width:8,height:8,borderRadius:2,background:h(v,26),boxShadow:`inset 2px 0 0 0 ${v}`,flex:`none`}}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-font)`,fontSize:11.5,color:`var(--tv-ink-2)`},children:g(i,n.labelIds[0])})]})]})}else e.kind===`state`?(_=`Phase`,p=e.state.title,v=a[e.state.labelIds?.[0]||``]||`#64748b`,m=`${d.full(new Date(e.state._s))} - ${d.full(new Date(e.state._e-n))}`):(_=`Milestone`,p=e.event.title,v=o&&e.event.labelIds?.[0]?a[e.event.labelIds[0]]:`var(--tv-ink-3)`,m=d.full(new Date(e.event._t)));let b=e.kind===`event`;return(0,t.jsx)(`div`,{"data-tv-transient":!0,style:{position:`absolute`,left:u,top:f,width:230,pointerEvents:`none`,zIndex:50},children:(0,t.jsxs)(`div`,{style:{background:`#fff`,border:`1px solid var(--tv-line)`,borderRadius:`var(--tv-r-md)`,boxShadow:`var(--tv-shadow-pop)`,padding:`10px 13px`},children:[(0,t.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:7,marginBottom:5},children:[(0,t.jsx)(`span`,{style:{width:9,height:9,borderRadius:b?1:`50%`,background:b?`#fff`:v,border:b?`2px solid ${v}`:`none`,transform:b?`rotate(45deg)`:`none`,flex:`none`}}),(0,t.jsx)(`span`,{style:{fontFamily:`var(--tv-mono)`,fontSize:10,letterSpacing:`.05em`,textTransform:`uppercase`,color:`var(--tv-ink-4)`},children:_})]}),y||(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`div`,{style:{fontSize:14,fontWeight:600,color:`var(--tv-ink)`,marginBottom:4,lineHeight:1.3},children:p}),(0,t.jsx)(`div`,{style:{fontFamily:`var(--tv-mono)`,fontSize:11,color:`var(--tv-ink-3)`,lineHeight:1.45},children:m})]})]})})}var ze={Studio:[`#2f6fed`,`#d97706`,`#0f9f6e`,`#c2410c`,`#7c3aed`,`#0891b2`,`#db2777`,`#475569`],Muted:[`#5b7aa8`,`#b08147`,`#5a8f73`,`#a96a4f`,`#7e6ba8`,`#5f8a96`,`#a96d86`,`#6b7280`],Vivid:[`#3b82f6`,`#f59e0b`,`#10b981`,`#ef4444`,`#8b5cf6`,`#06b6d4`,`#ec4899`,`#64748b`],Cool:[`#2563eb`,`#0ea5e9`,`#0d9488`,`#7c3aed`,`#4f46e5`,`#0891b2`,`#6366f1`,`#475569`]},Be=[{id:`focus`,name:`Focus`},{id:`travel`,name:`Travel`},{id:`qa`,name:`QA`},{id:`launch`,name:`Launch`}],Ve={schemaVersion:`timeview.dataset.v1`,timezone:`UTC`,meta:{title:`Launch preparation timeline`,description:`Focus work, travel, QA, and launch windows.`},labels:Be,events:[{id:`kickoff`,at:`2026-01-06T09:00:00Z`,title:`Kickoff`,labelIds:[`focus`]},{id:`design-freeze`,at:`2026-01-16T18:00:00Z`,title:`Design freeze`,labelIds:[`qa`]},{id:`launch`,at:`2026-01-27T15:00:00Z`,title:`Launch`,labelIds:[`launch`]}],intervals:[{id:`deep-work`,range:{start:`2026-01-06T00:00:00Z`,end:`2026-01-18T23:59:59Z`},title:`Deep work`,labelIds:[`focus`]},{id:`travel-week`,range:{start:`2026-01-12T00:00:00Z`,end:`2026-01-15T23:59:59Z`},title:`Travel`,labelIds:[`travel`]},{id:`qa-window`,range:{start:`2026-01-16T00:00:00Z`,end:`2026-01-24T23:59:59Z`},title:`QA window`,labelIds:[`qa`]},{id:`launch-window`,range:{start:`2026-01-24T00:00:00Z`,end:`2026-01-29T23:59:59Z`},title:`Launch window`,labelIds:[`launch`]}]},He={schemaVersion:`timeview.dataset.v1`,timezone:`UTC`,meta:{title:`Overlapping work streams`,description:`Several streams running in parallel across the same days.`},labels:[{id:`focus`,name:`Engineering`},{id:`travel`,name:`Design`},{id:`qa`,name:`Research`},{id:`launch`,name:`Marketing`},{id:`ops`,name:`Ops`}],events:[{id:`e1`,at:`2026-01-09T12:00:00Z`,title:`Spec sign-off`,labelIds:[`focus`]},{id:`e2`,at:`2026-01-20T12:00:00Z`,title:`Beta cut`,labelIds:[`qa`]}],intervals:[{id:`o1`,range:{start:`2026-01-05`,end:`2026-01-22`},title:`Build core`,labelIds:[`focus`]},{id:`o2`,range:{start:`2026-01-07`,end:`2026-01-17`},title:`Visual design`,labelIds:[`travel`]},{id:`o3`,range:{start:`2026-01-06`,end:`2026-01-14`},title:`User research`,labelIds:[`qa`]},{id:`o4`,range:{start:`2026-01-12`,end:`2026-01-26`},title:`Campaign prep`,labelIds:[`launch`]},{id:`o5`,range:{start:`2026-01-10`,end:`2026-01-24`},title:`Infra hardening`,labelIds:[`ops`]},{id:`o6`,range:{start:`2026-01-18`,end:`2026-01-28`},title:`Polish & QA`,labelIds:[`qa`]}]},Ue={schemaVersion:`timeview.dataset.v1`,timezone:`UTC`,meta:{title:`Dense sprint board`,description:`Many short tasks with long names competing for space.`},labels:[{id:`focus`,name:`Engineering`},{id:`travel`,name:`Design review`},{id:`qa`,name:`Quality assurance`},{id:`launch`,name:`Release management`},{id:`ops`,name:`Platform operations`},{id:`data`,name:`Data & analytics`}],events:[{id:`d1`,at:`2026-01-07`,title:`Sprint 1 demo`,labelIds:[`focus`]},{id:`d2`,at:`2026-01-13`,title:`Mid-cycle review`,labelIds:[`travel`]},{id:`d3`,at:`2026-01-19`,title:`Code freeze`,labelIds:[`qa`]},{id:`d4`,at:`2026-01-26`,title:`Go / no-go`,labelIds:[`launch`]}],intervals:[{id:`i1`,range:{start:`2026-01-05`,end:`2026-01-08`},title:`Authentication refactor`,labelIds:[`focus`]},{id:`i2`,range:{start:`2026-01-06`,end:`2026-01-09`},title:`Onboarding redesign exploration`,labelIds:[`travel`]},{id:`i3`,range:{start:`2026-01-08`,end:`2026-01-11`},title:`Accessibility audit pass`,labelIds:[`qa`]},{id:`i4`,range:{start:`2026-01-09`,end:`2026-01-13`},title:`Billing migration`,labelIds:[`focus`]},{id:`i5`,range:{start:`2026-01-10`,end:`2026-01-12`},title:`Marketing site copy`,labelIds:[`launch`]},{id:`i6`,range:{start:`2026-01-11`,end:`2026-01-16`},title:`Search infrastructure`,labelIds:[`ops`]},{id:`i7`,range:{start:`2026-01-12`,end:`2026-01-15`},title:`Event tracking instrumentation`,labelIds:[`data`]},{id:`i8`,range:{start:`2026-01-14`,end:`2026-01-18`},title:`Component library polish`,labelIds:[`travel`]},{id:`i9`,range:{start:`2026-01-15`,end:`2026-01-20`},title:`Load & performance testing`,labelIds:[`qa`]},{id:`i10`,range:{start:`2026-01-17`,end:`2026-01-22`},title:`Feature flag rollout`,labelIds:[`focus`]},{id:`i11`,range:{start:`2026-01-19`,end:`2026-01-23`},title:`Localization sweep`,labelIds:[`ops`]},{id:`i12`,range:{start:`2026-01-21`,end:`2026-01-27`},title:`Release candidate hardening`,labelIds:[`launch`]},{id:`i13`,range:{start:`2026-01-22`,end:`2026-01-25`},title:`Analytics dashboards`,labelIds:[`data`]},{id:`i14`,range:{start:`2026-01-24`,end:`2026-01-29`},title:`Launch comms`,labelIds:[`launch`]}]},We={schemaVersion:`timeview.dataset.v1`,timezone:`UTC`,meta:{title:`Team coverage & assignments`,description:`Overlapping assignments stacking within each team.`},labels:[{id:`focus`,name:`Platform`},{id:`travel`,name:`Mobile`},{id:`qa`,name:`Support`},{id:`launch`,name:`Growth`}],events:[{id:`s-e1`,at:`2026-01-14T12:00:00Z`,title:`Coverage checkpoint`,labelIds:[`focus`]},{id:`s-e2`,at:`2026-01-22T12:00:00Z`,title:`Campaign live`,labelIds:[`launch`]}],intervals:[{id:`s1`,range:{start:`2026-01-05T00:00:00Z`,end:`2026-01-16T23:59:59Z`},title:`Data migration`,labelIds:[`focus`]},{id:`s2`,range:{start:`2026-01-10T00:00:00Z`,end:`2026-01-20T23:59:59Z`},title:`On-call rotation`,labelIds:[`focus`]},{id:`s3`,range:{start:`2026-01-06T00:00:00Z`,end:`2026-01-12T23:59:59Z`},title:`iOS release`,labelIds:[`travel`]},{id:`s4`,range:{start:`2026-01-13T00:00:00Z`,end:`2026-01-19T23:59:59Z`},title:`Android release`,labelIds:[`travel`]},{id:`s5`,range:{start:`2026-01-08T00:00:00Z`,end:`2026-01-18T23:59:59Z`},title:`Tier 1 desk`,labelIds:[`qa`]},{id:`s6`,range:{start:`2026-01-11T00:00:00Z`,end:`2026-01-15T23:59:59Z`},title:`Tier 2 desk`,labelIds:[`qa`]},{id:`s7`,range:{start:`2026-01-12T00:00:00Z`,end:`2026-01-14T23:59:59Z`},title:`Escalations`,labelIds:[`qa`]},{id:`s8`,range:{start:`2026-01-16T00:00:00Z`,end:`2026-01-24T23:59:59Z`},title:`Launch campaign`,labelIds:[`launch`]}]},Ge={schemaVersion:`timeview.dataset.v1`,timezone:`UTC`,meta:{title:`Launch preparation timeline`,description:`No events or intervals fall in this window yet.`},labels:Be,events:[],intervals:[]},Ke=[{id:`diet`,name:`Diet`},{id:`maintenance`,name:`Maintenance`},{id:`off`,name:`Off plan`}];function qe(e){let t=e;return()=>(t=(t*1664525+1013904223)%4294967296,t/4294967296)}function Je(e,t,r=`2025-06-10`,i=`2026-06-09`){let a=qe(e*1009+Math.round(t*100)),o=[],s=Date.parse(r+`T08:00:00Z`),c=Date.parse(i+`T08:00:00Z`),l=Math.max(1,Math.round((c-s)/n));for(let r=s;r<=c;r+=e*n){let e=Math.round((r-s)/n),i=204-e*.055;e>95&&(i+=(e-95)*.032),e>164&&(i-=(e-164)*.07),e>270&&(i+=(e-270)*.018);let c=Math.sin(e/l*Math.PI*4)*.9,u=(a()-.5)*t;o.push({at:new Date(r).toISOString(),value:Math.round((i+c+u)*10)/10})}return o}var Ye={schemaVersion:`timeview.dataset.v1`,timezone:`UTC`,meta:{title:`Weight trend & diet phases`,description:`Body weight logs with diet, maintenance, and off-plan periods.`},labels:Ke,events:[{id:`m-goal-start`,at:`2025-06-10T08:00:00Z`,title:`Cut started`,labelIds:[`diet`]},{id:`m-off-plan`,at:`2025-09-13T08:00:00Z`,title:`Travel break`,labelIds:[`off`]},{id:`m-maintenance`,at:`2026-03-16T08:00:00Z`,title:`Maintenance`,labelIds:[`maintenance`]}],intervals:[{id:`phase-1`,range:{start:`2025-06-10T00:00:00Z`,end:`2025-09-12T23:59:59Z`},title:`Diet`,labelIds:[`diet`]},{id:`phase-2`,range:{start:`2025-09-13T00:00:00Z`,end:`2025-11-24T23:59:59Z`},title:`Off plan`,labelIds:[`off`]},{id:`phase-3`,range:{start:`2025-11-25T00:00:00Z`,end:`2026-03-15T23:59:59Z`},title:`Diet`,labelIds:[`diet`]},{id:`phase-4`,range:{start:`2026-03-16T00:00:00Z`,end:`2026-06-09T23:59:59Z`},title:`Maintenance`,labelIds:[`maintenance`]}],series:{id:`weight`,name:`Weight`,unit:`lb`,target:{value:185,label:`goal`},samples:Je(2,1.8)}},Y={default:Ve,overlap:He,dense:Ue,stacked:We,empty:Ge,metric:Ye,metricDense:{...Ye,meta:{title:`Daily weight trend`,description:`Dense daily logs across the full history.`},series:{...Ye.series,samples:Je(1,1.5)}},metricSparse:{...Ye,meta:{title:`Weekly weight check-ins`,description:`Sparse weekly logs where value labels are useful.`},series:{...Ye.series,samples:Je(7,1.1,`2026-01-06`,`2026-06-09`)}},metricEmpty:{...Ye,meta:{title:`Weight trend & diet phases`,description:`No measurements have been logged yet.`},events:[],intervals:[],series:{...Ye.series,samples:[]}}},Xe=[{id:`bandedTimeline`,kind:`bandedTimeline`,label:`BandedTimeline`,description:`Horizontal day axis with interval bands and milestone diamonds.`,Component:w,defaultDataset:Y.default,defaultSpec:{kind:`bandedTimeline`,title:Y.default.meta?.title,overlapMode:`lanes`,density:`comfortable`,legend:{enabled:!0,position:`bottom`},caption:{enabled:!0,position:`bottom`,text:`Intervals may overlap. Diamond markers show milestone dates.`},events:{showPoints:!0,showLabels:!0}},defaultPalette:ze.Studio,controls:{legend:!0,events:!0,caption:!0,today:!1,options:[`overlapMode`,`density`,`legend`,`caption`,`eventLabels`,`palette`]},agentGuide:`Use for plans, launches, trips, and schedules where interval overlap and milestone order matter on a horizontal timeline.`},{id:`laneCalendar`,kind:`laneCalendar`,label:`LaneCalendar`,description:`Week rows and day columns with interval chips and milestone diamonds.`,Component:F,defaultDataset:Y.default,defaultSpec:{kind:`laneCalendar`,title:Y.default.meta?.title,laneMode:`packed`,density:`comfortable`,legend:{enabled:!0,position:`bottom`},caption:{enabled:!0,position:`bottom`,text:`Chips span the days an interval covers and split at week boundaries; diamonds mark milestone dates.`},events:{showLabels:!0},today:null},defaultPalette:ze.Studio,controls:{legend:!0,events:!0,caption:!0,today:!0,options:[`laneMode`,`density`,`legend`,`caption`,`milestoneLabels`,`today`,`palette`]},agentGuide:`Use for calendar-first views where week rows, day cells, and current-day context are more useful than a continuous axis.`},{id:`densityHeatmap`,kind:`densityHeatmap`,label:`DensityHeatmap`,description:`Aggregated category-by-time matrix for counts and active duration.`,Component:K,defaultDataset:Y.default,defaultSpec:{kind:`densityHeatmap`,title:Y.default.meta?.title,bucket:`day`,measure:`count`,groupBy:`category`,scaleMode:`category`,density:`comfortable`,showValues:!0,caption:{enabled:!0,position:`bottom`,text:`Cell intensity encodes density. Intervals add active duration to every bucket they touch; milestones add a count to their bucket.`}},defaultPalette:ze.Studio,controls:{legend:!1,events:!1,caption:!0,today:!1,options:[`bucket`,`measure`,`groupBy`,`scaleMode`,`density`,`showValues`,`caption`,`palette`]},agentGuide:`Use for high-volume data when the goal is spotting density patterns by day/week and category rather than reading every item.`},{id:`metricTimeline`,kind:`metricTimeline`,label:`MetricTimeline`,description:`Numeric trend line with diet/state bands and a navigable viewport.`,Component:ke,defaultDataset:Y.metric,defaultSpec:{kind:`metricTimeline`,title:Y.metric.meta?.title,stateMode:`band`,yAxis:`auto`,defaultDays:90,today:`2026-06-09`,density:`comfortable`,showPoints:!0,showValues:!1,showTarget:!0,minimap:!0,legend:{enabled:!0,position:`bottom`},caption:{enabled:!0,position:`bottom`,text:`The line shows logged values. State bands mark diet, maintenance, and off-plan periods; the minimap freezes the active viewport for export.`},events:{showMarkers:!0}},defaultPalette:ze.Studio,controls:{legend:!0,events:!0,caption:!0,today:!0,options:[`stateMode`,`yAxis`,`defaultDays`,`points`,`values`,`target`,`minimap`,`milestoneMarkers`,`legend`,`caption`,`palette`]},agentGuide:`Use for logged numeric measurements over time, such as weight, spend, latency, or mood, especially when contextual periods like diet versus non-diet should explain the trend.`},{id:`spanMatrix`,kind:`spanMatrix`,label:`SpanMatrix`,description:`Presence and continuity matrix by category and day/week bucket.`,Component:ue,defaultDataset:Y.stacked,defaultSpec:{kind:`spanMatrix`,title:Y.stacked.meta?.title,bucket:`day`,groupBy:`category`,zoom:1,density:`comfortable`,showCounts:!0,legend:{enabled:!0,position:`bottom`},caption:{enabled:!0,position:`bottom`,text:`Each cell marks whether a category had an interval active that day; touching cells join into one run, and hatched cells carry two or more overlapping spans.`},events:{showMarkers:!0},today:`2026-01-14`},defaultPalette:ze.Studio,controls:{legend:!0,events:!0,caption:!0,today:!0,options:[`bucket`,`groupBy`,`density`,`showCounts`,`milestoneMarkers`,`today`,`legend`,`caption`,`palette`]},agentGuide:`Use for coverage views where the goal is seeing category presence, continuity, gaps, overlaps, and milestones across day/week buckets.`}],Ze=Object.fromEntries(Xe.map(e=>[e.id,e])),Qe=[`comfortable`,`compact`],$e=[`top`,`bottom`,`right`,`off`],et=[`top`,`bottom`,`off`],tt=[`lanes`,`packed`,`layered`,`hatched`],nt=[`packed`,`category`],rt=[`day`,`week`],it=[`count`,`duration`],at=[`category`,`none`],ot=[`category`,`uniform`],st=.6,ct=2.5,lt=[`band`,`tint`,`off`],ut=[`auto`,`full`],dt=[30,90,180,365];function X(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Z(e){return typeof e==`string`&&!Number.isNaN(new Date(e).getTime())}function Q(e,t){return typeof t==`string`&&e.includes(t)}function ft(e,t){return typeof t==`number`&&e.includes(t)}function pt(e,t){return typeof e==`boolean`?e:t}function mt(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}function ht(e){return JSON.parse(JSON.stringify(e))}function $(e,t,n){e.push(`${t} must be one of: ${n.join(`, `)}.`)}function gt(e){let t=[];if(!X(e))return{value:null,errors:[`Root must be a JSON object.`]};let n=e;if(n.schemaVersion!==`timeview.dataset.v1`&&t.push(`schemaVersion must be "timeview.dataset.v1".`),(typeof n.timezone!=`string`||!n.timezone.trim())&&t.push(`timezone is required.`),Array.isArray(n.labels)||t.push(`labels must be an array.`),Array.isArray(n.events)||t.push(`events must be an array.`),Array.isArray(n.intervals)||t.push(`intervals must be an array.`),t.length)return{value:null,errors:t};let r=new Set;return n.labels?.forEach((e,n)=>{if(!X(e)){t.push(`labels[${n}] must be an object.`);return}(typeof e.id!=`string`||!e.id.trim())&&t.push(`labels[${n}].id is required.`),(typeof e.name!=`string`||!e.name.trim())&&t.push(`labels[${n}].name is required.`),typeof e.id==`string`&&(r.has(e.id)&&t.push(`Duplicate label id "${e.id}".`),r.add(e.id))}),n.events?.forEach((e,n)=>{if(!X(e)){t.push(`events[${n}] must be an object.`);return}(typeof e.id!=`string`||!e.id.trim())&&t.push(`events[${n}].id is required.`),(typeof e.title!=`string`||!e.title.trim())&&t.push(`events[${n}].title is required.`),Z(e.at)||t.push(`events[${n}].at must be a valid date string.`),e.labelIds!=null&&!Array.isArray(e.labelIds)?t.push(`events[${n}].labelIds must be an array.`):e.labelIds?.forEach(e=>{(typeof e!=`string`||!r.has(e))&&t.push(`events[${n}] references unknown label "${String(e)}".`)})}),n.intervals?.forEach((e,n)=>{if(!X(e)){t.push(`intervals[${n}] must be an object.`);return}(typeof e.id!=`string`||!e.id.trim())&&t.push(`intervals[${n}].id is required.`),(typeof e.title!=`string`||!e.title.trim())&&t.push(`intervals[${n}].title is required.`);let i=e.range;if(!X(i)){t.push(`intervals[${n}].range is required.`);return}Z(i.start)||t.push(`intervals[${n}].range.start must be a valid date string.`),Z(i.end)||t.push(`intervals[${n}].range.end must be a valid date string.`),Z(i.start)&&Z(i.end)&&new Date(i.end).getTime()<new Date(i.start).getTime()&&t.push(`intervals[${n}].range.end must be after start.`),e.labelIds!=null&&!Array.isArray(e.labelIds)?t.push(`intervals[${n}].labelIds must be an array.`):e.labelIds?.forEach(e=>{(typeof e!=`string`||!r.has(e))&&t.push(`intervals[${n}] references unknown label "${String(e)}".`)})}),n.series!=null&&(X(n.series)?((typeof n.series.id!=`string`||!n.series.id.trim())&&t.push(`series.id is required.`),(typeof n.series.name!=`string`||!n.series.name.trim())&&t.push(`series.name is required.`),n.series.unit!=null&&typeof n.series.unit!=`string`&&t.push(`series.unit must be a string.`),Array.isArray(n.series.samples)?n.series.samples.forEach((e,n)=>{if(!X(e)){t.push(`series.samples[${n}] must be an object.`);return}Z(e.at)||t.push(`series.samples[${n}].at must be a valid date string.`),(typeof e.value!=`number`||!Number.isFinite(e.value))&&t.push(`series.samples[${n}].value must be a finite number.`)}):t.push(`series.samples must be an array.`),n.series.target!=null&&(X(n.series.target)?(typeof n.series.target.value!=`number`||!Number.isFinite(n.series.target.value))&&t.push(`series.target.value must be a finite number.`):t.push(`series.target must be an object.`))):t.push(`series must be an object.`)),{value:t.length?null:e,errors:t}}function _t(e,t,n){let r=e.caption||{position:`bottom`};if(!X(t.caption))return r;let i=t.caption.enabled===!1?`off`:t.caption.position;return i!=null&&!Q(et,i)&&$(n,`caption.position`,et),{enabled:t.caption.enabled!==!1,position:Q(et,i)?i:r.position,text:typeof t.caption.text==`string`?t.caption.text:r.text}}function vt(e,t,n){let r=e.legend||{position:`bottom`};if(!X(t.legend))return r;let i=t.legend.enabled===!1?`off`:t.legend.position;return i!=null&&!Q($e,i)&&$(n,`legend.position`,$e),{enabled:t.legend.enabled!==!1,position:Q($e,i)?i:r.position}}function yt(e,t){let n=e.events||{};return X(t.events)?{showPoints:pt(t.events.showPoints,n.showPoints!==!1),showLabels:pt(t.events.showLabels,n.showLabels!==!1),showMarkers:pt(t.events.showMarkers,n.showMarkers!==!1)}:n}function bt(e,t,n){return t.density!=null&&!Q(Qe,t.density)&&$(n,`density`,Qe),{title:typeof t.title==`string`?t.title:e.title,density:Q(Qe,t.density)?t.density:e.density,caption:_t(e,t,n)}}function xt(e,t){let n=Ze[e],r=n.defaultSpec,i=X(t)?t:{},a=[];if(X(t)||a.push(`Spec root must be a JSON object.`),i.kind!=null&&i.kind!==e&&a.push(`kind must be "${e}" for ${n.label}.`),e===`bandedTimeline`)return i.overlapMode!=null&&!Q(tt,i.overlapMode)&&$(a,`overlapMode`,tt),{value:{kind:`bandedTimeline`,...bt(r,i,a),legend:vt(r,i,a),events:yt(r,i),overlapMode:Q(tt,i.overlapMode)?i.overlapMode:r.overlapMode},errors:a};if(e===`laneCalendar`)return i.laneMode!=null&&!Q(nt,i.laneMode)&&$(a,`laneMode`,nt),i.today!=null&&i.today!==`auto`&&!Z(i.today)&&a.push(`today must be "auto", an ISO date string, null, or omitted.`),{value:{kind:`laneCalendar`,...bt(r,i,a),legend:vt(r,i,a),events:yt(r,i),laneMode:Q(nt,i.laneMode)?i.laneMode:r.laneMode,today:i.today===`auto`||Z(i.today)?i.today:i.today===null?null:void 0},errors:a};if(e===`spanMatrix`)return i.bucket!=null&&!Q(rt,i.bucket)&&$(a,`bucket`,rt),i.groupBy!=null&&!Q(at,i.groupBy)&&$(a,`groupBy`,at),i.today!=null&&!Z(i.today)&&a.push(`today must be an ISO date string, null, or omitted.`),i.zoom!=null&&(typeof i.zoom!=`number`||!Number.isFinite(i.zoom)||i.zoom<st||i.zoom>ct)&&a.push(`zoom must be a number from ${st} to ${ct}.`),{value:{kind:`spanMatrix`,...bt(r,i,a),legend:vt(r,i,a),events:yt(r,i),bucket:Q(rt,i.bucket)?i.bucket:r.bucket,groupBy:Q(at,i.groupBy)?i.groupBy:r.groupBy,zoom:Math.min(ct,Math.max(st,mt(i.zoom,r.zoom||1))),showCounts:pt(i.showCounts,r.showCounts!==!1),today:Z(i.today)?i.today:i.today===null?null:r.today},errors:a};if(e===`metricTimeline`){i.stateMode!=null&&!Q(lt,i.stateMode)&&$(a,`stateMode`,lt),i.yAxis!=null&&!Q(ut,i.yAxis)&&$(a,`yAxis`,ut),i.defaultDays!=null&&!ft(dt,i.defaultDays)&&a.push(`defaultDays must be one of: 30, 90, 180, 365.`),i.today!=null&&!Z(i.today)&&a.push(`today must be an ISO date string, null, or omitted.`);let e=r;return{value:{kind:`metricTimeline`,...bt(r,i,a),legend:vt(r,i,a),events:yt(r,i),stateMode:Q(lt,i.stateMode)?i.stateMode:e.stateMode,yAxis:Q(ut,i.yAxis)?i.yAxis:e.yAxis,defaultDays:ft(dt,i.defaultDays)?i.defaultDays:e.defaultDays,today:Z(i.today)?i.today:i.today===null?null:e.today,showPoints:pt(i.showPoints,e.showPoints!==!1),showValues:pt(i.showValues,e.showValues===!0),showTarget:pt(i.showTarget,e.showTarget!==!1),minimap:pt(i.minimap,e.minimap!==!1)},errors:a}}return i.bucket!=null&&!Q(rt,i.bucket)&&$(a,`bucket`,rt),i.measure!=null&&!Q(it,i.measure)&&$(a,`measure`,it),i.groupBy!=null&&!Q(at,i.groupBy)&&$(a,`groupBy`,at),i.scaleMode!=null&&!Q(ot,i.scaleMode)&&$(a,`scaleMode`,ot),{value:{kind:`densityHeatmap`,...bt(r,i,a),bucket:Q(rt,i.bucket)?i.bucket:r.bucket,measure:Q(it,i.measure)?i.measure:r.measure,groupBy:Q(at,i.groupBy)?i.groupBy:r.groupBy,scaleMode:Q(ot,i.scaleMode)?i.scaleMode:r.scaleMode,showValues:pt(i.showValues,r.showValues!==!1)},errors:a}}function St(e,t){let n=xt(e,t);return{value:n.errors.length?null:n.value,errors:n.errors}}function Ct(e){return Array.isArray(e)&&e.length>0&&e.every(e=>typeof e==`string`)?e:ze.Studio}function wt(e){let t=[];if(!X(e))return{value:null,errors:[`Config root must be a JSON object.`]};e.v!==1&&t.push(`Config version must be 1.`),(typeof e.visualizer!=`string`||!(e.visualizer in Ze))&&t.push(`visualizer must be a known Timeview visualizer.`);let n=typeof e.visualizer==`string`&&e.visualizer in Ze?e.visualizer:`bandedTimeline`,r=gt(e.dataset),i=xt(n,e.spec);return t.push(...r.errors.map(e=>`dataset: ${e}`)),t.push(...i.errors.map(e=>`spec: ${e}`)),!r.value||!i.value||t.length?{value:null,errors:t}:{value:{v:1,visualizer:n,dataset:r.value,spec:i.value,palette:Ct(e.palette)},errors:[]}}function Tt(e){let t=new TextEncoder().encode(e),n=``;return t.forEach(e=>{n+=String.fromCharCode(e)}),btoa(n).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``)}function Et(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(Math.ceil(e.length/4)*4,`=`),n=atob(t),r=Uint8Array.from(n,e=>e.charCodeAt(0));return new TextDecoder().decode(r)}function Dt(e){return Tt(JSON.stringify(e))}function Ot(e){let t=e.startsWith(`#tv=`)?e.slice(4):e;if(!t)return{value:null,errors:[`Missing #tv config token.`]};try{return wt(JSON.parse(Et(t)))}catch(e){return{value:null,errors:[e instanceof Error?e.message:`Invalid encoded config.`]}}}function kt(e){return ht(e)}var At={"1200x720":{width:1200,height:720,label:`1200x720`},"1600x900":{width:1600,height:900,label:`1600x900`}};function jt(e){return e in At}function Mt(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,80)}function Nt(e,t){let n=Mt(e.dataset.meta?.title||`timeview`);return`timeview-${Mt(e.visualizer)}-${n||`view`}.${t}`}function Pt(e=new Date){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function Ft(e,t=Pt()){return!(`today`in e.spec)||e.spec.today!==`auto`?e:{...e,spec:{...e.spec,today:t}}}function It(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Lt(e){return e===`html`||e===`png`}function Rt(e){return typeof e==`string`&&e in At}function zt(e){let t=[];if(!It(e))return{value:null,errors:[`Dashboard root must be a JSON object.`]};e.v!==1&&t.push(`Dashboard version must be 1.`),(typeof e.title!=`string`||!e.title.trim())&&t.push(`Dashboard title must be a non-empty string.`),(typeof e.generatedAt!=`string`||!e.generatedAt.trim())&&t.push(`Dashboard generatedAt must be a non-empty string.`),(!Array.isArray(e.panels)||e.panels.length===0)&&t.push(`Dashboard panels must be a non-empty array.`);let n=[];return Array.isArray(e.panels)&&e.panels.forEach((e,r)=>{if(!It(e)){t.push(`panels[${r}] must be a JSON object.`);return}(typeof e.id!=`string`||!e.id.trim())&&t.push(`panels[${r}].id must be a non-empty string.`),(typeof e.title!=`string`||!e.title.trim())&&t.push(`panels[${r}].title must be a non-empty string.`),Lt(e.format)||t.push(`panels[${r}].format must be "png" or "html".`),Rt(e.preset)||t.push(`panels[${r}].preset must be one of ${Object.keys(At).join(`, `)}.`);let i=wt(e.config);t.push(...i.errors.map(e=>`panels[${r}].config: ${e}`)),i.value&&typeof e.id==`string`&&typeof e.title==`string`&&Lt(e.format)&&Rt(e.preset)&&n.push({id:e.id,title:e.title,config:i.value,format:e.format,preset:e.preset})}),t.length?{value:null,errors:t}:{value:{v:1,title:e.title,generatedAt:e.generatedAt,panels:n},errors:[]}}exports.BandedTimeline=w,exports.DAY_MS=n,exports.DensityHeatmap=K,exports.EXPORT_PRESETS=At,exports.LaneCalendar=F,exports.METRIC_MIN_SPAN=me,exports.MetricTimeline=ke,exports.SpanMatrix=ue,exports.TV_DATA=Y,exports.TV_PALETTES=ze,exports.TV_VISUALIZERS=Xe,exports.TV_VISUALIZER_BY_ID=Ze,exports.cloneTimeviewConfig=kt,exports.decodeTimeviewConfig=Ot,exports.domainOf=a,exports.encodeTimeviewConfig=Dt,exports.exportFileName=Nt,exports.fmt=d,exports.freezeConfigForExport=Ft,exports.isExportPresetId=jt,exports.localIsoDate=Pt,exports.normalizePalette=Ct,exports.normalizeTimeviewConfig=wt,exports.normalizeTimeviewDashboard=zt,exports.normalizeViewSpec=xt,exports.slug=Mt,exports.startOfDayUTC=E,exports.tvAggregate=z,exports.tvBuckets=R,exports.tvClampViewport=xe,exports.tvDayCell=O,exports.tvDays=s,exports.tvDefaultViewport=be,exports.tvFmtDuration=V,exports.tvGridWeeks=D,exports.tvLineSegments=Ce,exports.tvMetricModel=ye,exports.tvMetricTimeTicks=_e,exports.tvNearest=Se,exports.tvNiceTicks=ge,exports.tvSameUTCDay=A,exports.tvScale=o,exports.tvSpanMatrix=B,exports.tvSplitInterval=k,exports.tvStateAt=ve,exports.tvWeeks=c,exports.validateTimeDataset=gt,exports.validateViewSpec=St;