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