@fullcalendar/list 7.0.0-beta.0 → 7.0.0-beta.3

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