@taskctrl/canvas-timeline 0.10.1 → 0.10.3
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.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const U=require("react/jsx-runtime"),h=require("react"),xi=require("react-dom"),he=require("dayjs"),ye={primary:"#269bf7",trainColors:{},status:{red:"#EF5350",yellow:"#FBBF24",green:"#31c48d"},grid:{line:"#E5E5E5",rowAlt:"#F7F7F7",weekend:"rgba(0,0,0,0.03)"},item:{radius:3,text:"#374151",selectedRing:"#a3a3a3"},marker:{today:"#FD7171",milestone:"#3B82F6",cursor:"#269bf7"},sidebar:{bg:"#F9FAFB",border:"#E5E7EB",text:"#6c737f"},header:{bg:"#F9FAFB",border:"#E5E7EB",text:"#6c737f"}};class vt{constructor(e){Object.defineProperty(this,"visibleTimeStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleTimeEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"canvasWidth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"canvasHeight",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"sidebarWidth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"lineHeight",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupCount",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"buffer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"scrollTop",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupHeights",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleDuration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pixelsPerMs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupYOffsets",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.visibleTimeStart=e.visibleTimeStart,this.visibleTimeEnd=e.visibleTimeEnd,this.canvasWidth=e.canvasWidth,this.canvasHeight=e.canvasHeight,this.sidebarWidth=e.sidebarWidth,this.lineHeight=e.lineHeight,this.groupCount=e.groupCount,this.buffer=e.buffer,this.scrollTop=e.scrollTop,this.groupHeights=e.groupHeights??null,this.visibleDuration=this.visibleTimeEnd-this.visibleTimeStart,this.pixelsPerMs=this.canvasWidth/this.visibleDuration,this.groupYOffsets=[],this.recomputeGroupYOffsets()}update(e){e.visibleTimeStart!==void 0&&(this.visibleTimeStart=e.visibleTimeStart),e.visibleTimeEnd!==void 0&&(this.visibleTimeEnd=e.visibleTimeEnd),e.canvasWidth!==void 0&&(this.canvasWidth=e.canvasWidth),e.canvasHeight!==void 0&&(this.canvasHeight=e.canvasHeight),e.sidebarWidth!==void 0&&(this.sidebarWidth=e.sidebarWidth),e.lineHeight!==void 0&&(this.lineHeight=e.lineHeight),e.groupCount!==void 0&&(this.groupCount=e.groupCount),e.buffer!==void 0&&(this.buffer=e.buffer),e.scrollTop!==void 0&&(this.scrollTop=e.scrollTop),e.groupHeights!==void 0&&(this.groupHeights=e.groupHeights??null),this.visibleDuration=this.visibleTimeEnd-this.visibleTimeStart,this.pixelsPerMs=this.canvasWidth/this.visibleDuration,this.recomputeGroupYOffsets()}recomputeGroupYOffsets(){var i;const e=new Array(this.groupCount+1);e[0]=0;for(let n=0;n<this.groupCount;n++){const r=((i=this.groupHeights)==null?void 0:i[n])??this.lineHeight;e[n+1]=e[n]+r}this.groupYOffsets=e}timeToX(e){return(e-this.visibleTimeStart)*this.pixelsPerMs}xToTime(e){return this.visibleTimeStart+e/this.pixelsPerMs}yToGroupIndex(e){if(this.groupCount===0)return 0;const i=e+this.scrollTop;if(i<=0)return 0;if(i>=this.groupYOffsets[this.groupCount])return this.groupCount-1;let n=0,r=this.groupCount-1;for(;n<r;){const u=n+r>>>1;this.groupYOffsets[u+1]>i?r=u:n=u+1}return n}groupIndexToY(e){return e<0?-this.scrollTop:e>=this.groupCount?(this.groupYOffsets[this.groupCount]??0)-this.scrollTop:this.groupYOffsets[e]-this.scrollTop}groupIndexToHeight(e){var i;return e<0||e>=this.groupCount?this.lineHeight:((i=this.groupHeights)==null?void 0:i[e])??this.lineHeight}getBufferBounds(){const e=this.visibleDuration*1.5;return{bufferStart:this.visibleTimeStart-e,bufferEnd:this.visibleTimeEnd+e}}getVisibleGroupRange(){if(this.groupCount===0)return{firstVisible:0,lastVisible:-1};const e=this.yToGroupIndex(0),i=this.yToGroupIndex(this.canvasHeight);return{firstVisible:e,lastVisible:i}}isScrollInBuffer(e){const i=this.visibleDuration*1.5*this.pixelsPerMs;return Math.abs(e)<i}getTotalHeight(){return this.groupYOffsets[this.groupCount]??0}}class _i{constructor(){Object.defineProperty(this,"root",{enumerable:!0,configurable:!0,writable:!0,value:null})}buildFromItems(e,i,n){const r=e.map(u=>({item:u,start:i(u),end:n(u)}));this.root=this.buildNode(r)}buildNode(e){if(e.length===0)return null;let i=1/0,n=-1/0;for(const o of e)o.start<i&&(i=o.start),o.end>n&&(n=o.end);const r=(i+n)/2,u=[],s=[],c=[];for(const o of e)o.end<r?u.push(o):o.start>r?s.push(o):c.push(o);return{center:r,left:this.buildNode(u),right:this.buildNode(s),overlapping:c}}query(e,i){const n=[];return this.queryNode(this.root,e,i,n),n}queryNode(e,i,n,r){if(e!==null){for(const u of e.overlapping)u.start<=n&&u.end>=i&&r.push(u.item);i<=e.center&&e.left!==null&&this.queryNode(e.left,i,n,r),n>=e.center&&e.right!==null&&this.queryNode(e.right,i,n,r)}}}class Wi{constructor(e,i){Object.defineProperty(this,"lineHeight",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"itemHeightRatio",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layoutCache",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"groupMaxStack",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.lineHeight=e,this.itemHeightRatio=i}computeLayout(e,i,n){this.layoutCache=new Map,this.groupMaxStack=new Map;const r=this.lineHeight*this.itemHeightRatio,u=r*.6;if(!i){for(const c of e){const o=(n==null?void 0:n.isParent(c.id))??!1;this.layoutCache.set(c.id,{stackLevel:0,itemHeight:o?u:r}),this.groupMaxStack.set(c.group,0)}return this.layoutCache}const s=new Map;for(const c of e){let o=s.get(c.group);o||(o=[],s.set(c.group,o)),o.push(c)}for(const[c,o]of s)n?this.computeHierarchyLayout(o,n,r,u,c):this.computeFlatLayout(o,r,c);return this.layoutCache}computeFlatLayout(e,i,n){e.sort((s,c)=>{const o=s.start_time-c.start_time;return o!==0?o:c.end_time-c.start_time-(s.end_time-s.start_time)});const r=[];let u=0;for(const s of e){let c=-1;for(let o=0;o<r.length;o++)if(r[o]<=s.start_time){c=o;break}c===-1?(c=r.length,r.push(s.end_time)):r[c]=s.end_time,c>u&&(u=c),this.layoutCache.set(s.id,{stackLevel:c,itemHeight:i})}this.groupMaxStack.set(n,u)}computeHierarchyLayout(e,i,n,r,u){const s=[],c=[];for(const g of e)i.isParent(g.id)?c.push(g):s.push(g);s.sort((g,f)=>{const M=g.start_time-f.start_time;return M!==0?M:f.end_time-f.start_time-(g.end_time-g.start_time)});const o=[];let m=0;for(const g of s){let f=-1;for(let M=0;M<o.length;M++)if(o[M]<=g.start_time){f=M;break}f===-1?(f=o.length,o.push(g.end_time)):o[f]=g.end_time,f>m&&(m=f),this.layoutCache.set(g.id,{stackLevel:f,itemHeight:n})}c.sort((g,f)=>i.getNestingDepth(f.id)-i.getNestingDepth(g.id));let S=s.length>0?m+1:0;for(const g of c)this.layoutCache.set(g.id,{stackLevel:S,itemHeight:r}),S>m&&(m=S),S++;this.groupMaxStack.set(u,m)}getLayout(e){return this.layoutCache.get(e)}getGroupHeight(e){return((this.groupMaxStack.get(e)??0)+1)*this.lineHeight}}class ii{constructor(){Object.defineProperty(this,"parentToChildren",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"childToParent",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"itemMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"depthCache",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}rebuild(e){this.parentToChildren=new Map,this.childToParent=new Map,this.itemMap=new Map,this.depthCache=new Map;for(const i of e)this.itemMap.set(i.id,i);for(const i of e)if(i.parentId!==void 0&&this.itemMap.has(i.parentId)){this.childToParent.set(i.id,i.parentId);let n=this.parentToChildren.get(i.parentId);n||(n=[],this.parentToChildren.set(i.parentId,n)),n.push(i.id)}for(const i of this.childToParent.keys()){const n=new Set;let r=i;for(;r!==void 0;){if(n.has(r)){const u=this.childToParent.get(i);this.childToParent.delete(i);const s=this.parentToChildren.get(u);if(s){const c=s.indexOf(i);c!==-1&&s.splice(c,1),s.length===0&&this.parentToChildren.delete(u)}break}n.add(r),r=this.childToParent.get(r)}}}isParent(e){const i=this.parentToChildren.get(e);return i!==void 0&&i.length>0}getParent(e){return this.childToParent.get(e)}getChildren(e){return this.parentToChildren.get(e)??[]}getDescendants(e){const i=[],n=[...this.getChildren(e)];for(;n.length>0;){const r=n.pop();i.push(r);const u=this.parentToChildren.get(r);u&&n.push(...u)}return i}getEffectiveSpan(e){const i=this.itemMap.get(e);if(!i)return{start:0,end:0};let n=i.start_time,r=i.end_time;const u=this.getDescendants(e);for(const s of u){const c=this.itemMap.get(s);c&&(c.start_time<n&&(n=c.start_time),c.end_time>r&&(r=c.end_time))}return{start:n,end:r}}getNestingDepth(e){const i=this.depthCache.get(e);if(i!==void 0)return i;let n=0,r=this.childToParent.get(e);for(;r!==void 0;)n++,r=this.childToParent.get(r);return this.depthCache.set(e,n),n}getMoveDelta(e,i){const n=this.itemMap.get(e);if(!n)return[];const r=i-n.start_time;return this.getDescendants(e).map(s=>{const c=this.itemMap.get(s);return{itemId:s,newStart:c.start_time+r}})}getResizeConstraint(e,i){const n=this.getDescendants(e);if(n.length===0)return i==="left"?{min:-1/0,max:1/0}:{min:-1/0,max:1/0};if(i==="left"){let r=1/0;for(const u of n){const s=this.itemMap.get(u);s&&s.start_time<r&&(r=s.start_time)}return{min:-1/0,max:r}}else{let r=-1/0;for(const u of n){const s=this.itemMap.get(u);s&&s.end_time>r&&(r=s.end_time)}return{min:r,max:1/0}}}}function Bi(t,e,i,n,r,u){const{x:s,y:c,width:o,height:m}=i,S=u.primary;t.globalAlpha=.15,t.fillStyle=S,t.fillRect(s,c,o,m),t.globalAlpha=1,t.strokeStyle=S,t.lineWidth=1.5,t.strokeRect(s,c,o,m);const g=Math.min(m*.5,6),f=c+m/2;t.fillStyle=S,t.beginPath(),t.moveTo(s,f),t.lineTo(s+g,f-g),t.lineTo(s+g*2,f),t.lineTo(s+g,f+g),t.closePath(),t.fill(),t.beginPath(),t.moveTo(s+o,f),t.lineTo(s+o-g,f-g),t.lineTo(s+o-g*2,f),t.lineTo(s+o-g,f+g),t.closePath(),t.fill();const M=e.title;if(M&&o>30){t.fillStyle=u.item.text,t.font='500 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',t.textBaseline="middle";const T=t.measureText(M).width,p=o-g*4-4;if(p>20){const R=T>p?M.slice(0,Math.floor(M.length*p/T))+"...":M;t.fillText(R,s+o/2-Math.min(T,p)/2,f)}}n.selected&&(t.strokeStyle=u.item.selectedRing,t.lineWidth=2,t.strokeRect(s-1,c-1,o+2,m+2))}function Le(t,e,i,n,r,u){const s=i.xToTime(t),c=new Map;for(let g=0;g<u.length;g++)c.set(u[g].id,g);const o=n.query(s,s);let m=null,S=-1/0;for(const g of o){const f=c.get(g.group);if(f===void 0)continue;const M=r.getLayout(g.id);if(!M)continue;const T=i.timeToX(g.start_time),p=i.timeToX(g.end_time)-T;if(t<T||t>T+p)continue;const $=i.groupIndexToY(f)+M.stackLevel*i.lineHeight+(i.lineHeight-M.itemHeight)/2,X=M.itemHeight;e<$||e>$+X||$>S&&(S=$,m=g)}return m}function bt(t,e,i){const n=e.yToGroupIndex(t);return i[n]??null}function Gt(t,e,i,n=6){const r=i.timeToX(e.start_time),u=i.timeToX(e.end_time);return t-r<=n?"left":u-t<=n?"right":"body"}function zi(t,e){return t.canResize??e}function ji(t,e){return t.canMove??e}function Ut(t,e,i,n){const r=zi(t,i);return e==="left"&&(r==="left"||r==="both")?"resize-left":e==="right"&&(r==="right"||r==="both")?"resize-right":t.canResize===!1&&e!=="body"?null:ji(t,n)?"move":null}function yt(t,e,i){const n=window.devicePixelRatio||1,r=Math.round(e*n),u=Math.round(i*n);(t.width!==r||t.height!==u)&&(t.width=r,t.height=u,t.style.width=`${e}px`,t.style.height=`${i}px`);const s=t.getContext("2d");return s.setTransform(n,0,0,n,0,0),s}function Tt(t,e){const i=window.devicePixelRatio||1;t.clearRect(0,0,e.width/i,e.height/i)}class Li{constructor(e){Object.defineProperty(this,"dirty",{enumerable:!0,configurable:!0,writable:!0,value:{grid:!1,items:!1,overlay:!1}}),Object.defineProperty(this,"rafId",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"drawCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.drawCallback=e}markDirty(e){this.dirty[e]=!0,this.schedule()}markAllDirty(){this.dirty.grid=!0,this.dirty.items=!0,this.dirty.overlay=!0,this.schedule()}dispose(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null)}schedule(){this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null;const e={...this.dirty};this.dirty.grid=!1,this.dirty.items=!1,this.dirty.overlay=!1,this.drawCallback(e)}))}}var Ge=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ue(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var ni={exports:{}};(function(t,e){(function(i,n){t.exports=n()})(Ge,function(){var i="minute",n=/[+-]\d\d(?::?\d\d)?/g,r=/([+-]|\d\d)/g;return function(u,s,c){var o=s.prototype;c.utc=function(p){var R={date:p,utc:!0,args:arguments};return new s(R)},o.utc=function(p){var R=c(this.toDate(),{locale:this.$L,utc:!0});return p?R.add(this.utcOffset(),i):R},o.local=function(){return c(this.toDate(),{locale:this.$L,utc:!1})};var m=o.parse;o.parse=function(p){p.utc&&(this.$u=!0),this.$utils().u(p.$offset)||(this.$offset=p.$offset),m.call(this,p)};var S=o.init;o.init=function(){if(this.$u){var p=this.$d;this.$y=p.getUTCFullYear(),this.$M=p.getUTCMonth(),this.$D=p.getUTCDate(),this.$W=p.getUTCDay(),this.$H=p.getUTCHours(),this.$m=p.getUTCMinutes(),this.$s=p.getUTCSeconds(),this.$ms=p.getUTCMilliseconds()}else S.call(this)};var g=o.utcOffset;o.utcOffset=function(p,R){var $=this.$utils().u;if($(p))return this.$u?0:$(this.$offset)?g.call(this):this.$offset;if(typeof p=="string"&&(p=function(E){E===void 0&&(E="");var F=E.match(n);if(!F)return null;var B=(""+F[0]).match(r)||["-",0,0],D=B[0],z=60*+B[1]+ +B[2];return z===0?0:D==="+"?z:-z}(p),p===null))return this;var X=Math.abs(p)<=16?60*p:p;if(X===0)return this.utc(R);var C=this.clone();if(R)return C.$offset=X,C.$u=!1,C;var H=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(C=this.local().add(X+H,i)).$offset=X,C.$x.$localOffset=H,C};var f=o.format;o.format=function(p){var R=p||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,R)},o.valueOf=function(){var p=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*p},o.isUTC=function(){return!!this.$u},o.toISOString=function(){return this.toDate().toISOString()},o.toString=function(){return this.toDate().toUTCString()};var M=o.toDate;o.toDate=function(p){return p==="s"&&this.$offset?c(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():M.call(this)};var T=o.diff;o.diff=function(p,R,$){if(p&&this.$u===p.$u)return T.call(this,p,R,$);var X=this.local(),C=c(p).local();return T.call(X,C,R,$)}}})})(ni);var Ai=ni.exports;const Ni=Ue(Ai);var ri={exports:{}};(function(t,e){(function(i,n){t.exports=n()})(Ge,function(){var i={year:0,month:1,day:2,hour:3,minute:4,second:5},n={};return function(r,u,s){var c,o=function(f,M,T){T===void 0&&(T={});var p=new Date(f),R=function($,X){X===void 0&&(X={});var C=X.timeZoneName||"short",H=$+"|"+C,E=n[H];return E||(E=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:$,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:C}),n[H]=E),E}(M,T);return R.formatToParts(p)},m=function(f,M){for(var T=o(f,M),p=[],R=0;R<T.length;R+=1){var $=T[R],X=$.type,C=$.value,H=i[X];H>=0&&(p[H]=parseInt(C,10))}var E=p[3],F=E===24?0:E,B=p[0]+"-"+p[1]+"-"+p[2]+" "+F+":"+p[4]+":"+p[5]+":000",D=+f;return(s.utc(B).valueOf()-(D-=D%1e3))/6e4},S=u.prototype;S.tz=function(f,M){f===void 0&&(f=c);var T,p=this.utcOffset(),R=this.toDate(),$=R.toLocaleString("en-US",{timeZone:f}),X=Math.round((R-new Date($))/1e3/60),C=15*-Math.round(R.getTimezoneOffset()/15)-X;if(!Number(C))T=this.utcOffset(0,M);else if(T=s($,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(C,!0),M){var H=T.utcOffset();T=T.add(p-H,"minute")}return T.$x.$timezone=f,T},S.offsetName=function(f){var M=this.$x.$timezone||s.tz.guess(),T=o(this.valueOf(),M,{timeZoneName:f}).find(function(p){return p.type.toLowerCase()==="timezonename"});return T&&T.value};var g=S.startOf;S.startOf=function(f,M){if(!this.$x||!this.$x.$timezone)return g.call(this,f,M);var T=s(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return g.call(T,f,M).tz(this.$x.$timezone,!0)},s.tz=function(f,M,T){var p=T&&M,R=T||M||c,$=m(+s(),R);if(typeof f!="string")return s(f).tz(R);var X=function(F,B,D){var z=F-60*B*1e3,_=m(z,D);if(B===_)return[z,B];var te=m(z-=60*(_-B)*1e3,D);return _===te?[z,_]:[F-60*Math.min(_,te)*1e3,Math.max(_,te)]}(s.utc(f,p).valueOf(),$,R),C=X[0],H=X[1],E=s(C).utcOffset(H);return E.$x.$timezone=R,E},s.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},s.tz.setDefault=function(f){c=f}}})})(ri);var Gi=ri.exports;const Ui=Ue(Gi);he.extend(Ni);he.extend(Ui);function ue(t,e){return e?he(t).tz(e):he(t)}class qi{draw(e,i,n,r,u,s,c,o){const{firstVisible:m,lastVisible:S}=i.getVisibleGroupRange();for(let C=m;C<=S;C++){const H=i.groupIndexToY(C),E=i.groupIndexToHeight(C),F=n[C];if(!F)continue;let B;const D=s==null?void 0:s(F);D!=null&&D.backgroundColor?B=D.backgroundColor:B=C%2===0?"#FFFFFF":r.grid.rowAlt,e.fillStyle=B,e.fillRect(0,H,i.canvasWidth,E),e.strokeStyle=(D==null?void 0:D.borderBottomColor)??r.grid.line,e.lineWidth=.5,e.beginPath(),e.moveTo(0,H+E),e.lineTo(i.canvasWidth,H+E),e.stroke()}if(c&&c.length>0)for(const C of c){const H=i.timeToX(C.start),E=i.timeToX(C.end);if(E<0||H>i.canvasWidth)continue;const F=Math.max(0,H),B=Math.min(i.canvasWidth,E)-F,D=C.opacity??.12,z=parseInt(C.color.slice(1,3),16),_=parseInt(C.color.slice(3,5),16),te=parseInt(C.color.slice(5,7),16);e.fillStyle=`rgb(${Math.round(z*D+255*(1-D))},${Math.round(_*D+255*(1-D))},${Math.round(te*D+255*(1-D))})`,e.fillRect(F,0,B,i.canvasHeight)}const g=i.visibleTimeStart,f=i.visibleTimeEnd,p=864e5/(f-g)*i.canvasWidth;let R="day";p<2?R="month":p<8&&(R="week");{let C=ue(g,o).startOf("day");const H=ue(f,o).endOf("day");let E=null,F=1,B=0;const D=[],z=_=>{E!==null&&(e.fillStyle=E,F!==1&&(e.globalAlpha=F),e.fillRect(B,0,_-B,i.canvasHeight),F!==1&&(e.globalAlpha=1),E=null,F=1)};for(;C.isBefore(H);){const _=i.timeToX(C.valueOf()),te=C.toDate(),q=u==null?void 0:u(te);let J=null,ce=1;if(q!=null&&q.backgroundColor)J=q.backgroundColor,ce=q.opacity??1;else{const me=C.day();(me===0||me===6)&&(J=r.grid.weekend)}q!=null&&q.borderColor&&D.push({x:_,color:q.borderColor}),J===E&&ce===F||(z(_),J!==null&&(E=J,F=ce,B=_)),C=C.add(1,"day")}E!==null&&z(i.timeToX(C.valueOf()));for(const _ of D)e.strokeStyle=_.color,e.lineWidth=.5,e.beginPath(),e.moveTo(_.x,0),e.lineTo(_.x,i.canvasHeight),e.stroke()}let $=ue(g,o).startOf(R);const X=ue(f,o).add(1,R);for(e.strokeStyle=r.grid.line,e.lineWidth=.5,e.beginPath();$.isBefore(X);){const C=i.timeToX($.valueOf());e.moveTo(C,0),e.lineTo(C,i.canvasHeight),$=$.add(1,R)}if(e.stroke(),c&&c.length>0)for(const C of c){const H=i.timeToX(C.start),E=i.timeToX(C.end);if(!(E<0||H>i.canvasWidth)&&(e.strokeStyle=C.color,e.globalAlpha=.4,e.lineWidth=1,e.beginPath(),H>=0&&H<=i.canvasWidth&&(e.moveTo(H,0),e.lineTo(H,i.canvasHeight)),E>=0&&E<=i.canvasWidth&&(e.moveTo(E,0),e.lineTo(E,i.canvasHeight)),e.stroke(),e.globalAlpha=1,C.label)){const F=Math.max(0,H),B=Math.min(i.canvasWidth,E)-F;e.save(),e.font='600 10px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';const D=e.measureText(C.label).width,z=6,_=D+z*2,te=18,q=F+(B-_)/2,J=4;e.fillStyle=C.color,e.globalAlpha=.9,e.beginPath(),e.roundRect(q,J,_,te,3),e.fill(),e.globalAlpha=1,e.fillStyle="#FFFFFF",e.textBaseline="middle",e.fillText(C.label,q+z,J+te/2),e.restore()}}}}const qt='500 12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';function si(t,e){return{roundRect(i,n,r,u,s=3){t.beginPath(),t.roundRect(i,n,r,u,s),t.fill()},fillText(i,n,r,u){if(t.font=qt,u!==void 0&&t.measureText(i).width>u){let s=0,c=i.length;for(;s<c;){const o=Math.ceil((s+c)/2),m=i.slice(0,o)+"...";t.measureText(m).width<=u?s=o:c=o-1}t.fillText(i.slice(0,s)+"...",n,r)}else t.fillText(i,n,r)},gradient(i,n,r,u){const s=t.createLinearGradient(i,0,i+n,0);return s.addColorStop(0,r),s.addColorStop(.5,r),s.addColorStop(.5,u),s.addColorStop(1,u),s},leftBar(i,n=3){e&&(t.save(),t.fillStyle=i,t.fillRect(e.x,e.y,n,e.height),t.restore())},icon(i,n,r,u=14){t.save();const s=u/2;if(i==="check"){t.fillStyle="#31c48d",t.beginPath(),t.arc(n+s,r+s,s,0,Math.PI*2),t.fill(),t.strokeStyle="#ffffff",t.lineWidth=u*.12,t.beginPath();const c=n+s,o=r+s;t.moveTo(c-s*.45,o),t.lineTo(c-s*.1,o+s*.42),t.lineTo(c+s*.45,o-s*.35),t.stroke()}else if(i==="danger-red"||i==="danger-yellow"){const c=i==="danger-red"?"#EF5350":"#FBBF24";t.fillStyle=c,t.beginPath(),t.moveTo(n+s,r),t.lineTo(n+u,r+u),t.lineTo(n,r+u),t.closePath(),t.fill(),t.fillStyle="#ffffff";const o=u*.12,m=n+s-o/2;t.fillRect(m,r+u*.35,o,u*.35),t.beginPath(),t.arc(n+s,r+u*.82,o*.7,0,Math.PI*2),t.fill()}t.restore()},badge(i,n,r,u){t.save(),t.font=qt;const c=t.measureText(i).width,o=8,S=12+3*2,g=c+o*2,f=S/2;t.fillStyle=u,t.beginPath(),t.roundRect(n,r,g,S,f),t.fill(),t.fillStyle="#ffffff",t.textAlign="center",t.textBaseline="middle",t.fillText(i,n+g/2,r+S/2),t.restore()}}}class Zi{draw(e,i,n,r,u,s,c,o,m,S,g,f,M,T){const p=(i.visibleTimeEnd-i.visibleTimeStart)*.1,R=i.visibleTimeStart-p,$=i.visibleTimeEnd+p,X=u.query(R,$),C=new Map;for(let D=0;D<n.length;D++)C.set(n[D].id,D);const H=new Set(S),E=new Map,F=-i.lineHeight,B=i.canvasHeight+i.lineHeight;for(const D of X){const z=C.get(D.group);if(z===void 0)continue;const _=s.getLayout(D.id);if(!_)continue;const q=i.groupIndexToY(z)+_.stackLevel*i.lineHeight+(i.lineHeight-_.itemHeight)/2,J=_.itemHeight;if(q+J<F||q>B)continue;const ce=i.timeToX(D.start_time),me=i.timeToX(D.end_time)-ce,ge={x:ce,y:q,width:me,height:J};E.set(D.id,ge);const De={selected:H.has(D.id),hovered:g===D.id,dragging:!1,filtered:D.filtered!==!1};e.save();const qe=si(e,ge);let ke;M&&(T!=null&&T.isParent(D.id))?ke=M:o&&(D.type==="control_area_group"||D.type==="construction_train")?ke=o:ke=c,ke(e,D,ge,De,qe),e.restore()}if(f&&f.length>0){const D=new Set;for(const z of f)E.has(z.fromItemId)||D.add(z.fromItemId),E.has(z.toItemId)||D.add(z.toItemId);if(D.size>0){const z=new Map;for(const _ of r)D.has(_.id)&&z.set(_.id,_);for(const[_,te]of z){const q=C.get(te.group);if(q===void 0)continue;const J=s.getLayout(_);if(!J)continue;const me=i.groupIndexToY(q)+J.stackLevel*i.lineHeight+(i.lineHeight-J.itemHeight)/2,ge=i.timeToX(te.start_time),De=i.timeToX(te.end_time)-ge;E.set(_,{x:ge,y:me,width:De,height:J.itemHeight})}}this.drawDependencies(e,f,E,g,m)}}drawDependencies(e,i,n,r,u){for(const s of i){const c=n.get(s.fromItemId),o=n.get(s.toItemId);if(!c||!o)continue;const m=r===s.fromItemId||r===s.toItemId;e.strokeStyle=m?u.primary:s.color??"#94A3B8",e.lineWidth=m?2:1.5,e.setLineDash([]);const S=c.x+c.width,g=c.y+c.height/2,f=o.x,M=o.y+o.height/2,T=Math.abs(f-S),p=Math.max(T*.4,30);e.beginPath(),e.moveTo(S,g),e.bezierCurveTo(S+p,g,f-p,M,f,M),e.stroke();const R=6;e.fillStyle=e.strokeStyle,e.beginPath(),e.moveTo(f,M),e.lineTo(f-R,M-R/2),e.lineTo(f-R,M+R/2),e.closePath(),e.fill()}}}class Vi{draw(e,i,n,r){const{cursorX:u,snapX:s,markers:c,interaction:o}=r;if(c)for(const m of c){const S=i.timeToX(m.date);if(e.fillStyle=m.color,e.fillRect(S-m.width/2,0,m.width,i.canvasHeight),m.label){e.save(),e.font='500 10px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';const g=e.measureText(m.label).width,f=8,M=200,T=Math.min(g+f*2,M),p=20,R=S-T/2,$=4;e.fillStyle=m.color,e.beginPath(),e.roundRect(R,$,T,p,3),e.fill(),e.fillStyle="#FFFFFF",e.textBaseline="middle";const X=M-f*2,C=g>X?m.label.slice(0,Math.floor(m.label.length*X/g))+"…":m.label;e.fillText(C,R+f,$+p/2),e.restore()}}if(u!=null&&(e.strokeStyle=n.marker.cursor,e.lineWidth=1,e.beginPath(),e.moveTo(u,0),e.lineTo(u,i.canvasHeight),e.stroke()),s!=null&&(e.strokeStyle=n.primary,e.lineWidth=1,e.setLineDash([4,4]),e.beginPath(),e.moveTo(s,0),e.lineTo(s,i.canvasHeight),e.stroke(),e.setLineDash([])),o){o.groupChanged&&o.targetGroupY!==void 0&&(e.fillStyle="rgba(59, 130, 246, 0.08)",e.fillRect(0,o.targetGroupY,i.canvasWidth,i.lineHeight)),e.save(),e.globalAlpha=.5;const m=si(e,o.bounds);o.renderer(e,o.item,o.bounds,{selected:!1,hovered:!1,dragging:!0,filtered:!0},m),e.restore()}}}const Zt=120;function Ki(t){let e=t.deltaY||t.deltaX;return t.deltaMode===1?e*=15:t.deltaMode===2&&(e*=800),Math.max(-Zt,Math.min(Zt,e))}class Qi{constructor(e,i,n,r,u){Object.defineProperty(this,"onZoom",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleTimeStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleTimeEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"minZoom",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"maxZoom",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.onZoom=e,this.visibleTimeStart=i,this.visibleTimeEnd=n,this.minZoom=r,this.maxZoom=u}updateBounds(e,i){this.visibleTimeStart=e,this.visibleTimeEnd=i}handleWheelZoom(e,i){const n=Ki(e),r=e.ctrlKey?10:e.metaKey?3:1,u=n>0?1+r*n/500:1/(1+r*-n/500),s=this.visibleTimeEnd-this.visibleTimeStart;let c=Math.round(s*u);c=Math.max(this.minZoom,Math.min(this.maxZoom,c));const o=Math.round(this.visibleTimeStart+(s-c)*i),m=o+c;this.onZoom(o,m)}}const rt=864e5;let Vt=!1;function Mt(t){return Vt||(Vt=!0,console.warn(`[canvas-timeline] dragSnap function returned ${t}; falling back to no snap. This warning is shown once per session.`)),1}function Ae(t,e,i){if(t===void 0)return 1;if(typeof t!="function")return t;const n=t(e,i);return typeof n=="number"?!Number.isFinite(n)||n<=0?Mt(`an invalid interval (${n})`):n:!Number.isFinite(n.interval)||n.interval<=0?Mt(`an invalid interval (${n.interval})`):Number.isFinite(n.anchor)?n:Mt(`a non-finite anchor (${n.anchor})`)}function Ne(t,e,i){if(typeof e!="number"){const{interval:r,anchor:u}=e;return!Number.isFinite(r)||r<=0||!Number.isFinite(u)?t:Math.round((t-u)/r)*r+u}const n=e;if(i&&n%rt===0){const r=n/rt,u=ue(t,i),s=u.startOf("day"),c=s.add(1,"day").valueOf()-s.valueOf(),o=(t-s.valueOf())/c,m=Math.round(he.utc(u.format("YYYY-MM-DD")).valueOf()/rt),S=Math.round((m+o)/r)*r,g=he.utc(S*rt).format("YYYY-MM-DD");return he.tz(g,i).valueOf()}return Math.round(t/n)*n}const Ji=4;class en{constructor(e){Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"dragSnap",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activated",{enumerable:!0,configurable:!0,writable:!0,value:!1}),this.dragSnap=e}startInteraction(e,i,n,r){this.state={item:e,mode:i,startX:n,startY:r,currentX:n,currentY:r,deltaX:0,originalGroup:e.group,currentGroup:e.group},this.activated=!1}update(e,i){this.state&&(this.state.currentX=e,this.state.currentY=i,this.state.deltaX=e-this.state.startX,!this.activated&&Math.abs(this.state.deltaX)>=Ji&&(this.activated=!0))}setCurrentGroup(e){this.state&&(this.state.currentGroup=e)}endMove(e){if(!this.state)return null;const i=this.state.deltaX/e,n=this.state.item.start_time+i,r=Ne(n,Ae(this.dragSnap,this.state.item)),u=this.state.currentGroup;return this.state=null,this.activated=!1,{newStartTime:r,newGroupId:u}}endResize(e){if(!this.state)return null;const i=this.state.deltaX/e,n=this.state.mode==="resize-left"?"left":"right",u=(n==="left"?this.state.item.start_time:this.state.item.end_time)+i,s=Ne(u,Ae(this.dragSnap,this.state.item,n));return this.state=null,this.activated=!1,{newTime:s,edge:n}}cancel(){this.state=null,this.activated=!1}getState(){return this.state}getMode(){var e;return((e=this.state)==null?void 0:e.mode)??null}isActive(){return this.state!==null&&this.activated}isPending(){return this.state!==null}}function St(t,e,i){const n=[];for(const r of t)r.id!==e&&(n.push(i(r.start_time)),n.push(i(r.end_time)));return n}function st(t,e,i,n,r){if(e.length===0)return null;let u=e[0],s=Math.abs(t-u);for(let c=1;c<e.length;c++){const o=Math.abs(t-e[c]);o<s&&(s=o,u=e[c])}return s<=i?u:null}function oi(t,e,i){const n=i.canvasWidth/(e.visibleTimeEnd-e.visibleTimeStart),r=t.deltaX/n,u=t.item.start_time+r,s=Ae(i.dragSnap,t.item),c=(e.visibleTimeEnd-e.visibleTimeStart)*.1,o=i.intervalTree.query(e.visibleTimeStart-c,e.visibleTimeEnd+c),m=St(o,t.item.id,f=>e.timeToX(f)),S=st(e.timeToX(u),m,8);if(S!==null)return e.xToTime(S);const g=st(e.timeToX(t.item.end_time+r),m,8);return g!==null?e.xToTime(g)-(t.item.end_time-t.item.start_time):Ne(u,s,i.timezone)}function ai(t,e,i){const n=i.canvasWidth/(e.visibleTimeEnd-e.visibleTimeStart),r=t.deltaX/n,u=t.mode==="resize-left"?"left":"right",s=(u==="left"?t.item.start_time:t.item.end_time)+r,c=Ae(i.dragSnap,t.item,u),o=(e.visibleTimeEnd-e.visibleTimeStart)*.1,m=i.intervalTree.query(e.visibleTimeStart-o,e.visibleTimeEnd+o),S=St(m,t.item.id,T=>e.timeToX(T)),g=st(e.timeToX(s),S,8);let f=g!==null?e.xToTime(g):Ne(s,c,i.timezone);const M=i.hierarchyEngine.getResizeConstraint(t.item.id,u);return u==="left"&&f>M.max?f=M.max:u==="right"&&f<M.min&&(f=M.min),{edge:u,time:f}}function tn(t,e,i,n){if(t.mode==="move"){const o=oi(t,e,i),m=t.item.end_time-t.item.start_time;return{itemId:t.item.id,mode:"move",time:o,startTime:o,endTime:o+m,pointerX:n.x,pointerY:n.y}}const{edge:r,time:u}=ai(t,e,i),s=r==="left"?u:t.item.start_time,c=r==="right"?u:t.item.end_time;return{itemId:t.item.id,mode:t.mode,edge:r,time:u,startTime:s,endTime:c,pointerX:n.x,pointerY:n.y}}var li={exports:{}};(function(t,e){(function(i,n){t.exports=n()})(Ge,function(){var i="day";return function(n,r,u){var s=function(m){return m.add(4-m.isoWeekday(),i)},c=r.prototype;c.isoWeekYear=function(){return s(this).year()},c.isoWeek=function(m){if(!this.$utils().u(m))return this.add(7*(m-this.isoWeek()),i);var S,g,f,M,T=s(this),p=(S=this.isoWeekYear(),g=this.$u,f=(g?u.utc:u)().year(S).startOf("year"),M=4-f.isoWeekday(),f.isoWeekday()>4&&(M+=7),f.add(M,i));return T.diff(p,"week")+1},c.isoWeekday=function(m){return this.$utils().u(m)?this.day()||7:this.day(this.day()%7?m:m-7)};var o=c.startOf;c.startOf=function(m,S){var g=this.$utils(),f=!!g.u(S)||S;return g.p(m)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):o.bind(this)(m,S)}}})})(li);var nn=li.exports;const rn=Ue(nn),Kt=200;function Qt({groups:t,width:e,lineHeight:i,groupHeights:n,scrollTop:r,canvasHeight:u,theme:s,groupRenderer:c,onScroll:o}){var C;const m=h.useRef(null),S=h.useRef(!1),g=h.useMemo(()=>{const H=new Array(t.length+1);H[0]=0;for(let E=0;E<t.length;E++)H[E+1]=H[E]+((n==null?void 0:n[E])??i);return H},[t.length,n,i]),f=g[t.length]??0,M=u,T=h.useCallback(H=>{if(t.length===0||H<=0)return 0;if(H>=f)return t.length-1;let E=0,F=t.length-1;for(;E<F;){const B=E+F>>>1;g[B+1]>H?F=B:E=B+1}return E},[t.length,g,f]),p=T(r-Kt),R=T(r+u+Kt),$=h.useCallback(H=>{S.current||o(H.currentTarget.scrollTop)},[o]);h.useEffect(()=>{m.current&&(S.current=!0,m.current.scrollTop=r,requestAnimationFrame(()=>{S.current=!1}))},[r]);const X=[];for(let H=p;H<=R;H++){const E=t[H];if(!E)continue;const F=g[H],B=g[H+1]-F;X.push(U.jsx("div",{style:{position:"absolute",top:F,height:B,width:"100%",overflow:"hidden",display:"flex",alignItems:"stretch",borderBottom:`1px solid ${((C=s.grid)==null?void 0:C.line)??"#E5E5E5"}`,boxSizing:"border-box"},children:c(E)},E.id))}return U.jsx("div",{ref:m,onScroll:$,style:{width:e,height:M,overflowY:f>u?"auto":"hidden",overflowX:"hidden",position:"relative",borderRight:`1px solid ${s.sidebar.border}`,backgroundColor:s.sidebar.bg},children:U.jsx("div",{style:{height:f,position:"relative"},children:X})})}function ui(t){return null}ui.displayName="TodayMarker";function Jt(t){return{date:Math.floor(Date.now()/6e4)*6e4,color:t.color??"#FD7171",width:t.width??6,label:t.label}}function sn(t){return t.interval??1e4}function ci(t){return null}ci.displayName="CustomMarker";function ei(t){return{date:t.date,color:t.color??"#3B82F6",width:t.width??4,label:t.label}}he.extend(rn);function on(t){return t?{...ye,...t,status:{...ye.status,...t.status},grid:{...ye.grid,...t.grid},item:{...ye.item,...t.item},marker:{...ye.marker,...t.marker},sidebar:{...ye.sidebar,...t.sidebar},header:{...ye.header,...t.header}}:ye}const ti=32,an=h.memo(h.forwardRef(function(e,i){const{groups:n,items:r,defaultTimeStart:u,defaultTimeEnd:s,sidebarWidth:c,lineHeight:o,itemHeightRatio:m,stackItems:S,canMove:g,canChangeGroup:f,canResize:M,dragSnap:T,minZoom:p,maxZoom:R,theme:$,dayStyle:X,rowStyle:C,showCursorLine:H,itemRenderer:E,groupRenderer:F,sidebarGroupRenderer:B,dependencies:D,highlights:z,onItemClick:_,onItemDoubleClick:te,onItemContextMenu:q,onItemMove:J,onItemResize:ce,moveResizeValidator:me,onItemHover:ge,onInteractionUpdate:De,onCanvasDoubleClick:qe,onCanvasContextMenu:ke,onTimeChange:kt,onZoom:Ct,selected:Et=[],rightSidebarWidth:ot,rightSidebarGroupRenderer:wt,onReady:Ze,maxHeight:Xe,timezone:Ve,devBadge:vi,children:Te}=e,pe=h.useMemo(()=>on($),[$]),Ht=h.useCallback((a,l)=>{for(let v=0;v<l.length;v++)if(l[v].id===a)return v;return 0},[]),bi=Et.join(","),at=h.useMemo(()=>Et,[bi]),Rt=h.useRef(null),Dt=h.useRef(null),It=h.useRef(null),Fe=h.useRef(null),Ot=h.useRef(null),Pt=h.useRef(null),[yi,Ti]=h.useState(800),[Mi,Si]=h.useState(null);h.useEffect(()=>{const a=Ot.current;if(!a)return;const l=new ResizeObserver(v=>{const b=v[0];b&&Ti(b.contentRect.width)});return l.observe(a),()=>l.disconnect()},[]),h.useEffect(()=>{const a=Pt.current;if(!a||!Xe)return;const l=new ResizeObserver(v=>{const b=v[0];b&&Si(b.contentRect.height)});return l.observe(a),()=>l.disconnect()},[Xe]);const Me=Math.max(0,yi-c-(ot??0)),Ce=h.useMemo(()=>{const a=new ii;return a.rebuild(r),a},[r]),lt=h.useMemo(()=>{const a=new _i;return a.buildFromItems(r,l=>Ce.getEffectiveSpan(l.id).start,l=>Ce.getEffectiveSpan(l.id).end),a},[r,Ce]),xe=h.useMemo(()=>{const a=new Wi(o,m);return a.computeLayout(r,S,Ce),a},[r,o,m,S,Ce]),Ee=h.useMemo(()=>n.map(a=>xe.getGroupHeight(a.id)),[n,xe]),Ke=h.useMemo(()=>Ee.reduce((a,l)=>a+l,0),[Ee]),Yt=typeof Xe=="number"?Xe:Mi,de=Yt?Math.min(Ke,Yt):Ke,L=h.useRef(new vt({visibleTimeStart:e.visibleTimeStart??u,visibleTimeEnd:e.visibleTimeEnd??s,canvasWidth:Me,canvasHeight:de,sidebarWidth:c,lineHeight:o,groupCount:n.length,buffer:e.buffer??3,scrollTop:0,groupHeights:Ee})),ut=h.useRef(null),_e=h.useRef(void 0),$t=h.useRef({x:0,y:0}),ct=h.useRef(!1),ae=h.useRef(null),we=h.useRef(!1),Xt=4,[Ft,ki]=h.useState(e.visibleTimeStart??u),[xt,Ci]=h.useState(e.visibleTimeEnd??s),[_t,Qe]=h.useState(0),We=h.useRef(null),Ie=h.useCallback(()=>{const a=L.current;ki(a.visibleTimeStart),Ci(a.visibleTimeEnd),Qe(a.scrollTop),We.current=null},[]),dt=h.useCallback(()=>{We.current===null&&(We.current=setTimeout(Ie,ti))},[Ie]);h.useEffect(()=>()=>{We.current!==null&&clearTimeout(We.current)},[]);const Wt=h.useMemo(()=>e.summaryRenderer?e.summaryRenderer:(a,l,v,b,d)=>{Bi(a,l,v,b,d,pe)},[e.summaryRenderer,pe]),Oe=h.useMemo(()=>new qi,[]),Pe=h.useMemo(()=>new Zi,[]),Ye=h.useMemo(()=>new Vi,[]),ie=h.useMemo(()=>new en(T),[T]),Je=h.useMemo(()=>{const a=[];return h.Children.forEach(Te,l=>{var b;if(!h.isValidElement(l))return;const v=(b=l.type)==null?void 0:b.displayName;v==="TodayMarker"?a.push(Jt(l.props)):v==="CustomMarker"&&a.push(ei(l.props))}),a},[Te]),et=h.useMemo(()=>Je.map(a=>`${a.date}|${a.color}|${a.width}|${a.label??""}`).join(";"),[Je]),Be=h.useRef(Je);Be.current=Je;const ft=h.useMemo(()=>{let a=0;return h.Children.forEach(Te,l=>{var b;if(!h.isValidElement(l))return;((b=l.type)==null?void 0:b.displayName)==="TodayMarker"&&(a=sn(l.props))}),a},[Te]),A=h.useRef({groups:n,items:r,intervalTree:lt,layoutEngine:xe,itemRenderer:E,groupRenderer:F,theme:pe,selected:at,dependencies:D,highlights:z,dayStyle:X,rowStyle:C,showCursorLine:H,canvasWidth:Me,canvasHeight:de,lineHeight:o,itemHeightRatio:m,onTimeChange:kt,onZoom:Ct,onItemHover:ge,onItemClick:_,onItemDoubleClick:te,onItemContextMenu:q,onItemMove:J,onItemResize:ce,onInteractionUpdate:De,onCanvasDoubleClick:qe,onCanvasContextMenu:ke,canMove:g,canResize:M,canChangeGroup:f,dragSnap:T,sidebarWidth:c,moveResizeValidator:me,summaryRenderer:Wt,hierarchyEngine:Ce,timezone:Ve});A.current={groups:n,items:r,intervalTree:lt,layoutEngine:xe,itemRenderer:E,groupRenderer:F,theme:pe,selected:at,dependencies:D,highlights:z,dayStyle:X,rowStyle:C,showCursorLine:H,canvasWidth:Me,canvasHeight:de,lineHeight:o,itemHeightRatio:m,onTimeChange:kt,onZoom:Ct,onItemHover:ge,onItemClick:_,onItemDoubleClick:te,onItemContextMenu:q,onItemMove:J,onItemResize:ce,onInteractionUpdate:De,onCanvasDoubleClick:qe,onCanvasContextMenu:ke,canMove:g,canResize:M,canChangeGroup:f,dragSnap:T,sidebarWidth:c,moveResizeValidator:me,summaryRenderer:Wt,hierarchyEngine:Ce,timezone:Ve};const Ei=h.useCallback(()=>{const a=Rt.current;if(!a)return;const l=A.current,v=yt(a,l.canvasWidth,l.canvasHeight);Tt(v,a),Oe.draw(v,L.current,l.groups,l.theme,l.dayStyle,l.rowStyle,l.highlights,l.timezone)},[Oe]),wi=h.useCallback(()=>{const a=Dt.current;if(!a)return;const l=A.current,v=yt(a,l.canvasWidth,l.canvasHeight);Tt(v,a),Pe.draw(v,L.current,l.groups,l.items,l.intervalTree,l.layoutEngine,l.itemRenderer,l.groupRenderer,l.theme,l.selected,_e.current,l.dependencies,l.summaryRenderer,l.hierarchyEngine)},[Pe]),Bt=h.useCallback((a,l,v)=>{const b=L.current,d=A.current,y=d.canvasWidth/(b.visibleTimeEnd-b.visibleTimeStart),w=l/y,I=v==="resize-left"?"left":v==="resize-right"?"right":void 0,Y=Ae(d.dragSnap,a,I),x=[];v==="move"?(x.push(b.timeToX(a.start_time+w)),x.push(b.timeToX(a.end_time+w))):v==="resize-left"?x.push(b.timeToX(a.start_time+w)):x.push(b.timeToX(a.end_time+w));const W=(b.visibleTimeEnd-b.visibleTimeStart)*.1,Z=d.intervalTree.query(b.visibleTimeStart-W,b.visibleTimeEnd+W),re=St(Z,a.id,ee=>b.timeToX(ee));for(const ee of x){const V=st(ee,re,8);if(V!==null)return V}const K=v==="resize-right"?a.end_time+w:a.start_time+w,G=Ne(K,Y,d.timezone);return b.timeToX(G)},[]),Hi=h.useCallback(()=>{const a=It.current;if(!a)return;const l=A.current,v=yt(a,l.canvasWidth,l.canvasHeight);Tt(v,a);const b=L.current,d=ie.getState();let y=null;if(d){const w=b.timeToX(d.item.start_time),I=b.timeToX(d.item.end_time)-w;let Y,x;d.mode==="resize-left"?(Y=w+d.deltaX,x=I-d.deltaX):d.mode==="resize-right"?(Y=w,x=I+d.deltaX):(Y=w+d.deltaX,x=I);const W=Ht(d.currentGroup,l.groups),Z=b.groupIndexToY(W),re=d.currentGroup!==d.originalGroup;y={item:d.item,mode:d.mode,bounds:{x:Y,y:Z+(l.lineHeight-l.lineHeight*l.itemHeightRatio)/2,width:x,height:l.lineHeight*l.itemHeightRatio},renderer:l.itemRenderer,targetGroupY:Z,groupChanged:re}}Ye.draw(v,b,l.theme,{cursorX:l.showCursorLine?ut.current:null,snapX:d?Bt(d.item,d.deltaX,d.mode):null,markers:Be.current,interaction:y}),l.onInteractionUpdate&&(d?(l.onInteractionUpdate(tn(d,b,l,$t.current)),ct.current=!0):ct.current&&(ct.current=!1,l.onInteractionUpdate(null)))},[Ye,ie,Bt,Ht]),ht=h.useRef(null);ht.current||(ht.current=new Li(a=>{a.grid&&Ei(),a.items&&wi(),a.overlay&&Hi()}));const O=ht.current;h.useEffect(()=>()=>O.dispose(),[O]),h.useEffect(()=>{if(!ft)return;const a=setInterval(()=>{const l=[];h.Children.forEach(Te,v=>{var d;if(!h.isValidElement(v))return;const b=(d=v.type)==null?void 0:d.displayName;b==="TodayMarker"?l.push(Jt(v.props)):b==="CustomMarker"&&l.push(ei(v.props))}),Be.current=l,O.markDirty("overlay")},ft);return()=>clearInterval(a)},[ft,Te,O]),h.useEffect(()=>{L.current.update({canvasWidth:Me,canvasHeight:de,sidebarWidth:c,lineHeight:o,groupCount:n.length,groupHeights:Ee}),O.markAllDirty()},[Me,de,c,o,n.length,Ee,O]),h.useEffect(()=>{O.markDirty("grid"),O.markDirty("items")},[r,n,at,pe,X,C,lt,xe,O]);const tt=h.useMemo(()=>{var a;return((a=e.highlights)==null?void 0:a.map(l=>`${l.start}|${l.end}|${l.color}|${l.label??""}|${l.opacity??""}`).join(";"))??""},[e.highlights]),zt=h.useRef(tt);h.useEffect(()=>{tt!==zt.current&&(zt.current=tt,O.markDirty("grid"))},[tt,O]);const jt=h.useRef(et);h.useEffect(()=>{et!==jt.current&&(jt.current=et,O.markDirty("overlay"))},[et,O]);const Lt=h.useRef(e.visibleTimeStart),At=h.useRef(e.visibleTimeEnd);e.visibleTimeStart!==void 0&&e.visibleTimeStart!==Lt.current&&(Lt.current=e.visibleTimeStart,L.current.update({visibleTimeStart:e.visibleTimeStart}),O.markAllDirty()),e.visibleTimeEnd!==void 0&&e.visibleTimeEnd!==At.current&&(At.current=e.visibleTimeEnd,L.current.update({visibleTimeEnd:e.visibleTimeEnd}),O.markAllDirty());const ze=h.useRef(null),mt=h.useCallback(a=>{ze.current===null&&(ze.current=setTimeout(()=>{var b,d;ze.current=null;const l=L.current,v=A.current;a==="zoom"?(b=v.onZoom)==null||b.call(v,l.visibleTimeStart,l.visibleTimeEnd):(d=v.onTimeChange)==null||d.call(v,l.visibleTimeStart,l.visibleTimeEnd)},ti))},[]);h.useEffect(()=>()=>{ze.current!==null&&clearTimeout(ze.current)},[]);const it=h.useRef(null),gt=h.useMemo(()=>new Qi((a,l)=>{var v;L.current.update({visibleTimeStart:a,visibleTimeEnd:l}),(v=it.current)==null||v.updateBounds(a,l),O.markAllDirty(),dt(),mt("zoom")},u,s,p,R),[]);it.current=gt;const nt=h.useCallback(a=>{const l=L.current,v=l.getTotalHeight(),b=Math.max(0,v-l.canvasHeight),d=Math.max(0,Math.min(b,l.scrollTop+a));d!==l.scrollTop&&(l.update({scrollTop:d}),O.markDirty("grid"),O.markDirty("items"),O.markDirty("overlay"),Qe(d))},[O]),je=h.useCallback(a=>{var w,I,Y;const l=L.current,v=l.canvasWidth/(l.visibleTimeEnd-l.visibleTimeStart),b=a/v,d=l.visibleTimeStart+b,y=l.visibleTimeEnd+b;l.update({visibleTimeStart:d,visibleTimeEnd:y}),(w=it.current)==null||w.updateBounds(d,y),O.markAllDirty(),xi.flushSync(()=>Ie()),(Y=(I=A.current).onTimeChange)==null||Y.call(I,d,y)},[O,Ie]);h.useEffect(()=>{const a=Fe.current;if(!a)return;const l=v=>{if(v.ctrlKey||v.metaKey||v.altKey){v.preventDefault();const b=a.getBoundingClientRect(),d=(v.clientX-b.left)/b.width;gt.handleWheelZoom(v,d)}else if(v.shiftKey)v.preventDefault(),je(v.deltaY||v.deltaX);else{const b=v.deltaX;b!==0&&Math.abs(b)>Math.abs(v.deltaY)?(v.preventDefault(),je(b)):v.deltaY!==0&&(Ke>de&&v.preventDefault(),nt(v.deltaY))}};return a.addEventListener("wheel",l,{passive:!1}),()=>a.removeEventListener("wheel",l)},[gt,nt,je,Ke,de]);const Se=h.useRef({lastDistance:null,lastCenter:null});h.useEffect(()=>{const a=Fe.current;if(!a)return;const l=(w,I)=>Math.abs(w.clientX-I.clientX),v=(w,I,Y)=>(w.clientX+I.clientX)/2-Y.left,b=w=>{w.touches.length===2&&(w.preventDefault(),Se.current.lastDistance=l(w.touches[0],w.touches[1]),Se.current.lastCenter=null)},d=w=>{var I;if(w.touches.length===2&&Se.current.lastDistance!==null){w.preventDefault();const Y=l(w.touches[0],w.touches[1]),x=a.getBoundingClientRect(),Z=v(w.touches[0],w.touches[1],x)/x.width;if(Y!==0&&Se.current.lastDistance!==0){const re=Se.current.lastDistance/Y,K=L.current,G=K.visibleTimeEnd-K.visibleTimeStart;let ee=G*re;ee=Math.max(p,Math.min(R,ee));const V=K.visibleTimeStart+G*Z,P=V-ee*Z,k=V+ee*(1-Z);K.update({visibleTimeStart:P,visibleTimeEnd:k}),(I=it.current)==null||I.updateBounds(P,k),O.markAllDirty(),dt(),mt("zoom")}Se.current.lastDistance=Y}},y=()=>{Se.current.lastDistance=null,Se.current.lastCenter=null};return a.addEventListener("touchstart",b,{passive:!1}),a.addEventListener("touchmove",d,{passive:!1}),a.addEventListener("touchend",y),()=>{a.removeEventListener("touchstart",b),a.removeEventListener("touchmove",d),a.removeEventListener("touchend",y)}},[O,dt,mt]);const Ri=h.useCallback(a=>{var Y;const l=a.currentTarget,v=l.getBoundingClientRect(),b=a.clientX-v.left,d=a.clientY-v.top;if(ut.current=b,$t.current={x:a.clientX,y:a.clientY},ae.current){const x=a.clientX-ae.current.startX,W=a.clientY-ae.current.startY;if(!we.current&&(Math.abs(x)>=Xt||Math.abs(W)>=Xt)&&(we.current=!0,l.style.cursor="grabbing",l.setPointerCapture(a.pointerId)),we.current){const Z=a.clientX-ae.current.lastX,re=a.clientY-ae.current.lastY;ae.current.lastX=a.clientX,ae.current.lastY=a.clientY,Math.abs(Z)>0&&je(-Z),Math.abs(re)>0&&nt(-re)}return}if(ie.isPending()){if(ie.update(b,d),ie.isActive()){const x=ie.getState();if(x&&x.mode==="move"&&A.current.canChangeGroup){const W=bt(d,L.current,A.current.groups);W&&ie.setCurrentGroup(W.id)}O.markDirty("overlay")}return}A.current.showCursorLine&&O.markDirty("overlay");const y=A.current,w=Le(b,d,L.current,y.intervalTree,y.layoutEngine,y.groups),I=w==null?void 0:w.id;if(I!==_e.current&&(_e.current=I,O.markDirty("items"),(Y=y.onItemHover)==null||Y.call(y,I??null,a.nativeEvent)),w){const x=Gt(b,w,L.current),W=Ut(w,x,y.canResize,y.canMove);l.style.cursor=W==="resize-left"||W==="resize-right"?"col-resize":W==="move"?"grab":"default"}else l.style.cursor="default"},[ie,O,je,nt]),Di=h.useCallback(a=>{const l=A.current,v=a.currentTarget.getBoundingClientRect(),b=a.clientX-v.left,d=a.clientY-v.top,y=Le(b,d,L.current,l.intervalTree,l.layoutEngine,l.groups);if(!y){ae.current={startX:a.clientX,startY:a.clientY,lastX:a.clientX,lastY:a.clientY},we.current=!1;return}const w=Gt(b,y,L.current),I=Ut(y,w,l.canResize,l.canMove);I&&ie.startInteraction(y,I,b,d)},[ie]),Ii=h.useCallback(a=>{var w,I,Y,x;const l=a.currentTarget;if(ae.current){const W=we.current;if(ae.current=null,we.current=!1,l.style.cursor="default",W)return}if(ie.isActive()){const W=ie.getState(),Z=L.current,re=Z.canvasWidth/(Z.visibleTimeEnd-Z.visibleTimeStart);if(W){const K=A.current.moveResizeValidator,G=A.current;if(W.mode==="move"){const ee=oi(W,Z,G),V=ie.endMove(re);if(V){const P=K?K("move",W.item.id,ee):ee,k=G.hierarchyEngine.getMoveDelta(W.item.id,P);(w=G.onItemMove)==null||w.call(G,W.item.id,P,V.newGroupId,k.length>0?k:void 0)}}else{const{edge:ee,time:V}=ai(W,Z,G);if(ie.endResize(re)){const k=K?K("resize",W.item.id,V,ee):V;(I=G.onItemResize)==null||I.call(G,W.item.id,k,ee)}}}l.style.cursor="default",O.markDirty("overlay");return}ie.isPending()&&ie.cancel();const v=l.getBoundingClientRect(),b=a.clientX-v.left,d=a.clientY-v.top,y=Le(b,d,L.current,A.current.intervalTree,A.current.layoutEngine,A.current.groups);y&&((x=(Y=A.current).onItemClick)==null||x.call(Y,y.id,a.nativeEvent))},[ie,O]),Oi=h.useCallback(a=>{var w,I;const l=a.currentTarget.getBoundingClientRect(),v=a.clientX-l.left,b=a.clientY-l.top,d=A.current,y=Le(v,b,L.current,d.intervalTree,d.layoutEngine,d.groups);if(y)(w=d.onItemDoubleClick)==null||w.call(d,y.id,a.nativeEvent);else{const Y=bt(b,L.current,d.groups),x=L.current.xToTime(v);Y&&((I=d.onCanvasDoubleClick)==null||I.call(d,Y.id,x))}},[]),Pi=h.useCallback(a=>{var w,I;a.preventDefault();const l=a.currentTarget.getBoundingClientRect(),v=a.clientX-l.left,b=a.clientY-l.top,d=A.current,y=Le(v,b,L.current,d.intervalTree,d.layoutEngine,d.groups);if(y)(w=d.onItemContextMenu)==null||w.call(d,y.id,a.nativeEvent);else{const Y=bt(b,L.current,d.groups),x=L.current.xToTime(v);Y&&((I=d.onCanvasContextMenu)==null||I.call(d,Y.id,x,a.nativeEvent))}},[]),Yi=h.useCallback(()=>{var a,l;ae.current=null,we.current=!1,ut.current=null,Fe.current&&(Fe.current.style.cursor="default"),_e.current!==void 0&&(_e.current=void 0,O.markDirty("items"),(l=(a=A.current).onItemHover)==null||l.call(a,null,new PointerEvent("pointerleave"))),A.current.showCursorLine&&O.markDirty("overlay")},[O]),$i=h.useMemo(()=>{const a=[];return h.Children.forEach(Te,l=>{var b;if(!h.isValidElement(l))return;if(((b=l.type)==null?void 0:b.displayName)==="TimelineHeaders"){const d=l.props;a.push(h.cloneElement(l,{visibleTimeStart:d.visibleTimeStart??Ft,visibleTimeEnd:d.visibleTimeEnd??xt,canvasWidth:d.canvasWidth??Me,sidebarWidth:d.sidebarWidth??c,theme:d.theme??pe,timezone:d.timezone??Ve,onZoomToInterval:d.onZoomToInterval??((y,w)=>{var I,Y,x,W;L.current.update({visibleTimeStart:y,visibleTimeEnd:w}),O.markAllDirty(),Ie(),(Y=(I=A.current).onTimeChange)==null||Y.call(I,y,w),(W=(x=A.current).onZoom)==null||W.call(x,y,w)})}))}}),a},[Te,Ft,xt,Me,c,pe,Ve,O,Ie]),Nt=h.useRef(!1);h.useEffect(()=>{Nt.current||(Nt.current=!0,O.markAllDirty())},[O]),h.useImperativeHandle(i,()=>({captureToCanvas({timeStart:a,timeEnd:l,scale:v,sidebarWidth:b}){const d=A.current,y=28,w=y*3,I=d.groups.map(N=>d.layoutEngine.getGroupHeight(N.id)),Y=[0];for(let N=0;N<I.length;N++)Y.push(Y[N]+I[N]);const x=Y[I.length],W=L.current,Z=d.canvasWidth/(W.visibleTimeEnd-W.visibleTimeStart),re=l-a,K=Math.max(d.canvasWidth,Math.round(re*Z)),G=(b+K)*v,ee=(w+x)*v,V=document.createElement("canvas");V.width=G,V.height=ee;const P=V.getContext("2d");P.scale(v,v);for(let N=0;N<d.groups.length;N++){const ve=d.groups[N],be=I[N],j=w+Y[N];if(d.rowStyle){const oe=d.rowStyle(ve);oe!=null&&oe.backgroundColor&&(P.fillStyle=oe.backgroundColor,P.fillRect(0,j,b,be))}const se=ve.type;let ne="400",Q=8;se==="project"?ne="700":se==="CAG"?ne="600":se==="CA"&&(ne="400",Q=24),P.fillStyle="#111",P.font=`${ne} 12px sans-serif`,P.textBaseline="middle",P.fillText(ve.title,Q,j+be/2,b-Q-4)}const k=(N,ve,be)=>{var ne,Q;P.fillStyle=((ne=d.theme.header)==null?void 0:ne.bg)??"#f5f5f5",P.fillRect(b,N,K,y),P.strokeStyle=((Q=d.theme.grid)==null?void 0:Q.line)??"#e0e0e0",P.lineWidth=1,P.strokeRect(b,N,K,y);let j=ue(a,d.timezone).startOf(be);j.valueOf()<a&&(j=j.add(1,be));const se=K/(l-a);for(;j.valueOf()<l;){const oe=j.add(1,be),le=b+(j.valueOf()-a)*se,fe=b+(Math.min(oe.valueOf(),l)-a)*se-le;P.beginPath(),P.moveTo(le,N),P.lineTo(le,N+y),P.stroke(),P.fillStyle="#333",P.font="600 11px sans-serif",P.textBaseline="middle",P.textAlign="center",P.fillText(ve(j),le+fe/2,N+y/2,fe-4),j=oe}P.textAlign="start"};k(0,N=>N.format("YYYY"),"year"),k(y,N=>N.format("MM"),"month"),k(y*2,N=>String(N.isoWeek()),"week");const $e=new vt({visibleTimeStart:a,visibleTimeEnd:l,canvasWidth:K,canvasHeight:x,sidebarWidth:0,lineHeight:d.lineHeight,groupCount:d.groups.length,buffer:1,scrollTop:0,groupHeights:I});return P.save(),P.translate(b,w),P.beginPath(),P.rect(0,0,K,x),P.clip(),Oe.draw(P,$e,d.groups,d.theme,d.dayStyle,d.rowStyle,d.highlights,d.timezone),Pe.draw(P,$e,d.groups,d.items,d.intervalTree,d.layoutEngine,d.itemRenderer,d.groupRenderer,d.theme,d.selected,void 0,d.dependencies,d.summaryRenderer,d.hierarchyEngine),Ye.draw(P,$e,d.theme,{cursorX:null,snapX:null,markers:Be.current,interaction:null}),P.restore(),V}}),[Oe,Pe,Ye]),h.useEffect(()=>{const a={captureToCanvas({timeStart:l,timeEnd:v,scale:b,sidebarWidth:d}){var be;const y=A.current,w=28,I=w*3,Y=y.groups.map(j=>y.layoutEngine.getGroupHeight(j.id)),x=[0];for(let j=0;j<Y.length;j++)x.push(x[j]+Y[j]);const W=x[Y.length],Z=L.current,re=y.canvasWidth/(Z.visibleTimeEnd-Z.visibleTimeStart),K=v-l,G=Math.max(y.canvasWidth,Math.round(K*re)),ee=d+G,V=I+W,P=document.createElement("canvas");P.width=ee*b,P.height=V*b;const k=P.getContext("2d");k.scale(b,b),k.fillStyle="#FFFFFF",k.fillRect(0,0,ee,V),k.save(),k.beginPath(),k.rect(0,0,d,V),k.clip(),k.fillStyle="#F9FAFB",k.fillRect(0,0,d,I),k.strokeStyle="#E5E7EB",k.lineWidth=1,k.strokeRect(0,0,d,I);for(let j=0;j<y.groups.length;j++){const se=y.groups[j],ne=Y[j],Q=I+x[j],oe=(be=y.rowStyle)==null?void 0:be.call(y,se);k.fillStyle=(oe==null?void 0:oe.backgroundColor)??(j%2===0?"#FFFFFF":"#F7F7F7"),k.fillRect(0,Q,d,ne),k.strokeStyle="#E5E5E5",k.lineWidth=.5,k.beginPath(),k.moveTo(0,Q+ne),k.lineTo(d,Q+ne),k.stroke();const le=se.type??"";let He=8,fe="400",Re=11;le==="project"?(fe="700",Re=12):le==="control_area_group"?fe="600":le==="control_area"&&(He=24),k.fillStyle="#374151",k.font=`${fe} ${Re}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,k.textBaseline="middle";const Fi=typeof se.title=="string"?se.title:String(se.title);k.fillText(Fi,He,Q+ne/2,d-He-8)}k.strokeStyle="#E5E7EB",k.lineWidth=1,k.beginPath(),k.moveTo(d,0),k.lineTo(d,V),k.stroke(),k.restore(),k.save(),k.beginPath(),k.rect(d,0,G,I),k.clip();const $e=v-l,N=[{unit:"year",row:0},{unit:"month",row:1},{unit:"week",row:2}];for(const{unit:j,row:se}of N){const ne=se*w;k.fillStyle="#F9FAFB",k.fillRect(d,ne,G,w);let Q=ue(l,y.timezone).startOf(j);const oe=ue(v,y.timezone).add(1,j);for(;Q.isBefore(oe);){const le=Q.add(1,j),He=d+(Q.valueOf()-l)/$e*G,fe=(le.valueOf()-Q.valueOf())/$e*G;k.strokeStyle="#E5E7EB",k.lineWidth=.5,k.strokeRect(He,ne,fe,w);let Re;j==="year"?Re=Q.format("YYYY"):j==="month"?Re=Q.format("MM"):Re=`${Q.week()}`,k.fillStyle="#6c737f",k.font=j==="year"?'600 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif':'400 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',k.textBaseline="middle",k.textAlign="center",fe>20&&k.fillText(Re,He+fe/2,ne+w/2),Q=le}}k.textAlign="start",k.restore(),k.save(),k.beginPath(),k.rect(d,I,G,W),k.clip(),k.translate(d,I);const ve=new vt({visibleTimeStart:l,visibleTimeEnd:v,canvasWidth:G,canvasHeight:W,sidebarWidth:0,lineHeight:y.lineHeight,groupCount:y.groups.length,buffer:1,scrollTop:0,groupHeights:Y});return Oe.draw(k,ve,y.groups,y.theme,y.dayStyle,y.rowStyle,y.highlights,y.timezone),Pe.draw(k,ve,y.groups,y.items,y.intervalTree,y.layoutEngine,y.itemRenderer,y.groupRenderer,y.theme,y.selected,void 0,y.dependencies,y.summaryRenderer,y.hierarchyEngine),Ye.draw(k,ve,y.theme,{cursorX:null,markers:Be.current}),k.restore(),P}};Ze==null||Ze(a)},[Ze,Oe,Pe,Ye]);const Xi={position:"relative",width:Me,height:de,overflow:"hidden",cursor:"default"},pt={position:"absolute",top:0,left:0};return U.jsxs("div",{ref:Ot,style:{display:"flex",flexDirection:"column",width:"100%",position:"relative"},children:[vi?U.jsxs("div",{style:{position:"absolute",top:0,left:0,zIndex:9999,padding:"2px 6px",fontSize:10,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1.4,color:"#fff",background:"rgba(17, 24, 39, 0.78)",borderBottomRightRadius:4,pointerEvents:"none",userSelect:"none"},children:["v","0.10.1"," · ","14:58:01"]}):null,$i,U.jsxs("div",{ref:Pt,style:{display:"flex",overflow:"hidden",maxHeight:Xe??void 0},children:[U.jsx(Qt,{groups:n,width:c,lineHeight:o,groupHeights:Ee,scrollTop:_t,canvasHeight:de,theme:pe,groupRenderer:B,onScroll:a=>{L.current.update({scrollTop:a}),O.markDirty("grid"),O.markDirty("items"),O.markDirty("overlay"),Qe(a)}}),U.jsxs("div",{ref:Fe,style:Xi,onPointerMove:Ri,onPointerDown:Di,onPointerUp:Ii,onDoubleClick:Oi,onContextMenu:Pi,onPointerLeave:Yi,children:[U.jsx("canvas",{ref:Rt,style:{...pt,zIndex:0}}),U.jsx("canvas",{ref:Dt,style:{...pt,zIndex:1}}),U.jsx("canvas",{ref:It,style:{...pt,zIndex:2}})]}),ot&&wt?U.jsx(Qt,{groups:n,width:ot,lineHeight:o,groupHeights:Ee,scrollTop:_t,canvasHeight:de,theme:pe,groupRenderer:wt,onScroll:a=>{L.current.update({scrollTop:a}),O.markDirty("grid"),O.markDirty("items"),O.markDirty("overlay"),Qe(a)}}):null]})]})}));function di({children:t,theme:e,className:i,classNames:n,style:r,visibleTimeStart:u,visibleTimeEnd:s,canvasWidth:c,sidebarWidth:o=0,onZoomToInterval:m,timezone:S}){const g=h.Children.map(t,f=>{var T;if(!h.isValidElement(f))return f;if(((T=f.type)==null?void 0:T.displayName)==="DateHeader"){const p=f.props,R=h.cloneElement(f,{visibleTimeStart:p.visibleTimeStart??u,visibleTimeEnd:p.visibleTimeEnd??s,canvasWidth:p.canvasWidth??c,theme:p.theme??e,onZoomToInterval:p.onIntervalClick??p.onZoomToInterval??m,timezone:p.timezone??S});return U.jsxs("div",{style:{display:"flex"},children:[U.jsx("div",{style:{width:o,flexShrink:0}}),U.jsx("div",{style:{flex:1,overflow:"hidden"},children:R})]})}return f});return U.jsx("div",{className:i,style:{position:"sticky",top:0,zIndex:20,display:"flex",flexDirection:"column",backgroundColor:(e==null?void 0:e.header.bg)??"#F9FAFB",borderTop:`1px solid ${(e==null?void 0:e.header.border)??"#E5E7EB"}`,borderBottom:`1px solid ${(e==null?void 0:e.header.border)??"#E5E7EB"}`,...r},children:g})}di.displayName="TimelineHeaders";var fi={exports:{}};(function(t,e){(function(i,n){t.exports=n()})(Ge,function(){var i="month",n="quarter";return function(r,u){var s=u.prototype;s.quarter=function(m){return this.$utils().u(m)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(m-1))};var c=s.add;s.add=function(m,S){return m=Number(m),this.$utils().p(S)===n?this.add(3*m,i):c.bind(this)(m,S)};var o=s.startOf;s.startOf=function(m,S){var g=this.$utils(),f=!!g.u(S)||S;if(g.p(m)===n){var M=this.quarter()-1;return f?this.month(3*M).startOf(i).startOf("day"):this.month(3*M+2).endOf(i).endOf("day")}return o.bind(this)(m,S)}}})})(fi);var ln=fi.exports;const un=Ue(ln);var hi={exports:{}};(function(t,e){(function(i,n){t.exports=n()})(Ge,function(){var i="week",n="year";return function(r,u,s){var c=u.prototype;c.week=function(o){if(o===void 0&&(o=null),o!==null)return this.add(7*(o-this.week()),"day");var m=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var S=s(this).startOf(n).add(1,n).date(m),g=s(this).endOf(i);if(S.isBefore(g))return 1}var f=s(this).startOf(n).date(m).startOf(i).subtract(1,"millisecond"),M=this.diff(f,i,!0);return M<0?s(this).startOf("week").week():Math.ceil(M)},c.weeks=function(o){return o===void 0&&(o=null),this.week(o)}}})})(hi);var cn=hi.exports;const dn=Ue(cn);he.extend(dn);he.extend(un);const fn={year:30,quarter:30,month:30,week:20,day:15,hour:30};function mi({unit:t,visibleTimeStart:e=0,visibleTimeEnd:i=0,canvasWidth:n=0,theme:r,height:u=28,className:s,labelFormat:c,onIntervalClick:o,minCellWidth:m,onZoomToInterval:S,timezone:g}){const f=h.useMemo(()=>{if(!e||!i||!n)return[];const T=i-e,p=t,R=m??fn[t];if(R>0){const H=ue(e,g).startOf(t);if((H.add(1,p).valueOf()-H.valueOf())/T*n<R)return[]}const $=[];let X=ue(e,g).startOf(t).subtract(1,p);const C=ue(i,g).add(2,p).valueOf();for(;X.valueOf()<C;){const H=X.add(1,p),E=X.valueOf(),F=H.valueOf(),B=(E-e)/T*n,D=(F-E)/T*n,z=hn(X,H,t,c);$.push({start:E,end:F,label:z,left:B,width:D}),X=H}return $},[e,i,n,t,c,m,g]),M=h.useCallback((T,p)=>{o?o(T,p):S&&S(T,p)},[o,S]);return f.length===0?null:U.jsx("div",{style:{display:"flex",position:"relative",height:u,overflow:"hidden"},children:f.map(T=>U.jsx("div",{className:s,onClick:()=>M(T.start,T.end),style:{position:"absolute",left:T.left,width:T.width,height:"100%",display:"flex",alignItems:"center",justifyContent:"center",borderRight:`1px solid ${(r==null?void 0:r.header.border)??"#E5E7EB"}`,borderBottom:`1px solid ${(r==null?void 0:r.header.border)??"#E5E7EB"}`,fontSize:12,color:(r==null?void 0:r.header.text)??"#6c737f",backgroundColor:(r==null?void 0:r.header.bg)??"#F9FAFB",overflow:"hidden",whiteSpace:"nowrap",cursor:"pointer",userSelect:"none",padding:"0 4px",boxSizing:"border-box"},children:U.jsx("span",{children:T.label})},T.start))})}mi.displayName="DateHeader";function hn(t,e,i,n,r){return typeof n=="function"?n(t.toDate(),e.toDate(),i):typeof n=="string"?t.format(n):mn(t,i)}function mn(t,e){switch(e){case"year":return t.format("YYYY");case"quarter":return`Q${t.quarter()} ${t.format("YYYY")}`;case"month":return t.format("MM");case"week":return`${t.week()}`;case"day":return t.format("D");case"hour":return t.format("HH:mm")}}function gi({width:t,children:e,style:i}){const n=()=>({style:{width:t,...i}});return e?U.jsx(U.Fragment,{children:e({getRootProps:n})}):U.jsx("div",{style:{width:t}})}gi.displayName="SidebarHeader";function pi({children:t}){return U.jsx(U.Fragment,{children:t})}pi.displayName="CustomHeader";exports.CanvasTimeline=an;exports.CustomHeader=pi;exports.CustomMarker=ci;exports.DEFAULT_THEME=ye;exports.DateHeader=mi;exports.HierarchyEngine=ii;exports.SidebarHeader=gi;exports.TimelineHeaders=di;exports.TodayMarker=ui;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const U=require("react/jsx-runtime"),h=require("react"),_i=require("react-dom"),he=require("dayjs"),ye={primary:"#269bf7",trainColors:{},status:{red:"#EF5350",yellow:"#FBBF24",green:"#31c48d"},grid:{line:"#E5E5E5",rowAlt:"#F7F7F7",weekend:"rgba(0,0,0,0.03)"},item:{radius:3,text:"#374151",selectedRing:"#a3a3a3"},marker:{today:"#FD7171",milestone:"#3B82F6",cursor:"#269bf7"},sidebar:{bg:"#F9FAFB",border:"#E5E7EB",text:"#6c737f"},header:{bg:"#F9FAFB",border:"#E5E7EB",text:"#6c737f"}};class vt{constructor(e){Object.defineProperty(this,"visibleTimeStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleTimeEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"canvasWidth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"canvasHeight",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"sidebarWidth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"lineHeight",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupCount",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"buffer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"scrollTop",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupHeights",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleDuration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pixelsPerMs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"groupYOffsets",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.visibleTimeStart=e.visibleTimeStart,this.visibleTimeEnd=e.visibleTimeEnd,this.canvasWidth=e.canvasWidth,this.canvasHeight=e.canvasHeight,this.sidebarWidth=e.sidebarWidth,this.lineHeight=e.lineHeight,this.groupCount=e.groupCount,this.buffer=e.buffer,this.scrollTop=e.scrollTop,this.groupHeights=e.groupHeights??null,this.visibleDuration=this.visibleTimeEnd-this.visibleTimeStart,this.pixelsPerMs=this.canvasWidth/this.visibleDuration,this.groupYOffsets=[],this.recomputeGroupYOffsets()}update(e){e.visibleTimeStart!==void 0&&(this.visibleTimeStart=e.visibleTimeStart),e.visibleTimeEnd!==void 0&&(this.visibleTimeEnd=e.visibleTimeEnd),e.canvasWidth!==void 0&&(this.canvasWidth=e.canvasWidth),e.canvasHeight!==void 0&&(this.canvasHeight=e.canvasHeight),e.sidebarWidth!==void 0&&(this.sidebarWidth=e.sidebarWidth),e.lineHeight!==void 0&&(this.lineHeight=e.lineHeight),e.groupCount!==void 0&&(this.groupCount=e.groupCount),e.buffer!==void 0&&(this.buffer=e.buffer),e.scrollTop!==void 0&&(this.scrollTop=e.scrollTop),e.groupHeights!==void 0&&(this.groupHeights=e.groupHeights??null),this.visibleDuration=this.visibleTimeEnd-this.visibleTimeStart,this.pixelsPerMs=this.canvasWidth/this.visibleDuration,this.recomputeGroupYOffsets()}recomputeGroupYOffsets(){var t;const e=new Array(this.groupCount+1);e[0]=0;for(let n=0;n<this.groupCount;n++){const r=((t=this.groupHeights)==null?void 0:t[n])??this.lineHeight;e[n+1]=e[n]+r}this.groupYOffsets=e}timeToX(e){return(e-this.visibleTimeStart)*this.pixelsPerMs}xToTime(e){return this.visibleTimeStart+e/this.pixelsPerMs}yToGroupIndex(e){if(this.groupCount===0)return 0;const t=e+this.scrollTop;if(t<=0)return 0;if(t>=this.groupYOffsets[this.groupCount])return this.groupCount-1;let n=0,r=this.groupCount-1;for(;n<r;){const c=n+r>>>1;this.groupYOffsets[c+1]>t?r=c:n=c+1}return n}groupIndexToY(e){return e<0?-this.scrollTop:e>=this.groupCount?(this.groupYOffsets[this.groupCount]??0)-this.scrollTop:this.groupYOffsets[e]-this.scrollTop}groupIndexToHeight(e){var t;return e<0||e>=this.groupCount?this.lineHeight:((t=this.groupHeights)==null?void 0:t[e])??this.lineHeight}getBufferBounds(){const e=this.visibleDuration*1.5;return{bufferStart:this.visibleTimeStart-e,bufferEnd:this.visibleTimeEnd+e}}getVisibleGroupRange(){if(this.groupCount===0)return{firstVisible:0,lastVisible:-1};const e=this.yToGroupIndex(0),t=this.yToGroupIndex(this.canvasHeight);return{firstVisible:e,lastVisible:t}}isScrollInBuffer(e){const t=this.visibleDuration*1.5*this.pixelsPerMs;return Math.abs(e)<t}getTotalHeight(){return this.groupYOffsets[this.groupCount]??0}}class xi{constructor(){Object.defineProperty(this,"root",{enumerable:!0,configurable:!0,writable:!0,value:null})}buildFromItems(e,t,n){const r=e.map(c=>({item:c,start:t(c),end:n(c)}));this.root=this.buildNode(r)}buildNode(e){if(e.length===0)return null;const t=[];for(const a of e)Number.isFinite(a.start)&&t.push(a.start),Number.isFinite(a.end)&&t.push(a.end);t.sort((a,l)=>a-l);const n=t.length===0?0:t[t.length>>1],r=[],c=[],s=[];for(const a of e)a.end<n?r.push(a):a.start>n?c.push(a):s.push(a);return r.length===e.length||c.length===e.length?{center:n,left:null,right:null,overlapping:e}:{center:n,left:this.buildNode(r),right:this.buildNode(c),overlapping:s}}query(e,t){const n=[];return this.queryNode(this.root,e,t,n),n}queryNode(e,t,n,r){if(e!==null){for(const c of e.overlapping)c.start<=n&&c.end>=t&&r.push(c.item);t<=e.center&&e.left!==null&&this.queryNode(e.left,t,n,r),n>=e.center&&e.right!==null&&this.queryNode(e.right,t,n,r)}}}class Wi{constructor(e,t){Object.defineProperty(this,"lineHeight",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"itemHeightRatio",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"layoutCache",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"groupMaxStack",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.lineHeight=e,this.itemHeightRatio=t}computeLayout(e,t,n){this.layoutCache=new Map,this.groupMaxStack=new Map;const r=this.lineHeight*this.itemHeightRatio,c=r*.6;if(!t){for(const a of e){const l=(n==null?void 0:n.isParent(a.id))??!1;this.layoutCache.set(a.id,{stackLevel:0,itemHeight:l?c:r}),this.groupMaxStack.set(a.group,0)}return this.layoutCache}const s=new Map;for(const a of e){let l=s.get(a.group);l||(l=[],s.set(a.group,l)),l.push(a)}for(const[a,l]of s)n?this.computeHierarchyLayout(l,n,r,c,a):this.computeFlatLayout(l,r,a);return this.layoutCache}computeFlatLayout(e,t,n){e.sort((s,a)=>{const l=s.start_time-a.start_time;return l!==0?l:a.end_time-a.start_time-(s.end_time-s.start_time)});const r=[];let c=0;for(const s of e){let a=-1;for(let l=0;l<r.length;l++)if(r[l]<=s.start_time){a=l;break}a===-1?(a=r.length,r.push(s.end_time)):r[a]=s.end_time,a>c&&(c=a),this.layoutCache.set(s.id,{stackLevel:a,itemHeight:t})}this.groupMaxStack.set(n,c)}computeHierarchyLayout(e,t,n,r,c){const s=[],a=[];for(const g of e)t.isParent(g.id)?a.push(g):s.push(g);s.sort((g,f)=>{const M=g.start_time-f.start_time;return M!==0?M:f.end_time-f.start_time-(g.end_time-g.start_time)});const l=[];let m=0;for(const g of s){let f=-1;for(let M=0;M<l.length;M++)if(l[M]<=g.start_time){f=M;break}f===-1?(f=l.length,l.push(g.end_time)):l[f]=g.end_time,f>m&&(m=f),this.layoutCache.set(g.id,{stackLevel:f,itemHeight:n})}a.sort((g,f)=>t.getNestingDepth(f.id)-t.getNestingDepth(g.id));let S=s.length>0?m+1:0;for(const g of a)this.layoutCache.set(g.id,{stackLevel:S,itemHeight:r}),S>m&&(m=S),S++;this.groupMaxStack.set(c,m)}getLayout(e){return this.layoutCache.get(e)}getGroupHeight(e){return((this.groupMaxStack.get(e)??0)+1)*this.lineHeight}}class ii{constructor(){Object.defineProperty(this,"parentToChildren",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"childToParent",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"itemMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"depthCache",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}rebuild(e){this.parentToChildren=new Map,this.childToParent=new Map,this.itemMap=new Map,this.depthCache=new Map;for(const t of e)this.itemMap.set(t.id,t);for(const t of e)if(t.parentId!==void 0&&this.itemMap.has(t.parentId)){this.childToParent.set(t.id,t.parentId);let n=this.parentToChildren.get(t.parentId);n||(n=[],this.parentToChildren.set(t.parentId,n)),n.push(t.id)}for(const t of this.childToParent.keys()){const n=new Set;let r=t;for(;r!==void 0;){if(n.has(r)){const c=this.childToParent.get(t);this.childToParent.delete(t);const s=this.parentToChildren.get(c);if(s){const a=s.indexOf(t);a!==-1&&s.splice(a,1),s.length===0&&this.parentToChildren.delete(c)}break}n.add(r),r=this.childToParent.get(r)}}}isParent(e){const t=this.parentToChildren.get(e);return t!==void 0&&t.length>0}getParent(e){return this.childToParent.get(e)}getChildren(e){return this.parentToChildren.get(e)??[]}getDescendants(e){const t=[],n=[...this.getChildren(e)];for(;n.length>0;){const r=n.pop();t.push(r);const c=this.parentToChildren.get(r);c&&n.push(...c)}return t}getEffectiveSpan(e){const t=this.itemMap.get(e);if(!t)return{start:0,end:0};let n=t.start_time,r=t.end_time;const c=this.getDescendants(e);for(const s of c){const a=this.itemMap.get(s);a&&(a.start_time<n&&(n=a.start_time),a.end_time>r&&(r=a.end_time))}return{start:n,end:r}}getNestingDepth(e){const t=this.depthCache.get(e);if(t!==void 0)return t;let n=0,r=this.childToParent.get(e);for(;r!==void 0;)n++,r=this.childToParent.get(r);return this.depthCache.set(e,n),n}getMoveDelta(e,t){const n=this.itemMap.get(e);if(!n)return[];const r=t-n.start_time;return this.getDescendants(e).map(s=>{const a=this.itemMap.get(s);return{itemId:s,newStart:a.start_time+r}})}getResizeConstraint(e,t){const n=this.getDescendants(e);if(n.length===0)return t==="left"?{min:-1/0,max:1/0}:{min:-1/0,max:1/0};if(t==="left"){let r=1/0;for(const c of n){const s=this.itemMap.get(c);s&&s.start_time<r&&(r=s.start_time)}return{min:-1/0,max:r}}else{let r=-1/0;for(const c of n){const s=this.itemMap.get(c);s&&s.end_time>r&&(r=s.end_time)}return{min:r,max:1/0}}}}function Bi(i,e,t,n,r,c){const{x:s,y:a,width:l,height:m}=t,S=c.primary;i.globalAlpha=.15,i.fillStyle=S,i.fillRect(s,a,l,m),i.globalAlpha=1,i.strokeStyle=S,i.lineWidth=1.5,i.strokeRect(s,a,l,m);const g=Math.min(m*.5,6),f=a+m/2;i.fillStyle=S,i.beginPath(),i.moveTo(s,f),i.lineTo(s+g,f-g),i.lineTo(s+g*2,f),i.lineTo(s+g,f+g),i.closePath(),i.fill(),i.beginPath(),i.moveTo(s+l,f),i.lineTo(s+l-g,f-g),i.lineTo(s+l-g*2,f),i.lineTo(s+l-g,f+g),i.closePath(),i.fill();const M=e.title;if(M&&l>30){i.fillStyle=c.item.text,i.font='500 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',i.textBaseline="middle";const T=i.measureText(M).width,p=l-g*4-4;if(p>20){const R=T>p?M.slice(0,Math.floor(M.length*p/T))+"...":M;i.fillText(R,s+l/2-Math.min(T,p)/2,f)}}n.selected&&(i.strokeStyle=c.item.selectedRing,i.lineWidth=2,i.strokeRect(s-1,a-1,l+2,m+2))}function Le(i,e,t,n,r,c){const s=t.xToTime(i),a=new Map;for(let g=0;g<c.length;g++)a.set(c[g].id,g);const l=n.query(s,s);let m=null,S=-1/0;for(const g of l){const f=a.get(g.group);if(f===void 0)continue;const M=r.getLayout(g.id);if(!M)continue;const T=t.timeToX(g.start_time),p=t.timeToX(g.end_time)-T;if(i<T||i>T+p)continue;const $=t.groupIndexToY(f)+M.stackLevel*t.lineHeight+(t.lineHeight-M.itemHeight)/2,F=M.itemHeight;e<$||e>$+F||$>S&&(S=$,m=g)}return m}function bt(i,e,t){const n=e.yToGroupIndex(i);return t[n]??null}function Gt(i,e,t,n=6){const r=t.timeToX(e.start_time),c=t.timeToX(e.end_time);return i-r<=n?"left":c-i<=n?"right":"body"}function zi(i,e){return i.canResize??e}function ji(i,e){return i.canMove??e}function Ut(i,e,t,n){const r=zi(i,t);return e==="left"&&(r==="left"||r==="both")?"resize-left":e==="right"&&(r==="right"||r==="both")?"resize-right":i.canResize===!1&&e!=="body"?null:ji(i,n)?"move":null}function yt(i,e,t){const n=window.devicePixelRatio||1,r=Math.round(e*n),c=Math.round(t*n);(i.width!==r||i.height!==c)&&(i.width=r,i.height=c,i.style.width=`${e}px`,i.style.height=`${t}px`);const s=i.getContext("2d");return s.setTransform(n,0,0,n,0,0),s}function Tt(i,e){const t=window.devicePixelRatio||1;i.clearRect(0,0,e.width/t,e.height/t)}class Li{constructor(e){Object.defineProperty(this,"dirty",{enumerable:!0,configurable:!0,writable:!0,value:{grid:!1,items:!1,overlay:!1}}),Object.defineProperty(this,"rafId",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"drawCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.drawCallback=e}markDirty(e){this.dirty[e]=!0,this.schedule()}markAllDirty(){this.dirty.grid=!0,this.dirty.items=!0,this.dirty.overlay=!0,this.schedule()}dispose(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null)}schedule(){this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null;const e={...this.dirty};this.dirty.grid=!1,this.dirty.items=!1,this.dirty.overlay=!1,this.drawCallback(e)}))}}var Ge=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ue(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var ni={exports:{}};(function(i,e){(function(t,n){i.exports=n()})(Ge,function(){var t="minute",n=/[+-]\d\d(?::?\d\d)?/g,r=/([+-]|\d\d)/g;return function(c,s,a){var l=s.prototype;a.utc=function(p){var R={date:p,utc:!0,args:arguments};return new s(R)},l.utc=function(p){var R=a(this.toDate(),{locale:this.$L,utc:!0});return p?R.add(this.utcOffset(),t):R},l.local=function(){return a(this.toDate(),{locale:this.$L,utc:!1})};var m=l.parse;l.parse=function(p){p.utc&&(this.$u=!0),this.$utils().u(p.$offset)||(this.$offset=p.$offset),m.call(this,p)};var S=l.init;l.init=function(){if(this.$u){var p=this.$d;this.$y=p.getUTCFullYear(),this.$M=p.getUTCMonth(),this.$D=p.getUTCDate(),this.$W=p.getUTCDay(),this.$H=p.getUTCHours(),this.$m=p.getUTCMinutes(),this.$s=p.getUTCSeconds(),this.$ms=p.getUTCMilliseconds()}else S.call(this)};var g=l.utcOffset;l.utcOffset=function(p,R){var $=this.$utils().u;if($(p))return this.$u?0:$(this.$offset)?g.call(this):this.$offset;if(typeof p=="string"&&(p=function(E){E===void 0&&(E="");var X=E.match(n);if(!X)return null;var B=(""+X[0]).match(r)||["-",0,0],D=B[0],z=60*+B[1]+ +B[2];return z===0?0:D==="+"?z:-z}(p),p===null))return this;var F=Math.abs(p)<=16?60*p:p;if(F===0)return this.utc(R);var C=this.clone();if(R)return C.$offset=F,C.$u=!1,C;var H=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(C=this.local().add(F+H,t)).$offset=F,C.$x.$localOffset=H,C};var f=l.format;l.format=function(p){var R=p||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,R)},l.valueOf=function(){var p=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*p},l.isUTC=function(){return!!this.$u},l.toISOString=function(){return this.toDate().toISOString()},l.toString=function(){return this.toDate().toUTCString()};var M=l.toDate;l.toDate=function(p){return p==="s"&&this.$offset?a(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():M.call(this)};var T=l.diff;l.diff=function(p,R,$){if(p&&this.$u===p.$u)return T.call(this,p,R,$);var F=this.local(),C=a(p).local();return T.call(F,C,R,$)}}})})(ni);var Ai=ni.exports;const Ni=Ue(Ai);var ri={exports:{}};(function(i,e){(function(t,n){i.exports=n()})(Ge,function(){var t={year:0,month:1,day:2,hour:3,minute:4,second:5},n={};return function(r,c,s){var a,l=function(f,M,T){T===void 0&&(T={});var p=new Date(f),R=function($,F){F===void 0&&(F={});var C=F.timeZoneName||"short",H=$+"|"+C,E=n[H];return E||(E=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:$,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:C}),n[H]=E),E}(M,T);return R.formatToParts(p)},m=function(f,M){for(var T=l(f,M),p=[],R=0;R<T.length;R+=1){var $=T[R],F=$.type,C=$.value,H=t[F];H>=0&&(p[H]=parseInt(C,10))}var E=p[3],X=E===24?0:E,B=p[0]+"-"+p[1]+"-"+p[2]+" "+X+":"+p[4]+":"+p[5]+":000",D=+f;return(s.utc(B).valueOf()-(D-=D%1e3))/6e4},S=c.prototype;S.tz=function(f,M){f===void 0&&(f=a);var T,p=this.utcOffset(),R=this.toDate(),$=R.toLocaleString("en-US",{timeZone:f}),F=Math.round((R-new Date($))/1e3/60),C=15*-Math.round(R.getTimezoneOffset()/15)-F;if(!Number(C))T=this.utcOffset(0,M);else if(T=s($,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(C,!0),M){var H=T.utcOffset();T=T.add(p-H,"minute")}return T.$x.$timezone=f,T},S.offsetName=function(f){var M=this.$x.$timezone||s.tz.guess(),T=l(this.valueOf(),M,{timeZoneName:f}).find(function(p){return p.type.toLowerCase()==="timezonename"});return T&&T.value};var g=S.startOf;S.startOf=function(f,M){if(!this.$x||!this.$x.$timezone)return g.call(this,f,M);var T=s(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return g.call(T,f,M).tz(this.$x.$timezone,!0)},s.tz=function(f,M,T){var p=T&&M,R=T||M||a,$=m(+s(),R);if(typeof f!="string")return s(f).tz(R);var F=function(X,B,D){var z=X-60*B*1e3,x=m(z,D);if(B===x)return[z,B];var te=m(z-=60*(x-B)*1e3,D);return x===te?[z,x]:[X-60*Math.min(x,te)*1e3,Math.max(x,te)]}(s.utc(f,p).valueOf(),$,R),C=F[0],H=F[1],E=s(C).utcOffset(H);return E.$x.$timezone=R,E},s.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},s.tz.setDefault=function(f){a=f}}})})(ri);var Gi=ri.exports;const Ui=Ue(Gi);he.extend(Ni);he.extend(Ui);function ue(i,e){return e?he(i).tz(e):he(i)}class qi{draw(e,t,n,r,c,s,a,l){const{firstVisible:m,lastVisible:S}=t.getVisibleGroupRange();for(let C=m;C<=S;C++){const H=t.groupIndexToY(C),E=t.groupIndexToHeight(C),X=n[C];if(!X)continue;let B;const D=s==null?void 0:s(X);D!=null&&D.backgroundColor?B=D.backgroundColor:B=C%2===0?"#FFFFFF":r.grid.rowAlt,e.fillStyle=B,e.fillRect(0,H,t.canvasWidth,E),e.strokeStyle=(D==null?void 0:D.borderBottomColor)??r.grid.line,e.lineWidth=.5,e.beginPath(),e.moveTo(0,H+E),e.lineTo(t.canvasWidth,H+E),e.stroke()}if(a&&a.length>0)for(const C of a){const H=t.timeToX(C.start),E=t.timeToX(C.end);if(E<0||H>t.canvasWidth)continue;const X=Math.max(0,H),B=Math.min(t.canvasWidth,E)-X,D=C.opacity??.12,z=parseInt(C.color.slice(1,3),16),x=parseInt(C.color.slice(3,5),16),te=parseInt(C.color.slice(5,7),16);e.fillStyle=`rgb(${Math.round(z*D+255*(1-D))},${Math.round(x*D+255*(1-D))},${Math.round(te*D+255*(1-D))})`,e.fillRect(X,0,B,t.canvasHeight)}const g=t.visibleTimeStart,f=t.visibleTimeEnd,p=864e5/(f-g)*t.canvasWidth;let R="day";p<2?R="month":p<8&&(R="week");{let C=ue(g,l).startOf("day");const H=ue(f,l).endOf("day");let E=null,X=1,B=0;const D=[],z=x=>{E!==null&&(e.fillStyle=E,X!==1&&(e.globalAlpha=X),e.fillRect(B,0,x-B,t.canvasHeight),X!==1&&(e.globalAlpha=1),E=null,X=1)};for(;C.isBefore(H);){const x=t.timeToX(C.valueOf()),te=C.toDate(),q=c==null?void 0:c(te);let J=null,ce=1;if(q!=null&&q.backgroundColor)J=q.backgroundColor,ce=q.opacity??1;else{const me=C.day();(me===0||me===6)&&(J=r.grid.weekend)}q!=null&&q.borderColor&&D.push({x,color:q.borderColor}),J===E&&ce===X||(z(x),J!==null&&(E=J,X=ce,B=x)),C=C.add(1,"day")}E!==null&&z(t.timeToX(C.valueOf()));for(const x of D)e.strokeStyle=x.color,e.lineWidth=.5,e.beginPath(),e.moveTo(x.x,0),e.lineTo(x.x,t.canvasHeight),e.stroke()}let $=ue(g,l).startOf(R);const F=ue(f,l).add(1,R);for(e.strokeStyle=r.grid.line,e.lineWidth=.5,e.beginPath();$.isBefore(F);){const C=t.timeToX($.valueOf());e.moveTo(C,0),e.lineTo(C,t.canvasHeight),$=$.add(1,R)}if(e.stroke(),a&&a.length>0)for(const C of a){const H=t.timeToX(C.start),E=t.timeToX(C.end);if(!(E<0||H>t.canvasWidth)&&(e.strokeStyle=C.color,e.globalAlpha=.4,e.lineWidth=1,e.beginPath(),H>=0&&H<=t.canvasWidth&&(e.moveTo(H,0),e.lineTo(H,t.canvasHeight)),E>=0&&E<=t.canvasWidth&&(e.moveTo(E,0),e.lineTo(E,t.canvasHeight)),e.stroke(),e.globalAlpha=1,C.label)){const X=Math.max(0,H),B=Math.min(t.canvasWidth,E)-X;e.save(),e.font='600 10px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';const D=e.measureText(C.label).width,z=6,x=D+z*2,te=18,q=X+(B-x)/2,J=4;e.fillStyle=C.color,e.globalAlpha=.9,e.beginPath(),e.roundRect(q,J,x,te,3),e.fill(),e.globalAlpha=1,e.fillStyle="#FFFFFF",e.textBaseline="middle",e.fillText(C.label,q+z,J+te/2),e.restore()}}}}const qt='500 12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';function si(i,e){return{roundRect(t,n,r,c,s=3){i.beginPath(),i.roundRect(t,n,r,c,s),i.fill()},fillText(t,n,r,c){if(i.font=qt,c!==void 0&&i.measureText(t).width>c){let s=0,a=t.length;for(;s<a;){const l=Math.ceil((s+a)/2),m=t.slice(0,l)+"...";i.measureText(m).width<=c?s=l:a=l-1}i.fillText(t.slice(0,s)+"...",n,r)}else i.fillText(t,n,r)},gradient(t,n,r,c){const s=i.createLinearGradient(t,0,t+n,0);return s.addColorStop(0,r),s.addColorStop(.5,r),s.addColorStop(.5,c),s.addColorStop(1,c),s},leftBar(t,n=3){e&&(i.save(),i.fillStyle=t,i.fillRect(e.x,e.y,n,e.height),i.restore())},icon(t,n,r,c=14){i.save();const s=c/2;if(t==="check"){i.fillStyle="#31c48d",i.beginPath(),i.arc(n+s,r+s,s,0,Math.PI*2),i.fill(),i.strokeStyle="#ffffff",i.lineWidth=c*.12,i.beginPath();const a=n+s,l=r+s;i.moveTo(a-s*.45,l),i.lineTo(a-s*.1,l+s*.42),i.lineTo(a+s*.45,l-s*.35),i.stroke()}else if(t==="danger-red"||t==="danger-yellow"){const a=t==="danger-red"?"#EF5350":"#FBBF24";i.fillStyle=a,i.beginPath(),i.moveTo(n+s,r),i.lineTo(n+c,r+c),i.lineTo(n,r+c),i.closePath(),i.fill(),i.fillStyle="#ffffff";const l=c*.12,m=n+s-l/2;i.fillRect(m,r+c*.35,l,c*.35),i.beginPath(),i.arc(n+s,r+c*.82,l*.7,0,Math.PI*2),i.fill()}i.restore()},badge(t,n,r,c){i.save(),i.font=qt;const a=i.measureText(t).width,l=8,S=12+3*2,g=a+l*2,f=S/2;i.fillStyle=c,i.beginPath(),i.roundRect(n,r,g,S,f),i.fill(),i.fillStyle="#ffffff",i.textAlign="center",i.textBaseline="middle",i.fillText(t,n+g/2,r+S/2),i.restore()}}}class Zi{draw(e,t,n,r,c,s,a,l,m,S,g,f,M,T){const p=(t.visibleTimeEnd-t.visibleTimeStart)*.1,R=t.visibleTimeStart-p,$=t.visibleTimeEnd+p,F=c.query(R,$),C=new Map;for(let D=0;D<n.length;D++)C.set(n[D].id,D);const H=new Set(S),E=new Map,X=-t.lineHeight,B=t.canvasHeight+t.lineHeight;for(const D of F){const z=C.get(D.group);if(z===void 0)continue;const x=s.getLayout(D.id);if(!x)continue;const q=t.groupIndexToY(z)+x.stackLevel*t.lineHeight+(t.lineHeight-x.itemHeight)/2,J=x.itemHeight;if(q+J<X||q>B)continue;const ce=t.timeToX(D.start_time),me=t.timeToX(D.end_time)-ce,ge={x:ce,y:q,width:me,height:J};E.set(D.id,ge);const De={selected:H.has(D.id),hovered:g===D.id,dragging:!1,filtered:D.filtered!==!1};e.save();const qe=si(e,ge);let ke;M&&(T!=null&&T.isParent(D.id))?ke=M:l&&(D.type==="control_area_group"||D.type==="construction_train")?ke=l:ke=a,ke(e,D,ge,De,qe),e.restore()}if(f&&f.length>0){const D=new Set;for(const z of f)E.has(z.fromItemId)||D.add(z.fromItemId),E.has(z.toItemId)||D.add(z.toItemId);if(D.size>0){const z=new Map;for(const x of r)D.has(x.id)&&z.set(x.id,x);for(const[x,te]of z){const q=C.get(te.group);if(q===void 0)continue;const J=s.getLayout(x);if(!J)continue;const me=t.groupIndexToY(q)+J.stackLevel*t.lineHeight+(t.lineHeight-J.itemHeight)/2,ge=t.timeToX(te.start_time),De=t.timeToX(te.end_time)-ge;E.set(x,{x:ge,y:me,width:De,height:J.itemHeight})}}this.drawDependencies(e,f,E,g,m)}}drawDependencies(e,t,n,r,c){for(const s of t){const a=n.get(s.fromItemId),l=n.get(s.toItemId);if(!a||!l)continue;const m=r===s.fromItemId||r===s.toItemId;e.strokeStyle=m?c.primary:s.color??"#94A3B8",e.lineWidth=m?2:1.5,e.setLineDash([]);const S=a.x+a.width,g=a.y+a.height/2,f=l.x,M=l.y+l.height/2,T=Math.abs(f-S),p=Math.max(T*.4,30);e.beginPath(),e.moveTo(S,g),e.bezierCurveTo(S+p,g,f-p,M,f,M),e.stroke();const R=6;e.fillStyle=e.strokeStyle,e.beginPath(),e.moveTo(f,M),e.lineTo(f-R,M-R/2),e.lineTo(f-R,M+R/2),e.closePath(),e.fill()}}}class Vi{draw(e,t,n,r){const{cursorX:c,snapX:s,markers:a,interaction:l}=r;if(a)for(const m of a){const S=t.timeToX(m.date);if(e.fillStyle=m.color,e.fillRect(S-m.width/2,0,m.width,t.canvasHeight),m.label){e.save(),e.font='500 10px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';const g=e.measureText(m.label).width,f=8,M=200,T=Math.min(g+f*2,M),p=20,R=S-T/2,$=4;e.fillStyle=m.color,e.beginPath(),e.roundRect(R,$,T,p,3),e.fill(),e.fillStyle="#FFFFFF",e.textBaseline="middle";const F=M-f*2,C=g>F?m.label.slice(0,Math.floor(m.label.length*F/g))+"…":m.label;e.fillText(C,R+f,$+p/2),e.restore()}}if(c!=null&&(e.strokeStyle=n.marker.cursor,e.lineWidth=1,e.beginPath(),e.moveTo(c,0),e.lineTo(c,t.canvasHeight),e.stroke()),s!=null&&(e.strokeStyle=n.primary,e.lineWidth=1,e.setLineDash([4,4]),e.beginPath(),e.moveTo(s,0),e.lineTo(s,t.canvasHeight),e.stroke(),e.setLineDash([])),l){l.groupChanged&&l.targetGroupY!==void 0&&(e.fillStyle="rgba(59, 130, 246, 0.08)",e.fillRect(0,l.targetGroupY,t.canvasWidth,t.lineHeight)),e.save(),e.globalAlpha=.5;const m=si(e,l.bounds);l.renderer(e,l.item,l.bounds,{selected:!1,hovered:!1,dragging:!0,filtered:!0},m),e.restore()}}}const Zt=120;function Ki(i){let e=i.deltaY||i.deltaX;return i.deltaMode===1?e*=15:i.deltaMode===2&&(e*=800),Math.max(-Zt,Math.min(Zt,e))}class Qi{constructor(e,t,n,r,c){Object.defineProperty(this,"onZoom",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleTimeStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"visibleTimeEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"minZoom",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"maxZoom",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.onZoom=e,this.visibleTimeStart=t,this.visibleTimeEnd=n,this.minZoom=r,this.maxZoom=c}updateBounds(e,t){this.visibleTimeStart=e,this.visibleTimeEnd=t}handleWheelZoom(e,t){const n=Ki(e),r=e.ctrlKey?10:e.metaKey?3:1,c=n>0?1+r*n/500:1/(1+r*-n/500),s=this.visibleTimeEnd-this.visibleTimeStart;let a=Math.round(s*c);a=Math.max(this.minZoom,Math.min(this.maxZoom,a));const l=Math.round(this.visibleTimeStart+(s-a)*t),m=l+a;this.onZoom(l,m)}}const rt=864e5;let Vt=!1;function Mt(i){return Vt||(Vt=!0,console.warn(`[canvas-timeline] dragSnap function returned ${i}; falling back to no snap. This warning is shown once per session.`)),1}function Ae(i,e,t){if(i===void 0)return 1;if(typeof i!="function")return i;const n=i(e,t);return typeof n=="number"?!Number.isFinite(n)||n<=0?Mt(`an invalid interval (${n})`):n:!Number.isFinite(n.interval)||n.interval<=0?Mt(`an invalid interval (${n.interval})`):Number.isFinite(n.anchor)?n:Mt(`a non-finite anchor (${n.anchor})`)}function Ne(i,e,t){if(typeof e!="number"){const{interval:r,anchor:c}=e;return!Number.isFinite(r)||r<=0||!Number.isFinite(c)?i:Math.round((i-c)/r)*r+c}const n=e;if(t&&n%rt===0){const r=n/rt,c=ue(i,t),s=c.startOf("day"),a=s.add(1,"day").valueOf()-s.valueOf(),l=(i-s.valueOf())/a,m=Math.round(he.utc(c.format("YYYY-MM-DD")).valueOf()/rt),S=Math.round((m+l)/r)*r,g=he.utc(S*rt).format("YYYY-MM-DD");return he.tz(g,t).valueOf()}return Math.round(i/n)*n}const Ji=4;class en{constructor(e){Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"dragSnap",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activated",{enumerable:!0,configurable:!0,writable:!0,value:!1}),this.dragSnap=e}startInteraction(e,t,n,r){this.state={item:e,mode:t,startX:n,startY:r,currentX:n,currentY:r,deltaX:0,originalGroup:e.group,currentGroup:e.group},this.activated=!1}update(e,t){this.state&&(this.state.currentX=e,this.state.currentY=t,this.state.deltaX=e-this.state.startX,!this.activated&&Math.abs(this.state.deltaX)>=Ji&&(this.activated=!0))}setCurrentGroup(e){this.state&&(this.state.currentGroup=e)}endMove(e){if(!this.state)return null;const t=this.state.deltaX/e,n=this.state.item.start_time+t,r=Ne(n,Ae(this.dragSnap,this.state.item)),c=this.state.currentGroup;return this.state=null,this.activated=!1,{newStartTime:r,newGroupId:c}}endResize(e){if(!this.state)return null;const t=this.state.deltaX/e,n=this.state.mode==="resize-left"?"left":"right",c=(n==="left"?this.state.item.start_time:this.state.item.end_time)+t,s=Ne(c,Ae(this.dragSnap,this.state.item,n));return this.state=null,this.activated=!1,{newTime:s,edge:n}}cancel(){this.state=null,this.activated=!1}getState(){return this.state}getMode(){var e;return((e=this.state)==null?void 0:e.mode)??null}isActive(){return this.state!==null&&this.activated}isPending(){return this.state!==null}}function St(i,e,t){const n=[];for(const r of i)r.id!==e&&(n.push(t(r.start_time)),n.push(t(r.end_time)));return n}function st(i,e,t,n,r){if(e.length===0)return null;let c=e[0],s=Math.abs(i-c);for(let a=1;a<e.length;a++){const l=Math.abs(i-e[a]);l<s&&(s=l,c=e[a])}return s<=t?c:null}function oi(i,e,t){const n=t.canvasWidth/(e.visibleTimeEnd-e.visibleTimeStart),r=i.deltaX/n,c=i.item.start_time+r,s=Ae(t.dragSnap,i.item),a=(e.visibleTimeEnd-e.visibleTimeStart)*.1,l=t.intervalTree.query(e.visibleTimeStart-a,e.visibleTimeEnd+a),m=St(l,i.item.id,f=>e.timeToX(f)),S=st(e.timeToX(c),m,8);if(S!==null)return e.xToTime(S);const g=st(e.timeToX(i.item.end_time+r),m,8);return g!==null?e.xToTime(g)-(i.item.end_time-i.item.start_time):Ne(c,s,t.timezone)}function ai(i,e,t){const n=t.canvasWidth/(e.visibleTimeEnd-e.visibleTimeStart),r=i.deltaX/n,c=i.mode==="resize-left"?"left":"right",s=(c==="left"?i.item.start_time:i.item.end_time)+r,a=Ae(t.dragSnap,i.item,c),l=(e.visibleTimeEnd-e.visibleTimeStart)*.1,m=t.intervalTree.query(e.visibleTimeStart-l,e.visibleTimeEnd+l),S=St(m,i.item.id,T=>e.timeToX(T)),g=st(e.timeToX(s),S,8);let f=g!==null?e.xToTime(g):Ne(s,a,t.timezone);const M=t.hierarchyEngine.getResizeConstraint(i.item.id,c);return c==="left"&&f>M.max?f=M.max:c==="right"&&f<M.min&&(f=M.min),{edge:c,time:f}}function tn(i,e,t,n){if(i.mode==="move"){const l=oi(i,e,t),m=i.item.end_time-i.item.start_time;return{itemId:i.item.id,mode:"move",time:l,startTime:l,endTime:l+m,pointerX:n.x,pointerY:n.y}}const{edge:r,time:c}=ai(i,e,t),s=r==="left"?c:i.item.start_time,a=r==="right"?c:i.item.end_time;return{itemId:i.item.id,mode:i.mode,edge:r,time:c,startTime:s,endTime:a,pointerX:n.x,pointerY:n.y}}var li={exports:{}};(function(i,e){(function(t,n){i.exports=n()})(Ge,function(){var t="day";return function(n,r,c){var s=function(m){return m.add(4-m.isoWeekday(),t)},a=r.prototype;a.isoWeekYear=function(){return s(this).year()},a.isoWeek=function(m){if(!this.$utils().u(m))return this.add(7*(m-this.isoWeek()),t);var S,g,f,M,T=s(this),p=(S=this.isoWeekYear(),g=this.$u,f=(g?c.utc:c)().year(S).startOf("year"),M=4-f.isoWeekday(),f.isoWeekday()>4&&(M+=7),f.add(M,t));return T.diff(p,"week")+1},a.isoWeekday=function(m){return this.$utils().u(m)?this.day()||7:this.day(this.day()%7?m:m-7)};var l=a.startOf;a.startOf=function(m,S){var g=this.$utils(),f=!!g.u(S)||S;return g.p(m)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):l.bind(this)(m,S)}}})})(li);var nn=li.exports;const rn=Ue(nn),Kt=200;function Qt({groups:i,width:e,lineHeight:t,groupHeights:n,scrollTop:r,canvasHeight:c,theme:s,groupRenderer:a,onScroll:l}){var C;const m=h.useRef(null),S=h.useRef(!1),g=h.useMemo(()=>{const H=new Array(i.length+1);H[0]=0;for(let E=0;E<i.length;E++)H[E+1]=H[E]+((n==null?void 0:n[E])??t);return H},[i.length,n,t]),f=g[i.length]??0,M=c,T=h.useCallback(H=>{if(i.length===0||H<=0)return 0;if(H>=f)return i.length-1;let E=0,X=i.length-1;for(;E<X;){const B=E+X>>>1;g[B+1]>H?X=B:E=B+1}return E},[i.length,g,f]),p=T(r-Kt),R=T(r+c+Kt),$=h.useCallback(H=>{S.current||l(H.currentTarget.scrollTop)},[l]);h.useEffect(()=>{m.current&&(S.current=!0,m.current.scrollTop=r,requestAnimationFrame(()=>{S.current=!1}))},[r]);const F=[];for(let H=p;H<=R;H++){const E=i[H];if(!E)continue;const X=g[H],B=g[H+1]-X;F.push(U.jsx("div",{style:{position:"absolute",top:X,height:B,width:"100%",overflow:"hidden",display:"flex",alignItems:"stretch",borderBottom:`1px solid ${((C=s.grid)==null?void 0:C.line)??"#E5E5E5"}`,boxSizing:"border-box"},children:a(E)},E.id))}return U.jsx("div",{ref:m,onScroll:$,style:{width:e,height:M,overflowY:f>c?"auto":"hidden",overflowX:"hidden",position:"relative",borderRight:`1px solid ${s.sidebar.border}`,backgroundColor:s.sidebar.bg},children:U.jsx("div",{style:{height:f,position:"relative"},children:F})})}function ui(i){return null}ui.displayName="TodayMarker";function Jt(i){return{date:Math.floor(Date.now()/6e4)*6e4,color:i.color??"#FD7171",width:i.width??6,label:i.label}}function sn(i){return i.interval??1e4}function ci(i){return null}ci.displayName="CustomMarker";function ei(i){return{date:i.date,color:i.color??"#3B82F6",width:i.width??4,label:i.label}}he.extend(rn);function on(i){return i?{...ye,...i,status:{...ye.status,...i.status},grid:{...ye.grid,...i.grid},item:{...ye.item,...i.item},marker:{...ye.marker,...i.marker},sidebar:{...ye.sidebar,...i.sidebar},header:{...ye.header,...i.header}}:ye}const ti=32,an=h.memo(h.forwardRef(function(e,t){const{groups:n,items:r,defaultTimeStart:c,defaultTimeEnd:s,sidebarWidth:a,lineHeight:l,itemHeightRatio:m,stackItems:S,canMove:g,canChangeGroup:f,canResize:M,dragSnap:T,minZoom:p,maxZoom:R,theme:$,dayStyle:F,rowStyle:C,showCursorLine:H,itemRenderer:E,groupRenderer:X,sidebarGroupRenderer:B,dependencies:D,highlights:z,onItemClick:x,onItemDoubleClick:te,onItemContextMenu:q,onItemMove:J,onItemResize:ce,moveResizeValidator:me,onItemHover:ge,onInteractionUpdate:De,onCanvasDoubleClick:qe,onCanvasContextMenu:ke,onTimeChange:kt,onZoom:Ct,selected:Et=[],rightSidebarWidth:ot,rightSidebarGroupRenderer:wt,onReady:Ze,maxHeight:Fe,timezone:Ve,devBadge:vi,children:Te}=e,pe=h.useMemo(()=>on($),[$]),Ht=h.useCallback((o,u)=>{for(let v=0;v<u.length;v++)if(u[v].id===o)return v;return 0},[]),bi=Et.join(","),at=h.useMemo(()=>Et,[bi]),Rt=h.useRef(null),Dt=h.useRef(null),It=h.useRef(null),Xe=h.useRef(null),Ot=h.useRef(null),Pt=h.useRef(null),[yi,Ti]=h.useState(800),[Mi,Si]=h.useState(null);h.useEffect(()=>{const o=Ot.current;if(!o)return;const u=new ResizeObserver(v=>{const b=v[0];b&&Ti(b.contentRect.width)});return u.observe(o),()=>u.disconnect()},[]),h.useEffect(()=>{const o=Pt.current;if(!o||!Fe)return;const u=new ResizeObserver(v=>{const b=v[0];b&&Si(b.contentRect.height)});return u.observe(o),()=>u.disconnect()},[Fe]);const Me=Math.max(0,yi-a-(ot??0)),Ce=h.useMemo(()=>{const o=new ii;return o.rebuild(r),o},[r]),lt=h.useMemo(()=>{const o=new xi;return o.buildFromItems(r,u=>Ce.getEffectiveSpan(u.id).start,u=>Ce.getEffectiveSpan(u.id).end),o},[r,Ce]),_e=h.useMemo(()=>{const o=new Wi(l,m);return o.computeLayout(r,S,Ce),o},[r,l,m,S,Ce]),Ee=h.useMemo(()=>n.map(o=>_e.getGroupHeight(o.id)),[n,_e]),Ke=h.useMemo(()=>Ee.reduce((o,u)=>o+u,0),[Ee]),Yt=typeof Fe=="number"?Fe:Mi,de=Yt?Math.min(Ke,Yt):Ke,L=h.useRef(new vt({visibleTimeStart:e.visibleTimeStart??c,visibleTimeEnd:e.visibleTimeEnd??s,canvasWidth:Me,canvasHeight:de,sidebarWidth:a,lineHeight:l,groupCount:n.length,buffer:e.buffer??3,scrollTop:0,groupHeights:Ee})),ut=h.useRef(null),xe=h.useRef(void 0),$t=h.useRef({x:0,y:0}),ct=h.useRef(!1),ae=h.useRef(null),we=h.useRef(!1),Ft=4,[Xt,ki]=h.useState(e.visibleTimeStart??c),[_t,Ci]=h.useState(e.visibleTimeEnd??s),[xt,Qe]=h.useState(0),We=h.useRef(null),Ie=h.useCallback(()=>{const o=L.current;ki(o.visibleTimeStart),Ci(o.visibleTimeEnd),Qe(o.scrollTop),We.current=null},[]),dt=h.useCallback(()=>{We.current===null&&(We.current=setTimeout(Ie,ti))},[Ie]);h.useEffect(()=>()=>{We.current!==null&&clearTimeout(We.current)},[]);const Wt=h.useMemo(()=>e.summaryRenderer?e.summaryRenderer:(o,u,v,b,d)=>{Bi(o,u,v,b,d,pe)},[e.summaryRenderer,pe]),Oe=h.useMemo(()=>new qi,[]),Pe=h.useMemo(()=>new Zi,[]),Ye=h.useMemo(()=>new Vi,[]),ie=h.useMemo(()=>new en(T),[T]),Je=h.useMemo(()=>{const o=[];return h.Children.forEach(Te,u=>{var b;if(!h.isValidElement(u))return;const v=(b=u.type)==null?void 0:b.displayName;v==="TodayMarker"?o.push(Jt(u.props)):v==="CustomMarker"&&o.push(ei(u.props))}),o},[Te]),et=h.useMemo(()=>Je.map(o=>`${o.date}|${o.color}|${o.width}|${o.label??""}`).join(";"),[Je]),Be=h.useRef(Je);Be.current=Je;const ft=h.useMemo(()=>{let o=0;return h.Children.forEach(Te,u=>{var b;if(!h.isValidElement(u))return;((b=u.type)==null?void 0:b.displayName)==="TodayMarker"&&(o=sn(u.props))}),o},[Te]),A=h.useRef({groups:n,items:r,intervalTree:lt,layoutEngine:_e,itemRenderer:E,groupRenderer:X,theme:pe,selected:at,dependencies:D,highlights:z,dayStyle:F,rowStyle:C,showCursorLine:H,canvasWidth:Me,canvasHeight:de,lineHeight:l,itemHeightRatio:m,onTimeChange:kt,onZoom:Ct,onItemHover:ge,onItemClick:x,onItemDoubleClick:te,onItemContextMenu:q,onItemMove:J,onItemResize:ce,onInteractionUpdate:De,onCanvasDoubleClick:qe,onCanvasContextMenu:ke,canMove:g,canResize:M,canChangeGroup:f,dragSnap:T,sidebarWidth:a,moveResizeValidator:me,summaryRenderer:Wt,hierarchyEngine:Ce,timezone:Ve});A.current={groups:n,items:r,intervalTree:lt,layoutEngine:_e,itemRenderer:E,groupRenderer:X,theme:pe,selected:at,dependencies:D,highlights:z,dayStyle:F,rowStyle:C,showCursorLine:H,canvasWidth:Me,canvasHeight:de,lineHeight:l,itemHeightRatio:m,onTimeChange:kt,onZoom:Ct,onItemHover:ge,onItemClick:x,onItemDoubleClick:te,onItemContextMenu:q,onItemMove:J,onItemResize:ce,onInteractionUpdate:De,onCanvasDoubleClick:qe,onCanvasContextMenu:ke,canMove:g,canResize:M,canChangeGroup:f,dragSnap:T,sidebarWidth:a,moveResizeValidator:me,summaryRenderer:Wt,hierarchyEngine:Ce,timezone:Ve};const Ei=h.useCallback(()=>{const o=Rt.current;if(!o)return;const u=A.current,v=yt(o,u.canvasWidth,u.canvasHeight);Tt(v,o),Oe.draw(v,L.current,u.groups,u.theme,u.dayStyle,u.rowStyle,u.highlights,u.timezone)},[Oe]),wi=h.useCallback(()=>{const o=Dt.current;if(!o)return;const u=A.current,v=yt(o,u.canvasWidth,u.canvasHeight);Tt(v,o),Pe.draw(v,L.current,u.groups,u.items,u.intervalTree,u.layoutEngine,u.itemRenderer,u.groupRenderer,u.theme,u.selected,xe.current,u.dependencies,u.summaryRenderer,u.hierarchyEngine)},[Pe]),Bt=h.useCallback((o,u,v)=>{const b=L.current,d=A.current,y=d.canvasWidth/(b.visibleTimeEnd-b.visibleTimeStart),w=u/y,I=v==="resize-left"?"left":v==="resize-right"?"right":void 0,Y=Ae(d.dragSnap,o,I),_=[];v==="move"?(_.push(b.timeToX(o.start_time+w)),_.push(b.timeToX(o.end_time+w))):v==="resize-left"?_.push(b.timeToX(o.start_time+w)):_.push(b.timeToX(o.end_time+w));const W=(b.visibleTimeEnd-b.visibleTimeStart)*.1,Z=d.intervalTree.query(b.visibleTimeStart-W,b.visibleTimeEnd+W),re=St(Z,o.id,ee=>b.timeToX(ee));for(const ee of _){const V=st(ee,re,8);if(V!==null)return V}const K=v==="resize-right"?o.end_time+w:o.start_time+w,G=Ne(K,Y,d.timezone);return b.timeToX(G)},[]),Hi=h.useCallback(()=>{const o=It.current;if(!o)return;const u=A.current,v=yt(o,u.canvasWidth,u.canvasHeight);Tt(v,o);const b=L.current,d=ie.getState();let y=null;if(d){const w=b.timeToX(d.item.start_time),I=b.timeToX(d.item.end_time)-w;let Y,_;d.mode==="resize-left"?(Y=w+d.deltaX,_=I-d.deltaX):d.mode==="resize-right"?(Y=w,_=I+d.deltaX):(Y=w+d.deltaX,_=I);const W=Ht(d.currentGroup,u.groups),Z=b.groupIndexToY(W),re=d.currentGroup!==d.originalGroup;y={item:d.item,mode:d.mode,bounds:{x:Y,y:Z+(u.lineHeight-u.lineHeight*u.itemHeightRatio)/2,width:_,height:u.lineHeight*u.itemHeightRatio},renderer:u.itemRenderer,targetGroupY:Z,groupChanged:re}}Ye.draw(v,b,u.theme,{cursorX:u.showCursorLine?ut.current:null,snapX:d?Bt(d.item,d.deltaX,d.mode):null,markers:Be.current,interaction:y}),u.onInteractionUpdate&&(d?(u.onInteractionUpdate(tn(d,b,u,$t.current)),ct.current=!0):ct.current&&(ct.current=!1,u.onInteractionUpdate(null)))},[Ye,ie,Bt,Ht]),ht=h.useRef(null);ht.current||(ht.current=new Li(o=>{o.grid&&Ei(),o.items&&wi(),o.overlay&&Hi()}));const O=ht.current;h.useEffect(()=>()=>O.dispose(),[O]),h.useEffect(()=>{if(!ft)return;const o=setInterval(()=>{const u=[];h.Children.forEach(Te,v=>{var d;if(!h.isValidElement(v))return;const b=(d=v.type)==null?void 0:d.displayName;b==="TodayMarker"?u.push(Jt(v.props)):b==="CustomMarker"&&u.push(ei(v.props))}),Be.current=u,O.markDirty("overlay")},ft);return()=>clearInterval(o)},[ft,Te,O]),h.useEffect(()=>{L.current.update({canvasWidth:Me,canvasHeight:de,sidebarWidth:a,lineHeight:l,groupCount:n.length,groupHeights:Ee}),O.markAllDirty()},[Me,de,a,l,n.length,Ee,O]),h.useEffect(()=>{O.markDirty("grid"),O.markDirty("items")},[r,n,at,pe,F,C,lt,_e,O]);const tt=h.useMemo(()=>{var o;return((o=e.highlights)==null?void 0:o.map(u=>`${u.start}|${u.end}|${u.color}|${u.label??""}|${u.opacity??""}`).join(";"))??""},[e.highlights]),zt=h.useRef(tt);h.useEffect(()=>{tt!==zt.current&&(zt.current=tt,O.markDirty("grid"))},[tt,O]);const jt=h.useRef(et);h.useEffect(()=>{et!==jt.current&&(jt.current=et,O.markDirty("overlay"))},[et,O]);const Lt=h.useRef(e.visibleTimeStart),At=h.useRef(e.visibleTimeEnd);e.visibleTimeStart!==void 0&&e.visibleTimeStart!==Lt.current&&(Lt.current=e.visibleTimeStart,L.current.update({visibleTimeStart:e.visibleTimeStart}),O.markAllDirty()),e.visibleTimeEnd!==void 0&&e.visibleTimeEnd!==At.current&&(At.current=e.visibleTimeEnd,L.current.update({visibleTimeEnd:e.visibleTimeEnd}),O.markAllDirty());const ze=h.useRef(null),mt=h.useCallback(o=>{ze.current===null&&(ze.current=setTimeout(()=>{var b,d;ze.current=null;const u=L.current,v=A.current;o==="zoom"?(b=v.onZoom)==null||b.call(v,u.visibleTimeStart,u.visibleTimeEnd):(d=v.onTimeChange)==null||d.call(v,u.visibleTimeStart,u.visibleTimeEnd)},ti))},[]);h.useEffect(()=>()=>{ze.current!==null&&clearTimeout(ze.current)},[]);const it=h.useRef(null),gt=h.useMemo(()=>new Qi((o,u)=>{var v;L.current.update({visibleTimeStart:o,visibleTimeEnd:u}),(v=it.current)==null||v.updateBounds(o,u),O.markAllDirty(),dt(),mt("zoom")},c,s,p,R),[]);it.current=gt;const nt=h.useCallback(o=>{const u=L.current,v=u.getTotalHeight(),b=Math.max(0,v-u.canvasHeight),d=Math.max(0,Math.min(b,u.scrollTop+o));d!==u.scrollTop&&(u.update({scrollTop:d}),O.markDirty("grid"),O.markDirty("items"),O.markDirty("overlay"),Qe(d))},[O]),je=h.useCallback(o=>{var w,I,Y;const u=L.current,v=u.canvasWidth/(u.visibleTimeEnd-u.visibleTimeStart),b=o/v,d=u.visibleTimeStart+b,y=u.visibleTimeEnd+b;u.update({visibleTimeStart:d,visibleTimeEnd:y}),(w=it.current)==null||w.updateBounds(d,y),O.markAllDirty(),_i.flushSync(()=>Ie()),(Y=(I=A.current).onTimeChange)==null||Y.call(I,d,y)},[O,Ie]);h.useEffect(()=>{const o=Xe.current;if(!o)return;const u=v=>{if(v.ctrlKey||v.metaKey||v.altKey){v.preventDefault();const b=o.getBoundingClientRect(),d=(v.clientX-b.left)/b.width;gt.handleWheelZoom(v,d)}else if(v.shiftKey)v.preventDefault(),je(v.deltaY||v.deltaX);else{const b=v.deltaX;b!==0&&Math.abs(b)>Math.abs(v.deltaY)?(v.preventDefault(),je(b)):v.deltaY!==0&&(Ke>de&&v.preventDefault(),nt(v.deltaY))}};return o.addEventListener("wheel",u,{passive:!1}),()=>o.removeEventListener("wheel",u)},[gt,nt,je,Ke,de]);const Se=h.useRef({lastDistance:null,lastCenter:null});h.useEffect(()=>{const o=Xe.current;if(!o)return;const u=(w,I)=>Math.abs(w.clientX-I.clientX),v=(w,I,Y)=>(w.clientX+I.clientX)/2-Y.left,b=w=>{w.touches.length===2&&(w.preventDefault(),Se.current.lastDistance=u(w.touches[0],w.touches[1]),Se.current.lastCenter=null)},d=w=>{var I;if(w.touches.length===2&&Se.current.lastDistance!==null){w.preventDefault();const Y=u(w.touches[0],w.touches[1]),_=o.getBoundingClientRect(),Z=v(w.touches[0],w.touches[1],_)/_.width;if(Y!==0&&Se.current.lastDistance!==0){const re=Se.current.lastDistance/Y,K=L.current,G=K.visibleTimeEnd-K.visibleTimeStart;let ee=G*re;ee=Math.max(p,Math.min(R,ee));const V=K.visibleTimeStart+G*Z,P=V-ee*Z,k=V+ee*(1-Z);K.update({visibleTimeStart:P,visibleTimeEnd:k}),(I=it.current)==null||I.updateBounds(P,k),O.markAllDirty(),dt(),mt("zoom")}Se.current.lastDistance=Y}},y=()=>{Se.current.lastDistance=null,Se.current.lastCenter=null};return o.addEventListener("touchstart",b,{passive:!1}),o.addEventListener("touchmove",d,{passive:!1}),o.addEventListener("touchend",y),()=>{o.removeEventListener("touchstart",b),o.removeEventListener("touchmove",d),o.removeEventListener("touchend",y)}},[O,dt,mt]);const Ri=h.useCallback(o=>{var Y;const u=o.currentTarget,v=u.getBoundingClientRect(),b=o.clientX-v.left,d=o.clientY-v.top;if(ut.current=b,$t.current={x:o.clientX,y:o.clientY},ae.current){const _=o.clientX-ae.current.startX,W=o.clientY-ae.current.startY;if(!we.current&&(Math.abs(_)>=Ft||Math.abs(W)>=Ft)&&(we.current=!0,u.style.cursor="grabbing",u.setPointerCapture(o.pointerId)),we.current){const Z=o.clientX-ae.current.lastX,re=o.clientY-ae.current.lastY;ae.current.lastX=o.clientX,ae.current.lastY=o.clientY,Math.abs(Z)>0&&je(-Z),Math.abs(re)>0&&nt(-re)}return}if(ie.isPending()){if(ie.update(b,d),ie.isActive()){const _=ie.getState();if(_&&_.mode==="move"&&A.current.canChangeGroup){const W=bt(d,L.current,A.current.groups);W&&ie.setCurrentGroup(W.id)}O.markDirty("overlay")}return}A.current.showCursorLine&&O.markDirty("overlay");const y=A.current,w=Le(b,d,L.current,y.intervalTree,y.layoutEngine,y.groups),I=w==null?void 0:w.id;if(I!==xe.current&&(xe.current=I,O.markDirty("items"),(Y=y.onItemHover)==null||Y.call(y,I??null,o.nativeEvent)),w){const _=Gt(b,w,L.current),W=Ut(w,_,y.canResize,y.canMove);u.style.cursor=W==="resize-left"||W==="resize-right"?"col-resize":W==="move"?"grab":"default"}else u.style.cursor="default"},[ie,O,je,nt]),Di=h.useCallback(o=>{const u=A.current,v=o.currentTarget.getBoundingClientRect(),b=o.clientX-v.left,d=o.clientY-v.top,y=Le(b,d,L.current,u.intervalTree,u.layoutEngine,u.groups);if(!y){ae.current={startX:o.clientX,startY:o.clientY,lastX:o.clientX,lastY:o.clientY},we.current=!1;return}const w=Gt(b,y,L.current),I=Ut(y,w,u.canResize,u.canMove);I&&ie.startInteraction(y,I,b,d)},[ie]),Ii=h.useCallback(o=>{var w,I,Y,_;const u=o.currentTarget;if(ae.current){const W=we.current;if(ae.current=null,we.current=!1,u.style.cursor="default",W)return}if(ie.isActive()){const W=ie.getState(),Z=L.current,re=Z.canvasWidth/(Z.visibleTimeEnd-Z.visibleTimeStart);if(W){const K=A.current.moveResizeValidator,G=A.current;if(W.mode==="move"){const ee=oi(W,Z,G),V=ie.endMove(re);if(V){const P=K?K("move",W.item.id,ee):ee,k=G.hierarchyEngine.getMoveDelta(W.item.id,P);(w=G.onItemMove)==null||w.call(G,W.item.id,P,V.newGroupId,k.length>0?k:void 0)}}else{const{edge:ee,time:V}=ai(W,Z,G);if(ie.endResize(re)){const k=K?K("resize",W.item.id,V,ee):V;(I=G.onItemResize)==null||I.call(G,W.item.id,k,ee)}}}u.style.cursor="default",O.markDirty("overlay");return}ie.isPending()&&ie.cancel();const v=u.getBoundingClientRect(),b=o.clientX-v.left,d=o.clientY-v.top,y=Le(b,d,L.current,A.current.intervalTree,A.current.layoutEngine,A.current.groups);y&&((_=(Y=A.current).onItemClick)==null||_.call(Y,y.id,o.nativeEvent))},[ie,O]),Oi=h.useCallback(o=>{var w,I;const u=o.currentTarget.getBoundingClientRect(),v=o.clientX-u.left,b=o.clientY-u.top,d=A.current,y=Le(v,b,L.current,d.intervalTree,d.layoutEngine,d.groups);if(y)(w=d.onItemDoubleClick)==null||w.call(d,y.id,o.nativeEvent);else{const Y=bt(b,L.current,d.groups),_=L.current.xToTime(v);Y&&((I=d.onCanvasDoubleClick)==null||I.call(d,Y.id,_))}},[]),Pi=h.useCallback(o=>{var w,I;o.preventDefault();const u=o.currentTarget.getBoundingClientRect(),v=o.clientX-u.left,b=o.clientY-u.top,d=A.current,y=Le(v,b,L.current,d.intervalTree,d.layoutEngine,d.groups);if(y)(w=d.onItemContextMenu)==null||w.call(d,y.id,o.nativeEvent);else{const Y=bt(b,L.current,d.groups),_=L.current.xToTime(v);Y&&((I=d.onCanvasContextMenu)==null||I.call(d,Y.id,_,o.nativeEvent))}},[]),Yi=h.useCallback(()=>{var o,u;ae.current=null,we.current=!1,ut.current=null,Xe.current&&(Xe.current.style.cursor="default"),xe.current!==void 0&&(xe.current=void 0,O.markDirty("items"),(u=(o=A.current).onItemHover)==null||u.call(o,null,new PointerEvent("pointerleave"))),A.current.showCursorLine&&O.markDirty("overlay")},[O]),$i=h.useMemo(()=>{const o=[];return h.Children.forEach(Te,u=>{var b;if(!h.isValidElement(u))return;if(((b=u.type)==null?void 0:b.displayName)==="TimelineHeaders"){const d=u.props;o.push(h.cloneElement(u,{visibleTimeStart:d.visibleTimeStart??Xt,visibleTimeEnd:d.visibleTimeEnd??_t,canvasWidth:d.canvasWidth??Me,sidebarWidth:d.sidebarWidth??a,theme:d.theme??pe,timezone:d.timezone??Ve,onZoomToInterval:d.onZoomToInterval??((y,w)=>{var I,Y,_,W;L.current.update({visibleTimeStart:y,visibleTimeEnd:w}),O.markAllDirty(),Ie(),(Y=(I=A.current).onTimeChange)==null||Y.call(I,y,w),(W=(_=A.current).onZoom)==null||W.call(_,y,w)})}))}}),o},[Te,Xt,_t,Me,a,pe,Ve,O,Ie]),Nt=h.useRef(!1);h.useEffect(()=>{Nt.current||(Nt.current=!0,O.markAllDirty())},[O]),h.useImperativeHandle(t,()=>({captureToCanvas({timeStart:o,timeEnd:u,scale:v,sidebarWidth:b}){const d=A.current,y=28,w=y*3,I=d.groups.map(N=>d.layoutEngine.getGroupHeight(N.id)),Y=[0];for(let N=0;N<I.length;N++)Y.push(Y[N]+I[N]);const _=Y[I.length],W=L.current,Z=d.canvasWidth/(W.visibleTimeEnd-W.visibleTimeStart),re=u-o,K=Math.max(d.canvasWidth,Math.round(re*Z)),G=(b+K)*v,ee=(w+_)*v,V=document.createElement("canvas");V.width=G,V.height=ee;const P=V.getContext("2d");P.scale(v,v);for(let N=0;N<d.groups.length;N++){const ve=d.groups[N],be=I[N],j=w+Y[N];if(d.rowStyle){const oe=d.rowStyle(ve);oe!=null&&oe.backgroundColor&&(P.fillStyle=oe.backgroundColor,P.fillRect(0,j,b,be))}const se=ve.type;let ne="400",Q=8;se==="project"?ne="700":se==="CAG"?ne="600":se==="CA"&&(ne="400",Q=24),P.fillStyle="#111",P.font=`${ne} 12px sans-serif`,P.textBaseline="middle",P.fillText(ve.title,Q,j+be/2,b-Q-4)}const k=(N,ve,be)=>{var ne,Q;P.fillStyle=((ne=d.theme.header)==null?void 0:ne.bg)??"#f5f5f5",P.fillRect(b,N,K,y),P.strokeStyle=((Q=d.theme.grid)==null?void 0:Q.line)??"#e0e0e0",P.lineWidth=1,P.strokeRect(b,N,K,y);let j=ue(o,d.timezone).startOf(be);j.valueOf()<o&&(j=j.add(1,be));const se=K/(u-o);for(;j.valueOf()<u;){const oe=j.add(1,be),le=b+(j.valueOf()-o)*se,fe=b+(Math.min(oe.valueOf(),u)-o)*se-le;P.beginPath(),P.moveTo(le,N),P.lineTo(le,N+y),P.stroke(),P.fillStyle="#333",P.font="600 11px sans-serif",P.textBaseline="middle",P.textAlign="center",P.fillText(ve(j),le+fe/2,N+y/2,fe-4),j=oe}P.textAlign="start"};k(0,N=>N.format("YYYY"),"year"),k(y,N=>N.format("MM"),"month"),k(y*2,N=>String(N.isoWeek()),"week");const $e=new vt({visibleTimeStart:o,visibleTimeEnd:u,canvasWidth:K,canvasHeight:_,sidebarWidth:0,lineHeight:d.lineHeight,groupCount:d.groups.length,buffer:1,scrollTop:0,groupHeights:I});return P.save(),P.translate(b,w),P.beginPath(),P.rect(0,0,K,_),P.clip(),Oe.draw(P,$e,d.groups,d.theme,d.dayStyle,d.rowStyle,d.highlights,d.timezone),Pe.draw(P,$e,d.groups,d.items,d.intervalTree,d.layoutEngine,d.itemRenderer,d.groupRenderer,d.theme,d.selected,void 0,d.dependencies,d.summaryRenderer,d.hierarchyEngine),Ye.draw(P,$e,d.theme,{cursorX:null,snapX:null,markers:Be.current,interaction:null}),P.restore(),V}}),[Oe,Pe,Ye]),h.useEffect(()=>{const o={captureToCanvas({timeStart:u,timeEnd:v,scale:b,sidebarWidth:d}){var be;const y=A.current,w=28,I=w*3,Y=y.groups.map(j=>y.layoutEngine.getGroupHeight(j.id)),_=[0];for(let j=0;j<Y.length;j++)_.push(_[j]+Y[j]);const W=_[Y.length],Z=L.current,re=y.canvasWidth/(Z.visibleTimeEnd-Z.visibleTimeStart),K=v-u,G=Math.max(y.canvasWidth,Math.round(K*re)),ee=d+G,V=I+W,P=document.createElement("canvas");P.width=ee*b,P.height=V*b;const k=P.getContext("2d");k.scale(b,b),k.fillStyle="#FFFFFF",k.fillRect(0,0,ee,V),k.save(),k.beginPath(),k.rect(0,0,d,V),k.clip(),k.fillStyle="#F9FAFB",k.fillRect(0,0,d,I),k.strokeStyle="#E5E7EB",k.lineWidth=1,k.strokeRect(0,0,d,I);for(let j=0;j<y.groups.length;j++){const se=y.groups[j],ne=Y[j],Q=I+_[j],oe=(be=y.rowStyle)==null?void 0:be.call(y,se);k.fillStyle=(oe==null?void 0:oe.backgroundColor)??(j%2===0?"#FFFFFF":"#F7F7F7"),k.fillRect(0,Q,d,ne),k.strokeStyle="#E5E5E5",k.lineWidth=.5,k.beginPath(),k.moveTo(0,Q+ne),k.lineTo(d,Q+ne),k.stroke();const le=se.type??"";let He=8,fe="400",Re=11;le==="project"?(fe="700",Re=12):le==="control_area_group"?fe="600":le==="control_area"&&(He=24),k.fillStyle="#374151",k.font=`${fe} ${Re}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,k.textBaseline="middle";const Xi=typeof se.title=="string"?se.title:String(se.title);k.fillText(Xi,He,Q+ne/2,d-He-8)}k.strokeStyle="#E5E7EB",k.lineWidth=1,k.beginPath(),k.moveTo(d,0),k.lineTo(d,V),k.stroke(),k.restore(),k.save(),k.beginPath(),k.rect(d,0,G,I),k.clip();const $e=v-u,N=[{unit:"year",row:0},{unit:"month",row:1},{unit:"week",row:2}];for(const{unit:j,row:se}of N){const ne=se*w;k.fillStyle="#F9FAFB",k.fillRect(d,ne,G,w);let Q=ue(u,y.timezone).startOf(j);const oe=ue(v,y.timezone).add(1,j);for(;Q.isBefore(oe);){const le=Q.add(1,j),He=d+(Q.valueOf()-u)/$e*G,fe=(le.valueOf()-Q.valueOf())/$e*G;k.strokeStyle="#E5E7EB",k.lineWidth=.5,k.strokeRect(He,ne,fe,w);let Re;j==="year"?Re=Q.format("YYYY"):j==="month"?Re=Q.format("MM"):Re=`${Q.week()}`,k.fillStyle="#6c737f",k.font=j==="year"?'600 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif':'400 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',k.textBaseline="middle",k.textAlign="center",fe>20&&k.fillText(Re,He+fe/2,ne+w/2),Q=le}}k.textAlign="start",k.restore(),k.save(),k.beginPath(),k.rect(d,I,G,W),k.clip(),k.translate(d,I);const ve=new vt({visibleTimeStart:u,visibleTimeEnd:v,canvasWidth:G,canvasHeight:W,sidebarWidth:0,lineHeight:y.lineHeight,groupCount:y.groups.length,buffer:1,scrollTop:0,groupHeights:Y});return Oe.draw(k,ve,y.groups,y.theme,y.dayStyle,y.rowStyle,y.highlights,y.timezone),Pe.draw(k,ve,y.groups,y.items,y.intervalTree,y.layoutEngine,y.itemRenderer,y.groupRenderer,y.theme,y.selected,void 0,y.dependencies,y.summaryRenderer,y.hierarchyEngine),Ye.draw(k,ve,y.theme,{cursorX:null,markers:Be.current}),k.restore(),P}};Ze==null||Ze(o)},[Ze,Oe,Pe,Ye]);const Fi={position:"relative",width:Me,height:de,overflow:"hidden",cursor:"default"},pt={position:"absolute",top:0,left:0};return U.jsxs("div",{ref:Ot,style:{display:"flex",flexDirection:"column",width:"100%",position:"relative"},children:[vi?U.jsxs("div",{style:{position:"absolute",top:0,left:0,zIndex:9999,padding:"2px 6px",fontSize:10,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1.4,color:"#fff",background:"rgba(17, 24, 39, 0.78)",borderBottomRightRadius:4,pointerEvents:"none",userSelect:"none"},children:["v","0.10.3"," · ","13:05:43"]}):null,$i,U.jsxs("div",{ref:Pt,style:{display:"flex",overflow:"hidden",maxHeight:Fe??void 0},children:[U.jsx(Qt,{groups:n,width:a,lineHeight:l,groupHeights:Ee,scrollTop:xt,canvasHeight:de,theme:pe,groupRenderer:B,onScroll:o=>{L.current.update({scrollTop:o}),O.markDirty("grid"),O.markDirty("items"),O.markDirty("overlay"),Qe(o)}}),U.jsxs("div",{ref:Xe,style:Fi,onPointerMove:Ri,onPointerDown:Di,onPointerUp:Ii,onDoubleClick:Oi,onContextMenu:Pi,onPointerLeave:Yi,children:[U.jsx("canvas",{ref:Rt,style:{...pt,zIndex:0}}),U.jsx("canvas",{ref:Dt,style:{...pt,zIndex:1}}),U.jsx("canvas",{ref:It,style:{...pt,zIndex:2}})]}),ot&&wt?U.jsx(Qt,{groups:n,width:ot,lineHeight:l,groupHeights:Ee,scrollTop:xt,canvasHeight:de,theme:pe,groupRenderer:wt,onScroll:o=>{L.current.update({scrollTop:o}),O.markDirty("grid"),O.markDirty("items"),O.markDirty("overlay"),Qe(o)}}):null]})]})}));function di({children:i,theme:e,className:t,classNames:n,style:r,visibleTimeStart:c,visibleTimeEnd:s,canvasWidth:a,sidebarWidth:l=0,onZoomToInterval:m,timezone:S}){const g=h.Children.map(i,f=>{var T;if(!h.isValidElement(f))return f;if(((T=f.type)==null?void 0:T.displayName)==="DateHeader"){const p=f.props,R=h.cloneElement(f,{visibleTimeStart:p.visibleTimeStart??c,visibleTimeEnd:p.visibleTimeEnd??s,canvasWidth:p.canvasWidth??a,theme:p.theme??e,onZoomToInterval:p.onIntervalClick??p.onZoomToInterval??m,timezone:p.timezone??S});return U.jsxs("div",{style:{display:"flex"},children:[U.jsx("div",{style:{width:l,flexShrink:0}}),U.jsx("div",{style:{flex:1,overflow:"hidden"},children:R})]})}return f});return U.jsx("div",{className:t,style:{position:"sticky",top:0,zIndex:20,display:"flex",flexDirection:"column",backgroundColor:(e==null?void 0:e.header.bg)??"#F9FAFB",borderTop:`1px solid ${(e==null?void 0:e.header.border)??"#E5E7EB"}`,borderBottom:`1px solid ${(e==null?void 0:e.header.border)??"#E5E7EB"}`,...r},children:g})}di.displayName="TimelineHeaders";var fi={exports:{}};(function(i,e){(function(t,n){i.exports=n()})(Ge,function(){var t="month",n="quarter";return function(r,c){var s=c.prototype;s.quarter=function(m){return this.$utils().u(m)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(m-1))};var a=s.add;s.add=function(m,S){return m=Number(m),this.$utils().p(S)===n?this.add(3*m,t):a.bind(this)(m,S)};var l=s.startOf;s.startOf=function(m,S){var g=this.$utils(),f=!!g.u(S)||S;if(g.p(m)===n){var M=this.quarter()-1;return f?this.month(3*M).startOf(t).startOf("day"):this.month(3*M+2).endOf(t).endOf("day")}return l.bind(this)(m,S)}}})})(fi);var ln=fi.exports;const un=Ue(ln);var hi={exports:{}};(function(i,e){(function(t,n){i.exports=n()})(Ge,function(){var t="week",n="year";return function(r,c,s){var a=c.prototype;a.week=function(l){if(l===void 0&&(l=null),l!==null)return this.add(7*(l-this.week()),"day");var m=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var S=s(this).startOf(n).add(1,n).date(m),g=s(this).endOf(t);if(S.isBefore(g))return 1}var f=s(this).startOf(n).date(m).startOf(t).subtract(1,"millisecond"),M=this.diff(f,t,!0);return M<0?s(this).startOf("week").week():Math.ceil(M)},a.weeks=function(l){return l===void 0&&(l=null),this.week(l)}}})})(hi);var cn=hi.exports;const dn=Ue(cn);he.extend(dn);he.extend(un);const fn={year:30,quarter:30,month:30,week:20,day:15,hour:30};function mi({unit:i,visibleTimeStart:e=0,visibleTimeEnd:t=0,canvasWidth:n=0,theme:r,height:c=28,className:s,labelFormat:a,onIntervalClick:l,minCellWidth:m,onZoomToInterval:S,timezone:g}){const f=h.useMemo(()=>{if(!e||!t||!n)return[];const T=t-e,p=i,R=m??fn[i];if(R>0){const H=ue(e,g).startOf(i);if((H.add(1,p).valueOf()-H.valueOf())/T*n<R)return[]}const $=[];let F=ue(e,g).startOf(i).subtract(1,p);const C=ue(t,g).add(2,p).valueOf();for(;F.valueOf()<C;){const H=F.add(1,p),E=F.valueOf(),X=H.valueOf(),B=(E-e)/T*n,D=(X-E)/T*n,z=hn(F,H,i,a);$.push({start:E,end:X,label:z,left:B,width:D}),F=H}return $},[e,t,n,i,a,m,g]),M=h.useCallback((T,p)=>{l?l(T,p):S&&S(T,p)},[l,S]);return f.length===0?null:U.jsx("div",{style:{display:"flex",position:"relative",height:c,overflow:"hidden"},children:f.map(T=>U.jsx("div",{className:s,onClick:()=>M(T.start,T.end),style:{position:"absolute",left:T.left,width:T.width,height:"100%",display:"flex",alignItems:"center",justifyContent:"center",borderRight:`1px solid ${(r==null?void 0:r.header.border)??"#E5E7EB"}`,borderBottom:`1px solid ${(r==null?void 0:r.header.border)??"#E5E7EB"}`,fontSize:12,color:(r==null?void 0:r.header.text)??"#6c737f",backgroundColor:(r==null?void 0:r.header.bg)??"#F9FAFB",overflow:"hidden",whiteSpace:"nowrap",cursor:"pointer",userSelect:"none",padding:"0 4px",boxSizing:"border-box"},children:U.jsx("span",{children:T.label})},T.start))})}mi.displayName="DateHeader";function hn(i,e,t,n,r){return typeof n=="function"?n(i.toDate(),e.toDate(),t):typeof n=="string"?i.format(n):mn(i,t)}function mn(i,e){switch(e){case"year":return i.format("YYYY");case"quarter":return`Q${i.quarter()} ${i.format("YYYY")}`;case"month":return i.format("MM");case"week":return`${i.week()}`;case"day":return i.format("D");case"hour":return i.format("HH:mm")}}function gi({width:i,children:e,style:t}){const n=()=>({style:{width:i,...t}});return e?U.jsx(U.Fragment,{children:e({getRootProps:n})}):U.jsx("div",{style:{width:i}})}gi.displayName="SidebarHeader";function pi({children:i}){return U.jsx(U.Fragment,{children:i})}pi.displayName="CustomHeader";exports.CanvasTimeline=an;exports.CustomHeader=pi;exports.CustomMarker=ci;exports.DEFAULT_THEME=ye;exports.DateHeader=mi;exports.HierarchyEngine=ii;exports.SidebarHeader=gi;exports.TimelineHeaders=di;exports.TodayMarker=ui;
|
|
2
2
|
//# sourceMappingURL=canvas-timeline.cjs.js.map
|