@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.
- package/{index.cjs → index.esm.js} +13 -17
- package/index.global.js +4 -4
- package/index.global.min.js +2 -2
- package/index.js +17 -13
- package/{internal.cjs → internal.esm.js} +58 -62
- package/internal.js +62 -58
- package/package.json +8 -12
- package/index.js.map +0 -1
- package/internal.js.map +0 -1
|
@@ -1,34 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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:
|
|
14
|
-
noEventsContent:
|
|
15
|
-
noEventsDidMount:
|
|
16
|
-
noEventsWillUnmount:
|
|
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 :
|
|
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
|
-
|
|
20
|
+
injectStyles(css_248z);
|
|
25
21
|
|
|
26
|
-
var index =
|
|
22
|
+
var index = createPlugin({
|
|
27
23
|
name: '@fullcalendar/list',
|
|
28
24
|
optionRefiners: OPTION_REFINERS,
|
|
29
25
|
views: {
|
|
30
26
|
list: {
|
|
31
|
-
component:
|
|
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
|
-
|
|
55
|
+
export { index as default };
|
package/index.global.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
FullCalendar List View Plugin v6.0
|
|
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",
|
|
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",
|
|
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",
|
|
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;
|
package/index.global.min.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
FullCalendar List View Plugin v6.0
|
|
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
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
59
|
+
exports["default"] = index;
|
|
@@ -1,75 +1,71 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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:
|
|
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 =
|
|
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:
|
|
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 (
|
|
24
|
+
return (createElement(ContentContainer, { elTag: "tr", elClasses: [
|
|
29
25
|
'fc-list-day',
|
|
30
|
-
...
|
|
26
|
+
...getDayClassNames(dayMeta, theme),
|
|
31
27
|
], elAttrs: {
|
|
32
|
-
'data-date':
|
|
33
|
-
}, renderProps: renderProps, generatorName: "dayHeaderContent",
|
|
34
|
-
|
|
35
|
-
|
|
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 (
|
|
43
|
-
props.text && (
|
|
44
|
-
props.sideText && ( /* not keyboard tabbable */
|
|
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 =
|
|
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
|
|
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 (
|
|
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) => (
|
|
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
|
-
|
|
64
|
-
|
|
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
|
-
|
|
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 =
|
|
72
|
-
return (
|
|
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 (
|
|
80
|
+
else if (isMultiDayRange(seg.eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
|
|
85
81
|
if (seg.isStart) {
|
|
86
|
-
timeText =
|
|
82
|
+
timeText = buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);
|
|
87
83
|
}
|
|
88
84
|
else if (seg.isEnd) {
|
|
89
|
-
timeText =
|
|
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 =
|
|
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 (
|
|
99
|
+
return (createElement(ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
|
|
104
100
|
headers: `${timeHeaderId} ${dateHeaderId}`,
|
|
105
|
-
}, renderProps: renderProps, generatorName: "allDayContent",
|
|
101
|
+
}, renderProps: renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
|
|
106
102
|
}
|
|
107
|
-
return (
|
|
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
|
|
114
|
+
class ListView extends DateComponent {
|
|
119
115
|
constructor() {
|
|
120
116
|
super(...arguments);
|
|
121
|
-
this.computeDateVars =
|
|
122
|
-
this.eventStoreToSegs =
|
|
117
|
+
this.computeDateVars = memoize(computeDateVars);
|
|
118
|
+
this.eventStoreToSegs = memoize(this._eventStoreToSegs);
|
|
123
119
|
this.state = {
|
|
124
|
-
timeHeaderId:
|
|
125
|
-
eventHeaderId:
|
|
126
|
-
dateHeaderIdRoot:
|
|
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 (
|
|
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
|
-
|
|
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 (
|
|
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 (
|
|
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 =
|
|
167
|
+
let dayStr = formatDayString(dayDates[dayIndex]);
|
|
172
168
|
let dateHeaderId = dateHeaderIdRoot + '-' + dayStr;
|
|
173
169
|
// append a day header
|
|
174
|
-
innerNodes.push(
|
|
175
|
-
daySegs =
|
|
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(
|
|
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 (
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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(
|
|
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 =
|
|
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 =
|
|
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:
|
|
245
|
+
end: addDays(dayStart, 1),
|
|
250
246
|
});
|
|
251
|
-
dayStart =
|
|
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
|
-
|
|
264
|
+
export { ListView };
|
package/internal.js
CHANGED
|
@@ -1,71 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
import { createElement, Fragment } from '@fullcalendar/core/preact.js';
|
|
1
|
+
'use strict';
|
|
3
2
|
|
|
4
|
-
|
|
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",
|
|
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",
|
|
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",
|
|
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
|
-
|
|
268
|
+
exports.ListView = ListView;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fullcalendar/list",
|
|
3
|
-
"version": "6.0
|
|
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
|
|
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.
|
|
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.
|
|
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":";;;AAaM,MAAO,iBAAkB,SAAQ,aAAqC,CAAA;AAA5E,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,KAAK,GAAG;YACN,MAAM,EAAE,cAAc,EAAE;SACzB,CAAA;KAyDF;IAvDC,MAAM,GAAA;AACJ,QAAA,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QACvD,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;AAChD,QAAA,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAC3B,IAAI,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;;QAG9C,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAA;;QAGtF,IAAI,QAAQ,GAAG,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAA;AAElG,QAAA,IAAI,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,EACb,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAC7B,IAAI,EAAE,OAAO,EACb,MAAM;YACN,IAAI;AACJ,YAAA,QAAQ,EACR,YAAY,EAAE,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EACtD,gBAAgB,EAAE,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EACrE,EAAA,OAAO,CACX,CAAA;;QAGD,QACE,cAAC,gBAAgB,EAAA,EACf,KAAK,EAAC,IAAI,EACV,SAAS,EAAE;gBACT,aAAa;AACb,gBAAA,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;AACpC,aAAA,EACD,OAAO,EAAE;AACP,gBAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACtC,aAAA,EACD,WAAW,EAAE,WAAW,EACxB,aAAa,EAAC,kBAAkB,EAChC,SAAS,EAAE,OAAO,CAAC,gBAAgB,IAAI,kBAAkB,EACzD,kBAAkB,EAAE,OAAO,CAAC,mBAAmB,EAC/C,QAAQ,EAAE,OAAO,CAAC,iBAAiB,EACnC,WAAW,EAAE,OAAO,CAAC,oBAAoB,IAExC,CAAC,YAAY;AACZ,QAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAC,UAAU,EAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAA,iBAAA,EAAmB,MAAM,EAAA;AAClE,YAAA,aAAA,CAAC,YAAY,EACX,EAAA,KAAK,EAAC,KAAK,EACX,SAAS,EAAE;oBACT,qBAAqB;AACrB,oBAAA,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAClC,iBAAA,EAAA,CACD,CACC,CACN,CACgB,EACpB;KACF;AACF,CAAA;AASD,SAAS,kBAAkB,CAAC,KAAkB,EAAA;IAC5C,QACE,cAAC,QAAQ,EAAA,IAAA;QACN,KAAK,CAAC,IAAI,KACT,mCAAG,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAC,kBAAkB,EAAK,EAAA,KAAK,CAAC,YAAY,GACrE,KAAK,CAAC,IAAI,CACT,CACL;QACA,KAAK,CAAC,QAAQ,iCACb,aAAe,CAAA,GAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,SAAS,EAAC,uBAAuB,EAAA,EAAK,KAAK,CAAC,gBAAgB,GACxE,KAAK,CAAC,QAAQ,CACb,CACL,CACQ,EACZ;AACH;;ACpFA,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAC1C,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,QAAQ,EAAE,OAAO;AAClB,CAAA,CAAC,CAAA;AAQI,MAAO,gBAAiB,SAAQ,aAAoC,CAAA;IACxE,MAAM,GAAA;AACJ,QAAA,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;AAC7B,QAAA,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;QACzB,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,KAAK,CAAA;AAC9D,QAAA,IAAI,UAAU,GAAG,OAAO,CAAC,eAAe,IAAI,mBAAmB,CAAA;QAE/D,QACE,aAAC,CAAA,cAAc,EACT,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,EACT,EAAA,KAAK,EAAC,IAAI,EACV,SAAS,EAAE;gBACT,eAAe;AACf,gBAAA,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,qBAAqB;AAChD,aAAA,EACD,gBAAgB,EAAE,MAAM,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,cAC7D,GAAG,EAAE,GAAG,EACR,QAAQ,EAAC,EAAE,EACX,eAAe,EAAE,IAAI,EACrB,eAAe,EAAE,IAAI,EAAA,CAAA,EAEpB,CAAC,YAAY,EAAE,eAAe,MAC7B,cAAC,QAAQ,EAAA,IAAA;YACN,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC;YACvE,aAAgB,CAAA,IAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,SAAS,EAAC,uBAAuB,EAAA;AAC/C,gBAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,mBAAmB,EAC7B,KAAK,EAAE;AACL,wBAAA,WAAW,EAAE,eAAe,CAAC,WAAW,IAAI,eAAe,CAAC,eAAe;AAC5E,qBAAA,EAAA,CACD,CACC;AACL,YAAA,aAAA,CAAC,YAAY,EAAA,EACX,KAAK,EAAC,IAAI,EACV,SAAS,EAAE,CAAC,qBAAqB,CAAC,EAClC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,EAAE,EAAA,CACxD,CACO,CACZ,CACc,EAClB;KACF;AACF,CAAA;AAED,SAAS,uBAAuB,CAAC,GAAQ,EAAE,OAAoB,EAAA;IAC7D,IAAI,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACtD,IAAA,QACE,aAAA,CAAA,GAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,gBAAgB,CAAA,EAEpB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CACvB,EACL;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAQ,EACR,UAAyB,EACzB,OAAoB,EACpB,YAAoB,EACpB,YAAoB,EAAA;AAEpB,IAAA,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;AAEzB,IAAA,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE;AACtC,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAA;AACjC,QAAA,IAAI,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAA;QAC3C,IAAI,QAAQ,GAAG,KAAK,CAAA;AACpB,QAAA,IAAI,QAAgB,CAAA;QAEpB,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,QAAQ,GAAG,IAAI,CAAA;AAChB,SAAA;aAAM,IAAI,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YAChD,IAAI,GAAG,CAAC,OAAO,EAAE;gBACf,QAAQ,GAAG,gBAAgB,CACzB,GAAG,EACH,UAAU,EACV,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,aAAa,CAAC,KAAK,CAAC,KAAK,EACzB,GAAG,CAAC,GAAG,CACR,CAAA;AACF,aAAA;iBAAM,IAAI,GAAG,CAAC,KAAK,EAAE;gBACpB,QAAQ,GAAG,gBAAgB,CACzB,GAAG,EACH,UAAU,EACV,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,GAAG,CAAC,KAAK,EACT,aAAa,CAAC,KAAK,CAAC,GAAG,CACxB,CAAA;AACF,aAAA;AAAM,iBAAA;gBACL,QAAQ,GAAG,IAAI,CAAA;AAChB,aAAA;AACF,SAAA;AAAM,aAAA;YACL,QAAQ,GAAG,gBAAgB,CACzB,GAAG,EACH,UAAU,EACV,OAAO,CACR,CAAA;AACF,SAAA;AAED,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,WAAW,GAAqB;AAClC,gBAAA,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU;gBAChC,IAAI,EAAE,OAAO,CAAC,OAAO;aACtB,CAAA;AAED,YAAA,QACE,aAAA,CAAC,gBAAgB,EAAA,EACf,KAAK,EAAC,IAAI,EACV,SAAS,EAAE,CAAC,oBAAoB,CAAC,EACjC,OAAO,EAAE;AACP,oBAAA,OAAO,EAAE,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,YAAY,CAAE,CAAA;AAC3C,iBAAA,EACD,WAAW,EAAE,WAAW,EACxB,aAAa,EAAC,eAAe,EAC7B,SAAS,EAAE,OAAO,CAAC,aAAa,IAAI,iBAAiB,EACrD,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,EAC5C,QAAQ,EAAE,OAAO,CAAC,cAAc,EAChC,WAAW,EAAE,OAAO,CAAC,iBAAiB,EAAA,CACtC,EACH;AACF,SAAA;QAED,QACE,sBAAI,SAAS,EAAC,oBAAoB,EAC/B,EAAA,QAAQ,CACN,EACN;AACF,KAAA;AAED,IAAA,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,WAA6B,EAAA;IACtD,OAAO,WAAW,CAAC,IAAI,CAAA;AACzB;;AC3HA;;AAEE;AACI,MAAO,QAAS,SAAQ,aAAwB,CAAA;AAAtD,IAAA,WAAA,GAAA;;AACU,QAAA,IAAA,CAAA,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAC1D,QAAA,IAAA,CAAA,KAAK,GAAG;YACN,YAAY,EAAE,cAAc,EAAE;YAC9B,aAAa,EAAE,cAAc,EAAE;YAC/B,gBAAgB,EAAE,cAAc,EAAE;SACnC,CAAA;AAgCD,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,MAA0B,KAAI;AACzC,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,IAAI,EAAE;AAC9C,oBAAA,EAAE,EAAE,MAAM;AACX,iBAAA,CAAC,CAAA;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAA;AAClD,aAAA;AACH,SAAC,CAAA;KAmKF;IAzMC,MAAM,GAAA;AACJ,QAAA,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;AAC7B,QAAA,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;AACrE,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QAEtF,QACE,aAAC,CAAA,aAAa,EACZ,EAAA,KAAK,EAAE,IAAI,CAAC,SAAS,EACrB,SAAS,EAAE;gBACT,SAAS;AACT,gBAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/B,gBAAA,OAAO,CAAC,OAAO,CAAC,iBAAiB,KAAK,KAAK;AACzC,oBAAA,gBAAgB;oBAChB,EAAE;AACL,aAAA,EACD,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAA;AAE1B,YAAA,aAAA,CAAC,QAAQ,EACP,EAAA,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAC3B,SAAS,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,GAAG,QAAQ,EACpD,SAAS,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,GAAG,MAAM,IAEjD,SAAS,CAAC,MAAM,GAAG,CAAC;gBACnB,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC;AACvC,gBAAA,IAAI,CAAC,kBAAkB,EAAE,CAClB,CACG,EACjB;KACF;IAYD,kBAAkB,GAAA;QAChB,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;AACvC,QAAA,IAAI,WAAW,GAAuB;YACpC,IAAI,EAAE,OAAO,CAAC,YAAY;AAC1B,YAAA,IAAI,EAAE,OAAO;SACd,CAAA;AAED,QAAA,QACE,aAAA,CAAC,gBAAgB,EAAA,EACf,KAAK,EAAC,KAAK,EACX,SAAS,EAAE,CAAC,eAAe,CAAC,EAC5B,WAAW,EAAE,WAAW,EACxB,aAAa,EAAC,iBAAiB,EAC/B,SAAS,EAAE,OAAO,CAAC,eAAe,IAAI,mBAAmB,EACzD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAC9C,QAAQ,EAAE,OAAO,CAAC,gBAAgB,EAClC,WAAW,EAAE,OAAO,CAAC,mBAAmB,EAAA,EAEvC,CAAC,YAAY,MACZ,aAAA,CAAC,YAAY,EAAA,EACX,KAAK,EAAC,KAAK,EACX,SAAS,EAAE,CAAC,uBAAuB,CAAC,EAAA,CACpC,CACH,CACgB,EACpB;KACF;IAED,aAAa,CAAC,OAAc,EAAE,QAAsB,EAAA;QAClD,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QACrC,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAClE,IAAI,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;AAEvC,QAAA,QACE,aAAA,CAAC,QAAQ,EAAA,EAAC,IAAI,EAAC,KAAK,EAAA,EACjB,CAAC,OAAmB,EAAE,UAAqB,KAAI;YAC9C,IAAI,UAAU,GAAY,EAAE,CAAA;AAE5B,YAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE;AACjE,gBAAA,IAAI,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;gBAEjC,IAAI,OAAO,EAAE;oBACX,IAAI,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;AAChD,oBAAA,IAAI,YAAY,GAAG,gBAAgB,GAAG,GAAG,GAAG,MAAM,CAAA;;oBAGlD,UAAU,CAAC,IAAI,CACb,aAAC,CAAA,iBAAiB,EAChB,EAAA,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC3B,UAAU,EAAE,UAAU,EACtB,CAAA,CACH,CAAA;oBAED,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;AAEpD,oBAAA,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;AACvB,wBAAA,UAAU,CAAC,IAAI,CACb,aAAA,CAAC,gBAAgB,EAAA,MAAA,CAAA,MAAA,CAAA,EACf,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,4CACtD,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,KAAK,EACjB,UAAU,EAAE,KAAK,EACjB,eAAe,EAAE,KAAK,EACtB,UAAU,EAAE,KAAK,EACjB,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EACtB,EAAA,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA,CACxC,CACH,CAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;YAED,QACE,aAAO,CAAA,OAAA,EAAA,EAAA,SAAS,EAAE,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAA;AAC1D,gBAAA,aAAA,CAAA,OAAA,EAAA,IAAA;AACE,oBAAA,aAAA,CAAA,IAAA,EAAA,IAAA;wBACE,aAAI,CAAA,IAAA,EAAA,EAAA,KAAK,EAAC,KAAK,EAAC,EAAE,EAAE,YAAY,EAAG,EAAA,OAAO,CAAC,QAAQ,CAAM;wBACzD,aAAI,CAAA,IAAA,EAAA,EAAA,KAAK,EAAC,KAAK,EAAe,aAAA,EAAA,IAAA,EAAA,CAAA;AAC9B,wBAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAC,KAAK,EAAC,EAAE,EAAE,aAAa,EAAA,EAAG,OAAO,CAAC,SAAS,CAAM,CACxD,CACC;AACR,gBAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ,UAAU,CAAS,CACrB,EACT;SACF,CACQ,EACZ;KACF;AAED,IAAA,iBAAiB,CAAC,UAAsB,EAAE,YAAyB,EAAE,SAAsB,EAAA;AACzF,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAC3B,eAAe,CACb,UAAU,EACV,YAAY,EACZ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAClC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CACtC,CAAC,EAAE,EACJ,SAAS,CACV,CAAA;KACF;IAED,iBAAiB,CAAC,WAA+B,EAAE,SAAsB,EAAA;QACvE,IAAI,IAAI,GAAG,EAAE,CAAA;AAEb,QAAA,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAA;AAC3D,SAAA;AAED,QAAA,OAAO,IAAI,CAAA;KACZ;IAED,gBAAgB,CAAC,UAA4B,EAAE,SAAsB,EAAA;AACnE,QAAA,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAC9B,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;AAC/C,QAAA,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;AAC5B,QAAA,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAA;AAClC,QAAA,IAAI,QAAQ,CAAA;AACZ,QAAA,IAAI,QAAQ,CAAA;AACZ,QAAA,IAAI,GAAG,CAAA;QACP,IAAI,IAAI,GAAG,EAAE,CAAA;AAEb,QAAA,KAAK,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE;YAC7D,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEtD,YAAA,IAAI,QAAQ,EAAE;AACZ,gBAAA,GAAG,GAAG;AACJ,oBAAA,SAAS,EAAE,IAAI;oBACf,UAAU;oBACV,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,GAAG,EAAE,QAAQ,CAAC,GAAG;AACjB,oBAAA,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;AACjF,oBAAA,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;oBACzE,QAAQ;iBACT,CAAA;AAED,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;;AAId,gBAAA,IACE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM;AACrB,oBAAA,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM;AAC/B,oBAAA,KAAK,CAAC,GAAG;AACP,wBAAA,OAAO,CAAC,GAAG,CACT,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,EAC7B,gBAAgB,CACjB,EACH;AACA,oBAAA,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;AACnB,oBAAA,GAAG,CAAC,KAAK,GAAG,IAAI,CAAA;oBAChB,MAAK;AACN,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAA;KACZ;AACF,CAAA;AAED,SAAS,mBAAmB,CAAC,WAA+B,EAAA;IAC1D,OAAO,WAAW,CAAC,IAAI,CAAA;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,WAAwB,EAAA;IAC/C,IAAI,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;AACxD,IAAA,IAAI,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAA;IACzC,IAAI,QAAQ,GAAiB,EAAE,CAAA;IAC/B,IAAI,SAAS,GAAgB,EAAE,CAAA;IAE/B,OAAO,QAAQ,GAAG,OAAO,EAAE;AACzB,QAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEvB,SAAS,CAAC,IAAI,CAAC;AACb,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1B,SAAA,CAAC,CAAA;AAEF,QAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;AAChC,KAAA;AAED,IAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;AAChC,CAAC;AAED;AACA,SAAS,cAAc,CAAC,IAAI,EAAA;AAC1B,IAAA,IAAI,SAAS,GAAG,EAAE,CAAA;AAClB,IAAA,IAAI,CAAC,CAAA;AACL,IAAA,IAAI,GAAG,CAAA;AAEP,IAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACnC,QAAA,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;aACvD,IAAI,CAAC,GAAG,CAAC,CAAA;AACb,KAAA;AAED,IAAA,OAAO,SAAS,CAAA;AAClB;;;;"}
|