@fullcalendar/list 6.0.2 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,34 +1,30 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var index_cjs = require('@fullcalendar/core/index.cjs');
6
- var internalCommon = require('./internal.cjs');
7
- var internal_cjs = require('@fullcalendar/core/internal.cjs');
8
- require('@fullcalendar/core/preact.cjs');
1
+ import { createPlugin } from '@fullcalendar/core';
2
+ import { ListView } from './internal.esm.js';
3
+ import { identity, createFormatter, injectStyles } from '@fullcalendar/core/internal';
4
+ import '@fullcalendar/core/preact';
9
5
 
10
6
  const OPTION_REFINERS = {
11
7
  listDayFormat: createFalsableFormatter,
12
8
  listDaySideFormat: createFalsableFormatter,
13
- noEventsClassNames: internal_cjs.identity,
14
- noEventsContent: internal_cjs.identity,
15
- noEventsDidMount: internal_cjs.identity,
16
- noEventsWillUnmount: internal_cjs.identity,
9
+ noEventsClassNames: identity,
10
+ noEventsContent: identity,
11
+ noEventsDidMount: identity,
12
+ noEventsWillUnmount: identity,
17
13
  // noEventsText is defined in base options
18
14
  };
19
15
  function createFalsableFormatter(input) {
20
- return input === false ? null : internal_cjs.createFormatter(input);
16
+ return input === false ? null : createFormatter(input);
21
17
  }
22
18
 
23
19
  var css_248z = ":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:\"\";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}";
24
- internal_cjs.injectStyles(css_248z);
20
+ injectStyles(css_248z);
25
21
 
26
- var index = index_cjs.createPlugin({
22
+ var index = createPlugin({
27
23
  name: '@fullcalendar/list',
28
24
  optionRefiners: OPTION_REFINERS,
29
25
  views: {
30
26
  list: {
31
- component: internalCommon.ListView,
27
+ component: ListView,
32
28
  buttonTextKey: 'list',
33
29
  listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' }, // like "January 1, 2016"
34
30
  },
@@ -56,4 +52,4 @@ var index = index_cjs.createPlugin({
56
52
  },
57
53
  });
58
54
 
59
- exports["default"] = index;
55
+ export { index as default };
package/index.global.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- FullCalendar List View Plugin v6.0.2
2
+ FullCalendar List View Plugin v6.1.0
3
3
  Docs & License: https://fullcalendar.io/docs/list-view
4
4
  (c) 2022 Adam Shaw
5
5
  */
@@ -31,7 +31,7 @@ FullCalendar.List = (function (exports, core, internal$1, preact) {
31
31
  ...internal$1.getDayClassNames(dayMeta, theme),
32
32
  ], elAttrs: {
33
33
  'data-date': internal$1.formatDayString(dayDate),
34
- }, renderProps: renderProps, generatorName: "dayHeaderContent", generator: options.dayHeaderContent || renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => ( // TODO: force-hide top border based on :first-child
34
+ }, renderProps: renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => ( // TODO: force-hide top border based on :first-child
35
35
  preact.createElement("th", { scope: "colgroup", colSpan: 3, id: cellId, "aria-labelledby": textId },
36
36
  preact.createElement(InnerContent, { elTag: "div", elClasses: [
37
37
  'fc-list-day-cushion',
@@ -103,7 +103,7 @@ FullCalendar.List = (function (exports, core, internal$1, preact) {
103
103
  };
104
104
  return (preact.createElement(internal$1.ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
105
105
  headers: `${timeHeaderId} ${dateHeaderId}`,
106
- }, renderProps: renderProps, generatorName: "allDayContent", generator: options.allDayContent || renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
106
+ }, renderProps: renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
107
107
  }
108
108
  return (preact.createElement("td", { className: "fc-list-event-time" }, timeText));
109
109
  }
@@ -158,7 +158,7 @@ FullCalendar.List = (function (exports, core, internal$1, preact) {
158
158
  text: options.noEventsText,
159
159
  view: viewApi,
160
160
  };
161
- return (preact.createElement(internal$1.ContentContainer, { elTag: "div", elClasses: ['fc-list-empty'], renderProps: renderProps, generatorName: "noEventsContent", generator: options.noEventsContent || renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (preact.createElement(InnerContent, { elTag: "div", elClasses: ['fc-list-empty-cushion'] }))));
161
+ return (preact.createElement(internal$1.ContentContainer, { elTag: "div", elClasses: ['fc-list-empty'], renderProps: renderProps, generatorName: "noEventsContent", customGenerator: options.noEventsContent, defaultGenerator: renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (preact.createElement(InnerContent, { elTag: "div", elClasses: ['fc-list-empty-cushion'] }))));
162
162
  }
163
163
  renderSegList(allSegs, dayDates) {
164
164
  let { theme, options } = this.context;
@@ -1,6 +1,6 @@
1
1
  /*!
2
- FullCalendar List View Plugin v6.0.2
2
+ FullCalendar List View Plugin v6.1.0
3
3
  Docs & License: https://fullcalendar.io/docs/list-view
4
4
  (c) 2022 Adam Shaw
5
5
  */
6
- FullCalendar.List=function(e,t,n,a){"use strict";class i extends n.BaseComponent{constructor(){super(...arguments),this.state={textId:n.getUniqueDomId()}}render(){let{theme:e,dateEnv:t,options:i,viewApi:s}=this.context,{cellId:l,dayDate:o,todayRange:d}=this.props,{textId:c}=this.state,f=n.getDateMeta(o,d),g=i.listDayFormat?t.format(o,i.listDayFormat):"",u=i.listDaySideFormat?t.format(o,i.listDaySideFormat):"",m=Object.assign({date:t.toDate(o),view:s,textId:c,text:g,sideText:u,navLinkAttrs:n.buildNavLinkAttrs(this.context,o),sideNavLinkAttrs:n.buildNavLinkAttrs(this.context,o,"day",!1)},f);return a.createElement(n.ContentContainer,{elTag:"tr",elClasses:["fc-list-day",...n.getDayClassNames(f,e)],elAttrs:{"data-date":n.formatDayString(o)},renderProps:m,generatorName:"dayHeaderContent",generator:i.dayHeaderContent||r,classNameGenerator:i.dayHeaderClassNames,didMount:i.dayHeaderDidMount,willUnmount:i.dayHeaderWillUnmount},t=>a.createElement("th",{scope:"colgroup",colSpan:3,id:l,"aria-labelledby":c},a.createElement(t,{elTag:"div",elClasses:["fc-list-day-cushion",e.getClass("tableCellShaded")]})))}}function r(e){return a.createElement(a.Fragment,null,e.text&&a.createElement("a",Object.assign({id:e.textId,className:"fc-list-day-text"},e.navLinkAttrs),e.text),e.sideText&&a.createElement("a",Object.assign({"aria-hidden":!0,className:"fc-list-day-side-text"},e.sideNavLinkAttrs),e.sideText))}const s=n.createFormatter({hour:"numeric",minute:"2-digit",meridiem:"short"});class l extends n.BaseComponent{render(){let{props:e,context:t}=this,{options:i}=t,{seg:r,timeHeaderId:l,eventHeaderId:d,dateHeaderId:c}=e,f=i.eventTimeFormat||s;return a.createElement(n.EventContainer,Object.assign({},e,{elTag:"tr",elClasses:["fc-list-event",r.eventRange.def.url&&"fc-event-forced-url"],defaultGenerator:()=>function(e,t){let i=n.getSegAnchorAttrs(e,t);return a.createElement("a",Object.assign({},i),e.eventRange.def.title)}(r,t),seg:r,timeText:"",disableDragging:!0,disableResizing:!0}),(e,i)=>a.createElement(a.Fragment,null,function(e,t,i,r,s){let{options:l}=i;if(!1!==l.displayEventTime){let d,c=e.eventRange.def,f=e.eventRange.instance,g=!1;if(c.allDay?g=!0:n.isMultiDayRange(e.eventRange.range)?e.isStart?d=n.buildSegTimeText(e,t,i,null,null,f.range.start,e.end):e.isEnd?d=n.buildSegTimeText(e,t,i,null,null,e.start,f.range.end):g=!0:d=n.buildSegTimeText(e,t,i),g){let e={text:i.options.allDayText,view:i.viewApi};return a.createElement(n.ContentContainer,{elTag:"td",elClasses:["fc-list-event-time"],elAttrs:{headers:`${r} ${s}`},renderProps:e,generatorName:"allDayContent",generator:l.allDayContent||o,classNameGenerator:l.allDayClassNames,didMount:l.allDayDidMount,willUnmount:l.allDayWillUnmount})}return a.createElement("td",{className:"fc-list-event-time"},d)}return null}(r,f,t,l,c),a.createElement("td",{"aria-hidden":!0,className:"fc-list-event-graphic"},a.createElement("span",{className:"fc-list-event-dot",style:{borderColor:i.borderColor||i.backgroundColor}})),a.createElement(e,{elTag:"td",elClasses:["fc-list-event-title"],elAttrs:{headers:`${d} ${c}`}})))}}function o(e){return e.text}class d extends n.DateComponent{constructor(){super(...arguments),this.computeDateVars=n.memoize(f),this.eventStoreToSegs=n.memoize(this._eventStoreToSegs),this.state={timeHeaderId:n.getUniqueDomId(),eventHeaderId:n.getUniqueDomId(),dateHeaderIdRoot:n.getUniqueDomId()},this.setRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,context:t}=this,{dayDates:i,dayRanges:r}=this.computeDateVars(e.dateProfile),s=this.eventStoreToSegs(e.eventStore,e.eventUiBases,r);return a.createElement(n.ViewContainer,{elRef:this.setRootEl,elClasses:["fc-list",t.theme.getClass("table"),!1!==t.options.stickyHeaderDates?"fc-list-sticky":""],viewSpec:t.viewSpec},a.createElement(n.Scroller,{liquid:!e.isHeightAuto,overflowX:e.isHeightAuto?"visible":"hidden",overflowY:e.isHeightAuto?"visible":"auto"},s.length>0?this.renderSegList(s,i):this.renderEmptyMessage()))}renderEmptyMessage(){let{options:e,viewApi:t}=this.context,i={text:e.noEventsText,view:t};return a.createElement(n.ContentContainer,{elTag:"div",elClasses:["fc-list-empty"],renderProps:i,generatorName:"noEventsContent",generator:e.noEventsContent||c,classNameGenerator:e.noEventsClassNames,didMount:e.noEventsDidMount,willUnmount:e.noEventsWillUnmount},e=>a.createElement(e,{elTag:"div",elClasses:["fc-list-empty-cushion"]}))}renderSegList(e,t){let{theme:r,options:s}=this.context,{timeHeaderId:o,eventHeaderId:d,dateHeaderIdRoot:c}=this.state,f=function(e){let t,n,a=[];for(t=0;t<e.length;t+=1)n=e[t],(a[n.dayIndex]||(a[n.dayIndex]=[])).push(n);return a}(e);return a.createElement(n.NowTimer,{unit:"day"},(e,g)=>{let u=[];for(let r=0;r<f.length;r+=1){let m=f[r];if(m){let f=n.formatDayString(t[r]),h=c+"-"+f;u.push(a.createElement(i,{key:f,cellId:h,dayDate:t[r],todayRange:g})),m=n.sortEventSegs(m,s.eventOrder);for(let t of m)u.push(a.createElement(l,Object.assign({key:f+":"+t.eventRange.instance.instanceId,seg:t,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,timeHeaderId:o,eventHeaderId:d,dateHeaderId:h},n.getSegMeta(t,g,e))))}}return a.createElement("table",{className:"fc-list-table "+r.getClass("table")},a.createElement("thead",null,a.createElement("tr",null,a.createElement("th",{scope:"col",id:o},s.timeHint),a.createElement("th",{scope:"col","aria-hidden":!0}),a.createElement("th",{scope:"col",id:d},s.eventHint))),a.createElement("tbody",null,u))})}_eventStoreToSegs(e,t,a){return this.eventRangesToSegs(n.sliceEventStore(e,t,this.props.dateProfile.activeRange,this.context.options.nextDayThreshold).fg,a)}eventRangesToSegs(e,t){let n=[];for(let a of e)n.push(...this.eventRangeToSegs(a,t));return n}eventRangeToSegs(e,t){let a,i,r,{dateEnv:s}=this.context,{nextDayThreshold:l}=this.context.options,o=e.range,d=e.def.allDay,c=[];for(a=0;a<t.length;a+=1)if(i=n.intersectRanges(o,t[a]),i&&(r={component:this,eventRange:e,start:i.start,end:i.end,isStart:e.isStart&&i.start.valueOf()===o.start.valueOf(),isEnd:e.isEnd&&i.end.valueOf()===o.end.valueOf(),dayIndex:a},c.push(r),!r.isEnd&&!d&&a+1<t.length&&o.end<s.add(t[a+1].start,l))){r.end=o.end,r.isEnd=!0;break}return c}}function c(e){return e.text}function f(e){let t=n.startOfDay(e.renderRange.start),a=e.renderRange.end,i=[],r=[];for(;t<a;)i.push(t),r.push({start:t,end:n.addDays(t,1)}),t=n.addDays(t,1);return{dayDates:i,dayRanges:r}}const g={listDayFormat:u,listDaySideFormat:u,noEventsClassNames:n.identity,noEventsContent:n.identity,noEventsDidMount:n.identity,noEventsWillUnmount:n.identity};function u(e){return!1===e?null:n.createFormatter(e)}n.injectStyles(':root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:"";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}');var m=t.createPlugin({name:"@fullcalendar/list",optionRefiners:g,views:{list:{component:d,buttonTextKey:"list",listDayFormat:{month:"long",day:"numeric",year:"numeric"}},listDay:{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}},listWeek:{type:"list",duration:{weeks:1},listDayFormat:{weekday:"long"},listDaySideFormat:{month:"long",day:"numeric",year:"numeric"}},listMonth:{type:"list",duration:{month:1},listDaySideFormat:{weekday:"long"}},listYear:{type:"list",duration:{year:1},listDaySideFormat:{weekday:"long"}}}}),h={__proto__:null,ListView:d};return t.globalPlugins.push(m),e.Internal=h,e.default=m,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,FullCalendar.Preact);
6
+ FullCalendar.List=function(e,t,n,a){"use strict";class r extends n.BaseComponent{constructor(){super(...arguments),this.state={textId:n.getUniqueDomId()}}render(){let{theme:e,dateEnv:t,options:r,viewApi:s}=this.context,{cellId:l,dayDate:o,todayRange:d}=this.props,{textId:c}=this.state,f=n.getDateMeta(o,d),u=r.listDayFormat?t.format(o,r.listDayFormat):"",g=r.listDaySideFormat?t.format(o,r.listDaySideFormat):"",m=Object.assign({date:t.toDate(o),view:s,textId:c,text:u,sideText:g,navLinkAttrs:n.buildNavLinkAttrs(this.context,o),sideNavLinkAttrs:n.buildNavLinkAttrs(this.context,o,"day",!1)},f);return a.createElement(n.ContentContainer,{elTag:"tr",elClasses:["fc-list-day",...n.getDayClassNames(f,e)],elAttrs:{"data-date":n.formatDayString(o)},renderProps:m,generatorName:"dayHeaderContent",customGenerator:r.dayHeaderContent,defaultGenerator:i,classNameGenerator:r.dayHeaderClassNames,didMount:r.dayHeaderDidMount,willUnmount:r.dayHeaderWillUnmount},t=>a.createElement("th",{scope:"colgroup",colSpan:3,id:l,"aria-labelledby":c},a.createElement(t,{elTag:"div",elClasses:["fc-list-day-cushion",e.getClass("tableCellShaded")]})))}}function i(e){return a.createElement(a.Fragment,null,e.text&&a.createElement("a",Object.assign({id:e.textId,className:"fc-list-day-text"},e.navLinkAttrs),e.text),e.sideText&&a.createElement("a",Object.assign({"aria-hidden":!0,className:"fc-list-day-side-text"},e.sideNavLinkAttrs),e.sideText))}const s=n.createFormatter({hour:"numeric",minute:"2-digit",meridiem:"short"});class l extends n.BaseComponent{render(){let{props:e,context:t}=this,{options:r}=t,{seg:i,timeHeaderId:l,eventHeaderId:d,dateHeaderId:c}=e,f=r.eventTimeFormat||s;return a.createElement(n.EventContainer,Object.assign({},e,{elTag:"tr",elClasses:["fc-list-event",i.eventRange.def.url&&"fc-event-forced-url"],defaultGenerator:()=>function(e,t){let r=n.getSegAnchorAttrs(e,t);return a.createElement("a",Object.assign({},r),e.eventRange.def.title)}(i,t),seg:i,timeText:"",disableDragging:!0,disableResizing:!0}),(e,r)=>a.createElement(a.Fragment,null,function(e,t,r,i,s){let{options:l}=r;if(!1!==l.displayEventTime){let d,c=e.eventRange.def,f=e.eventRange.instance,u=!1;if(c.allDay?u=!0:n.isMultiDayRange(e.eventRange.range)?e.isStart?d=n.buildSegTimeText(e,t,r,null,null,f.range.start,e.end):e.isEnd?d=n.buildSegTimeText(e,t,r,null,null,e.start,f.range.end):u=!0:d=n.buildSegTimeText(e,t,r),u){let e={text:r.options.allDayText,view:r.viewApi};return a.createElement(n.ContentContainer,{elTag:"td",elClasses:["fc-list-event-time"],elAttrs:{headers:`${i} ${s}`},renderProps:e,generatorName:"allDayContent",customGenerator:l.allDayContent,defaultGenerator:o,classNameGenerator:l.allDayClassNames,didMount:l.allDayDidMount,willUnmount:l.allDayWillUnmount})}return a.createElement("td",{className:"fc-list-event-time"},d)}return null}(i,f,t,l,c),a.createElement("td",{"aria-hidden":!0,className:"fc-list-event-graphic"},a.createElement("span",{className:"fc-list-event-dot",style:{borderColor:r.borderColor||r.backgroundColor}})),a.createElement(e,{elTag:"td",elClasses:["fc-list-event-title"],elAttrs:{headers:`${d} ${c}`}})))}}function o(e){return e.text}class d extends n.DateComponent{constructor(){super(...arguments),this.computeDateVars=n.memoize(f),this.eventStoreToSegs=n.memoize(this._eventStoreToSegs),this.state={timeHeaderId:n.getUniqueDomId(),eventHeaderId:n.getUniqueDomId(),dateHeaderIdRoot:n.getUniqueDomId()},this.setRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,context:t}=this,{dayDates:r,dayRanges:i}=this.computeDateVars(e.dateProfile),s=this.eventStoreToSegs(e.eventStore,e.eventUiBases,i);return a.createElement(n.ViewContainer,{elRef:this.setRootEl,elClasses:["fc-list",t.theme.getClass("table"),!1!==t.options.stickyHeaderDates?"fc-list-sticky":""],viewSpec:t.viewSpec},a.createElement(n.Scroller,{liquid:!e.isHeightAuto,overflowX:e.isHeightAuto?"visible":"hidden",overflowY:e.isHeightAuto?"visible":"auto"},s.length>0?this.renderSegList(s,r):this.renderEmptyMessage()))}renderEmptyMessage(){let{options:e,viewApi:t}=this.context,r={text:e.noEventsText,view:t};return a.createElement(n.ContentContainer,{elTag:"div",elClasses:["fc-list-empty"],renderProps:r,generatorName:"noEventsContent",customGenerator:e.noEventsContent,defaultGenerator:c,classNameGenerator:e.noEventsClassNames,didMount:e.noEventsDidMount,willUnmount:e.noEventsWillUnmount},e=>a.createElement(e,{elTag:"div",elClasses:["fc-list-empty-cushion"]}))}renderSegList(e,t){let{theme:i,options:s}=this.context,{timeHeaderId:o,eventHeaderId:d,dateHeaderIdRoot:c}=this.state,f=function(e){let t,n,a=[];for(t=0;t<e.length;t+=1)n=e[t],(a[n.dayIndex]||(a[n.dayIndex]=[])).push(n);return a}(e);return a.createElement(n.NowTimer,{unit:"day"},(e,u)=>{let g=[];for(let i=0;i<f.length;i+=1){let m=f[i];if(m){let f=n.formatDayString(t[i]),h=c+"-"+f;g.push(a.createElement(r,{key:f,cellId:h,dayDate:t[i],todayRange:u})),m=n.sortEventSegs(m,s.eventOrder);for(let t of m)g.push(a.createElement(l,Object.assign({key:f+":"+t.eventRange.instance.instanceId,seg:t,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,timeHeaderId:o,eventHeaderId:d,dateHeaderId:h},n.getSegMeta(t,u,e))))}}return a.createElement("table",{className:"fc-list-table "+i.getClass("table")},a.createElement("thead",null,a.createElement("tr",null,a.createElement("th",{scope:"col",id:o},s.timeHint),a.createElement("th",{scope:"col","aria-hidden":!0}),a.createElement("th",{scope:"col",id:d},s.eventHint))),a.createElement("tbody",null,g))})}_eventStoreToSegs(e,t,a){return this.eventRangesToSegs(n.sliceEventStore(e,t,this.props.dateProfile.activeRange,this.context.options.nextDayThreshold).fg,a)}eventRangesToSegs(e,t){let n=[];for(let a of e)n.push(...this.eventRangeToSegs(a,t));return n}eventRangeToSegs(e,t){let a,r,i,{dateEnv:s}=this.context,{nextDayThreshold:l}=this.context.options,o=e.range,d=e.def.allDay,c=[];for(a=0;a<t.length;a+=1)if(r=n.intersectRanges(o,t[a]),r&&(i={component:this,eventRange:e,start:r.start,end:r.end,isStart:e.isStart&&r.start.valueOf()===o.start.valueOf(),isEnd:e.isEnd&&r.end.valueOf()===o.end.valueOf(),dayIndex:a},c.push(i),!i.isEnd&&!d&&a+1<t.length&&o.end<s.add(t[a+1].start,l))){i.end=o.end,i.isEnd=!0;break}return c}}function c(e){return e.text}function f(e){let t=n.startOfDay(e.renderRange.start),a=e.renderRange.end,r=[],i=[];for(;t<a;)r.push(t),i.push({start:t,end:n.addDays(t,1)}),t=n.addDays(t,1);return{dayDates:r,dayRanges:i}}const u={listDayFormat:g,listDaySideFormat:g,noEventsClassNames:n.identity,noEventsContent:n.identity,noEventsDidMount:n.identity,noEventsWillUnmount:n.identity};function g(e){return!1===e?null:n.createFormatter(e)}n.injectStyles(':root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:"";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}');var m=t.createPlugin({name:"@fullcalendar/list",optionRefiners:u,views:{list:{component:d,buttonTextKey:"list",listDayFormat:{month:"long",day:"numeric",year:"numeric"}},listDay:{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}},listWeek:{type:"list",duration:{weeks:1},listDayFormat:{weekday:"long"},listDaySideFormat:{month:"long",day:"numeric",year:"numeric"}},listMonth:{type:"list",duration:{month:1},listDaySideFormat:{weekday:"long"}},listYear:{type:"list",duration:{year:1},listDaySideFormat:{weekday:"long"}}}}),h={__proto__:null,ListView:d};return t.globalPlugins.push(m),e.Internal=h,e.default=m,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,FullCalendar.Preact);
package/index.js CHANGED
@@ -1,30 +1,34 @@
1
- import { createPlugin } from '@fullcalendar/core/index.js';
2
- import { ListView } from './internal.js';
3
- import { identity, createFormatter, injectStyles } from '@fullcalendar/core/internal.js';
4
- import '@fullcalendar/core/preact.js';
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var core = require('@fullcalendar/core');
6
+ var internalCommon = require('./internal.js');
7
+ var internal = require('@fullcalendar/core/internal');
8
+ require('@fullcalendar/core/preact');
5
9
 
6
10
  const OPTION_REFINERS = {
7
11
  listDayFormat: createFalsableFormatter,
8
12
  listDaySideFormat: createFalsableFormatter,
9
- noEventsClassNames: identity,
10
- noEventsContent: identity,
11
- noEventsDidMount: identity,
12
- noEventsWillUnmount: identity,
13
+ noEventsClassNames: internal.identity,
14
+ noEventsContent: internal.identity,
15
+ noEventsDidMount: internal.identity,
16
+ noEventsWillUnmount: internal.identity,
13
17
  // noEventsText is defined in base options
14
18
  };
15
19
  function createFalsableFormatter(input) {
16
- return input === false ? null : createFormatter(input);
20
+ return input === false ? null : internal.createFormatter(input);
17
21
  }
18
22
 
19
23
  var css_248z = ":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:\"\";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}";
20
- injectStyles(css_248z);
24
+ internal.injectStyles(css_248z);
21
25
 
22
- var index = createPlugin({
26
+ var index = core.createPlugin({
23
27
  name: '@fullcalendar/list',
24
28
  optionRefiners: OPTION_REFINERS,
25
29
  views: {
26
30
  list: {
27
- component: ListView,
31
+ component: internalCommon.ListView,
28
32
  buttonTextKey: 'list',
29
33
  listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' }, // like "January 1, 2016"
30
34
  },
@@ -52,4 +56,4 @@ var index = createPlugin({
52
56
  },
53
57
  });
54
58
 
55
- export { index as default };
59
+ exports["default"] = index;
@@ -1,75 +1,71 @@
1
- 'use strict';
1
+ import { BaseComponent, getUniqueDomId, getDateMeta, buildNavLinkAttrs, ContentContainer, getDayClassNames, formatDayString, createFormatter, EventContainer, getSegAnchorAttrs, isMultiDayRange, buildSegTimeText, DateComponent, memoize, ViewContainer, Scroller, NowTimer, sortEventSegs, getSegMeta, sliceEventStore, intersectRanges, startOfDay, addDays } from '@fullcalendar/core/internal';
2
+ import { createElement, Fragment } from '@fullcalendar/core/preact';
2
3
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var internal_cjs = require('@fullcalendar/core/internal.cjs');
6
- var preact_cjs = require('@fullcalendar/core/preact.cjs');
7
-
8
- class ListViewHeaderRow extends internal_cjs.BaseComponent {
4
+ class ListViewHeaderRow extends BaseComponent {
9
5
  constructor() {
10
6
  super(...arguments);
11
7
  this.state = {
12
- textId: internal_cjs.getUniqueDomId(),
8
+ textId: getUniqueDomId(),
13
9
  };
14
10
  }
15
11
  render() {
16
12
  let { theme, dateEnv, options, viewApi } = this.context;
17
13
  let { cellId, dayDate, todayRange } = this.props;
18
14
  let { textId } = this.state;
19
- let dayMeta = internal_cjs.getDateMeta(dayDate, todayRange);
15
+ let dayMeta = getDateMeta(dayDate, todayRange);
20
16
  // will ever be falsy?
21
17
  let text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : '';
22
18
  // will ever be falsy? also, BAD NAME "alt"
23
19
  let sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : '';
24
20
  let renderProps = Object.assign({ date: dateEnv.toDate(dayDate), view: viewApi, textId,
25
21
  text,
26
- sideText, navLinkAttrs: internal_cjs.buildNavLinkAttrs(this.context, dayDate), sideNavLinkAttrs: internal_cjs.buildNavLinkAttrs(this.context, dayDate, 'day', false) }, dayMeta);
22
+ sideText, navLinkAttrs: buildNavLinkAttrs(this.context, dayDate), sideNavLinkAttrs: buildNavLinkAttrs(this.context, dayDate, 'day', false) }, dayMeta);
27
23
  // TODO: make a reusable HOC for dayHeader (used in daygrid/timegrid too)
28
- return (preact_cjs.createElement(internal_cjs.ContentContainer, { elTag: "tr", elClasses: [
24
+ return (createElement(ContentContainer, { elTag: "tr", elClasses: [
29
25
  'fc-list-day',
30
- ...internal_cjs.getDayClassNames(dayMeta, theme),
26
+ ...getDayClassNames(dayMeta, theme),
31
27
  ], elAttrs: {
32
- 'data-date': internal_cjs.formatDayString(dayDate),
33
- }, renderProps: renderProps, generatorName: "dayHeaderContent", generator: options.dayHeaderContent || renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => ( // TODO: force-hide top border based on :first-child
34
- preact_cjs.createElement("th", { scope: "colgroup", colSpan: 3, id: cellId, "aria-labelledby": textId },
35
- preact_cjs.createElement(InnerContent, { elTag: "div", elClasses: [
28
+ 'data-date': formatDayString(dayDate),
29
+ }, renderProps: renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => ( // TODO: force-hide top border based on :first-child
30
+ createElement("th", { scope: "colgroup", colSpan: 3, id: cellId, "aria-labelledby": textId },
31
+ createElement(InnerContent, { elTag: "div", elClasses: [
36
32
  'fc-list-day-cushion',
37
33
  theme.getClass('tableCellShaded'),
38
34
  ] })))));
39
35
  }
40
36
  }
41
37
  function renderInnerContent(props) {
42
- return (preact_cjs.createElement(preact_cjs.Fragment, null,
43
- props.text && (preact_cjs.createElement("a", Object.assign({ id: props.textId, className: "fc-list-day-text" }, props.navLinkAttrs), props.text)),
44
- props.sideText && ( /* not keyboard tabbable */preact_cjs.createElement("a", Object.assign({ "aria-hidden": true, className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText))));
38
+ return (createElement(Fragment, null,
39
+ props.text && (createElement("a", Object.assign({ id: props.textId, className: "fc-list-day-text" }, props.navLinkAttrs), props.text)),
40
+ props.sideText && ( /* not keyboard tabbable */createElement("a", Object.assign({ "aria-hidden": true, className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText))));
45
41
  }
46
42
 
47
- const DEFAULT_TIME_FORMAT = internal_cjs.createFormatter({
43
+ const DEFAULT_TIME_FORMAT = createFormatter({
48
44
  hour: 'numeric',
49
45
  minute: '2-digit',
50
46
  meridiem: 'short',
51
47
  });
52
- class ListViewEventRow extends internal_cjs.BaseComponent {
48
+ class ListViewEventRow extends BaseComponent {
53
49
  render() {
54
50
  let { props, context } = this;
55
51
  let { options } = context;
56
52
  let { seg, timeHeaderId, eventHeaderId, dateHeaderId } = props;
57
53
  let timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT;
58
- return (preact_cjs.createElement(internal_cjs.EventContainer, Object.assign({}, props, { elTag: "tr", elClasses: [
54
+ return (createElement(EventContainer, Object.assign({}, props, { elTag: "tr", elClasses: [
59
55
  'fc-list-event',
60
56
  seg.eventRange.def.url && 'fc-event-forced-url',
61
- ], defaultGenerator: () => renderEventInnerContent(seg, context) /* weird */, seg: seg, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (preact_cjs.createElement(preact_cjs.Fragment, null,
57
+ ], defaultGenerator: () => renderEventInnerContent(seg, context) /* weird */, seg: seg, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (createElement(Fragment, null,
62
58
  buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId),
63
- preact_cjs.createElement("td", { "aria-hidden": true, className: "fc-list-event-graphic" },
64
- preact_cjs.createElement("span", { className: "fc-list-event-dot", style: {
59
+ createElement("td", { "aria-hidden": true, className: "fc-list-event-graphic" },
60
+ createElement("span", { className: "fc-list-event-dot", style: {
65
61
  borderColor: eventContentArg.borderColor || eventContentArg.backgroundColor,
66
62
  } })),
67
- preact_cjs.createElement(InnerContent, { elTag: "td", elClasses: ['fc-list-event-title'], elAttrs: { headers: `${eventHeaderId} ${dateHeaderId}` } })))));
63
+ createElement(InnerContent, { elTag: "td", elClasses: ['fc-list-event-title'], elAttrs: { headers: `${eventHeaderId} ${dateHeaderId}` } })))));
68
64
  }
69
65
  }
70
66
  function renderEventInnerContent(seg, context) {
71
- let interactiveAttrs = internal_cjs.getSegAnchorAttrs(seg, context);
72
- return (preact_cjs.createElement("a", Object.assign({}, interactiveAttrs), seg.eventRange.def.title));
67
+ let interactiveAttrs = getSegAnchorAttrs(seg, context);
68
+ return (createElement("a", Object.assign({}, interactiveAttrs), seg.eventRange.def.title));
73
69
  }
74
70
  function buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId) {
75
71
  let { options } = context;
@@ -81,30 +77,30 @@ function buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId)
81
77
  if (eventDef.allDay) {
82
78
  doAllDay = true;
83
79
  }
84
- else if (internal_cjs.isMultiDayRange(seg.eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
80
+ else if (isMultiDayRange(seg.eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
85
81
  if (seg.isStart) {
86
- timeText = internal_cjs.buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);
82
+ timeText = buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);
87
83
  }
88
84
  else if (seg.isEnd) {
89
- timeText = internal_cjs.buildSegTimeText(seg, timeFormat, context, null, null, seg.start, eventInstance.range.end);
85
+ timeText = buildSegTimeText(seg, timeFormat, context, null, null, seg.start, eventInstance.range.end);
90
86
  }
91
87
  else {
92
88
  doAllDay = true;
93
89
  }
94
90
  }
95
91
  else {
96
- timeText = internal_cjs.buildSegTimeText(seg, timeFormat, context);
92
+ timeText = buildSegTimeText(seg, timeFormat, context);
97
93
  }
98
94
  if (doAllDay) {
99
95
  let renderProps = {
100
96
  text: context.options.allDayText,
101
97
  view: context.viewApi,
102
98
  };
103
- return (preact_cjs.createElement(internal_cjs.ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
99
+ return (createElement(ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
104
100
  headers: `${timeHeaderId} ${dateHeaderId}`,
105
- }, renderProps: renderProps, generatorName: "allDayContent", generator: options.allDayContent || renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
101
+ }, renderProps: renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
106
102
  }
107
- return (preact_cjs.createElement("td", { className: "fc-list-event-time" }, timeText));
103
+ return (createElement("td", { className: "fc-list-event-time" }, timeText));
108
104
  }
109
105
  return null;
110
106
  }
@@ -115,15 +111,15 @@ function renderAllDayInner(renderProps) {
115
111
  /*
116
112
  Responsible for the scroller, and forwarding event-related actions into the "grid".
117
113
  */
118
- class ListView extends internal_cjs.DateComponent {
114
+ class ListView extends DateComponent {
119
115
  constructor() {
120
116
  super(...arguments);
121
- this.computeDateVars = internal_cjs.memoize(computeDateVars);
122
- this.eventStoreToSegs = internal_cjs.memoize(this._eventStoreToSegs);
117
+ this.computeDateVars = memoize(computeDateVars);
118
+ this.eventStoreToSegs = memoize(this._eventStoreToSegs);
123
119
  this.state = {
124
- timeHeaderId: internal_cjs.getUniqueDomId(),
125
- eventHeaderId: internal_cjs.getUniqueDomId(),
126
- dateHeaderIdRoot: internal_cjs.getUniqueDomId(),
120
+ timeHeaderId: getUniqueDomId(),
121
+ eventHeaderId: getUniqueDomId(),
122
+ dateHeaderIdRoot: getUniqueDomId(),
127
123
  };
128
124
  this.setRootEl = (rootEl) => {
129
125
  if (rootEl) {
@@ -140,14 +136,14 @@ class ListView extends internal_cjs.DateComponent {
140
136
  let { props, context } = this;
141
137
  let { dayDates, dayRanges } = this.computeDateVars(props.dateProfile);
142
138
  let eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges);
143
- return (preact_cjs.createElement(internal_cjs.ViewContainer, { elRef: this.setRootEl, elClasses: [
139
+ return (createElement(ViewContainer, { elRef: this.setRootEl, elClasses: [
144
140
  'fc-list',
145
141
  context.theme.getClass('table'),
146
142
  context.options.stickyHeaderDates !== false ?
147
143
  'fc-list-sticky' :
148
144
  '',
149
145
  ], viewSpec: context.viewSpec },
150
- preact_cjs.createElement(internal_cjs.Scroller, { liquid: !props.isHeightAuto, overflowX: props.isHeightAuto ? 'visible' : 'hidden', overflowY: props.isHeightAuto ? 'visible' : 'auto' }, eventSegs.length > 0 ?
146
+ createElement(Scroller, { liquid: !props.isHeightAuto, overflowX: props.isHeightAuto ? 'visible' : 'hidden', overflowY: props.isHeightAuto ? 'visible' : 'auto' }, eventSegs.length > 0 ?
151
147
  this.renderSegList(eventSegs, dayDates) :
152
148
  this.renderEmptyMessage())));
153
149
  }
@@ -157,38 +153,38 @@ class ListView extends internal_cjs.DateComponent {
157
153
  text: options.noEventsText,
158
154
  view: viewApi,
159
155
  };
160
- return (preact_cjs.createElement(internal_cjs.ContentContainer, { elTag: "div", elClasses: ['fc-list-empty'], renderProps: renderProps, generatorName: "noEventsContent", generator: options.noEventsContent || renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (preact_cjs.createElement(InnerContent, { elTag: "div", elClasses: ['fc-list-empty-cushion'] }))));
156
+ return (createElement(ContentContainer, { elTag: "div", elClasses: ['fc-list-empty'], renderProps: renderProps, generatorName: "noEventsContent", customGenerator: options.noEventsContent, defaultGenerator: renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (createElement(InnerContent, { elTag: "div", elClasses: ['fc-list-empty-cushion'] }))));
161
157
  }
162
158
  renderSegList(allSegs, dayDates) {
163
159
  let { theme, options } = this.context;
164
160
  let { timeHeaderId, eventHeaderId, dateHeaderIdRoot } = this.state;
165
161
  let segsByDay = groupSegsByDay(allSegs); // sparse array
166
- return (preact_cjs.createElement(internal_cjs.NowTimer, { unit: "day" }, (nowDate, todayRange) => {
162
+ return (createElement(NowTimer, { unit: "day" }, (nowDate, todayRange) => {
167
163
  let innerNodes = [];
168
164
  for (let dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {
169
165
  let daySegs = segsByDay[dayIndex];
170
166
  if (daySegs) { // sparse array, so might be undefined
171
- let dayStr = internal_cjs.formatDayString(dayDates[dayIndex]);
167
+ let dayStr = formatDayString(dayDates[dayIndex]);
172
168
  let dateHeaderId = dateHeaderIdRoot + '-' + dayStr;
173
169
  // append a day header
174
- innerNodes.push(preact_cjs.createElement(ListViewHeaderRow, { key: dayStr, cellId: dateHeaderId, dayDate: dayDates[dayIndex], todayRange: todayRange }));
175
- daySegs = internal_cjs.sortEventSegs(daySegs, options.eventOrder);
170
+ innerNodes.push(createElement(ListViewHeaderRow, { key: dayStr, cellId: dateHeaderId, dayDate: dayDates[dayIndex], todayRange: todayRange }));
171
+ daySegs = sortEventSegs(daySegs, options.eventOrder);
176
172
  for (let seg of daySegs) {
177
- innerNodes.push(preact_cjs.createElement(ListViewEventRow, Object.assign({ key: dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */, seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, timeHeaderId: timeHeaderId, eventHeaderId: eventHeaderId, dateHeaderId: dateHeaderId }, internal_cjs.getSegMeta(seg, todayRange, nowDate))));
173
+ innerNodes.push(createElement(ListViewEventRow, Object.assign({ key: dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */, seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, timeHeaderId: timeHeaderId, eventHeaderId: eventHeaderId, dateHeaderId: dateHeaderId }, getSegMeta(seg, todayRange, nowDate))));
178
174
  }
179
175
  }
180
176
  }
181
- return (preact_cjs.createElement("table", { className: 'fc-list-table ' + theme.getClass('table') },
182
- preact_cjs.createElement("thead", null,
183
- preact_cjs.createElement("tr", null,
184
- preact_cjs.createElement("th", { scope: "col", id: timeHeaderId }, options.timeHint),
185
- preact_cjs.createElement("th", { scope: "col", "aria-hidden": true }),
186
- preact_cjs.createElement("th", { scope: "col", id: eventHeaderId }, options.eventHint))),
187
- preact_cjs.createElement("tbody", null, innerNodes)));
177
+ return (createElement("table", { className: 'fc-list-table ' + theme.getClass('table') },
178
+ createElement("thead", null,
179
+ createElement("tr", null,
180
+ createElement("th", { scope: "col", id: timeHeaderId }, options.timeHint),
181
+ createElement("th", { scope: "col", "aria-hidden": true }),
182
+ createElement("th", { scope: "col", id: eventHeaderId }, options.eventHint))),
183
+ createElement("tbody", null, innerNodes)));
188
184
  }));
189
185
  }
190
186
  _eventStoreToSegs(eventStore, eventUiBases, dayRanges) {
191
- return this.eventRangesToSegs(internal_cjs.sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
187
+ return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
192
188
  }
193
189
  eventRangesToSegs(eventRanges, dayRanges) {
194
190
  let segs = [];
@@ -207,7 +203,7 @@ class ListView extends internal_cjs.DateComponent {
207
203
  let seg;
208
204
  let segs = [];
209
205
  for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {
210
- segRange = internal_cjs.intersectRanges(range, dayRanges[dayIndex]);
206
+ segRange = intersectRanges(range, dayRanges[dayIndex]);
211
207
  if (segRange) {
212
208
  seg = {
213
209
  component: this,
@@ -238,7 +234,7 @@ function renderNoEventsInner(renderProps) {
238
234
  return renderProps.text;
239
235
  }
240
236
  function computeDateVars(dateProfile) {
241
- let dayStart = internal_cjs.startOfDay(dateProfile.renderRange.start);
237
+ let dayStart = startOfDay(dateProfile.renderRange.start);
242
238
  let viewEnd = dateProfile.renderRange.end;
243
239
  let dayDates = [];
244
240
  let dayRanges = [];
@@ -246,9 +242,9 @@ function computeDateVars(dateProfile) {
246
242
  dayDates.push(dayStart);
247
243
  dayRanges.push({
248
244
  start: dayStart,
249
- end: internal_cjs.addDays(dayStart, 1),
245
+ end: addDays(dayStart, 1),
250
246
  });
251
- dayStart = internal_cjs.addDays(dayStart, 1);
247
+ dayStart = addDays(dayStart, 1);
252
248
  }
253
249
  return { dayDates, dayRanges };
254
250
  }
@@ -265,4 +261,4 @@ function groupSegsByDay(segs) {
265
261
  return segsByDay;
266
262
  }
267
263
 
268
- exports.ListView = ListView;
264
+ export { ListView };
package/internal.js CHANGED
@@ -1,71 +1,75 @@
1
- import { BaseComponent, getUniqueDomId, getDateMeta, buildNavLinkAttrs, ContentContainer, getDayClassNames, formatDayString, createFormatter, EventContainer, getSegAnchorAttrs, isMultiDayRange, buildSegTimeText, DateComponent, memoize, ViewContainer, Scroller, NowTimer, sortEventSegs, getSegMeta, sliceEventStore, intersectRanges, startOfDay, addDays } from '@fullcalendar/core/internal.js';
2
- import { createElement, Fragment } from '@fullcalendar/core/preact.js';
1
+ 'use strict';
3
2
 
4
- class ListViewHeaderRow extends BaseComponent {
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var internal = require('@fullcalendar/core/internal');
6
+ var preact = require('@fullcalendar/core/preact');
7
+
8
+ class ListViewHeaderRow extends internal.BaseComponent {
5
9
  constructor() {
6
10
  super(...arguments);
7
11
  this.state = {
8
- textId: getUniqueDomId(),
12
+ textId: internal.getUniqueDomId(),
9
13
  };
10
14
  }
11
15
  render() {
12
16
  let { theme, dateEnv, options, viewApi } = this.context;
13
17
  let { cellId, dayDate, todayRange } = this.props;
14
18
  let { textId } = this.state;
15
- let dayMeta = getDateMeta(dayDate, todayRange);
19
+ let dayMeta = internal.getDateMeta(dayDate, todayRange);
16
20
  // will ever be falsy?
17
21
  let text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : '';
18
22
  // will ever be falsy? also, BAD NAME "alt"
19
23
  let sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : '';
20
24
  let renderProps = Object.assign({ date: dateEnv.toDate(dayDate), view: viewApi, textId,
21
25
  text,
22
- sideText, navLinkAttrs: buildNavLinkAttrs(this.context, dayDate), sideNavLinkAttrs: buildNavLinkAttrs(this.context, dayDate, 'day', false) }, dayMeta);
26
+ sideText, navLinkAttrs: internal.buildNavLinkAttrs(this.context, dayDate), sideNavLinkAttrs: internal.buildNavLinkAttrs(this.context, dayDate, 'day', false) }, dayMeta);
23
27
  // TODO: make a reusable HOC for dayHeader (used in daygrid/timegrid too)
24
- return (createElement(ContentContainer, { elTag: "tr", elClasses: [
28
+ return (preact.createElement(internal.ContentContainer, { elTag: "tr", elClasses: [
25
29
  'fc-list-day',
26
- ...getDayClassNames(dayMeta, theme),
30
+ ...internal.getDayClassNames(dayMeta, theme),
27
31
  ], elAttrs: {
28
- 'data-date': formatDayString(dayDate),
29
- }, renderProps: renderProps, generatorName: "dayHeaderContent", generator: options.dayHeaderContent || renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => ( // TODO: force-hide top border based on :first-child
30
- createElement("th", { scope: "colgroup", colSpan: 3, id: cellId, "aria-labelledby": textId },
31
- createElement(InnerContent, { elTag: "div", elClasses: [
32
+ 'data-date': internal.formatDayString(dayDate),
33
+ }, renderProps: renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => ( // TODO: force-hide top border based on :first-child
34
+ preact.createElement("th", { scope: "colgroup", colSpan: 3, id: cellId, "aria-labelledby": textId },
35
+ preact.createElement(InnerContent, { elTag: "div", elClasses: [
32
36
  'fc-list-day-cushion',
33
37
  theme.getClass('tableCellShaded'),
34
38
  ] })))));
35
39
  }
36
40
  }
37
41
  function renderInnerContent(props) {
38
- return (createElement(Fragment, null,
39
- props.text && (createElement("a", Object.assign({ id: props.textId, className: "fc-list-day-text" }, props.navLinkAttrs), props.text)),
40
- props.sideText && ( /* not keyboard tabbable */createElement("a", Object.assign({ "aria-hidden": true, className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText))));
42
+ return (preact.createElement(preact.Fragment, null,
43
+ props.text && (preact.createElement("a", Object.assign({ id: props.textId, className: "fc-list-day-text" }, props.navLinkAttrs), props.text)),
44
+ props.sideText && ( /* not keyboard tabbable */preact.createElement("a", Object.assign({ "aria-hidden": true, className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText))));
41
45
  }
42
46
 
43
- const DEFAULT_TIME_FORMAT = createFormatter({
47
+ const DEFAULT_TIME_FORMAT = internal.createFormatter({
44
48
  hour: 'numeric',
45
49
  minute: '2-digit',
46
50
  meridiem: 'short',
47
51
  });
48
- class ListViewEventRow extends BaseComponent {
52
+ class ListViewEventRow extends internal.BaseComponent {
49
53
  render() {
50
54
  let { props, context } = this;
51
55
  let { options } = context;
52
56
  let { seg, timeHeaderId, eventHeaderId, dateHeaderId } = props;
53
57
  let timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT;
54
- return (createElement(EventContainer, Object.assign({}, props, { elTag: "tr", elClasses: [
58
+ return (preact.createElement(internal.EventContainer, Object.assign({}, props, { elTag: "tr", elClasses: [
55
59
  'fc-list-event',
56
60
  seg.eventRange.def.url && 'fc-event-forced-url',
57
- ], defaultGenerator: () => renderEventInnerContent(seg, context) /* weird */, seg: seg, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (createElement(Fragment, null,
61
+ ], defaultGenerator: () => renderEventInnerContent(seg, context) /* weird */, seg: seg, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (preact.createElement(preact.Fragment, null,
58
62
  buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId),
59
- createElement("td", { "aria-hidden": true, className: "fc-list-event-graphic" },
60
- createElement("span", { className: "fc-list-event-dot", style: {
63
+ preact.createElement("td", { "aria-hidden": true, className: "fc-list-event-graphic" },
64
+ preact.createElement("span", { className: "fc-list-event-dot", style: {
61
65
  borderColor: eventContentArg.borderColor || eventContentArg.backgroundColor,
62
66
  } })),
63
- createElement(InnerContent, { elTag: "td", elClasses: ['fc-list-event-title'], elAttrs: { headers: `${eventHeaderId} ${dateHeaderId}` } })))));
67
+ preact.createElement(InnerContent, { elTag: "td", elClasses: ['fc-list-event-title'], elAttrs: { headers: `${eventHeaderId} ${dateHeaderId}` } })))));
64
68
  }
65
69
  }
66
70
  function renderEventInnerContent(seg, context) {
67
- let interactiveAttrs = getSegAnchorAttrs(seg, context);
68
- return (createElement("a", Object.assign({}, interactiveAttrs), seg.eventRange.def.title));
71
+ let interactiveAttrs = internal.getSegAnchorAttrs(seg, context);
72
+ return (preact.createElement("a", Object.assign({}, interactiveAttrs), seg.eventRange.def.title));
69
73
  }
70
74
  function buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId) {
71
75
  let { options } = context;
@@ -77,30 +81,30 @@ function buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId)
77
81
  if (eventDef.allDay) {
78
82
  doAllDay = true;
79
83
  }
80
- else if (isMultiDayRange(seg.eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
84
+ else if (internal.isMultiDayRange(seg.eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
81
85
  if (seg.isStart) {
82
- timeText = buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);
86
+ timeText = internal.buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);
83
87
  }
84
88
  else if (seg.isEnd) {
85
- timeText = buildSegTimeText(seg, timeFormat, context, null, null, seg.start, eventInstance.range.end);
89
+ timeText = internal.buildSegTimeText(seg, timeFormat, context, null, null, seg.start, eventInstance.range.end);
86
90
  }
87
91
  else {
88
92
  doAllDay = true;
89
93
  }
90
94
  }
91
95
  else {
92
- timeText = buildSegTimeText(seg, timeFormat, context);
96
+ timeText = internal.buildSegTimeText(seg, timeFormat, context);
93
97
  }
94
98
  if (doAllDay) {
95
99
  let renderProps = {
96
100
  text: context.options.allDayText,
97
101
  view: context.viewApi,
98
102
  };
99
- return (createElement(ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
103
+ return (preact.createElement(internal.ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
100
104
  headers: `${timeHeaderId} ${dateHeaderId}`,
101
- }, renderProps: renderProps, generatorName: "allDayContent", generator: options.allDayContent || renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
105
+ }, renderProps: renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
102
106
  }
103
- return (createElement("td", { className: "fc-list-event-time" }, timeText));
107
+ return (preact.createElement("td", { className: "fc-list-event-time" }, timeText));
104
108
  }
105
109
  return null;
106
110
  }
@@ -111,15 +115,15 @@ function renderAllDayInner(renderProps) {
111
115
  /*
112
116
  Responsible for the scroller, and forwarding event-related actions into the "grid".
113
117
  */
114
- class ListView extends DateComponent {
118
+ class ListView extends internal.DateComponent {
115
119
  constructor() {
116
120
  super(...arguments);
117
- this.computeDateVars = memoize(computeDateVars);
118
- this.eventStoreToSegs = memoize(this._eventStoreToSegs);
121
+ this.computeDateVars = internal.memoize(computeDateVars);
122
+ this.eventStoreToSegs = internal.memoize(this._eventStoreToSegs);
119
123
  this.state = {
120
- timeHeaderId: getUniqueDomId(),
121
- eventHeaderId: getUniqueDomId(),
122
- dateHeaderIdRoot: getUniqueDomId(),
124
+ timeHeaderId: internal.getUniqueDomId(),
125
+ eventHeaderId: internal.getUniqueDomId(),
126
+ dateHeaderIdRoot: internal.getUniqueDomId(),
123
127
  };
124
128
  this.setRootEl = (rootEl) => {
125
129
  if (rootEl) {
@@ -136,14 +140,14 @@ class ListView extends DateComponent {
136
140
  let { props, context } = this;
137
141
  let { dayDates, dayRanges } = this.computeDateVars(props.dateProfile);
138
142
  let eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges);
139
- return (createElement(ViewContainer, { elRef: this.setRootEl, elClasses: [
143
+ return (preact.createElement(internal.ViewContainer, { elRef: this.setRootEl, elClasses: [
140
144
  'fc-list',
141
145
  context.theme.getClass('table'),
142
146
  context.options.stickyHeaderDates !== false ?
143
147
  'fc-list-sticky' :
144
148
  '',
145
149
  ], viewSpec: context.viewSpec },
146
- createElement(Scroller, { liquid: !props.isHeightAuto, overflowX: props.isHeightAuto ? 'visible' : 'hidden', overflowY: props.isHeightAuto ? 'visible' : 'auto' }, eventSegs.length > 0 ?
150
+ preact.createElement(internal.Scroller, { liquid: !props.isHeightAuto, overflowX: props.isHeightAuto ? 'visible' : 'hidden', overflowY: props.isHeightAuto ? 'visible' : 'auto' }, eventSegs.length > 0 ?
147
151
  this.renderSegList(eventSegs, dayDates) :
148
152
  this.renderEmptyMessage())));
149
153
  }
@@ -153,38 +157,38 @@ class ListView extends DateComponent {
153
157
  text: options.noEventsText,
154
158
  view: viewApi,
155
159
  };
156
- return (createElement(ContentContainer, { elTag: "div", elClasses: ['fc-list-empty'], renderProps: renderProps, generatorName: "noEventsContent", generator: options.noEventsContent || renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (createElement(InnerContent, { elTag: "div", elClasses: ['fc-list-empty-cushion'] }))));
160
+ return (preact.createElement(internal.ContentContainer, { elTag: "div", elClasses: ['fc-list-empty'], renderProps: renderProps, generatorName: "noEventsContent", customGenerator: options.noEventsContent, defaultGenerator: renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (preact.createElement(InnerContent, { elTag: "div", elClasses: ['fc-list-empty-cushion'] }))));
157
161
  }
158
162
  renderSegList(allSegs, dayDates) {
159
163
  let { theme, options } = this.context;
160
164
  let { timeHeaderId, eventHeaderId, dateHeaderIdRoot } = this.state;
161
165
  let segsByDay = groupSegsByDay(allSegs); // sparse array
162
- return (createElement(NowTimer, { unit: "day" }, (nowDate, todayRange) => {
166
+ return (preact.createElement(internal.NowTimer, { unit: "day" }, (nowDate, todayRange) => {
163
167
  let innerNodes = [];
164
168
  for (let dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {
165
169
  let daySegs = segsByDay[dayIndex];
166
170
  if (daySegs) { // sparse array, so might be undefined
167
- let dayStr = formatDayString(dayDates[dayIndex]);
171
+ let dayStr = internal.formatDayString(dayDates[dayIndex]);
168
172
  let dateHeaderId = dateHeaderIdRoot + '-' + dayStr;
169
173
  // append a day header
170
- innerNodes.push(createElement(ListViewHeaderRow, { key: dayStr, cellId: dateHeaderId, dayDate: dayDates[dayIndex], todayRange: todayRange }));
171
- daySegs = sortEventSegs(daySegs, options.eventOrder);
174
+ innerNodes.push(preact.createElement(ListViewHeaderRow, { key: dayStr, cellId: dateHeaderId, dayDate: dayDates[dayIndex], todayRange: todayRange }));
175
+ daySegs = internal.sortEventSegs(daySegs, options.eventOrder);
172
176
  for (let seg of daySegs) {
173
- innerNodes.push(createElement(ListViewEventRow, Object.assign({ key: dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */, seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, timeHeaderId: timeHeaderId, eventHeaderId: eventHeaderId, dateHeaderId: dateHeaderId }, getSegMeta(seg, todayRange, nowDate))));
177
+ innerNodes.push(preact.createElement(ListViewEventRow, Object.assign({ key: dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */, seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, timeHeaderId: timeHeaderId, eventHeaderId: eventHeaderId, dateHeaderId: dateHeaderId }, internal.getSegMeta(seg, todayRange, nowDate))));
174
178
  }
175
179
  }
176
180
  }
177
- return (createElement("table", { className: 'fc-list-table ' + theme.getClass('table') },
178
- createElement("thead", null,
179
- createElement("tr", null,
180
- createElement("th", { scope: "col", id: timeHeaderId }, options.timeHint),
181
- createElement("th", { scope: "col", "aria-hidden": true }),
182
- createElement("th", { scope: "col", id: eventHeaderId }, options.eventHint))),
183
- createElement("tbody", null, innerNodes)));
181
+ return (preact.createElement("table", { className: 'fc-list-table ' + theme.getClass('table') },
182
+ preact.createElement("thead", null,
183
+ preact.createElement("tr", null,
184
+ preact.createElement("th", { scope: "col", id: timeHeaderId }, options.timeHint),
185
+ preact.createElement("th", { scope: "col", "aria-hidden": true }),
186
+ preact.createElement("th", { scope: "col", id: eventHeaderId }, options.eventHint))),
187
+ preact.createElement("tbody", null, innerNodes)));
184
188
  }));
185
189
  }
186
190
  _eventStoreToSegs(eventStore, eventUiBases, dayRanges) {
187
- return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
191
+ return this.eventRangesToSegs(internal.sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
188
192
  }
189
193
  eventRangesToSegs(eventRanges, dayRanges) {
190
194
  let segs = [];
@@ -203,7 +207,7 @@ class ListView extends DateComponent {
203
207
  let seg;
204
208
  let segs = [];
205
209
  for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {
206
- segRange = intersectRanges(range, dayRanges[dayIndex]);
210
+ segRange = internal.intersectRanges(range, dayRanges[dayIndex]);
207
211
  if (segRange) {
208
212
  seg = {
209
213
  component: this,
@@ -234,7 +238,7 @@ function renderNoEventsInner(renderProps) {
234
238
  return renderProps.text;
235
239
  }
236
240
  function computeDateVars(dateProfile) {
237
- let dayStart = startOfDay(dateProfile.renderRange.start);
241
+ let dayStart = internal.startOfDay(dateProfile.renderRange.start);
238
242
  let viewEnd = dateProfile.renderRange.end;
239
243
  let dayDates = [];
240
244
  let dayRanges = [];
@@ -242,9 +246,9 @@ function computeDateVars(dateProfile) {
242
246
  dayDates.push(dayStart);
243
247
  dayRanges.push({
244
248
  start: dayStart,
245
- end: addDays(dayStart, 1),
249
+ end: internal.addDays(dayStart, 1),
246
250
  });
247
- dayStart = addDays(dayStart, 1);
251
+ dayStart = internal.addDays(dayStart, 1);
248
252
  }
249
253
  return { dayDates, dayRanges };
250
254
  }
@@ -261,4 +265,4 @@ function groupSegsByDay(segs) {
261
265
  return segsByDay;
262
266
  }
263
267
 
264
- export { ListView };
268
+ exports.ListView = ListView;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fullcalendar/list",
3
- "version": "6.0.2",
3
+ "version": "6.1.0",
4
4
  "title": "FullCalendar List View Plugin",
5
5
  "description": "Display events on a calendar view that looks like a bulleted list",
6
6
  "keywords": [
@@ -12,7 +12,7 @@
12
12
  ],
13
13
  "homepage": "https://fullcalendar.io/docs/list-view",
14
14
  "peerDependencies": {
15
- "@fullcalendar/core": "~6.0.2"
15
+ "@fullcalendar/core": "~6.1.0"
16
16
  },
17
17
  "type": "module",
18
18
  "bugs": "https://fullcalendar.io/reporting-bugs",
@@ -28,26 +28,22 @@
28
28
  "url": "http://arshaw.com/"
29
29
  },
30
30
  "copyright": "2022 Adam Shaw",
31
- "main": "./index.cjs",
32
- "module": "./index.js",
33
31
  "types": "./index.d.ts",
32
+ "main": "./index.js",
33
+ "module": "./index.esm.js",
34
34
  "unpkg": "./index.global.min.js",
35
35
  "jsdelivr": "./index.global.min.js",
36
36
  "exports": {
37
37
  "./package.json": "./package.json",
38
- "./index.cjs": "./index.cjs",
39
- "./index.js": "./index.js",
40
38
  ".": {
41
39
  "types": "./index.d.ts",
42
- "require": "./index.cjs",
43
- "import": "./index.js"
40
+ "require": "./index.js",
41
+ "import": "./index.esm.js"
44
42
  },
45
- "./internal.cjs": "./internal.cjs",
46
- "./internal.js": "./internal.js",
47
43
  "./internal": {
48
44
  "types": "./internal.d.ts",
49
- "require": "./internal.cjs",
50
- "import": "./internal.js"
45
+ "require": "./internal.js",
46
+ "import": "./internal.esm.js"
51
47
  }
52
48
  },
53
49
  "sideEffects": false
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../src/option-refiners.ts","../src/index.ts"],"sourcesContent":["import { ClassNamesGenerator, FormatterInput } from '@fullcalendar/core'\nimport {\n identity,\n Identity,\n CustomContentGenerator,\n DidMountHandler,\n WillUnmountHandler,\n createFormatter,\n DateFormatter,\n} from '@fullcalendar/core/internal'\nimport {\n NoEventsContentArg,\n NoEventsMountArg,\n} from './public-types.js'\n\nexport const OPTION_REFINERS = {\n listDayFormat: createFalsableFormatter, // defaults specified in list plugins\n listDaySideFormat: createFalsableFormatter, // \"\n\n noEventsClassNames: identity as Identity<ClassNamesGenerator<NoEventsContentArg>>,\n noEventsContent: identity as Identity<CustomContentGenerator<NoEventsContentArg>>,\n noEventsDidMount: identity as Identity<DidMountHandler<NoEventsMountArg>>,\n noEventsWillUnmount: identity as Identity<WillUnmountHandler<NoEventsMountArg>>,\n\n // noEventsText is defined in base options\n}\n\nfunction createFalsableFormatter(input: FormatterInput | false): DateFormatter {\n return input === false ? null : createFormatter(input)\n}\n","import { createPlugin, PluginDef } from '@fullcalendar/core'\nimport { ListView } from './ListView.js'\nimport { OPTION_REFINERS } from './option-refiners.js'\nimport './ambient.js'\nimport './index.css'\n\nexport default createPlugin({\n name: '<%= pkgName %>',\n optionRefiners: OPTION_REFINERS,\n views: {\n list: {\n component: ListView,\n buttonTextKey: 'list', // what to lookup in locale files\n listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' }, // like \"January 1, 2016\"\n },\n listDay: {\n type: 'list',\n duration: { days: 1 },\n listDayFormat: { weekday: 'long' }, // day-of-week is all we need. full date is probably in headerToolbar\n },\n listWeek: {\n type: 'list',\n duration: { weeks: 1 },\n listDayFormat: { weekday: 'long' }, // day-of-week is more important\n listDaySideFormat: { month: 'long', day: 'numeric', year: 'numeric' },\n },\n listMonth: {\n type: 'list',\n duration: { month: 1 },\n listDaySideFormat: { weekday: 'long' }, // day-of-week is nice-to-have\n },\n listYear: {\n type: 'list',\n duration: { year: 1 },\n listDaySideFormat: { weekday: 'long' }, // day-of-week is nice-to-have\n },\n },\n}) as PluginDef\n\nexport * from './public-types.js'\n"],"names":[],"mappings":";;;;;AAeO,MAAM,eAAe,GAAG;AAC7B,IAAA,aAAa,EAAE,uBAAuB;AACtC,IAAA,iBAAiB,EAAE,uBAAuB;AAE1C,IAAA,kBAAkB,EAAE,QAA6D;AACjF,IAAA,eAAe,EAAE,QAAgE;AACjF,IAAA,gBAAgB,EAAE,QAAuD;AACzE,IAAA,mBAAmB,EAAE,QAA0D;;CAGhF,CAAA;AAED,SAAS,uBAAuB,CAAC,KAA6B,EAAA;AAC5D,IAAA,OAAO,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;AACxD;;;;;ACvBA,YAAe,YAAY,CAAC;AAC1B,IAAA,IAAI,EAAE,oBAAgB;AACtB,IAAA,cAAc,EAAE,eAAe;AAC/B,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE;AACJ,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;AAClE,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AACrB,YAAA,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AACnC,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;AACtB,YAAA,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AAClC,YAAA,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;AACtE,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;AACtB,YAAA,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AACvC,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AACrB,YAAA,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AACvC,SAAA;AACF,KAAA;AACF,CAAA,CAAc;;;;"}
package/internal.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal.js","sources":["../src/ListViewHeaderRow.tsx","../src/ListViewEventRow.tsx","../src/ListView.tsx"],"sourcesContent":["import { DayHeaderContentArg } from '@fullcalendar/core'\nimport {\n BaseComponent, DateMarker, DateRange, getDateMeta,\n getDayClassNames, formatDayString, buildNavLinkAttrs, getUniqueDomId, ContentContainer,\n} from '@fullcalendar/core/internal'\nimport { createElement, Fragment } from '@fullcalendar/core/preact'\n\nexport interface ListViewHeaderRowProps {\n cellId: string\n dayDate: DateMarker\n todayRange: DateRange\n}\n\nexport class ListViewHeaderRow extends BaseComponent<ListViewHeaderRowProps> {\n state = {\n textId: getUniqueDomId(),\n }\n\n render() {\n let { theme, dateEnv, options, viewApi } = this.context\n let { cellId, dayDate, todayRange } = this.props\n let { textId } = this.state\n let dayMeta = getDateMeta(dayDate, todayRange)\n\n // will ever be falsy?\n let text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : ''\n\n // will ever be falsy? also, BAD NAME \"alt\"\n let sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : ''\n\n let renderProps: RenderProps = {\n date: dateEnv.toDate(dayDate),\n view: viewApi,\n textId,\n text,\n sideText,\n navLinkAttrs: buildNavLinkAttrs(this.context, dayDate),\n sideNavLinkAttrs: buildNavLinkAttrs(this.context, dayDate, 'day', false),\n ...dayMeta,\n }\n\n // TODO: make a reusable HOC for dayHeader (used in daygrid/timegrid too)\n return (\n <ContentContainer\n elTag=\"tr\"\n elClasses={[\n 'fc-list-day',\n ...getDayClassNames(dayMeta, theme),\n ]}\n elAttrs={{\n 'data-date': formatDayString(dayDate),\n }}\n renderProps={renderProps}\n generatorName=\"dayHeaderContent\"\n generator={options.dayHeaderContent || renderInnerContent}\n classNameGenerator={options.dayHeaderClassNames}\n didMount={options.dayHeaderDidMount}\n willUnmount={options.dayHeaderWillUnmount}\n >\n {(InnerContent) => ( // TODO: force-hide top border based on :first-child\n <th scope=\"colgroup\" colSpan={3} id={cellId} aria-labelledby={textId}>\n <InnerContent\n elTag=\"div\"\n elClasses={[\n 'fc-list-day-cushion',\n theme.getClass('tableCellShaded'),\n ]}\n />\n </th>\n )}\n </ContentContainer>\n )\n }\n}\n\n// doesn't enforce much since DayCellContentArg allow extra props\ninterface RenderProps extends DayHeaderContentArg {\n textId: string // for aria-labelledby\n text: string\n sideText: string\n}\n\nfunction renderInnerContent(props: RenderProps) {\n return (\n <Fragment>\n {props.text && (\n <a id={props.textId} className=\"fc-list-day-text\" {...props.navLinkAttrs}>\n {props.text}\n </a>\n )}\n {props.sideText && (/* not keyboard tabbable */\n <a aria-hidden className=\"fc-list-day-side-text\" {...props.sideNavLinkAttrs}>\n {props.sideText}\n </a>\n )}\n </Fragment>\n )\n}\n","import { AllDayContentArg } from '@fullcalendar/core'\nimport {\n MinimalEventProps, BaseComponent, ViewContext,\n Seg, isMultiDayRange, DateFormatter, buildSegTimeText, createFormatter,\n getSegAnchorAttrs, EventContainer, ContentContainer,\n} from '@fullcalendar/core/internal'\nimport {\n createElement,\n ComponentChildren,\n Fragment,\n ComponentChild,\n} from '@fullcalendar/core/preact'\n\nconst DEFAULT_TIME_FORMAT = createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n meridiem: 'short',\n})\n\nexport interface ListViewEventRowProps extends MinimalEventProps {\n timeHeaderId: string\n eventHeaderId: string\n dateHeaderId: string\n}\n\nexport class ListViewEventRow extends BaseComponent<ListViewEventRowProps> {\n render() {\n let { props, context } = this\n let { options } = context\n let { seg, timeHeaderId, eventHeaderId, dateHeaderId } = props\n let timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT\n\n return (\n <EventContainer\n {...props}\n elTag=\"tr\"\n elClasses={[\n 'fc-list-event',\n seg.eventRange.def.url && 'fc-event-forced-url',\n ]}\n defaultGenerator={() => renderEventInnerContent(seg, context) /* weird */}\n seg={seg}\n timeText=\"\"\n disableDragging={true}\n disableResizing={true}\n >\n {(InnerContent, eventContentArg) => (\n <Fragment>\n {buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId)}\n <td aria-hidden className=\"fc-list-event-graphic\">\n <span\n className=\"fc-list-event-dot\"\n style={{\n borderColor: eventContentArg.borderColor || eventContentArg.backgroundColor,\n }}\n />\n </td>\n <InnerContent\n elTag=\"td\"\n elClasses={['fc-list-event-title']}\n elAttrs={{ headers: `${eventHeaderId} ${dateHeaderId}` }}\n />\n </Fragment>\n )}\n </EventContainer>\n )\n }\n}\n\nfunction renderEventInnerContent(seg: Seg, context: ViewContext) {\n let interactiveAttrs = getSegAnchorAttrs(seg, context)\n return (\n <a {...interactiveAttrs}>\n {/* TODO: document how whole row become clickable */}\n {seg.eventRange.def.title}\n </a>\n )\n}\n\nfunction buildTimeContent(\n seg: Seg,\n timeFormat: DateFormatter,\n context: ViewContext,\n timeHeaderId: string,\n dateHeaderId: string,\n): ComponentChildren {\n let { options } = context\n\n if (options.displayEventTime !== false) {\n let eventDef = seg.eventRange.def\n let eventInstance = seg.eventRange.instance\n let doAllDay = false\n let timeText: string\n\n if (eventDef.allDay) {\n doAllDay = true\n } else if (isMultiDayRange(seg.eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?\n if (seg.isStart) {\n timeText = buildSegTimeText(\n seg,\n timeFormat,\n context,\n null,\n null,\n eventInstance.range.start,\n seg.end,\n )\n } else if (seg.isEnd) {\n timeText = buildSegTimeText(\n seg,\n timeFormat,\n context,\n null,\n null,\n seg.start,\n eventInstance.range.end,\n )\n } else {\n doAllDay = true\n }\n } else {\n timeText = buildSegTimeText(\n seg,\n timeFormat,\n context,\n )\n }\n\n if (doAllDay) {\n let renderProps: AllDayContentArg = {\n text: context.options.allDayText,\n view: context.viewApi,\n }\n\n return (\n <ContentContainer\n elTag=\"td\"\n elClasses={['fc-list-event-time']}\n elAttrs={{\n headers: `${timeHeaderId} ${dateHeaderId}`,\n }}\n renderProps={renderProps}\n generatorName=\"allDayContent\"\n generator={options.allDayContent || renderAllDayInner}\n classNameGenerator={options.allDayClassNames}\n didMount={options.allDayDidMount}\n willUnmount={options.allDayWillUnmount}\n />\n )\n }\n\n return (\n <td className=\"fc-list-event-time\">\n {timeText}\n </td>\n )\n }\n\n return null\n}\n\nfunction renderAllDayInner(renderProps: AllDayContentArg): ComponentChild {\n return renderProps.text\n}\n","import { ViewApi, EventRenderRange } from '@fullcalendar/core'\nimport {\n ViewProps,\n Scroller,\n DateMarker,\n addDays,\n startOfDay,\n DateRange,\n intersectRanges,\n DateProfile,\n EventUiHash,\n sliceEventStore,\n EventStore,\n memoize,\n Seg,\n sortEventSegs,\n getSegMeta,\n NowTimer,\n ViewContainer,\n DateComponent,\n MountArg,\n getUniqueDomId,\n formatDayString,\n ContentContainer,\n} from '@fullcalendar/core/internal'\nimport {\n ComponentChild,\n createElement,\n VNode,\n} from '@fullcalendar/core/preact'\nimport { ListViewHeaderRow } from './ListViewHeaderRow.js'\nimport { ListViewEventRow } from './ListViewEventRow.js'\n\nexport interface NoEventsContentArg {\n text: string\n view: ViewApi\n}\n\nexport type NoEventsMountArg = MountArg<NoEventsContentArg>\n\n/*\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\n*/\nexport class ListView extends DateComponent<ViewProps> {\n private computeDateVars = memoize(computeDateVars)\n private eventStoreToSegs = memoize(this._eventStoreToSegs)\n state = {\n timeHeaderId: getUniqueDomId(),\n eventHeaderId: getUniqueDomId(),\n dateHeaderIdRoot: getUniqueDomId(),\n }\n\n render() {\n let { props, context } = this\n let { dayDates, dayRanges } = this.computeDateVars(props.dateProfile)\n let eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges)\n\n return (\n <ViewContainer\n elRef={this.setRootEl}\n elClasses={[\n 'fc-list',\n context.theme.getClass('table'), // just for the outer border. will be on div\n context.options.stickyHeaderDates !== false ?\n 'fc-list-sticky' :\n '',\n ]}\n viewSpec={context.viewSpec}\n >\n <Scroller\n liquid={!props.isHeightAuto}\n overflowX={props.isHeightAuto ? 'visible' : 'hidden'}\n overflowY={props.isHeightAuto ? 'visible' : 'auto'}\n >\n {eventSegs.length > 0 ?\n this.renderSegList(eventSegs, dayDates) :\n this.renderEmptyMessage()}\n </Scroller>\n </ViewContainer>\n )\n }\n\n setRootEl = (rootEl: HTMLElement | null) => {\n if (rootEl) {\n this.context.registerInteractiveComponent(this, { // TODO: make aware that it doesn't do Hits\n el: rootEl,\n })\n } else {\n this.context.unregisterInteractiveComponent(this)\n }\n }\n\n renderEmptyMessage() {\n let { options, viewApi } = this.context\n let renderProps: NoEventsContentArg = {\n text: options.noEventsText,\n view: viewApi,\n }\n\n return (\n <ContentContainer\n elTag=\"div\"\n elClasses={['fc-list-empty']}\n renderProps={renderProps}\n generatorName=\"noEventsContent\"\n generator={options.noEventsContent || renderNoEventsInner}\n classNameGenerator={options.noEventsClassNames}\n didMount={options.noEventsDidMount}\n willUnmount={options.noEventsWillUnmount}\n >\n {(InnerContent) => (\n <InnerContent\n elTag=\"div\"\n elClasses={['fc-list-empty-cushion']}\n />\n )}\n </ContentContainer>\n )\n }\n\n renderSegList(allSegs: Seg[], dayDates: DateMarker[]) {\n let { theme, options } = this.context\n let { timeHeaderId, eventHeaderId, dateHeaderIdRoot } = this.state\n let segsByDay = groupSegsByDay(allSegs) // sparse array\n\n return (\n <NowTimer unit=\"day\">\n {(nowDate: DateMarker, todayRange: DateRange) => {\n let innerNodes: VNode[] = []\n\n for (let dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {\n let daySegs = segsByDay[dayIndex]\n\n if (daySegs) { // sparse array, so might be undefined\n let dayStr = formatDayString(dayDates[dayIndex])\n let dateHeaderId = dateHeaderIdRoot + '-' + dayStr\n\n // append a day header\n innerNodes.push(\n <ListViewHeaderRow\n key={dayStr}\n cellId={dateHeaderId}\n dayDate={dayDates[dayIndex]}\n todayRange={todayRange}\n />,\n )\n\n daySegs = sortEventSegs(daySegs, options.eventOrder)\n\n for (let seg of daySegs) {\n innerNodes.push(\n <ListViewEventRow\n key={dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */}\n seg={seg}\n isDragging={false}\n isResizing={false}\n isDateSelecting={false}\n isSelected={false}\n timeHeaderId={timeHeaderId}\n eventHeaderId={eventHeaderId}\n dateHeaderId={dateHeaderId}\n {...getSegMeta(seg, todayRange, nowDate)}\n />,\n )\n }\n }\n }\n\n return (\n <table className={'fc-list-table ' + theme.getClass('table')}>\n <thead>\n <tr>\n <th scope=\"col\" id={timeHeaderId}>{options.timeHint}</th>\n <th scope=\"col\" aria-hidden />\n <th scope=\"col\" id={eventHeaderId}>{options.eventHint}</th>\n </tr>\n </thead>\n <tbody>{innerNodes}</tbody>\n </table>\n )\n }}\n </NowTimer>\n )\n }\n\n _eventStoreToSegs(eventStore: EventStore, eventUiBases: EventUiHash, dayRanges: DateRange[]): Seg[] {\n return this.eventRangesToSegs(\n sliceEventStore(\n eventStore,\n eventUiBases,\n this.props.dateProfile.activeRange,\n this.context.options.nextDayThreshold,\n ).fg,\n dayRanges,\n )\n }\n\n eventRangesToSegs(eventRanges: EventRenderRange[], dayRanges: DateRange[]) {\n let segs = []\n\n for (let eventRange of eventRanges) {\n segs.push(...this.eventRangeToSegs(eventRange, dayRanges))\n }\n\n return segs\n }\n\n eventRangeToSegs(eventRange: EventRenderRange, dayRanges: DateRange[]) {\n let { dateEnv } = this.context\n let { nextDayThreshold } = this.context.options\n let range = eventRange.range\n let allDay = eventRange.def.allDay\n let dayIndex\n let segRange\n let seg\n let segs = []\n\n for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {\n segRange = intersectRanges(range, dayRanges[dayIndex])\n\n if (segRange) {\n seg = {\n component: this,\n eventRange,\n start: segRange.start,\n end: segRange.end,\n isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),\n isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),\n dayIndex,\n }\n\n segs.push(seg)\n\n // detect when range won't go fully into the next day,\n // and mutate the latest seg to the be the end.\n if (\n !seg.isEnd && !allDay &&\n dayIndex + 1 < dayRanges.length &&\n range.end <\n dateEnv.add(\n dayRanges[dayIndex + 1].start,\n nextDayThreshold,\n )\n ) {\n seg.end = range.end\n seg.isEnd = true\n break\n }\n }\n }\n\n return segs\n }\n}\n\nfunction renderNoEventsInner(renderProps: NoEventsContentArg): ComponentChild {\n return renderProps.text\n}\n\nfunction computeDateVars(dateProfile: DateProfile) {\n let dayStart = startOfDay(dateProfile.renderRange.start)\n let viewEnd = dateProfile.renderRange.end\n let dayDates: DateMarker[] = []\n let dayRanges: DateRange[] = []\n\n while (dayStart < viewEnd) {\n dayDates.push(dayStart)\n\n dayRanges.push({\n start: dayStart,\n end: addDays(dayStart, 1),\n })\n\n dayStart = addDays(dayStart, 1)\n }\n\n return { dayDates, dayRanges }\n}\n\n// Returns a sparse array of arrays, segs grouped by their dayIndex\nfunction groupSegsByDay(segs): Seg[][] {\n let segsByDay = [] // sparse array\n let i\n let seg\n\n for (i = 0; i < segs.length; i += 1) {\n seg = segs[i];\n (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\n .push(seg)\n }\n\n return segsByDay\n}\n"],"names":[],"mappings":"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"}