@fullcalendar/list 7.0.0-beta.1 → 7.0.0-beta.4

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/internal.cjs CHANGED
@@ -5,49 +5,33 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var internal_cjs = require('@fullcalendar/core/internal.cjs');
6
6
  var preact_cjs = require('@fullcalendar/core/preact.cjs');
7
7
 
8
- var css_248z = ":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-table{border-spacing:0;width:100%}.fc-table>*>*>*{border-color:var(--fc-border-color);border-style:solid;border-width:0 0 1px;padding:0}.fc-table>:last-child>:last-child>*{border-bottom-width:0}.fc-list-day-inner,.fc-list-event-dot-cell,.fc-list-event-time,.fc-list-event-title{padding:8px 14px}.fc-direction-ltr .fc-list-event-dot-cell{padding-right:0}.fc-direction-rtl .fc-list-event-dot-cell{padding-left:0}.fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc-list-empty-inner{margin:5em 0}.fc-list-day-cell-sticky{background:var(--fc-page-bg-color);position:sticky;top:0}.fc-list-day-inner{background:var(--fc-neutral-bg-color);display:flex;justify-content:space-between}.fc-list-event.fc-event-forced-url{cursor:pointer}.fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc-list-event-dot-cell,.fc-list-event-time{white-space:nowrap;width:1px}.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-list-event-title a{color:inherit;text-decoration:none}.fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}";
9
- internal_cjs.injectStyles(css_248z);
10
-
11
- class ListViewHeaderRow extends internal_cjs.BaseComponent {
12
- constructor() {
13
- super(...arguments);
14
- this.state = {
15
- textId: internal_cjs.getUniqueDomId(),
16
- };
17
- }
8
+ class ListDayHeader extends internal_cjs.BaseComponent {
18
9
  render() {
19
- let { theme, dateEnv, options, viewApi } = this.context;
20
- let { cellId, dayDate, todayRange } = this.props;
21
- let { textId } = this.state;
10
+ let { dateEnv, options, viewApi } = this.context;
11
+ let { dayDate, todayRange } = this.props;
22
12
  let stickyHeaderDates = !this.props.forPrint && internal_cjs.getStickyHeaderDates(options);
23
13
  let dayMeta = internal_cjs.getDateMeta(dayDate, todayRange);
24
14
  // will ever be falsy?
25
15
  let text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : '';
26
16
  // will ever be falsy? also, BAD NAME "alt"
27
17
  let sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : '';
28
- let renderProps = Object.assign({ date: dateEnv.toDate(dayDate), view: viewApi, textId,
29
- text,
30
- sideText, navLinkAttrs: internal_cjs.buildNavLinkAttrs(this.context, dayDate), sideNavLinkAttrs: internal_cjs.buildNavLinkAttrs(this.context, dayDate, 'day', false) }, dayMeta);
18
+ let isNavLink = options.navLinks;
19
+ let renderProps = Object.assign({ date: dateEnv.toDate(dayDate), view: viewApi, text,
20
+ sideText, navLinkAttrs: isNavLink
21
+ ? internal_cjs.buildNavLinkAttrs(this.context, dayDate, undefined, text)
22
+ : {}, sideNavLinkAttrs: isNavLink
23
+ // duplicate navLink, so does not need to be tabbable
24
+ ? internal_cjs.buildNavLinkAttrs(this.context, dayDate, undefined, sideText, /* isTabbable = */ false)
25
+ : {} }, dayMeta);
31
26
  // TODO: make a reusable HOC for dayHeader (used in daygrid/timegrid too)
32
- return (preact_cjs.createElement(internal_cjs.ContentContainer, { elTag: "tr", elClasses: [
33
- 'fc-list-day',
34
- ...internal_cjs.getDayClassNames(dayMeta, theme),
35
- ], elAttrs: {
36
- 'data-date': internal_cjs.formatDayString(dayDate),
37
- }, renderProps: renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => (preact_cjs.createElement(InnerContent, { elTag: "th", elAttrs: {
38
- id: cellId,
39
- colSpan: 3,
40
- 'aria-labelledby': textId,
41
- }, elClasses: [
42
- 'fc-list-day-cell',
43
- stickyHeaderDates ? 'fc-list-day-cell-sticky' : '',
44
- ] }))));
27
+ return (preact_cjs.createElement("div", { className: internal_cjs.joinClassNames('fc-list-day-outer', stickyHeaderDates && 'fc-list-day-outer-sticky') },
28
+ preact_cjs.createElement(internal_cjs.ContentContainer, { tag: "div", className: internal_cjs.joinClassNames('fc-list-day', internal_cjs.getDayClassName(dayMeta)), attrs: Object.assign({ 'data-date': internal_cjs.formatDayString(dayDate) }, (dayMeta.isToday ? { 'aria-current': 'date' } : {})), renderProps: renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount })));
45
29
  }
46
30
  }
47
31
  function renderInnerContent(props) {
48
- return (preact_cjs.createElement("div", { className: 'fc-list-day-inner' },
49
- props.text && (preact_cjs.createElement("a", Object.assign({ id: props.textId, className: "fc-list-day-text" }, props.navLinkAttrs), props.text)),
50
- props.sideText && ( /* not keyboard tabbable */preact_cjs.createElement("a", Object.assign({ "aria-hidden": true, className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText))));
32
+ return (preact_cjs.createElement(preact_cjs.Fragment, null,
33
+ props.text && (preact_cjs.createElement("div", Object.assign({ className: "fc-list-day-text" }, props.navLinkAttrs), props.text)),
34
+ props.sideText && (preact_cjs.createElement("div", Object.assign({ className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText))));
51
35
  }
52
36
 
53
37
  const DEFAULT_TIME_FORMAT = internal_cjs.createFormatter({
@@ -55,92 +39,132 @@ const DEFAULT_TIME_FORMAT = internal_cjs.createFormatter({
55
39
  minute: '2-digit',
56
40
  meridiem: 'short',
57
41
  });
58
- class ListViewEventRow extends internal_cjs.BaseComponent {
42
+ class ListEvent extends internal_cjs.BaseComponent {
43
+ constructor() {
44
+ super(...arguments);
45
+ this.handleTitleEl = (titleEl) => {
46
+ if (this.disconnectTitleWidth) {
47
+ this.disconnectTitleWidth();
48
+ }
49
+ if (titleEl) {
50
+ this.disconnectTitleWidth = internal_cjs.watchWidth(titleEl, (titleWidth) => {
51
+ internal_cjs.setRef(this.props.timeWidthRef, titleWidth);
52
+ });
53
+ }
54
+ };
55
+ }
59
56
  render() {
60
57
  let { props, context } = this;
58
+ let { eventRange } = props;
61
59
  let { options } = context;
62
- let { eventRange, timeHeaderId, eventHeaderId, dateHeaderId } = props;
63
60
  let timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT;
64
- return (preact_cjs.createElement(internal_cjs.EventContainer, Object.assign({}, props, { elTag: "tr", elClasses: [
65
- 'fc-list-event',
66
- eventRange.def.url && 'fc-event-forced-url',
67
- ], defaultGenerator: () => renderEventInnerContent(eventRange, context) /* weird */, eventRange: eventRange, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (preact_cjs.createElement(preact_cjs.Fragment, null,
68
- buildTimeContent(eventRange, props.isStart, props.isEnd, props.segStart, props.segEnd, timeFormat, context, timeHeaderId, dateHeaderId),
69
- preact_cjs.createElement("td", { "aria-hidden": true, className: "fc-list-event-dot-cell" },
61
+ let [tag, attrs] = internal_cjs.getEventTagAndAttrs(eventRange, context);
62
+ return (preact_cjs.createElement(internal_cjs.EventContainer, Object.assign({}, props, { tag: tag, attrs: Object.assign({ role: 'listitem' }, attrs), className: 'fc-list-event', defaultGenerator: renderEventTitleOnly, eventRange: eventRange, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (preact_cjs.createElement(preact_cjs.Fragment, null,
63
+ preact_cjs.createElement("div", { className: 'fc-list-event-time-outer', style: { width: props.timeOuterWidth } }, this.buildTimeContent(eventRange, props.slicedStart, props.slicedEnd, props.isStart, props.isEnd, timeFormat, context)),
64
+ preact_cjs.createElement("div", { className: "fc-list-event-dot-outer" },
70
65
  preact_cjs.createElement("span", { className: "fc-list-event-dot", style: {
71
66
  borderColor: eventContentArg.borderColor || eventContentArg.backgroundColor,
72
67
  } })),
73
- preact_cjs.createElement(InnerContent, { elTag: "td", elClasses: ['fc-list-event-title'], elAttrs: { headers: `${eventHeaderId} ${dateHeaderId}` } })))));
68
+ preact_cjs.createElement(InnerContent, { tag: "div", className: 'fc-list-event-title' })))));
74
69
  }
75
- }
76
- function renderEventInnerContent(eventRange, context) {
77
- let interactiveAttrs = internal_cjs.getEventRangeAnchorAttrs(eventRange, context);
78
- return (preact_cjs.createElement("a", Object.assign({}, interactiveAttrs), eventRange.def.title));
79
- }
80
- function buildTimeContent(eventRange, isStart, isEnd, segStart, segEnd, timeFormat, context, timeHeaderId, dateHeaderId) {
81
- let { options } = context;
82
- if (options.displayEventTime !== false) {
83
- let eventDef = eventRange.def;
84
- let eventInstance = eventRange.instance;
85
- let doAllDay = false;
86
- let timeText;
87
- if (eventDef.allDay) {
88
- doAllDay = true;
89
- }
90
- else if (internal_cjs.isMultiDayRange(eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
91
- if (isStart) {
92
- timeText = internal_cjs.buildEventRangeTimeText(eventRange, timeFormat, context, null, null, eventInstance.range.start, segEnd);
93
- }
94
- else if (isEnd) {
95
- timeText = internal_cjs.buildEventRangeTimeText(eventRange, timeFormat, context, null, null, segStart, eventInstance.range.end);
70
+ buildTimeContent(eventRange, // whole-day span
71
+ slicedStart, // view-sliced whole-day span
72
+ slicedEnd, // view-sliced whole-day span
73
+ isStart, isEnd, timeFormat, context) {
74
+ let { options } = context;
75
+ if (options.displayEventTime !== false) {
76
+ if (eventRange.def.allDay || (!isStart && !isEnd)) {
77
+ let renderProps = {
78
+ text: context.options.allDayText,
79
+ view: context.viewApi,
80
+ };
81
+ return (preact_cjs.createElement(internal_cjs.ContentContainer, { tag: "div", className: 'fc-list-event-time', renderProps: renderProps, elRef: this.handleTitleEl, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
96
82
  }
97
83
  else {
98
- doAllDay = true;
84
+ return (preact_cjs.createElement("div", { className: "fc-list-event-time", ref: this.handleTitleEl }, internal_cjs.buildEventRangeTimeText(timeFormat, eventRange, slicedStart, slicedEnd, isStart, isEnd, context)));
99
85
  }
100
86
  }
101
- else {
102
- timeText = internal_cjs.buildEventRangeTimeText(eventRange, timeFormat, context, null, null, segStart, segEnd);
103
- }
104
- if (doAllDay) {
105
- let renderProps = {
106
- text: context.options.allDayText,
107
- view: context.viewApi,
108
- };
109
- return (preact_cjs.createElement(internal_cjs.ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
110
- headers: `${timeHeaderId} ${dateHeaderId}`,
111
- }, renderProps: renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
112
- }
113
- return (preact_cjs.createElement("td", { className: "fc-list-event-time" }, timeText));
87
+ return null;
88
+ }
89
+ componentWillUnmount() {
90
+ internal_cjs.setRef(this.props.timeWidthRef, null);
114
91
  }
115
- return null;
92
+ }
93
+ function renderEventTitleOnly(renderProps) {
94
+ return renderProps.event.title;
116
95
  }
117
96
  function renderAllDayInner(renderProps) {
118
97
  return renderProps.text;
119
98
  }
120
99
 
100
+ class ListDay extends internal_cjs.BaseComponent {
101
+ constructor() {
102
+ super(...arguments);
103
+ // memo
104
+ this.sortEventSegs = internal_cjs.memoize(internal_cjs.sortEventSegs);
105
+ // ref
106
+ this.timeWidthRefMap = new internal_cjs.RefMap(() => {
107
+ internal_cjs.afterSize(this.handleTimeWidths);
108
+ });
109
+ this.handleTimeWidths = () => {
110
+ const timeWidthMap = this.timeWidthRefMap.current;
111
+ let max = 0;
112
+ for (const timeWidth of timeWidthMap.values()) {
113
+ max = Math.max(max, timeWidth);
114
+ }
115
+ internal_cjs.setRef(this.props.timeWidthRef, max);
116
+ };
117
+ }
118
+ render() {
119
+ const { props, context, timeWidthRefMap } = this;
120
+ const { nowDate, todayRange } = props;
121
+ const { options } = context;
122
+ const segs = this.sortEventSegs(props.segs, options.eventOrder);
123
+ const fullDateStr = internal_cjs.buildDateStr(this.context, props.dayDate);
124
+ return (preact_cjs.createElement("div", { role: 'listitem', "aria-label": fullDateStr, className: 'fc-list-day-and-events' },
125
+ preact_cjs.createElement(ListDayHeader, { dayDate: props.dayDate, todayRange: todayRange, forPrint: props.forPrint }),
126
+ preact_cjs.createElement("div", { role: 'list', "aria-label": options.eventsHint }, segs.map((seg) => {
127
+ const key = internal_cjs.getEventKey(seg);
128
+ return (preact_cjs.createElement(ListEvent, Object.assign({ key: key, eventRange: seg.eventRange, slicedStart: seg.slicedStart, slicedEnd: seg.slicedEnd, isStart: seg.isStart, isEnd: seg.isEnd, timeWidthRef: timeWidthRefMap.createRef(key), timeOuterWidth: props.timeOuterWidth, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false }, internal_cjs.getEventRangeMeta(seg.eventRange, todayRange, nowDate))));
129
+ }))));
130
+ }
131
+ componentWillUnmount() {
132
+ internal_cjs.setRef(this.props.timeWidthRef, null);
133
+ }
134
+ }
135
+
121
136
  /*
122
137
  Responsible for the scroller, and forwarding event-related actions into the "grid".
123
138
  */
124
139
  class ListView extends internal_cjs.DateComponent {
125
140
  constructor() {
126
141
  super(...arguments);
142
+ // memo
127
143
  this.computeDateVars = internal_cjs.memoize(computeDateVars);
128
144
  this.eventStoreToSegs = internal_cjs.memoize(this._eventStoreToSegs);
129
- this.state = {
130
- timeHeaderId: internal_cjs.getUniqueDomId(),
131
- eventHeaderId: internal_cjs.getUniqueDomId(),
132
- dateHeaderIdRoot: internal_cjs.getUniqueDomId(),
133
- };
145
+ // ref
146
+ this.timeWidthRefMap = new internal_cjs.RefMap(() => {
147
+ internal_cjs.afterSize(this.handleTimeWidths);
148
+ });
134
149
  this.setRootEl = (rootEl) => {
135
150
  if (rootEl) {
136
151
  this.context.registerInteractiveComponent(this, {
137
152
  el: rootEl,
153
+ disableHits: true, // HACK to not do date-clicking/selecting
138
154
  });
139
155
  }
140
156
  else {
141
157
  this.context.unregisterInteractiveComponent(this);
142
158
  }
143
159
  };
160
+ this.handleTimeWidths = () => {
161
+ const timeWidthMap = this.timeWidthRefMap.current;
162
+ let max = 0;
163
+ for (const timeWidth of timeWidthMap.values()) {
164
+ max = Math.max(max, timeWidth);
165
+ }
166
+ this.setState({ timeOuterWidth: max });
167
+ };
144
168
  }
145
169
  render() {
146
170
  let { props, context } = this;
@@ -148,15 +172,11 @@ class ListView extends internal_cjs.DateComponent {
148
172
  let { dayDates, dayRanges } = this.computeDateVars(props.dateProfile);
149
173
  let eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges);
150
174
  let verticalScrolling = !props.forPrint && !internal_cjs.getIsHeightAuto(options);
151
- return (preact_cjs.createElement(internal_cjs.ViewContainer, { elRef: this.setRootEl, elClasses: [
152
- 'fc-list-view',
153
- 'fc-flex-column',
154
- 'fc-border',
155
- ], viewSpec: context.viewSpec },
175
+ return (preact_cjs.createElement(internal_cjs.ViewContainer, { viewSpec: context.viewSpec, className: 'fc-list fc-flex-col fc-border', elRef: this.setRootEl },
156
176
  preact_cjs.createElement(internal_cjs.Scroller // TODO: don't need heavyweight component
157
- , { vertical: verticalScrolling, elClassNames: [verticalScrolling ? 'fc-liquid' : ''] }, eventSegs.length > 0 ?
158
- this.renderSegList(eventSegs, dayDates) :
159
- this.renderEmptyMessage())));
177
+ , { vertical: verticalScrolling, className: verticalScrolling ? 'fc-liquid' : '' },
178
+ this.renderSegList(eventSegs, dayDates),
179
+ !eventSegs.length && this.renderEmptyMessage())));
160
180
  }
161
181
  renderEmptyMessage() {
162
182
  let { options, viewApi } = this.context;
@@ -164,77 +184,53 @@ class ListView extends internal_cjs.DateComponent {
164
184
  text: options.noEventsText,
165
185
  view: viewApi,
166
186
  };
167
- return (preact_cjs.createElement(internal_cjs.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_cjs.createElement(InnerContent, { elTag: "div", elClasses: ['fc-list-empty-inner'] }))));
187
+ return (preact_cjs.createElement(internal_cjs.ContentContainer, { tag: "div", attrs: {
188
+ role: 'status', // does a polite announcement
189
+ }, className: 'fc-list-empty', renderProps: renderProps, generatorName: "noEventsContent", customGenerator: options.noEventsContent, defaultGenerator: renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (preact_cjs.createElement(InnerContent, { tag: "div", className: 'fc-list-empty-inner' }))));
168
190
  }
169
191
  renderSegList(allSegs, dayDates) {
170
- let { options } = this.context;
171
- let { timeHeaderId, eventHeaderId, dateHeaderIdRoot } = this.state;
172
192
  let segsByDay = groupSegsByDay(allSegs); // sparse array
173
- return (preact_cjs.createElement(internal_cjs.NowTimer, { unit: "day" }, (nowDate, todayRange) => {
174
- let innerNodes = [];
175
- for (let dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {
176
- let daySegs = segsByDay[dayIndex];
177
- if (daySegs) { // sparse array, so might be undefined
178
- let dayStr = internal_cjs.formatDayString(dayDates[dayIndex]);
179
- let dateHeaderId = dateHeaderIdRoot + '-' + dayStr;
180
- // append a day header
181
- innerNodes.push(preact_cjs.createElement(ListViewHeaderRow, { key: dayStr, forPrint: this.props.forPrint, cellId: dateHeaderId, dayDate: dayDates[dayIndex], todayRange: todayRange }));
182
- daySegs = internal_cjs.sortEventSegs(daySegs, options.eventOrder);
183
- for (let seg of daySegs) {
184
- innerNodes.push(preact_cjs.createElement(ListViewEventRow, Object.assign({ key: dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */, eventRange: seg.eventRange, isStart: seg.isStart, isEnd: seg.isEnd, segStart: seg.start, segEnd: seg.end, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, timeHeaderId: timeHeaderId, eventHeaderId: eventHeaderId, dateHeaderId: dateHeaderId }, internal_cjs.getEventRangeMeta(seg.eventRange, todayRange, nowDate))));
193
+ return (preact_cjs.createElement("div", { role: 'list', "aria-labelledby": this.props.labelId, "aria-label": this.props.labelStr },
194
+ preact_cjs.createElement(internal_cjs.NowTimer, { unit: "day" }, (nowDate, todayRange) => {
195
+ const dayNodes = [];
196
+ for (let dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {
197
+ let daySegs = segsByDay[dayIndex];
198
+ if (daySegs) { // sparse array, so might be undefined
199
+ const dayDate = dayDates[dayIndex];
200
+ const key = internal_cjs.formatDayString(dayDate);
201
+ dayNodes.push(preact_cjs.createElement(ListDay, { key: key, dayDate: dayDate, nowDate: nowDate, todayRange: todayRange, segs: daySegs, forPrint: this.props.forPrint, timeWidthRef: this.timeWidthRefMap.createRef(key), timeOuterWidth: this.state.timeOuterWidth }));
185
202
  }
186
203
  }
187
- }
188
- return (preact_cjs.createElement("table", { className: 'fc-table' },
189
- preact_cjs.createElement("thead", { className: 'fc-offscreen' },
190
- preact_cjs.createElement("tr", null,
191
- preact_cjs.createElement("th", { scope: "col", id: timeHeaderId }, options.timeHint),
192
- preact_cjs.createElement("th", { scope: "col", "aria-hidden": true }),
193
- preact_cjs.createElement("th", { scope: "col", id: eventHeaderId }, options.eventHint))),
194
- preact_cjs.createElement("tbody", null, innerNodes)));
195
- }));
204
+ return (preact_cjs.createElement(preact_cjs.Fragment, null, dayNodes));
205
+ })));
196
206
  }
197
207
  _eventStoreToSegs(eventStore, eventUiBases, dayRanges) {
198
- return this.eventRangesToSegs(internal_cjs.sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
208
+ return this.eventRangesToSegs(internal_cjs.sliceEventStore(eventStore, eventUiBases,
209
+ // HACKY to reference internal state...
210
+ this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
199
211
  }
200
- eventRangesToSegs(eventRanges, dayRanges) {
212
+ eventRangesToSegs(fullDayEventRanges, dayRanges) {
201
213
  let segs = [];
202
- for (let eventRange of eventRanges) {
203
- segs.push(...this.eventRangeToSegs(eventRange, dayRanges));
214
+ for (let fullDayEventRange of fullDayEventRanges) {
215
+ segs.push(...this.eventRangeToSegs(fullDayEventRange, dayRanges));
204
216
  }
205
217
  return segs;
206
218
  }
207
- eventRangeToSegs(eventRange, dayRanges) {
208
- let { dateEnv } = this.context;
209
- let { nextDayThreshold } = this.context.options;
210
- let range = eventRange.range;
211
- let allDay = eventRange.def.allDay;
219
+ eventRangeToSegs(fullDayEventRange, dayRanges) {
220
+ let fullDayRange = fullDayEventRange.range;
212
221
  let dayIndex;
213
- let segRange;
214
- let seg;
215
222
  let segs = [];
216
223
  for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {
217
- segRange = internal_cjs.intersectRanges(range, dayRanges[dayIndex]);
218
- if (segRange) {
219
- seg = {
220
- eventRange,
221
- start: segRange.start,
222
- end: segRange.end,
223
- isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),
224
- isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),
224
+ const slicedFullDayRange = internal_cjs.intersectRanges(fullDayRange, dayRanges[dayIndex]);
225
+ if (slicedFullDayRange) {
226
+ segs.push({
227
+ eventRange: fullDayEventRange,
228
+ slicedStart: slicedFullDayRange.start,
229
+ slicedEnd: slicedFullDayRange.end,
230
+ isStart: fullDayEventRange.isStart && fullDayRange.start.valueOf() === slicedFullDayRange.start.valueOf(),
231
+ isEnd: fullDayEventRange.isEnd && fullDayRange.end.valueOf() === slicedFullDayRange.end.valueOf(),
225
232
  dayIndex,
226
- };
227
- segs.push(seg);
228
- // detect when range won't go fully into the next day,
229
- // and mutate the latest seg to the be the end.
230
- if (!seg.isEnd && !allDay &&
231
- dayIndex + 1 < dayRanges.length &&
232
- range.end <
233
- dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {
234
- seg.end = range.end;
235
- seg.isEnd = true;
236
- break;
237
- }
233
+ });
238
234
  }
239
235
  }
240
236
  return segs;
@@ -271,4 +267,7 @@ function groupSegsByDay(segs) {
271
267
  return segsByDay;
272
268
  }
273
269
 
270
+ var css_248z = ":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-list-day,.fc-list-event-dot-outer,.fc-list-event-time,.fc-list-event-title{padding:8px 14px}.fc-direction-ltr .fc-list-event-dot-outer{padding-right:0}.fc-direction-rtl .fc-list-event-dot-outer{padding-left:0}.fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc-list-empty-inner{margin:5em 0}.fc-list-day,.fc-list-event:not(.fc-list-day-and-events:last-child .fc-list-event:last-child){border-bottom:1px solid var(--fc-border-color)}.fc-list-day-outer-sticky{background:var(--fc-page-bg-color);position:sticky;top:0}.fc-list-day{background:var(--fc-neutral-bg-color);display:flex;font-weight:700;justify-content:space-between}.fc-list-event{display:flex;flex-direction:row}a.fc-list-event{color:inherit;text-decoration:none}.fc-list-event:hover{background-color:var(--fc-list-event-hover-bg-color)}.fc-list-event-time-outer{display:flex;flex-direction:row}.fc-list-event-dot-outer,.fc-list-event-time{white-space:nowrap}.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}a.fc-list-event:hover .fc-list-event-title{text-decoration:underline}";
271
+ internal_cjs.injectStyles(css_248z);
272
+
274
273
  exports.ListView = ListView;