@fullcalendar/timeline 6.0.0 → 6.0.2

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.
package/LICENSE.md CHANGED
@@ -2,7 +2,7 @@
2
2
  For complete licensing information, visit:
3
3
  https://fullcalendar.io/license
4
4
 
5
- FullCalendar Scheduler is tri-licensed, meaning you must choose
5
+ FullCalendar Premium is tri-licensed, meaning you must choose
6
6
  one of three licenses to use. Here is a summary of those licenses:
7
7
 
8
8
  - Commercial License
package/index.cjs CHANGED
@@ -18,7 +18,7 @@ internal_cjs.injectStyles(css_248z);
18
18
 
19
19
  var index = index_cjs.createPlugin({
20
20
  name: '@fullcalendar/timeline',
21
- premiumReleaseDate: '2022-12-14',
21
+ premiumReleaseDate: '2022-12-27',
22
22
  deps: [premiumCommonPlugin__default["default"]],
23
23
  initialView: 'timelineDay',
24
24
  views: {
package/index.global.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /*!
2
- FullCalendar Timeline Plugin v6.0.0
2
+ FullCalendar Timeline Plugin v6.0.2
3
3
  Docs & License: https://fullcalendar.io/docs/timeline-view-no-resources
4
4
  (c) 2022 Adam Shaw
5
5
  */
6
- FullCalendar.Timeline = (function (exports, internal$1, core, premiumCommonPlugin, preact, internal$2) {
6
+ FullCalendar.Timeline = (function (exports, core, premiumCommonPlugin, internal$1, preact, internal$2) {
7
7
  'use strict';
8
8
 
9
9
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
@@ -1250,7 +1250,7 @@ FullCalendar.Timeline = (function (exports, internal$1, core, premiumCommonPlugi
1250
1250
 
1251
1251
  var plugin = core.createPlugin({
1252
1252
  name: '@fullcalendar/timeline',
1253
- premiumReleaseDate: '2022-12-14',
1253
+ premiumReleaseDate: '2022-12-27',
1254
1254
  deps: [premiumCommonPlugin__default["default"]],
1255
1255
  initialView: 'timelineDay',
1256
1256
  views: {
@@ -1294,7 +1294,7 @@ FullCalendar.Timeline = (function (exports, internal$1, core, premiumCommonPlugi
1294
1294
  TimelineHeaderRows: TimelineHeaderRows
1295
1295
  };
1296
1296
 
1297
- internal$1.globalPlugins.push(plugin);
1297
+ core.globalPlugins.push(plugin);
1298
1298
 
1299
1299
  exports.Internal = internal;
1300
1300
  exports["default"] = plugin;
@@ -1303,4 +1303,4 @@ FullCalendar.Timeline = (function (exports, internal$1, core, premiumCommonPlugi
1303
1303
 
1304
1304
  return exports;
1305
1305
 
1306
- })({}, FullCalendar.Internal, FullCalendar, FullCalendar.PremiumCommon, FullCalendar.Preact, FullCalendar.ScrollGrid.Internal);
1306
+ })({}, FullCalendar, FullCalendar.PremiumCommon, FullCalendar.Internal, FullCalendar.Preact, FullCalendar.ScrollGrid.Internal);
@@ -1,6 +1,6 @@
1
1
  /*!
2
- FullCalendar Timeline Plugin v6.0.0
2
+ FullCalendar Timeline Plugin v6.0.2
3
3
  Docs & License: https://fullcalendar.io/docs/timeline-view-no-resources
4
4
  (c) 2022 Adam Shaw
5
5
  */
6
- FullCalendar.Timeline=function(e,t,n,i,o,r){"use strict";function l(e){return e&&e.__esModule?e:{default:e}}var s=l(i);t.config.MAX_TIMELINE_SLOTS=1e3;const a=[{years:1},{months:1},{days:1},{hours:1},{minutes:30},{minutes:15},{minutes:10},{minutes:5},{minutes:1},{seconds:30},{seconds:15},{seconds:10},{seconds:5},{seconds:1},{milliseconds:500},{milliseconds:100},{milliseconds:10},{milliseconds:1}];function d(e,n,i,o){let r={labelInterval:i.slotLabelInterval,slotDuration:i.slotDuration};!function(e,n,i){const{currentRange:o}=n;if(e.labelInterval){i.countDurationsBetween(o.start,o.end,e.labelInterval)>t.config.MAX_TIMELINE_SLOTS&&(console.warn("slotLabelInterval results in too many cells"),e.labelInterval=null)}if(e.slotDuration){i.countDurationsBetween(o.start,o.end,e.slotDuration)>t.config.MAX_TIMELINE_SLOTS&&(console.warn("slotDuration results in too many cells"),e.slotDuration=null)}if(e.labelInterval&&e.slotDuration){const n=t.wholeDivideDurations(e.labelInterval,e.slotDuration);(null===n||n<1)&&(console.warn("slotLabelInterval must be a multiple of slotDuration"),e.slotDuration=null)}}(r,e,n),u(r,e,n),function(e,n,i){const{currentRange:o}=n;let{slotDuration:r}=e;if(!r){const l=u(e,n,i);for(let e of a){const n=t.createDuration(e),i=t.wholeDivideDurations(l,n);if(null!==i&&i>1&&i<=6){r=n;break}}if(r){i.countDurationsBetween(o.start,o.end,r)>200&&(r=null)}r||(r=l),e.slotDuration=r}}(r,e,n);let l=i.slotLabelFormat,s=Array.isArray(l)?l:null!=l?[l]:function(e,n,i,o){let r,l;const{labelInterval:s}=e;let a=t.greatestDurationDenominator(s).unit;const d=o.weekNumbers;let c=r=l=null;"week"!==a||d||(a="day");switch(a){case"year":c={year:"numeric"};break;case"month":h("years",n,i)>1&&(c={year:"numeric"}),r={month:"short"};break;case"week":h("years",n,i)>1&&(c={year:"numeric"}),r={week:"narrow"};break;case"day":h("years",n,i)>1?c={year:"numeric",month:"long"}:h("months",n,i)>1&&(c={month:"long"}),d&&(r={week:"short"}),l={weekday:"narrow",day:"numeric"};break;case"hour":d&&(c={week:"short"}),h("days",n,i)>1&&(r={weekday:"short",day:"numeric",month:"numeric",omitCommas:!0}),l={hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"};break;case"minute":t.asRoughMinutes(s)/60>=6?(c={hour:"numeric",meridiem:"short"},r=e=>":"+t.padStart(e.date.minute,2)):c={hour:"numeric",minute:"numeric",meridiem:"short"};break;case"second":t.asRoughSeconds(s)/60>=6?(c={hour:"numeric",minute:"2-digit",meridiem:"lowercase"},r=e=>":"+t.padStart(e.date.second,2)):c={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"};break;case"millisecond":c={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"},r=e=>"."+t.padStart(e.millisecond,3)}return[].concat(c||[],r||[],l||[])}(r,e,n,i);r.headerFormats=s.map(e=>t.createFormatter(e)),r.isTimeScale=Boolean(r.slotDuration.milliseconds);let d=null;if(!r.isTimeScale){const e=t.greatestDurationDenominator(r.slotDuration).unit;/year|month|week/.test(e)&&(d=e)}r.largeUnit=d,r.emphasizeWeeks=1===t.asCleanDays(r.slotDuration)&&h("weeks",e,n)>=2&&!i.businessHours;let g,p,v=i.snapDuration;v&&(g=t.createDuration(v),p=t.wholeDivideDurations(r.slotDuration,g)),null==p&&(g=r.slotDuration,p=1),r.snapDuration=g,r.snapsPerSlot=p;let D=t.asRoughMs(e.slotMaxTime)-t.asRoughMs(e.slotMinTime),S=c(e.renderRange.start,r,n),b=c(e.renderRange.end,r,n);r.isTimeScale&&(S=n.add(S,e.slotMinTime),b=n.add(t.addDays(b,-1),e.slotMaxTime)),r.timeWindowMs=D,r.normalizedRange={start:S,end:b};let C=[],R=S;for(;R<b;)m(R,r,e,o)&&C.push(R),R=n.add(R,r.slotDuration);r.slotDates=C;let y=-1,w=0;const E=[],x=[];for(R=S;R<b;)m(R,r,e,o)?(y+=1,E.push(y),x.push(w)):E.push(y+.5),R=n.add(R,r.snapDuration),w+=1;return r.snapDiffToIndex=E,r.snapIndexToDiff=x,r.snapCnt=y+1,r.slotCnt=r.snapCnt/r.snapsPerSlot,r.isWeekStarts=function(e,t){let{slotDates:n,emphasizeWeeks:i}=e,o=null,r=[];for(let e of n){let n=t.computeWeekNumber(e),l=i&&null!==o&&o!==n;o=n,r.push(l)}return r}(r,n),r.cellRows=function(e,n){let i=e.slotDates,o=e.headerFormats,r=o.map(()=>[]),l=t.asCleanDays(e.slotDuration),s=7===l?"week":1===l?"day":null,a=o.map(e=>e.getLargestUnit?e.getLargestUnit():null);for(let l=0;l<i.length;l+=1){let d=i[l],c=e.isWeekStarts[l];for(let i=0;i<o.length;i+=1){let l=o[i],m=r[i],u=m[m.length-1],h=i===o.length-1,g=o.length>1&&!h,p=null,v=a[i]||(h?s:null);if(g){let e=n.format(d,l);u&&u.text===e?u.colspan+=1:p=f(d,e,v)}else if(!u||t.isInt(n.countDurationsBetween(e.normalizedRange.start,d,e.labelInterval))){let e=n.format(d,l);p=f(d,e,v)}else u.colspan+=1;p&&(p.weekStart=c,m.push(p))}}return r}(r,n),r.slotsPerLabel=t.wholeDivideDurations(r.labelInterval,r.slotDuration),r}function c(e,n,i){let o=e;return n.isTimeScale||(o=t.startOfDay(o),n.largeUnit&&(o=i.startOf(o,n.largeUnit))),o}function m(e,n,i,o){if(o.isHiddenDay(e))return!1;if(n.isTimeScale){let o=t.startOfDay(e),r=e.valueOf()-o.valueOf()-t.asRoughMs(i.slotMinTime);return r=(r%864e5+864e5)%864e5,r<n.timeWindowMs}return!0}function u(e,n,i){const{currentRange:o}=n;let{labelInterval:r}=e;if(!r){let n;if(e.slotDuration){for(n of a){const i=t.createDuration(n),o=t.wholeDivideDurations(i,e.slotDuration);if(null!==o&&o<=6){r=i;break}}r||(r=e.slotDuration)}else for(n of a){r=t.createDuration(n);if(i.countDurationsBetween(o.start,o.end,r)>=18)break}e.labelInterval=r}return r}function h(e,n,i){let o=n.currentRange,r=null;return"years"===e?r=i.diffWholeYears(o.start,o.end):"months"===e||"weeks"===e?r=i.diffWholeMonths(o.start,o.end):"days"===e&&(r=t.diffWholeDays(o.start,o.end)),r||0}function f(e,t,n){return{date:e,text:t,rowUnit:n,colspan:1,isWeekStart:!1}}class g extends t.BaseComponent{constructor(){super(...arguments),this.refineRenderProps=t.memoizeObjArg(D),this.buildCellNavLinkAttrs=t.memoize(p)}render(){let{props:e,context:n}=this,{dateEnv:i,options:r}=n,{cell:l,dateProfile:s,tDateProfile:a}=e,d=t.getDateMeta(l.date,e.todayRange,e.nowDate,s),c=this.refineRenderProps({level:e.rowLevel,dateMarker:l.date,text:l.text,dateEnv:n.dateEnv,viewApi:n.viewApi});return o.createElement(t.ContentContainer,{elTag:"th",elClasses:["fc-timeline-slot","fc-timeline-slot-label",l.isWeekStart&&"fc-timeline-slot-em",..."time"===l.rowUnit?t.getSlotClassNames(d,n.theme):t.getDayClassNames(d,n.theme)],elAttrs:{colSpan:l.colspan,"data-date":i.formatIso(l.date,{omitTime:!a.isTimeScale,omitTimeZoneOffset:!0})},renderProps:c,generatorName:"slotLabelContent",generator:r.slotLabelContent||v,classNameGenerator:r.slotLabelClassNames,didMount:r.slotLabelDidMount,willUnmount:r.slotLabelWillUnmount},t=>o.createElement("div",{className:"fc-timeline-slot-frame",style:{height:e.rowInnerHeight}},o.createElement(t,{elTag:"a",elClasses:["fc-timeline-slot-cushion","fc-scrollgrid-sync-inner",e.isSticky&&"fc-sticky"],elAttrs:this.buildCellNavLinkAttrs(n,l.date,l.rowUnit)})))}}function p(e,n,i){return i&&"time"!==i?t.buildNavLinkAttrs(e,n,i):{}}function v(e){return e.text}function D(e){return{level:e.level,date:e.dateEnv.toDate(e.dateMarker),view:e.viewApi,text:e.text}}class S extends t.BaseComponent{render(){let{dateProfile:e,tDateProfile:t,rowInnerHeights:n,todayRange:i,nowDate:r}=this.props,{cellRows:l}=t;return o.createElement(o.Fragment,null,l.map((s,a)=>{let d=a===l.length-1,c=["fc-timeline-header-row",t.isTimeScale&&d?"fc-timeline-header-row-chrono":""];return o.createElement("tr",{key:a,className:c.join(" ")},s.map(l=>o.createElement(g,{key:l.date.toISOString(),cell:l,rowLevel:a,dateProfile:e,tDateProfile:t,todayRange:i,nowDate:r,rowInnerHeight:n&&n[a],isSticky:!d})))}))}}class b{constructor(e,n,i,o,r,l){this.slatRootEl=e,this.dateProfile=i,this.tDateProfile=o,this.dateEnv=r,this.isRtl=l,this.outerCoordCache=new t.PositionCache(e,n,!0,!1),this.innerCoordCache=new t.PositionCache(e,t.findDirectChildren(n,"div"),!0,!1)}isDateInRange(e){return t.rangeContainsMarker(this.dateProfile.currentRange,e)}dateToCoord(e){let{tDateProfile:t}=this,n=this.computeDateSnapCoverage(e)/t.snapsPerSlot,i=Math.floor(n);i=Math.min(i,t.slotCnt-1);let o=n-i,{innerCoordCache:r,outerCoordCache:l}=this;return this.isRtl?l.originClientRect.width-(l.rights[i]-r.getWidth(i)*o):l.lefts[i]+r.getWidth(i)*o}rangeToCoords(e){return{start:this.dateToCoord(e.start),end:this.dateToCoord(e.end)}}durationToCoord(e){let{dateProfile:n,tDateProfile:i,dateEnv:o,isRtl:r}=this,l=0;if(n){let s=o.add(n.activeRange.start,e);i.isTimeScale||(s=t.startOfDay(s)),l=this.dateToCoord(s),!r&&l&&(l+=1)}return l}coordFromLeft(e){return this.isRtl?this.outerCoordCache.originClientRect.width-e:e}computeDateSnapCoverage(e){return C(e,this.tDateProfile,this.dateEnv)}}function C(e,n,i){let o=i.countDurationsBetween(n.normalizedRange.start,e,n.snapDuration);if(o<0)return 0;if(o>=n.snapDiffToIndex.length)return n.snapCnt;let r=Math.floor(o),l=n.snapDiffToIndex[r];return t.isInt(l)?l+=o-r:l=Math.ceil(l),l}function R(e,t){return null===e?{left:"",right:""}:t?{right:e,left:""}:{left:e,right:""}}function y(e,t){return e?t?{right:e.start,left:-e.end}:{left:e.start,right:-e.end}:{left:"",right:""}}class w extends t.BaseComponent{constructor(){super(...arguments),this.rootElRef=o.createRef()}render(){let{props:e,context:n}=this,i=t.greatestDurationDenominator(e.tDateProfile.slotDuration).unit,r=e.slatCoords&&e.slatCoords.dateProfile===e.dateProfile?e.slatCoords:null;return o.createElement(t.NowTimer,{unit:i},(i,l)=>o.createElement("div",{className:"fc-timeline-header",ref:this.rootElRef},o.createElement("table",{"aria-hidden":!0,className:"fc-scrollgrid-sync-table",style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,o.createElement("tbody",null,o.createElement(S,{dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:i,todayRange:l,rowInnerHeights:e.rowInnerHeights}))),n.options.nowIndicator&&o.createElement("div",{className:"fc-timeline-now-indicator-container"},r&&r.isDateInRange(i)&&o.createElement(t.NowIndicatorContainer,{elClasses:["fc-timeline-now-indicator-arrow"],elStyle:R(r.dateToCoord(i),n.isRtl),isAxis:!0,date:i}))))}componentDidMount(){this.updateSize()}componentDidUpdate(){this.updateSize()}updateSize(){this.props.onMaxCushionWidth&&this.props.onMaxCushionWidth(this.computeMaxCushionWidth())}computeMaxCushionWidth(){return Math.max(...t.findElements(this.rootElRef.current,".fc-timeline-header-row:last-child .fc-timeline-slot-cushion").map(e=>e.getBoundingClientRect().width))}}class E extends t.BaseComponent{render(){let{props:e,context:n}=this,{dateEnv:i,options:r,theme:l}=n,{date:s,tDateProfile:a,isEm:d}=e,c=t.getDateMeta(e.date,e.todayRange,e.nowDate,e.dateProfile),m=Object.assign(Object.assign({date:i.toDate(e.date)},c),{view:n.viewApi});return o.createElement(t.ContentContainer,{elTag:"td",elRef:e.elRef,elClasses:["fc-timeline-slot","fc-timeline-slot-lane",d&&"fc-timeline-slot-em",a.isTimeScale?t.isInt(i.countDurationsBetween(a.normalizedRange.start,e.date,a.labelInterval))?"fc-timeline-slot-major":"fc-timeline-slot-minor":"",...e.isDay?t.getDayClassNames(c,l):t.getSlotClassNames(c,l)],elAttrs:{"data-date":i.formatIso(s,{omitTimeZoneOffset:!0,omitTime:!a.isTimeScale})},renderProps:m,generatorName:"slotLaneContent",generator:r.slotLaneContent,classNameGenerator:r.slotLaneClassNames,didMount:r.slotLaneDidMount,willUnmount:r.slotLaneWillUnmount},e=>o.createElement(e,{elTag:"div"}))}}class x extends t.BaseComponent{render(){let{props:e}=this,{tDateProfile:t,cellElRefs:n}=e,{slotDates:i,isWeekStarts:r}=t,l=!t.isTimeScale&&!t.largeUnit;return o.createElement("tbody",null,o.createElement("tr",null,i.map((i,s)=>{let a=i.toISOString();return o.createElement(E,{key:a,elRef:n.createRef(a),date:i,dateProfile:e.dateProfile,tDateProfile:t,nowDate:e.nowDate,todayRange:e.todayRange,isEm:r[s],isDay:l})})))}}class k extends t.BaseComponent{constructor(){super(...arguments),this.rootElRef=o.createRef(),this.cellElRefs=new t.RefMap,this.handleScrollRequest=e=>{let{onScrollLeftRequest:t}=this.props,{coords:n}=this;if(t&&n){if(e.time){t(n.coordFromLeft(n.durationToCoord(e.time)))}return!0}return null}}render(){let{props:e,context:t}=this;return o.createElement("div",{className:"fc-timeline-slots",ref:this.rootElRef},o.createElement("table",{"aria-hidden":!0,className:t.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,o.createElement(x,{cellElRefs:this.cellElRefs,dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:e.nowDate,todayRange:e.todayRange})))}componentDidMount(){this.updateSizing(),this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(e){this.updateSizing(),this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach(),this.props.onCoords&&this.props.onCoords(null)}updateSizing(){let{props:e,context:t}=this;if(null!==e.clientWidth&&this.scrollResponder){this.rootElRef.current.offsetWidth&&(this.coords=new b(this.rootElRef.current,(n=this.cellElRefs.currentMap,e.tDateProfile.slotDates.map(e=>{let t=e.toISOString();return n[t]})),e.dateProfile,e.tDateProfile,t.dateEnv,t.isRtl),e.onCoords&&e.onCoords(this.coords),this.scrollResponder.update(!1))}var n}positionToHit(e){let{outerCoordCache:n}=this.coords,{dateEnv:i,isRtl:o}=this.context,{tDateProfile:r}=this.props,l=n.leftToIndex(e);if(null!=l){let s=n.getWidth(l),a=o?(n.rights[l]-e)/s:(e-n.lefts[l])/s,d=Math.floor(a*r.snapsPerSlot),c=i.add(r.slotDates[l],t.multiplyDuration(r.snapDuration,d));return{dateSpan:{range:{start:c,end:i.add(c,r.snapDuration)},allDay:!this.props.tDateProfile.isTimeScale},dayEl:this.cellElRefs.currentMap[l],left:n.lefts[l],right:n.rights[l]}}return null}}function P(e,t,n){let i=[];if(n)for(let o of e){let e=n.rangeToCoords(o),r=Math.round(e.start),l=Math.round(e.end);l-r<t&&(l=r+t),i.push({start:r,end:l})}return i}class M extends t.BaseComponent{render(){let{props:e}=this,t=[].concat(e.eventResizeSegs,e.dateSelectionSegs);return e.timelineCoords&&o.createElement("div",{className:"fc-timeline-bg"},this.renderSegs(e.businessHourSegs||[],e.timelineCoords,"non-business"),this.renderSegs(e.bgEventSegs||[],e.timelineCoords,"bg-event"),this.renderSegs(t,e.timelineCoords,"highlight"))}renderSegs(e,n,i){let{todayRange:r,nowDate:l}=this.props,{isRtl:s}=this.context,a=P(e,0,n),d=e.map((e,n)=>{let d=y(a[n],s);return o.createElement("div",{key:t.buildEventRangeKey(e.eventRange),className:"fc-timeline-bg-harness",style:d},"bg-event"===i?o.createElement(t.BgEvent,Object.assign({seg:e},t.getSegMeta(e,r,l))):t.renderFill(i))});return o.createElement(o.Fragment,null,d)}}class T extends t.Slicer{sliceRange(e,n,i,o,r){let l=function(e,n,i){if(!n.isTimeScale&&(e=t.computeVisibleDayRange(e),n.largeUnit)){let t=e;((e={start:i.startOf(e.start,n.largeUnit),end:i.startOf(e.end,n.largeUnit)}).end.valueOf()!==t.end.valueOf()||e.end<=e.start)&&(e={start:e.start,end:i.add(e.end,n.slotDuration)})}return e}(e,o,r),s=[];if(C(l.start,o,r)<C(l.end,o,r)){let e=t.intersectRanges(l,o.normalizedRange);e&&s.push({start:e.start,end:e.end,isStart:e.start.valueOf()===l.start.valueOf()&&m(e.start,o,n,i),isEnd:e.end.valueOf()===l.end.valueOf()&&m(t.addMs(e.end,-1),o,n,i)})}return s}}const I=t.createFormatter({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});class W extends t.BaseComponent{render(){let{props:e}=this;return o.createElement(t.StandardEvent,Object.assign({},e,{elClasses:["fc-timeline-event","fc-h-event"],defaultTimeFormat:I,defaultDisplayEventTime:!e.isTimeScale}))}}class z extends t.BaseComponent{render(){let{props:e,context:n}=this,{hiddenSegs:i,placement:r,resourceId:l}=e,{top:s,hcoords:a}=r,d=a&&null!==s,c=y(a,n.isRtl),m=l?{resourceId:l}:{};return o.createElement(t.MoreLinkContainer,{elRef:e.elRef,elClasses:["fc-timeline-more-link"],elStyle:Object.assign({visibility:d?"":"hidden",top:s||0},c),allDayDate:null,moreCnt:i.length,allSegs:i,hiddenSegs:i,dateProfile:e.dateProfile,todayRange:e.todayRange,extraDateSpan:m,popoverContent:()=>o.createElement(o.Fragment,null,i.map(n=>{let i=n.eventRange.instance.instanceId;return o.createElement("div",{key:i,style:{visibility:e.isForcedInvisible[i]?"hidden":""}},o.createElement(W,Object.assign({isTimeScale:e.isTimeScale,seg:n,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:i===e.eventSelection},t.getSegMeta(n,e.todayRange,e.nowDate))))}))},e=>o.createElement(e,{elTag:"div",elClasses:["fc-timeline-more-link-inner","fc-sticky"]}))}}class L extends t.BaseComponent{constructor(){super(...arguments),this.slicer=new T,this.sortEventSegs=t.memoize(t.sortEventSegs),this.harnessElRefs=new t.RefMap,this.moreElRefs=new t.RefMap,this.innerElRef=o.createRef(),this.state={eventInstanceHeights:{},moreLinkHeights:{}},this.handleResize=e=>{e&&this.updateSize()}}render(){let{props:e,state:n,context:i}=this,{options:r}=i,{dateProfile:l,tDateProfile:s}=e,a=this.slicer.sliceProps(e,l,s.isTimeScale?null:e.nextDayThreshold,i,l,i.dateProfileGenerator,s,i.dateEnv),d=(a.eventDrag?a.eventDrag.segs:null)||(a.eventResize?a.eventResize.segs:null)||[],c=this.sortEventSegs(a.fgEventSegs,r.eventOrder),m=P(c,r.eventMinWidth,e.timelineCoords),[u,h]=function(e,n,i,o,r,l){let s=[],a=[];for(let t=0;t<e.length;t+=1){let o=e[t],r=i[o.eventRange.instance.instanceId],l=n[t];r&&l?s.push({index:t,span:l,thickness:r}):a.push({seg:o,hcoords:l,top:null})}let d=new t.SegHierarchy;null!=r&&(d.strictOrder=r),null!=l&&(d.maxStackCnt=l);let c=d.addSegs(s),m=c.map(t=>({seg:e[t.index],hcoords:t.span,top:null})),u=t.groupIntersectingEntries(c),h=[],f=[];const g=t=>e[t.index];for(let n=0;n<u.length;n+=1){let i=u[n],r=i.entries.map(g),l=o[t.buildIsoString(t.computeEarliestSegStart(r))];null!=l?h.push({index:e.length+n,thickness:l,span:i.span}):f.push({seg:r,hcoords:i.span,top:null})}d.maxStackCnt=-1,d.addSegs(h);let p=d.toRects(),v=[],D=0;for(let t of p){let n=t.index;v.push({seg:n<e.length?e[n]:u[n-e.length].entries.map(g),hcoords:t.span,top:t.levelCoord}),D=Math.max(D,t.levelCoord+t.thickness)}return[v.concat(a,m,f),D]}(c,m,n.eventInstanceHeights,n.moreLinkHeights,r.eventOrderStrict,r.eventMaxStack),f=(a.eventDrag?a.eventDrag.affectedInstances:null)||(a.eventResize?a.eventResize.affectedInstances:null)||{};return o.createElement(o.Fragment,null,o.createElement(M,{businessHourSegs:a.businessHourSegs,bgEventSegs:a.bgEventSegs,timelineCoords:e.timelineCoords,eventResizeSegs:a.eventResize?a.eventResize.segs:[],dateSelectionSegs:a.dateSelectionSegs,nowDate:e.nowDate,todayRange:e.todayRange}),o.createElement("div",{className:"fc-timeline-events fc-scrollgrid-sync-inner",ref:this.innerElRef,style:{height:h}},this.renderFgSegs(u,f,!1,!1,!1),this.renderFgSegs(function(e,t,n){if(!e.length||!t)return[];let i=function(e){let t={};for(let n of e){let{seg:e}=n;Array.isArray(e)||(t[e.eventRange.instance.instanceId]=n.top)}return t}(n);return e.map(e=>({seg:e,hcoords:t.rangeToCoords(e),top:i[e.eventRange.instance.instanceId]}))}(d,e.timelineCoords,u),{},Boolean(a.eventDrag),Boolean(a.eventResize),!1)))}componentDidMount(){this.updateSize(),this.context.addResizeHandler(this.handleResize)}componentDidUpdate(e,t){e.eventStore===this.props.eventStore&&e.timelineCoords===this.props.timelineCoords&&t.moreLinkHeights===this.state.moreLinkHeights||this.updateSize()}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateSize(){let{props:e}=this,{timelineCoords:n}=e;const i=this.innerElRef.current;e.onHeightChange&&e.onHeightChange(i,!1),n&&this.setState({eventInstanceHeights:t.mapHash(this.harnessElRefs.currentMap,e=>Math.round(e.getBoundingClientRect().height)),moreLinkHeights:t.mapHash(this.moreElRefs.currentMap,e=>Math.round(e.getBoundingClientRect().height))},()=>{e.onHeightChange&&e.onHeightChange(i,!0)}),e.syncParentMinHeight&&(i.parentElement.style.minHeight=i.style.height)}renderFgSegs(e,n,i,r,l){let{harnessElRefs:s,moreElRefs:a,props:d,context:c}=this,m=i||r||l;return o.createElement(o.Fragment,null,e.map(e=>{let{seg:u,hcoords:h,top:f}=e;if(Array.isArray(u)){let i=t.buildIsoString(t.computeEarliestSegStart(u));return o.createElement(z,{key:"m:"+i,elRef:a.createRef(i),hiddenSegs:u,placement:e,dateProfile:d.dateProfile,nowDate:d.nowDate,todayRange:d.todayRange,isTimeScale:d.tDateProfile.isTimeScale,eventSelection:d.eventSelection,resourceId:d.resourceId,isForcedInvisible:n})}let g=u.eventRange.instance.instanceId,p=m||Boolean(!n[g]&&h&&null!==f),v=y(h,c.isRtl);return o.createElement("div",{key:"e:"+g,ref:m?null:s.createRef(g),className:"fc-timeline-event-harness",style:Object.assign({visibility:p?"":"hidden",top:f||0},v)},o.createElement(W,Object.assign({isTimeScale:d.tDateProfile.isTimeScale,seg:u,isDragging:i,isResizing:r,isDateSelecting:l,isSelected:g===d.eventSelection},t.getSegMeta(u,d.todayRange,d.nowDate))))}))}}L.addStateEquality({eventInstanceHeights:t.isPropsEqual,moreLinkHeights:t.isPropsEqual});class H extends t.DateComponent{constructor(){super(...arguments),this.slatsRef=o.createRef(),this.state={coords:null},this.handeEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)},this.handleCoords=e=>{this.setState({coords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)}}render(){let{props:e,state:n,context:i}=this,{options:r}=i,{dateProfile:l,tDateProfile:s}=e,a=t.greatestDurationDenominator(s.slotDuration).unit;return o.createElement("div",{className:"fc-timeline-body",ref:this.handeEl,style:{minWidth:e.tableMinWidth,height:e.clientHeight,width:e.clientWidth}},o.createElement(t.NowTimer,{unit:a},(a,d)=>o.createElement(o.Fragment,null,o.createElement(k,{ref:this.slatsRef,dateProfile:l,tDateProfile:s,nowDate:a,todayRange:d,clientWidth:e.clientWidth,tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,onCoords:this.handleCoords,onScrollLeftRequest:e.onScrollLeftRequest}),o.createElement(L,{dateProfile:l,tDateProfile:e.tDateProfile,nowDate:a,todayRange:d,nextDayThreshold:r.nextDayThreshold,businessHours:e.businessHours,eventStore:e.eventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,timelineCoords:n.coords,syncParentMinHeight:!0}),r.nowIndicator&&n.coords&&n.coords.isDateInRange(a)&&o.createElement("div",{className:"fc-timeline-now-indicator-container"},o.createElement(t.NowIndicatorContainer,{elClasses:["fc-timeline-now-indicator-line"],elStyle:R(n.coords.dateToCoord(a),i.isRtl),isAxis:!1,date:a})))))}queryHit(e,t,n,i){let o=this.slatsRef.current.positionToHit(e);return o?{dateProfile:this.props.dateProfile,dateSpan:o.dateSpan,rect:{left:o.left,right:o.right,top:0,bottom:i},dayEl:o.dayEl,layer:0}:null}}class N extends t.DateComponent{constructor(){super(...arguments),this.buildTimelineDateProfile=t.memoize(d),this.scrollGridRef=o.createRef(),this.state={slatCoords:null,slotCushionMaxWidth:null},this.handleSlatCoords=e=>{this.setState({slatCoords:e})},this.handleScrollLeftRequest=e=>{this.scrollGridRef.current.forceScrollLeft(0,e)},this.handleMaxCushionWidth=e=>{this.setState({slotCushionMaxWidth:Math.ceil(e)})}}render(){let{props:e,state:n,context:i}=this,{options:l}=i,s=!e.forPrint&&t.getStickyHeaderDates(l),a=!e.forPrint&&t.getStickyFooterScrollbar(l),d=this.buildTimelineDateProfile(e.dateProfile,i.dateEnv,l,i.dateProfileGenerator),{slotMinWidth:c}=l,m=O(d,c||this.computeFallbackSlotMinWidth(d)),u=[{type:"header",key:"header",isSticky:s,chunks:[{key:"timeline",content:t=>o.createElement(w,{dateProfile:e.dateProfile,clientWidth:t.clientWidth,clientHeight:t.clientHeight,tableMinWidth:t.tableMinWidth,tableColGroupNode:t.tableColGroupNode,tDateProfile:d,slatCoords:n.slatCoords,onMaxCushionWidth:c?null:this.handleMaxCushionWidth})}]},{type:"body",key:"body",liquid:!0,chunks:[{key:"timeline",content:t=>o.createElement(H,Object.assign({},e,{clientWidth:t.clientWidth,clientHeight:t.clientHeight,tableMinWidth:t.tableMinWidth,tableColGroupNode:t.tableColGroupNode,tDateProfile:d,onSlatCoords:this.handleSlatCoords,onScrollLeftRequest:this.handleScrollLeftRequest}))}]}];return a&&u.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"timeline",content:t.renderScrollShim}]}),o.createElement(t.ViewContainer,{elClasses:["fc-timeline",!1===l.eventOverlap?"fc-timeline-overlap-disabled":""],viewSpec:i.viewSpec},o.createElement(r.ScrollGrid,{ref:this.scrollGridRef,liquid:!e.isHeightAuto&&!e.forPrint,collapsibleWidth:!1,colGroups:[{cols:m}],sections:u}))}computeFallbackSlotMinWidth(e){return Math.max(30,(this.state.slotCushionMaxWidth||0)/e.slotsPerLabel)}}function O(e,t){return[{span:e.slotCnt,minWidth:t||1}]}t.injectStyles('.fc .fc-timeline-body{min-height:100%;position:relative;z-index:1}.fc .fc-timeline-slots{bottom:0;position:absolute;top:0;z-index:1}.fc .fc-timeline-slots>table{height:100%}.fc .fc-timeline-slot-minor{border-style:dotted}.fc .fc-timeline-slot-frame{align-items:center;display:flex;justify-content:center}.fc .fc-timeline-header-row-chrono .fc-timeline-slot-frame{justify-content:flex-start}.fc .fc-timeline-header-row:last-child .fc-timeline-slot-frame{overflow:hidden}.fc .fc-timeline-slot-cushion{padding:4px 5px;white-space:nowrap}.fc-direction-ltr .fc-timeline-slot{border-right:0!important}.fc-direction-rtl .fc-timeline-slot{border-left:0!important}.fc .fc-timeline-now-indicator-container{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:4}.fc .fc-timeline-now-indicator-arrow,.fc .fc-timeline-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;position:absolute;top:0}.fc .fc-timeline-now-indicator-arrow{border-left-color:transparent;border-right-color:transparent;border-width:6px 5px 0;margin:0 -6px}.fc .fc-timeline-now-indicator-line{border-width:0 0 0 1px;bottom:0;margin:0 -1px}.fc .fc-timeline-events{position:relative;width:0;z-index:3}.fc .fc-timeline-event-harness,.fc .fc-timeline-more-link{position:absolute;top:0}.fc-timeline-event{z-index:1}.fc-timeline-event.fc-event-mirror{z-index:2}.fc-timeline-event{align-items:center;border-radius:0;display:flex;font-size:var(--fc-small-font-size);margin-bottom:1px;padding:2px 1px;position:relative}.fc-timeline-event .fc-event-main{flex-grow:1;flex-shrink:1;min-width:0}.fc-timeline-event .fc-event-time{font-weight:700}.fc-timeline-event .fc-event-time,.fc-timeline-event .fc-event-title{padding:0 2px;white-space:nowrap}.fc-direction-ltr .fc-timeline-event.fc-event-end,.fc-direction-ltr .fc-timeline-more-link{margin-right:1px}.fc-direction-rtl .fc-timeline-event.fc-event-end,.fc-direction-rtl .fc-timeline-more-link{margin-left:1px}.fc-timeline-overlap-disabled .fc-timeline-event{margin-bottom:0;padding-bottom:5px;padding-top:5px}.fc-timeline-event:not(.fc-event-end):after,.fc-timeline-event:not(.fc-event-start):before{border-color:transparent #000;border-style:solid;border-width:5px;content:"";flex-grow:0;flex-shrink:0;height:0;margin:0 1px;opacity:.5;width:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-start):before,.fc-direction-rtl .fc-timeline-event:not(.fc-event-end):after{border-left:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-end):after,.fc-direction-rtl .fc-timeline-event:not(.fc-event-start):before{border-right:0}.fc-timeline-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;font-size:var(--fc-small-font-size);padding:1px}.fc-timeline-more-link-inner{display:inline-block;left:0;padding:2px;right:0}.fc .fc-timeline-bg{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:2}.fc .fc-timeline-bg .fc-non-business{z-index:1}.fc .fc-timeline-bg .fc-bg-event{z-index:2}.fc .fc-timeline-bg .fc-highlight{z-index:3}.fc .fc-timeline-bg-harness{bottom:0;position:absolute;top:0}');var F=n.createPlugin({name:"@fullcalendar/timeline",premiumReleaseDate:"2022-12-14",deps:[s.default],initialView:"timelineDay",views:{timeline:{component:N,usesMinMaxTime:!0,eventResizableFromStart:!0},timelineDay:{type:"timeline",duration:{days:1}},timelineWeek:{type:"timeline",duration:{weeks:1}},timelineMonth:{type:"timeline",duration:{months:1}},timelineYear:{type:"timeline",duration:{years:1}}}}),B={__proto__:null,TimelineView:N,buildSlatCols:O,TimelineLane:L,TimelineLaneBg:M,TimelineHeader:w,TimelineSlats:k,buildTimelineDateProfile:d,TimelineCoords:b,coordToCss:R,coordsToCss:y,TimelineLaneSlicer:T,TimelineHeaderRows:S};return t.globalPlugins.push(F),e.Internal=B,e.default=F,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar.Internal,FullCalendar,FullCalendar.PremiumCommon,FullCalendar.Preact,FullCalendar.ScrollGrid.Internal);
6
+ FullCalendar.Timeline=function(e,t,n,i,o,r){"use strict";function l(e){return e&&e.__esModule?e:{default:e}}var s=l(n);i.config.MAX_TIMELINE_SLOTS=1e3;const a=[{years:1},{months:1},{days:1},{hours:1},{minutes:30},{minutes:15},{minutes:10},{minutes:5},{minutes:1},{seconds:30},{seconds:15},{seconds:10},{seconds:5},{seconds:1},{milliseconds:500},{milliseconds:100},{milliseconds:10},{milliseconds:1}];function d(e,t,n,o){let r={labelInterval:n.slotLabelInterval,slotDuration:n.slotDuration};!function(e,t,n){const{currentRange:o}=t;if(e.labelInterval){n.countDurationsBetween(o.start,o.end,e.labelInterval)>i.config.MAX_TIMELINE_SLOTS&&(console.warn("slotLabelInterval results in too many cells"),e.labelInterval=null)}if(e.slotDuration){n.countDurationsBetween(o.start,o.end,e.slotDuration)>i.config.MAX_TIMELINE_SLOTS&&(console.warn("slotDuration results in too many cells"),e.slotDuration=null)}if(e.labelInterval&&e.slotDuration){const t=i.wholeDivideDurations(e.labelInterval,e.slotDuration);(null===t||t<1)&&(console.warn("slotLabelInterval must be a multiple of slotDuration"),e.slotDuration=null)}}(r,e,t),u(r,e,t),function(e,t,n){const{currentRange:o}=t;let{slotDuration:r}=e;if(!r){const l=u(e,t,n);for(let e of a){const t=i.createDuration(e),n=i.wholeDivideDurations(l,t);if(null!==n&&n>1&&n<=6){r=t;break}}if(r){n.countDurationsBetween(o.start,o.end,r)>200&&(r=null)}r||(r=l),e.slotDuration=r}}(r,e,t);let l=n.slotLabelFormat,s=Array.isArray(l)?l:null!=l?[l]:function(e,t,n,o){let r,l;const{labelInterval:s}=e;let a=i.greatestDurationDenominator(s).unit;const d=o.weekNumbers;let c=r=l=null;"week"!==a||d||(a="day");switch(a){case"year":c={year:"numeric"};break;case"month":h("years",t,n)>1&&(c={year:"numeric"}),r={month:"short"};break;case"week":h("years",t,n)>1&&(c={year:"numeric"}),r={week:"narrow"};break;case"day":h("years",t,n)>1?c={year:"numeric",month:"long"}:h("months",t,n)>1&&(c={month:"long"}),d&&(r={week:"short"}),l={weekday:"narrow",day:"numeric"};break;case"hour":d&&(c={week:"short"}),h("days",t,n)>1&&(r={weekday:"short",day:"numeric",month:"numeric",omitCommas:!0}),l={hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"};break;case"minute":i.asRoughMinutes(s)/60>=6?(c={hour:"numeric",meridiem:"short"},r=e=>":"+i.padStart(e.date.minute,2)):c={hour:"numeric",minute:"numeric",meridiem:"short"};break;case"second":i.asRoughSeconds(s)/60>=6?(c={hour:"numeric",minute:"2-digit",meridiem:"lowercase"},r=e=>":"+i.padStart(e.date.second,2)):c={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"};break;case"millisecond":c={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"},r=e=>"."+i.padStart(e.millisecond,3)}return[].concat(c||[],r||[],l||[])}(r,e,t,n);r.headerFormats=s.map(e=>i.createFormatter(e)),r.isTimeScale=Boolean(r.slotDuration.milliseconds);let d=null;if(!r.isTimeScale){const e=i.greatestDurationDenominator(r.slotDuration).unit;/year|month|week/.test(e)&&(d=e)}r.largeUnit=d,r.emphasizeWeeks=1===i.asCleanDays(r.slotDuration)&&h("weeks",e,t)>=2&&!n.businessHours;let g,p,v=n.snapDuration;v&&(g=i.createDuration(v),p=i.wholeDivideDurations(r.slotDuration,g)),null==p&&(g=r.slotDuration,p=1),r.snapDuration=g,r.snapsPerSlot=p;let D=i.asRoughMs(e.slotMaxTime)-i.asRoughMs(e.slotMinTime),S=c(e.renderRange.start,r,t),b=c(e.renderRange.end,r,t);r.isTimeScale&&(S=t.add(S,e.slotMinTime),b=t.add(i.addDays(b,-1),e.slotMaxTime)),r.timeWindowMs=D,r.normalizedRange={start:S,end:b};let C=[],R=S;for(;R<b;)m(R,r,e,o)&&C.push(R),R=t.add(R,r.slotDuration);r.slotDates=C;let y=-1,w=0;const E=[],x=[];for(R=S;R<b;)m(R,r,e,o)?(y+=1,E.push(y),x.push(w)):E.push(y+.5),R=t.add(R,r.snapDuration),w+=1;return r.snapDiffToIndex=E,r.snapIndexToDiff=x,r.snapCnt=y+1,r.slotCnt=r.snapCnt/r.snapsPerSlot,r.isWeekStarts=function(e,t){let{slotDates:n,emphasizeWeeks:i}=e,o=null,r=[];for(let e of n){let n=t.computeWeekNumber(e),l=i&&null!==o&&o!==n;o=n,r.push(l)}return r}(r,t),r.cellRows=function(e,t){let n=e.slotDates,o=e.headerFormats,r=o.map(()=>[]),l=i.asCleanDays(e.slotDuration),s=7===l?"week":1===l?"day":null,a=o.map(e=>e.getLargestUnit?e.getLargestUnit():null);for(let l=0;l<n.length;l+=1){let d=n[l],c=e.isWeekStarts[l];for(let n=0;n<o.length;n+=1){let l=o[n],m=r[n],u=m[m.length-1],h=n===o.length-1,g=o.length>1&&!h,p=null,v=a[n]||(h?s:null);if(g){let e=t.format(d,l);u&&u.text===e?u.colspan+=1:p=f(d,e,v)}else if(!u||i.isInt(t.countDurationsBetween(e.normalizedRange.start,d,e.labelInterval))){let e=t.format(d,l);p=f(d,e,v)}else u.colspan+=1;p&&(p.weekStart=c,m.push(p))}}return r}(r,t),r.slotsPerLabel=i.wholeDivideDurations(r.labelInterval,r.slotDuration),r}function c(e,t,n){let o=e;return t.isTimeScale||(o=i.startOfDay(o),t.largeUnit&&(o=n.startOf(o,t.largeUnit))),o}function m(e,t,n,o){if(o.isHiddenDay(e))return!1;if(t.isTimeScale){let o=i.startOfDay(e),r=e.valueOf()-o.valueOf()-i.asRoughMs(n.slotMinTime);return r=(r%864e5+864e5)%864e5,r<t.timeWindowMs}return!0}function u(e,t,n){const{currentRange:o}=t;let{labelInterval:r}=e;if(!r){let t;if(e.slotDuration){for(t of a){const n=i.createDuration(t),o=i.wholeDivideDurations(n,e.slotDuration);if(null!==o&&o<=6){r=n;break}}r||(r=e.slotDuration)}else for(t of a){r=i.createDuration(t);if(n.countDurationsBetween(o.start,o.end,r)>=18)break}e.labelInterval=r}return r}function h(e,t,n){let o=t.currentRange,r=null;return"years"===e?r=n.diffWholeYears(o.start,o.end):"months"===e||"weeks"===e?r=n.diffWholeMonths(o.start,o.end):"days"===e&&(r=i.diffWholeDays(o.start,o.end)),r||0}function f(e,t,n){return{date:e,text:t,rowUnit:n,colspan:1,isWeekStart:!1}}class g extends i.BaseComponent{constructor(){super(...arguments),this.refineRenderProps=i.memoizeObjArg(D),this.buildCellNavLinkAttrs=i.memoize(p)}render(){let{props:e,context:t}=this,{dateEnv:n,options:r}=t,{cell:l,dateProfile:s,tDateProfile:a}=e,d=i.getDateMeta(l.date,e.todayRange,e.nowDate,s),c=this.refineRenderProps({level:e.rowLevel,dateMarker:l.date,text:l.text,dateEnv:t.dateEnv,viewApi:t.viewApi});return o.createElement(i.ContentContainer,{elTag:"th",elClasses:["fc-timeline-slot","fc-timeline-slot-label",l.isWeekStart&&"fc-timeline-slot-em",..."time"===l.rowUnit?i.getSlotClassNames(d,t.theme):i.getDayClassNames(d,t.theme)],elAttrs:{colSpan:l.colspan,"data-date":n.formatIso(l.date,{omitTime:!a.isTimeScale,omitTimeZoneOffset:!0})},renderProps:c,generatorName:"slotLabelContent",generator:r.slotLabelContent||v,classNameGenerator:r.slotLabelClassNames,didMount:r.slotLabelDidMount,willUnmount:r.slotLabelWillUnmount},n=>o.createElement("div",{className:"fc-timeline-slot-frame",style:{height:e.rowInnerHeight}},o.createElement(n,{elTag:"a",elClasses:["fc-timeline-slot-cushion","fc-scrollgrid-sync-inner",e.isSticky&&"fc-sticky"],elAttrs:this.buildCellNavLinkAttrs(t,l.date,l.rowUnit)})))}}function p(e,t,n){return n&&"time"!==n?i.buildNavLinkAttrs(e,t,n):{}}function v(e){return e.text}function D(e){return{level:e.level,date:e.dateEnv.toDate(e.dateMarker),view:e.viewApi,text:e.text}}class S extends i.BaseComponent{render(){let{dateProfile:e,tDateProfile:t,rowInnerHeights:n,todayRange:i,nowDate:r}=this.props,{cellRows:l}=t;return o.createElement(o.Fragment,null,l.map((s,a)=>{let d=a===l.length-1,c=["fc-timeline-header-row",t.isTimeScale&&d?"fc-timeline-header-row-chrono":""];return o.createElement("tr",{key:a,className:c.join(" ")},s.map(l=>o.createElement(g,{key:l.date.toISOString(),cell:l,rowLevel:a,dateProfile:e,tDateProfile:t,todayRange:i,nowDate:r,rowInnerHeight:n&&n[a],isSticky:!d})))}))}}class b{constructor(e,t,n,o,r,l){this.slatRootEl=e,this.dateProfile=n,this.tDateProfile=o,this.dateEnv=r,this.isRtl=l,this.outerCoordCache=new i.PositionCache(e,t,!0,!1),this.innerCoordCache=new i.PositionCache(e,i.findDirectChildren(t,"div"),!0,!1)}isDateInRange(e){return i.rangeContainsMarker(this.dateProfile.currentRange,e)}dateToCoord(e){let{tDateProfile:t}=this,n=this.computeDateSnapCoverage(e)/t.snapsPerSlot,i=Math.floor(n);i=Math.min(i,t.slotCnt-1);let o=n-i,{innerCoordCache:r,outerCoordCache:l}=this;return this.isRtl?l.originClientRect.width-(l.rights[i]-r.getWidth(i)*o):l.lefts[i]+r.getWidth(i)*o}rangeToCoords(e){return{start:this.dateToCoord(e.start),end:this.dateToCoord(e.end)}}durationToCoord(e){let{dateProfile:t,tDateProfile:n,dateEnv:o,isRtl:r}=this,l=0;if(t){let s=o.add(t.activeRange.start,e);n.isTimeScale||(s=i.startOfDay(s)),l=this.dateToCoord(s),!r&&l&&(l+=1)}return l}coordFromLeft(e){return this.isRtl?this.outerCoordCache.originClientRect.width-e:e}computeDateSnapCoverage(e){return C(e,this.tDateProfile,this.dateEnv)}}function C(e,t,n){let o=n.countDurationsBetween(t.normalizedRange.start,e,t.snapDuration);if(o<0)return 0;if(o>=t.snapDiffToIndex.length)return t.snapCnt;let r=Math.floor(o),l=t.snapDiffToIndex[r];return i.isInt(l)?l+=o-r:l=Math.ceil(l),l}function R(e,t){return null===e?{left:"",right:""}:t?{right:e,left:""}:{left:e,right:""}}function y(e,t){return e?t?{right:e.start,left:-e.end}:{left:e.start,right:-e.end}:{left:"",right:""}}class w extends i.BaseComponent{constructor(){super(...arguments),this.rootElRef=o.createRef()}render(){let{props:e,context:t}=this,n=i.greatestDurationDenominator(e.tDateProfile.slotDuration).unit,r=e.slatCoords&&e.slatCoords.dateProfile===e.dateProfile?e.slatCoords:null;return o.createElement(i.NowTimer,{unit:n},(n,l)=>o.createElement("div",{className:"fc-timeline-header",ref:this.rootElRef},o.createElement("table",{"aria-hidden":!0,className:"fc-scrollgrid-sync-table",style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,o.createElement("tbody",null,o.createElement(S,{dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:n,todayRange:l,rowInnerHeights:e.rowInnerHeights}))),t.options.nowIndicator&&o.createElement("div",{className:"fc-timeline-now-indicator-container"},r&&r.isDateInRange(n)&&o.createElement(i.NowIndicatorContainer,{elClasses:["fc-timeline-now-indicator-arrow"],elStyle:R(r.dateToCoord(n),t.isRtl),isAxis:!0,date:n}))))}componentDidMount(){this.updateSize()}componentDidUpdate(){this.updateSize()}updateSize(){this.props.onMaxCushionWidth&&this.props.onMaxCushionWidth(this.computeMaxCushionWidth())}computeMaxCushionWidth(){return Math.max(...i.findElements(this.rootElRef.current,".fc-timeline-header-row:last-child .fc-timeline-slot-cushion").map(e=>e.getBoundingClientRect().width))}}class E extends i.BaseComponent{render(){let{props:e,context:t}=this,{dateEnv:n,options:r,theme:l}=t,{date:s,tDateProfile:a,isEm:d}=e,c=i.getDateMeta(e.date,e.todayRange,e.nowDate,e.dateProfile),m=Object.assign(Object.assign({date:n.toDate(e.date)},c),{view:t.viewApi});return o.createElement(i.ContentContainer,{elTag:"td",elRef:e.elRef,elClasses:["fc-timeline-slot","fc-timeline-slot-lane",d&&"fc-timeline-slot-em",a.isTimeScale?i.isInt(n.countDurationsBetween(a.normalizedRange.start,e.date,a.labelInterval))?"fc-timeline-slot-major":"fc-timeline-slot-minor":"",...e.isDay?i.getDayClassNames(c,l):i.getSlotClassNames(c,l)],elAttrs:{"data-date":n.formatIso(s,{omitTimeZoneOffset:!0,omitTime:!a.isTimeScale})},renderProps:m,generatorName:"slotLaneContent",generator:r.slotLaneContent,classNameGenerator:r.slotLaneClassNames,didMount:r.slotLaneDidMount,willUnmount:r.slotLaneWillUnmount},e=>o.createElement(e,{elTag:"div"}))}}class x extends i.BaseComponent{render(){let{props:e}=this,{tDateProfile:t,cellElRefs:n}=e,{slotDates:i,isWeekStarts:r}=t,l=!t.isTimeScale&&!t.largeUnit;return o.createElement("tbody",null,o.createElement("tr",null,i.map((i,s)=>{let a=i.toISOString();return o.createElement(E,{key:a,elRef:n.createRef(a),date:i,dateProfile:e.dateProfile,tDateProfile:t,nowDate:e.nowDate,todayRange:e.todayRange,isEm:r[s],isDay:l})})))}}class k extends i.BaseComponent{constructor(){super(...arguments),this.rootElRef=o.createRef(),this.cellElRefs=new i.RefMap,this.handleScrollRequest=e=>{let{onScrollLeftRequest:t}=this.props,{coords:n}=this;if(t&&n){if(e.time){t(n.coordFromLeft(n.durationToCoord(e.time)))}return!0}return null}}render(){let{props:e,context:t}=this;return o.createElement("div",{className:"fc-timeline-slots",ref:this.rootElRef},o.createElement("table",{"aria-hidden":!0,className:t.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,o.createElement(x,{cellElRefs:this.cellElRefs,dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:e.nowDate,todayRange:e.todayRange})))}componentDidMount(){this.updateSizing(),this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(e){this.updateSizing(),this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach(),this.props.onCoords&&this.props.onCoords(null)}updateSizing(){let{props:e,context:t}=this;if(null!==e.clientWidth&&this.scrollResponder){this.rootElRef.current.offsetWidth&&(this.coords=new b(this.rootElRef.current,(n=this.cellElRefs.currentMap,e.tDateProfile.slotDates.map(e=>{let t=e.toISOString();return n[t]})),e.dateProfile,e.tDateProfile,t.dateEnv,t.isRtl),e.onCoords&&e.onCoords(this.coords),this.scrollResponder.update(!1))}var n}positionToHit(e){let{outerCoordCache:t}=this.coords,{dateEnv:n,isRtl:o}=this.context,{tDateProfile:r}=this.props,l=t.leftToIndex(e);if(null!=l){let s=t.getWidth(l),a=o?(t.rights[l]-e)/s:(e-t.lefts[l])/s,d=Math.floor(a*r.snapsPerSlot),c=n.add(r.slotDates[l],i.multiplyDuration(r.snapDuration,d));return{dateSpan:{range:{start:c,end:n.add(c,r.snapDuration)},allDay:!this.props.tDateProfile.isTimeScale},dayEl:this.cellElRefs.currentMap[l],left:t.lefts[l],right:t.rights[l]}}return null}}function P(e,t,n){let i=[];if(n)for(let o of e){let e=n.rangeToCoords(o),r=Math.round(e.start),l=Math.round(e.end);l-r<t&&(l=r+t),i.push({start:r,end:l})}return i}class M extends i.BaseComponent{render(){let{props:e}=this,t=[].concat(e.eventResizeSegs,e.dateSelectionSegs);return e.timelineCoords&&o.createElement("div",{className:"fc-timeline-bg"},this.renderSegs(e.businessHourSegs||[],e.timelineCoords,"non-business"),this.renderSegs(e.bgEventSegs||[],e.timelineCoords,"bg-event"),this.renderSegs(t,e.timelineCoords,"highlight"))}renderSegs(e,t,n){let{todayRange:r,nowDate:l}=this.props,{isRtl:s}=this.context,a=P(e,0,t),d=e.map((e,t)=>{let d=y(a[t],s);return o.createElement("div",{key:i.buildEventRangeKey(e.eventRange),className:"fc-timeline-bg-harness",style:d},"bg-event"===n?o.createElement(i.BgEvent,Object.assign({seg:e},i.getSegMeta(e,r,l))):i.renderFill(n))});return o.createElement(o.Fragment,null,d)}}class T extends i.Slicer{sliceRange(e,t,n,o,r){let l=function(e,t,n){if(!t.isTimeScale&&(e=i.computeVisibleDayRange(e),t.largeUnit)){let i=e;((e={start:n.startOf(e.start,t.largeUnit),end:n.startOf(e.end,t.largeUnit)}).end.valueOf()!==i.end.valueOf()||e.end<=e.start)&&(e={start:e.start,end:n.add(e.end,t.slotDuration)})}return e}(e,o,r),s=[];if(C(l.start,o,r)<C(l.end,o,r)){let e=i.intersectRanges(l,o.normalizedRange);e&&s.push({start:e.start,end:e.end,isStart:e.start.valueOf()===l.start.valueOf()&&m(e.start,o,t,n),isEnd:e.end.valueOf()===l.end.valueOf()&&m(i.addMs(e.end,-1),o,t,n)})}return s}}const I=i.createFormatter({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});class W extends i.BaseComponent{render(){let{props:e}=this;return o.createElement(i.StandardEvent,Object.assign({},e,{elClasses:["fc-timeline-event","fc-h-event"],defaultTimeFormat:I,defaultDisplayEventTime:!e.isTimeScale}))}}class z extends i.BaseComponent{render(){let{props:e,context:t}=this,{hiddenSegs:n,placement:r,resourceId:l}=e,{top:s,hcoords:a}=r,d=a&&null!==s,c=y(a,t.isRtl),m=l?{resourceId:l}:{};return o.createElement(i.MoreLinkContainer,{elRef:e.elRef,elClasses:["fc-timeline-more-link"],elStyle:Object.assign({visibility:d?"":"hidden",top:s||0},c),allDayDate:null,moreCnt:n.length,allSegs:n,hiddenSegs:n,dateProfile:e.dateProfile,todayRange:e.todayRange,extraDateSpan:m,popoverContent:()=>o.createElement(o.Fragment,null,n.map(t=>{let n=t.eventRange.instance.instanceId;return o.createElement("div",{key:n,style:{visibility:e.isForcedInvisible[n]?"hidden":""}},o.createElement(W,Object.assign({isTimeScale:e.isTimeScale,seg:t,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:n===e.eventSelection},i.getSegMeta(t,e.todayRange,e.nowDate))))}))},e=>o.createElement(e,{elTag:"div",elClasses:["fc-timeline-more-link-inner","fc-sticky"]}))}}class L extends i.BaseComponent{constructor(){super(...arguments),this.slicer=new T,this.sortEventSegs=i.memoize(i.sortEventSegs),this.harnessElRefs=new i.RefMap,this.moreElRefs=new i.RefMap,this.innerElRef=o.createRef(),this.state={eventInstanceHeights:{},moreLinkHeights:{}},this.handleResize=e=>{e&&this.updateSize()}}render(){let{props:e,state:t,context:n}=this,{options:r}=n,{dateProfile:l,tDateProfile:s}=e,a=this.slicer.sliceProps(e,l,s.isTimeScale?null:e.nextDayThreshold,n,l,n.dateProfileGenerator,s,n.dateEnv),d=(a.eventDrag?a.eventDrag.segs:null)||(a.eventResize?a.eventResize.segs:null)||[],c=this.sortEventSegs(a.fgEventSegs,r.eventOrder),m=P(c,r.eventMinWidth,e.timelineCoords),[u,h]=function(e,t,n,o,r,l){let s=[],a=[];for(let i=0;i<e.length;i+=1){let o=e[i],r=n[o.eventRange.instance.instanceId],l=t[i];r&&l?s.push({index:i,span:l,thickness:r}):a.push({seg:o,hcoords:l,top:null})}let d=new i.SegHierarchy;null!=r&&(d.strictOrder=r),null!=l&&(d.maxStackCnt=l);let c=d.addSegs(s),m=c.map(t=>({seg:e[t.index],hcoords:t.span,top:null})),u=i.groupIntersectingEntries(c),h=[],f=[];const g=t=>e[t.index];for(let t=0;t<u.length;t+=1){let n=u[t],r=n.entries.map(g),l=o[i.buildIsoString(i.computeEarliestSegStart(r))];null!=l?h.push({index:e.length+t,thickness:l,span:n.span}):f.push({seg:r,hcoords:n.span,top:null})}d.maxStackCnt=-1,d.addSegs(h);let p=d.toRects(),v=[],D=0;for(let t of p){let n=t.index;v.push({seg:n<e.length?e[n]:u[n-e.length].entries.map(g),hcoords:t.span,top:t.levelCoord}),D=Math.max(D,t.levelCoord+t.thickness)}return[v.concat(a,m,f),D]}(c,m,t.eventInstanceHeights,t.moreLinkHeights,r.eventOrderStrict,r.eventMaxStack),f=(a.eventDrag?a.eventDrag.affectedInstances:null)||(a.eventResize?a.eventResize.affectedInstances:null)||{};return o.createElement(o.Fragment,null,o.createElement(M,{businessHourSegs:a.businessHourSegs,bgEventSegs:a.bgEventSegs,timelineCoords:e.timelineCoords,eventResizeSegs:a.eventResize?a.eventResize.segs:[],dateSelectionSegs:a.dateSelectionSegs,nowDate:e.nowDate,todayRange:e.todayRange}),o.createElement("div",{className:"fc-timeline-events fc-scrollgrid-sync-inner",ref:this.innerElRef,style:{height:h}},this.renderFgSegs(u,f,!1,!1,!1),this.renderFgSegs(function(e,t,n){if(!e.length||!t)return[];let i=function(e){let t={};for(let n of e){let{seg:e}=n;Array.isArray(e)||(t[e.eventRange.instance.instanceId]=n.top)}return t}(n);return e.map(e=>({seg:e,hcoords:t.rangeToCoords(e),top:i[e.eventRange.instance.instanceId]}))}(d,e.timelineCoords,u),{},Boolean(a.eventDrag),Boolean(a.eventResize),!1)))}componentDidMount(){this.updateSize(),this.context.addResizeHandler(this.handleResize)}componentDidUpdate(e,t){e.eventStore===this.props.eventStore&&e.timelineCoords===this.props.timelineCoords&&t.moreLinkHeights===this.state.moreLinkHeights||this.updateSize()}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateSize(){let{props:e}=this,{timelineCoords:t}=e;const n=this.innerElRef.current;e.onHeightChange&&e.onHeightChange(n,!1),t&&this.setState({eventInstanceHeights:i.mapHash(this.harnessElRefs.currentMap,e=>Math.round(e.getBoundingClientRect().height)),moreLinkHeights:i.mapHash(this.moreElRefs.currentMap,e=>Math.round(e.getBoundingClientRect().height))},()=>{e.onHeightChange&&e.onHeightChange(n,!0)}),e.syncParentMinHeight&&(n.parentElement.style.minHeight=n.style.height)}renderFgSegs(e,t,n,r,l){let{harnessElRefs:s,moreElRefs:a,props:d,context:c}=this,m=n||r||l;return o.createElement(o.Fragment,null,e.map(e=>{let{seg:u,hcoords:h,top:f}=e;if(Array.isArray(u)){let n=i.buildIsoString(i.computeEarliestSegStart(u));return o.createElement(z,{key:"m:"+n,elRef:a.createRef(n),hiddenSegs:u,placement:e,dateProfile:d.dateProfile,nowDate:d.nowDate,todayRange:d.todayRange,isTimeScale:d.tDateProfile.isTimeScale,eventSelection:d.eventSelection,resourceId:d.resourceId,isForcedInvisible:t})}let g=u.eventRange.instance.instanceId,p=m||Boolean(!t[g]&&h&&null!==f),v=y(h,c.isRtl);return o.createElement("div",{key:"e:"+g,ref:m?null:s.createRef(g),className:"fc-timeline-event-harness",style:Object.assign({visibility:p?"":"hidden",top:f||0},v)},o.createElement(W,Object.assign({isTimeScale:d.tDateProfile.isTimeScale,seg:u,isDragging:n,isResizing:r,isDateSelecting:l,isSelected:g===d.eventSelection},i.getSegMeta(u,d.todayRange,d.nowDate))))}))}}L.addStateEquality({eventInstanceHeights:i.isPropsEqual,moreLinkHeights:i.isPropsEqual});class H extends i.DateComponent{constructor(){super(...arguments),this.slatsRef=o.createRef(),this.state={coords:null},this.handeEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)},this.handleCoords=e=>{this.setState({coords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)}}render(){let{props:e,state:t,context:n}=this,{options:r}=n,{dateProfile:l,tDateProfile:s}=e,a=i.greatestDurationDenominator(s.slotDuration).unit;return o.createElement("div",{className:"fc-timeline-body",ref:this.handeEl,style:{minWidth:e.tableMinWidth,height:e.clientHeight,width:e.clientWidth}},o.createElement(i.NowTimer,{unit:a},(a,d)=>o.createElement(o.Fragment,null,o.createElement(k,{ref:this.slatsRef,dateProfile:l,tDateProfile:s,nowDate:a,todayRange:d,clientWidth:e.clientWidth,tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,onCoords:this.handleCoords,onScrollLeftRequest:e.onScrollLeftRequest}),o.createElement(L,{dateProfile:l,tDateProfile:e.tDateProfile,nowDate:a,todayRange:d,nextDayThreshold:r.nextDayThreshold,businessHours:e.businessHours,eventStore:e.eventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,timelineCoords:t.coords,syncParentMinHeight:!0}),r.nowIndicator&&t.coords&&t.coords.isDateInRange(a)&&o.createElement("div",{className:"fc-timeline-now-indicator-container"},o.createElement(i.NowIndicatorContainer,{elClasses:["fc-timeline-now-indicator-line"],elStyle:R(t.coords.dateToCoord(a),n.isRtl),isAxis:!1,date:a})))))}queryHit(e,t,n,i){let o=this.slatsRef.current.positionToHit(e);return o?{dateProfile:this.props.dateProfile,dateSpan:o.dateSpan,rect:{left:o.left,right:o.right,top:0,bottom:i},dayEl:o.dayEl,layer:0}:null}}class N extends i.DateComponent{constructor(){super(...arguments),this.buildTimelineDateProfile=i.memoize(d),this.scrollGridRef=o.createRef(),this.state={slatCoords:null,slotCushionMaxWidth:null},this.handleSlatCoords=e=>{this.setState({slatCoords:e})},this.handleScrollLeftRequest=e=>{this.scrollGridRef.current.forceScrollLeft(0,e)},this.handleMaxCushionWidth=e=>{this.setState({slotCushionMaxWidth:Math.ceil(e)})}}render(){let{props:e,state:t,context:n}=this,{options:l}=n,s=!e.forPrint&&i.getStickyHeaderDates(l),a=!e.forPrint&&i.getStickyFooterScrollbar(l),d=this.buildTimelineDateProfile(e.dateProfile,n.dateEnv,l,n.dateProfileGenerator),{slotMinWidth:c}=l,m=O(d,c||this.computeFallbackSlotMinWidth(d)),u=[{type:"header",key:"header",isSticky:s,chunks:[{key:"timeline",content:n=>o.createElement(w,{dateProfile:e.dateProfile,clientWidth:n.clientWidth,clientHeight:n.clientHeight,tableMinWidth:n.tableMinWidth,tableColGroupNode:n.tableColGroupNode,tDateProfile:d,slatCoords:t.slatCoords,onMaxCushionWidth:c?null:this.handleMaxCushionWidth})}]},{type:"body",key:"body",liquid:!0,chunks:[{key:"timeline",content:t=>o.createElement(H,Object.assign({},e,{clientWidth:t.clientWidth,clientHeight:t.clientHeight,tableMinWidth:t.tableMinWidth,tableColGroupNode:t.tableColGroupNode,tDateProfile:d,onSlatCoords:this.handleSlatCoords,onScrollLeftRequest:this.handleScrollLeftRequest}))}]}];return a&&u.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"timeline",content:i.renderScrollShim}]}),o.createElement(i.ViewContainer,{elClasses:["fc-timeline",!1===l.eventOverlap?"fc-timeline-overlap-disabled":""],viewSpec:n.viewSpec},o.createElement(r.ScrollGrid,{ref:this.scrollGridRef,liquid:!e.isHeightAuto&&!e.forPrint,collapsibleWidth:!1,colGroups:[{cols:m}],sections:u}))}computeFallbackSlotMinWidth(e){return Math.max(30,(this.state.slotCushionMaxWidth||0)/e.slotsPerLabel)}}function O(e,t){return[{span:e.slotCnt,minWidth:t||1}]}i.injectStyles('.fc .fc-timeline-body{min-height:100%;position:relative;z-index:1}.fc .fc-timeline-slots{bottom:0;position:absolute;top:0;z-index:1}.fc .fc-timeline-slots>table{height:100%}.fc .fc-timeline-slot-minor{border-style:dotted}.fc .fc-timeline-slot-frame{align-items:center;display:flex;justify-content:center}.fc .fc-timeline-header-row-chrono .fc-timeline-slot-frame{justify-content:flex-start}.fc .fc-timeline-header-row:last-child .fc-timeline-slot-frame{overflow:hidden}.fc .fc-timeline-slot-cushion{padding:4px 5px;white-space:nowrap}.fc-direction-ltr .fc-timeline-slot{border-right:0!important}.fc-direction-rtl .fc-timeline-slot{border-left:0!important}.fc .fc-timeline-now-indicator-container{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:4}.fc .fc-timeline-now-indicator-arrow,.fc .fc-timeline-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;position:absolute;top:0}.fc .fc-timeline-now-indicator-arrow{border-left-color:transparent;border-right-color:transparent;border-width:6px 5px 0;margin:0 -6px}.fc .fc-timeline-now-indicator-line{border-width:0 0 0 1px;bottom:0;margin:0 -1px}.fc .fc-timeline-events{position:relative;width:0;z-index:3}.fc .fc-timeline-event-harness,.fc .fc-timeline-more-link{position:absolute;top:0}.fc-timeline-event{z-index:1}.fc-timeline-event.fc-event-mirror{z-index:2}.fc-timeline-event{align-items:center;border-radius:0;display:flex;font-size:var(--fc-small-font-size);margin-bottom:1px;padding:2px 1px;position:relative}.fc-timeline-event .fc-event-main{flex-grow:1;flex-shrink:1;min-width:0}.fc-timeline-event .fc-event-time{font-weight:700}.fc-timeline-event .fc-event-time,.fc-timeline-event .fc-event-title{padding:0 2px;white-space:nowrap}.fc-direction-ltr .fc-timeline-event.fc-event-end,.fc-direction-ltr .fc-timeline-more-link{margin-right:1px}.fc-direction-rtl .fc-timeline-event.fc-event-end,.fc-direction-rtl .fc-timeline-more-link{margin-left:1px}.fc-timeline-overlap-disabled .fc-timeline-event{margin-bottom:0;padding-bottom:5px;padding-top:5px}.fc-timeline-event:not(.fc-event-end):after,.fc-timeline-event:not(.fc-event-start):before{border-color:transparent #000;border-style:solid;border-width:5px;content:"";flex-grow:0;flex-shrink:0;height:0;margin:0 1px;opacity:.5;width:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-start):before,.fc-direction-rtl .fc-timeline-event:not(.fc-event-end):after{border-left:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-end):after,.fc-direction-rtl .fc-timeline-event:not(.fc-event-start):before{border-right:0}.fc-timeline-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;font-size:var(--fc-small-font-size);padding:1px}.fc-timeline-more-link-inner{display:inline-block;left:0;padding:2px;right:0}.fc .fc-timeline-bg{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:2}.fc .fc-timeline-bg .fc-non-business{z-index:1}.fc .fc-timeline-bg .fc-bg-event{z-index:2}.fc .fc-timeline-bg .fc-highlight{z-index:3}.fc .fc-timeline-bg-harness{bottom:0;position:absolute;top:0}');var F=t.createPlugin({name:"@fullcalendar/timeline",premiumReleaseDate:"2022-12-27",deps:[s.default],initialView:"timelineDay",views:{timeline:{component:N,usesMinMaxTime:!0,eventResizableFromStart:!0},timelineDay:{type:"timeline",duration:{days:1}},timelineWeek:{type:"timeline",duration:{weeks:1}},timelineMonth:{type:"timeline",duration:{months:1}},timelineYear:{type:"timeline",duration:{years:1}}}}),B={__proto__:null,TimelineView:N,buildSlatCols:O,TimelineLane:L,TimelineLaneBg:M,TimelineHeader:w,TimelineSlats:k,buildTimelineDateProfile:d,TimelineCoords:b,coordToCss:R,coordsToCss:y,TimelineLaneSlicer:T,TimelineHeaderRows:S};return t.globalPlugins.push(F),e.Internal=B,e.default=F,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.PremiumCommon,FullCalendar.Internal,FullCalendar.Preact,FullCalendar.ScrollGrid.Internal);
package/index.js CHANGED
@@ -10,7 +10,7 @@ injectStyles(css_248z);
10
10
 
11
11
  var index = createPlugin({
12
12
  name: '@fullcalendar/timeline',
13
- premiumReleaseDate: '2022-12-14',
13
+ premiumReleaseDate: '2022-12-27',
14
14
  deps: [premiumCommonPlugin],
15
15
  initialView: 'timelineDay',
16
16
  views: {
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { createPlugin, PluginDef } from '@fullcalendar/core'\nimport premiumCommonPlugin from '@fullcalendar/premium-common'\nimport { TimelineView } from './TimelineView.js'\nimport './ambient.js'\nimport './index.css'\n\nexport default createPlugin({\n name: '<%= pkgName %>',\n premiumReleaseDate: '<%= releaseDate %>',\n deps: [premiumCommonPlugin],\n initialView: 'timelineDay',\n views: {\n timeline: {\n component: TimelineView,\n usesMinMaxTime: true,\n eventResizableFromStart: true, // how is this consumed for TimelineView tho?\n },\n timelineDay: {\n type: 'timeline',\n duration: { days: 1 },\n },\n timelineWeek: {\n type: 'timeline',\n duration: { weeks: 1 },\n },\n timelineMonth: {\n type: 'timeline',\n duration: { months: 1 },\n },\n timelineYear: {\n type: 'timeline',\n duration: { years: 1 },\n },\n },\n}) as PluginDef\n"],"names":[],"mappings":";;;;;;;;;;AAMA,YAAe,YAAY,CAAC;AAC1B,IAAA,IAAI,EAAE,wBAAgB;AACtB,IAAA,kBAAkB,EAAE,YAAoB;IACxC,IAAI,EAAE,CAAC,mBAAmB,CAAC;AAC3B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,KAAK,EAAE;AACL,QAAA,QAAQ,EAAE;AACR,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,cAAc,EAAE,IAAI;YACpB,uBAAuB,EAAE,IAAI;AAC9B,SAAA;AACD,QAAA,WAAW,EAAE;AACX,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AACtB,SAAA;AACD,QAAA,YAAY,EAAE;AACZ,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;AACvB,SAAA;AACD,QAAA,aAAa,EAAE;AACb,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;AACxB,SAAA;AACD,QAAA,YAAY,EAAE;AACZ,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;AACvB,SAAA;AACF,KAAA;AACF,CAAA,CAAc;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sources":["../src/timeline-date-profile.ts","../src/TimelineHeaderTh.tsx","../src/TimelineHeaderRows.tsx","../src/TimelineCoords.ts","../src/TimelineHeader.tsx","../src/TimelineSlatCell.tsx","../src/TimelineSlatsBody.tsx","../src/TimelineSlats.tsx","../src/event-placement.ts","../src/TimelineLaneBg.tsx","../src/TimelineLaneSlicer.ts","../src/TimelineEvent.tsx","../src/TimelineLaneMoreLink.tsx","../src/TimelineLane.tsx","../src/TimelineGrid.tsx","../src/TimelineView.tsx"],"sourcesContent":["import { Duration } from '@fullcalendar/core'\nimport {\n config, computeVisibleDayRange, DateProfile, asCleanDays, addDays, wholeDivideDurations, DateMarker,\n startOfDay, createDuration, DateEnv, diffWholeDays, asRoughMs, createFormatter, greatestDurationDenominator,\n asRoughMinutes, padStart, asRoughSeconds, DateRange, isInt, DateProfileGenerator, BaseOptionsRefined,\n} from '@fullcalendar/core/internal'\n\nexport interface TimelineDateProfile {\n labelInterval: Duration\n slotDuration: Duration\n slotsPerLabel: number\n headerFormats: any\n isTimeScale: boolean\n largeUnit: string\n emphasizeWeeks: boolean\n snapDuration: Duration\n snapsPerSlot: number\n normalizedRange: DateRange // snaps to unit. adds in slotMinTime/slotMaxTime\n timeWindowMs: number\n slotDates: DateMarker[]\n isWeekStarts: boolean[]\n snapDiffToIndex: number[]\n snapIndexToDiff: number[]\n snapCnt: number\n slotCnt: number\n cellRows: TimelineHeaderCell[][]\n}\n\nexport interface TimelineHeaderCell {\n date: DateMarker\n text: string\n rowUnit: string\n colspan: number\n isWeekStart: boolean\n}\n\nconst MIN_AUTO_LABELS = 18 // more than `12` months but less that `24` hours\nconst MAX_AUTO_SLOTS_PER_LABEL = 6 // allows 6 10-min slots in an hour\nconst MAX_AUTO_CELLS = 200 // allows 4-days to have a :30 slot duration\nconfig.MAX_TIMELINE_SLOTS = 1000\n\n// potential nice values for slot-duration and interval-duration\nconst STOCK_SUB_DURATIONS = [ // from largest to smallest\n { years: 1 },\n { months: 1 },\n { days: 1 },\n { hours: 1 },\n { minutes: 30 },\n { minutes: 15 },\n { minutes: 10 },\n { minutes: 5 },\n { minutes: 1 },\n { seconds: 30 },\n { seconds: 15 },\n { seconds: 10 },\n { seconds: 5 },\n { seconds: 1 },\n { milliseconds: 500 },\n { milliseconds: 100 },\n { milliseconds: 10 },\n { milliseconds: 1 },\n]\n\nexport function buildTimelineDateProfile(\n dateProfile: DateProfile,\n dateEnv: DateEnv,\n allOptions: BaseOptionsRefined,\n dateProfileGenerator: DateProfileGenerator,\n): TimelineDateProfile {\n let tDateProfile = {\n labelInterval: allOptions.slotLabelInterval,\n slotDuration: allOptions.slotDuration,\n } as TimelineDateProfile\n\n validateLabelAndSlot(tDateProfile, dateProfile, dateEnv) // validate after computed grid duration\n ensureLabelInterval(tDateProfile, dateProfile, dateEnv)\n ensureSlotDuration(tDateProfile, dateProfile, dateEnv)\n\n let input = allOptions.slotLabelFormat\n let rawFormats =\n Array.isArray(input) ? input :\n (input != null) ? [input] :\n computeHeaderFormats(tDateProfile, dateProfile, dateEnv, allOptions)\n\n tDateProfile.headerFormats = rawFormats.map((rawFormat) => createFormatter(rawFormat))\n\n tDateProfile.isTimeScale = Boolean(tDateProfile.slotDuration.milliseconds)\n\n let largeUnit = null\n if (!tDateProfile.isTimeScale) {\n const slotUnit = greatestDurationDenominator(tDateProfile.slotDuration).unit\n if (/year|month|week/.test(slotUnit)) {\n largeUnit = slotUnit\n }\n }\n\n tDateProfile.largeUnit = largeUnit\n\n tDateProfile.emphasizeWeeks =\n asCleanDays(tDateProfile.slotDuration) === 1 &&\n currentRangeAs('weeks', dateProfile, dateEnv) >= 2 &&\n !allOptions.businessHours\n\n /*\n console.log('label interval =', timelineView.labelInterval.humanize())\n console.log('slot duration =', timelineView.slotDuration.humanize())\n console.log('header formats =', timelineView.headerFormats)\n console.log('isTimeScale', timelineView.isTimeScale)\n console.log('largeUnit', timelineView.largeUnit)\n */\n\n let rawSnapDuration = allOptions.snapDuration\n let snapDuration\n let snapsPerSlot\n\n if (rawSnapDuration) {\n snapDuration = createDuration(rawSnapDuration)\n snapsPerSlot = wholeDivideDurations(tDateProfile.slotDuration, snapDuration)\n // ^ TODO: warning if not whole?\n }\n\n if (snapsPerSlot == null) {\n snapDuration = tDateProfile.slotDuration\n snapsPerSlot = 1\n }\n\n tDateProfile.snapDuration = snapDuration\n tDateProfile.snapsPerSlot = snapsPerSlot\n\n // more...\n\n let timeWindowMs = asRoughMs(dateProfile.slotMaxTime) - asRoughMs(dateProfile.slotMinTime)\n\n // TODO: why not use normalizeRange!?\n let normalizedStart = normalizeDate(dateProfile.renderRange.start, tDateProfile, dateEnv)\n let normalizedEnd = normalizeDate(dateProfile.renderRange.end, tDateProfile, dateEnv)\n\n // apply slotMinTime/slotMaxTime\n // TODO: View should be responsible.\n if (tDateProfile.isTimeScale) {\n normalizedStart = dateEnv.add(normalizedStart, dateProfile.slotMinTime)\n normalizedEnd = dateEnv.add(\n addDays(normalizedEnd, -1),\n dateProfile.slotMaxTime,\n )\n }\n\n tDateProfile.timeWindowMs = timeWindowMs\n tDateProfile.normalizedRange = { start: normalizedStart, end: normalizedEnd }\n\n let slotDates = []\n let date = normalizedStart\n while (date < normalizedEnd) {\n if (isValidDate(date, tDateProfile, dateProfile, dateProfileGenerator)) {\n slotDates.push(date)\n }\n date = dateEnv.add(date, tDateProfile.slotDuration)\n }\n\n tDateProfile.slotDates = slotDates\n\n // more...\n\n let snapIndex = -1\n let snapDiff = 0 // index of the diff :(\n const snapDiffToIndex = []\n const snapIndexToDiff = []\n\n date = normalizedStart\n while (date < normalizedEnd) {\n if (isValidDate(date, tDateProfile, dateProfile, dateProfileGenerator)) {\n snapIndex += 1\n snapDiffToIndex.push(snapIndex)\n snapIndexToDiff.push(snapDiff)\n } else {\n snapDiffToIndex.push(snapIndex + 0.5)\n }\n date = dateEnv.add(date, tDateProfile.snapDuration)\n snapDiff += 1\n }\n\n tDateProfile.snapDiffToIndex = snapDiffToIndex\n tDateProfile.snapIndexToDiff = snapIndexToDiff\n\n tDateProfile.snapCnt = snapIndex + 1 // is always one behind\n tDateProfile.slotCnt = tDateProfile.snapCnt / tDateProfile.snapsPerSlot\n\n // more...\n\n tDateProfile.isWeekStarts = buildIsWeekStarts(tDateProfile, dateEnv)\n tDateProfile.cellRows = buildCellRows(tDateProfile, dateEnv)\n tDateProfile.slotsPerLabel = wholeDivideDurations(tDateProfile.labelInterval, tDateProfile.slotDuration)\n\n return tDateProfile\n}\n\n/*\nsnaps to appropriate unit\n*/\nexport function normalizeDate(date: DateMarker, tDateProfile: TimelineDateProfile, dateEnv: DateEnv): DateMarker {\n let normalDate = date\n\n if (!tDateProfile.isTimeScale) {\n normalDate = startOfDay(normalDate)\n\n if (tDateProfile.largeUnit) {\n normalDate = dateEnv.startOf(normalDate, tDateProfile.largeUnit)\n }\n }\n\n return normalDate\n}\n\n/*\nsnaps to appropriate unit\n*/\nexport function normalizeRange(range: DateRange, tDateProfile: TimelineDateProfile, dateEnv: DateEnv): DateRange {\n if (!tDateProfile.isTimeScale) {\n range = computeVisibleDayRange(range)\n\n if (tDateProfile.largeUnit) {\n let dayRange = range // preserve original result\n\n range = {\n start: dateEnv.startOf(range.start, tDateProfile.largeUnit),\n end: dateEnv.startOf(range.end, tDateProfile.largeUnit),\n }\n\n // if date is partially through the interval, or is in the same interval as the start,\n // make the exclusive end be the *next* interval\n if (range.end.valueOf() !== dayRange.end.valueOf() || range.end <= range.start) {\n range = {\n start: range.start,\n end: dateEnv.add(range.end, tDateProfile.slotDuration),\n }\n }\n }\n }\n\n return range\n}\n\nexport function isValidDate(\n date: DateMarker,\n tDateProfile: TimelineDateProfile,\n dateProfile: DateProfile,\n dateProfileGenerator: DateProfileGenerator,\n) {\n if (dateProfileGenerator.isHiddenDay(date)) {\n return false\n }\n\n if (tDateProfile.isTimeScale) {\n // determine if the time is within slotMinTime/slotMaxTime, which may have wacky values\n let day = startOfDay(date)\n let timeMs = date.valueOf() - day.valueOf()\n let ms = timeMs - asRoughMs(dateProfile.slotMinTime) // milliseconds since slotMinTime\n ms = ((ms % 86400000) + 86400000) % 86400000 // make negative values wrap to 24hr clock\n return ms < tDateProfile.timeWindowMs // before the slotMaxTime?\n }\n\n return true\n}\n\nfunction validateLabelAndSlot(tDateProfile: TimelineDateProfile, dateProfile: DateProfile, dateEnv: DateEnv) {\n const { currentRange } = dateProfile\n\n // make sure labelInterval doesn't exceed the max number of cells\n if (tDateProfile.labelInterval) {\n const labelCnt = dateEnv.countDurationsBetween(\n currentRange.start,\n currentRange.end,\n tDateProfile.labelInterval,\n )\n if (labelCnt > config.MAX_TIMELINE_SLOTS) {\n console.warn('slotLabelInterval results in too many cells')\n tDateProfile.labelInterval = null\n }\n }\n\n // make sure slotDuration doesn't exceed the maximum number of cells\n if (tDateProfile.slotDuration) {\n const slotCnt = dateEnv.countDurationsBetween(\n currentRange.start,\n currentRange.end,\n tDateProfile.slotDuration,\n )\n if (slotCnt > config.MAX_TIMELINE_SLOTS) {\n console.warn('slotDuration results in too many cells')\n tDateProfile.slotDuration = null\n }\n }\n\n // make sure labelInterval is a multiple of slotDuration\n if (tDateProfile.labelInterval && tDateProfile.slotDuration) {\n const slotsPerLabel = wholeDivideDurations(tDateProfile.labelInterval, tDateProfile.slotDuration)\n if (slotsPerLabel === null || slotsPerLabel < 1) {\n console.warn('slotLabelInterval must be a multiple of slotDuration')\n tDateProfile.slotDuration = null\n }\n }\n}\n\nfunction ensureLabelInterval(tDateProfile: TimelineDateProfile, dateProfile: DateProfile, dateEnv: DateEnv) {\n const { currentRange } = dateProfile\n let { labelInterval } = tDateProfile\n\n if (!labelInterval) {\n // compute based off the slot duration\n // find the largest label interval with an acceptable slots-per-label\n let input\n if (tDateProfile.slotDuration) {\n for (input of STOCK_SUB_DURATIONS) {\n const tryLabelInterval = createDuration(input)\n const slotsPerLabel = wholeDivideDurations(tryLabelInterval, tDateProfile.slotDuration)\n if (slotsPerLabel !== null && slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL) {\n labelInterval = tryLabelInterval\n break\n }\n }\n\n // use the slot duration as a last resort\n if (!labelInterval) {\n labelInterval = tDateProfile.slotDuration\n }\n\n // compute based off the view's duration\n // find the largest label interval that yields the minimum number of labels\n } else {\n for (input of STOCK_SUB_DURATIONS) {\n labelInterval = createDuration(input)\n const labelCnt = dateEnv.countDurationsBetween(\n currentRange.start,\n currentRange.end,\n labelInterval,\n )\n if (labelCnt >= MIN_AUTO_LABELS) {\n break\n }\n }\n }\n\n tDateProfile.labelInterval = labelInterval\n }\n\n return labelInterval\n}\n\nfunction ensureSlotDuration(tDateProfile: TimelineDateProfile, dateProfile: DateProfile, dateEnv: DateEnv) {\n const { currentRange } = dateProfile\n let { slotDuration } = tDateProfile\n\n if (!slotDuration) {\n const labelInterval = ensureLabelInterval(tDateProfile, dateProfile, dateEnv) // will compute if necessary\n\n // compute based off the label interval\n // find the largest slot duration that is different from labelInterval, but still acceptable\n for (let input of STOCK_SUB_DURATIONS) {\n const trySlotDuration = createDuration(input)\n const slotsPerLabel = wholeDivideDurations(labelInterval, trySlotDuration)\n if (slotsPerLabel !== null && slotsPerLabel > 1 && slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL) {\n slotDuration = trySlotDuration\n break\n }\n }\n\n // only allow the value if it won't exceed the view's # of slots limit\n if (slotDuration) {\n const slotCnt = dateEnv.countDurationsBetween(\n currentRange.start,\n currentRange.end,\n slotDuration,\n )\n if (slotCnt > MAX_AUTO_CELLS) {\n slotDuration = null\n }\n }\n\n // use the label interval as a last resort\n if (!slotDuration) {\n slotDuration = labelInterval\n }\n\n tDateProfile.slotDuration = slotDuration\n }\n\n return slotDuration\n}\n\nfunction computeHeaderFormats(\n tDateProfile: TimelineDateProfile,\n dateProfile: DateProfile,\n dateEnv: DateEnv,\n allOptions: BaseOptionsRefined,\n) {\n let format1\n let format2\n const { labelInterval } = tDateProfile\n let unit = greatestDurationDenominator(labelInterval).unit\n const weekNumbersVisible = allOptions.weekNumbers\n let format0 = (format1 = (format2 = null))\n\n // NOTE: weekNumber computation function wont work\n\n if ((unit === 'week') && !weekNumbersVisible) {\n unit = 'day'\n }\n\n switch (unit) {\n case 'year':\n format0 = { year: 'numeric' } // '2015'\n break\n\n case 'month':\n if (currentRangeAs('years', dateProfile, dateEnv) > 1) {\n format0 = { year: 'numeric' } // '2015'\n }\n\n format1 = { month: 'short' } // 'Jan'\n break\n\n case 'week':\n if (currentRangeAs('years', dateProfile, dateEnv) > 1) {\n format0 = { year: 'numeric' } // '2015'\n }\n\n format1 = { week: 'narrow' } // 'Wk4'\n break\n\n case 'day':\n if (currentRangeAs('years', dateProfile, dateEnv) > 1) {\n format0 = { year: 'numeric', month: 'long' } // 'January 2014'\n } else if (currentRangeAs('months', dateProfile, dateEnv) > 1) {\n format0 = { month: 'long' } // 'January'\n }\n\n if (weekNumbersVisible) {\n format1 = { week: 'short' } // 'Wk 4'\n }\n\n format2 = { weekday: 'narrow', day: 'numeric' } // 'Su 9'\n break\n\n case 'hour':\n if (weekNumbersVisible) {\n format0 = { week: 'short' } // 'Wk 4'\n }\n\n if (currentRangeAs('days', dateProfile, dateEnv) > 1) {\n format1 = { weekday: 'short', day: 'numeric', month: 'numeric', omitCommas: true } // Sat 4/7\n }\n\n format2 = {\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short',\n }\n break\n\n case 'minute':\n // sufficiently large number of different minute cells?\n if ((asRoughMinutes(labelInterval) / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {\n format0 = {\n hour: 'numeric',\n meridiem: 'short',\n }\n format1 = (params) => (\n ':' + padStart(params.date.minute, 2) // ':30'\n )\n } else {\n format0 = {\n hour: 'numeric',\n minute: 'numeric',\n meridiem: 'short',\n }\n }\n break\n\n case 'second':\n // sufficiently large number of different second cells?\n if ((asRoughSeconds(labelInterval) / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {\n format0 = { hour: 'numeric', minute: '2-digit', meridiem: 'lowercase' } // '8:30 PM'\n format1 = (params) => (\n ':' + padStart(params.date.second, 2) // ':30'\n )\n } else {\n format0 = { hour: 'numeric', minute: '2-digit', second: '2-digit', meridiem: 'lowercase' } // '8:30:45 PM'\n }\n break\n\n case 'millisecond':\n format0 = { hour: 'numeric', minute: '2-digit', second: '2-digit', meridiem: 'lowercase' } // '8:30:45 PM'\n format1 = (params) => (\n '.' + padStart(params.millisecond, 3)\n )\n break\n }\n\n return [].concat(format0 || [], format1 || [], format2 || [])\n}\n\n// Compute the number of the give units in the \"current\" range.\n// Won't go more precise than days.\n// Will return `0` if there's not a clean whole interval.\nfunction currentRangeAs(unit: string, dateProfile: DateProfile, dateEnv: DateEnv) {\n let range = dateProfile.currentRange\n let res = null\n\n if (unit === 'years') {\n res = dateEnv.diffWholeYears(range.start, range.end)\n } else if (unit === 'months') {\n res = dateEnv.diffWholeMonths(range.start, range.end)\n } else if (unit === 'weeks') {\n res = dateEnv.diffWholeMonths(range.start, range.end)\n } else if (unit === 'days') {\n res = diffWholeDays(range.start, range.end)\n }\n\n return res || 0\n}\n\nfunction buildIsWeekStarts(tDateProfile: TimelineDateProfile, dateEnv: DateEnv) {\n let { slotDates, emphasizeWeeks } = tDateProfile\n let prevWeekNumber = null\n let isWeekStarts: boolean[] = []\n\n for (let slotDate of slotDates) {\n let weekNumber = dateEnv.computeWeekNumber(slotDate)\n let isWeekStart = emphasizeWeeks && (prevWeekNumber !== null) && (prevWeekNumber !== weekNumber)\n prevWeekNumber = weekNumber\n\n isWeekStarts.push(isWeekStart)\n }\n\n return isWeekStarts\n}\n\nfunction buildCellRows(tDateProfile: TimelineDateProfile, dateEnv: DateEnv) {\n let slotDates = tDateProfile.slotDates\n let formats = tDateProfile.headerFormats\n let cellRows = formats.map(() => []) // indexed by row,col\n let slotAsDays = asCleanDays(tDateProfile.slotDuration)\n let guessedSlotUnit =\n slotAsDays === 7 ? 'week' :\n slotAsDays === 1 ? 'day' :\n null\n\n // specifically for navclicks\n let rowUnitsFromFormats = formats.map(\n (format) => (format.getLargestUnit ? format.getLargestUnit() : null),\n )\n\n // builds cellRows and slotCells\n for (let i = 0; i < slotDates.length; i += 1) {\n let date = slotDates[i]\n let isWeekStart = tDateProfile.isWeekStarts[i]\n\n for (let row = 0; row < formats.length; row += 1) {\n let format = formats[row]\n let rowCells = cellRows[row]\n let leadingCell = rowCells[rowCells.length - 1]\n let isLastRow = row === formats.length - 1\n let isSuperRow = formats.length > 1 && !isLastRow // more than one row and not the last\n let newCell = null\n let rowUnit = rowUnitsFromFormats[row] || (isLastRow ? guessedSlotUnit : null)\n\n if (isSuperRow) {\n let text = dateEnv.format(date, format)\n if (!leadingCell || (leadingCell.text !== text)) {\n newCell = buildCellObject(date, text, rowUnit)\n } else {\n leadingCell.colspan += 1\n }\n } else if (\n !leadingCell ||\n isInt(dateEnv.countDurationsBetween(\n tDateProfile.normalizedRange.start,\n date,\n tDateProfile.labelInterval,\n ))\n ) {\n let text = dateEnv.format(date, format)\n newCell = buildCellObject(date, text, rowUnit)\n } else {\n leadingCell.colspan += 1\n }\n\n if (newCell) {\n newCell.weekStart = isWeekStart\n rowCells.push(newCell)\n }\n }\n }\n\n return cellRows\n}\n\nfunction buildCellObject(date: DateMarker, text, rowUnit): TimelineHeaderCell {\n return { date, text, rowUnit, colspan: 1, isWeekStart: false }\n}\n","import { ViewApi } from '@fullcalendar/core'\nimport {\n BaseComponent, DateRange, DateMarker, getDateMeta, getSlotClassNames,\n buildNavLinkAttrs,\n getDayClassNames, DateProfile, memoizeObjArg, ViewContext, memoize, ContentContainer, DateEnv,\n} from '@fullcalendar/core/internal'\nimport { createElement } from '@fullcalendar/core/preact'\nimport { TimelineDateProfile, TimelineHeaderCell } from './timeline-date-profile.js'\n\nexport interface TimelineHeaderThProps {\n dateProfile: DateProfile\n tDateProfile: TimelineDateProfile\n rowLevel: number\n cell: TimelineHeaderCell\n todayRange: DateRange\n nowDate: DateMarker\n rowInnerHeight?: number\n isSticky: boolean\n}\n\nexport class TimelineHeaderTh extends BaseComponent<TimelineHeaderThProps> {\n private refineRenderProps = memoizeObjArg(refineRenderProps)\n private buildCellNavLinkAttrs = memoize(buildCellNavLinkAttrs)\n\n render() {\n let { props, context } = this\n let { dateEnv, options } = context\n let { cell, dateProfile, tDateProfile } = props\n\n // the cell.rowUnit is f'd\n // giving 'month' for a 3-day view\n // workaround: to infer day, do NOT time\n\n let dateMeta = getDateMeta(cell.date, props.todayRange, props.nowDate, dateProfile)\n let renderProps = this.refineRenderProps({\n level: props.rowLevel,\n dateMarker: cell.date,\n text: cell.text,\n dateEnv: context.dateEnv,\n viewApi: context.viewApi,\n })\n\n return (\n <ContentContainer\n elTag=\"th\"\n elClasses={[\n 'fc-timeline-slot',\n 'fc-timeline-slot-label',\n cell.isWeekStart && 'fc-timeline-slot-em',\n ...( // TODO: so slot classnames for week/month/bigger. see note above about rowUnit\n cell.rowUnit === 'time' ?\n getSlotClassNames(dateMeta, context.theme) :\n getDayClassNames(dateMeta, context.theme)\n ),\n ]}\n elAttrs={{\n colSpan: cell.colspan,\n 'data-date': dateEnv.formatIso(cell.date, {\n omitTime: !tDateProfile.isTimeScale,\n omitTimeZoneOffset: true,\n }),\n }}\n renderProps={renderProps}\n generatorName=\"slotLabelContent\"\n generator={options.slotLabelContent || renderInnerContent}\n classNameGenerator={options.slotLabelClassNames}\n didMount={options.slotLabelDidMount}\n willUnmount={options.slotLabelWillUnmount}\n >\n {(InnerContent) => (\n <div className=\"fc-timeline-slot-frame\" style={{ height: props.rowInnerHeight }}>\n <InnerContent\n elTag=\"a\"\n elClasses={[\n 'fc-timeline-slot-cushion',\n 'fc-scrollgrid-sync-inner',\n props.isSticky && 'fc-sticky',\n ]}\n elAttrs={this.buildCellNavLinkAttrs(context, cell.date, cell.rowUnit)}\n />\n </div>\n )}\n </ContentContainer>\n )\n }\n}\n\nfunction buildCellNavLinkAttrs(context: ViewContext, cellDate: DateMarker, rowUnit: string): any {\n return (rowUnit && rowUnit !== 'time')\n ? buildNavLinkAttrs(context, cellDate, rowUnit)\n : {}\n}\n\nfunction renderInnerContent(renderProps: RenderProps) {\n return renderProps.text\n}\n\n// Render Props\n\nexport interface RenderPropsInput {\n level: number\n dateMarker: DateMarker\n text: string\n dateEnv: DateEnv\n viewApi: ViewApi\n}\n\nexport interface RenderProps {\n level: number\n date: DateMarker // localized\n view: ViewApi\n text: string\n}\n\nexport function refineRenderProps(input: RenderPropsInput): RenderProps {\n return {\n level: input.level,\n date: input.dateEnv.toDate(input.dateMarker),\n view: input.viewApi,\n text: input.text,\n }\n}\n","import { BaseComponent, DateRange, DateMarker, DateProfile } from '@fullcalendar/core/internal'\nimport { createElement, Fragment } from '@fullcalendar/core/preact'\nimport { TimelineDateProfile } from './timeline-date-profile.js'\nimport { TimelineHeaderTh } from './TimelineHeaderTh.js'\n\nexport interface TimelineHeaderRowsProps {\n dateProfile: DateProfile\n tDateProfile: TimelineDateProfile\n nowDate: DateMarker\n todayRange: DateRange\n rowInnerHeights?: number[]\n}\n\nexport class TimelineHeaderRows extends BaseComponent<TimelineHeaderRowsProps> {\n render() {\n let { dateProfile, tDateProfile, rowInnerHeights, todayRange, nowDate } = this.props\n let { cellRows } = tDateProfile\n\n return (\n <Fragment>\n {cellRows.map((rowCells, rowLevel) => {\n let isLast = rowLevel === cellRows.length - 1\n let isChrono = tDateProfile.isTimeScale && isLast // the final row, with times?\n let classNames = [\n 'fc-timeline-header-row',\n isChrono ? 'fc-timeline-header-row-chrono' : '',\n ]\n\n return ( // eslint-disable-next-line react/no-array-index-key\n <tr key={rowLevel} className={classNames.join(' ')}>\n {rowCells.map((cell) => (\n <TimelineHeaderTh\n key={cell.date.toISOString()}\n cell={cell}\n rowLevel={rowLevel}\n dateProfile={dateProfile}\n tDateProfile={tDateProfile}\n todayRange={todayRange}\n nowDate={nowDate}\n rowInnerHeight={rowInnerHeights && rowInnerHeights[rowLevel]}\n isSticky={!isLast}\n />\n ))}\n </tr>\n )\n })}\n </Fragment>\n )\n }\n}\n","import { Duration, CssDimValue } from '@fullcalendar/core'\nimport {\n PositionCache, findDirectChildren,\n isInt, DateProfile,\n DateMarker, DateEnv, startOfDay, rangeContainsMarker, DateRange, SegSpan,\n} from '@fullcalendar/core/internal'\nimport { TimelineDateProfile } from './timeline-date-profile.js'\n\nexport class TimelineCoords { // TODO: rename to \"slat\" coords?\n outerCoordCache: PositionCache\n innerCoordCache: PositionCache\n\n constructor(\n public slatRootEl: HTMLElement, // okay to expose?\n slatEls: HTMLElement[],\n public dateProfile: DateProfile,\n private tDateProfile: TimelineDateProfile,\n private dateEnv: DateEnv,\n public isRtl: boolean,\n ) {\n this.outerCoordCache = new PositionCache(\n slatRootEl,\n slatEls,\n true, // isHorizontal\n false, // isVertical\n )\n\n // for the inner divs within the slats\n // used for event rendering and scrollTime, to disregard slat border\n this.innerCoordCache = new PositionCache(\n slatRootEl,\n findDirectChildren(slatEls, 'div'),\n true, // isHorizontal\n false, // isVertical\n )\n }\n\n isDateInRange(date: DateMarker) {\n return rangeContainsMarker(this.dateProfile.currentRange, date)\n }\n\n // results range from negative width of area to 0\n dateToCoord(date: DateMarker): number {\n let { tDateProfile } = this\n let snapCoverage = this.computeDateSnapCoverage(date)\n let slotCoverage = snapCoverage / tDateProfile.snapsPerSlot\n let slotIndex = Math.floor(slotCoverage)\n slotIndex = Math.min(slotIndex, tDateProfile.slotCnt - 1)\n let partial = slotCoverage - slotIndex\n let { innerCoordCache, outerCoordCache } = this\n\n if (this.isRtl) {\n return outerCoordCache.originClientRect.width - (\n outerCoordCache.rights[slotIndex] -\n (innerCoordCache.getWidth(slotIndex) * partial)\n )\n }\n\n return (\n outerCoordCache.lefts[slotIndex] +\n (innerCoordCache.getWidth(slotIndex) * partial)\n )\n }\n\n rangeToCoords(range: DateRange): SegSpan {\n return {\n start: this.dateToCoord(range.start),\n end: this.dateToCoord(range.end),\n }\n }\n\n durationToCoord(duration: Duration): number {\n let { dateProfile, tDateProfile, dateEnv, isRtl } = this\n let coord = 0\n\n if (dateProfile) {\n let date = dateEnv.add(dateProfile.activeRange.start, duration)\n\n if (!tDateProfile.isTimeScale) {\n date = startOfDay(date)\n }\n\n coord = this.dateToCoord(date)\n\n // hack to overcome the left borders of non-first slat\n if (!isRtl && coord) {\n coord += 1\n }\n }\n\n return coord\n }\n\n coordFromLeft(coord: number) {\n if (this.isRtl) {\n return this.outerCoordCache.originClientRect.width - coord\n }\n return coord\n }\n\n // returned value is between 0 and the number of snaps\n computeDateSnapCoverage(date: DateMarker): number {\n return computeDateSnapCoverage(date, this.tDateProfile, this.dateEnv)\n }\n}\n\n// returned value is between 0 and the number of snaps\nexport function computeDateSnapCoverage(date: DateMarker, tDateProfile: TimelineDateProfile, dateEnv: DateEnv): number {\n let snapDiff = dateEnv.countDurationsBetween(\n tDateProfile.normalizedRange.start,\n date,\n tDateProfile.snapDuration,\n )\n\n if (snapDiff < 0) {\n return 0\n }\n\n if (snapDiff >= tDateProfile.snapDiffToIndex.length) {\n return tDateProfile.snapCnt\n }\n\n let snapDiffInt = Math.floor(snapDiff)\n let snapCoverage = tDateProfile.snapDiffToIndex[snapDiffInt]\n\n if (isInt(snapCoverage)) { // not an in-between value\n snapCoverage += snapDiff - snapDiffInt // add the remainder\n } else {\n // a fractional value, meaning the date is not visible\n // always round up in this case. works for start AND end dates in a range.\n snapCoverage = Math.ceil(snapCoverage)\n }\n\n return snapCoverage\n}\n\nexport function coordToCss(\n hcoord: number | null,\n isRtl: boolean,\n): { left: CssDimValue, right: CssDimValue } {\n if (hcoord === null) {\n return { left: '', right: '' }\n }\n if (isRtl) {\n return { right: hcoord, left: '' }\n }\n return { left: hcoord, right: '' }\n}\n\nexport function coordsToCss(\n hcoords: SegSpan | null,\n isRtl: boolean,\n): { left: CssDimValue, right: CssDimValue } {\n if (!hcoords) {\n return { left: '', right: '' }\n }\n if (isRtl) {\n return { right: hcoords.start, left: -hcoords.end }\n }\n return { left: hcoords.start, right: -hcoords.end }\n}\n","import { CssDimValue } from '@fullcalendar/core'\nimport {\n BaseComponent, DateMarker, NowTimer,\n greatestDurationDenominator, DateRange, NowIndicatorContainer,\n findElements, DateProfile,\n} from '@fullcalendar/core/internal'\nimport { createElement, VNode, createRef, RefObject } from '@fullcalendar/core/preact'\nimport { TimelineHeaderRows } from './TimelineHeaderRows.js'\nimport { coordToCss, TimelineCoords } from './TimelineCoords.js'\nimport { TimelineDateProfile } from './timeline-date-profile.js'\n\nexport interface TimelineHeaderProps {\n dateProfile: DateProfile\n tDateProfile: TimelineDateProfile\n clientWidth: number | null\n clientHeight: number | null\n tableMinWidth: CssDimValue\n tableColGroupNode: VNode\n slatCoords: TimelineCoords\n rowInnerHeights?: number[]\n onMaxCushionWidth?: (number) => void\n}\n\nexport class TimelineHeader extends BaseComponent<TimelineHeaderProps> {\n rootElRef: RefObject<HTMLDivElement> = createRef<HTMLDivElement>()\n\n render() {\n let { props, context } = this\n\n // TODO: very repetitive\n // TODO: make part of tDateProfile?\n let timerUnit = greatestDurationDenominator(props.tDateProfile.slotDuration).unit\n\n // WORKAROUND: make ignore slatCoords when out of sync with dateProfile\n let slatCoords = props.slatCoords && props.slatCoords.dateProfile === props.dateProfile ? props.slatCoords : null\n\n return (\n <NowTimer unit={timerUnit}>\n {(nowDate: DateMarker, todayRange: DateRange) => (\n <div className=\"fc-timeline-header\" ref={this.rootElRef}>\n <table\n aria-hidden\n className=\"fc-scrollgrid-sync-table\"\n style={{ minWidth: props.tableMinWidth, width: props.clientWidth }}\n >\n {props.tableColGroupNode}\n <tbody>\n <TimelineHeaderRows\n dateProfile={props.dateProfile}\n tDateProfile={props.tDateProfile}\n nowDate={nowDate}\n todayRange={todayRange}\n rowInnerHeights={props.rowInnerHeights}\n />\n </tbody>\n </table>\n {context.options.nowIndicator && (\n // need to have a container regardless of whether the current view has a visible now indicator\n // because apparently removal of the element resets the scroll for some reasons (issue #5351).\n // this issue doesn't happen for the timeline body however (\n <div className=\"fc-timeline-now-indicator-container\">\n {(slatCoords && slatCoords.isDateInRange(nowDate)) && (\n <NowIndicatorContainer\n elClasses={['fc-timeline-now-indicator-arrow']}\n elStyle={coordToCss(slatCoords.dateToCoord(nowDate), context.isRtl)}\n isAxis\n date={nowDate}\n />\n )}\n </div>\n )}\n </div>\n )}\n </NowTimer>\n )\n }\n\n componentDidMount() {\n this.updateSize()\n }\n\n componentDidUpdate() {\n this.updateSize()\n }\n\n updateSize() {\n if (this.props.onMaxCushionWidth) {\n this.props.onMaxCushionWidth(this.computeMaxCushionWidth())\n }\n }\n\n computeMaxCushionWidth() { // TODO: called way too often\n return Math.max(\n ...findElements(this.rootElRef.current, '.fc-timeline-header-row:last-child .fc-timeline-slot-cushion').map(\n (el) => el.getBoundingClientRect().width,\n ),\n )\n }\n}\n","import { SlotLaneContentArg } from '@fullcalendar/core'\nimport {\n isInt, BaseComponent, DateMarker, DateRange, getDateMeta, getSlotClassNames,\n getDayClassNames, DateProfile, ContentContainer,\n} from '@fullcalendar/core/internal'\nimport { createElement, Ref } from '@fullcalendar/core/preact'\nimport { TimelineDateProfile } from './timeline-date-profile.js'\n\nexport interface TimelineSlatCellProps {\n elRef?: Ref<HTMLTableCellElement>\n date: DateMarker\n dateProfile: DateProfile\n tDateProfile: TimelineDateProfile\n nowDate: DateMarker\n todayRange: DateRange\n isDay: boolean\n isEm: boolean\n}\n\nexport class TimelineSlatCell extends BaseComponent<TimelineSlatCellProps> {\n render() {\n let { props, context } = this\n let { dateEnv, options, theme } = context\n let { date, tDateProfile, isEm } = props\n let dateMeta = getDateMeta(props.date, props.todayRange, props.nowDate, props.dateProfile)\n let renderProps: SlotLaneContentArg = {\n date: dateEnv.toDate(props.date),\n ...dateMeta,\n view: context.viewApi,\n }\n\n return (\n <ContentContainer\n elTag=\"td\"\n elRef={props.elRef}\n elClasses={[\n 'fc-timeline-slot',\n 'fc-timeline-slot-lane',\n isEm && 'fc-timeline-slot-em',\n tDateProfile.isTimeScale ? (\n isInt(dateEnv.countDurationsBetween(\n tDateProfile.normalizedRange.start,\n props.date,\n tDateProfile.labelInterval,\n )) ?\n 'fc-timeline-slot-major' :\n 'fc-timeline-slot-minor'\n ) : '',\n ...(\n props.isDay ?\n getDayClassNames(dateMeta, theme) :\n getSlotClassNames(dateMeta, theme)\n ),\n ]}\n elAttrs={{\n 'data-date': dateEnv.formatIso(date, {\n omitTimeZoneOffset: true,\n omitTime: !tDateProfile.isTimeScale,\n }),\n }}\n renderProps={renderProps}\n generatorName=\"slotLaneContent\"\n generator={options.slotLaneContent}\n classNameGenerator={options.slotLaneClassNames}\n didMount={options.slotLaneDidMount}\n willUnmount={options.slotLaneWillUnmount}\n >\n {(InnerContent) => (\n <InnerContent elTag=\"div\" />\n )}\n </ContentContainer>\n )\n }\n}\n","import { BaseComponent, RefMap, DateMarker, DateRange, DateProfile } from '@fullcalendar/core/internal'\nimport { createElement } from '@fullcalendar/core/preact'\nimport { TimelineDateProfile } from './timeline-date-profile.js'\nimport { TimelineSlatCell } from './TimelineSlatCell.js'\n\nexport interface TimelineSlatsContentProps {\n dateProfile: DateProfile\n tDateProfile: TimelineDateProfile\n nowDate: DateMarker\n todayRange: DateRange\n}\n\nexport interface TimelineSlatsBodyProps extends TimelineSlatsContentProps {\n cellElRefs: RefMap<HTMLTableCellElement>\n}\n\nexport class TimelineSlatsBody extends BaseComponent<TimelineSlatsBodyProps> {\n render() {\n let { props } = this\n let { tDateProfile, cellElRefs } = props\n let { slotDates, isWeekStarts } = tDateProfile\n let isDay = !tDateProfile.isTimeScale && !tDateProfile.largeUnit\n\n return (\n <tbody>\n <tr>\n {slotDates.map((slotDate, i) => {\n let key = slotDate.toISOString()\n\n return (\n <TimelineSlatCell\n key={key}\n elRef={cellElRefs.createRef(key)}\n date={slotDate}\n dateProfile={props.dateProfile}\n tDateProfile={tDateProfile}\n nowDate={props.nowDate}\n todayRange={props.todayRange}\n isEm={isWeekStarts[i]}\n isDay={isDay}\n />\n )\n })}\n </tr>\n </tbody>\n )\n }\n}\n","import { CssDimValue } from '@fullcalendar/core'\nimport {\n BaseComponent, multiplyDuration, RefMap,\n ScrollResponder, ScrollRequest, DateMarker,\n} from '@fullcalendar/core/internal'\nimport { createElement, createRef, VNode } from '@fullcalendar/core/preact'\nimport { TimelineCoords } from './TimelineCoords.js'\nimport { TimelineSlatsBody, TimelineSlatsContentProps } from './TimelineSlatsBody.js'\n\nexport interface TimelineSlatsProps extends TimelineSlatsContentProps {\n clientWidth: number | null\n tableMinWidth: CssDimValue\n tableColGroupNode: VNode\n onCoords?: (coord: TimelineCoords | null) => void\n onScrollLeftRequest?: (scrollLeft: number) => void\n}\n\nexport class TimelineSlats extends BaseComponent<TimelineSlatsProps> {\n private rootElRef = createRef<HTMLDivElement>()\n private cellElRefs = new RefMap<HTMLTableCellElement>()\n private coords: TimelineCoords // for positionToHit\n private scrollResponder: ScrollResponder\n\n render() {\n let { props, context } = this\n\n return (\n <div className=\"fc-timeline-slots\" ref={this.rootElRef}>\n <table\n aria-hidden\n className={context.theme.getClass('table')}\n style={{\n minWidth: props.tableMinWidth,\n width: props.clientWidth,\n }}\n >\n {props.tableColGroupNode}\n <TimelineSlatsBody\n cellElRefs={this.cellElRefs}\n dateProfile={props.dateProfile}\n tDateProfile={props.tDateProfile}\n nowDate={props.nowDate}\n todayRange={props.todayRange}\n />\n </table>\n </div>\n )\n }\n\n componentDidMount() {\n this.updateSizing()\n this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest)\n }\n\n componentDidUpdate(prevProps: TimelineSlatsProps) {\n this.updateSizing()\n\n this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile)\n }\n\n componentWillUnmount() {\n this.scrollResponder.detach()\n\n if (this.props.onCoords) {\n this.props.onCoords(null)\n }\n }\n\n updateSizing() {\n let { props, context } = this\n\n if (\n props.clientWidth !== null && // is sizing stable?\n this.scrollResponder\n // ^it's possible to have clientWidth immediately after mount (when returning from print view), but w/o scrollResponder\n ) {\n let rootEl = this.rootElRef.current\n\n if (rootEl.offsetWidth) { // not hidden by css\n this.coords = new TimelineCoords(\n this.rootElRef.current,\n collectCellEls(this.cellElRefs.currentMap, props.tDateProfile.slotDates),\n props.dateProfile,\n props.tDateProfile,\n context.dateEnv,\n context.isRtl,\n )\n\n if (props.onCoords) {\n props.onCoords(this.coords)\n }\n\n this.scrollResponder.update(false) // TODO: wouldn't have to do this if coords were in state\n }\n }\n }\n\n handleScrollRequest = (request: ScrollRequest) => {\n let { onScrollLeftRequest } = this.props\n let { coords } = this\n\n if (onScrollLeftRequest && coords) {\n if (request.time) {\n let scrollLeft = coords.coordFromLeft(coords.durationToCoord(request.time))\n onScrollLeftRequest(scrollLeft)\n }\n return true\n }\n\n return null // best?\n }\n\n positionToHit(leftPosition) { // TODO: kill somehow\n let { outerCoordCache } = this.coords\n let { dateEnv, isRtl } = this.context\n let { tDateProfile } = this.props\n let slatIndex = outerCoordCache.leftToIndex(leftPosition)\n\n if (slatIndex != null) {\n // somewhat similar to what TimeGrid does. consolidate?\n let slatWidth = outerCoordCache.getWidth(slatIndex)\n let partial = isRtl ?\n (outerCoordCache.rights[slatIndex] - leftPosition) / slatWidth :\n (leftPosition - outerCoordCache.lefts[slatIndex]) / slatWidth\n let localSnapIndex = Math.floor(partial * tDateProfile.snapsPerSlot)\n let start = dateEnv.add(\n tDateProfile.slotDates[slatIndex],\n multiplyDuration(tDateProfile.snapDuration, localSnapIndex),\n )\n let end = dateEnv.add(start, tDateProfile.snapDuration)\n\n return {\n dateSpan: {\n range: { start, end },\n allDay: !this.props.tDateProfile.isTimeScale,\n },\n dayEl: this.cellElRefs.currentMap[slatIndex],\n left: outerCoordCache.lefts[slatIndex], // TODO: make aware of snaps?\n right: outerCoordCache.rights[slatIndex],\n }\n }\n\n return null\n }\n}\n\nfunction collectCellEls(elMap: { [key: string]: HTMLElement }, slotDates: DateMarker[]) {\n return slotDates.map((slotDate) => {\n let key = slotDate.toISOString()\n return elMap[key]\n })\n}\n","import {\n SegSpan, SegHierarchy, groupIntersectingEntries, SegEntry, buildIsoString,\n computeEarliestSegStart,\n} from '@fullcalendar/core/internal'\nimport { TimelineCoords } from './TimelineCoords.js'\nimport { TimelineLaneSeg } from './TimelineLaneSlicer.js'\n\nexport interface TimelineSegPlacement {\n seg: TimelineLaneSeg | TimelineLaneSeg[] // HACK: if array, then it's a more-link group\n hcoords: SegSpan | null\n top: number | null\n}\n\nexport function computeSegHCoords(\n segs: TimelineLaneSeg[],\n minWidth: number,\n timelineCoords: TimelineCoords | null,\n): SegSpan[] {\n let hcoords: SegSpan[] = []\n\n if (timelineCoords) {\n for (let seg of segs) {\n let res = timelineCoords.rangeToCoords(seg)\n let start = Math.round(res.start) // for barely-overlapping collisions\n let end = Math.round(res.end) //\n\n if (end - start < minWidth) {\n end = start + minWidth\n }\n\n hcoords.push({ start, end })\n }\n }\n\n return hcoords\n}\n\nexport function computeFgSegPlacements(\n segs: TimelineLaneSeg[],\n segHCoords: SegSpan[], // might not have for every seg\n eventInstanceHeights: { [instanceId: string]: number }, // might not have for every seg\n moreLinkHeights: { [isoStr: string]: number }, // might not have for every more-link\n strictOrder?: boolean,\n maxStackCnt?: number,\n): [TimelineSegPlacement[], number] { // [placements, totalHeight]\n let segInputs: SegEntry[] = []\n let crudePlacements: TimelineSegPlacement[] = [] // when we don't know dims\n\n for (let i = 0; i < segs.length; i += 1) {\n let seg = segs[i]\n let instanceId = seg.eventRange.instance.instanceId\n let height = eventInstanceHeights[instanceId]\n let hcoords = segHCoords[i]\n\n if (height && hcoords) {\n segInputs.push({\n index: i,\n span: hcoords,\n thickness: height,\n })\n } else {\n crudePlacements.push({\n seg,\n hcoords, // might as well set hcoords if we have them. might be null\n top: null,\n })\n }\n }\n\n let hierarchy = new SegHierarchy()\n if (strictOrder != null) {\n hierarchy.strictOrder = strictOrder\n }\n if (maxStackCnt != null) {\n hierarchy.maxStackCnt = maxStackCnt\n }\n\n let hiddenEntries = hierarchy.addSegs(segInputs)\n let hiddenPlacements = hiddenEntries.map((entry) => ({\n seg: segs[entry.index],\n hcoords: entry.span,\n top: null,\n } as TimelineSegPlacement))\n\n let hiddenGroups = groupIntersectingEntries(hiddenEntries)\n let moreLinkInputs: SegEntry[] = []\n let moreLinkCrudePlacements: TimelineSegPlacement[] = []\n const extractSeg = (entry: SegEntry) => segs[entry.index]\n\n for (let i = 0; i < hiddenGroups.length; i += 1) {\n let hiddenGroup = hiddenGroups[i]\n let sortedSegs = hiddenGroup.entries.map(extractSeg)\n let height = moreLinkHeights[buildIsoString(computeEarliestSegStart(sortedSegs))] // not optimal :(\n\n if (height != null) {\n // NOTE: the hiddenGroup's spanStart/spanEnd are already computed by rangeToCoords. computed during input.\n moreLinkInputs.push({\n index: segs.length + i, // out-of-bounds indexes map to hiddenGroups\n thickness: height,\n span: hiddenGroup.span,\n })\n } else {\n moreLinkCrudePlacements.push({\n seg: sortedSegs, // a Seg array signals a more-link\n hcoords: hiddenGroup.span,\n top: null,\n })\n }\n }\n\n // add more-links into the hierarchy, but don't limit\n hierarchy.maxStackCnt = -1\n hierarchy.addSegs(moreLinkInputs)\n\n let visibleRects = hierarchy.toRects()\n let visiblePlacements: TimelineSegPlacement[] = []\n let maxHeight = 0\n\n for (let rect of visibleRects) {\n let segIndex = rect.index\n visiblePlacements.push({\n seg: segIndex < segs.length\n ? segs[segIndex] // a real seg\n : hiddenGroups[segIndex - segs.length].entries.map(extractSeg), // signals a more-link\n hcoords: rect.span,\n top: rect.levelCoord,\n })\n maxHeight = Math.max(maxHeight, rect.levelCoord + rect.thickness)\n }\n\n return [\n visiblePlacements.concat(crudePlacements, hiddenPlacements, moreLinkCrudePlacements),\n maxHeight,\n ]\n}\n","import {\n BaseComponent, BgEvent, renderFill,\n getSegMeta, DateRange, DateMarker, buildEventRangeKey,\n} from '@fullcalendar/core/internal'\nimport { createElement, Fragment } from '@fullcalendar/core/preact'\nimport { computeSegHCoords } from './event-placement.js'\nimport { coordsToCss, TimelineCoords } from './TimelineCoords.js'\nimport { TimelineLaneSeg } from './TimelineLaneSlicer.js'\n\nexport interface TimelineLaneBgProps {\n businessHourSegs: TimelineLaneSeg[] | null // can be null :(\n bgEventSegs: TimelineLaneSeg[] | null // can be null :(\n dateSelectionSegs: TimelineLaneSeg[]\n eventResizeSegs: TimelineLaneSeg[]\n timelineCoords: TimelineCoords | null\n todayRange: DateRange\n nowDate: DateMarker\n}\n\nexport class TimelineLaneBg extends BaseComponent<TimelineLaneBgProps> {\n render() {\n let { props } = this\n let highlightSeg = [].concat(props.eventResizeSegs, props.dateSelectionSegs)\n\n return props.timelineCoords && (\n <div className=\"fc-timeline-bg\">\n {/* Fragments contain the keys */}\n {this.renderSegs(props.businessHourSegs || [], props.timelineCoords, 'non-business')}\n {this.renderSegs(props.bgEventSegs || [], props.timelineCoords, 'bg-event')}\n {this.renderSegs(highlightSeg, props.timelineCoords, 'highlight')}\n </div>\n )\n }\n\n renderSegs(segs: TimelineLaneSeg[], timelineCoords: TimelineCoords | null, fillType: string) {\n let { todayRange, nowDate } = this.props\n let { isRtl } = this.context\n let segHCoords = computeSegHCoords(segs, 0, timelineCoords)\n\n let children = segs.map((seg, i) => {\n let hcoords = segHCoords[i]\n let hStyle = coordsToCss(hcoords, isRtl)\n\n return (\n <div\n key={buildEventRangeKey(seg.eventRange)}\n className=\"fc-timeline-bg-harness\"\n style={hStyle}\n >\n {fillType === 'bg-event' ?\n <BgEvent seg={seg} {...getSegMeta(seg, todayRange, nowDate)} /> :\n renderFill(fillType)}\n </div>\n )\n })\n\n return <Fragment>{children}</Fragment>\n }\n}\n","import {\n DateRange, intersectRanges, addMs, DateProfile, Slicer,\n DateProfileGenerator, DateEnv, DateMarker, Seg,\n} from '@fullcalendar/core/internal'\nimport { normalizeRange, isValidDate, TimelineDateProfile } from './timeline-date-profile.js'\nimport { computeDateSnapCoverage } from './TimelineCoords.js'\n\nexport interface TimelineLaneSeg extends Seg {\n // the point of this range is because it might be different than seg.eventRange.range\n // because the date might have been rounded to the start of a week or a month\n start: DateMarker\n end: DateMarker\n}\n\nexport class TimelineLaneSlicer extends Slicer<\n TimelineLaneSeg,\n [DateProfile, DateProfileGenerator, TimelineDateProfile, DateEnv]\n> {\n sliceRange(\n origRange: DateRange,\n dateProfile: DateProfile,\n dateProfileGenerator: DateProfileGenerator,\n tDateProfile: TimelineDateProfile,\n dateEnv: DateEnv,\n ): TimelineLaneSeg[] {\n let normalRange = normalizeRange(origRange, tDateProfile, dateEnv)\n let segs: TimelineLaneSeg[] = []\n\n // protect against when the span is entirely in an invalid date region\n if (\n computeDateSnapCoverage(normalRange.start, tDateProfile, dateEnv)\n < computeDateSnapCoverage(normalRange.end, tDateProfile, dateEnv)\n ) {\n // intersect the footprint's range with the grid's range\n let slicedRange = intersectRanges(normalRange, tDateProfile.normalizedRange)\n\n if (slicedRange) {\n segs.push({\n start: slicedRange.start,\n end: slicedRange.end,\n isStart: slicedRange.start.valueOf() === normalRange.start.valueOf()\n && isValidDate(slicedRange.start, tDateProfile, dateProfile, dateProfileGenerator),\n isEnd: slicedRange.end.valueOf() === normalRange.end.valueOf()\n && isValidDate(addMs(slicedRange.end, -1), tDateProfile, dateProfile, dateProfileGenerator),\n })\n }\n }\n\n return segs\n }\n}\n","import { StandardEvent, MinimalEventProps, BaseComponent, createFormatter } from '@fullcalendar/core/internal'\nimport { createElement } from '@fullcalendar/core/preact'\n\nexport interface TimelineEventProps extends MinimalEventProps {\n isTimeScale: boolean\n}\n\nconst DEFAULT_TIME_FORMAT = createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'narrow',\n})\n\nexport class TimelineEvent extends BaseComponent<TimelineEventProps> {\n render() {\n let { props } = this\n\n return (\n <StandardEvent\n {...props}\n elClasses={['fc-timeline-event', 'fc-h-event']}\n defaultTimeFormat={DEFAULT_TIME_FORMAT}\n defaultDisplayEventTime={!props.isTimeScale}\n />\n )\n }\n}\n","import {\n BaseComponent, MoreLinkContainer,\n DateProfile, DateRange, DateMarker, getSegMeta,\n} from '@fullcalendar/core/internal'\nimport { createElement, Ref, Fragment } from '@fullcalendar/core/preact'\nimport { TimelineSegPlacement } from './event-placement.js'\nimport { coordsToCss } from './TimelineCoords.js'\nimport { TimelineEvent } from './TimelineEvent.js'\nimport { TimelineLaneSeg } from './TimelineLaneSlicer.js'\n\nexport interface TimelineLaneMoreLinkProps {\n elRef: Ref<HTMLElement>\n hiddenSegs: TimelineLaneSeg[]\n placement: TimelineSegPlacement\n dateProfile: DateProfile\n nowDate: DateMarker\n todayRange: DateRange\n isTimeScale: boolean\n eventSelection: string\n resourceId?: string\n isForcedInvisible: { [instanceId: string]: any }\n}\n\nexport class TimelineLaneMoreLink extends BaseComponent<TimelineLaneMoreLinkProps> {\n render() {\n let { props, context } = this\n let { hiddenSegs, placement, resourceId } = props\n let { top, hcoords } = placement\n let isVisible = hcoords && top !== null\n let hStyle = coordsToCss(hcoords, context.isRtl)\n let extraDateSpan = resourceId ? { resourceId } : {}\n\n return (\n <MoreLinkContainer\n elRef={props.elRef}\n elClasses={['fc-timeline-more-link']}\n elStyle={{\n visibility: isVisible ? '' : 'hidden',\n top: top || 0,\n ...hStyle,\n }}\n allDayDate={null}\n moreCnt={hiddenSegs.length}\n allSegs={hiddenSegs}\n hiddenSegs={hiddenSegs}\n dateProfile={props.dateProfile}\n todayRange={props.todayRange}\n extraDateSpan={extraDateSpan}\n popoverContent={() => (\n <Fragment>\n {hiddenSegs.map((seg) => {\n let instanceId = seg.eventRange.instance.instanceId\n return (\n <div\n key={instanceId}\n style={{ visibility: props.isForcedInvisible[instanceId] ? 'hidden' : '' }}\n >\n <TimelineEvent\n isTimeScale={props.isTimeScale}\n seg={seg}\n isDragging={false}\n isResizing={false}\n isDateSelecting={false}\n isSelected={instanceId === props.eventSelection}\n {...getSegMeta(seg, props.todayRange, props.nowDate)}\n />\n </div>\n )\n })}\n </Fragment>\n )}\n >\n {(InnerContent) => (\n <InnerContent\n elTag=\"div\"\n elClasses={['fc-timeline-more-link-inner', 'fc-sticky']}\n />\n )}\n </MoreLinkContainer>\n )\n }\n}\n","import { Duration } from '@fullcalendar/core'\nimport {\n EventStore, EventUiHash, DateSpan, EventInteractionState,\n BaseComponent, memoize, RefMap, mapHash,\n getSegMeta, DateMarker, DateRange, DateProfile, sortEventSegs, isPropsEqual, buildIsoString,\n computeEarliestSegStart,\n} from '@fullcalendar/core/internal'\nimport { createElement, createRef, Fragment } from '@fullcalendar/core/preact'\nimport { TimelineDateProfile } from './timeline-date-profile.js'\nimport { coordsToCss, TimelineCoords } from './TimelineCoords.js'\nimport { TimelineLaneBg } from './TimelineLaneBg.js'\nimport { TimelineLaneSlicer, TimelineLaneSeg } from './TimelineLaneSlicer.js'\nimport { TimelineEvent } from './TimelineEvent.js'\nimport { TimelineLaneMoreLink } from './TimelineLaneMoreLink.js'\nimport { computeFgSegPlacements, computeSegHCoords, TimelineSegPlacement } from './event-placement.js'\n\nexport interface TimelineLaneProps extends TimelineLaneCoreProps {\n onHeightChange?: (innerEl: HTMLElement, isStable: boolean) => void\n}\n\nexport interface TimelineLaneCoreProps {\n nowDate: DateMarker\n todayRange: DateRange\n dateProfile: DateProfile\n tDateProfile: TimelineDateProfile\n nextDayThreshold: Duration\n businessHours: EventStore | null\n eventStore: EventStore | null\n eventUiBases: EventUiHash\n dateSelection: DateSpan | null\n eventSelection: string\n eventDrag: EventInteractionState | null\n eventResize: EventInteractionState | null\n timelineCoords: TimelineCoords | null // TODO: renamt to SLAT coords?\n resourceId?: string // hack\n syncParentMinHeight?: boolean // hack\n}\n\ninterface TimelineLaneState {\n eventInstanceHeights: { [instanceId: string]: number } // integers\n moreLinkHeights: { [isoStr: string]: number } // integers\n}\n\nexport class TimelineLane extends BaseComponent<TimelineLaneProps, TimelineLaneState> {\n private slicer = new TimelineLaneSlicer()\n private sortEventSegs = memoize(sortEventSegs)\n private harnessElRefs = new RefMap<HTMLDivElement>()\n private moreElRefs = new RefMap<HTMLDivElement>()\n private innerElRef = createRef<HTMLDivElement>()\n // TODO: memoize event positioning\n\n state: TimelineLaneState = {\n eventInstanceHeights: {},\n moreLinkHeights: {},\n }\n\n render() {\n let { props, state, context } = this\n let { options } = context\n let { dateProfile, tDateProfile } = props\n\n let slicedProps = this.slicer.sliceProps(\n props,\n dateProfile,\n tDateProfile.isTimeScale ? null : props.nextDayThreshold,\n context, // wish we didn't have to pass in the rest of the args...\n dateProfile,\n context.dateProfileGenerator,\n tDateProfile,\n context.dateEnv,\n )\n\n let mirrorSegs =\n (slicedProps.eventDrag ? slicedProps.eventDrag.segs as TimelineLaneSeg[] : null) ||\n (slicedProps.eventResize ? slicedProps.eventResize.segs as TimelineLaneSeg[] : null) ||\n []\n\n let fgSegs = this.sortEventSegs(slicedProps.fgEventSegs, options.eventOrder) as TimelineLaneSeg[]\n let fgSegHCoords = computeSegHCoords(fgSegs, options.eventMinWidth, props.timelineCoords)\n let [fgPlacements, fgHeight] = computeFgSegPlacements(\n fgSegs,\n fgSegHCoords,\n state.eventInstanceHeights,\n state.moreLinkHeights,\n options.eventOrderStrict,\n options.eventMaxStack,\n )\n\n let isForcedInvisible = // TODO: more convenient\n (slicedProps.eventDrag ? slicedProps.eventDrag.affectedInstances : null) ||\n (slicedProps.eventResize ? slicedProps.eventResize.affectedInstances : null) ||\n {}\n\n return (\n <Fragment>\n <TimelineLaneBg\n businessHourSegs={slicedProps.businessHourSegs}\n bgEventSegs={slicedProps.bgEventSegs}\n timelineCoords={props.timelineCoords}\n eventResizeSegs={slicedProps.eventResize ? slicedProps.eventResize.segs as TimelineLaneSeg[] : [] /* bad new empty array? */}\n dateSelectionSegs={slicedProps.dateSelectionSegs}\n nowDate={props.nowDate}\n todayRange={props.todayRange}\n />\n <div\n className=\"fc-timeline-events fc-scrollgrid-sync-inner\"\n ref={this.innerElRef}\n style={{ height: fgHeight }}\n >\n {this.renderFgSegs(\n fgPlacements,\n isForcedInvisible,\n false,\n false,\n false,\n )}\n {this.renderFgSegs(\n buildMirrorPlacements(mirrorSegs, props.timelineCoords, fgPlacements),\n {},\n Boolean(slicedProps.eventDrag),\n Boolean(slicedProps.eventResize),\n false, // because mirror is never drawn for date selection\n )}\n </div>\n </Fragment>\n )\n }\n\n componentDidMount() {\n this.updateSize()\n this.context.addResizeHandler(this.handleResize)\n }\n\n componentDidUpdate(prevProps: TimelineLaneProps, prevState: TimelineLaneState) {\n if (\n prevProps.eventStore !== this.props.eventStore || // external thing changed?\n prevProps.timelineCoords !== this.props.timelineCoords || // external thing changed?\n prevState.moreLinkHeights !== this.state.moreLinkHeights // HACK. see addStateEquality\n ) {\n this.updateSize()\n }\n }\n\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleResize)\n }\n\n handleResize = (isForced: boolean) => {\n if (isForced) {\n this.updateSize()\n }\n }\n\n updateSize() {\n let { props } = this\n let { timelineCoords } = props\n const innerEl = this.innerElRef.current\n\n if (props.onHeightChange) {\n props.onHeightChange(innerEl, false)\n }\n\n if (timelineCoords) {\n this.setState({\n eventInstanceHeights: mapHash(this.harnessElRefs.currentMap, (harnessEl) => (\n Math.round(harnessEl.getBoundingClientRect().height)\n )),\n moreLinkHeights: mapHash(this.moreElRefs.currentMap, (moreEl) => (\n Math.round(moreEl.getBoundingClientRect().height)\n )),\n }, () => {\n if (props.onHeightChange) {\n props.onHeightChange(innerEl, true)\n }\n })\n }\n\n // hack\n if (props.syncParentMinHeight) {\n innerEl.parentElement.style.minHeight = innerEl.style.height\n }\n }\n\n renderFgSegs(\n segPlacements: TimelineSegPlacement[],\n isForcedInvisible: { [instanceId: string]: any },\n isDragging: boolean,\n isResizing: boolean,\n isDateSelecting: boolean,\n ) {\n let { harnessElRefs, moreElRefs, props, context } = this\n let isMirror = isDragging || isResizing || isDateSelecting\n\n return (\n <Fragment>\n {segPlacements.map((segPlacement) => {\n let { seg, hcoords, top } = segPlacement\n\n if (Array.isArray(seg)) { // a more-link\n let isoStr = buildIsoString(computeEarliestSegStart(seg))\n return (\n <TimelineLaneMoreLink\n key={'m:' + isoStr /* \"m\" for \"more\" */}\n elRef={moreElRefs.createRef(isoStr)}\n hiddenSegs={seg}\n placement={segPlacement}\n dateProfile={props.dateProfile}\n nowDate={props.nowDate}\n todayRange={props.todayRange}\n isTimeScale={props.tDateProfile.isTimeScale}\n eventSelection={props.eventSelection}\n resourceId={props.resourceId}\n isForcedInvisible={isForcedInvisible}\n />\n )\n }\n\n let instanceId = seg.eventRange.instance.instanceId\n let isVisible = isMirror || Boolean(!isForcedInvisible[instanceId] && hcoords && top !== null)\n let hStyle = coordsToCss(hcoords, context.isRtl)\n\n return (\n <div\n key={'e:' + instanceId /* \"e\" for \"event\" */}\n ref={isMirror ? null : harnessElRefs.createRef(instanceId)}\n className=\"fc-timeline-event-harness\"\n style={{\n visibility: isVisible ? ('' as any) : 'hidden',\n top: top || 0,\n ...hStyle,\n }}\n >\n <TimelineEvent\n isTimeScale={props.tDateProfile.isTimeScale}\n seg={seg}\n isDragging={isDragging}\n isResizing={isResizing}\n isDateSelecting={isDateSelecting}\n isSelected={instanceId === props.eventSelection /* TODO: bad for mirror? */}\n {...getSegMeta(seg, props.todayRange, props.nowDate)}\n />\n </div>\n )\n })}\n </Fragment>\n )\n }\n}\n\nTimelineLane.addStateEquality({\n eventInstanceHeights: isPropsEqual,\n moreLinkHeights: isPropsEqual,\n})\n\nfunction buildMirrorPlacements(\n mirrorSegs: TimelineLaneSeg[],\n timelineCoords: TimelineCoords | null,\n fgPlacements: TimelineSegPlacement[],\n): TimelineSegPlacement[] {\n if (!mirrorSegs.length || !timelineCoords) {\n return []\n }\n let topsByInstanceId = buildAbsoluteTopHash(fgPlacements) // TODO: cache this at first render?\n return mirrorSegs.map((seg) => ({\n seg,\n hcoords: timelineCoords.rangeToCoords(seg),\n top: topsByInstanceId[seg.eventRange.instance.instanceId],\n }))\n}\n\nfunction buildAbsoluteTopHash(placements: TimelineSegPlacement[]) {\n let topsByInstanceId: { [instanceId: string]: number } = {}\n\n for (let placement of placements) {\n let { seg } = placement\n if (!Array.isArray(seg)) { // doesn't represent a more-link\n topsByInstanceId[seg.eventRange.instance.instanceId] = placement.top\n }\n }\n\n return topsByInstanceId\n}\n","import { CssDimValue } from '@fullcalendar/core'\nimport {\n ViewProps, Hit, DateComponent, DateMarker, NowTimer,\n greatestDurationDenominator, DateRange, NowIndicatorContainer,\n} from '@fullcalendar/core/internal'\nimport { createElement, createRef, VNode, Fragment } from '@fullcalendar/core/preact'\nimport { coordToCss, TimelineCoords } from './TimelineCoords.js'\nimport { TimelineSlats } from './TimelineSlats.js'\nimport { TimelineLane } from './TimelineLane.js'\nimport { TimelineDateProfile } from './timeline-date-profile.js'\n\nexport interface TimelinGridProps extends ViewProps {\n tDateProfile: TimelineDateProfile\n clientWidth: number | null\n clientHeight: number | null\n tableMinWidth: CssDimValue\n tableColGroupNode: VNode\n onSlatCoords?: (coords: TimelineCoords) => void\n onScrollLeftRequest?: (scrollLeft: number) => void\n}\n\ninterface TimelineGridState {\n coords: TimelineCoords | null\n}\n\nexport class TimelineGrid extends DateComponent<TimelinGridProps, TimelineGridState> {\n private slatsRef = createRef<TimelineSlats>()\n\n state: TimelineGridState = {\n coords: null,\n }\n\n render() {\n let { props, state, context } = this\n let { options } = context\n let { dateProfile, tDateProfile } = props\n let timerUnit = greatestDurationDenominator(tDateProfile.slotDuration).unit\n\n return (\n <div\n className=\"fc-timeline-body\"\n ref={this.handeEl}\n style={{\n minWidth: props.tableMinWidth,\n height: props.clientHeight,\n width: props.clientWidth,\n }}\n >\n <NowTimer unit={timerUnit}>\n {(nowDate: DateMarker, todayRange: DateRange) => (\n <Fragment>\n <TimelineSlats\n ref={this.slatsRef}\n dateProfile={dateProfile}\n tDateProfile={tDateProfile}\n nowDate={nowDate}\n todayRange={todayRange}\n clientWidth={props.clientWidth}\n tableColGroupNode={props.tableColGroupNode}\n tableMinWidth={props.tableMinWidth}\n onCoords={this.handleCoords}\n onScrollLeftRequest={props.onScrollLeftRequest}\n />\n <TimelineLane\n dateProfile={dateProfile}\n tDateProfile={props.tDateProfile}\n nowDate={nowDate}\n todayRange={todayRange}\n nextDayThreshold={options.nextDayThreshold}\n businessHours={props.businessHours}\n eventStore={props.eventStore}\n eventUiBases={props.eventUiBases}\n dateSelection={props.dateSelection}\n eventSelection={props.eventSelection}\n eventDrag={props.eventDrag}\n eventResize={props.eventResize}\n timelineCoords={state.coords}\n syncParentMinHeight\n />\n {(options.nowIndicator && state.coords && state.coords.isDateInRange(nowDate)) && (\n <div className=\"fc-timeline-now-indicator-container\">\n <NowIndicatorContainer\n elClasses={['fc-timeline-now-indicator-line']}\n elStyle={coordToCss(state.coords.dateToCoord(nowDate), context.isRtl)}\n isAxis={false}\n date={nowDate}\n />\n </div>\n )}\n </Fragment>\n )}\n </NowTimer>\n </div>\n )\n }\n\n handeEl = (el: HTMLElement | null) => {\n if (el) {\n this.context.registerInteractiveComponent(this, { el })\n } else {\n this.context.unregisterInteractiveComponent(this)\n }\n }\n\n handleCoords = (coords: TimelineCoords) => {\n this.setState({ coords })\n\n if (this.props.onSlatCoords) {\n this.props.onSlatCoords(coords)\n }\n }\n\n // Hit System\n // ------------------------------------------------------------------------------------------\n\n queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit {\n let slats = this.slatsRef.current\n let slatHit = slats.positionToHit(positionLeft)\n\n if (slatHit) {\n return {\n dateProfile: this.props.dateProfile,\n dateSpan: slatHit.dateSpan,\n rect: {\n left: slatHit.left,\n right: slatHit.right,\n top: 0,\n bottom: elHeight,\n },\n dayEl: slatHit.dayEl,\n layer: 0,\n }\n }\n\n return null\n }\n}\n","import {\n ViewProps, memoize, ChunkContentCallbackArgs, ViewContainer,\n DateComponent, ScrollGridSectionConfig, renderScrollShim, getStickyHeaderDates, getStickyFooterScrollbar,\n} from '@fullcalendar/core/internal'\nimport { createElement, createRef } from '@fullcalendar/core/preact'\nimport { ScrollGrid } from '@fullcalendar/scrollgrid/internal'\nimport { buildTimelineDateProfile, TimelineDateProfile } from './timeline-date-profile.js'\nimport { TimelineHeader } from './TimelineHeader.js'\nimport { TimelineGrid } from './TimelineGrid.js'\nimport { TimelineCoords } from './TimelineCoords.js'\n\ninterface TimelineViewState {\n slatCoords: TimelineCoords | null\n slotCushionMaxWidth: number | null\n}\n\nexport class TimelineView extends DateComponent<ViewProps, TimelineViewState> { // would make this abstract, but TS complains\n private buildTimelineDateProfile = memoize(buildTimelineDateProfile)\n private scrollGridRef = createRef<ScrollGrid>()\n\n state = {\n slatCoords: null,\n slotCushionMaxWidth: null,\n }\n\n render() {\n let { props, state, context } = this\n let { options } = context\n let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(options)\n let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(options)\n\n let tDateProfile = this.buildTimelineDateProfile(\n props.dateProfile,\n context.dateEnv,\n options,\n context.dateProfileGenerator,\n )\n\n let { slotMinWidth } = options\n let slatCols = buildSlatCols(tDateProfile, slotMinWidth || this.computeFallbackSlotMinWidth(tDateProfile))\n\n let sections: ScrollGridSectionConfig[] = [\n {\n type: 'header',\n key: 'header',\n isSticky: stickyHeaderDates,\n chunks: [{\n key: 'timeline',\n content: (contentArg: ChunkContentCallbackArgs) => (\n <TimelineHeader\n dateProfile={props.dateProfile}\n clientWidth={contentArg.clientWidth}\n clientHeight={contentArg.clientHeight}\n tableMinWidth={contentArg.tableMinWidth}\n tableColGroupNode={contentArg.tableColGroupNode}\n tDateProfile={tDateProfile}\n slatCoords={state.slatCoords}\n onMaxCushionWidth={slotMinWidth ? null : this.handleMaxCushionWidth}\n />\n ),\n }],\n },\n {\n type: 'body',\n key: 'body',\n liquid: true,\n chunks: [{\n key: 'timeline',\n content: (contentArg: ChunkContentCallbackArgs) => (\n <TimelineGrid\n {...props}\n clientWidth={contentArg.clientWidth}\n clientHeight={contentArg.clientHeight}\n tableMinWidth={contentArg.tableMinWidth}\n tableColGroupNode={contentArg.tableColGroupNode}\n tDateProfile={tDateProfile}\n onSlatCoords={this.handleSlatCoords}\n onScrollLeftRequest={this.handleScrollLeftRequest}\n />\n ),\n }],\n },\n ]\n\n if (stickyFooterScrollbar) {\n sections.push({\n type: 'footer',\n key: 'footer',\n isSticky: true,\n chunks: [{\n key: 'timeline',\n content: renderScrollShim,\n }],\n })\n }\n\n return (\n <ViewContainer\n elClasses={[\n 'fc-timeline',\n options.eventOverlap === false ?\n 'fc-timeline-overlap-disabled' :\n '',\n ]}\n viewSpec={context.viewSpec}\n >\n <ScrollGrid\n ref={this.scrollGridRef}\n liquid={!props.isHeightAuto && !props.forPrint}\n collapsibleWidth={false}\n colGroups={[\n { cols: slatCols },\n ]}\n sections={sections}\n />\n </ViewContainer>\n )\n }\n\n handleSlatCoords = (slatCoords: TimelineCoords | null) => {\n this.setState({ slatCoords })\n }\n\n handleScrollLeftRequest = (scrollLeft: number) => {\n let scrollGrid = this.scrollGridRef.current\n scrollGrid.forceScrollLeft(0, scrollLeft)\n }\n\n handleMaxCushionWidth = (slotCushionMaxWidth) => {\n this.setState({\n slotCushionMaxWidth: Math.ceil(slotCushionMaxWidth), // for less rerendering TODO: DRY\n })\n }\n\n computeFallbackSlotMinWidth(tDateProfile: TimelineDateProfile) { // TODO: duplicate definition\n return Math.max(30, ((this.state.slotCushionMaxWidth || 0) / tDateProfile.slotsPerLabel))\n }\n}\n\nexport function buildSlatCols(tDateProfile: TimelineDateProfile, slotMinWidth?: number) {\n return [{\n span: tDateProfile.slotCnt,\n minWidth: slotMinWidth || 1, // needs to be a non-zero number to trigger horizontal scrollbars!??????\n }]\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fullcalendar/timeline",
3
- "version": "6.0.0",
3
+ "version": "6.0.2",
4
4
  "title": "FullCalendar Timeline Plugin",
5
5
  "description": "Display events on a horizontal time axis (without resources)",
6
6
  "keywords": [
@@ -9,15 +9,17 @@
9
9
  "full-sized",
10
10
  "fullcalendar",
11
11
  "scheduler",
12
+ "resource",
13
+ "scheduler",
12
14
  "timeline"
13
15
  ],
14
16
  "homepage": "https://fullcalendar.io/docs/timeline-view-no-resources",
15
17
  "dependencies": {
16
- "@fullcalendar/premium-common": "~6.0.0",
17
- "@fullcalendar/scrollgrid": "~6.0.0"
18
+ "@fullcalendar/premium-common": "~6.0.2",
19
+ "@fullcalendar/scrollgrid": "~6.0.2"
18
20
  },
19
21
  "peerDependencies": {
20
- "@fullcalendar/core": "~6.0.0"
22
+ "@fullcalendar/core": "~6.0.2"
21
23
  },
22
24
  "type": "module",
23
25
  "bugs": "https://fullcalendar.io/reporting-bugs",