@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/index.global.js +126 -136
- package/index.global.min.js +2 -2
- package/internal-common.d.ts +19 -11
- package/internal.cjs +125 -135
- package/internal.js +126 -136
- package/package.json +2 -2
package/internal.js
CHANGED
|
@@ -1,46 +1,29 @@
|
|
|
1
|
-
import { BaseComponent,
|
|
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
|
|
5
|
-
constructor() {
|
|
6
|
-
super(...arguments);
|
|
7
|
-
this.state = {
|
|
8
|
-
textId: getUniqueDomId(),
|
|
9
|
-
};
|
|
10
|
-
}
|
|
4
|
+
class ListDayHeader extends BaseComponent {
|
|
11
5
|
render() {
|
|
12
|
-
let {
|
|
13
|
-
let {
|
|
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,
|
|
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(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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(
|
|
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({
|
|
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
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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, {
|
|
60
|
+
createElement(InnerContent, { tag: "div", className: 'fc-list-event-title' })))));
|
|
67
61
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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,
|
|
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,
|
|
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, {
|
|
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
|
-
|
|
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
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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(
|
|
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,
|
|
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(
|
|
200
|
+
eventRangesToSegs(fullDayEventRanges, dayRanges) {
|
|
194
201
|
let segs = [];
|
|
195
|
-
for (let
|
|
196
|
-
segs.push(...this.eventRangeToSegs(
|
|
202
|
+
for (let fullDayEventRange of fullDayEventRanges) {
|
|
203
|
+
segs.push(...this.eventRangeToSegs(fullDayEventRange, dayRanges));
|
|
197
204
|
}
|
|
198
205
|
return segs;
|
|
199
206
|
}
|
|
200
|
-
eventRangeToSegs(
|
|
201
|
-
let
|
|
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
|
-
|
|
211
|
-
if (
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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-
|
|
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.
|
|
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.
|
|
15
|
+
"@fullcalendar/core": "7.0.0-beta.3"
|
|
16
16
|
},
|
|
17
17
|
"type": "module",
|
|
18
18
|
"bugs": "https://fullcalendar.io/reporting-bugs",
|