serves as a min-height
+ }
+ }, t.tableColGroupNode, me(n ? "thead" : "tbody", {
+ role: "presentation"
+ }, typeof e.rowContent == "function" ? e.rowContent(t) : e.rowContent));
+}
+function Lxe(r, e) {
+ return _c(r, e, El);
+}
+function Pxe(r, e) {
+ let t = [];
+ for (let n of r) {
+ let i = n.span || 1;
+ for (let a = 0; a < i; a += 1)
+ t.push(me("col", { style: {
+ width: n.width === "shrink" ? Rxe(e) : n.width || "",
+ minWidth: n.minWidth || ""
+ } }));
+ }
+ return me("colgroup", {}, ...t);
+}
+function Rxe(r) {
+ return r == null ? 4 : r;
+}
+function Nxe(r) {
+ for (let e of r)
+ if (e.width === "shrink")
+ return !0;
+ return !1;
+}
+function zxe(r, e) {
+ let t = [
+ "fc-scrollgrid",
+ e.theme.getClass("table")
+ ];
+ return r && t.push("fc-scrollgrid-liquid"), t;
+}
+function Bxe(r, e) {
+ let t = [
+ "fc-scrollgrid-section",
+ `fc-scrollgrid-section-${r.type}`,
+ r.className
+ // used?
+ ];
+ return e && r.liquid && r.maxHeight == null && t.push("fc-scrollgrid-section-liquid"), r.isSticky && t.push("fc-scrollgrid-section-sticky"), t;
+}
+function aI(r) {
+ return me("div", { className: "fc-scrollgrid-sticky-shim", style: {
+ width: r.clientWidth,
+ minWidth: r.tableMinWidth
+ } });
+}
+function pb(r) {
+ let { stickyHeaderDates: e } = r;
+ return (e == null || e === "auto") && (e = r.height === "auto" || r.viewHeight === "auto"), e;
+}
+function KG(r) {
+ let { stickyFooterScrollbar: e } = r;
+ return (e == null || e === "auto") && (e = r.height === "auto" || r.viewHeight === "auto"), e;
+}
+class xM extends un {
+ constructor() {
+ super(...arguments), this.processCols = rr((e) => e, Lxe), this.renderMicroColGroup = rr(Pxe), this.scrollerRefs = new Zl(), this.scrollerElRefs = new Zl(this._handleScrollerEl.bind(this)), this.state = {
+ shrinkWidth: null,
+ forceYScrollbars: !1,
+ scrollerClientWidths: {},
+ scrollerClientHeights: {}
+ }, this.handleSizing = () => {
+ this.safeSetState(Object.assign({ shrinkWidth: this.computeShrinkWidth() }, this.computeScrollerDims()));
+ };
+ }
+ render() {
+ let { props: e, state: t, context: n } = this, i = e.sections || [], a = this.processCols(e.cols), o = this.renderMicroColGroup(a, t.shrinkWidth), s = zxe(e.liquid, n);
+ e.collapsibleWidth && s.push("fc-scrollgrid-collapsible");
+ let l = i.length, u = 0, c, h = [], f = [], v = [];
+ for (; u < l && (c = i[u]).type === "header"; )
+ h.push(this.renderSection(c, o, !0)), u += 1;
+ for (; u < l && (c = i[u]).type === "body"; )
+ f.push(this.renderSection(c, o, !1)), u += 1;
+ for (; u < l && (c = i[u]).type === "footer"; )
+ v.push(this.renderSection(c, o, !0)), u += 1;
+ let b = !SG();
+ const w = { role: "rowgroup" };
+ return me("table", {
+ role: "grid",
+ className: s.join(" "),
+ style: { height: e.height }
+ }, !!(!b && h.length) && me("thead", w, ...h), !!(!b && f.length) && me("tbody", w, ...f), !!(!b && v.length) && me("tfoot", w, ...v), b && me("tbody", w, ...h, ...f, ...v));
+ }
+ renderSection(e, t, n) {
+ return "outerContent" in e ? me(Dn, { key: e.key }, e.outerContent) : me("tr", { key: e.key, role: "presentation", className: Bxe(e, this.props.liquid).join(" ") }, this.renderChunkTd(e, t, e.chunk, n));
+ }
+ renderChunkTd(e, t, n, i) {
+ if ("outerContent" in n)
+ return n.outerContent;
+ let { props: a } = this, { forceYScrollbars: o, scrollerClientWidths: s, scrollerClientHeights: l } = this.state, u = kxe(a, e), c = JG(a, e), h = a.liquid ? o ? "scroll" : u ? "auto" : "hidden" : "visible", f = e.key, v = Oxe(e, n, {
+ tableColGroupNode: t,
+ tableMinWidth: "",
+ clientWidth: !a.collapsibleWidth && s[f] !== void 0 ? s[f] : null,
+ clientHeight: l[f] !== void 0 ? l[f] : null,
+ expandRows: e.expandRows,
+ syncRowHeights: !1,
+ rowSyncHeights: [],
+ reportRowHeightChange: () => {
+ }
+ }, i);
+ return me(i ? "th" : "td", {
+ ref: n.elRef,
+ role: "presentation"
+ }, me(
+ "div",
+ { className: `fc-scroller-harness${c ? " fc-scroller-harness-liquid" : ""}` },
+ me(ZG, { ref: this.scrollerRefs.createRef(f), elRef: this.scrollerElRefs.createRef(f), overflowY: h, overflowX: a.liquid ? "hidden" : "visible", maxHeight: e.maxHeight, liquid: c, liquidIsAbsolute: !0 }, v)
+ ));
+ }
+ _handleScrollerEl(e, t) {
+ let n = jxe(this.props.sections, t);
+ n && lu(n.chunk.scrollerElRef, e);
+ }
+ componentDidMount() {
+ this.handleSizing(), this.context.addResizeHandler(this.handleSizing);
+ }
+ componentDidUpdate() {
+ this.handleSizing();
+ }
+ componentWillUnmount() {
+ this.context.removeResizeHandler(this.handleSizing);
+ }
+ computeShrinkWidth() {
+ return Nxe(this.props.cols) ? Dxe(this.scrollerElRefs.getAll()) : 0;
+ }
+ computeScrollerDims() {
+ let e = _be(), { scrollerRefs: t, scrollerElRefs: n } = this, i = !1, a = {}, o = {};
+ for (let s in t.currentMap) {
+ let l = t.currentMap[s];
+ if (l && l.needsYScrolling()) {
+ i = !0;
+ break;
+ }
+ }
+ for (let s of this.props.sections) {
+ let l = s.key, u = n.currentMap[l];
+ if (u) {
+ let c = u.parentNode;
+ a[l] = Math.floor(c.getBoundingClientRect().width - (i ? e.y : 0)), o[l] = Math.floor(c.getBoundingClientRect().height);
+ }
+ }
+ return { forceYScrollbars: i, scrollerClientWidths: a, scrollerClientHeights: o };
+ }
+}
+xM.addStateEquality({
+ scrollerClientWidths: El,
+ scrollerClientHeights: El
+});
+function jxe(r, e) {
+ for (let t of r)
+ if (t.key === e)
+ return t;
+ return null;
+}
+class Tx extends un {
+ constructor() {
+ super(...arguments), this.handleEl = (e) => {
+ this.el = e, e && Mz(e, this.props.seg);
+ };
+ }
+ render() {
+ const { props: e, context: t } = this, { options: n } = t, { seg: i } = e, { eventRange: a } = i, { ui: o } = a, s = {
+ event: new Gn(t, a.def, a.instance),
+ view: t.viewApi,
+ timeText: e.timeText,
+ textColor: o.textColor,
+ backgroundColor: o.backgroundColor,
+ borderColor: o.borderColor,
+ isDraggable: !e.disableDragging && $be(i, t),
+ isStartResizable: !e.disableResizing && Hbe(i, t),
+ isEndResizable: !e.disableResizing && Vbe(i),
+ isMirror: !!(e.isDragging || e.isResizing || e.isDateSelecting),
+ isStart: !!i.isStart,
+ isEnd: !!i.isEnd,
+ isPast: !!e.isPast,
+ isFuture: !!e.isFuture,
+ isToday: !!e.isToday,
+ isSelected: !!e.isSelected,
+ isDragging: !!e.isDragging,
+ isResizing: !!e.isResizing
+ };
+ return me(ma, Object.assign({}, e, { elRef: this.handleEl, elClasses: [
+ ...Gbe(s),
+ ...i.eventRange.ui.classNames,
+ ...e.elClasses || []
+ ], renderProps: s, generatorName: "eventContent", customGenerator: n.eventContent, defaultGenerator: e.defaultGenerator, classNameGenerator: n.eventClassNames, didMount: n.eventDidMount, willUnmount: n.eventWillUnmount }));
+ }
+ componentDidUpdate(e) {
+ this.el && this.props.seg !== e.seg && Mz(this.el, this.props.seg);
+ }
+}
+class QG extends un {
+ render() {
+ let { props: e, context: t } = this, { options: n } = t, { seg: i } = e, { ui: a } = i.eventRange, o = n.eventTimeFormat || e.defaultTimeFormat, s = rg(i, o, t, e.defaultDisplayEventTime, e.defaultDisplayEventEnd);
+ return me(Tx, Object.assign({}, e, { elTag: "a", elStyle: {
+ borderColor: a.borderColor,
+ backgroundColor: a.backgroundColor
+ }, elAttrs: pM(i, t), defaultGenerator: Fxe, timeText: s }), (l, u) => me(
+ Dn,
+ null,
+ me(l, { elTag: "div", elClasses: ["fc-event-main"], elStyle: { color: u.textColor } }),
+ !!u.isStartResizable && me("div", { className: "fc-event-resizer fc-event-resizer-start" }),
+ !!u.isEndResizable && me("div", { className: "fc-event-resizer fc-event-resizer-end" })
+ ));
+ }
+}
+function Fxe(r) {
+ return me(
+ "div",
+ { className: "fc-event-main-frame" },
+ r.timeText && me("div", { className: "fc-event-time" }, r.timeText),
+ me(
+ "div",
+ { className: "fc-event-title-container" },
+ me("div", { className: "fc-event-title fc-sticky" }, r.event.title || me(Dn, null, " "))
+ )
+ );
+}
+const SM = (r) => me(fu.Consumer, null, (e) => {
+ let { options: t } = e, n = {
+ isAxis: r.isAxis,
+ date: e.dateEnv.toDate(r.date),
+ view: e.viewApi
+ };
+ return me(ma, Object.assign({}, r, { elTag: r.elTag || "div", renderProps: n, generatorName: "nowIndicatorContent", customGenerator: t.nowIndicatorContent, classNameGenerator: t.nowIndicatorClassNames, didMount: t.nowIndicatorDidMount, willUnmount: t.nowIndicatorWillUnmount }));
+}), $xe = jn({ day: "numeric" });
+class wM extends un {
+ constructor() {
+ super(...arguments), this.refineRenderProps = q0(Hxe);
+ }
+ render() {
+ let { props: e, context: t } = this, { options: n } = t, i = this.refineRenderProps({
+ date: e.date,
+ dateProfile: e.dateProfile,
+ todayRange: e.todayRange,
+ isMonthStart: e.isMonthStart || !1,
+ showDayNumber: e.showDayNumber,
+ extraRenderProps: e.extraRenderProps,
+ viewApi: t.viewApi,
+ dateEnv: t.dateEnv,
+ monthStartFormat: n.monthStartFormat
+ });
+ return me(ma, Object.assign({}, e, { elClasses: [
+ ...Sx(i, t.theme),
+ ...e.elClasses || []
+ ], elAttrs: Object.assign(Object.assign({}, e.elAttrs), i.isDisabled ? {} : { "data-date": ym(e.date) }), renderProps: i, generatorName: "dayCellContent", customGenerator: n.dayCellContent, defaultGenerator: e.defaultGenerator, classNameGenerator: (
+ // don't use custom classNames if disabled
+ i.isDisabled ? void 0 : n.dayCellClassNames
+ ), didMount: n.dayCellDidMount, willUnmount: n.dayCellWillUnmount }));
+ }
+}
+function CM(r) {
+ return !!(r.dayCellContent || zG("dayCellContent", r));
+}
+function Hxe(r) {
+ let { date: e, dateEnv: t, dateProfile: n, isMonthStart: i } = r, a = uM(e, r.todayRange, null, n), o = r.showDayNumber ? t.format(e, i ? r.monthStartFormat : $xe) : "";
+ return Object.assign(Object.assign(Object.assign({ date: t.toDate(e), view: r.viewApi }, a), {
+ isMonthStart: i,
+ dayNumberText: o
+ }), r.extraRenderProps);
+}
+class qG extends un {
+ render() {
+ let { props: e } = this, { seg: t } = e;
+ return me(Tx, { elTag: "div", elClasses: ["fc-bg-event"], elStyle: { backgroundColor: t.eventRange.ui.backgroundColor }, defaultGenerator: Vxe, seg: t, timeText: "", isDragging: !1, isResizing: !1, isDateSelecting: !1, isSelected: !1, isPast: e.isPast, isFuture: e.isFuture, isToday: e.isToday, disableDragging: !0, disableResizing: !0 });
+ }
+}
+function Vxe(r) {
+ let { title: e } = r.event;
+ return e && me("div", { className: "fc-event-title" }, r.event.title);
+}
+function eU(r) {
+ return me("div", { className: `fc-${r}` });
+}
+const tU = (r) => me(fu.Consumer, null, (e) => {
+ let { dateEnv: t, options: n } = e, { date: i } = r, a = n.weekNumberFormat || r.defaultFormat, o = t.computeWeekNumber(i), s = t.format(i, a);
+ return me(
+ ma,
+ Object.assign({}, r, { renderProps: { num: o, text: s, date: i }, generatorName: "weekNumberContent", customGenerator: n.weekNumberContent, defaultGenerator: Gxe, classNameGenerator: n.weekNumberClassNames, didMount: n.weekNumberDidMount, willUnmount: n.weekNumberWillUnmount })
+ );
+});
+function Gxe(r) {
+ return r.text;
+}
+const FC = 10;
+class Uxe extends un {
+ constructor() {
+ super(...arguments), this.state = {
+ titleId: cc()
+ }, this.handleRootEl = (e) => {
+ this.rootEl = e, this.props.elRef && lu(this.props.elRef, e);
+ }, this.handleDocumentMouseDown = (e) => {
+ const t = uG(e);
+ this.rootEl.contains(t) || this.handleCloseClick();
+ }, this.handleDocumentKeyDown = (e) => {
+ e.key === "Escape" && this.handleCloseClick();
+ }, this.handleCloseClick = () => {
+ let { onClose: e } = this.props;
+ e && e();
+ };
+ }
+ render() {
+ let { theme: e, options: t } = this.context, { props: n, state: i } = this, a = [
+ "fc-popover",
+ e.getClass("popover")
+ ].concat(n.extraClassNames || []);
+ return E0e(me(
+ "div",
+ Object.assign({}, n.extraAttrs, { id: n.id, className: a.join(" "), "aria-labelledby": i.titleId, ref: this.handleRootEl }),
+ me(
+ "div",
+ { className: "fc-popover-header " + e.getClass("popoverHeader") },
+ me("span", { className: "fc-popover-title", id: i.titleId }, n.title),
+ me("span", { className: "fc-popover-close " + e.getIconClass("close"), title: t.closeHint, onClick: this.handleCloseClick })
+ ),
+ me("div", { className: "fc-popover-body " + e.getClass("popoverContent") }, n.children)
+ ), n.parentEl);
+ }
+ componentDidMount() {
+ document.addEventListener("mousedown", this.handleDocumentMouseDown), document.addEventListener("keydown", this.handleDocumentKeyDown), this.updateSize();
+ }
+ componentWillUnmount() {
+ document.removeEventListener("mousedown", this.handleDocumentMouseDown), document.removeEventListener("keydown", this.handleDocumentKeyDown);
+ }
+ updateSize() {
+ let { isRtl: e } = this.context, { alignmentEl: t, alignGridTop: n } = this.props, { rootEl: i } = this, a = wbe(t);
+ if (a) {
+ let o = i.getBoundingClientRect(), s = n ? da(t, ".fc-scrollgrid").getBoundingClientRect().top : a.top, l = e ? a.right - o.width : a.left;
+ s = Math.max(s, FC), l = Math.min(l, document.documentElement.clientWidth - FC - o.width), l = Math.max(l, FC);
+ let u = i.offsetParent.getBoundingClientRect();
+ qp(i, {
+ top: s - u.top,
+ left: l - u.left
+ });
+ }
+ }
+}
+class Wxe extends Vs {
+ constructor() {
+ super(...arguments), this.handleRootEl = (e) => {
+ this.rootEl = e, e ? this.context.registerInteractiveComponent(this, {
+ el: e,
+ useEventCenter: !1
+ }) : this.context.unregisterInteractiveComponent(this);
+ };
+ }
+ render() {
+ let { options: e, dateEnv: t } = this.context, { props: n } = this, { startDate: i, todayRange: a, dateProfile: o } = n, s = t.format(i, e.dayPopoverFormat);
+ return me(wM, { elRef: this.handleRootEl, date: i, dateProfile: o, todayRange: a }, (l, u, c) => me(
+ Uxe,
+ { elRef: c.ref, id: n.id, title: s, extraClassNames: ["fc-more-popover"].concat(c.className || []), extraAttrs: c, parentEl: n.parentEl, alignmentEl: n.alignmentEl, alignGridTop: n.alignGridTop, onClose: n.onClose },
+ CM(e) && me(l, { elTag: "div", elClasses: ["fc-more-popover-misc"] }),
+ n.children
+ ));
+ }
+ queryHit(e, t, n, i) {
+ let { rootEl: a, props: o } = this;
+ return e >= 0 && e < n && t >= 0 && t < i ? {
+ dateProfile: o.dateProfile,
+ dateSpan: Object.assign({ allDay: !o.forceTimed, range: {
+ start: o.startDate,
+ end: o.endDate
+ } }, o.extraDateSpan),
+ dayEl: a,
+ rect: {
+ left: 0,
+ top: 0,
+ right: n,
+ bottom: i
+ },
+ layer: 1
+ // important when comparing with hits from other components
+ } : null;
+ }
+}
+class rU extends un {
+ constructor() {
+ super(...arguments), this.state = {
+ isPopoverOpen: !1,
+ popoverId: cc()
+ }, this.handleLinkEl = (e) => {
+ this.linkEl = e, this.props.elRef && lu(this.props.elRef, e);
+ }, this.handleClick = (e) => {
+ let { props: t, context: n } = this, { moreLinkClick: i } = n.options, a = Pz(t).start;
+ function o(s) {
+ let { def: l, instance: u, range: c } = s.eventRange;
+ return {
+ event: new Gn(n, l, u),
+ start: n.dateEnv.toDate(c.start),
+ end: n.dateEnv.toDate(c.end),
+ isStart: s.isStart,
+ isEnd: s.isEnd
+ };
+ }
+ typeof i == "function" && (i = i({
+ date: a,
+ allDay: !!t.allDayDate,
+ allSegs: t.allSegs.map(o),
+ hiddenSegs: t.hiddenSegs.map(o),
+ jsEvent: e,
+ view: n.viewApi
+ })), !i || i === "popover" ? this.setState({ isPopoverOpen: !0 }) : typeof i == "string" && n.calendarApi.zoomTo(a, i);
+ }, this.handlePopoverClose = () => {
+ this.setState({ isPopoverOpen: !1 });
+ };
+ }
+ render() {
+ let { props: e, state: t } = this;
+ return me(fu.Consumer, null, (n) => {
+ let { viewApi: i, options: a, calendarApi: o } = n, { moreLinkText: s } = a, { moreCnt: l } = e, u = Pz(e), c = typeof s == "function" ? s.call(o, l) : `+${l} ${s}`, h = eg(a.moreLinkHint, [l], c), f = {
+ num: l,
+ shortText: `+${l}`,
+ text: c,
+ view: i
+ };
+ return me(
+ Dn,
+ null,
+ !!e.moreCnt && me(ma, { elTag: e.elTag || "a", elRef: this.handleLinkEl, elClasses: [
+ ...e.elClasses || [],
+ "fc-more-link"
+ ], elStyle: e.elStyle, elAttrs: Object.assign(Object.assign(Object.assign({}, e.elAttrs), hG(this.handleClick)), { title: h, "aria-expanded": t.isPopoverOpen, "aria-controls": t.isPopoverOpen ? t.popoverId : "" }), renderProps: f, generatorName: "moreLinkContent", customGenerator: a.moreLinkContent, defaultGenerator: e.defaultGenerator || Yxe, classNameGenerator: a.moreLinkClassNames, didMount: a.moreLinkDidMount, willUnmount: a.moreLinkWillUnmount }, e.children),
+ t.isPopoverOpen && me(Wxe, { id: t.popoverId, startDate: u.start, endDate: u.end, dateProfile: e.dateProfile, todayRange: e.todayRange, extraDateSpan: e.extraDateSpan, parentEl: this.parentEl, alignmentEl: e.alignmentElRef ? e.alignmentElRef.current : this.linkEl, alignGridTop: e.alignGridTop, forceTimed: e.forceTimed, onClose: this.handlePopoverClose }, e.popoverContent())
+ );
+ });
+ }
+ componentDidMount() {
+ this.updateParentEl();
+ }
+ componentDidUpdate() {
+ this.updateParentEl();
+ }
+ updateParentEl() {
+ this.linkEl && (this.parentEl = da(this.linkEl, ".fc-view-harness"));
+ }
+}
+function Yxe(r) {
+ return r.text;
+}
+function Pz(r) {
+ if (r.allDayDate)
+ return {
+ start: r.allDayDate,
+ end: Bi(r.allDayDate, 1)
+ };
+ let { hiddenSegs: e } = r;
+ return {
+ start: nU(e),
+ end: Zxe(e)
+ };
+}
+function nU(r) {
+ return r.reduce(Xxe).eventRange.range.start;
+}
+function Xxe(r, e) {
+ return r.eventRange.range.start < e.eventRange.range.start ? r : e;
+}
+function Zxe(r) {
+ return r.reduce(Jxe).eventRange.range.end;
+}
+function Jxe(r, e) {
+ return r.eventRange.range.end > e.eventRange.range.end ? r : e;
+}
+class Hg extends un {
+ render() {
+ let { props: e, context: t } = this, { options: n } = t, i = { view: t.viewApi };
+ return me(ma, Object.assign({}, e, { elTag: e.elTag || "div", elClasses: [
+ ...iU(e.viewSpec),
+ ...e.elClasses || []
+ ], renderProps: i, classNameGenerator: n.viewClassNames, generatorName: void 0, didMount: n.viewDidMount, willUnmount: n.viewWillUnmount }), () => e.children);
+ }
+}
+function iU(r) {
+ return [
+ `fc-${r.type}-view`,
+ "fc-view"
+ ];
+}
+const Kxe = {
+ id: String,
+ defaultAllDay: Boolean,
+ url: String,
+ format: String,
+ events: $e,
+ eventDataTransform: $e,
+ // for any network-related sources
+ success: $e,
+ failure: $e
+};
+function aU(r, e, t = oU(e)) {
+ let n;
+ if (typeof r == "string" ? n = { url: r } : typeof r == "function" || Array.isArray(r) ? n = { events: r } : typeof r == "object" && r && (n = r), n) {
+ let { refined: i, extra: a } = rM(n, t), o = Qxe(i, e);
+ if (o)
+ return {
+ _raw: r,
+ isFetching: !1,
+ latestFetchId: "",
+ fetchRange: null,
+ defaultAllDay: i.defaultAllDay,
+ eventDataTransform: i.eventDataTransform,
+ success: i.success,
+ failure: i.failure,
+ publicId: i.id || "",
+ sourceId: df(),
+ sourceDefId: o.sourceDefId,
+ meta: o.meta,
+ ui: db(i, e),
+ extendedProps: a
+ };
+ }
+ return null;
+}
+function oU(r) {
+ return Object.assign(Object.assign(Object.assign({}, fb), Kxe), r.pluginHooks.eventSourceRefiners);
+}
+function Qxe(r, e) {
+ let t = e.pluginHooks.eventSourceDefs;
+ for (let n = t.length - 1; n >= 0; n -= 1) {
+ let a = t[n].parseMeta(r);
+ if (a)
+ return { sourceDefId: n, meta: a };
+ }
+ return null;
+}
+class qxe {
+ getCurrentData() {
+ return this.currentDataManager.getCurrentData();
+ }
+ dispatch(e) {
+ this.currentDataManager.dispatch(e);
+ }
+ get view() {
+ return this.getCurrentData().viewApi;
+ }
+ batchRendering(e) {
+ e();
+ }
+ updateSize() {
+ this.trigger("_resize", !0);
+ }
+ // Options
+ // -----------------------------------------------------------------------------------------------------------------
+ setOption(e, t) {
+ this.dispatch({
+ type: "SET_OPTION",
+ optionName: e,
+ rawOptionValue: t
+ });
+ }
+ getOption(e) {
+ return this.currentDataManager.currentCalendarOptionsInput[e];
+ }
+ getAvailableLocaleCodes() {
+ return Object.keys(this.getCurrentData().availableRawLocales);
+ }
+ // Trigger
+ // -----------------------------------------------------------------------------------------------------------------
+ on(e, t) {
+ let { currentDataManager: n } = this;
+ n.currentCalendarOptionsRefiners[e] ? n.emitter.on(e, t) : console.warn(`Unknown listener name '${e}'`);
+ }
+ off(e, t) {
+ this.currentDataManager.emitter.off(e, t);
+ }
+ // not meant for public use
+ trigger(e, ...t) {
+ this.currentDataManager.emitter.trigger(e, ...t);
+ }
+ // View
+ // -----------------------------------------------------------------------------------------------------------------
+ changeView(e, t) {
+ this.batchRendering(() => {
+ if (this.unselect(), t)
+ if (t.start && t.end)
+ this.dispatch({
+ type: "CHANGE_VIEW_TYPE",
+ viewType: e
+ }), this.dispatch({
+ type: "SET_OPTION",
+ optionName: "visibleRange",
+ rawOptionValue: t
+ });
+ else {
+ let { dateEnv: n } = this.getCurrentData();
+ this.dispatch({
+ type: "CHANGE_VIEW_TYPE",
+ viewType: e,
+ dateMarker: n.createMarker(t)
+ });
+ }
+ else
+ this.dispatch({
+ type: "CHANGE_VIEW_TYPE",
+ viewType: e
+ });
+ });
+ }
+ // Forces navigation to a view for the given date.
+ // `viewType` can be a specific view name or a generic one like "week" or "day".
+ // needs to change
+ zoomTo(e, t) {
+ let n = this.getCurrentData(), i;
+ t = t || "day", i = n.viewSpecs[t] || this.getUnitViewSpec(t), this.unselect(), i ? this.dispatch({
+ type: "CHANGE_VIEW_TYPE",
+ viewType: i.type,
+ dateMarker: e
+ }) : this.dispatch({
+ type: "CHANGE_DATE",
+ dateMarker: e
+ });
+ }
+ // Given a duration singular unit, like "week" or "day", finds a matching view spec.
+ // Preference is given to views that have corresponding buttons.
+ getUnitViewSpec(e) {
+ let { viewSpecs: t, toolbarConfig: n } = this.getCurrentData(), i = [].concat(n.header ? n.header.viewsWithButtons : [], n.footer ? n.footer.viewsWithButtons : []), a, o;
+ for (let s in t)
+ i.push(s);
+ for (a = 0; a < i.length; a += 1)
+ if (o = t[i[a]], o && o.singleUnit === e)
+ return o;
+ return null;
+ }
+ // Current Date
+ // -----------------------------------------------------------------------------------------------------------------
+ prev() {
+ this.unselect(), this.dispatch({ type: "PREV" });
+ }
+ next() {
+ this.unselect(), this.dispatch({ type: "NEXT" });
+ }
+ prevYear() {
+ let e = this.getCurrentData();
+ this.unselect(), this.dispatch({
+ type: "CHANGE_DATE",
+ dateMarker: e.dateEnv.addYears(e.currentDate, -1)
+ });
+ }
+ nextYear() {
+ let e = this.getCurrentData();
+ this.unselect(), this.dispatch({
+ type: "CHANGE_DATE",
+ dateMarker: e.dateEnv.addYears(e.currentDate, 1)
+ });
+ }
+ today() {
+ let e = this.getCurrentData();
+ this.unselect(), this.dispatch({
+ type: "CHANGE_DATE",
+ dateMarker: bm(e.calendarOptions.now, e.dateEnv)
+ });
+ }
+ gotoDate(e) {
+ let t = this.getCurrentData();
+ this.unselect(), this.dispatch({
+ type: "CHANGE_DATE",
+ dateMarker: t.dateEnv.createMarker(e)
+ });
+ }
+ incrementDate(e) {
+ let t = this.getCurrentData(), n = Xr(e);
+ n && (this.unselect(), this.dispatch({
+ type: "CHANGE_DATE",
+ dateMarker: t.dateEnv.add(t.currentDate, n)
+ }));
+ }
+ getDate() {
+ let e = this.getCurrentData();
+ return e.dateEnv.toDate(e.currentDate);
+ }
+ // Date Formatting Utils
+ // -----------------------------------------------------------------------------------------------------------------
+ formatDate(e, t) {
+ let { dateEnv: n } = this.getCurrentData();
+ return n.format(n.createMarker(e), jn(t));
+ }
+ // `settings` is for formatter AND isEndExclusive
+ formatRange(e, t, n) {
+ let { dateEnv: i } = this.getCurrentData();
+ return i.formatRange(i.createMarker(e), i.createMarker(t), jn(n), n);
+ }
+ formatIso(e, t) {
+ let { dateEnv: n } = this.getCurrentData();
+ return n.formatIso(n.createMarker(e), { omitTime: t });
+ }
+ // Date Selection / Event Selection / DayClick
+ // -----------------------------------------------------------------------------------------------------------------
+ select(e, t) {
+ let n;
+ t == null ? e.start != null ? n = e : n = {
+ start: e,
+ end: null
+ } : n = {
+ start: e,
+ end: t
+ };
+ let i = this.getCurrentData(), a = Wbe(n, i.dateEnv, Xr({ days: 1 }));
+ a && (this.dispatch({ type: "SELECT_DATES", selection: a }), AG(a, null, i));
+ }
+ unselect(e) {
+ let t = this.getCurrentData();
+ t.dateSelection && (this.dispatch({ type: "UNSELECT_DATES" }), Nbe(e, t));
+ }
+ // Public Events API
+ // -----------------------------------------------------------------------------------------------------------------
+ addEvent(e, t) {
+ if (e instanceof Gn) {
+ let o = e._def, s = e._instance;
+ return this.getCurrentData().eventStore.defs[o.defId] || (this.dispatch({
+ type: "ADD_EVENTS",
+ eventStore: qT({ def: o, instance: s })
+ // TODO: better util for two args?
+ }), this.triggerEventAdd(e)), e;
+ }
+ let n = this.getCurrentData(), i;
+ if (t instanceof cd)
+ i = t.internalEventSource;
+ else if (typeof t == "boolean")
+ t && ([i] = eM(n.eventSources));
+ else if (t != null) {
+ let o = this.getEventSourceById(t);
+ if (!o)
+ return console.warn(`Could not find an event source with ID "${t}"`), null;
+ i = o.internalEventSource;
+ }
+ let a = yG(e, i, n, !1);
+ if (a) {
+ let o = new Gn(n, a.def, a.def.recurringDef ? null : a.instance);
+ return this.dispatch({
+ type: "ADD_EVENTS",
+ eventStore: qT(a)
+ }), this.triggerEventAdd(o), o;
+ }
+ return null;
+ }
+ triggerEventAdd(e) {
+ let { emitter: t } = this.getCurrentData();
+ t.trigger("eventAdd", {
+ event: e,
+ relatedEvents: [],
+ revert: () => {
+ this.dispatch({
+ type: "REMOVE_EVENTS",
+ eventStore: EG(e)
+ });
+ }
+ });
+ }
+ // TODO: optimize
+ getEventById(e) {
+ let t = this.getCurrentData(), { defs: n, instances: i } = t.eventStore;
+ e = String(e);
+ for (let a in n) {
+ let o = n[a];
+ if (o.publicId === e) {
+ if (o.recurringDef)
+ return new Gn(t, o, null);
+ for (let s in i) {
+ let l = i[s];
+ if (l.defId === o.defId)
+ return new Gn(t, o, l);
+ }
+ }
+ }
+ return null;
+ }
+ getEvents() {
+ let e = this.getCurrentData();
+ return $h(e.eventStore, e);
+ }
+ removeAllEvents() {
+ this.dispatch({ type: "REMOVE_ALL_EVENTS" });
+ }
+ // Public Event Sources API
+ // -----------------------------------------------------------------------------------------------------------------
+ getEventSources() {
+ let e = this.getCurrentData(), t = e.eventSources, n = [];
+ for (let i in t)
+ n.push(new cd(e, t[i]));
+ return n;
+ }
+ getEventSourceById(e) {
+ let t = this.getCurrentData(), n = t.eventSources;
+ e = String(e);
+ for (let i in n)
+ if (n[i].publicId === e)
+ return new cd(t, n[i]);
+ return null;
+ }
+ addEventSource(e) {
+ let t = this.getCurrentData();
+ if (e instanceof cd)
+ return t.eventSources[e.internalEventSource.sourceId] || this.dispatch({
+ type: "ADD_EVENT_SOURCES",
+ sources: [e.internalEventSource]
+ }), e;
+ let n = aU(e, t);
+ return n ? (this.dispatch({ type: "ADD_EVENT_SOURCES", sources: [n] }), new cd(t, n)) : null;
+ }
+ removeAllEventSources() {
+ this.dispatch({ type: "REMOVE_ALL_EVENT_SOURCES" });
+ }
+ refetchEvents() {
+ this.dispatch({ type: "FETCH_EVENT_SOURCES", isRefetch: !0 });
+ }
+ // Scroll
+ // -----------------------------------------------------------------------------------------------------------------
+ scrollToTime(e) {
+ let t = Xr(e);
+ t && this.trigger("_scrollRequest", { time: t });
+ }
+}
+class eSe {
+ constructor() {
+ this.handlers = [];
+ }
+ set(e) {
+ this.currentValue = e;
+ for (let t of this.handlers)
+ t(e);
+ }
+ subscribe(e) {
+ this.handlers.push(e), this.currentValue !== void 0 && e(this.currentValue);
+ }
+}
+class tSe extends eSe {
+ constructor() {
+ super(...arguments), this.map = /* @__PURE__ */ new Map();
+ }
+ // for consistent order
+ handle(e) {
+ const { map: t } = this;
+ let n = !1;
+ e.isActive ? (t.set(e.id, e), n = !0) : t.has(e.id) && (t.delete(e.id), n = !0), n && this.set(t);
+ }
+}
+const rSe = [], sU = {
+ code: "en",
+ week: {
+ dow: 0,
+ doy: 4
+ // 4 days need to be within the year to be considered the first week
+ },
+ direction: "ltr",
+ buttonText: {
+ prev: "prev",
+ next: "next",
+ prevYear: "prev year",
+ nextYear: "next year",
+ year: "year",
+ today: "today",
+ month: "month",
+ week: "week",
+ day: "day",
+ list: "list"
+ },
+ weekText: "W",
+ weekTextLong: "Week",
+ closeHint: "Close",
+ timeHint: "Time",
+ eventHint: "Event",
+ allDayText: "all-day",
+ moreLinkText: "more",
+ noEventsText: "No events to display"
+}, lU = Object.assign(Object.assign({}, sU), {
+ // Includes things we don't want other locales to inherit,
+ // things that derive from other translatable strings.
+ buttonHints: {
+ prev: "Previous $0",
+ next: "Next $0",
+ today(r, e) {
+ return e === "day" ? "Today" : `This ${r}`;
+ }
+ },
+ viewHint: "$0 view",
+ navLinkHint: "Go to $0",
+ moreLinkHint(r) {
+ return `Show ${r} more event${r === 1 ? "" : "s"}`;
+ }
+});
+function nSe(r) {
+ let e = r.length > 0 ? r[0].code : "en", t = rSe.concat(r), n = {
+ en: lU
+ };
+ for (let i of t)
+ n[i.code] = i;
+ return {
+ map: n,
+ defaultCode: e
+ };
+}
+function uU(r, e) {
+ return typeof r == "object" && !Array.isArray(r) ? cU(r.code, [r.code], r) : iSe(r, e);
+}
+function iSe(r, e) {
+ let t = [].concat(r || []), n = aSe(t, e) || lU;
+ return cU(r, t, n);
+}
+function aSe(r, e) {
+ for (let t = 0; t < r.length; t += 1) {
+ let n = r[t].toLocaleLowerCase().split("-");
+ for (let i = n.length; i > 0; i -= 1) {
+ let a = n.slice(0, i).join("-");
+ if (e[a])
+ return e[a];
+ }
+ }
+ return null;
+}
+function cU(r, e, t) {
+ let n = qE([sU, t], ["buttonText"]);
+ delete n.code;
+ let { week: i } = n;
+ return delete n.week, {
+ codeArg: r,
+ codes: e,
+ week: i,
+ simpleNumberFormat: new Intl.NumberFormat(r),
+ options: n
+ };
+}
+function Gs(r) {
+ return {
+ id: df(),
+ name: r.name,
+ premiumReleaseDate: r.premiumReleaseDate ? new Date(r.premiumReleaseDate) : void 0,
+ deps: r.deps || [],
+ reducers: r.reducers || [],
+ isLoadingFuncs: r.isLoadingFuncs || [],
+ contextInit: [].concat(r.contextInit || []),
+ eventRefiners: r.eventRefiners || {},
+ eventDefMemberAdders: r.eventDefMemberAdders || [],
+ eventSourceRefiners: r.eventSourceRefiners || {},
+ isDraggableTransformers: r.isDraggableTransformers || [],
+ eventDragMutationMassagers: r.eventDragMutationMassagers || [],
+ eventDefMutationAppliers: r.eventDefMutationAppliers || [],
+ dateSelectionTransformers: r.dateSelectionTransformers || [],
+ datePointTransforms: r.datePointTransforms || [],
+ dateSpanTransforms: r.dateSpanTransforms || [],
+ views: r.views || {},
+ viewPropsTransformers: r.viewPropsTransformers || [],
+ isPropsValid: r.isPropsValid || null,
+ externalDefTransforms: r.externalDefTransforms || [],
+ viewContainerAppends: r.viewContainerAppends || [],
+ eventDropTransformers: r.eventDropTransformers || [],
+ componentInteractions: r.componentInteractions || [],
+ calendarInteractions: r.calendarInteractions || [],
+ themeClasses: r.themeClasses || {},
+ eventSourceDefs: r.eventSourceDefs || [],
+ cmdFormatter: r.cmdFormatter,
+ recurringTypes: r.recurringTypes || [],
+ namedTimeZonedImpl: r.namedTimeZonedImpl,
+ initialView: r.initialView || "",
+ elementDraggingImpl: r.elementDraggingImpl,
+ optionChangeHandlers: r.optionChangeHandlers || {},
+ scrollGridImpl: r.scrollGridImpl || null,
+ listenerRefiners: r.listenerRefiners || {},
+ optionRefiners: r.optionRefiners || {},
+ propSetHandlers: r.propSetHandlers || {}
+ };
+}
+function oSe(r, e) {
+ let t = {}, n = {
+ premiumReleaseDate: void 0,
+ reducers: [],
+ isLoadingFuncs: [],
+ contextInit: [],
+ eventRefiners: {},
+ eventDefMemberAdders: [],
+ eventSourceRefiners: {},
+ isDraggableTransformers: [],
+ eventDragMutationMassagers: [],
+ eventDefMutationAppliers: [],
+ dateSelectionTransformers: [],
+ datePointTransforms: [],
+ dateSpanTransforms: [],
+ views: {},
+ viewPropsTransformers: [],
+ isPropsValid: null,
+ externalDefTransforms: [],
+ viewContainerAppends: [],
+ eventDropTransformers: [],
+ componentInteractions: [],
+ calendarInteractions: [],
+ themeClasses: {},
+ eventSourceDefs: [],
+ cmdFormatter: null,
+ recurringTypes: [],
+ namedTimeZonedImpl: null,
+ initialView: "",
+ elementDraggingImpl: null,
+ optionChangeHandlers: {},
+ scrollGridImpl: null,
+ listenerRefiners: {},
+ optionRefiners: {},
+ propSetHandlers: {}
+ };
+ function i(a) {
+ for (let o of a) {
+ const s = o.name, l = t[s];
+ l === void 0 ? (t[s] = o.id, i(o.deps), n = lSe(n, o)) : l !== o.id && console.warn(`Duplicate plugin '${s}'`);
+ }
+ }
+ return r && i(r), i(e), n;
+}
+function sSe() {
+ let r = [], e = [], t;
+ return (n, i) => ((!t || !_c(n, r) || !_c(i, e)) && (t = oSe(n, i)), r = n, e = i, t);
+}
+function lSe(r, e) {
+ return {
+ premiumReleaseDate: uSe(r.premiumReleaseDate, e.premiumReleaseDate),
+ reducers: r.reducers.concat(e.reducers),
+ isLoadingFuncs: r.isLoadingFuncs.concat(e.isLoadingFuncs),
+ contextInit: r.contextInit.concat(e.contextInit),
+ eventRefiners: Object.assign(Object.assign({}, r.eventRefiners), e.eventRefiners),
+ eventDefMemberAdders: r.eventDefMemberAdders.concat(e.eventDefMemberAdders),
+ eventSourceRefiners: Object.assign(Object.assign({}, r.eventSourceRefiners), e.eventSourceRefiners),
+ isDraggableTransformers: r.isDraggableTransformers.concat(e.isDraggableTransformers),
+ eventDragMutationMassagers: r.eventDragMutationMassagers.concat(e.eventDragMutationMassagers),
+ eventDefMutationAppliers: r.eventDefMutationAppliers.concat(e.eventDefMutationAppliers),
+ dateSelectionTransformers: r.dateSelectionTransformers.concat(e.dateSelectionTransformers),
+ datePointTransforms: r.datePointTransforms.concat(e.datePointTransforms),
+ dateSpanTransforms: r.dateSpanTransforms.concat(e.dateSpanTransforms),
+ views: Object.assign(Object.assign({}, r.views), e.views),
+ viewPropsTransformers: r.viewPropsTransformers.concat(e.viewPropsTransformers),
+ isPropsValid: e.isPropsValid || r.isPropsValid,
+ externalDefTransforms: r.externalDefTransforms.concat(e.externalDefTransforms),
+ viewContainerAppends: r.viewContainerAppends.concat(e.viewContainerAppends),
+ eventDropTransformers: r.eventDropTransformers.concat(e.eventDropTransformers),
+ calendarInteractions: r.calendarInteractions.concat(e.calendarInteractions),
+ componentInteractions: r.componentInteractions.concat(e.componentInteractions),
+ themeClasses: Object.assign(Object.assign({}, r.themeClasses), e.themeClasses),
+ eventSourceDefs: r.eventSourceDefs.concat(e.eventSourceDefs),
+ cmdFormatter: e.cmdFormatter || r.cmdFormatter,
+ recurringTypes: r.recurringTypes.concat(e.recurringTypes),
+ namedTimeZonedImpl: e.namedTimeZonedImpl || r.namedTimeZonedImpl,
+ initialView: r.initialView || e.initialView,
+ elementDraggingImpl: r.elementDraggingImpl || e.elementDraggingImpl,
+ optionChangeHandlers: Object.assign(Object.assign({}, r.optionChangeHandlers), e.optionChangeHandlers),
+ scrollGridImpl: e.scrollGridImpl || r.scrollGridImpl,
+ listenerRefiners: Object.assign(Object.assign({}, r.listenerRefiners), e.listenerRefiners),
+ optionRefiners: Object.assign(Object.assign({}, r.optionRefiners), e.optionRefiners),
+ propSetHandlers: Object.assign(Object.assign({}, r.propSetHandlers), e.propSetHandlers)
+ };
+}
+function uSe(r, e) {
+ return r === void 0 ? e : e === void 0 ? r : new Date(Math.max(r.valueOf(), e.valueOf()));
+}
+class Ac extends _m {
+}
+Ac.prototype.classes = {
+ root: "fc-theme-standard",
+ tableCellShaded: "fc-cell-shaded",
+ buttonGroup: "fc-button-group",
+ button: "fc-button fc-button-primary",
+ buttonActive: "fc-button-active"
+};
+Ac.prototype.baseIconClass = "fc-icon";
+Ac.prototype.iconClasses = {
+ close: "fc-icon-x",
+ prev: "fc-icon-chevron-left",
+ next: "fc-icon-chevron-right",
+ prevYear: "fc-icon-chevrons-left",
+ nextYear: "fc-icon-chevrons-right"
+};
+Ac.prototype.rtlIconClasses = {
+ prev: "fc-icon-chevron-right",
+ next: "fc-icon-chevron-left",
+ prevYear: "fc-icon-chevrons-right",
+ nextYear: "fc-icon-chevrons-left"
+};
+Ac.prototype.iconOverrideOption = "buttonIcons";
+Ac.prototype.iconOverrideCustomButtonOption = "icon";
+Ac.prototype.iconOverridePrefix = "fc-icon-";
+function cSe(r, e) {
+ let t = {}, n;
+ for (n in r)
+ oI(n, t, r, e);
+ for (n in e)
+ oI(n, t, r, e);
+ return t;
+}
+function oI(r, e, t, n) {
+ if (e[r])
+ return e[r];
+ let i = hSe(r, e, t, n);
+ return i && (e[r] = i), i;
+}
+function hSe(r, e, t, n) {
+ let i = t[r], a = n[r], o = (c) => i && i[c] !== null ? i[c] : a && a[c] !== null ? a[c] : null, s = o("component"), l = o("superType"), u = null;
+ if (l) {
+ if (l === r)
+ throw new Error("Can't have a custom view type that references itself");
+ u = oI(l, e, t, n);
+ }
+ return !s && u && (s = u.component), s ? {
+ type: r,
+ component: s,
+ defaults: Object.assign(Object.assign({}, u ? u.defaults : {}), i ? i.rawOptions : {}),
+ overrides: Object.assign(Object.assign({}, u ? u.overrides : {}), a ? a.rawOptions : {})
+ } : null;
+}
+function Rz(r) {
+ return su(r, fSe);
+}
+function fSe(r) {
+ let e = typeof r == "function" ? { component: r } : r, { component: t } = e;
+ return e.content ? t = Nz(e) : t && !(t.prototype instanceof un) && (t = Nz(Object.assign(Object.assign({}, e), { content: t }))), {
+ superType: e.type,
+ component: t,
+ rawOptions: e
+ // includes type and component too :(
+ };
+}
+function Nz(r) {
+ return (e) => me(fu.Consumer, null, (t) => me(ma, { elTag: "div", elClasses: iU(t.viewSpec), renderProps: Object.assign(Object.assign({}, e), { nextDayThreshold: t.options.nextDayThreshold }), generatorName: void 0, customGenerator: r.content, classNameGenerator: r.classNames, didMount: r.didMount, willUnmount: r.willUnmount }));
+}
+function dSe(r, e, t, n) {
+ let i = Rz(r), a = Rz(e.views), o = cSe(i, a);
+ return su(o, (s) => vSe(s, a, e, t, n));
+}
+function vSe(r, e, t, n, i) {
+ let a = r.overrides.duration || r.defaults.duration || n.duration || t.duration, o = null, s = "", l = "", u = {};
+ if (a && (o = pSe(a), o)) {
+ let f = KT(o);
+ s = f.unit, f.value === 1 && (l = s, u = e[s] ? e[s].rawOptions : {});
+ }
+ let c = (f) => {
+ let v = f.buttonText || {}, b = r.defaults.buttonTextKey;
+ return b != null && v[b] != null ? v[b] : v[r.type] != null ? v[r.type] : v[l] != null ? v[l] : null;
+ }, h = (f) => {
+ let v = f.buttonHints || {}, b = r.defaults.buttonTextKey;
+ return b != null && v[b] != null ? v[b] : v[r.type] != null ? v[r.type] : v[l] != null ? v[l] : null;
+ };
+ return {
+ type: r.type,
+ component: r.component,
+ duration: o,
+ durationUnit: s,
+ singleUnit: l,
+ optionDefaults: r.defaults,
+ optionOverrides: Object.assign(Object.assign({}, u), r.overrides),
+ buttonTextOverride: c(n) || c(t) || // constructor-specified buttonText lookup hash takes precedence
+ r.overrides.buttonText,
+ buttonTextDefault: c(i) || r.defaults.buttonText || c(tg) || r.type,
+ // not DRY
+ buttonTitleOverride: h(n) || h(t) || r.overrides.buttonHint,
+ buttonTitleDefault: h(i) || r.defaults.buttonHint || h(tg)
+ // will eventually fall back to buttonText
+ };
+}
+let zz = {};
+function pSe(r) {
+ let e = JSON.stringify(r), t = zz[e];
+ return t === void 0 && (t = Xr(r), zz[e] = t), t;
+}
+function gSe(r, e) {
+ switch (e.type) {
+ case "CHANGE_VIEW_TYPE":
+ r = e.viewType;
+ }
+ return r;
+}
+function mSe(r, e) {
+ switch (e.type) {
+ case "SET_OPTION":
+ return Object.assign(Object.assign({}, r), { [e.optionName]: e.rawOptionValue });
+ default:
+ return r;
+ }
+}
+function ySe(r, e, t, n) {
+ let i;
+ switch (e.type) {
+ case "CHANGE_VIEW_TYPE":
+ return n.build(e.dateMarker || t);
+ case "CHANGE_DATE":
+ return n.build(e.dateMarker);
+ case "PREV":
+ if (i = n.buildPrev(r, t), i.isValid)
+ return i;
+ break;
+ case "NEXT":
+ if (i = n.buildNext(r, t), i.isValid)
+ return i;
+ break;
+ }
+ return r;
+}
+function _Se(r, e, t) {
+ let n = e ? e.activeRange : null;
+ return fU({}, ISe(r, t), n, t);
+}
+function bSe(r, e, t, n) {
+ let i = t ? t.activeRange : null;
+ switch (e.type) {
+ case "ADD_EVENT_SOURCES":
+ return fU(r, e.sources, i, n);
+ case "REMOVE_EVENT_SOURCE":
+ return SSe(r, e.sourceId);
+ case "PREV":
+ case "NEXT":
+ case "CHANGE_DATE":
+ case "CHANGE_VIEW_TYPE":
+ return t ? dU(r, i, n) : r;
+ case "FETCH_EVENT_SOURCES":
+ return TM(r, e.sourceIds ? (
+ // why no type?
+ dG(e.sourceIds)
+ ) : vU(r, n), i, e.isRefetch || !1, n);
+ case "RECEIVE_EVENTS":
+ case "RECEIVE_EVENT_ERROR":
+ return TSe(r, e.sourceId, e.fetchId, e.fetchRange);
+ case "REMOVE_ALL_EVENT_SOURCES":
+ return {};
+ default:
+ return r;
+ }
+}
+function xSe(r, e, t) {
+ let n = e ? e.activeRange : null;
+ return TM(r, vU(r, t), n, !0, t);
+}
+function hU(r) {
+ for (let e in r)
+ if (r[e].isFetching)
+ return !0;
+ return !1;
+}
+function fU(r, e, t, n) {
+ let i = {};
+ for (let a of e)
+ i[a.sourceId] = a;
+ return t && (i = dU(i, t, n)), Object.assign(Object.assign({}, r), i);
+}
+function SSe(r, e) {
+ return ef(r, (t) => t.sourceId !== e);
+}
+function dU(r, e, t) {
+ return TM(r, ef(r, (n) => wSe(n, e, t)), e, !1, t);
+}
+function wSe(r, e, t) {
+ return pU(r, t) ? !t.options.lazyFetching || !r.fetchRange || r.isFetching || // always cancel outdated in-progress fetches
+ e.start < r.fetchRange.start || e.end > r.fetchRange.end : !r.latestFetchId;
+}
+function TM(r, e, t, n, i) {
+ let a = {};
+ for (let o in r) {
+ let s = r[o];
+ e[o] ? a[o] = CSe(s, t, n, i) : a[o] = s;
+ }
+ return a;
+}
+function CSe(r, e, t, n) {
+ let { options: i, calendarApi: a } = n, o = n.pluginHooks.eventSourceDefs[r.sourceDefId], s = df();
+ return o.fetch({
+ eventSource: r,
+ range: e,
+ isRefetch: t,
+ context: n
+ }, (l) => {
+ let { rawEvents: u } = l;
+ i.eventSourceSuccess && (u = i.eventSourceSuccess.call(a, u, l.response) || u), r.success && (u = r.success.call(a, u, l.response) || u), n.dispatch({
+ type: "RECEIVE_EVENTS",
+ sourceId: r.sourceId,
+ fetchId: s,
+ fetchRange: e,
+ rawEvents: u
+ });
+ }, (l) => {
+ let u = !1;
+ i.eventSourceFailure && (i.eventSourceFailure.call(a, l), u = !0), r.failure && (r.failure(l), u = !0), u || console.warn(l.message, l), n.dispatch({
+ type: "RECEIVE_EVENT_ERROR",
+ sourceId: r.sourceId,
+ fetchId: s,
+ fetchRange: e,
+ error: l
+ });
+ }), Object.assign(Object.assign({}, r), { isFetching: !0, latestFetchId: s });
+}
+function TSe(r, e, t, n) {
+ let i = r[e];
+ return i && // not already removed
+ t === i.latestFetchId ? Object.assign(Object.assign({}, r), { [e]: Object.assign(Object.assign({}, i), { isFetching: !1, fetchRange: n }) }) : r;
+}
+function vU(r, e) {
+ return ef(r, (t) => pU(t, e));
+}
+function ISe(r, e) {
+ let t = oU(e), n = [].concat(r.eventSources || []), i = [];
+ r.initialEvents && n.unshift(r.initialEvents), r.events && n.unshift(r.events);
+ for (let a of n) {
+ let o = aU(a, e, t);
+ o && i.push(o);
+ }
+ return i;
+}
+function pU(r, e) {
+ return !e.pluginHooks.eventSourceDefs[r.sourceDefId].ignoreRange;
+}
+function ASe(r, e) {
+ switch (e.type) {
+ case "UNSELECT_DATES":
+ return null;
+ case "SELECT_DATES":
+ return e.selection;
+ default:
+ return r;
+ }
+}
+function ESe(r, e) {
+ switch (e.type) {
+ case "UNSELECT_EVENT":
+ return "";
+ case "SELECT_EVENT":
+ return e.eventInstanceId;
+ default:
+ return r;
+ }
+}
+function MSe(r, e) {
+ let t;
+ switch (e.type) {
+ case "UNSET_EVENT_DRAG":
+ return null;
+ case "SET_EVENT_DRAG":
+ return t = e.state, {
+ affectedEvents: t.affectedEvents,
+ mutatedEvents: t.mutatedEvents,
+ isEvent: t.isEvent
+ };
+ default:
+ return r;
+ }
+}
+function DSe(r, e) {
+ let t;
+ switch (e.type) {
+ case "UNSET_EVENT_RESIZE":
+ return null;
+ case "SET_EVENT_RESIZE":
+ return t = e.state, {
+ affectedEvents: t.affectedEvents,
+ mutatedEvents: t.mutatedEvents,
+ isEvent: t.isEvent
+ };
+ default:
+ return r;
+ }
+}
+function kSe(r, e, t, n, i) {
+ let a = r.headerToolbar ? Bz(r.headerToolbar, r, e, t, n, i) : null, o = r.footerToolbar ? Bz(r.footerToolbar, r, e, t, n, i) : null;
+ return { header: a, footer: o };
+}
+function Bz(r, e, t, n, i, a) {
+ let o = {}, s = [], l = !1;
+ for (let u in r) {
+ let c = r[u], h = OSe(c, e, t, n, i, a);
+ o[u] = h.widgets, s.push(...h.viewsWithButtons), l = l || h.hasTitle;
+ }
+ return { sectionWidgets: o, viewsWithButtons: s, hasTitle: l };
+}
+function OSe(r, e, t, n, i, a) {
+ let o = e.direction === "rtl", s = e.customButtons || {}, l = t.buttonText || {}, u = e.buttonText || {}, c = t.buttonHints || {}, h = e.buttonHints || {}, f = r ? r.split(" ") : [], v = [], b = !1;
+ return { widgets: f.map((p) => p.split(",").map((d) => {
+ if (d === "title")
+ return b = !0, { buttonName: d };
+ let m, _, y, x, g, S;
+ if (m = s[d])
+ y = (T) => {
+ m.click && m.click.call(T.target, T, T.target);
+ }, (x = n.getCustomButtonIconClass(m)) || (x = n.getIconClass(d, o)) || (g = m.text), S = m.hint || m.text;
+ else if (_ = i[d]) {
+ v.push(d), y = () => {
+ a.changeView(d);
+ }, (g = _.buttonTextOverride) || (x = n.getIconClass(d, o)) || (g = _.buttonTextDefault);
+ let T = _.buttonTextOverride || _.buttonTextDefault;
+ S = eg(
+ _.buttonTitleOverride || _.buttonTitleDefault || e.viewHint,
+ [T, d],
+ // view-name = buttonName
+ T
+ );
+ } else if (a[d])
+ if (y = () => {
+ a[d]();
+ }, (g = l[d]) || (x = n.getIconClass(d, o)) || (g = u[d]), d === "prevYear" || d === "nextYear") {
+ let T = d === "prevYear" ? "prev" : "next";
+ S = eg(c[T] || h[T], [
+ u.year || "year",
+ "year"
+ ], u[d]);
+ } else
+ S = (T) => eg(c[d] || h[d], [
+ u[T] || T,
+ T
+ ], u[d]);
+ return { buttonName: d, buttonClick: y, buttonIcon: x, buttonText: g, buttonHint: S };
+ })), viewsWithButtons: v, hasTitle: b };
+}
+class LSe {
+ constructor(e, t, n) {
+ this.type = e, this.getCurrentData = t, this.dateEnv = n;
+ }
+ get calendar() {
+ return this.getCurrentData().calendarApi;
+ }
+ get title() {
+ return this.getCurrentData().viewTitle;
+ }
+ get activeStart() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);
+ }
+ get activeEnd() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);
+ }
+ get currentStart() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);
+ }
+ get currentEnd() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);
+ }
+ getOption(e) {
+ return this.getCurrentData().options[e];
+ }
+}
+let PSe = {
+ ignoreRange: !0,
+ parseMeta(r) {
+ return Array.isArray(r.events) ? r.events : null;
+ },
+ fetch(r, e) {
+ e({
+ rawEvents: r.eventSource.meta
+ });
+ }
+};
+const RSe = Gs({
+ name: "array-event-source",
+ eventSourceDefs: [PSe]
+});
+let NSe = {
+ parseMeta(r) {
+ return typeof r.events == "function" ? r.events : null;
+ },
+ fetch(r, e, t) {
+ const { dateEnv: n } = r.context, i = r.eventSource.meta;
+ Cbe(i.bind(null, kG(r.range, n)), (a) => e({ rawEvents: a }), t);
+ }
+};
+const zSe = Gs({
+ name: "func-event-source",
+ eventSourceDefs: [NSe]
+}), BSe = {
+ method: String,
+ extraParams: $e,
+ startParam: String,
+ endParam: String,
+ timeZoneParam: String
+};
+let jSe = {
+ parseMeta(r) {
+ return r.url && (r.format === "json" || !r.format) ? {
+ url: r.url,
+ format: "json",
+ method: (r.method || "GET").toUpperCase(),
+ extraParams: r.extraParams,
+ startParam: r.startParam,
+ endParam: r.endParam,
+ timeZoneParam: r.timeZoneParam
+ } : null;
+ },
+ fetch(r, e, t) {
+ const { meta: n } = r.eventSource, i = $Se(n, r.range, r.context);
+ Mxe(n.method, n.url, i).then(([a, o]) => {
+ e({ rawEvents: a, response: o });
+ }, t);
+ }
+};
+const FSe = Gs({
+ name: "json-event-source",
+ eventSourceRefiners: BSe,
+ eventSourceDefs: [jSe]
+});
+function $Se(r, e, t) {
+ let { dateEnv: n, options: i } = t, a, o, s, l, u = {};
+ return a = r.startParam, a == null && (a = i.startParam), o = r.endParam, o == null && (o = i.endParam), s = r.timeZoneParam, s == null && (s = i.timeZoneParam), typeof r.extraParams == "function" ? l = r.extraParams() : l = r.extraParams || {}, Object.assign(u, l), u[a] = n.formatIso(e.start), u[o] = n.formatIso(e.end), n.timeZone !== "local" && (u[s] = n.timeZone), u;
+}
+const HSe = {
+ daysOfWeek: $e,
+ startTime: Xr,
+ endTime: Xr,
+ duration: Xr,
+ startRecur: $e,
+ endRecur: $e
+};
+let VSe = {
+ parse(r, e) {
+ if (r.daysOfWeek || r.startTime || r.endTime || r.startRecur || r.endRecur) {
+ let t = {
+ daysOfWeek: r.daysOfWeek || null,
+ startTime: r.startTime || null,
+ endTime: r.endTime || null,
+ startRecur: r.startRecur ? e.createMarker(r.startRecur) : null,
+ endRecur: r.endRecur ? e.createMarker(r.endRecur) : null
+ }, n;
+ return r.duration && (n = r.duration), !n && r.startTime && r.endTime && (n = o_e(r.endTime, r.startTime)), {
+ allDayGuess: !r.startTime && !r.endTime,
+ duration: n,
+ typeData: t
+ // doesn't need endTime anymore but oh well
+ };
+ }
+ return null;
+ },
+ expand(r, e, t) {
+ let n = xc(e, { start: r.startRecur, end: r.endRecur });
+ return n ? USe(r.daysOfWeek, r.startTime, n, t) : [];
+ }
+};
+const GSe = Gs({
+ name: "simple-recurring-event",
+ recurringTypes: [VSe],
+ eventRefiners: HSe
+});
+function USe(r, e, t, n) {
+ let i = r ? dG(r) : null, a = kn(t.start), o = t.end, s = [];
+ for (; a < o; ) {
+ let l;
+ (!i || i[a.getUTCDay()]) && (e ? l = n.add(a, e) : l = a, s.push(l)), a = Bi(a, 1);
+ }
+ return s;
+}
+const WSe = Gs({
+ name: "change-handler",
+ optionChangeHandlers: {
+ events(r, e) {
+ jz([r], e);
+ },
+ eventSources: jz
+ }
+});
+function jz(r, e) {
+ let t = eM(e.getCurrentData().eventSources);
+ if (t.length === 1 && r.length === 1 && Array.isArray(t[0]._raw) && Array.isArray(r[0])) {
+ e.dispatch({
+ type: "RESET_RAW_EVENTS",
+ sourceId: t[0].sourceId,
+ rawEvents: r[0]
+ });
+ return;
+ }
+ let n = [];
+ for (let i of r) {
+ let a = !1;
+ for (let o = 0; o < t.length; o += 1)
+ if (t[o]._raw === i) {
+ t.splice(o, 1), a = !0;
+ break;
+ }
+ a || n.push(i);
+ }
+ for (let i of t)
+ e.dispatch({
+ type: "REMOVE_EVENT_SOURCE",
+ sourceId: i.sourceId
+ });
+ for (let i of n)
+ e.calendarApi.addEventSource(i);
+}
+function YSe(r, e) {
+ e.emitter.trigger("datesSet", Object.assign(Object.assign({}, kG(r.activeRange, e.dateEnv)), { view: e.viewApi }));
+}
+function XSe(r, e) {
+ let { emitter: t } = e;
+ t.hasHandlers("eventsSet") && t.trigger("eventsSet", $h(r, e));
+}
+const ZSe = [
+ RSe,
+ zSe,
+ FSe,
+ GSe,
+ WSe,
+ Gs({
+ name: "misc",
+ isLoadingFuncs: [
+ (r) => hU(r.eventSources)
+ ],
+ propSetHandlers: {
+ dateProfile: YSe,
+ eventStore: XSe
+ }
+ })
+];
+class JSe {
+ constructor(e, t) {
+ this.runTaskOption = e, this.drainedOption = t, this.queue = [], this.delayedRunner = new bM(this.drain.bind(this));
+ }
+ request(e, t) {
+ this.queue.push(e), this.delayedRunner.request(t);
+ }
+ pause(e) {
+ this.delayedRunner.pause(e);
+ }
+ resume(e, t) {
+ this.delayedRunner.resume(e, t);
+ }
+ drain() {
+ let { queue: e } = this;
+ for (; e.length; ) {
+ let t = [], n;
+ for (; n = e.shift(); )
+ this.runTask(n), t.push(n);
+ this.drained(t);
+ }
+ }
+ runTask(e) {
+ this.runTaskOption && this.runTaskOption(e);
+ }
+ drained(e) {
+ this.drainedOption && this.drainedOption(e);
+ }
+}
+function KSe(r, e, t) {
+ let n;
+ return /^(year|month)$/.test(r.currentRangeUnit) ? n = r.currentRange : n = r.activeRange, t.formatRange(n.start, n.end, jn(e.titleFormat || QSe(r)), {
+ isEndExclusive: r.isRangeAllDay,
+ defaultSeparator: e.titleRangeSeparator
+ });
+}
+function QSe(r) {
+ let { currentRangeUnit: e } = r;
+ if (e === "year")
+ return { year: "numeric" };
+ if (e === "month")
+ return { year: "numeric", month: "long" };
+ let t = ub(r.currentRange.start, r.currentRange.end);
+ return t !== null && t > 1 ? { year: "numeric", month: "short", day: "numeric" } : { year: "numeric", month: "long", day: "numeric" };
+}
+class qSe {
+ constructor(e) {
+ this.computeCurrentViewData = rr(this._computeCurrentViewData), this.organizeRawLocales = rr(nSe), this.buildLocale = rr(uU), this.buildPluginHooks = sSe(), this.buildDateEnv = rr(ewe), this.buildTheme = rr(twe), this.parseToolbars = rr(kSe), this.buildViewSpecs = rr(dSe), this.buildDateProfileGenerator = q0(rwe), this.buildViewApi = rr(nwe), this.buildViewUiProps = q0(owe), this.buildEventUiBySource = rr(iwe, El), this.buildEventUiBases = rr(awe), this.parseContextBusinessHours = q0(swe), this.buildTitle = rr(KSe), this.emitter = new Cx(), this.actionRunner = new JSe(this._handleAction.bind(this), this.updateData.bind(this)), this.currentCalendarOptionsInput = {}, this.currentCalendarOptionsRefined = {}, this.currentViewOptionsInput = {}, this.currentViewOptionsRefined = {}, this.currentCalendarOptionsRefiners = {}, this.optionsForRefining = [], this.optionsForHandling = [], this.getCurrentData = () => this.data, this.dispatch = (f) => {
+ this.actionRunner.request(f);
+ }, this.props = e, this.actionRunner.pause();
+ let t = {}, n = this.computeOptionsData(e.optionOverrides, t, e.calendarApi), i = n.calendarOptions.initialView || n.pluginHooks.initialView, a = this.computeCurrentViewData(i, n, e.optionOverrides, t);
+ e.calendarApi.currentDataManager = this, this.emitter.setThisContext(e.calendarApi), this.emitter.setOptions(a.options);
+ let o = Rbe(n.calendarOptions, n.dateEnv), s = a.dateProfileGenerator.build(o);
+ Ql(s.activeRange, o) || (o = s.currentRange.start);
+ let l = {
+ dateEnv: n.dateEnv,
+ options: n.calendarOptions,
+ pluginHooks: n.pluginHooks,
+ calendarApi: e.calendarApi,
+ dispatch: this.dispatch,
+ emitter: this.emitter,
+ getCurrentData: this.getCurrentData
+ };
+ for (let f of n.pluginHooks.contextInit)
+ f(l);
+ let u = _Se(n.calendarOptions, s, l), c = {
+ dynamicOptionOverrides: t,
+ currentViewType: i,
+ currentDate: o,
+ dateProfile: s,
+ businessHours: this.parseContextBusinessHours(l),
+ eventSources: u,
+ eventUiBases: {},
+ eventStore: xo(),
+ renderableEventStore: xo(),
+ dateSelection: null,
+ eventSelection: "",
+ eventDrag: null,
+ eventResize: null,
+ selectionConfig: this.buildViewUiProps(l).selectionConfig
+ }, h = Object.assign(Object.assign({}, l), c);
+ for (let f of n.pluginHooks.reducers)
+ Object.assign(c, f(null, null, h));
+ $C(c, l) && this.emitter.trigger("loading", !0), this.state = c, this.updateData(), this.actionRunner.resume();
+ }
+ resetOptions(e, t) {
+ let { props: n } = this;
+ t === void 0 ? n.optionOverrides = e : (n.optionOverrides = Object.assign(Object.assign({}, n.optionOverrides || {}), e), this.optionsForRefining.push(...t)), (t === void 0 || t.length) && this.actionRunner.request({
+ type: "NOTHING"
+ });
+ }
+ _handleAction(e) {
+ let { props: t, state: n, emitter: i } = this, a = mSe(n.dynamicOptionOverrides, e), o = this.computeOptionsData(t.optionOverrides, a, t.calendarApi), s = gSe(n.currentViewType, e), l = this.computeCurrentViewData(s, o, t.optionOverrides, a);
+ t.calendarApi.currentDataManager = this, i.setThisContext(t.calendarApi), i.setOptions(l.options);
+ let u = {
+ dateEnv: o.dateEnv,
+ options: o.calendarOptions,
+ pluginHooks: o.pluginHooks,
+ calendarApi: t.calendarApi,
+ dispatch: this.dispatch,
+ emitter: i,
+ getCurrentData: this.getCurrentData
+ }, { currentDate: c, dateProfile: h } = n;
+ this.data && this.data.dateProfileGenerator !== l.dateProfileGenerator && (h = l.dateProfileGenerator.build(c)), c = Pbe(c, e), h = ySe(h, e, c, l.dateProfileGenerator), (e.type === "PREV" || // TODO: move this logic into DateProfileGenerator
+ e.type === "NEXT" || // "
+ !Ql(h.currentRange, c)) && (c = h.currentRange.start);
+ let f = bSe(n.eventSources, e, h, u), v = mxe(n.eventStore, e, f, h, u), w = hU(f) && !l.options.progressiveEventRendering && n.renderableEventStore || v, { eventUiSingleBase: p, selectionConfig: d } = this.buildViewUiProps(u), m = this.buildEventUiBySource(f), _ = this.buildEventUiBases(w.defs, p, m), y = {
+ dynamicOptionOverrides: a,
+ currentViewType: s,
+ currentDate: c,
+ dateProfile: h,
+ eventSources: f,
+ eventStore: v,
+ renderableEventStore: w,
+ selectionConfig: d,
+ eventUiBases: _,
+ businessHours: this.parseContextBusinessHours(u),
+ dateSelection: ASe(n.dateSelection, e),
+ eventSelection: ESe(n.eventSelection, e),
+ eventDrag: MSe(n.eventDrag, e),
+ eventResize: DSe(n.eventResize, e)
+ }, x = Object.assign(Object.assign({}, u), y);
+ for (let T of o.pluginHooks.reducers)
+ Object.assign(y, T(n, e, x));
+ let g = $C(n, u), S = $C(y, u);
+ !g && S ? i.trigger("loading", !0) : g && !S && i.trigger("loading", !1), this.state = y, t.onAction && t.onAction(e);
+ }
+ updateData() {
+ let { props: e, state: t } = this, n = this.data, i = this.computeOptionsData(e.optionOverrides, t.dynamicOptionOverrides, e.calendarApi), a = this.computeCurrentViewData(t.currentViewType, i, e.optionOverrides, t.dynamicOptionOverrides), o = this.data = Object.assign(Object.assign(Object.assign({ viewTitle: this.buildTitle(t.dateProfile, a.options, i.dateEnv), calendarApi: e.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, i), a), t), s = i.pluginHooks.optionChangeHandlers, l = n && n.calendarOptions, u = i.calendarOptions;
+ if (l && l !== u) {
+ l.timeZone !== u.timeZone && (t.eventSources = o.eventSources = xSe(o.eventSources, t.dateProfile, o), t.eventStore = o.eventStore = Oz(o.eventStore, n.dateEnv, o.dateEnv), t.renderableEventStore = o.renderableEventStore = Oz(o.renderableEventStore, n.dateEnv, o.dateEnv));
+ for (let c in s)
+ (this.optionsForHandling.indexOf(c) !== -1 || l[c] !== u[c]) && s[c](u[c], o);
+ }
+ this.optionsForHandling = [], e.onData && e.onData(o);
+ }
+ computeOptionsData(e, t, n) {
+ if (!this.optionsForRefining.length && e === this.stableOptionOverrides && t === this.stableDynamicOptionOverrides)
+ return this.stableCalendarOptionsData;
+ let { refinedOptions: i, pluginHooks: a, localeDefaults: o, availableLocaleData: s, extra: l } = this.processRawCalendarOptions(e, t);
+ Fz(l);
+ let u = this.buildDateEnv(i.timeZone, i.locale, i.weekNumberCalculation, i.firstDay, i.weekText, a, s, i.defaultRangeSeparator), c = this.buildViewSpecs(a.views, this.stableOptionOverrides, this.stableDynamicOptionOverrides, o), h = this.buildTheme(i, a), f = this.parseToolbars(i, this.stableOptionOverrides, h, c, n);
+ return this.stableCalendarOptionsData = {
+ calendarOptions: i,
+ pluginHooks: a,
+ dateEnv: u,
+ viewSpecs: c,
+ theme: h,
+ toolbarConfig: f,
+ localeDefaults: o,
+ availableRawLocales: s.map
+ };
+ }
+ // always called from behind a memoizer
+ processRawCalendarOptions(e, t) {
+ let { locales: n, locale: i } = LC([
+ tg,
+ e,
+ t
+ ]), a = this.organizeRawLocales(n), o = a.map, s = this.buildLocale(i || a.defaultCode, o).options, l = this.buildPluginHooks(e.plugins || [], ZSe), u = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, Sz), wz), Cz), l.listenerRefiners), l.optionRefiners), c = {}, h = LC([
+ tg,
+ s,
+ e,
+ t
+ ]), f = {}, v = this.currentCalendarOptionsInput, b = this.currentCalendarOptionsRefined, w = !1;
+ for (let p in h)
+ this.optionsForRefining.indexOf(p) === -1 && (h[p] === v[p] || yh[p] && p in v && yh[p](v[p], h[p])) ? f[p] = b[p] : u[p] ? (f[p] = u[p](h[p]), w = !0) : c[p] = v[p];
+ return w && (this.currentCalendarOptionsInput = h, this.currentCalendarOptionsRefined = f, this.stableOptionOverrides = e, this.stableDynamicOptionOverrides = t), this.optionsForHandling.push(...this.optionsForRefining), this.optionsForRefining = [], {
+ rawOptions: this.currentCalendarOptionsInput,
+ refinedOptions: this.currentCalendarOptionsRefined,
+ pluginHooks: l,
+ availableLocaleData: a,
+ localeDefaults: s,
+ extra: c
+ };
+ }
+ _computeCurrentViewData(e, t, n, i) {
+ let a = t.viewSpecs[e];
+ if (!a)
+ throw new Error(`viewType "${e}" is not available. Please make sure you've loaded all neccessary plugins`);
+ let { refinedOptions: o, extra: s } = this.processRawViewOptions(a, t.pluginHooks, t.localeDefaults, n, i);
+ Fz(s);
+ let l = this.buildDateProfileGenerator({
+ dateProfileGeneratorClass: a.optionDefaults.dateProfileGeneratorClass,
+ duration: a.duration,
+ durationUnit: a.durationUnit,
+ usesMinMaxTime: a.optionDefaults.usesMinMaxTime,
+ dateEnv: t.dateEnv,
+ calendarApi: this.props.calendarApi,
+ slotMinTime: o.slotMinTime,
+ slotMaxTime: o.slotMaxTime,
+ showNonCurrentDates: o.showNonCurrentDates,
+ dayCount: o.dayCount,
+ dateAlignment: o.dateAlignment,
+ dateIncrement: o.dateIncrement,
+ hiddenDays: o.hiddenDays,
+ weekends: o.weekends,
+ nowInput: o.now,
+ validRangeInput: o.validRange,
+ visibleRangeInput: o.visibleRange,
+ fixedWeekCount: o.fixedWeekCount
+ }), u = this.buildViewApi(e, this.getCurrentData, t.dateEnv);
+ return { viewSpec: a, options: o, dateProfileGenerator: l, viewApi: u };
+ }
+ processRawViewOptions(e, t, n, i, a) {
+ let o = LC([
+ tg,
+ e.optionDefaults,
+ n,
+ i,
+ e.optionOverrides,
+ a
+ ]), s = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, Sz), wz), Cz), V_e), t.listenerRefiners), t.optionRefiners), l = {}, u = this.currentViewOptionsInput, c = this.currentViewOptionsRefined, h = !1, f = {};
+ for (let v in o)
+ o[v] === u[v] || yh[v] && yh[v](o[v], u[v]) ? l[v] = c[v] : (o[v] === this.currentCalendarOptionsInput[v] || yh[v] && yh[v](o[v], this.currentCalendarOptionsInput[v]) ? v in this.currentCalendarOptionsRefined && (l[v] = this.currentCalendarOptionsRefined[v]) : s[v] ? l[v] = s[v](o[v]) : f[v] = o[v], h = !0);
+ return h && (this.currentViewOptionsInput = o, this.currentViewOptionsRefined = l), {
+ rawOptions: this.currentViewOptionsInput,
+ refinedOptions: this.currentViewOptionsRefined,
+ extra: f
+ };
+ }
+}
+function ewe(r, e, t, n, i, a, o, s) {
+ let l = uU(e || o.defaultCode, o.map);
+ return new nxe({
+ calendarSystem: "gregory",
+ timeZone: r,
+ namedTimeZoneImpl: a.namedTimeZonedImpl,
+ locale: l,
+ weekNumberCalculation: t,
+ firstDay: n,
+ weekText: i,
+ cmdFormatter: a.cmdFormatter,
+ defaultSeparator: s
+ });
+}
+function twe(r, e) {
+ let t = e.themeClasses[r.themeSystem] || Ac;
+ return new t(r);
+}
+function rwe(r) {
+ let e = r.dateProfileGeneratorClass || IG;
+ return new e(r);
+}
+function nwe(r, e, t) {
+ return new LSe(r, e, t);
+}
+function iwe(r) {
+ return su(r, (e) => e.ui);
+}
+function awe(r, e, t) {
+ let n = { "": e };
+ for (let i in r) {
+ let a = r[i];
+ a.sourceId && t[a.sourceId] && (n[i] = t[a.sourceId]);
+ }
+ return n;
+}
+function owe(r) {
+ let { options: e } = r;
+ return {
+ eventUiSingleBase: db({
+ display: e.eventDisplay,
+ editable: e.editable,
+ startEditable: e.eventStartEditable,
+ durationEditable: e.eventDurationEditable,
+ constraint: e.eventConstraint,
+ overlap: typeof e.eventOverlap == "boolean" ? e.eventOverlap : void 0,
+ allow: e.eventAllow,
+ backgroundColor: e.eventBackgroundColor,
+ borderColor: e.eventBorderColor,
+ textColor: e.eventTextColor,
+ color: e.eventColor
+ // classNames: options.eventClassNames // render hook will handle this
+ }, r),
+ selectionConfig: db({
+ constraint: e.selectConstraint,
+ overlap: typeof e.selectOverlap == "boolean" ? e.selectOverlap : void 0,
+ allow: e.selectAllow
+ }, r)
+ };
+}
+function $C(r, e) {
+ for (let t of e.pluginHooks.isLoadingFuncs)
+ if (t(r))
+ return !0;
+ return !1;
+}
+function swe(r) {
+ return tbe(r.options.businessHours, r);
+}
+function Fz(r, e) {
+ for (let t in r)
+ console.warn(`Unknown option '${t}'` + (e ? ` for view '${e}'` : ""));
+}
+class lwe extends un {
+ render() {
+ let e = this.props.widgetGroups.map((t) => this.renderWidgetGroup(t));
+ return me("div", { className: "fc-toolbar-chunk" }, ...e);
+ }
+ renderWidgetGroup(e) {
+ let { props: t } = this, { theme: n } = this.context, i = [], a = !0;
+ for (let o of e) {
+ let { buttonName: s, buttonClick: l, buttonText: u, buttonIcon: c, buttonHint: h } = o;
+ if (s === "title")
+ a = !1, i.push(me("h2", { className: "fc-toolbar-title", id: t.titleId }, t.title));
+ else {
+ let f = s === t.activeButton, v = !t.isTodayEnabled && s === "today" || !t.isPrevEnabled && s === "prev" || !t.isNextEnabled && s === "next", b = [`fc-${s}-button`, n.getClass("button")];
+ f && b.push(n.getClass("buttonActive")), i.push(me("button", { type: "button", title: typeof h == "function" ? h(t.navUnit) : h, disabled: v, "aria-pressed": f, className: b.join(" "), onClick: l }, u || (c ? me("span", { className: c }) : "")));
+ }
+ }
+ if (i.length > 1) {
+ let o = a && n.getClass("buttonGroup") || "";
+ return me("div", { className: o }, ...i);
+ }
+ return i[0];
+ }
+}
+class $z extends un {
+ render() {
+ let { model: e, extraClassName: t } = this.props, n = !1, i, a, o = e.sectionWidgets, s = o.center;
+ return o.left ? (n = !0, i = o.left) : i = o.start, o.right ? (n = !0, a = o.right) : a = o.end, me(
+ "div",
+ { className: [
+ t || "",
+ "fc-toolbar",
+ n ? "fc-toolbar-ltr" : ""
+ ].join(" ") },
+ this.renderSection("start", i || []),
+ this.renderSection("center", s || []),
+ this.renderSection("end", a || [])
+ );
+ }
+ renderSection(e, t) {
+ let { props: n } = this;
+ return me(lwe, { key: e, widgetGroups: t, title: n.title, navUnit: n.navUnit, activeButton: n.activeButton, isTodayEnabled: n.isTodayEnabled, isPrevEnabled: n.isPrevEnabled, isNextEnabled: n.isNextEnabled, titleId: n.titleId });
+ }
+}
+class uwe extends un {
+ constructor() {
+ super(...arguments), this.state = {
+ availableWidth: null
+ }, this.handleEl = (e) => {
+ this.el = e, lu(this.props.elRef, e), this.updateAvailableWidth();
+ }, this.handleResize = () => {
+ this.updateAvailableWidth();
+ };
+ }
+ render() {
+ let { props: e, state: t } = this, { aspectRatio: n } = e, i = [
+ "fc-view-harness",
+ n || e.liquid || e.height ? "fc-view-harness-active" : "fc-view-harness-passive"
+ // let the view do the height
+ ], a = "", o = "";
+ return n ? t.availableWidth !== null ? a = t.availableWidth / n : o = `${1 / n * 100}%` : a = e.height || "", me("div", { "aria-labelledby": e.labeledById, ref: this.handleEl, className: i.join(" "), style: { height: a, paddingBottom: o } }, e.children);
+ }
+ componentDidMount() {
+ this.context.addResizeHandler(this.handleResize);
+ }
+ componentWillUnmount() {
+ this.context.removeResizeHandler(this.handleResize);
+ }
+ updateAvailableWidth() {
+ this.el && // needed. but why?
+ this.props.aspectRatio && this.setState({ availableWidth: this.el.offsetWidth });
+ }
+}
+class cwe extends dv {
+ constructor(e) {
+ super(e), this.handleSegClick = (t, n) => {
+ let { component: i } = this, { context: a } = i, o = Wd(n);
+ if (o && // might be the surrounding the more link
+ i.isValidSegDownEl(t.target)) {
+ let s = da(t.target, ".fc-event-forced-url"), l = s ? s.querySelector("a[href]").href : "";
+ a.emitter.trigger("eventClick", {
+ el: n,
+ event: new Gn(i.context, o.eventRange.def, o.eventRange.instance),
+ jsEvent: t,
+ view: a.viewApi
+ }), l && !t.defaultPrevented && (window.location.href = l);
+ }
+ }, this.destroy = cG(
+ e.el,
+ "click",
+ ".fc-event",
+ // on both fg and bg events
+ this.handleSegClick
+ );
+ }
+}
+class hwe extends dv {
+ constructor(e) {
+ super(e), this.handleEventElRemove = (t) => {
+ t === this.currentSegEl && this.handleSegLeave(null, this.currentSegEl);
+ }, this.handleSegEnter = (t, n) => {
+ Wd(n) && (this.currentSegEl = n, this.triggerEvent("eventMouseEnter", t, n));
+ }, this.handleSegLeave = (t, n) => {
+ this.currentSegEl && (this.currentSegEl = null, this.triggerEvent("eventMouseLeave", t, n));
+ }, this.removeHoverListeners = U0e(
+ e.el,
+ ".fc-event",
+ // on both fg and bg events
+ this.handleSegEnter,
+ this.handleSegLeave
+ );
+ }
+ destroy() {
+ this.removeHoverListeners();
+ }
+ triggerEvent(e, t, n) {
+ let { component: i } = this, { context: a } = i, o = Wd(n);
+ (!t || i.isValidSegDownEl(t.target)) && a.emitter.trigger(e, {
+ el: n,
+ event: new Gn(a, o.eventRange.def, o.eventRange.instance),
+ jsEvent: t,
+ view: a.viewApi
+ });
+ }
+}
+class fwe extends vf {
+ constructor() {
+ super(...arguments), this.buildViewContext = rr(kbe), this.buildViewPropTransformers = rr(vwe), this.buildToolbarProps = rr(dwe), this.headerRef = Da(), this.footerRef = Da(), this.interactionsStore = {}, this.state = {
+ viewLabelId: cc()
+ }, this.registerInteractiveComponent = (e, t) => {
+ let n = oxe(e, t), o = [
+ cwe,
+ hwe
+ ].concat(this.props.pluginHooks.componentInteractions).map((s) => new s(n));
+ this.interactionsStore[e.uid] = o, iI[e.uid] = n;
+ }, this.unregisterInteractiveComponent = (e) => {
+ let t = this.interactionsStore[e.uid];
+ if (t) {
+ for (let n of t)
+ n.destroy();
+ delete this.interactionsStore[e.uid];
+ }
+ delete iI[e.uid];
+ }, this.resizeRunner = new bM(() => {
+ this.props.emitter.trigger("_resize", !0), this.props.emitter.trigger("windowResize", { view: this.props.viewApi });
+ }), this.handleWindowResize = (e) => {
+ let { options: t } = this.props;
+ t.handleWindowResize && e.target === window && this.resizeRunner.request(t.windowResizeDelay);
+ };
+ }
+ /*
+ renders INSIDE of an outer div
+ */
+ render() {
+ let { props: e } = this, { toolbarConfig: t, options: n } = e, i = this.buildToolbarProps(
+ e.viewSpec,
+ e.dateProfile,
+ e.dateProfileGenerator,
+ e.currentDate,
+ bm(e.options.now, e.dateEnv),
+ // TODO: use NowTimer????
+ e.viewTitle
+ ), a = !1, o = "", s;
+ e.isHeightAuto || e.forPrint ? o = "" : n.height != null ? a = !0 : n.contentHeight != null ? o = n.contentHeight : s = Math.max(n.aspectRatio, 0.5);
+ let l = this.buildViewContext(e.viewSpec, e.viewApi, e.options, e.dateProfileGenerator, e.dateEnv, e.theme, e.pluginHooks, e.dispatch, e.getCurrentData, e.emitter, e.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent), u = t.header && t.header.hasTitle ? this.state.viewLabelId : "";
+ return me(
+ fu.Provider,
+ { value: l },
+ t.header && me($z, Object.assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: t.header, titleId: u }, i)),
+ me(
+ uwe,
+ { liquid: a, height: o, aspectRatio: s, labeledById: u },
+ this.renderView(e),
+ this.buildAppendContent()
+ ),
+ t.footer && me($z, Object.assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: t.footer, titleId: "" }, i))
+ );
+ }
+ componentDidMount() {
+ let { props: e } = this;
+ this.calendarInteractions = e.pluginHooks.calendarInteractions.map((n) => new n(e)), window.addEventListener("resize", this.handleWindowResize);
+ let { propSetHandlers: t } = e.pluginHooks;
+ for (let n in t)
+ t[n](e[n], e);
+ }
+ componentDidUpdate(e) {
+ let { props: t } = this, { propSetHandlers: n } = t.pluginHooks;
+ for (let i in n)
+ t[i] !== e[i] && n[i](t[i], t);
+ }
+ componentWillUnmount() {
+ window.removeEventListener("resize", this.handleWindowResize), this.resizeRunner.clear();
+ for (let e of this.calendarInteractions)
+ e.destroy();
+ this.props.emitter.trigger("_unmount");
+ }
+ buildAppendContent() {
+ let { props: e } = this, t = e.pluginHooks.viewContainerAppends.map((n) => n(e));
+ return me(Dn, {}, ...t);
+ }
+ renderView(e) {
+ let { pluginHooks: t } = e, { viewSpec: n } = e, i = {
+ dateProfile: e.dateProfile,
+ businessHours: e.businessHours,
+ eventStore: e.renderableEventStore,
+ eventUiBases: e.eventUiBases,
+ dateSelection: e.dateSelection,
+ eventSelection: e.eventSelection,
+ eventDrag: e.eventDrag,
+ eventResize: e.eventResize,
+ isHeightAuto: e.isHeightAuto,
+ forPrint: e.forPrint
+ }, a = this.buildViewPropTransformers(t.viewPropsTransformers);
+ for (let s of a)
+ Object.assign(i, s.transform(i, e));
+ let o = n.component;
+ return me(o, Object.assign({}, i));
+ }
+}
+function dwe(r, e, t, n, i, a) {
+ let o = t.build(i, void 0, !1), s = t.buildPrev(e, n, !1), l = t.buildNext(e, n, !1);
+ return {
+ title: a,
+ activeButton: r.type,
+ navUnit: r.singleUnit,
+ isTodayEnabled: o.isValid && !Ql(e.currentRange, i),
+ isPrevEnabled: s.isValid,
+ isNextEnabled: l.isValid
+ };
+}
+function vwe(r) {
+ return r.map((e) => new e());
+}
+class pwe extends qxe {
+ constructor(e, t = {}) {
+ super(), this.isRendering = !1, this.isRendered = !1, this.currentClassNames = [], this.customContentRenderId = 0, this.handleAction = (n) => {
+ switch (n.type) {
+ case "SET_EVENT_DRAG":
+ case "SET_EVENT_RESIZE":
+ this.renderRunner.tryDrain();
+ }
+ }, this.handleData = (n) => {
+ this.currentData = n, this.renderRunner.request(n.calendarOptions.rerenderDelay);
+ }, this.handleRenderRequest = () => {
+ if (this.isRendering) {
+ this.isRendered = !0;
+ let { currentData: n } = this;
+ Az(() => {
+ Fg(me(lxe, { options: n.calendarOptions, theme: n.theme, emitter: n.emitter }, (i, a, o, s) => (this.setClassNames(i), this.setHeight(a), me(
+ jG.Provider,
+ { value: this.customContentRenderId },
+ me(fwe, Object.assign({ isHeightAuto: o, forPrint: s }, n))
+ ))), this.el);
+ });
+ } else
+ this.isRendered && (this.isRendered = !1, Fg(null, this.el), this.setClassNames([]), this.setHeight(""));
+ }, N0e(e), this.el = e, this.renderRunner = new bM(this.handleRenderRequest), new qSe({
+ optionOverrides: t,
+ calendarApi: this,
+ onAction: this.handleAction,
+ onData: this.handleData
+ });
+ }
+ render() {
+ let e = this.isRendering;
+ e ? this.customContentRenderId += 1 : this.isRendering = !0, this.renderRunner.request(), e && this.updateSize();
+ }
+ destroy() {
+ this.isRendering && (this.isRendering = !1, this.renderRunner.request());
+ }
+ updateSize() {
+ Az(() => {
+ super.updateSize();
+ });
+ }
+ batchRendering(e) {
+ this.renderRunner.pause("batchRendering"), e(), this.renderRunner.resume("batchRendering");
+ }
+ pauseRendering() {
+ this.renderRunner.pause("pauseRendering");
+ }
+ resumeRendering() {
+ this.renderRunner.resume("pauseRendering", !0);
+ }
+ resetOptions(e, t) {
+ this.currentDataManager.resetOptions(e, t);
+ }
+ setClassNames(e) {
+ if (!_c(e, this.currentClassNames)) {
+ let { classList: t } = this.el;
+ for (let n of this.currentClassNames)
+ t.remove(n);
+ for (let n of e)
+ t.add(n);
+ this.currentClassNames = e;
+ }
+ }
+ setHeight(e) {
+ lG(this.el, "height", e);
+ }
+}
+class gU extends $react.Component {
+ constructor() {
+ super(...arguments), this.elRef = $react.createRef(), this.isUpdating = !1, this.isUnmounting = !1, this.state = {
+ customRenderingMap: /* @__PURE__ */ new Map()
+ }, this.requestResize = () => {
+ this.isUnmounting || (this.cancelResize(), this.resizeId = requestAnimationFrame(() => {
+ this.doResize();
+ }));
+ };
+ }
+ render() {
+ const e = [];
+ for (const t of this.state.customRenderingMap.values())
+ e.push(/* @__PURE__ */ Bt(gwe, {
+ customRendering: t
+ }, t.id));
+ return /* @__PURE__ */ Bt("div", {
+ ref: this.elRef,
+ children: e
+ });
+ }
+ componentDidMount() {
+ const e = new tSe();
+ this.handleCustomRendering = e.handle.bind(e), this.calendar = new pwe(this.elRef.current, Object.assign(Object.assign({}, this.props), {
+ handleCustomRendering: this.handleCustomRendering
+ })), this.calendar.render();
+ let t;
+ e.subscribe((n) => {
+ const i = Date.now(), a = !t;
+ (a || this.isUpdating || this.isUnmounting || i - t < 100 ? mU : $react_dom.flushSync)(() => {
+ this.setState({
+ customRenderingMap: n
+ }, () => {
+ t = i, a ? this.doResize() : this.requestResize();
+ });
+ });
+ });
+ }
+ componentDidUpdate() {
+ this.isUpdating = !0, this.calendar.resetOptions(Object.assign(Object.assign({}, this.props), {
+ handleCustomRendering: this.handleCustomRendering
+ })), this.isUpdating = !1;
+ }
+ componentWillUnmount() {
+ this.isUnmounting = !0, this.cancelResize(), this.calendar.destroy();
+ }
+ doResize() {
+ this.calendar.updateSize();
+ }
+ cancelResize() {
+ this.resizeId !== void 0 && (cancelAnimationFrame(this.resizeId), this.resizeId = void 0);
+ }
+ getApi() {
+ return this.calendar;
+ }
+}
+gU.act = mU;
+class gwe extends $react.PureComponent {
+ render() {
+ const {
+ customRendering: e
+ } = this.props, {
+ generatorMeta: t
+ } = e, n = typeof t == "function" ? t(e.renderProps) : t;
+ return $react_dom.createPortal(n, e.containerEl);
+ }
+}
+function mU(r) {
+ r();
+}
+var mwe = ':root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:"";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:0 2px}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before{clear:both;content:"";display:table}.fc .fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc .fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-more-link{float:left}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-more-link{float:right}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}';
+yx(mwe);
+function A0(r, e) {
+ let t = [];
+ for (let n = 0; n < e; n += 1)
+ t[n] = [];
+ for (let n of r)
+ t[n.row].push(n);
+ return t;
+}
+function E0(r, e) {
+ let t = [];
+ for (let n = 0; n < e; n += 1)
+ t[n] = [];
+ for (let n of r)
+ t[n.firstCol].push(n);
+ return t;
+}
+function Hz(r, e) {
+ let t = [];
+ if (r) {
+ for (let n = 0; n < e; n += 1)
+ t[n] = {
+ affectedInstances: r.affectedInstances,
+ isEvent: r.isEvent,
+ segs: []
+ };
+ for (let n of r.segs)
+ t[n.row].segs.push(n);
+ } else
+ for (let n = 0; n < e; n += 1)
+ t[n] = null;
+ return t;
+}
+const yU = jn({
+ hour: "numeric",
+ minute: "2-digit",
+ omitZeroMinute: !0,
+ meridiem: "narrow"
+});
+function _U(r) {
+ let { display: e } = r.eventRange.ui;
+ return e === "list-item" || e === "auto" && !r.eventRange.def.allDay && r.firstCol === r.lastCol && // can't be multi-day
+ r.isStart && // "
+ r.isEnd;
+}
+class bU extends un {
+ render() {
+ let { props: e } = this;
+ return me(QG, Object.assign({}, e, { elClasses: ["fc-daygrid-event", "fc-daygrid-block-event", "fc-h-event"], defaultTimeFormat: yU, defaultDisplayEventEnd: e.defaultDisplayEventEnd, disableResizing: !e.seg.eventRange.def.allDay }));
+ }
+}
+class xU extends un {
+ render() {
+ let { props: e, context: t } = this, { options: n } = t, { seg: i } = e, a = n.eventTimeFormat || yU, o = rg(i, a, t, !0, e.defaultDisplayEventEnd);
+ return me(Tx, Object.assign({}, e, { elTag: "a", elClasses: ["fc-daygrid-event", "fc-daygrid-dot-event"], elAttrs: pM(e.seg, t), defaultGenerator: ywe, timeText: o, isResizing: !1, isDateSelecting: !1 }));
+ }
+}
+function ywe(r) {
+ return me(
+ Dn,
+ null,
+ me("div", { className: "fc-daygrid-event-dot", style: { borderColor: r.borderColor || r.backgroundColor } }),
+ r.timeText && me("div", { className: "fc-event-time" }, r.timeText),
+ me("div", { className: "fc-event-title" }, r.event.title || me(Dn, null, " "))
+ );
+}
+class _we extends un {
+ constructor() {
+ super(...arguments), this.compileSegs = rr(bwe);
+ }
+ render() {
+ let { props: e } = this, { allSegs: t, invisibleSegs: n } = this.compileSegs(e.singlePlacements);
+ return me(rU, { elClasses: ["fc-daygrid-more-link"], dateProfile: e.dateProfile, todayRange: e.todayRange, allDayDate: e.allDayDate, moreCnt: e.moreCnt, allSegs: t, hiddenSegs: n, alignmentElRef: e.alignmentElRef, alignGridTop: e.alignGridTop, extraDateSpan: e.extraDateSpan, popoverContent: () => {
+ let i = (e.eventDrag ? e.eventDrag.affectedInstances : null) || (e.eventResize ? e.eventResize.affectedInstances : null) || {};
+ return me(Dn, null, t.map((a) => {
+ let o = a.eventRange.instance.instanceId;
+ return me("div", { className: "fc-daygrid-event-harness", key: o, style: {
+ visibility: i[o] ? "hidden" : ""
+ } }, _U(a) ? me(xU, Object.assign({ seg: a, isDragging: !1, isSelected: o === e.eventSelection, defaultDisplayEventEnd: !1 }, ql(a, e.todayRange))) : me(bU, Object.assign({ seg: a, isDragging: !1, isResizing: !1, isDateSelecting: !1, isSelected: o === e.eventSelection, defaultDisplayEventEnd: !1 }, ql(a, e.todayRange))));
+ }));
+ } });
+ }
+}
+function bwe(r) {
+ let e = [], t = [];
+ for (let n of r)
+ e.push(n.seg), n.isVisible || t.push(n.seg);
+ return { allSegs: e, invisibleSegs: t };
+}
+const xwe = jn({ week: "narrow" });
+class Swe extends Vs {
+ constructor() {
+ super(...arguments), this.rootElRef = Da(), this.state = {
+ dayNumberId: cc()
+ }, this.handleRootEl = (e) => {
+ lu(this.rootElRef, e), lu(this.props.elRef, e);
+ };
+ }
+ render() {
+ let { context: e, props: t, state: n, rootElRef: i } = this, { options: a, dateEnv: o } = e, { date: s, dateProfile: l } = t;
+ const u = t.showDayNumber && Cwe(s, l.currentRange, o);
+ return me(wM, { elTag: "td", elRef: this.handleRootEl, elClasses: [
+ "fc-daygrid-day",
+ ...t.extraClassNames || []
+ ], elAttrs: Object.assign(Object.assign(Object.assign({}, t.extraDataAttrs), t.showDayNumber ? { "aria-labelledby": n.dayNumberId } : {}), { role: "gridcell" }), defaultGenerator: wwe, date: s, dateProfile: l, todayRange: t.todayRange, showDayNumber: t.showDayNumber, isMonthStart: u, extraRenderProps: t.extraRenderProps }, (c, h) => me(
+ "div",
+ { ref: t.innerElRef, className: "fc-daygrid-day-frame fc-scrollgrid-sync-inner", style: { minHeight: t.minHeight } },
+ t.showWeekNumber && me(tU, { elTag: "a", elClasses: ["fc-daygrid-week-number"], elAttrs: Gd(e, s, "week"), date: s, defaultFormat: xwe }),
+ !h.isDisabled && (t.showDayNumber || CM(a) || t.forceDayTop) ? me(
+ "div",
+ { className: "fc-daygrid-day-top" },
+ me(c, { elTag: "a", elClasses: [
+ "fc-daygrid-day-number",
+ u && "fc-daygrid-month-start"
+ ], elAttrs: Object.assign(Object.assign({}, Gd(e, s)), { id: n.dayNumberId }) })
+ ) : t.showDayNumber ? (
+ // for creating correct amount of space (see issue #7162)
+ me(
+ "div",
+ { className: "fc-daygrid-day-top", style: { visibility: "hidden" } },
+ me("a", { className: "fc-daygrid-day-number" }, " ")
+ )
+ ) : void 0,
+ me(
+ "div",
+ { className: "fc-daygrid-day-events", ref: t.fgContentElRef },
+ t.fgContent,
+ me(
+ "div",
+ { className: "fc-daygrid-day-bottom", style: { marginTop: t.moreMarginTop } },
+ me(_we, { allDayDate: s, singlePlacements: t.singlePlacements, moreCnt: t.moreCnt, alignmentElRef: i, alignGridTop: !t.showDayNumber, extraDateSpan: t.extraDateSpan, dateProfile: t.dateProfile, eventSelection: t.eventSelection, eventDrag: t.eventDrag, eventResize: t.eventResize, todayRange: t.todayRange })
+ )
+ ),
+ me("div", { className: "fc-daygrid-day-bg" }, t.bgContent)
+ ));
+ }
+}
+function wwe(r) {
+ return r.dayNumberText || me(Dn, null, " ");
+}
+function Cwe(r, e, t) {
+ const { start: n, end: i } = e, a = bc(i, -1), o = t.getYear(n), s = t.getMonth(n), l = t.getYear(a), u = t.getMonth(a);
+ return !(o === l && s === u) && // first date in current view?
+ (r.valueOf() === n.valueOf() || // a month-start that's within the current range?
+ t.getDay(r) === 1 && r.valueOf() < i.valueOf());
+}
+function Twe(r, e, t, n, i, a, o) {
+ let s = new Ewe();
+ s.allowReslicing = !0, s.strictOrder = n, e === !0 || t === !0 ? (s.maxCoord = a, s.hiddenConsumes = !0) : typeof e == "number" ? s.maxStackCnt = e : typeof t == "number" && (s.maxStackCnt = t, s.hiddenConsumes = !0);
+ let l = [], u = [];
+ for (let d = 0; d < r.length; d += 1) {
+ let m = r[d], { instanceId: _ } = m.eventRange.instance, y = i[_];
+ y != null ? l.push({
+ index: d,
+ thickness: y,
+ span: {
+ start: m.firstCol,
+ end: m.lastCol + 1
+ }
+ }) : u.push(m);
+ }
+ let c = s.addSegs(l), h = s.toRects(), { singleColPlacements: f, multiColPlacements: v, leftoverMargins: b } = Iwe(h, r, o), w = [], p = [];
+ for (let d of u) {
+ v[d.firstCol].push({
+ seg: d,
+ isVisible: !1,
+ isAbsolute: !0,
+ absoluteTop: 0,
+ marginTop: 0
+ });
+ for (let m = d.firstCol; m <= d.lastCol; m += 1)
+ f[m].push({
+ seg: Ed(d, m, m + 1, o),
+ isVisible: !1,
+ isAbsolute: !1,
+ absoluteTop: 0,
+ marginTop: 0
+ });
+ }
+ for (let d = 0; d < o.length; d += 1)
+ w.push(0);
+ for (let d of c) {
+ let m = r[d.index], _ = d.span;
+ v[_.start].push({
+ seg: Ed(m, _.start, _.end, o),
+ isVisible: !1,
+ isAbsolute: !0,
+ absoluteTop: 0,
+ marginTop: 0
+ });
+ for (let y = _.start; y < _.end; y += 1)
+ w[y] += 1, f[y].push({
+ seg: Ed(m, y, y + 1, o),
+ isVisible: !1,
+ isAbsolute: !1,
+ absoluteTop: 0,
+ marginTop: 0
+ });
+ }
+ for (let d = 0; d < o.length; d += 1)
+ p.push(b[d]);
+ return { singleColPlacements: f, multiColPlacements: v, moreCnts: w, moreMarginTops: p };
+}
+function Iwe(r, e, t) {
+ let n = Awe(r, t.length), i = [], a = [], o = [];
+ for (let s = 0; s < t.length; s += 1) {
+ let l = n[s], u = [], c = 0, h = 0;
+ for (let v of l) {
+ let b = e[v.index];
+ u.push({
+ seg: Ed(b, s, s + 1, t),
+ isVisible: !0,
+ isAbsolute: !1,
+ absoluteTop: v.levelCoord,
+ marginTop: v.levelCoord - c
+ }), c = v.levelCoord + v.thickness;
+ }
+ let f = [];
+ c = 0, h = 0;
+ for (let v of l) {
+ let b = e[v.index], w = v.span.end - v.span.start > 1, p = v.span.start === s;
+ h += v.levelCoord - c, c = v.levelCoord + v.thickness, w ? (h += v.thickness, p && f.push({
+ seg: Ed(b, v.span.start, v.span.end, t),
+ isVisible: !0,
+ isAbsolute: !0,
+ absoluteTop: v.levelCoord,
+ marginTop: 0
+ })) : p && (f.push({
+ seg: Ed(b, v.span.start, v.span.end, t),
+ isVisible: !0,
+ isAbsolute: !1,
+ absoluteTop: v.levelCoord,
+ marginTop: h
+ // claim the margin
+ }), h = 0);
+ }
+ i.push(u), a.push(f), o.push(h);
+ }
+ return { singleColPlacements: i, multiColPlacements: a, leftoverMargins: o };
+}
+function Awe(r, e) {
+ let t = [];
+ for (let n = 0; n < e; n += 1)
+ t.push([]);
+ for (let n of r)
+ for (let i = n.span.start; i < n.span.end; i += 1)
+ t[i].push(n);
+ return t;
+}
+function Ed(r, e, t, n) {
+ if (r.firstCol === e && r.lastCol === t - 1)
+ return r;
+ let i = r.eventRange, a = i.range, o = xc(a, {
+ start: n[e].date,
+ end: Bi(n[t - 1].date, 1)
+ });
+ return Object.assign(Object.assign({}, r), { firstCol: e, lastCol: t - 1, eventRange: {
+ def: i.def,
+ ui: Object.assign(Object.assign({}, i.ui), { durationEditable: !1 }),
+ instance: i.instance,
+ range: o
+ }, isStart: r.isStart && o.start.valueOf() === a.start.valueOf(), isEnd: r.isEnd && o.end.valueOf() === a.end.valueOf() });
+}
+class Ewe extends PG {
+ constructor() {
+ super(...arguments), this.hiddenConsumes = !1, this.forceHidden = {};
+ }
+ addSegs(e) {
+ const t = super.addSegs(e), { entriesByLevel: n } = this, i = (a) => !this.forceHidden[Hh(a)];
+ for (let a = 0; a < n.length; a += 1)
+ n[a] = n[a].filter(i);
+ return t;
+ }
+ handleInvalidInsertion(e, t, n) {
+ const { entriesByLevel: i, forceHidden: a } = this, { touchingEntry: o, touchingLevel: s, touchingLateral: l } = e;
+ if (this.hiddenConsumes && o) {
+ const u = Hh(o);
+ if (!a[u])
+ if (this.allowReslicing) {
+ const c = Object.assign(Object.assign({}, o), { span: gM(o.span, t.span) }), h = Hh(c);
+ a[h] = !0, i[s][l] = c, this.splitEntry(o, t, n);
+ } else
+ a[u] = !0, n.push(o);
+ }
+ return super.handleInvalidInsertion(e, t, n);
+ }
+}
+class SU extends Vs {
+ constructor() {
+ super(...arguments), this.cellElRefs = new Zl(), this.frameElRefs = new Zl(), this.fgElRefs = new Zl(), this.segHarnessRefs = new Zl(), this.rootElRef = Da(), this.state = {
+ framePositions: null,
+ maxContentHeight: null,
+ eventInstanceHeights: {}
+ }, this.handleResize = (e) => {
+ e && this.updateSizing(!0);
+ };
+ }
+ render() {
+ let { props: e, state: t, context: n } = this, { options: i } = n, a = e.cells.length, o = E0(e.businessHourSegs, a), s = E0(e.bgEventSegs, a), l = E0(this.getHighlightSegs(), a), u = E0(this.getMirrorSegs(), a), { singleColPlacements: c, multiColPlacements: h, moreCnts: f, moreMarginTops: v } = Twe(vM(e.fgEventSegs, i.eventOrder), e.dayMaxEvents, e.dayMaxEventRows, i.eventOrderStrict, t.eventInstanceHeights, t.maxContentHeight, e.cells), b = (
+ // TODO: messy way to compute this
+ e.eventDrag && e.eventDrag.affectedInstances || e.eventResize && e.eventResize.affectedInstances || {}
+ );
+ return me(
+ "tr",
+ { ref: this.rootElRef, role: "row" },
+ e.renderIntro && e.renderIntro(),
+ e.cells.map((w, p) => {
+ let d = this.renderFgSegs(p, e.forPrint ? c[p] : h[p], e.todayRange, b), m = this.renderFgSegs(p, Mwe(u[p], h), e.todayRange, {}, !!e.eventDrag, !!e.eventResize, !1);
+ return me(Swe, { key: w.key, elRef: this.cellElRefs.createRef(w.key), innerElRef: this.frameElRefs.createRef(w.key), dateProfile: e.dateProfile, date: w.date, showDayNumber: e.showDayNumbers, showWeekNumber: e.showWeekNumbers && p === 0, forceDayTop: e.showWeekNumbers, todayRange: e.todayRange, eventSelection: e.eventSelection, eventDrag: e.eventDrag, eventResize: e.eventResize, extraRenderProps: w.extraRenderProps, extraDataAttrs: w.extraDataAttrs, extraClassNames: w.extraClassNames, extraDateSpan: w.extraDateSpan, moreCnt: f[p], moreMarginTop: v[p], singlePlacements: c[p], fgContentElRef: this.fgElRefs.createRef(w.key), fgContent: (
+ // Fragment scopes the keys
+ me(
+ Dn,
+ null,
+ me(Dn, null, d),
+ me(Dn, null, m)
+ )
+ ), bgContent: (
+ // Fragment scopes the keys
+ me(
+ Dn,
+ null,
+ this.renderFillSegs(l[p], "highlight"),
+ this.renderFillSegs(o[p], "non-business"),
+ this.renderFillSegs(s[p], "bg-event")
+ )
+ ), minHeight: e.cellMinHeight });
+ })
+ );
+ }
+ componentDidMount() {
+ this.updateSizing(!0), this.context.addResizeHandler(this.handleResize);
+ }
+ componentDidUpdate(e, t) {
+ let n = this.props;
+ this.updateSizing(!El(e, n));
+ }
+ componentWillUnmount() {
+ this.context.removeResizeHandler(this.handleResize);
+ }
+ getHighlightSegs() {
+ let { props: e } = this;
+ return e.eventDrag && e.eventDrag.segs.length ? e.eventDrag.segs : e.eventResize && e.eventResize.segs.length ? e.eventResize.segs : e.dateSelectionSegs;
+ }
+ getMirrorSegs() {
+ let { props: e } = this;
+ return e.eventResize && e.eventResize.segs.length ? e.eventResize.segs : [];
+ }
+ renderFgSegs(e, t, n, i, a, o, s) {
+ let { context: l } = this, { eventSelection: u } = this.props, { framePositions: c } = this.state, h = this.props.cells.length === 1, f = a || o || s, v = [];
+ if (c)
+ for (let b of t) {
+ let { seg: w } = b, { instanceId: p } = w.eventRange.instance, d = p + ":" + e, m = b.isVisible && !i[p], _ = b.isAbsolute, y = "", x = "";
+ _ && (l.isRtl ? (x = 0, y = c.lefts[w.lastCol] - c.lefts[w.firstCol]) : (y = 0, x = c.rights[w.firstCol] - c.rights[w.lastCol])), v.push(me("div", { className: "fc-daygrid-event-harness" + (_ ? " fc-daygrid-event-harness-abs" : ""), key: d, ref: f ? null : this.segHarnessRefs.createRef(d), style: {
+ visibility: m ? "" : "hidden",
+ marginTop: _ ? "" : b.marginTop,
+ top: _ ? b.absoluteTop : "",
+ left: y,
+ right: x
+ } }, _U(w) ? me(xU, Object.assign({ seg: w, isDragging: a, isSelected: p === u, defaultDisplayEventEnd: h }, ql(w, n))) : me(bU, Object.assign({ seg: w, isDragging: a, isResizing: o, isDateSelecting: s, isSelected: p === u, defaultDisplayEventEnd: h }, ql(w, n)))));
+ }
+ return v;
+ }
+ renderFillSegs(e, t) {
+ let { isRtl: n } = this.context, { todayRange: i } = this.props, { framePositions: a } = this.state, o = [];
+ if (a)
+ for (let s of e) {
+ let l = n ? {
+ right: 0,
+ left: a.lefts[s.lastCol] - a.lefts[s.firstCol]
+ } : {
+ left: 0,
+ right: a.rights[s.firstCol] - a.rights[s.lastCol]
+ };
+ o.push(me("div", { key: DG(s.eventRange), className: "fc-daygrid-bg-harness", style: l }, t === "bg-event" ? me(qG, Object.assign({ seg: s }, ql(s, i))) : eU(t)));
+ }
+ return me(Dn, {}, ...o);
+ }
+ updateSizing(e) {
+ let { props: t, state: n, frameElRefs: i } = this;
+ if (!t.forPrint && t.clientWidth !== null) {
+ if (e) {
+ let l = t.cells.map((u) => i.currentMap[u.key]);
+ if (l.length) {
+ let u = this.rootElRef.current, c = new Ud(
+ u,
+ l,
+ !0,
+ // isHorizontal
+ !1
+ );
+ (!n.framePositions || !n.framePositions.similarTo(c)) && this.setState({
+ framePositions: new Ud(
+ u,
+ l,
+ !0,
+ // isHorizontal
+ !1
+ )
+ });
+ }
+ }
+ const a = this.state.eventInstanceHeights, o = this.queryEventInstanceHeights(), s = t.dayMaxEvents === !0 || t.dayMaxEventRows === !0;
+ this.safeSetState({
+ // HACK to prevent oscillations of events being shown/hidden from max-event-rows
+ // Essentially, once you compute an element's height, never null-out.
+ // TODO: always display all events, as visibility:hidden?
+ eventInstanceHeights: Object.assign(Object.assign({}, a), o),
+ maxContentHeight: s ? this.computeMaxContentHeight() : null
+ });
+ }
+ }
+ queryEventInstanceHeights() {
+ let e = this.segHarnessRefs.currentMap, t = {};
+ for (let n in e) {
+ let i = Math.round(e[n].getBoundingClientRect().height), a = n.split(":")[0];
+ t[a] = Math.max(t[a] || 0, i);
+ }
+ return t;
+ }
+ computeMaxContentHeight() {
+ let e = this.props.cells[0].key, t = this.cellElRefs.currentMap[e], n = this.fgElRefs.currentMap[e];
+ return t.getBoundingClientRect().bottom - n.getBoundingClientRect().top;
+ }
+ getCellEls() {
+ let e = this.cellElRefs.currentMap;
+ return this.props.cells.map((t) => e[t.key]);
+ }
+}
+SU.addStateEquality({
+ eventInstanceHeights: El
+});
+function Mwe(r, e) {
+ if (!r.length)
+ return [];
+ let t = Dwe(e);
+ return r.map((n) => ({
+ seg: n,
+ isVisible: !0,
+ isAbsolute: !0,
+ absoluteTop: t[n.eventRange.instance.instanceId],
+ marginTop: 0
+ }));
+}
+function Dwe(r) {
+ let e = {};
+ for (let t of r)
+ for (let n of t)
+ e[n.seg.eventRange.instance.instanceId] = n.absoluteTop;
+ return e;
+}
+class kwe extends Vs {
+ constructor() {
+ super(...arguments), this.splitBusinessHourSegs = rr(A0), this.splitBgEventSegs = rr(A0), this.splitFgEventSegs = rr(A0), this.splitDateSelectionSegs = rr(A0), this.splitEventDrag = rr(Hz), this.splitEventResize = rr(Hz), this.rowRefs = new Zl();
+ }
+ render() {
+ let { props: e, context: t } = this, n = e.cells.length, i = this.splitBusinessHourSegs(e.businessHourSegs, n), a = this.splitBgEventSegs(e.bgEventSegs, n), o = this.splitFgEventSegs(e.fgEventSegs, n), s = this.splitDateSelectionSegs(e.dateSelectionSegs, n), l = this.splitEventDrag(e.eventDrag, n), u = this.splitEventResize(e.eventResize, n), c = n >= 7 && e.clientWidth ? e.clientWidth / t.options.aspectRatio / 6 : null;
+ return me(vv, { unit: "day" }, (h, f) => me(Dn, null, e.cells.map((v, b) => me(SU, {
+ ref: this.rowRefs.createRef(b),
+ key: v.length ? v[0].date.toISOString() : b,
+ showDayNumbers: n > 1,
+ showWeekNumbers: e.showWeekNumbers,
+ todayRange: f,
+ dateProfile: e.dateProfile,
+ cells: v,
+ renderIntro: e.renderRowIntro,
+ businessHourSegs: i[b],
+ eventSelection: e.eventSelection,
+ bgEventSegs: a[b].filter(Owe),
+ fgEventSegs: o[b],
+ dateSelectionSegs: s[b],
+ eventDrag: l[b],
+ eventResize: u[b],
+ dayMaxEvents: e.dayMaxEvents,
+ dayMaxEventRows: e.dayMaxEventRows,
+ clientWidth: e.clientWidth,
+ clientHeight: e.clientHeight,
+ cellMinHeight: c,
+ forPrint: e.forPrint
+ }))));
+ }
+ componentDidMount() {
+ const e = this.rowRefs.currentMap[0].getCellEls()[0];
+ this.rootEl = e ? e.closest(".fc-daygrid-body") : null, this.rootEl && this.context.registerInteractiveComponent(this, {
+ el: this.rootEl,
+ isHitComboAllowed: this.props.isHitComboAllowed
+ });
+ }
+ componentWillUnmount() {
+ this.rootEl && (this.context.unregisterInteractiveComponent(this), this.rootEl = null);
+ }
+ // Hit System
+ // ----------------------------------------------------------------------------------------------------
+ prepareHits() {
+ this.rowPositions = new Ud(
+ this.rootEl,
+ this.rowRefs.collect().map((e) => e.getCellEls()[0]),
+ // first cell el in each row. TODO: not optimal
+ !1,
+ !0
+ ), this.colPositions = new Ud(
+ this.rootEl,
+ this.rowRefs.currentMap[0].getCellEls(),
+ // cell els in first row
+ !0,
+ // horizontal
+ !1
+ );
+ }
+ queryHit(e, t) {
+ let { colPositions: n, rowPositions: i } = this, a = n.leftToIndex(e), o = i.topToIndex(t);
+ if (o != null && a != null) {
+ let s = this.props.cells[o][a];
+ return {
+ dateProfile: this.props.dateProfile,
+ dateSpan: Object.assign({ range: this.getCellRange(o, a), allDay: !0 }, s.extraDateSpan),
+ dayEl: this.getCellEl(o, a),
+ rect: {
+ left: n.lefts[a],
+ right: n.rights[a],
+ top: i.tops[o],
+ bottom: i.bottoms[o]
+ },
+ layer: 0
+ };
+ }
+ return null;
+ }
+ getCellEl(e, t) {
+ return this.rowRefs.currentMap[e].getCellEls()[t];
+ }
+ getCellRange(e, t) {
+ let n = this.props.cells[e][t].date, i = Bi(n, 1);
+ return { start: n, end: i };
+ }
+}
+function Owe(r) {
+ return r.eventRange.def.allDay;
+}
+class Lwe extends Vs {
+ constructor() {
+ super(...arguments), this.elRef = Da(), this.needsScrollReset = !1;
+ }
+ render() {
+ let { props: e } = this, { dayMaxEventRows: t, dayMaxEvents: n, expandRows: i } = e, a = n === !0 || t === !0;
+ a && !i && (a = !1, t = null, n = null);
+ let o = [
+ "fc-daygrid-body",
+ a ? "fc-daygrid-body-balanced" : "fc-daygrid-body-unbalanced",
+ i ? "" : "fc-daygrid-body-natural"
+ // will height of one row depend on the others?
+ ];
+ return me(
+ "div",
+ { ref: this.elRef, className: o.join(" "), style: {
+ // these props are important to give this wrapper correct dimensions for interactions
+ // TODO: if we set it here, can we avoid giving to inner tables?
+ width: e.clientWidth,
+ minWidth: e.tableMinWidth
+ } },
+ me(
+ "table",
+ { role: "presentation", className: "fc-scrollgrid-sync-table", style: {
+ width: e.clientWidth,
+ minWidth: e.tableMinWidth,
+ height: i ? e.clientHeight : ""
+ } },
+ e.colGroupNode,
+ me(
+ "tbody",
+ { role: "presentation" },
+ me(kwe, { dateProfile: e.dateProfile, cells: e.cells, renderRowIntro: e.renderRowIntro, showWeekNumbers: e.showWeekNumbers, clientWidth: e.clientWidth, clientHeight: e.clientHeight, businessHourSegs: e.businessHourSegs, bgEventSegs: e.bgEventSegs, fgEventSegs: e.fgEventSegs, dateSelectionSegs: e.dateSelectionSegs, eventSelection: e.eventSelection, eventDrag: e.eventDrag, eventResize: e.eventResize, dayMaxEvents: n, dayMaxEventRows: t, forPrint: e.forPrint, isHitComboAllowed: e.isHitComboAllowed })
+ )
+ )
+ );
+ }
+ componentDidMount() {
+ this.requestScrollReset();
+ }
+ componentDidUpdate(e) {
+ e.dateProfile !== this.props.dateProfile ? this.requestScrollReset() : this.flushScrollReset();
+ }
+ requestScrollReset() {
+ this.needsScrollReset = !0, this.flushScrollReset();
+ }
+ flushScrollReset() {
+ if (this.needsScrollReset && this.props.clientWidth) {
+ const e = Pwe(this.elRef.current, this.props.dateProfile);
+ if (e) {
+ const t = e.closest(".fc-daygrid-body"), n = t.closest(".fc-scroller"), i = e.getBoundingClientRect().top - t.getBoundingClientRect().top;
+ n.scrollTop = i ? i + 1 : 0;
+ }
+ this.needsScrollReset = !1;
+ }
+ }
+}
+function Pwe(r, e) {
+ let t;
+ return e.currentRangeUnit.match(/year|month/) && (t = r.querySelector(`[data-date="${I_e(e.currentDate)}-01"]`)), t || (t = r.querySelector(`[data-date="${ym(e.currentDate)}"]`)), t;
+}
+class Rwe extends VG {
+ constructor() {
+ super(...arguments), this.forceDayIfListItem = !0;
+ }
+ sliceRange(e, t) {
+ return t.sliceRange(e);
+ }
+}
+class wU extends Vs {
+ constructor() {
+ super(...arguments), this.slicer = new Rwe(), this.tableRef = Da();
+ }
+ render() {
+ let { props: e, context: t } = this;
+ return me(Lwe, Object.assign({ ref: this.tableRef }, this.slicer.sliceProps(e, e.dateProfile, e.nextDayThreshold, t, e.dayTableModel), { dateProfile: e.dateProfile, cells: e.dayTableModel.cells, colGroupNode: e.colGroupNode, tableMinWidth: e.tableMinWidth, renderRowIntro: e.renderRowIntro, dayMaxEvents: e.dayMaxEvents, dayMaxEventRows: e.dayMaxEventRows, showWeekNumbers: e.showWeekNumbers, expandRows: e.expandRows, headerAlignElRef: e.headerAlignElRef, clientWidth: e.clientWidth, clientHeight: e.clientHeight, forPrint: e.forPrint }));
+ }
+}
+class Nwe extends IG {
+ // Computes the date range that will be rendered
+ buildRenderRange(e, t, n) {
+ let i = super.buildRenderRange(e, t, n), { props: a } = this;
+ return zwe({
+ currentRange: i,
+ snapToWeek: /^(year|month)$/.test(t),
+ fixedWeekCount: a.fixedWeekCount,
+ dateEnv: a.dateEnv
+ });
+ }
+}
+function zwe(r) {
+ let { dateEnv: e, currentRange: t } = r, { start: n, end: i } = t, a;
+ if (r.snapToWeek && (n = e.startOfWeek(n), a = e.startOfWeek(i), a.valueOf() !== i.valueOf() && (i = gz(a, 1))), r.fixedWeekCount) {
+ let o = e.startOfWeek(e.startOfMonth(Bi(t.end, -1))), s = Math.ceil(
+ // could be partial weeks due to hiddenDays
+ p_e(o, i)
+ );
+ i = gz(i, 6 - s);
+ }
+ return { start: n, end: i };
+}
+class Bwe extends Vs {
+ constructor() {
+ super(...arguments), this.headerElRef = Da();
+ }
+ renderSimpleLayout(e, t) {
+ let { props: n, context: i } = this, a = [], o = pb(i.options);
+ return e && a.push({
+ type: "header",
+ key: "header",
+ isSticky: o,
+ chunk: {
+ elRef: this.headerElRef,
+ tableClassName: "fc-col-header",
+ rowContent: e
+ }
+ }), a.push({
+ type: "body",
+ key: "body",
+ liquid: !0,
+ chunk: { content: t }
+ }), me(
+ Hg,
+ { elClasses: ["fc-daygrid"], viewSpec: i.viewSpec },
+ me(xM, { liquid: !n.isHeightAuto && !n.forPrint, collapsibleWidth: n.forPrint, cols: [], sections: a })
+ );
+ }
+ renderHScrollLayout(e, t, n, i) {
+ let a = this.context.pluginHooks.scrollGridImpl;
+ if (!a)
+ throw new Error("No ScrollGrid implementation");
+ let { props: o, context: s } = this, l = !o.forPrint && pb(s.options), u = !o.forPrint && KG(s.options), c = [];
+ return e && c.push({
+ type: "header",
+ key: "header",
+ isSticky: l,
+ chunks: [{
+ key: "main",
+ elRef: this.headerElRef,
+ tableClassName: "fc-col-header",
+ rowContent: e
+ }]
+ }), c.push({
+ type: "body",
+ key: "body",
+ liquid: !0,
+ chunks: [{
+ key: "main",
+ content: t
+ }]
+ }), u && c.push({
+ type: "footer",
+ key: "footer",
+ isSticky: !0,
+ chunks: [{
+ key: "main",
+ content: aI
+ }]
+ }), me(
+ Hg,
+ { elClasses: ["fc-daygrid"], viewSpec: s.viewSpec },
+ me(a, { liquid: !o.isHeightAuto && !o.forPrint, forPrint: o.forPrint, collapsibleWidth: o.forPrint, colGroups: [{ cols: [{ span: n, minWidth: i }] }], sections: c })
+ );
+ }
+}
+class jwe extends Bwe {
+ constructor() {
+ super(...arguments), this.buildDayTableModel = rr(Fwe), this.headerRef = Da(), this.tableRef = Da();
+ }
+ render() {
+ let { options: e, dateProfileGenerator: t } = this.context, { props: n } = this, i = this.buildDayTableModel(n.dateProfile, t), a = e.dayHeaders && me(FG, { ref: this.headerRef, dateProfile: n.dateProfile, dates: i.headerDates, datesRepDistinctDays: i.rowCnt === 1 }), o = (s) => me(wU, { ref: this.tableRef, dateProfile: n.dateProfile, dayTableModel: i, businessHours: n.businessHours, dateSelection: n.dateSelection, eventStore: n.eventStore, eventUiBases: n.eventUiBases, eventSelection: n.eventSelection, eventDrag: n.eventDrag, eventResize: n.eventResize, nextDayThreshold: e.nextDayThreshold, colGroupNode: s.tableColGroupNode, tableMinWidth: s.tableMinWidth, dayMaxEvents: e.dayMaxEvents, dayMaxEventRows: e.dayMaxEventRows, showWeekNumbers: e.weekNumbers, expandRows: !n.isHeightAuto, headerAlignElRef: this.headerElRef, clientWidth: s.clientWidth, clientHeight: s.clientHeight, forPrint: n.forPrint });
+ return e.dayMinWidth ? this.renderHScrollLayout(a, o, i.colCnt, e.dayMinWidth) : this.renderSimpleLayout(a, o);
+ }
+}
+function Fwe(r, e) {
+ let t = new $G(r.renderRange, e);
+ return new HG(t, /year|month|week/.test(r.currentRangeUnit));
+}
+var $we = Gs({
+ name: "@fullcalendar/daygrid",
+ initialView: "dayGridMonth",
+ views: {
+ dayGrid: {
+ component: jwe,
+ dateProfileGeneratorClass: Nwe
+ },
+ dayGridDay: {
+ type: "dayGrid",
+ duration: { days: 1 }
+ },
+ dayGridWeek: {
+ type: "dayGrid",
+ duration: { weeks: 1 }
+ },
+ dayGridMonth: {
+ type: "dayGrid",
+ duration: { months: 1 },
+ fixedWeekCount: !0
+ },
+ dayGridYear: {
+ type: "dayGrid",
+ duration: { years: 1 }
+ }
+ }
+}), Hwe = '.fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:"\\00a0"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:"\\00a0-\\00a0"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}';
+yx(Hwe);
+class Vwe extends ube {
+ getKeyInfo() {
+ return {
+ allDay: {},
+ timed: {}
+ };
+ }
+ getKeysForDateSpan(e) {
+ return e.allDay ? ["allDay"] : ["timed"];
+ }
+ getKeysForEventDef(e) {
+ return e.allDay ? jbe(e) ? ["timed", "allDay"] : ["allDay"] : ["timed"];
+ }
+}
+const Gwe = jn({
+ hour: "numeric",
+ minute: "2-digit",
+ omitZeroMinute: !0,
+ meridiem: "short"
+});
+function CU(r) {
+ let e = [
+ "fc-timegrid-slot",
+ "fc-timegrid-slot-label",
+ r.isLabeled ? "fc-scrollgrid-shrink" : "fc-timegrid-slot-minor"
+ ];
+ return me(fu.Consumer, null, (t) => {
+ if (!r.isLabeled)
+ return me("td", { className: e.join(" "), "data-time": r.isoTimeStr });
+ let { dateEnv: n, options: i, viewApi: a } = t, o = (
+ // TODO: fully pre-parse
+ i.slotLabelFormat == null ? Gwe : Array.isArray(i.slotLabelFormat) ? jn(i.slotLabelFormat[0]) : jn(i.slotLabelFormat)
+ ), s = {
+ level: 0,
+ time: r.time,
+ date: n.toDate(r.date),
+ view: a,
+ text: n.format(r.date, o)
+ };
+ return me(ma, { elTag: "td", elClasses: e, elAttrs: {
+ "data-time": r.isoTimeStr
+ }, renderProps: s, generatorName: "slotLabelContent", customGenerator: i.slotLabelContent, defaultGenerator: Uwe, classNameGenerator: i.slotLabelClassNames, didMount: i.slotLabelDidMount, willUnmount: i.slotLabelWillUnmount }, (l) => me(
+ "div",
+ { className: "fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame" },
+ me(l, { elTag: "div", elClasses: [
+ "fc-timegrid-slot-label-cushion",
+ "fc-scrollgrid-shrink-cushion"
+ ] })
+ ));
+ });
+}
+function Uwe(r) {
+ return r.text;
+}
+class Wwe extends un {
+ render() {
+ return this.props.slatMetas.map((e) => me(
+ "tr",
+ { key: e.key },
+ me(CU, Object.assign({}, e))
+ ));
+ }
+}
+const Ywe = jn({ week: "short" }), Xwe = 5;
+class Zwe extends Vs {
+ constructor() {
+ super(...arguments), this.allDaySplitter = new Vwe(), this.headerElRef = Da(), this.rootElRef = Da(), this.scrollerElRef = Da(), this.state = {
+ slatCoords: null
+ }, this.handleScrollTopRequest = (e) => {
+ let t = this.scrollerElRef.current;
+ t && (t.scrollTop = e);
+ }, this.renderHeadAxis = (e, t = "") => {
+ let { options: n } = this.context, { dateProfile: i } = this.props, a = i.renderRange, s = Ic(a.start, a.end) === 1 ? Gd(this.context, a.start, "week") : {};
+ return n.weekNumbers && e === "day" ? me(tU, { elTag: "th", elClasses: [
+ "fc-timegrid-axis",
+ "fc-scrollgrid-shrink"
+ ], elAttrs: {
+ "aria-hidden": !0
+ }, date: a.start, defaultFormat: Ywe }, (l) => me(
+ "div",
+ { className: [
+ "fc-timegrid-axis-frame",
+ "fc-scrollgrid-shrink-frame",
+ "fc-timegrid-axis-frame-liquid"
+ ].join(" "), style: { height: t } },
+ me(l, { elTag: "a", elClasses: [
+ "fc-timegrid-axis-cushion",
+ "fc-scrollgrid-shrink-cushion",
+ "fc-scrollgrid-sync-inner"
+ ], elAttrs: s })
+ )) : me(
+ "th",
+ { "aria-hidden": !0, className: "fc-timegrid-axis" },
+ me("div", { className: "fc-timegrid-axis-frame", style: { height: t } })
+ );
+ }, this.renderTableRowAxis = (e) => {
+ let { options: t, viewApi: n } = this.context, i = {
+ text: t.allDayText,
+ view: n
+ };
+ return (
+ // TODO: make reusable hook. used in list view too
+ me(ma, { elTag: "td", elClasses: [
+ "fc-timegrid-axis",
+ "fc-scrollgrid-shrink"
+ ], elAttrs: {
+ "aria-hidden": !0
+ }, renderProps: i, generatorName: "allDayContent", customGenerator: t.allDayContent, defaultGenerator: Jwe, classNameGenerator: t.allDayClassNames, didMount: t.allDayDidMount, willUnmount: t.allDayWillUnmount }, (a) => me(
+ "div",
+ { className: [
+ "fc-timegrid-axis-frame",
+ "fc-scrollgrid-shrink-frame",
+ e == null ? " fc-timegrid-axis-frame-liquid" : ""
+ ].join(" "), style: { height: e } },
+ me(a, { elTag: "span", elClasses: [
+ "fc-timegrid-axis-cushion",
+ "fc-scrollgrid-shrink-cushion",
+ "fc-scrollgrid-sync-inner"
+ ] })
+ ))
+ );
+ }, this.handleSlatCoords = (e) => {
+ this.setState({ slatCoords: e });
+ };
+ }
+ // rendering
+ // ----------------------------------------------------------------------------------------------------
+ renderSimpleLayout(e, t, n) {
+ let { context: i, props: a } = this, o = [], s = pb(i.options);
+ return e && o.push({
+ type: "header",
+ key: "header",
+ isSticky: s,
+ chunk: {
+ elRef: this.headerElRef,
+ tableClassName: "fc-col-header",
+ rowContent: e
+ }
+ }), t && (o.push({
+ type: "body",
+ key: "all-day",
+ chunk: { content: t }
+ }), o.push({
+ type: "body",
+ key: "all-day-divider",
+ outerContent: (
+ // TODO: rename to cellContent so don't need to define
?
+ me(
+ "tr",
+ { role: "presentation", className: "fc-scrollgrid-section" },
+ me("td", { className: "fc-timegrid-divider " + i.theme.getClass("tableCellShaded") })
+ )
+ )
+ })), o.push({
+ type: "body",
+ key: "body",
+ liquid: !0,
+ expandRows: !!i.options.expandRows,
+ chunk: {
+ scrollerElRef: this.scrollerElRef,
+ content: n
+ }
+ }), me(
+ Hg,
+ { elRef: this.rootElRef, elClasses: ["fc-timegrid"], viewSpec: i.viewSpec },
+ me(xM, { liquid: !a.isHeightAuto && !a.forPrint, collapsibleWidth: a.forPrint, cols: [{ width: "shrink" }], sections: o })
+ );
+ }
+ renderHScrollLayout(e, t, n, i, a, o, s) {
+ let l = this.context.pluginHooks.scrollGridImpl;
+ if (!l)
+ throw new Error("No ScrollGrid implementation");
+ let { context: u, props: c } = this, h = !c.forPrint && pb(u.options), f = !c.forPrint && KG(u.options), v = [];
+ e && v.push({
+ type: "header",
+ key: "header",
+ isSticky: h,
+ syncRowHeights: !0,
+ chunks: [
+ {
+ key: "axis",
+ rowContent: (w) => me("tr", { role: "presentation" }, this.renderHeadAxis("day", w.rowSyncHeights[0]))
+ },
+ {
+ key: "cols",
+ elRef: this.headerElRef,
+ tableClassName: "fc-col-header",
+ rowContent: e
+ }
+ ]
+ }), t && (v.push({
+ type: "body",
+ key: "all-day",
+ syncRowHeights: !0,
+ chunks: [
+ {
+ key: "axis",
+ rowContent: (w) => me("tr", { role: "presentation" }, this.renderTableRowAxis(w.rowSyncHeights[0]))
+ },
+ {
+ key: "cols",
+ content: t
+ }
+ ]
+ }), v.push({
+ key: "all-day-divider",
+ type: "body",
+ outerContent: (
+ // TODO: rename to cellContent so don't need to define
?
+ me(
+ "tr",
+ { role: "presentation", className: "fc-scrollgrid-section" },
+ me("td", { colSpan: 2, className: "fc-timegrid-divider " + u.theme.getClass("tableCellShaded") })
+ )
+ )
+ }));
+ let b = u.options.nowIndicator;
+ return v.push({
+ type: "body",
+ key: "body",
+ liquid: !0,
+ expandRows: !!u.options.expandRows,
+ chunks: [
+ {
+ key: "axis",
+ content: (w) => (
+ // TODO: make this now-indicator arrow more DRY with TimeColsContent
+ me(
+ "div",
+ { className: "fc-timegrid-axis-chunk" },
+ me(
+ "table",
+ { "aria-hidden": !0, style: { height: w.expandRows ? w.clientHeight : "" } },
+ w.tableColGroupNode,
+ me(
+ "tbody",
+ null,
+ me(Wwe, { slatMetas: o })
+ )
+ ),
+ me(
+ "div",
+ { className: "fc-timegrid-now-indicator-container" },
+ me(vv, {
+ unit: b ? "minute" : "day"
+ /* hacky */
+ }, (p) => {
+ let d = b && s && s.safeComputeTop(p);
+ return typeof d == "number" ? me(SM, { elClasses: ["fc-timegrid-now-indicator-arrow"], elStyle: { top: d }, isAxis: !0, date: p }) : null;
+ })
+ )
+ )
+ )
+ },
+ {
+ key: "cols",
+ scrollerElRef: this.scrollerElRef,
+ content: n
+ }
+ ]
+ }), f && v.push({
+ key: "footer",
+ type: "footer",
+ isSticky: !0,
+ chunks: [
+ {
+ key: "axis",
+ content: aI
+ },
+ {
+ key: "cols",
+ content: aI
+ }
+ ]
+ }), me(
+ Hg,
+ { elRef: this.rootElRef, elClasses: ["fc-timegrid"], viewSpec: u.viewSpec },
+ me(l, { liquid: !c.isHeightAuto && !c.forPrint, forPrint: c.forPrint, collapsibleWidth: !1, colGroups: [
+ { width: "shrink", cols: [{ width: "shrink" }] },
+ { cols: [{ span: i, minWidth: a }] }
+ ], sections: v })
+ );
+ }
+ /* Dimensions
+ ------------------------------------------------------------------------------------------------------------------*/
+ getAllDayMaxEventProps() {
+ let { dayMaxEvents: e, dayMaxEventRows: t } = this.context.options;
+ return (e === !0 || t === !0) && (e = void 0, t = Xwe), { dayMaxEvents: e, dayMaxEventRows: t };
+ }
+}
+function Jwe(r) {
+ return r.text;
+}
+class Kwe {
+ constructor(e, t, n) {
+ this.positions = e, this.dateProfile = t, this.slotDuration = n;
+ }
+ safeComputeTop(e) {
+ let { dateProfile: t } = this;
+ if (Ql(t.currentRange, e)) {
+ let n = kn(e), i = e.valueOf() - n.valueOf();
+ if (i >= Ls(t.slotMinTime) && i < Ls(t.slotMaxTime))
+ return this.computeTimeTop(Xr(i));
+ }
+ return null;
+ }
+ // Computes the top coordinate, relative to the bounds of the grid, of the given date.
+ // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
+ computeDateTop(e, t) {
+ return t || (t = kn(e)), this.computeTimeTop(Xr(e.valueOf() - t.valueOf()));
+ }
+ // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
+ // This is a makeshify way to compute the time-top. Assumes all slatMetas dates are uniform.
+ // Eventually allow computation with arbirary slat dates.
+ computeTimeTop(e) {
+ let { positions: t, dateProfile: n } = this, i = t.els.length, a = (e.milliseconds - Ls(n.slotMinTime)) / Ls(this.slotDuration), o, s;
+ return a = Math.max(0, a), a = Math.min(i, a), o = Math.floor(a), o = Math.min(o, i - 1), s = a - o, t.tops[o] + t.getHeight(o) * s;
+ }
+}
+class Qwe extends un {
+ render() {
+ let { props: e, context: t } = this, { options: n } = t, { slatElRefs: i } = e;
+ return me("tbody", null, e.slatMetas.map((a, o) => {
+ let s = {
+ time: a.time,
+ date: t.dateEnv.toDate(a.date),
+ view: t.viewApi
+ };
+ return me(
+ "tr",
+ { key: a.key, ref: i.createRef(a.key) },
+ e.axis && me(CU, Object.assign({}, a)),
+ me(ma, { elTag: "td", elClasses: [
+ "fc-timegrid-slot",
+ "fc-timegrid-slot-lane",
+ !a.isLabeled && "fc-timegrid-slot-minor"
+ ], elAttrs: {
+ "data-time": a.isoTimeStr
+ }, renderProps: s, generatorName: "slotLaneContent", customGenerator: n.slotLaneContent, classNameGenerator: n.slotLaneClassNames, didMount: n.slotLaneDidMount, willUnmount: n.slotLaneWillUnmount })
+ );
+ }));
+ }
+}
+class qwe extends un {
+ constructor() {
+ super(...arguments), this.rootElRef = Da(), this.slatElRefs = new Zl();
+ }
+ render() {
+ let { props: e, context: t } = this;
+ return me(
+ "div",
+ { ref: this.rootElRef, className: "fc-timegrid-slots" },
+ me(
+ "table",
+ { "aria-hidden": !0, className: t.theme.getClass("table"), style: {
+ minWidth: e.tableMinWidth,
+ width: e.clientWidth,
+ height: e.minHeight
+ } },
+ e.tableColGroupNode,
+ me(Qwe, { slatElRefs: this.slatElRefs, axis: e.axis, slatMetas: e.slatMetas })
+ )
+ );
+ }
+ componentDidMount() {
+ this.updateSizing();
+ }
+ componentDidUpdate() {
+ this.updateSizing();
+ }
+ componentWillUnmount() {
+ this.props.onCoords && this.props.onCoords(null);
+ }
+ updateSizing() {
+ let { context: e, props: t } = this;
+ t.onCoords && t.clientWidth !== null && this.rootElRef.current.offsetHeight && t.onCoords(new Kwe(new Ud(this.rootElRef.current, eCe(this.slatElRefs.currentMap, t.slatMetas), !1, !0), this.props.dateProfile, e.options.slotDuration));
+ }
+}
+function eCe(r, e) {
+ return e.map((t) => r[t.key]);
+}
+function Sp(r, e) {
+ let t = [], n;
+ for (n = 0; n < e; n += 1)
+ t.push([]);
+ if (r)
+ for (n = 0; n < r.length; n += 1)
+ t[r[n].col].push(r[n]);
+ return t;
+}
+function Vz(r, e) {
+ let t = [];
+ if (r) {
+ for (let n = 0; n < e; n += 1)
+ t[n] = {
+ affectedInstances: r.affectedInstances,
+ isEvent: r.isEvent,
+ segs: []
+ };
+ for (let n of r.segs)
+ t[n.col].segs.push(n);
+ } else
+ for (let n = 0; n < e; n += 1)
+ t[n] = null;
+ return t;
+}
+class tCe extends un {
+ render() {
+ let { props: e } = this;
+ return me(rU, { elClasses: ["fc-timegrid-more-link"], elStyle: {
+ top: e.top,
+ bottom: e.bottom
+ }, allDayDate: null, moreCnt: e.hiddenSegs.length, allSegs: e.hiddenSegs, hiddenSegs: e.hiddenSegs, extraDateSpan: e.extraDateSpan, dateProfile: e.dateProfile, todayRange: e.todayRange, popoverContent: () => IU(e.hiddenSegs, e), defaultGenerator: rCe, forceTimed: !0 }, (t) => me(t, { elTag: "div", elClasses: ["fc-timegrid-more-link-inner", "fc-sticky"] }));
+ }
+}
+function rCe(r) {
+ return r.shortText;
+}
+function nCe(r, e, t) {
+ let n = new PG();
+ e != null && (n.strictOrder = e), t != null && (n.maxStackCnt = t);
+ let i = n.addSegs(r), a = ixe(i), o = iCe(n);
+ return o = lCe(o, 1), { segRects: uCe(o), hiddenGroups: a };
+}
+function iCe(r) {
+ const { entriesByLevel: e } = r, t = IM((n, i) => n + ":" + i, (n, i) => {
+ let a = sCe(r, n, i), o = Gz(a, t), s = e[n][i];
+ return [
+ Object.assign(Object.assign({}, s), { nextLevelNodes: o[0] }),
+ s.thickness + o[1]
+ // the pressure builds
+ ];
+ });
+ return Gz(e.length ? { level: 0, lateralStart: 0, lateralEnd: e[0].length } : null, t)[0];
+}
+function Gz(r, e) {
+ if (!r)
+ return [[], 0];
+ let { level: t, lateralStart: n, lateralEnd: i } = r, a = n, o = [];
+ for (; a < i; )
+ o.push(e(t, a)), a += 1;
+ return o.sort(aCe), [
+ o.map(oCe),
+ o[0][1]
+ // first item's pressure
+ ];
+}
+function aCe(r, e) {
+ return e[1] - r[1];
+}
+function oCe(r) {
+ return r[0];
+}
+function sCe(r, e, t) {
+ let { levelCoords: n, entriesByLevel: i } = r, a = i[e][t], o = n[e] + a.thickness, s = n.length, l = e;
+ for (; l < s && n[l] < o; l += 1)
+ ;
+ for (; l < s; l += 1) {
+ let u = i[l], c, h = nI(u, a.span.start, rI), f = h[0] + h[1], v = f;
+ for (
+ ;
+ // loop through entries that horizontally intersect
+ (c = u[v]) && // but not past the whole seg list
+ c.span.start < a.span.end;
+ )
+ v += 1;
+ if (f < v)
+ return { level: l, lateralStart: f, lateralEnd: v };
+ }
+ return null;
+}
+function lCe(r, e) {
+ const t = IM((n, i, a) => Hh(n), (n, i, a) => {
+ let { nextLevelNodes: o, thickness: s } = n, l = s + a, u = s / l, c, h = [];
+ if (!o.length)
+ c = e;
+ else
+ for (let v of o)
+ if (c === void 0) {
+ let b = t(v, i, l);
+ c = b[0], h.push(b[1]);
+ } else {
+ let b = t(v, c, 0);
+ h.push(b[1]);
+ }
+ let f = (c - i) * u;
+ return [c - f, Object.assign(Object.assign({}, n), { thickness: f, nextLevelNodes: h })];
+ });
+ return r.map((n) => t(n, 0, 0)[1]);
+}
+function uCe(r) {
+ let e = [];
+ const t = IM((i, a, o) => Hh(i), (i, a, o) => {
+ let s = Object.assign(Object.assign({}, i), {
+ levelCoord: a,
+ stackDepth: o,
+ stackForward: 0
+ });
+ return e.push(s), s.stackForward = n(i.nextLevelNodes, a + i.thickness, o + 1) + 1;
+ });
+ function n(i, a, o) {
+ let s = 0;
+ for (let l of i)
+ s = Math.max(t(l, a, o), s);
+ return s;
+ }
+ return n(r, 0, 0), e;
+}
+function IM(r, e) {
+ const t = {};
+ return (...n) => {
+ let i = r(...n);
+ return i in t ? t[i] : t[i] = e(...n);
+ };
+}
+function Uz(r, e, t = null, n = 0) {
+ let i = [];
+ if (t)
+ for (let a = 0; a < r.length; a += 1) {
+ let o = r[a], s = t.computeDateTop(o.start, e), l = Math.max(
+ s + (n || 0),
+ // :(
+ t.computeDateTop(o.end, e)
+ );
+ i.push({
+ start: Math.round(s),
+ end: Math.round(l)
+ //
+ });
+ }
+ return i;
+}
+function cCe(r, e, t, n) {
+ let i = [], a = [];
+ for (let u = 0; u < r.length; u += 1) {
+ let c = e[u];
+ c ? i.push({
+ index: u,
+ thickness: 1,
+ span: c
+ }) : a.push(r[u]);
+ }
+ let { segRects: o, hiddenGroups: s } = nCe(i, t, n), l = [];
+ for (let u of o)
+ l.push({
+ seg: r[u.index],
+ rect: u
+ });
+ for (let u of a)
+ l.push({ seg: u, rect: null });
+ return { segPlacements: l, hiddenGroups: s };
+}
+const hCe = jn({
+ hour: "numeric",
+ minute: "2-digit",
+ meridiem: !1
+});
+class TU extends un {
+ render() {
+ return me(QG, Object.assign({}, this.props, { elClasses: [
+ "fc-timegrid-event",
+ "fc-v-event",
+ this.props.isShort && "fc-timegrid-event-short"
+ ], defaultTimeFormat: hCe }));
+ }
+}
+class fCe extends un {
+ constructor() {
+ super(...arguments), this.sortEventSegs = rr(vM);
+ }
+ // TODO: memoize event-placement?
+ render() {
+ let { props: e, context: t } = this, { options: n } = t, i = n.selectMirror, a = (
+ // yuck
+ e.eventDrag && e.eventDrag.segs || e.eventResize && e.eventResize.segs || i && e.dateSelectionSegs || []
+ ), o = (
+ // TODO: messy way to compute this
+ e.eventDrag && e.eventDrag.affectedInstances || e.eventResize && e.eventResize.affectedInstances || {}
+ ), s = this.sortEventSegs(e.fgEventSegs, n.eventOrder);
+ return me(wM, { elTag: "td", elRef: e.elRef, elClasses: [
+ "fc-timegrid-col",
+ ...e.extraClassNames || []
+ ], elAttrs: Object.assign({ role: "gridcell" }, e.extraDataAttrs), date: e.date, dateProfile: e.dateProfile, todayRange: e.todayRange, extraRenderProps: e.extraRenderProps }, (l) => me(
+ "div",
+ { className: "fc-timegrid-col-frame" },
+ me(
+ "div",
+ { className: "fc-timegrid-col-bg" },
+ this.renderFillSegs(e.businessHourSegs, "non-business"),
+ this.renderFillSegs(e.bgEventSegs, "bg-event"),
+ this.renderFillSegs(e.dateSelectionSegs, "highlight")
+ ),
+ me("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(s, o, !1, !1, !1)),
+ me("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(a, {}, !!e.eventDrag, !!e.eventResize, !!i, "mirror")),
+ me("div", { className: "fc-timegrid-now-indicator-container" }, this.renderNowIndicator(e.nowIndicatorSegs)),
+ CM(n) && me(l, { elTag: "div", elClasses: ["fc-timegrid-col-misc"] })
+ ));
+ }
+ renderFgSegs(e, t, n, i, a, o) {
+ let { props: s } = this;
+ return s.forPrint ? IU(e, s) : this.renderPositionedFgSegs(e, t, n, i, a, o);
+ }
+ renderPositionedFgSegs(e, t, n, i, a, o) {
+ let { eventMaxStack: s, eventShortHeight: l, eventOrderStrict: u, eventMinHeight: c } = this.context.options, { date: h, slatCoords: f, eventSelection: v, todayRange: b, nowDate: w } = this.props, p = n || i || a, d = Uz(e, h, f, c), { segPlacements: m, hiddenGroups: _ } = cCe(e, d, u, s);
+ return me(
+ Dn,
+ null,
+ this.renderHiddenGroups(_, e),
+ m.map((y) => {
+ let { seg: x, rect: g } = y, S = x.eventRange.instance.instanceId, T = p || !!(!t[S] && g), C = HC(g && g.span), E = !p && g ? this.computeSegHStyle(g) : { left: 0, right: 0 }, M = !!g && g.stackForward > 0, P = !!g && g.span.end - g.span.start < l;
+ return me(
+ "div",
+ { className: "fc-timegrid-event-harness" + (M ? " fc-timegrid-event-harness-inset" : ""), key: o || S, style: Object.assign(Object.assign({ visibility: T ? "" : "hidden" }, C), E) },
+ me(TU, Object.assign({ seg: x, isDragging: n, isResizing: i, isDateSelecting: a, isSelected: S === v, isShort: P }, ql(x, b, w)))
+ );
+ })
+ );
+ }
+ // will already have eventMinHeight applied because segInputs already had it
+ renderHiddenGroups(e, t) {
+ let { extraDateSpan: n, dateProfile: i, todayRange: a, nowDate: o, eventSelection: s, eventDrag: l, eventResize: u } = this.props;
+ return me(Dn, null, e.map((c) => {
+ let h = HC(c.span), f = dCe(c.entries, t);
+ return me(tCe, { key: pG(nU(f)), hiddenSegs: f, top: h.top, bottom: h.bottom, extraDateSpan: n, dateProfile: i, todayRange: a, nowDate: o, eventSelection: s, eventDrag: l, eventResize: u });
+ }));
+ }
+ renderFillSegs(e, t) {
+ let { props: n, context: i } = this, o = Uz(e, n.date, n.slatCoords, i.options.eventMinHeight).map((s, l) => {
+ let u = e[l];
+ return me("div", { key: DG(u.eventRange), className: "fc-timegrid-bg-harness", style: HC(s) }, t === "bg-event" ? me(qG, Object.assign({ seg: u }, ql(u, n.todayRange, n.nowDate))) : eU(t));
+ });
+ return me(Dn, null, o);
+ }
+ renderNowIndicator(e) {
+ let { slatCoords: t, date: n } = this.props;
+ return t ? e.map((i, a) => me(
+ SM,
+ {
+ // key doesn't matter. will only ever be one
+ key: a,
+ elClasses: ["fc-timegrid-now-indicator-line"],
+ elStyle: {
+ top: t.computeDateTop(i.start, n)
+ },
+ isAxis: !1,
+ date: n
+ }
+ )) : null;
+ }
+ computeSegHStyle(e) {
+ let { isRtl: t, options: n } = this.context, i = n.slotEventOverlap, a = e.levelCoord, o = e.levelCoord + e.thickness, s, l;
+ i && (o = Math.min(1, a + (o - a) * 2)), t ? (s = 1 - o, l = a) : (s = a, l = 1 - o);
+ let u = {
+ zIndex: e.stackDepth + 1,
+ left: s * 100 + "%",
+ right: l * 100 + "%"
+ };
+ return i && !e.stackForward && (u[t ? "marginLeft" : "marginRight"] = 10 * 2), u;
+ }
+}
+function IU(r, { todayRange: e, nowDate: t, eventSelection: n, eventDrag: i, eventResize: a }) {
+ let o = (i ? i.affectedInstances : null) || (a ? a.affectedInstances : null) || {};
+ return me(Dn, null, r.map((s) => {
+ let l = s.eventRange.instance.instanceId;
+ return me(
+ "div",
+ { key: l, style: { visibility: o[l] ? "hidden" : "" } },
+ me(TU, Object.assign({ seg: s, isDragging: !1, isResizing: !1, isDateSelecting: !1, isSelected: l === n, isShort: !1 }, ql(s, e, t)))
+ );
+ }));
+}
+function HC(r) {
+ return r ? {
+ top: r.start,
+ bottom: -r.end
+ } : { top: "", bottom: "" };
+}
+function dCe(r, e) {
+ return r.map((t) => e[t.index]);
+}
+class vCe extends un {
+ constructor() {
+ super(...arguments), this.splitFgEventSegs = rr(Sp), this.splitBgEventSegs = rr(Sp), this.splitBusinessHourSegs = rr(Sp), this.splitNowIndicatorSegs = rr(Sp), this.splitDateSelectionSegs = rr(Sp), this.splitEventDrag = rr(Vz), this.splitEventResize = rr(Vz), this.rootElRef = Da(), this.cellElRefs = new Zl();
+ }
+ render() {
+ let { props: e, context: t } = this, n = t.options.nowIndicator && e.slatCoords && e.slatCoords.safeComputeTop(e.nowDate), i = e.cells.length, a = this.splitFgEventSegs(e.fgEventSegs, i), o = this.splitBgEventSegs(e.bgEventSegs, i), s = this.splitBusinessHourSegs(e.businessHourSegs, i), l = this.splitNowIndicatorSegs(e.nowIndicatorSegs, i), u = this.splitDateSelectionSegs(e.dateSelectionSegs, i), c = this.splitEventDrag(e.eventDrag, i), h = this.splitEventResize(e.eventResize, i);
+ return me(
+ "div",
+ { className: "fc-timegrid-cols", ref: this.rootElRef },
+ me(
+ "table",
+ { role: "presentation", style: {
+ minWidth: e.tableMinWidth,
+ width: e.clientWidth
+ } },
+ e.tableColGroupNode,
+ me(
+ "tbody",
+ { role: "presentation" },
+ me(
+ "tr",
+ { role: "row" },
+ e.axis && me(
+ "td",
+ { "aria-hidden": !0, className: "fc-timegrid-col fc-timegrid-axis" },
+ me(
+ "div",
+ { className: "fc-timegrid-col-frame" },
+ me("div", { className: "fc-timegrid-now-indicator-container" }, typeof n == "number" && me(SM, { elClasses: ["fc-timegrid-now-indicator-arrow"], elStyle: { top: n }, isAxis: !0, date: e.nowDate }))
+ )
+ ),
+ e.cells.map((f, v) => me(fCe, { key: f.key, elRef: this.cellElRefs.createRef(f.key), dateProfile: e.dateProfile, date: f.date, nowDate: e.nowDate, todayRange: e.todayRange, extraRenderProps: f.extraRenderProps, extraDataAttrs: f.extraDataAttrs, extraClassNames: f.extraClassNames, extraDateSpan: f.extraDateSpan, fgEventSegs: a[v], bgEventSegs: o[v], businessHourSegs: s[v], nowIndicatorSegs: l[v], dateSelectionSegs: u[v], eventDrag: c[v], eventResize: h[v], slatCoords: e.slatCoords, eventSelection: e.eventSelection, forPrint: e.forPrint }))
+ )
+ )
+ )
+ );
+ }
+ componentDidMount() {
+ this.updateCoords();
+ }
+ componentDidUpdate() {
+ this.updateCoords();
+ }
+ updateCoords() {
+ let { props: e } = this;
+ e.onColCoords && e.clientWidth !== null && e.onColCoords(new Ud(
+ this.rootElRef.current,
+ pCe(this.cellElRefs.currentMap, e.cells),
+ !0,
+ // horizontal
+ !1
+ ));
+ }
+}
+function pCe(r, e) {
+ return e.map((t) => r[t.key]);
+}
+class gCe extends Vs {
+ constructor() {
+ super(...arguments), this.processSlotOptions = rr(mCe), this.state = {
+ slatCoords: null
+ }, this.handleRootEl = (e) => {
+ e ? this.context.registerInteractiveComponent(this, {
+ el: e,
+ isHitComboAllowed: this.props.isHitComboAllowed
+ }) : this.context.unregisterInteractiveComponent(this);
+ }, this.handleScrollRequest = (e) => {
+ let { onScrollTopRequest: t } = this.props, { slatCoords: n } = this.state;
+ if (t && n) {
+ if (e.time) {
+ let i = n.computeTimeTop(e.time);
+ i = Math.ceil(i), i && (i += 1), t(i);
+ }
+ return !0;
+ }
+ return !1;
+ }, this.handleColCoords = (e) => {
+ this.colCoords = e;
+ }, this.handleSlatCoords = (e) => {
+ this.setState({ slatCoords: e }), this.props.onSlatCoords && this.props.onSlatCoords(e);
+ };
+ }
+ render() {
+ let { props: e, state: t } = this;
+ return me(
+ "div",
+ { className: "fc-timegrid-body", ref: this.handleRootEl, style: {
+ // these props are important to give this wrapper correct dimensions for interactions
+ // TODO: if we set it here, can we avoid giving to inner tables?
+ width: e.clientWidth,
+ minWidth: e.tableMinWidth
+ } },
+ me(qwe, { axis: e.axis, dateProfile: e.dateProfile, slatMetas: e.slatMetas, clientWidth: e.clientWidth, minHeight: e.expandRows ? e.clientHeight : "", tableMinWidth: e.tableMinWidth, tableColGroupNode: e.axis ? e.tableColGroupNode : null, onCoords: this.handleSlatCoords }),
+ me(vCe, { cells: e.cells, axis: e.axis, dateProfile: e.dateProfile, businessHourSegs: e.businessHourSegs, bgEventSegs: e.bgEventSegs, fgEventSegs: e.fgEventSegs, dateSelectionSegs: e.dateSelectionSegs, eventSelection: e.eventSelection, eventDrag: e.eventDrag, eventResize: e.eventResize, todayRange: e.todayRange, nowDate: e.nowDate, nowIndicatorSegs: e.nowIndicatorSegs, clientWidth: e.clientWidth, tableMinWidth: e.tableMinWidth, tableColGroupNode: e.tableColGroupNode, slatCoords: t.slatCoords, onColCoords: this.handleColCoords, forPrint: e.forPrint })
+ );
+ }
+ componentDidMount() {
+ this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);
+ }
+ componentDidUpdate(e) {
+ this.scrollResponder.update(e.dateProfile !== this.props.dateProfile);
+ }
+ componentWillUnmount() {
+ this.scrollResponder.detach();
+ }
+ queryHit(e, t) {
+ let { dateEnv: n, options: i } = this.context, { colCoords: a } = this, { dateProfile: o } = this.props, { slatCoords: s } = this.state, { snapDuration: l, snapsPerSlot: u } = this.processSlotOptions(this.props.slotDuration, i.snapDuration), c = a.leftToIndex(e), h = s.positions.topToIndex(t);
+ if (c != null && h != null) {
+ let f = this.props.cells[c], v = s.positions.tops[h], b = s.positions.getHeight(h), w = (t - v) / b, p = Math.floor(w * u), d = h * u + p, m = this.props.cells[c].date, _ = JT(o.slotMinTime, s_e(l, d)), y = n.add(m, _), x = n.add(y, l);
+ return {
+ dateProfile: o,
+ dateSpan: Object.assign({ range: { start: y, end: x }, allDay: !1 }, f.extraDateSpan),
+ dayEl: a.els[c],
+ rect: {
+ left: a.lefts[c],
+ right: a.rights[c],
+ top: v,
+ bottom: v + b
+ },
+ layer: 0
+ };
+ }
+ return null;
+ }
+}
+function mCe(r, e) {
+ let t = e || r, n = QE(r, t);
+ return n === null && (t = r, n = 1), { snapDuration: t, snapsPerSlot: n };
+}
+class yCe extends VG {
+ sliceRange(e, t) {
+ let n = [];
+ for (let i = 0; i < t.length; i += 1) {
+ let a = xc(e, t[i]);
+ a && n.push({
+ start: a.start,
+ end: a.end,
+ isStart: a.start.valueOf() === e.start.valueOf(),
+ isEnd: a.end.valueOf() === e.end.valueOf(),
+ col: i
+ });
+ }
+ return n;
+ }
+}
+class _Ce extends Vs {
+ constructor() {
+ super(...arguments), this.buildDayRanges = rr(bCe), this.slicer = new yCe(), this.timeColsRef = Da();
+ }
+ render() {
+ let { props: e, context: t } = this, { dateProfile: n, dayTableModel: i } = e, { nowIndicator: a, nextDayThreshold: o } = t.options, s = this.buildDayRanges(i, n, t.dateEnv);
+ return me(vv, { unit: a ? "minute" : "day" }, (l, u) => me(gCe, Object.assign({ ref: this.timeColsRef }, this.slicer.sliceProps(e, n, null, t, s), { forPrint: e.forPrint, axis: e.axis, dateProfile: n, slatMetas: e.slatMetas, slotDuration: e.slotDuration, cells: i.cells[0], tableColGroupNode: e.tableColGroupNode, tableMinWidth: e.tableMinWidth, clientWidth: e.clientWidth, clientHeight: e.clientHeight, expandRows: e.expandRows, nowDate: l, nowIndicatorSegs: a && this.slicer.sliceNowDate(l, n, o, t, s), todayRange: u, onScrollTopRequest: e.onScrollTopRequest, onSlatCoords: e.onSlatCoords })));
+ }
+}
+function bCe(r, e, t) {
+ let n = [];
+ for (let i of r.headerDates)
+ n.push({
+ start: t.add(i, e.slotMinTime),
+ end: t.add(i, e.slotMaxTime)
+ });
+ return n;
+}
+const Wz = [
+ { hours: 1 },
+ { minutes: 30 },
+ { minutes: 15 },
+ { seconds: 30 },
+ { seconds: 15 }
+];
+function xCe(r, e, t, n, i) {
+ let a = /* @__PURE__ */ new Date(0), o = r, s = Xr(0), l = t || SCe(n), u = [];
+ for (; Ls(o) < Ls(e); ) {
+ let c = i.add(a, o), h = QE(s, l) !== null;
+ u.push({
+ date: c,
+ time: o,
+ key: c.toISOString(),
+ isoTimeStr: A_e(c),
+ isLabeled: h
+ }), o = JT(o, n), s = JT(s, n);
+ }
+ return u;
+}
+function SCe(r) {
+ let e, t, n;
+ for (e = Wz.length - 1; e >= 0; e -= 1)
+ if (t = Xr(Wz[e]), n = QE(t, r), n !== null && n > 1)
+ return t;
+ return r;
+}
+class wCe extends Zwe {
+ constructor() {
+ super(...arguments), this.buildTimeColsModel = rr(CCe), this.buildSlatMetas = rr(xCe);
+ }
+ render() {
+ let { options: e, dateEnv: t, dateProfileGenerator: n } = this.context, { props: i } = this, { dateProfile: a } = i, o = this.buildTimeColsModel(a, n), s = this.allDaySplitter.splitProps(i), l = this.buildSlatMetas(a.slotMinTime, a.slotMaxTime, e.slotLabelInterval, e.slotDuration, t), { dayMinWidth: u } = e, c = !u, h = u, f = e.dayHeaders && me(FG, { dates: o.headerDates, dateProfile: a, datesRepDistinctDays: !0, renderIntro: c ? this.renderHeadAxis : null }), v = e.allDaySlot !== !1 && ((w) => me(wU, Object.assign({}, s.allDay, { dateProfile: a, dayTableModel: o, nextDayThreshold: e.nextDayThreshold, tableMinWidth: w.tableMinWidth, colGroupNode: w.tableColGroupNode, renderRowIntro: c ? this.renderTableRowAxis : null, showWeekNumbers: !1, expandRows: !1, headerAlignElRef: this.headerElRef, clientWidth: w.clientWidth, clientHeight: w.clientHeight, forPrint: i.forPrint }, this.getAllDayMaxEventProps()))), b = (w) => me(_Ce, Object.assign({}, s.timed, { dayTableModel: o, dateProfile: a, axis: c, slotDuration: e.slotDuration, slatMetas: l, forPrint: i.forPrint, tableColGroupNode: w.tableColGroupNode, tableMinWidth: w.tableMinWidth, clientWidth: w.clientWidth, clientHeight: w.clientHeight, onSlatCoords: this.handleSlatCoords, expandRows: w.expandRows, onScrollTopRequest: this.handleScrollTopRequest }));
+ return h ? this.renderHScrollLayout(f, v, b, o.colCnt, u, l, this.state.slatCoords) : this.renderSimpleLayout(f, v, b);
+ }
+}
+function CCe(r, e) {
+ let t = new $G(r.renderRange, e);
+ return new HG(t, !1);
+}
+const TCe = {
+ allDaySlot: Boolean
+};
+var ICe = Gs({
+ name: "@fullcalendar/timegrid",
+ initialView: "timeGridWeek",
+ optionRefiners: TCe,
+ views: {
+ timeGrid: {
+ component: wCe,
+ usesMinMaxTime: !0,
+ allDaySlot: !0,
+ slotDuration: "00:30:00",
+ slotEventOverlap: !0
+ // a bad name. confused with overlap/constraint system
+ },
+ timeGridDay: {
+ type: "timeGrid",
+ duration: { days: 1 }
+ },
+ timeGridWeek: {
+ type: "timeGrid",
+ duration: { weeks: 1 }
+ }
+ }
+});
+yM.touchMouseIgnoreWait = 500;
+let sI = 0, gb = 0, lI = !1;
+class AU {
+ constructor(e) {
+ this.subjectEl = null, this.selector = "", this.handleSelector = "", this.shouldIgnoreMove = !1, this.shouldWatchScroll = !0, this.isDragging = !1, this.isTouchDragging = !1, this.wasTouchScroll = !1, this.handleMouseDown = (t) => {
+ if (!this.shouldIgnoreMouse() && ACe(t) && this.tryStart(t)) {
+ let n = this.createEventFromMouse(t, !0);
+ this.emitter.trigger("pointerdown", n), this.initScrollWatch(n), this.shouldIgnoreMove || document.addEventListener("mousemove", this.handleMouseMove), document.addEventListener("mouseup", this.handleMouseUp);
+ }
+ }, this.handleMouseMove = (t) => {
+ let n = this.createEventFromMouse(t);
+ this.recordCoords(n), this.emitter.trigger("pointermove", n);
+ }, this.handleMouseUp = (t) => {
+ document.removeEventListener("mousemove", this.handleMouseMove), document.removeEventListener("mouseup", this.handleMouseUp), this.emitter.trigger("pointerup", this.createEventFromMouse(t)), this.cleanup();
+ }, this.handleTouchStart = (t) => {
+ if (this.tryStart(t)) {
+ this.isTouchDragging = !0;
+ let n = this.createEventFromTouch(t, !0);
+ this.emitter.trigger("pointerdown", n), this.initScrollWatch(n);
+ let i = t.target;
+ this.shouldIgnoreMove || i.addEventListener("touchmove", this.handleTouchMove), i.addEventListener("touchend", this.handleTouchEnd), i.addEventListener("touchcancel", this.handleTouchEnd), window.addEventListener("scroll", this.handleTouchScroll, !0);
+ }
+ }, this.handleTouchMove = (t) => {
+ let n = this.createEventFromTouch(t);
+ this.recordCoords(n), this.emitter.trigger("pointermove", n);
+ }, this.handleTouchEnd = (t) => {
+ if (this.isDragging) {
+ let n = t.target;
+ n.removeEventListener("touchmove", this.handleTouchMove), n.removeEventListener("touchend", this.handleTouchEnd), n.removeEventListener("touchcancel", this.handleTouchEnd), window.removeEventListener("scroll", this.handleTouchScroll, !0), this.emitter.trigger("pointerup", this.createEventFromTouch(t)), this.cleanup(), this.isTouchDragging = !1, ECe();
+ }
+ }, this.handleTouchScroll = () => {
+ this.wasTouchScroll = !0;
+ }, this.handleScroll = (t) => {
+ if (!this.shouldIgnoreMove) {
+ let n = window.pageXOffset - this.prevScrollX + this.prevPageX, i = window.pageYOffset - this.prevScrollY + this.prevPageY;
+ this.emitter.trigger("pointermove", {
+ origEvent: t,
+ isTouch: this.isTouchDragging,
+ subjectEl: this.subjectEl,
+ pageX: n,
+ pageY: i,
+ deltaX: n - this.origPageX,
+ deltaY: i - this.origPageY
+ });
+ }
+ }, this.containerEl = e, this.emitter = new Cx(), e.addEventListener("mousedown", this.handleMouseDown), e.addEventListener("touchstart", this.handleTouchStart, { passive: !0 }), MCe();
+ }
+ destroy() {
+ this.containerEl.removeEventListener("mousedown", this.handleMouseDown), this.containerEl.removeEventListener("touchstart", this.handleTouchStart, { passive: !0 }), DCe();
+ }
+ tryStart(e) {
+ let t = this.querySubjectEl(e), n = e.target;
+ return t && (!this.handleSelector || da(n, this.handleSelector)) ? (this.subjectEl = t, this.isDragging = !0, this.wasTouchScroll = !1, !0) : !1;
+ }
+ cleanup() {
+ lI = !1, this.isDragging = !1, this.subjectEl = null, this.destroyScrollWatch();
+ }
+ querySubjectEl(e) {
+ return this.selector ? da(e.target, this.selector) : this.containerEl;
+ }
+ shouldIgnoreMouse() {
+ return sI || this.isTouchDragging;
+ }
+ // can be called by user of this class, to cancel touch-based scrolling for the current drag
+ cancelTouchScroll() {
+ this.isDragging && (lI = !0);
+ }
+ // Scrolling that simulates pointermoves
+ // ----------------------------------------------------------------------------------------------------
+ initScrollWatch(e) {
+ this.shouldWatchScroll && (this.recordCoords(e), window.addEventListener("scroll", this.handleScroll, !0));
+ }
+ recordCoords(e) {
+ this.shouldWatchScroll && (this.prevPageX = e.pageX, this.prevPageY = e.pageY, this.prevScrollX = window.pageXOffset, this.prevScrollY = window.pageYOffset);
+ }
+ destroyScrollWatch() {
+ this.shouldWatchScroll && window.removeEventListener("scroll", this.handleScroll, !0);
+ }
+ // Event Normalization
+ // ----------------------------------------------------------------------------------------------------
+ createEventFromMouse(e, t) {
+ let n = 0, i = 0;
+ return t ? (this.origPageX = e.pageX, this.origPageY = e.pageY) : (n = e.pageX - this.origPageX, i = e.pageY - this.origPageY), {
+ origEvent: e,
+ isTouch: !1,
+ subjectEl: this.subjectEl,
+ pageX: e.pageX,
+ pageY: e.pageY,
+ deltaX: n,
+ deltaY: i
+ };
+ }
+ createEventFromTouch(e, t) {
+ let n = e.touches, i, a, o = 0, s = 0;
+ return n && n.length ? (i = n[0].pageX, a = n[0].pageY) : (i = e.pageX, a = e.pageY), t ? (this.origPageX = i, this.origPageY = a) : (o = i - this.origPageX, s = a - this.origPageY), {
+ origEvent: e,
+ isTouch: !0,
+ subjectEl: this.subjectEl,
+ pageX: i,
+ pageY: a,
+ deltaX: o,
+ deltaY: s
+ };
+ }
+}
+function ACe(r) {
+ return r.button === 0 && !r.ctrlKey;
+}
+function ECe() {
+ sI += 1, setTimeout(() => {
+ sI -= 1;
+ }, yM.touchMouseIgnoreWait);
+}
+function MCe() {
+ gb += 1, gb === 1 && window.addEventListener("touchmove", EU, { passive: !1 });
+}
+function DCe() {
+ gb -= 1, gb || window.removeEventListener("touchmove", EU, { passive: !1 });
+}
+function EU(r) {
+ lI && r.preventDefault();
+}
+class kCe {
+ constructor() {
+ this.isVisible = !1, this.sourceEl = null, this.mirrorEl = null, this.sourceElRect = null, this.parentNode = document.body, this.zIndex = 9999, this.revertDuration = 0;
+ }
+ start(e, t, n) {
+ this.sourceEl = e, this.sourceElRect = this.sourceEl.getBoundingClientRect(), this.origScreenX = t - window.pageXOffset, this.origScreenY = n - window.pageYOffset, this.deltaX = 0, this.deltaY = 0, this.updateElPosition();
+ }
+ handleMove(e, t) {
+ this.deltaX = e - window.pageXOffset - this.origScreenX, this.deltaY = t - window.pageYOffset - this.origScreenY, this.updateElPosition();
+ }
+ // can be called before start
+ setIsVisible(e) {
+ e ? this.isVisible || (this.mirrorEl && (this.mirrorEl.style.display = ""), this.isVisible = e, this.updateElPosition()) : this.isVisible && (this.mirrorEl && (this.mirrorEl.style.display = "none"), this.isVisible = e);
+ }
+ // always async
+ stop(e, t) {
+ let n = () => {
+ this.cleanup(), t();
+ };
+ e && this.mirrorEl && this.isVisible && this.revertDuration && // if 0, transition won't work
+ (this.deltaX || this.deltaY) ? this.doRevertAnimation(n, this.revertDuration) : setTimeout(n, 0);
+ }
+ doRevertAnimation(e, t) {
+ let n = this.mirrorEl, i = this.sourceEl.getBoundingClientRect();
+ n.style.transition = "top " + t + "ms,left " + t + "ms", qp(n, {
+ left: i.left,
+ top: i.top
+ }), W0e(n, () => {
+ n.style.transition = "", e();
+ });
+ }
+ cleanup() {
+ this.mirrorEl && (ZE(this.mirrorEl), this.mirrorEl = null), this.sourceEl = null;
+ }
+ updateElPosition() {
+ this.sourceEl && this.isVisible && qp(this.getMirrorEl(), {
+ left: this.sourceElRect.left + this.deltaX,
+ top: this.sourceElRect.top + this.deltaY
+ });
+ }
+ getMirrorEl() {
+ let e = this.sourceElRect, t = this.mirrorEl;
+ return t || (t = this.mirrorEl = this.sourceEl.cloneNode(!0), t.style.userSelect = "none", t.classList.add("fc-event-dragging"), qp(t, {
+ position: "fixed",
+ zIndex: this.zIndex,
+ visibility: "",
+ boxSizing: "border-box",
+ width: e.right - e.left,
+ height: e.bottom - e.top,
+ right: "auto",
+ bottom: "auto",
+ margin: 0
+ }), this.parentNode.appendChild(t)), t;
+ }
+}
+class MU extends hM {
+ constructor(e, t) {
+ super(), this.handleScroll = () => {
+ this.scrollTop = this.scrollController.getScrollTop(), this.scrollLeft = this.scrollController.getScrollLeft(), this.handleScrollChange();
+ }, this.scrollController = e, this.doesListening = t, this.scrollTop = this.origScrollTop = e.getScrollTop(), this.scrollLeft = this.origScrollLeft = e.getScrollLeft(), this.scrollWidth = e.getScrollWidth(), this.scrollHeight = e.getScrollHeight(), this.clientWidth = e.getClientWidth(), this.clientHeight = e.getClientHeight(), this.clientRect = this.computeClientRect(), this.doesListening && this.getEventTarget().addEventListener("scroll", this.handleScroll);
+ }
+ destroy() {
+ this.doesListening && this.getEventTarget().removeEventListener("scroll", this.handleScroll);
+ }
+ getScrollTop() {
+ return this.scrollTop;
+ }
+ getScrollLeft() {
+ return this.scrollLeft;
+ }
+ setScrollTop(e) {
+ this.scrollController.setScrollTop(e), this.doesListening || (this.scrollTop = Math.max(Math.min(e, this.getMaxScrollTop()), 0), this.handleScrollChange());
+ }
+ setScrollLeft(e) {
+ this.scrollController.setScrollLeft(e), this.doesListening || (this.scrollLeft = Math.max(Math.min(e, this.getMaxScrollLeft()), 0), this.handleScrollChange());
+ }
+ getClientWidth() {
+ return this.clientWidth;
+ }
+ getClientHeight() {
+ return this.clientHeight;
+ }
+ getScrollWidth() {
+ return this.scrollWidth;
+ }
+ getScrollHeight() {
+ return this.scrollHeight;
+ }
+ handleScrollChange() {
+ }
+}
+class DU extends MU {
+ constructor(e, t) {
+ super(new Abe(e), t);
+ }
+ getEventTarget() {
+ return this.scrollController.el;
+ }
+ computeClientRect() {
+ return Sbe(this.scrollController.el);
+ }
+}
+class OCe extends MU {
+ constructor(e) {
+ super(new Ebe(), e);
+ }
+ getEventTarget() {
+ return window;
+ }
+ computeClientRect() {
+ return {
+ left: this.scrollLeft,
+ right: this.scrollLeft + this.clientWidth,
+ top: this.scrollTop,
+ bottom: this.scrollTop + this.clientHeight
+ };
+ }
+ // the window is the only scroll object that changes it's rectangle relative
+ // to the document's topleft as it scrolls
+ handleScrollChange() {
+ this.clientRect = this.computeClientRect();
+ }
+}
+const Yz = typeof performance == "function" ? performance.now : Date.now;
+class LCe {
+ constructor() {
+ this.isEnabled = !0, this.scrollQuery = [window, ".fc-scroller"], this.edgeThreshold = 50, this.maxVelocity = 300, this.pointerScreenX = null, this.pointerScreenY = null, this.isAnimating = !1, this.scrollCaches = null, this.everMovedUp = !1, this.everMovedDown = !1, this.everMovedLeft = !1, this.everMovedRight = !1, this.animate = () => {
+ if (this.isAnimating) {
+ let e = this.computeBestEdge(this.pointerScreenX + window.pageXOffset, this.pointerScreenY + window.pageYOffset);
+ if (e) {
+ let t = Yz();
+ this.handleSide(e, (t - this.msSinceRequest) / 1e3), this.requestAnimation(t);
+ } else
+ this.isAnimating = !1;
+ }
+ };
+ }
+ start(e, t, n) {
+ this.isEnabled && (this.scrollCaches = this.buildCaches(n), this.pointerScreenX = null, this.pointerScreenY = null, this.everMovedUp = !1, this.everMovedDown = !1, this.everMovedLeft = !1, this.everMovedRight = !1, this.handleMove(e, t));
+ }
+ handleMove(e, t) {
+ if (this.isEnabled) {
+ let n = e - window.pageXOffset, i = t - window.pageYOffset, a = this.pointerScreenY === null ? 0 : i - this.pointerScreenY, o = this.pointerScreenX === null ? 0 : n - this.pointerScreenX;
+ a < 0 ? this.everMovedUp = !0 : a > 0 && (this.everMovedDown = !0), o < 0 ? this.everMovedLeft = !0 : o > 0 && (this.everMovedRight = !0), this.pointerScreenX = n, this.pointerScreenY = i, this.isAnimating || (this.isAnimating = !0, this.requestAnimation(Yz()));
+ }
+ }
+ stop() {
+ if (this.isEnabled) {
+ this.isAnimating = !1;
+ for (let e of this.scrollCaches)
+ e.destroy();
+ this.scrollCaches = null;
+ }
+ }
+ requestAnimation(e) {
+ this.msSinceRequest = e, requestAnimationFrame(this.animate);
+ }
+ handleSide(e, t) {
+ let { scrollCache: n } = e, { edgeThreshold: i } = this, a = i - e.distance, o = (
+ // the closer to the edge, the faster we scroll
+ a * a / (i * i) * // quadratic
+ this.maxVelocity * t
+ ), s = 1;
+ switch (e.name) {
+ case "left":
+ s = -1;
+ case "right":
+ n.setScrollLeft(n.getScrollLeft() + o * s);
+ break;
+ case "top":
+ s = -1;
+ case "bottom":
+ n.setScrollTop(n.getScrollTop() + o * s);
+ break;
+ }
+ }
+ // left/top are relative to document topleft
+ computeBestEdge(e, t) {
+ let { edgeThreshold: n } = this, i = null, a = this.scrollCaches || [];
+ for (let o of a) {
+ let s = o.clientRect, l = e - s.left, u = s.right - e, c = t - s.top, h = s.bottom - t;
+ l >= 0 && u >= 0 && c >= 0 && h >= 0 && (c <= n && this.everMovedUp && o.canScrollUp() && (!i || i.distance > c) && (i = { scrollCache: o, name: "top", distance: c }), h <= n && this.everMovedDown && o.canScrollDown() && (!i || i.distance > h) && (i = { scrollCache: o, name: "bottom", distance: h }), l <= n && this.everMovedLeft && o.canScrollLeft() && (!i || i.distance > l) && (i = { scrollCache: o, name: "left", distance: l }), u <= n && this.everMovedRight && o.canScrollRight() && (!i || i.distance > u) && (i = { scrollCache: o, name: "right", distance: u }));
+ }
+ return i;
+ }
+ buildCaches(e) {
+ return this.queryScrollEls(e).map((t) => t === window ? new OCe(!1) : new DU(t, !1));
+ }
+ queryScrollEls(e) {
+ let t = [];
+ for (let n of this.scrollQuery)
+ typeof n == "object" ? t.push(n) : t.push(...Array.prototype.slice.call(e.getRootNode().querySelectorAll(n)));
+ return t;
+ }
+}
+class xm extends sxe {
+ constructor(e, t) {
+ super(e), this.containerEl = e, this.delay = null, this.minDistance = 0, this.touchScrollAllowed = !0, this.mirrorNeedsRevert = !1, this.isInteracting = !1, this.isDragging = !1, this.isDelayEnded = !1, this.isDistanceSurpassed = !1, this.delayTimeoutId = null, this.onPointerDown = (i) => {
+ this.isDragging || (this.isInteracting = !0, this.isDelayEnded = !1, this.isDistanceSurpassed = !1, Y0e(document.body), Z0e(document.body), i.isTouch || i.origEvent.preventDefault(), this.emitter.trigger("pointerdown", i), this.isInteracting && // not destroyed via pointerdown handler
+ !this.pointer.shouldIgnoreMove && (this.mirror.setIsVisible(!1), this.mirror.start(i.subjectEl, i.pageX, i.pageY), this.startDelay(i), this.minDistance || this.handleDistanceSurpassed(i)));
+ }, this.onPointerMove = (i) => {
+ if (this.isInteracting) {
+ if (this.emitter.trigger("pointermove", i), !this.isDistanceSurpassed) {
+ let a = this.minDistance, o, { deltaX: s, deltaY: l } = i;
+ o = s * s + l * l, o >= a * a && this.handleDistanceSurpassed(i);
+ }
+ this.isDragging && (i.origEvent.type !== "scroll" && (this.mirror.handleMove(i.pageX, i.pageY), this.autoScroller.handleMove(i.pageX, i.pageY)), this.emitter.trigger("dragmove", i));
+ }
+ }, this.onPointerUp = (i) => {
+ this.isInteracting && (this.isInteracting = !1, X0e(document.body), J0e(document.body), this.emitter.trigger("pointerup", i), this.isDragging && (this.autoScroller.stop(), this.tryStopDrag(i)), this.delayTimeoutId && (clearTimeout(this.delayTimeoutId), this.delayTimeoutId = null));
+ };
+ let n = this.pointer = new AU(e);
+ n.emitter.on("pointerdown", this.onPointerDown), n.emitter.on("pointermove", this.onPointerMove), n.emitter.on("pointerup", this.onPointerUp), t && (n.selector = t), this.mirror = new kCe(), this.autoScroller = new LCe();
+ }
+ destroy() {
+ this.pointer.destroy(), this.onPointerUp({});
+ }
+ startDelay(e) {
+ typeof this.delay == "number" ? this.delayTimeoutId = setTimeout(() => {
+ this.delayTimeoutId = null, this.handleDelayEnd(e);
+ }, this.delay) : this.handleDelayEnd(e);
+ }
+ handleDelayEnd(e) {
+ this.isDelayEnded = !0, this.tryStartDrag(e);
+ }
+ handleDistanceSurpassed(e) {
+ this.isDistanceSurpassed = !0, this.tryStartDrag(e);
+ }
+ tryStartDrag(e) {
+ this.isDelayEnded && this.isDistanceSurpassed && (!this.pointer.wasTouchScroll || this.touchScrollAllowed) && (this.isDragging = !0, this.mirrorNeedsRevert = !1, this.autoScroller.start(e.pageX, e.pageY, this.containerEl), this.emitter.trigger("dragstart", e), this.touchScrollAllowed === !1 && this.pointer.cancelTouchScroll());
+ }
+ tryStopDrag(e) {
+ this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, e));
+ }
+ stopDrag(e) {
+ this.isDragging = !1, this.emitter.trigger("dragend", e);
+ }
+ // fill in the implementations...
+ setIgnoreMove(e) {
+ this.pointer.shouldIgnoreMove = e;
+ }
+ setMirrorIsVisible(e) {
+ this.mirror.setIsVisible(e);
+ }
+ setMirrorNeedsRevert(e) {
+ this.mirrorNeedsRevert = e;
+ }
+ setAutoScrollEnabled(e) {
+ this.autoScroller.isEnabled = e;
+ }
+}
+class PCe {
+ constructor(e) {
+ this.origRect = cM(e), this.scrollCaches = CG(e).map((t) => new DU(t, !0));
+ }
+ destroy() {
+ for (let e of this.scrollCaches)
+ e.destroy();
+ }
+ computeLeft() {
+ let e = this.origRect.left;
+ for (let t of this.scrollCaches)
+ e += t.origScrollLeft - t.getScrollLeft();
+ return e;
+ }
+ computeTop() {
+ let e = this.origRect.top;
+ for (let t of this.scrollCaches)
+ e += t.origScrollTop - t.getScrollTop();
+ return e;
+ }
+ isWithinClipping(e, t) {
+ let n = { left: e, top: t };
+ for (let i of this.scrollCaches)
+ if (!RCe(i.getEventTarget()) && !ibe(n, i.clientRect))
+ return !1;
+ return !0;
+ }
+}
+function RCe(r) {
+ let e = r.tagName;
+ return e === "HTML" || e === "BODY";
+}
+class Ix {
+ constructor(e, t) {
+ this.useSubjectCenter = !1, this.requireInitial = !0, this.initialHit = null, this.movingHit = null, this.finalHit = null, this.handlePointerDown = (n) => {
+ let { dragging: i } = this;
+ this.initialHit = null, this.movingHit = null, this.finalHit = null, this.prepareHits(), this.processFirstCoord(n), this.initialHit || !this.requireInitial ? (i.setIgnoreMove(!1), this.emitter.trigger("pointerdown", n)) : i.setIgnoreMove(!0);
+ }, this.handleDragStart = (n) => {
+ this.emitter.trigger("dragstart", n), this.handleMove(n, !0);
+ }, this.handleDragMove = (n) => {
+ this.emitter.trigger("dragmove", n), this.handleMove(n);
+ }, this.handlePointerUp = (n) => {
+ this.releaseHits(), this.emitter.trigger("pointerup", n);
+ }, this.handleDragEnd = (n) => {
+ this.movingHit && this.emitter.trigger("hitupdate", null, !0, n), this.finalHit = this.movingHit, this.movingHit = null, this.emitter.trigger("dragend", n);
+ }, this.droppableStore = t, e.emitter.on("pointerdown", this.handlePointerDown), e.emitter.on("dragstart", this.handleDragStart), e.emitter.on("dragmove", this.handleDragMove), e.emitter.on("pointerup", this.handlePointerUp), e.emitter.on("dragend", this.handleDragEnd), this.dragging = e, this.emitter = new Cx();
+ }
+ // sets initialHit
+ // sets coordAdjust
+ processFirstCoord(e) {
+ let t = { left: e.pageX, top: e.pageY }, n = t, i = e.subjectEl, a;
+ i instanceof HTMLElement && (a = cM(i), n = abe(n, a));
+ let o = this.initialHit = this.queryHitForOffset(n.left, n.top);
+ if (o) {
+ if (this.useSubjectCenter && a) {
+ let s = xG(a, o.rect);
+ s && (n = obe(s));
+ }
+ this.coordAdjust = sbe(n, t);
+ } else
+ this.coordAdjust = { left: 0, top: 0 };
+ }
+ handleMove(e, t) {
+ let n = this.queryHitForOffset(e.pageX + this.coordAdjust.left, e.pageY + this.coordAdjust.top);
+ (t || !Ax(this.movingHit, n)) && (this.movingHit = n, this.emitter.trigger("hitupdate", n, !1, e));
+ }
+ prepareHits() {
+ this.offsetTrackers = su(this.droppableStore, (e) => (e.component.prepareHits(), new PCe(e.el)));
+ }
+ releaseHits() {
+ let { offsetTrackers: e } = this;
+ for (let t in e)
+ e[t].destroy();
+ this.offsetTrackers = {};
+ }
+ queryHitForOffset(e, t) {
+ let { droppableStore: n, offsetTrackers: i } = this, a = null;
+ for (let o in n) {
+ let s = n[o].component, l = i[o];
+ if (l && // wasn't destroyed mid-drag
+ l.isWithinClipping(e, t)) {
+ let u = l.computeLeft(), c = l.computeTop(), h = e - u, f = t - c, { origRect: v } = l, b = v.right - v.left, w = v.bottom - v.top;
+ if (
+ // must be within the element's bounds
+ h >= 0 && h < b && f >= 0 && f < w
+ ) {
+ let p = s.queryHit(h, f, b, w);
+ p && // make sure the hit is within activeRange, meaning it's not a dead cell
+ xx(p.dateProfile.activeRange, p.dateSpan.range) && (!a || p.layer > a.layer) && (p.componentId = o, p.context = s.context, p.rect.left += u, p.rect.right += u, p.rect.top += c, p.rect.bottom += c, a = p);
+ }
+ }
+ }
+ return a;
+ }
+}
+function Ax(r, e) {
+ return !r && !e ? !0 : !!r != !!e ? !1 : Xbe(r.dateSpan, e.dateSpan);
+}
+function kU(r, e) {
+ let t = {};
+ for (let n of e.pluginHooks.datePointTransforms)
+ Object.assign(t, n(r, e));
+ return Object.assign(t, NCe(r, e.dateEnv)), t;
+}
+function NCe(r, e) {
+ return {
+ date: e.toDate(r.range.start),
+ dateStr: e.formatIso(r.range.start, { omitTime: r.allDay }),
+ allDay: r.allDay
+ };
+}
+class zCe extends dv {
+ constructor(e) {
+ super(e), this.handlePointerDown = (n) => {
+ let { dragging: i } = this, a = n.origEvent.target;
+ i.setIgnoreMove(!this.component.isValidDateDownEl(a));
+ }, this.handleDragEnd = (n) => {
+ let { component: i } = this, { pointer: a } = this.dragging;
+ if (!a.wasTouchScroll) {
+ let { initialHit: o, finalHit: s } = this.hitDragging;
+ if (o && s && Ax(o, s)) {
+ let { context: l } = i, u = Object.assign(Object.assign({}, kU(o.dateSpan, l)), { dayEl: o.dayEl, jsEvent: n.origEvent, view: l.viewApi || l.calendarApi.view });
+ l.emitter.trigger("dateClick", u);
+ }
+ }
+ }, this.dragging = new xm(e.el), this.dragging.autoScroller.isEnabled = !1;
+ let t = this.hitDragging = new Ix(this.dragging, mM(e));
+ t.emitter.on("pointerdown", this.handlePointerDown), t.emitter.on("dragend", this.handleDragEnd);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+}
+class BCe extends dv {
+ constructor(e) {
+ super(e), this.dragSelection = null, this.handlePointerDown = (o) => {
+ let { component: s, dragging: l } = this, { options: u } = s.context, c = u.selectable && s.isValidDateDownEl(o.origEvent.target);
+ l.setIgnoreMove(!c), l.delay = o.isTouch ? jCe(s) : null;
+ }, this.handleDragStart = (o) => {
+ this.component.context.calendarApi.unselect(o);
+ }, this.handleHitUpdate = (o, s) => {
+ let { context: l } = this.component, u = null, c = !1;
+ if (o) {
+ let h = this.hitDragging.initialHit;
+ o.componentId === h.componentId && this.isHitComboAllowed && !this.isHitComboAllowed(h, o) || (u = FCe(h, o, l.pluginHooks.dateSelectionTransformers)), (!u || !wxe(u, o.dateProfile, l)) && (c = !0, u = null);
+ }
+ u ? l.dispatch({ type: "SELECT_DATES", selection: u }) : s || l.dispatch({ type: "UNSELECT_DATES" }), c ? JE() : KE(), s || (this.dragSelection = u);
+ }, this.handlePointerUp = (o) => {
+ this.dragSelection && (AG(this.dragSelection, o, this.component.context), this.dragSelection = null);
+ };
+ let { component: t } = e, { options: n } = t.context, i = this.dragging = new xm(e.el);
+ i.touchScrollAllowed = !1, i.minDistance = n.selectMinDistance || 0, i.autoScroller.isEnabled = n.dragScroll;
+ let a = this.hitDragging = new Ix(this.dragging, mM(e));
+ a.emitter.on("pointerdown", this.handlePointerDown), a.emitter.on("dragstart", this.handleDragStart), a.emitter.on("hitupdate", this.handleHitUpdate), a.emitter.on("pointerup", this.handlePointerUp);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+}
+function jCe(r) {
+ let { options: e } = r.context, t = e.selectLongPressDelay;
+ return t == null && (t = e.longPressDelay), t;
+}
+function FCe(r, e, t) {
+ let n = r.dateSpan, i = e.dateSpan, a = [
+ n.range.start,
+ n.range.end,
+ i.range.start,
+ i.range.end
+ ];
+ a.sort(t_e);
+ let o = {};
+ for (let s of t) {
+ let l = s(r, e);
+ if (l === !1)
+ return null;
+ l && Object.assign(o, l);
+ }
+ return o.range = { start: a[0], end: a[3] }, o.allDay = n.allDay, o;
+}
+class Sm extends dv {
+ constructor(e) {
+ super(e), this.subjectEl = null, this.subjectSeg = null, this.isDragging = !1, this.eventRange = null, this.relevantEvents = null, this.receivingContext = null, this.validMutation = null, this.mutatedRelevantEvents = null, this.handlePointerDown = (o) => {
+ let s = o.origEvent.target, { component: l, dragging: u } = this, { mirror: c } = u, { options: h } = l.context, f = l.context;
+ this.subjectEl = o.subjectEl;
+ let v = this.subjectSeg = Wd(o.subjectEl), w = (this.eventRange = v.eventRange).instance.instanceId;
+ this.relevantEvents = iM(f.getCurrentData().eventStore, w), u.minDistance = o.isTouch ? 0 : h.eventDragMinDistance, u.delay = // only do a touch delay if touch and this event hasn't been selected yet
+ o.isTouch && w !== l.props.eventSelection ? HCe(l) : null, h.fixedMirrorParent ? c.parentNode = h.fixedMirrorParent : c.parentNode = da(s, ".fc"), c.revertDuration = h.dragRevertDuration;
+ let p = l.isValidSegDownEl(s) && !da(s, ".fc-event-resizer");
+ u.setIgnoreMove(!p), this.isDragging = p && o.subjectEl.classList.contains("fc-event-draggable");
+ }, this.handleDragStart = (o) => {
+ let s = this.component.context, l = this.eventRange, u = l.instance.instanceId;
+ o.isTouch ? u !== this.component.props.eventSelection && s.dispatch({ type: "SELECT_EVENT", eventInstanceId: u }) : s.dispatch({ type: "UNSELECT_EVENT" }), this.isDragging && (s.calendarApi.unselect(o), s.emitter.trigger("eventDragStart", {
+ el: this.subjectEl,
+ event: new Gn(s, l.def, l.instance),
+ jsEvent: o.origEvent,
+ view: s.viewApi
+ }));
+ }, this.handleHitUpdate = (o, s) => {
+ if (!this.isDragging)
+ return;
+ let l = this.relevantEvents, u = this.hitDragging.initialHit, c = this.component.context, h = null, f = null, v = null, b = !1, w = {
+ affectedEvents: l,
+ mutatedEvents: xo(),
+ isEvent: !0
+ };
+ if (o) {
+ h = o.context;
+ let p = h.options;
+ c === h || p.editable && p.droppable ? (f = $Ce(u, o, h.getCurrentData().pluginHooks.eventDragMutationMassagers), f && (v = dM(l, h.getCurrentData().eventUiBases, f, h), w.mutatedEvents = v, WG(w, o.dateProfile, h) || (b = !0, f = null, v = null, w.mutatedEvents = xo()))) : h = null;
+ }
+ this.displayDrag(h, w), b ? JE() : KE(), s || (c === h && // TODO: write test for this
+ Ax(u, o) && (f = null), this.dragging.setMirrorNeedsRevert(!f), this.dragging.setMirrorIsVisible(!o || !this.subjectEl.getRootNode().querySelector(".fc-event-mirror")), this.receivingContext = h, this.validMutation = f, this.mutatedRelevantEvents = v);
+ }, this.handlePointerUp = () => {
+ this.isDragging || this.cleanup();
+ }, this.handleDragEnd = (o) => {
+ if (this.isDragging) {
+ let s = this.component.context, l = s.viewApi, { receivingContext: u, validMutation: c } = this, h = this.eventRange.def, f = this.eventRange.instance, v = new Gn(s, h, f), b = this.relevantEvents, w = this.mutatedRelevantEvents, { finalHit: p } = this.hitDragging;
+ if (this.clearDrag(), s.emitter.trigger("eventDragStop", {
+ el: this.subjectEl,
+ event: v,
+ jsEvent: o.origEvent,
+ view: l
+ }), c) {
+ if (u === s) {
+ let d = new Gn(s, w.defs[h.defId], f ? w.instances[f.instanceId] : null);
+ s.dispatch({
+ type: "MERGE_EVENTS",
+ eventStore: w
+ });
+ let m = {
+ oldEvent: v,
+ event: d,
+ relatedEvents: $h(w, s, f),
+ revert() {
+ s.dispatch({
+ type: "MERGE_EVENTS",
+ eventStore: b
+ // the pre-change data
+ });
+ }
+ }, _ = {};
+ for (let y of s.getCurrentData().pluginHooks.eventDropTransformers)
+ Object.assign(_, y(c, s));
+ s.emitter.trigger("eventDrop", Object.assign(Object.assign(Object.assign({}, m), _), { el: o.subjectEl, delta: c.datesDelta, jsEvent: o.origEvent, view: l })), s.emitter.trigger("eventChange", m);
+ } else if (u) {
+ let d = {
+ event: v,
+ relatedEvents: $h(b, s, f),
+ revert() {
+ s.dispatch({
+ type: "MERGE_EVENTS",
+ eventStore: b
+ });
+ }
+ };
+ s.emitter.trigger("eventLeave", Object.assign(Object.assign({}, d), { draggedEl: o.subjectEl, view: l })), s.dispatch({
+ type: "REMOVE_EVENTS",
+ eventStore: b
+ }), s.emitter.trigger("eventRemove", d);
+ let m = w.defs[h.defId], _ = w.instances[f.instanceId], y = new Gn(u, m, _);
+ u.dispatch({
+ type: "MERGE_EVENTS",
+ eventStore: w
+ });
+ let x = {
+ event: y,
+ relatedEvents: $h(w, u, _),
+ revert() {
+ u.dispatch({
+ type: "REMOVE_EVENTS",
+ eventStore: w
+ });
+ }
+ };
+ u.emitter.trigger("eventAdd", x), o.isTouch && u.dispatch({
+ type: "SELECT_EVENT",
+ eventInstanceId: f.instanceId
+ }), u.emitter.trigger("drop", Object.assign(Object.assign({}, kU(p.dateSpan, u)), { draggedEl: o.subjectEl, jsEvent: o.origEvent, view: p.context.viewApi })), u.emitter.trigger("eventReceive", Object.assign(Object.assign({}, x), { draggedEl: o.subjectEl, view: p.context.viewApi }));
+ }
+ } else
+ s.emitter.trigger("_noEventDrop");
+ }
+ this.cleanup();
+ };
+ let { component: t } = this, { options: n } = t.context, i = this.dragging = new xm(e.el);
+ i.pointer.selector = Sm.SELECTOR, i.touchScrollAllowed = !1, i.autoScroller.isEnabled = n.dragScroll;
+ let a = this.hitDragging = new Ix(this.dragging, iI);
+ a.useSubjectCenter = e.useEventCenter, a.emitter.on("pointerdown", this.handlePointerDown), a.emitter.on("dragstart", this.handleDragStart), a.emitter.on("hitupdate", this.handleHitUpdate), a.emitter.on("pointerup", this.handlePointerUp), a.emitter.on("dragend", this.handleDragEnd);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ // render a drag state on the next receivingCalendar
+ displayDrag(e, t) {
+ let n = this.component.context, i = this.receivingContext;
+ i && i !== e && (i === n ? i.dispatch({
+ type: "SET_EVENT_DRAG",
+ state: {
+ affectedEvents: t.affectedEvents,
+ mutatedEvents: xo(),
+ isEvent: !0
+ }
+ }) : i.dispatch({ type: "UNSET_EVENT_DRAG" })), e && e.dispatch({ type: "SET_EVENT_DRAG", state: t });
+ }
+ clearDrag() {
+ let e = this.component.context, { receivingContext: t } = this;
+ t && t.dispatch({ type: "UNSET_EVENT_DRAG" }), e !== t && e.dispatch({ type: "UNSET_EVENT_DRAG" });
+ }
+ cleanup() {
+ this.subjectSeg = null, this.isDragging = !1, this.eventRange = null, this.relevantEvents = null, this.receivingContext = null, this.validMutation = null, this.mutatedRelevantEvents = null;
+ }
+}
+Sm.SELECTOR = ".fc-event-draggable, .fc-event-resizable";
+function $Ce(r, e, t) {
+ let n = r.dateSpan, i = e.dateSpan, a = n.range.start, o = i.range.start, s = {};
+ n.allDay !== i.allDay && (s.allDay = i.allDay, s.hasEnd = e.context.options.allDayMaintainDuration, i.allDay && (a = kn(a)));
+ let l = pd(a, o, r.context.dateEnv, r.componentId === e.componentId ? r.largeUnit : null);
+ l.milliseconds && (s.allDay = !1);
+ let u = {
+ datesDelta: l,
+ standardProps: s
+ };
+ for (let c of t)
+ c(u, r, e);
+ return u;
+}
+function HCe(r) {
+ let { options: e } = r.context, t = e.eventLongPressDelay;
+ return t == null && (t = e.longPressDelay), t;
+}
+class VCe extends dv {
+ constructor(e) {
+ super(e), this.draggingSegEl = null, this.draggingSeg = null, this.eventRange = null, this.relevantEvents = null, this.validMutation = null, this.mutatedRelevantEvents = null, this.handlePointerDown = (a) => {
+ let { component: o } = this, s = this.querySegEl(a), l = Wd(s), u = this.eventRange = l.eventRange;
+ this.dragging.minDistance = o.context.options.eventDragMinDistance, this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(a.origEvent.target) || a.isTouch && this.component.props.eventSelection !== u.instance.instanceId);
+ }, this.handleDragStart = (a) => {
+ let { context: o } = this.component, s = this.eventRange;
+ this.relevantEvents = iM(o.getCurrentData().eventStore, this.eventRange.instance.instanceId);
+ let l = this.querySegEl(a);
+ this.draggingSegEl = l, this.draggingSeg = Wd(l), o.calendarApi.unselect(), o.emitter.trigger("eventResizeStart", {
+ el: l,
+ event: new Gn(o, s.def, s.instance),
+ jsEvent: a.origEvent,
+ view: o.viewApi
+ });
+ }, this.handleHitUpdate = (a, o, s) => {
+ let { context: l } = this.component, u = this.relevantEvents, c = this.hitDragging.initialHit, h = this.eventRange.instance, f = null, v = null, b = !1, w = {
+ affectedEvents: u,
+ mutatedEvents: xo(),
+ isEvent: !0
+ };
+ a && (a.componentId === c.componentId && this.isHitComboAllowed && !this.isHitComboAllowed(c, a) || (f = GCe(c, a, s.subjectEl.classList.contains("fc-event-resizer-start"), h.range))), f && (v = dM(u, l.getCurrentData().eventUiBases, f, l), w.mutatedEvents = v, WG(w, a.dateProfile, l) || (b = !0, f = null, v = null, w.mutatedEvents = null)), v ? l.dispatch({
+ type: "SET_EVENT_RESIZE",
+ state: w
+ }) : l.dispatch({ type: "UNSET_EVENT_RESIZE" }), b ? JE() : KE(), o || (f && Ax(c, a) && (f = null), this.validMutation = f, this.mutatedRelevantEvents = v);
+ }, this.handleDragEnd = (a) => {
+ let { context: o } = this.component, s = this.eventRange.def, l = this.eventRange.instance, u = new Gn(o, s, l), c = this.relevantEvents, h = this.mutatedRelevantEvents;
+ if (o.emitter.trigger("eventResizeStop", {
+ el: this.draggingSegEl,
+ event: u,
+ jsEvent: a.origEvent,
+ view: o.viewApi
+ }), this.validMutation) {
+ let f = new Gn(o, h.defs[s.defId], l ? h.instances[l.instanceId] : null);
+ o.dispatch({
+ type: "MERGE_EVENTS",
+ eventStore: h
+ });
+ let v = {
+ oldEvent: u,
+ event: f,
+ relatedEvents: $h(h, o, l),
+ revert() {
+ o.dispatch({
+ type: "MERGE_EVENTS",
+ eventStore: c
+ // the pre-change events
+ });
+ }
+ };
+ o.emitter.trigger("eventResize", Object.assign(Object.assign({}, v), { el: this.draggingSegEl, startDelta: this.validMutation.startDelta || Xr(0), endDelta: this.validMutation.endDelta || Xr(0), jsEvent: a.origEvent, view: o.viewApi })), o.emitter.trigger("eventChange", v);
+ } else
+ o.emitter.trigger("_noEventResize");
+ this.draggingSeg = null, this.relevantEvents = null, this.validMutation = null;
+ };
+ let { component: t } = e, n = this.dragging = new xm(e.el);
+ n.pointer.selector = ".fc-event-resizer", n.touchScrollAllowed = !1, n.autoScroller.isEnabled = t.context.options.dragScroll;
+ let i = this.hitDragging = new Ix(this.dragging, mM(e));
+ i.emitter.on("pointerdown", this.handlePointerDown), i.emitter.on("dragstart", this.handleDragStart), i.emitter.on("hitupdate", this.handleHitUpdate), i.emitter.on("dragend", this.handleDragEnd);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ querySegEl(e) {
+ return da(e.subjectEl, ".fc-event");
+ }
+}
+function GCe(r, e, t, n) {
+ let i = r.context.dateEnv, a = r.dateSpan.range.start, o = e.dateSpan.range.start, s = pd(a, o, i, r.largeUnit);
+ if (t) {
+ if (i.add(n.start, s) < n.end)
+ return { startDelta: s };
+ } else if (i.add(n.end, s) > n.start)
+ return { endDelta: s };
+ return null;
+}
+class UCe {
+ constructor(e) {
+ this.context = e, this.isRecentPointerDateSelect = !1, this.matchesCancel = !1, this.matchesEvent = !1, this.onSelect = (n) => {
+ n.jsEvent && (this.isRecentPointerDateSelect = !0);
+ }, this.onDocumentPointerDown = (n) => {
+ let i = this.context.options.unselectCancel, a = uG(n.origEvent);
+ this.matchesCancel = !!da(a, i), this.matchesEvent = !!da(a, Sm.SELECTOR);
+ }, this.onDocumentPointerUp = (n) => {
+ let { context: i } = this, { documentPointer: a } = this, o = i.getCurrentData();
+ if (!a.wasTouchScroll) {
+ if (o.dateSelection && // an existing date selection?
+ !this.isRecentPointerDateSelect) {
+ let s = i.options.unselectAuto;
+ s && (!s || !this.matchesCancel) && i.calendarApi.unselect(n);
+ }
+ o.eventSelection && // an existing event selected?
+ !this.matchesEvent && i.dispatch({ type: "UNSELECT_EVENT" });
+ }
+ this.isRecentPointerDateSelect = !1;
+ };
+ let t = this.documentPointer = new AU(document);
+ t.shouldIgnoreMove = !0, t.shouldWatchScroll = !1, t.emitter.on("pointerdown", this.onDocumentPointerDown), t.emitter.on("pointerup", this.onDocumentPointerUp), e.emitter.on("select", this.onSelect);
+ }
+ destroy() {
+ this.context.emitter.off("select", this.onSelect), this.documentPointer.destroy();
+ }
+}
+const WCe = {
+ fixedMirrorParent: $e
+}, YCe = {
+ dateClick: $e,
+ eventDragStart: $e,
+ eventDragStop: $e,
+ eventDrop: $e,
+ eventResizeStart: $e,
+ eventResizeStop: $e,
+ eventResize: $e,
+ drop: $e,
+ eventReceive: $e,
+ eventLeave: $e
+};
+yM.dataAttrPrefix = "";
+var XCe = Gs({
+ name: "@fullcalendar/interaction",
+ componentInteractions: [zCe, BCe, Sm, VCe],
+ calendarInteractions: [UCe],
+ elementDraggingImpl: xm,
+ optionRefiners: WCe,
+ listenerRefiners: YCe
+}), ZCe = ':root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:"";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}';
+yx(ZCe);
+class JCe extends un {
+ constructor() {
+ super(...arguments), this.state = {
+ textId: cc()
+ };
+ }
+ render() {
+ let { theme: e, dateEnv: t, options: n, viewApi: i } = this.context, { cellId: a, dayDate: o, todayRange: s } = this.props, { textId: l } = this.state, u = uM(o, s), c = n.listDayFormat ? t.format(o, n.listDayFormat) : "", h = n.listDaySideFormat ? t.format(o, n.listDaySideFormat) : "", f = Object.assign({
+ date: t.toDate(o),
+ view: i,
+ textId: l,
+ text: c,
+ sideText: h,
+ navLinkAttrs: Gd(this.context, o),
+ sideNavLinkAttrs: Gd(this.context, o, "day", !1)
+ }, u);
+ return me(ma, { elTag: "tr", elClasses: [
+ "fc-list-day",
+ ...Sx(u, e)
+ ], elAttrs: {
+ "data-date": ym(o)
+ }, renderProps: f, generatorName: "dayHeaderContent", customGenerator: n.dayHeaderContent, defaultGenerator: KCe, classNameGenerator: n.dayHeaderClassNames, didMount: n.dayHeaderDidMount, willUnmount: n.dayHeaderWillUnmount }, (v) => (
+ // TODO: force-hide top border based on :first-child
+ me(
+ "th",
+ { scope: "colgroup", colSpan: 3, id: a, "aria-labelledby": l },
+ me(v, { elTag: "div", elClasses: [
+ "fc-list-day-cushion",
+ e.getClass("tableCellShaded")
+ ] })
+ )
+ ));
+ }
+}
+function KCe(r) {
+ return me(
+ Dn,
+ null,
+ r.text && me("a", Object.assign({ id: r.textId, className: "fc-list-day-text" }, r.navLinkAttrs), r.text),
+ r.sideText && /* not keyboard tabbable */
+ me("a", Object.assign({ "aria-hidden": !0, className: "fc-list-day-side-text" }, r.sideNavLinkAttrs), r.sideText)
+ );
+}
+const QCe = jn({
+ hour: "numeric",
+ minute: "2-digit",
+ meridiem: "short"
+});
+class qCe extends un {
+ render() {
+ let { props: e, context: t } = this, { options: n } = t, { seg: i, timeHeaderId: a, eventHeaderId: o, dateHeaderId: s } = e, l = n.eventTimeFormat || QCe;
+ return me(Tx, Object.assign({}, e, { elTag: "tr", elClasses: [
+ "fc-list-event",
+ i.eventRange.def.url && "fc-event-forced-url"
+ ], defaultGenerator: () => e1e(i, t), seg: i, timeText: "", disableDragging: !0, disableResizing: !0 }), (u, c) => me(
+ Dn,
+ null,
+ t1e(i, l, t, a, s),
+ me(
+ "td",
+ { "aria-hidden": !0, className: "fc-list-event-graphic" },
+ me("span", { className: "fc-list-event-dot", style: {
+ borderColor: c.borderColor || c.backgroundColor
+ } })
+ ),
+ me(u, { elTag: "td", elClasses: ["fc-list-event-title"], elAttrs: { headers: `${o} ${s}` } })
+ ));
+ }
+}
+function e1e(r, e) {
+ let t = pM(r, e);
+ return me("a", Object.assign({}, t), r.eventRange.def.title);
+}
+function t1e(r, e, t, n, i) {
+ let { options: a } = t;
+ if (a.displayEventTime !== !1) {
+ let o = r.eventRange.def, s = r.eventRange.instance, l = !1, u;
+ if (o.allDay ? l = !0 : nbe(r.eventRange.range) ? r.isStart ? u = rg(r, e, t, null, null, s.range.start, r.end) : r.isEnd ? u = rg(r, e, t, null, null, r.start, s.range.end) : l = !0 : u = rg(r, e, t), l) {
+ let c = {
+ text: t.options.allDayText,
+ view: t.viewApi
+ };
+ return me(ma, { elTag: "td", elClasses: ["fc-list-event-time"], elAttrs: {
+ headers: `${n} ${i}`
+ }, renderProps: c, generatorName: "allDayContent", customGenerator: a.allDayContent, defaultGenerator: r1e, classNameGenerator: a.allDayClassNames, didMount: a.allDayDidMount, willUnmount: a.allDayWillUnmount });
+ }
+ return me("td", { className: "fc-list-event-time" }, u);
+ }
+ return null;
+}
+function r1e(r) {
+ return r.text;
+}
+class n1e extends Vs {
+ constructor() {
+ super(...arguments), this.computeDateVars = rr(a1e), this.eventStoreToSegs = rr(this._eventStoreToSegs), this.state = {
+ timeHeaderId: cc(),
+ eventHeaderId: cc(),
+ dateHeaderIdRoot: cc()
+ }, this.setRootEl = (e) => {
+ e ? this.context.registerInteractiveComponent(this, {
+ el: e
+ }) : this.context.unregisterInteractiveComponent(this);
+ };
+ }
+ render() {
+ let { props: e, context: t } = this, { dayDates: n, dayRanges: i } = this.computeDateVars(e.dateProfile), a = this.eventStoreToSegs(e.eventStore, e.eventUiBases, i);
+ return me(
+ Hg,
+ { elRef: this.setRootEl, elClasses: [
+ "fc-list",
+ t.theme.getClass("table"),
+ t.options.stickyHeaderDates !== !1 ? "fc-list-sticky" : ""
+ ], viewSpec: t.viewSpec },
+ me(ZG, { liquid: !e.isHeightAuto, overflowX: e.isHeightAuto ? "visible" : "hidden", overflowY: e.isHeightAuto ? "visible" : "auto" }, a.length > 0 ? this.renderSegList(a, n) : this.renderEmptyMessage())
+ );
+ }
+ renderEmptyMessage() {
+ let { options: e, viewApi: t } = this.context, n = {
+ text: e.noEventsText,
+ view: t
+ };
+ return me(ma, { elTag: "div", elClasses: ["fc-list-empty"], renderProps: n, generatorName: "noEventsContent", customGenerator: e.noEventsContent, defaultGenerator: i1e, classNameGenerator: e.noEventsClassNames, didMount: e.noEventsDidMount, willUnmount: e.noEventsWillUnmount }, (i) => me(i, { elTag: "div", elClasses: ["fc-list-empty-cushion"] }));
+ }
+ renderSegList(e, t) {
+ let { theme: n, options: i } = this.context, { timeHeaderId: a, eventHeaderId: o, dateHeaderIdRoot: s } = this.state, l = o1e(e);
+ return me(vv, { unit: "day" }, (u, c) => {
+ let h = [];
+ for (let f = 0; f < l.length; f += 1) {
+ let v = l[f];
+ if (v) {
+ let b = ym(t[f]), w = s + "-" + b;
+ h.push(me(JCe, { key: b, cellId: w, dayDate: t[f], todayRange: c })), v = vM(v, i.eventOrder);
+ for (let p of v)
+ h.push(me(qCe, Object.assign({ key: b + ":" + p.eventRange.instance.instanceId, seg: p, isDragging: !1, isResizing: !1, isDateSelecting: !1, isSelected: !1, timeHeaderId: a, eventHeaderId: o, dateHeaderId: w }, ql(p, c, u))));
+ }
+ }
+ return me(
+ "table",
+ { className: "fc-list-table " + n.getClass("table") },
+ me(
+ "thead",
+ null,
+ me(
+ "tr",
+ null,
+ me("th", { scope: "col", id: a }, i.timeHint),
+ me("th", { scope: "col", "aria-hidden": !0 }),
+ me("th", { scope: "col", id: o }, i.eventHint)
+ )
+ ),
+ me("tbody", null, h)
+ );
+ });
+ }
+ _eventStoreToSegs(e, t, n) {
+ return this.eventRangesToSegs(tI(e, t, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, n);
+ }
+ eventRangesToSegs(e, t) {
+ let n = [];
+ for (let i of e)
+ n.push(...this.eventRangeToSegs(i, t));
+ return n;
+ }
+ eventRangeToSegs(e, t) {
+ let { dateEnv: n } = this.context, { nextDayThreshold: i } = this.context.options, a = e.range, o = e.def.allDay, s, l, u, c = [];
+ for (s = 0; s < t.length; s += 1)
+ if (l = xc(a, t[s]), l && (u = {
+ component: this,
+ eventRange: e,
+ start: l.start,
+ end: l.end,
+ isStart: e.isStart && l.start.valueOf() === a.start.valueOf(),
+ isEnd: e.isEnd && l.end.valueOf() === a.end.valueOf(),
+ dayIndex: s
+ }, c.push(u), !u.isEnd && !o && s + 1 < t.length && a.end < n.add(t[s + 1].start, i))) {
+ u.end = a.end, u.isEnd = !0;
+ break;
+ }
+ return c;
+ }
+}
+function i1e(r) {
+ return r.text;
+}
+function a1e(r) {
+ let e = kn(r.renderRange.start), t = r.renderRange.end, n = [], i = [];
+ for (; e < t; )
+ n.push(e), i.push({
+ start: e,
+ end: Bi(e, 1)
+ }), e = Bi(e, 1);
+ return { dayDates: n, dayRanges: i };
+}
+function o1e(r) {
+ let e = [], t, n;
+ for (t = 0; t < r.length; t += 1)
+ n = r[t], (e[n.dayIndex] || (e[n.dayIndex] = [])).push(n);
+ return e;
+}
+const s1e = {
+ listDayFormat: Xz,
+ listDaySideFormat: Xz,
+ noEventsClassNames: $e,
+ noEventsContent: $e,
+ noEventsDidMount: $e,
+ noEventsWillUnmount: $e
+ // noEventsText is defined in base options
+};
+function Xz(r) {
+ return r === !1 ? null : jn(r);
+}
+var l1e = Gs({
+ name: "@fullcalendar/list",
+ optionRefiners: s1e,
+ views: {
+ list: {
+ component: n1e,
+ buttonTextKey: "list",
+ listDayFormat: { month: "long", day: "numeric", year: "numeric" }
+ // like "January 1, 2016"
+ },
+ listDay: {
+ type: "list",
+ duration: { days: 1 },
+ listDayFormat: { weekday: "long" }
+ // day-of-week is all we need. full date is probably in headerToolbar
+ },
+ listWeek: {
+ type: "list",
+ duration: { weeks: 1 },
+ listDayFormat: { weekday: "long" },
+ listDaySideFormat: { month: "long", day: "numeric", year: "numeric" }
+ },
+ listMonth: {
+ type: "list",
+ duration: { month: 1 },
+ listDaySideFormat: { weekday: "long" }
+ // day-of-week is nice-to-have
+ },
+ listYear: {
+ type: "list",
+ duration: { year: 1 },
+ listDaySideFormat: { weekday: "long" }
+ // day-of-week is nice-to-have
+ }
+ }
+}), u1e = {
+ code: "af",
+ week: {
+ dow: 1,
+ doy: 4
+ // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+ },
+ buttonText: {
+ prev: "Vorige",
+ next: "Volgende",
+ today: "Vandag",
+ year: "Jaar",
+ month: "Maand",
+ week: "Week",
+ day: "Dag",
+ list: "Agenda"
+ },
+ allDayText: "Heeldag",
+ moreLinkText: "Addisionele",
+ noEventsText: "Daar is geen gebeurtenisse nie"
+}, c1e = {
+ code: "ar-dz",
+ week: {
+ dow: 0,
+ doy: 4
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: "rtl",
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ year: "سنة",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekText: "أسبوع",
+ allDayText: "اليوم كله",
+ moreLinkText: "أخرى",
+ noEventsText: "أي أحداث لعرض"
+}, h1e = {
+ code: "ar-kw",
+ week: {
+ dow: 0,
+ doy: 12
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: "rtl",
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ year: "سنة",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekText: "أسبوع",
+ allDayText: "اليوم كله",
+ moreLinkText: "أخرى",
+ noEventsText: "أي أحداث لعرض"
+}, f1e = {
+ code: "ar-ly",
+ week: {
+ dow: 6,
+ doy: 12
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: "rtl",
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ year: "سنة",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekText: "أسبوع",
+ allDayText: "اليوم كله",
+ moreLinkText: "أخرى",
+ noEventsText: "أي أحداث لعرض"
+}, d1e = {
+ code: "ar-ma",
+ week: {
+ dow: 6,
+ doy: 12
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: "rtl",
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ year: "سنة",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekText: "أسبوع",
+ allDayText: "اليوم كله",
+ moreLinkText: "أخرى",
+ noEventsText: "أي أحداث لعرض"
+}, v1e = {
+ code: "ar-sa",
+ week: {
+ dow: 0,
+ doy: 6
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: "rtl",
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ year: "سنة",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekText: "أسبوع",
+ allDayText: "اليوم كله",
+ moreLinkText: "أخرى",
+ noEventsText: "أي أحداث لعرض"
+}, p1e = {
+ code: "ar-tn",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ direction: "rtl",
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ year: "سنة",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekText: "أسبوع",
+ allDayText: "اليوم كله",
+ moreLinkText: "أخرى",
+ noEventsText: "أي أحداث لعرض"
+}, g1e = {
+ code: "ar",
+ week: {
+ dow: 6,
+ doy: 12
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: "rtl",
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ year: "سنة",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekText: "أسبوع",
+ allDayText: "اليوم كله",
+ moreLinkText: "أخرى",
+ noEventsText: "أي أحداث لعرض"
+}, m1e = {
+ code: "az",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Əvvəl",
+ next: "Sonra",
+ today: "Bu Gün",
+ year: "Il",
+ month: "Ay",
+ week: "Həftə",
+ day: "Gün",
+ list: "Gündəm"
+ },
+ weekText: "Həftə",
+ allDayText: "Bütün Gün",
+ moreLinkText(r) {
+ return "+ daha çox " + r;
+ },
+ noEventsText: "Göstərmək üçün hadisə yoxdur"
+}, y1e = {
+ code: "bg",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "назад",
+ next: "напред",
+ today: "днес",
+ year: "година",
+ month: "Месец",
+ week: "Седмица",
+ day: "Ден",
+ list: "График"
+ },
+ allDayText: "Цял ден",
+ moreLinkText(r) {
+ return "+още " + r;
+ },
+ noEventsText: "Няма събития за показване"
+}, _1e = {
+ code: "bn",
+ week: {
+ dow: 0,
+ doy: 6
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "পেছনে",
+ next: "সামনে",
+ today: "আজ",
+ year: "বছর",
+ month: "মাস",
+ week: "সপ্তাহ",
+ day: "দিন",
+ list: "তালিকা"
+ },
+ weekText: "সপ্তাহ",
+ allDayText: "সারাদিন",
+ moreLinkText(r) {
+ return "+অন্যান্য " + r;
+ },
+ noEventsText: "কোনো ইভেন্ট নেই"
+}, b1e = {
+ code: "bs",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prošli",
+ next: "Sljedeći",
+ today: "Danas",
+ year: "Godina",
+ month: "Mjesec",
+ week: "Sedmica",
+ day: "Dan",
+ list: "Raspored"
+ },
+ weekText: "Sed",
+ allDayText: "Cijeli dan",
+ moreLinkText(r) {
+ return "+ još " + r;
+ },
+ noEventsText: "Nema događaja za prikazivanje"
+}, x1e = {
+ code: "ca",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Anterior",
+ next: "Següent",
+ today: "Avui",
+ year: "Curs",
+ month: "Mes",
+ week: "Setmana",
+ day: "Dia",
+ list: "Agenda"
+ },
+ weekText: "Set",
+ allDayText: "Tot el dia",
+ moreLinkText: "més",
+ noEventsText: "No hi ha esdeveniments per mostrar"
+}, S1e = {
+ code: "cs",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Dříve",
+ next: "Později",
+ today: "Nyní",
+ year: "Rok",
+ month: "Měsíc",
+ week: "Týden",
+ day: "Den",
+ list: "Agenda"
+ },
+ weekText: "Týd",
+ allDayText: "Celý den",
+ moreLinkText(r) {
+ return "+další: " + r;
+ },
+ noEventsText: "Žádné akce k zobrazení"
+}, w1e = {
+ code: "cy",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Blaenorol",
+ next: "Nesaf",
+ today: "Heddiw",
+ year: "Blwyddyn",
+ month: "Mis",
+ week: "Wythnos",
+ day: "Dydd",
+ list: "Rhestr"
+ },
+ weekText: "Wythnos",
+ allDayText: "Trwy'r dydd",
+ moreLinkText: "Mwy",
+ noEventsText: "Dim digwyddiadau"
+}, C1e = {
+ code: "da",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Forrige",
+ next: "Næste",
+ today: "I dag",
+ year: "År",
+ month: "Måned",
+ week: "Uge",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekText: "Uge",
+ allDayText: "Hele dagen",
+ moreLinkText: "flere",
+ noEventsText: "Ingen arrangementer at vise"
+};
+function VC(r) {
+ return r === "Tag" || r === "Monat" ? "r" : r === "Jahr" ? "s" : "";
+}
+var T1e = {
+ code: "de-at",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Zurück",
+ next: "Vor",
+ today: "Heute",
+ year: "Jahr",
+ month: "Monat",
+ week: "Woche",
+ day: "Tag",
+ list: "Terminübersicht"
+ },
+ weekText: "KW",
+ weekTextLong: "Woche",
+ allDayText: "Ganztägig",
+ moreLinkText(r) {
+ return "+ weitere " + r;
+ },
+ noEventsText: "Keine Ereignisse anzuzeigen",
+ buttonHints: {
+ prev(r) {
+ return `Vorherige${VC(r)} ${r}`;
+ },
+ next(r) {
+ return `Nächste${VC(r)} ${r}`;
+ },
+ today(r) {
+ return r === "Tag" ? "Heute" : `Diese${VC(r)} ${r}`;
+ }
+ },
+ viewHint(r) {
+ return r + (r === "Woche" ? "n" : r === "Monat" ? "s" : "es") + "ansicht";
+ },
+ navLinkHint: "Gehe zu $0",
+ moreLinkHint(r) {
+ return "Zeige " + (r === 1 ? "ein weiteres Ereignis" : r + " weitere Ereignisse");
+ },
+ closeHint: "Schließen",
+ timeHint: "Uhrzeit",
+ eventHint: "Ereignis"
+};
+function GC(r) {
+ return r === "Tag" || r === "Monat" ? "r" : r === "Jahr" ? "s" : "";
+}
+var I1e = {
+ code: "de",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Zurück",
+ next: "Vor",
+ today: "Heute",
+ year: "Jahr",
+ month: "Monat",
+ week: "Woche",
+ day: "Tag",
+ list: "Terminübersicht"
+ },
+ weekText: "KW",
+ weekTextLong: "Woche",
+ allDayText: "Ganztägig",
+ moreLinkText(r) {
+ return "+ weitere " + r;
+ },
+ noEventsText: "Keine Ereignisse anzuzeigen",
+ buttonHints: {
+ prev(r) {
+ return `Vorherige${GC(r)} ${r}`;
+ },
+ next(r) {
+ return `Nächste${GC(r)} ${r}`;
+ },
+ today(r) {
+ return r === "Tag" ? "Heute" : `Diese${GC(r)} ${r}`;
+ }
+ },
+ viewHint(r) {
+ return r + (r === "Woche" ? "n" : r === "Monat" ? "s" : "es") + "ansicht";
+ },
+ navLinkHint: "Gehe zu $0",
+ moreLinkHint(r) {
+ return "Zeige " + (r === 1 ? "ein weiteres Ereignis" : r + " weitere Ereignisse");
+ },
+ closeHint: "Schließen",
+ timeHint: "Uhrzeit",
+ eventHint: "Ereignis"
+}, A1e = {
+ code: "el",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Προηγούμενος",
+ next: "Επόμενος",
+ today: "Σήμερα",
+ year: "Ετος",
+ month: "Μήνας",
+ week: "Εβδομάδα",
+ day: "Ημέρα",
+ list: "Ατζέντα"
+ },
+ weekText: "Εβδ",
+ allDayText: "Ολοήμερο",
+ moreLinkText: "περισσότερα",
+ noEventsText: "Δεν υπάρχουν γεγονότα προς εμφάνιση"
+}, E1e = {
+ code: "en-au",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonHints: {
+ prev: "Previous $0",
+ next: "Next $0",
+ today: "This $0"
+ },
+ viewHint: "$0 view",
+ navLinkHint: "Go to $0",
+ moreLinkHint(r) {
+ return `Show ${r} more event${r === 1 ? "" : "s"}`;
+ }
+}, M1e = {
+ code: "en-gb",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonHints: {
+ prev: "Previous $0",
+ next: "Next $0",
+ today: "This $0"
+ },
+ viewHint: "$0 view",
+ navLinkHint: "Go to $0",
+ moreLinkHint(r) {
+ return `Show ${r} more event${r === 1 ? "" : "s"}`;
+ }
+}, D1e = {
+ code: "en-nz",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonHints: {
+ prev: "Previous $0",
+ next: "Next $0",
+ today: "This $0"
+ },
+ viewHint: "$0 view",
+ navLinkHint: "Go to $0",
+ moreLinkHint(r) {
+ return `Show ${r} more event${r === 1 ? "" : "s"}`;
+ }
+}, k1e = {
+ code: "eo",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Antaŭa",
+ next: "Sekva",
+ today: "Hodiaŭ",
+ year: "Jaro",
+ month: "Monato",
+ week: "Semajno",
+ day: "Tago",
+ list: "Tagordo"
+ },
+ weekText: "Sm",
+ allDayText: "Tuta tago",
+ moreLinkText: "pli",
+ noEventsText: "Neniuj eventoj por montri"
+}, O1e = {
+ code: "es",
+ week: {
+ dow: 0,
+ doy: 6
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Ant",
+ next: "Sig",
+ today: "Hoy",
+ year: "Año",
+ month: "Mes",
+ week: "Semana",
+ day: "Día",
+ list: "Agenda"
+ },
+ weekText: "Sm",
+ allDayText: "Todo el día",
+ moreLinkText: "más",
+ noEventsText: "No hay eventos para mostrar"
+}, L1e = {
+ code: "es",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Ant",
+ next: "Sig",
+ today: "Hoy",
+ year: "Año",
+ month: "Mes",
+ week: "Semana",
+ day: "Día",
+ list: "Agenda"
+ },
+ buttonHints: {
+ prev: "$0 antes",
+ next: "$0 siguiente",
+ today(r) {
+ return r === "Día" ? "Hoy" : (r === "Semana" ? "Esta" : "Este") + " " + r.toLocaleLowerCase();
+ }
+ },
+ viewHint(r) {
+ return "Vista " + (r === "Semana" ? "de la" : "del") + " " + r.toLocaleLowerCase();
+ },
+ weekText: "Sm",
+ weekTextLong: "Semana",
+ allDayText: "Todo el día",
+ moreLinkText: "más",
+ moreLinkHint(r) {
+ return `Mostrar ${r} eventos más`;
+ },
+ noEventsText: "No hay eventos para mostrar",
+ navLinkHint: "Ir al $0",
+ closeHint: "Cerrar",
+ timeHint: "La hora",
+ eventHint: "Evento"
+}, P1e = {
+ code: "et",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Eelnev",
+ next: "Järgnev",
+ today: "Täna",
+ year: "Aasta",
+ month: "Kuu",
+ week: "Nädal",
+ day: "Päev",
+ list: "Päevakord"
+ },
+ weekText: "näd",
+ allDayText: "Kogu päev",
+ moreLinkText(r) {
+ return "+ veel " + r;
+ },
+ noEventsText: "Kuvamiseks puuduvad sündmused"
+}, R1e = {
+ code: "eu",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Aur",
+ next: "Hur",
+ today: "Gaur",
+ year: "Urtea",
+ month: "Hilabetea",
+ week: "Astea",
+ day: "Eguna",
+ list: "Agenda"
+ },
+ weekText: "As",
+ allDayText: "Egun osoa",
+ moreLinkText: "gehiago",
+ noEventsText: "Ez dago ekitaldirik erakusteko"
+}, N1e = {
+ code: "fa",
+ week: {
+ dow: 6,
+ doy: 12
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: "rtl",
+ buttonText: {
+ prev: "قبلی",
+ next: "بعدی",
+ today: "امروز",
+ year: "سال",
+ month: "ماه",
+ week: "هفته",
+ day: "روز",
+ list: "برنامه"
+ },
+ weekText: "هف",
+ allDayText: "تمام روز",
+ moreLinkText(r) {
+ return "بیش از " + r;
+ },
+ noEventsText: "هیچ رویدادی به نمایش"
+}, z1e = {
+ code: "fi",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Edellinen",
+ next: "Seuraava",
+ today: "Tänään",
+ year: "Vuosi",
+ month: "Kuukausi",
+ week: "Viikko",
+ day: "Päivä",
+ list: "Tapahtumat"
+ },
+ weekText: "Vk",
+ allDayText: "Koko päivä",
+ moreLinkText: "lisää",
+ noEventsText: "Ei näytettäviä tapahtumia"
+}, B1e = {
+ code: "fr",
+ buttonText: {
+ prev: "Précédent",
+ next: "Suivant",
+ today: "Aujourd'hui",
+ year: "Année",
+ month: "Mois",
+ week: "Semaine",
+ day: "Jour",
+ list: "Mon planning"
+ },
+ weekText: "Sem.",
+ allDayText: "Toute la journée",
+ moreLinkText: "en plus",
+ noEventsText: "Aucun évènement à afficher"
+}, j1e = {
+ code: "fr-ch",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Précédent",
+ next: "Suivant",
+ today: "Courant",
+ year: "Année",
+ month: "Mois",
+ week: "Semaine",
+ day: "Jour",
+ list: "Mon planning"
+ },
+ weekText: "Sm",
+ allDayText: "Toute la journée",
+ moreLinkText: "en plus",
+ noEventsText: "Aucun évènement à afficher"
+}, F1e = {
+ code: "fr",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Précédent",
+ next: "Suivant",
+ today: "Aujourd'hui",
+ year: "Année",
+ month: "Mois",
+ week: "Semaine",
+ day: "Jour",
+ list: "Planning"
+ },
+ weekText: "Sem.",
+ weekTextLong: "Semaine",
+ allDayText: "Toute la journée",
+ moreLinkText: "en plus",
+ noEventsText: "Aucun évènement à afficher"
+}, $1e = {
+ code: "gl",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Ant",
+ next: "Seg",
+ today: "Hoxe",
+ year: "Ano",
+ month: "Mes",
+ week: "Semana",
+ day: "Día",
+ list: "Axenda"
+ },
+ buttonHints: {
+ prev: "$0 antes",
+ next: "$0 seguinte",
+ today(r) {
+ return r === "Día" ? "Hoxe" : (r === "Semana" ? "Esta" : "Este") + " " + r.toLocaleLowerCase();
+ }
+ },
+ viewHint(r) {
+ return "Vista " + (r === "Semana" ? "da" : "do") + " " + r.toLocaleLowerCase();
+ },
+ weekText: "Sm",
+ weekTextLong: "Semana",
+ allDayText: "Todo o día",
+ moreLinkText: "máis",
+ moreLinkHint(r) {
+ return `Amosar ${r} eventos máis`;
+ },
+ noEventsText: "Non hai eventos para amosar",
+ navLinkHint: "Ir ao $0",
+ closeHint: "Pechar",
+ timeHint: "A hora",
+ eventHint: "Evento"
+}, H1e = {
+ code: "he",
+ direction: "rtl",
+ buttonText: {
+ prev: "הקודם",
+ next: "הבא",
+ today: "היום",
+ year: "שנה",
+ month: "חודש",
+ week: "שבוע",
+ day: "יום",
+ list: "סדר יום"
+ },
+ allDayText: "כל היום",
+ moreLinkText: "נוספים",
+ noEventsText: "אין אירועים להצגה",
+ weekText: "שבוע"
+}, V1e = {
+ code: "hi",
+ week: {
+ dow: 0,
+ doy: 6
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "पिछला",
+ next: "अगला",
+ today: "आज",
+ year: "वर्ष",
+ month: "महीना",
+ week: "सप्ताह",
+ day: "दिन",
+ list: "कार्यसूची"
+ },
+ weekText: "हफ्ता",
+ allDayText: "सभी दिन",
+ moreLinkText(r) {
+ return "+अधिक " + r;
+ },
+ noEventsText: "कोई घटनाओं को प्रदर्शित करने के लिए"
+}, G1e = {
+ code: "hr",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prijašnji",
+ next: "Sljedeći",
+ today: "Danas",
+ year: "Godina",
+ month: "Mjesec",
+ week: "Tjedan",
+ day: "Dan",
+ list: "Raspored"
+ },
+ weekText: "Tje",
+ allDayText: "Cijeli dan",
+ moreLinkText(r) {
+ return "+ još " + r;
+ },
+ noEventsText: "Nema događaja za prikaz"
+}, U1e = {
+ code: "hu",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "vissza",
+ next: "előre",
+ today: "ma",
+ year: "Év",
+ month: "Hónap",
+ week: "Hét",
+ day: "Nap",
+ list: "Lista"
+ },
+ weekText: "Hét",
+ allDayText: "Egész nap",
+ moreLinkText: "további",
+ noEventsText: "Nincs megjeleníthető esemény"
+}, W1e = {
+ code: "hy-am",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Նախորդ",
+ next: "Հաջորդ",
+ today: "Այսօր",
+ year: "Տարի",
+ month: "Ամիս",
+ week: "Շաբաթ",
+ day: "Օր",
+ list: "Օրվա ցուցակ"
+ },
+ weekText: "Շաբ",
+ allDayText: "Ամբողջ օր",
+ moreLinkText(r) {
+ return "+ ևս " + r;
+ },
+ noEventsText: "Բացակայում է իրադարձությունը ցուցադրելու"
+}, Y1e = {
+ code: "id",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "mundur",
+ next: "maju",
+ today: "hari ini",
+ year: "Tahun",
+ month: "Bulan",
+ week: "Minggu",
+ day: "Hari",
+ list: "Agenda"
+ },
+ weekText: "Mg",
+ allDayText: "Sehari penuh",
+ moreLinkText: "lebih",
+ noEventsText: "Tidak ada acara untuk ditampilkan"
+}, X1e = {
+ code: "is",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Fyrri",
+ next: "Næsti",
+ today: "Í dag",
+ year: "Ár",
+ month: "Mánuður",
+ week: "Vika",
+ day: "Dagur",
+ list: "Dagskrá"
+ },
+ weekText: "Vika",
+ allDayText: "Allan daginn",
+ moreLinkText: "meira",
+ noEventsText: "Engir viðburðir til að sýna"
+}, Z1e = {
+ code: "it",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prec",
+ next: "Succ",
+ today: "Oggi",
+ year: "Anno",
+ month: "Mese",
+ week: "Settimana",
+ day: "Giorno",
+ list: "Agenda"
+ },
+ weekText: "Sm",
+ allDayText: "Tutto il giorno",
+ moreLinkText(r) {
+ return "+altri " + r;
+ },
+ noEventsText: "Non ci sono eventi da visualizzare"
+}, J1e = {
+ code: "ja",
+ buttonText: {
+ prev: "前",
+ next: "次",
+ today: "今日",
+ year: "年",
+ month: "月",
+ week: "週",
+ day: "日",
+ list: "予定リスト"
+ },
+ weekText: "週",
+ allDayText: "終日",
+ moreLinkText(r) {
+ return "他 " + r + " 件";
+ },
+ noEventsText: "表示する予定はありません"
+}, K1e = {
+ code: "ka",
+ week: {
+ dow: 1,
+ doy: 7
+ },
+ buttonText: {
+ prev: "წინა",
+ next: "შემდეგი",
+ today: "დღეს",
+ year: "წელიწადი",
+ month: "თვე",
+ week: "კვირა",
+ day: "დღე",
+ list: "დღის წესრიგი"
+ },
+ weekText: "კვ",
+ allDayText: "მთელი დღე",
+ moreLinkText(r) {
+ return "+ კიდევ " + r;
+ },
+ noEventsText: "ღონისძიებები არ არის"
+}, Q1e = {
+ code: "kk",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Алдыңғы",
+ next: "Келесі",
+ today: "Бүгін",
+ year: "Жыл",
+ month: "Ай",
+ week: "Апта",
+ day: "Күн",
+ list: "Күн тәртібі"
+ },
+ weekText: "Не",
+ allDayText: "Күні бойы",
+ moreLinkText(r) {
+ return "+ тағы " + r;
+ },
+ noEventsText: "Көрсету үшін оқиғалар жоқ"
+}, q1e = {
+ code: "km",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "មុន",
+ next: "បន្ទាប់",
+ today: "ថ្ងៃនេះ",
+ year: "ឆ្នាំ",
+ month: "ខែ",
+ week: "សប្តាហ៍",
+ day: "ថ្ងៃ",
+ list: "បញ្ជី"
+ },
+ weekText: "សប្តាហ៍",
+ allDayText: "ពេញមួយថ្ងៃ",
+ moreLinkText: "ច្រើនទៀត",
+ noEventsText: "គ្មានព្រឹត្តិការណ៍ត្រូវបង្ហាញ"
+}, eTe = {
+ code: "ko",
+ buttonText: {
+ prev: "이전달",
+ next: "다음달",
+ today: "오늘",
+ year: "년도",
+ month: "월",
+ week: "주",
+ day: "일",
+ list: "일정목록"
+ },
+ weekText: "주",
+ allDayText: "종일",
+ moreLinkText: "개",
+ noEventsText: "일정이 없습니다"
+}, tTe = {
+ code: "ku",
+ week: {
+ dow: 6,
+ doy: 12
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: "rtl",
+ buttonText: {
+ prev: "پێشتر",
+ next: "دواتر",
+ today: "ئەمڕو",
+ year: "ساڵ",
+ month: "مانگ",
+ week: "هەفتە",
+ day: "ڕۆژ",
+ list: "بەرنامە"
+ },
+ weekText: "هەفتە",
+ allDayText: "هەموو ڕۆژەکە",
+ moreLinkText: "زیاتر",
+ noEventsText: "هیچ ڕووداوێك نیە"
+}, rTe = {
+ code: "lb",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Zréck",
+ next: "Weider",
+ today: "Haut",
+ year: "Joer",
+ month: "Mount",
+ week: "Woch",
+ day: "Dag",
+ list: "Terminiwwersiicht"
+ },
+ weekText: "W",
+ allDayText: "Ganzen Dag",
+ moreLinkText: "méi",
+ noEventsText: "Nee Evenementer ze affichéieren"
+}, nTe = {
+ code: "lt",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Atgal",
+ next: "Pirmyn",
+ today: "Šiandien",
+ year: "Metai",
+ month: "Mėnuo",
+ week: "Savaitė",
+ day: "Diena",
+ list: "Darbotvarkė"
+ },
+ weekText: "SAV",
+ allDayText: "Visą dieną",
+ moreLinkText: "daugiau",
+ noEventsText: "Nėra įvykių rodyti"
+}, iTe = {
+ code: "lv",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Iepr.",
+ next: "Nāk.",
+ today: "Šodien",
+ year: "Gads",
+ month: "Mēnesis",
+ week: "Nedēļa",
+ day: "Diena",
+ list: "Dienas kārtība"
+ },
+ weekText: "Ned.",
+ allDayText: "Visu dienu",
+ moreLinkText(r) {
+ return "+vēl " + r;
+ },
+ noEventsText: "Nav notikumu"
+}, aTe = {
+ code: "mk",
+ buttonText: {
+ prev: "претходно",
+ next: "следно",
+ today: "Денес",
+ year: "година",
+ month: "Месец",
+ week: "Недела",
+ day: "Ден",
+ list: "График"
+ },
+ weekText: "Сед",
+ allDayText: "Цел ден",
+ moreLinkText(r) {
+ return "+повеќе " + r;
+ },
+ noEventsText: "Нема настани за прикажување"
+}, oTe = {
+ code: "ms",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Sebelum",
+ next: "Selepas",
+ today: "hari ini",
+ year: "Tahun",
+ month: "Bulan",
+ week: "Minggu",
+ day: "Hari",
+ list: "Agenda"
+ },
+ weekText: "Mg",
+ allDayText: "Sepanjang hari",
+ moreLinkText(r) {
+ return "masih ada " + r + " acara";
+ },
+ noEventsText: "Tiada peristiwa untuk dipaparkan"
+}, sTe = {
+ code: "nb",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Forrige",
+ next: "Neste",
+ today: "I dag",
+ year: "År",
+ month: "Måned",
+ week: "Uke",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekText: "Uke",
+ weekTextLong: "Uke",
+ allDayText: "Hele dagen",
+ moreLinkText: "til",
+ noEventsText: "Ingen hendelser å vise",
+ buttonHints: {
+ prev: "Forrige $0",
+ next: "Neste $0",
+ today: "Nåværende $0"
+ },
+ viewHint: "$0 visning",
+ navLinkHint: "Gå til $0",
+ moreLinkHint(r) {
+ return `Vis ${r} flere hendelse${r === 1 ? "" : "r"}`;
+ }
+}, lTe = {
+ code: "ne",
+ week: {
+ dow: 7,
+ doy: 1
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "अघिल्लो",
+ next: "अर्को",
+ today: "आज",
+ year: "वर्ष",
+ month: "महिना",
+ week: "हप्ता",
+ day: "दिन",
+ list: "सूची"
+ },
+ weekText: "हप्ता",
+ allDayText: "दिनभरि",
+ moreLinkText: "थप लिंक",
+ noEventsText: "देखाउनको लागि कुनै घटनाहरू छैनन्"
+}, uTe = {
+ code: "nl",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Vorige",
+ next: "Volgende",
+ today: "Vandaag",
+ year: "Jaar",
+ month: "Maand",
+ week: "Week",
+ day: "Dag",
+ list: "Agenda"
+ },
+ allDayText: "Hele dag",
+ moreLinkText: "extra",
+ noEventsText: "Geen evenementen om te laten zien"
+}, cTe = {
+ code: "nn",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Førre",
+ next: "Neste",
+ today: "I dag",
+ year: "År",
+ month: "Månad",
+ week: "Veke",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekText: "Veke",
+ allDayText: "Heile dagen",
+ moreLinkText: "til",
+ noEventsText: "Ingen hendelser å vise"
+}, hTe = {
+ code: "pl",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Poprzedni",
+ next: "Następny",
+ today: "Dziś",
+ year: "Rok",
+ month: "Miesiąc",
+ week: "Tydzień",
+ day: "Dzień",
+ list: "Plan dnia"
+ },
+ weekText: "Tydz",
+ allDayText: "Cały dzień",
+ moreLinkText: "więcej",
+ noEventsText: "Brak wydarzeń do wyświetlenia"
+}, fTe = {
+ code: "pt-br",
+ buttonText: {
+ prev: "Anterior",
+ next: "Próximo",
+ prevYear: "Ano anterior",
+ nextYear: "Próximo ano",
+ year: "Ano",
+ today: "Hoje",
+ month: "Mês",
+ week: "Semana",
+ day: "Dia",
+ list: "Lista"
+ },
+ buttonHints: {
+ prev: "$0 Anterior",
+ next: "Próximo $0",
+ today(r) {
+ return r === "Dia" ? "Hoje" : (r === "Semana" ? "Esta" : "Este") + " " + r.toLocaleLowerCase();
+ }
+ },
+ viewHint(r) {
+ return "Visualizar " + (r === "Semana" ? "a" : "o") + " " + r.toLocaleLowerCase();
+ },
+ weekText: "Sm",
+ weekTextLong: "Semana",
+ allDayText: "dia inteiro",
+ moreLinkText(r) {
+ return "mais +" + r;
+ },
+ moreLinkHint(r) {
+ return `Mostrar mais ${r} eventos`;
+ },
+ noEventsText: "Não há eventos para mostrar",
+ navLinkHint: "Ir para $0",
+ closeHint: "Fechar",
+ timeHint: "A hora",
+ eventHint: "Evento"
+}, dTe = {
+ code: "pt",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Anterior",
+ next: "Seguinte",
+ today: "Hoje",
+ year: "Ano",
+ month: "Mês",
+ week: "Semana",
+ day: "Dia",
+ list: "Agenda"
+ },
+ weekText: "Sem",
+ allDayText: "Todo o dia",
+ moreLinkText: "mais",
+ noEventsText: "Não há eventos para mostrar"
+}, vTe = {
+ code: "ro",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "precedentă",
+ next: "următoare",
+ today: "Azi",
+ year: "An",
+ month: "Lună",
+ week: "Săptămână",
+ day: "Zi",
+ list: "Agendă"
+ },
+ weekText: "Săpt",
+ allDayText: "Toată ziua",
+ moreLinkText(r) {
+ return "+alte " + r;
+ },
+ noEventsText: "Nu există evenimente de afișat"
+}, pTe = {
+ code: "ru",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Пред",
+ next: "След",
+ today: "Сегодня",
+ year: "Год",
+ month: "Месяц",
+ week: "Неделя",
+ day: "День",
+ list: "Повестка дня"
+ },
+ weekText: "Нед",
+ allDayText: "Весь день",
+ moreLinkText(r) {
+ return "+ ещё " + r;
+ },
+ noEventsText: "Нет событий для отображения"
+}, gTe = {
+ code: "si-lk",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "පෙර",
+ next: "පසු",
+ today: "අද",
+ year: "අවුරුදු",
+ month: "මාසය",
+ week: "සතිය",
+ day: "දවස",
+ list: "ලැයිස්තුව"
+ },
+ weekText: "සති",
+ allDayText: "සියලු",
+ moreLinkText: "තවත්",
+ noEventsText: "මුකුත් නැත"
+}, mTe = {
+ code: "sk",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Predchádzajúci",
+ next: "Nasledujúci",
+ today: "Dnes",
+ year: "Rok",
+ month: "Mesiac",
+ week: "Týždeň",
+ day: "Deň",
+ list: "Rozvrh"
+ },
+ weekText: "Ty",
+ allDayText: "Celý deň",
+ moreLinkText(r) {
+ return "+ďalšie: " + r;
+ },
+ noEventsText: "Žiadne akcie na zobrazenie"
+}, yTe = {
+ code: "sl",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prejšnji",
+ next: "Naslednji",
+ today: "Trenutni",
+ year: "Leto",
+ month: "Mesec",
+ week: "Teden",
+ day: "Dan",
+ list: "Dnevni red"
+ },
+ weekText: "Teden",
+ allDayText: "Ves dan",
+ moreLinkText: "več",
+ noEventsText: "Ni dogodkov za prikaz"
+}, _Te = {
+ code: "sm",
+ buttonText: {
+ prev: "Talu ai",
+ next: "Mulimuli atu",
+ today: "Aso nei",
+ year: "Tausaga",
+ month: "Masina",
+ week: "Vaiaso",
+ day: "Aso",
+ list: "Faasologa"
+ },
+ weekText: "Vaiaso",
+ allDayText: "Aso atoa",
+ moreLinkText: "sili atu",
+ noEventsText: "Leai ni mea na tutupu"
+}, bTe = {
+ code: "sq",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "mbrapa",
+ next: "Përpara",
+ today: "Sot",
+ year: "Viti",
+ month: "Muaj",
+ week: "Javë",
+ day: "Ditë",
+ list: "Listë"
+ },
+ weekText: "Ja",
+ allDayText: "Gjithë ditën",
+ moreLinkText(r) {
+ return "+më tepër " + r;
+ },
+ noEventsText: "Nuk ka evente për të shfaqur"
+}, xTe = {
+ code: "sr-cyrl",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Претходна",
+ next: "следећи",
+ today: "Данас",
+ year: "Година",
+ month: "Месец",
+ week: "Недеља",
+ day: "Дан",
+ list: "Планер"
+ },
+ weekText: "Сед",
+ allDayText: "Цео дан",
+ moreLinkText(r) {
+ return "+ још " + r;
+ },
+ noEventsText: "Нема догађаја за приказ"
+}, STe = {
+ code: "sr",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prethodna",
+ next: "Sledeći",
+ today: "Danas",
+ year: "Godina",
+ month: "Mеsеc",
+ week: "Nеdеlja",
+ day: "Dan",
+ list: "Planеr"
+ },
+ weekText: "Sed",
+ allDayText: "Cеo dan",
+ moreLinkText(r) {
+ return "+ još " + r;
+ },
+ noEventsText: "Nеma događaja za prikaz"
+}, wTe = {
+ code: "sv",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Förra",
+ next: "Nästa",
+ today: "Idag",
+ year: "År",
+ month: "Månad",
+ week: "Vecka",
+ day: "Dag",
+ list: "Program"
+ },
+ buttonHints: {
+ prev(r) {
+ return `Föregående ${r.toLocaleLowerCase()}`;
+ },
+ next(r) {
+ return `Nästa ${r.toLocaleLowerCase()}`;
+ },
+ today(r) {
+ return (r === "Program" ? "Detta" : "Denna") + " " + r.toLocaleLowerCase();
+ }
+ },
+ viewHint: "$0 vy",
+ navLinkHint: "Gå till $0",
+ moreLinkHint(r) {
+ return `Visa ytterligare ${r} händelse${r === 1 ? "" : "r"}`;
+ },
+ weekText: "v.",
+ weekTextLong: "Vecka",
+ allDayText: "Heldag",
+ moreLinkText: "till",
+ noEventsText: "Inga händelser att visa",
+ closeHint: "Stäng",
+ timeHint: "Klockan",
+ eventHint: "Händelse"
+}, CTe = {
+ code: "ta-in",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "முந்தைய",
+ next: "அடுத்தது",
+ today: "இன்று",
+ year: "ஆண்டு",
+ month: "மாதம்",
+ week: "வாரம்",
+ day: "நாள்",
+ list: "தினசரி அட்டவணை"
+ },
+ weekText: "வாரம்",
+ allDayText: "நாள் முழுவதும்",
+ moreLinkText(r) {
+ return "+ மேலும் " + r;
+ },
+ noEventsText: "காண்பிக்க நிகழ்வுகள் இல்லை"
+}, TTe = {
+ code: "th",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "ก่อนหน้า",
+ next: "ถัดไป",
+ prevYear: "ปีก่อนหน้า",
+ nextYear: "ปีถัดไป",
+ year: "ปี",
+ today: "วันนี้",
+ month: "เดือน",
+ week: "สัปดาห์",
+ day: "วัน",
+ list: "กำหนดการ"
+ },
+ weekText: "สัปดาห์",
+ allDayText: "ตลอดวัน",
+ moreLinkText: "เพิ่มเติม",
+ noEventsText: "ไม่มีกิจกรรมที่จะแสดง"
+}, ITe = {
+ code: "tr",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "geri",
+ next: "ileri",
+ today: "bugün",
+ year: "Yıl",
+ month: "Ay",
+ week: "Hafta",
+ day: "Gün",
+ list: "Ajanda"
+ },
+ weekText: "Hf",
+ allDayText: "Tüm gün",
+ moreLinkText: "daha fazla",
+ noEventsText: "Gösterilecek etkinlik yok"
+}, ATe = {
+ code: "ug",
+ buttonText: {
+ prev: "ئالدىنقى",
+ next: "كېيىنكى",
+ today: "بۈگۈن",
+ year: "يىل",
+ month: "ئاي",
+ week: "ھەپتە",
+ day: "كۈن",
+ list: "كۈنتەرتىپ"
+ },
+ allDayText: "پۈتۈن كۈن"
+}, ETe = {
+ code: "uk",
+ week: {
+ dow: 1,
+ doy: 7
+ // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Попередній",
+ next: "далі",
+ today: "Сьогодні",
+ year: "рік",
+ month: "Місяць",
+ week: "Тиждень",
+ day: "День",
+ list: "Порядок денний"
+ },
+ weekText: "Тиж",
+ allDayText: "Увесь день",
+ moreLinkText(r) {
+ return "+ще " + r + "...";
+ },
+ noEventsText: "Немає подій для відображення"
+}, MTe = {
+ code: "uz-cy",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Олин",
+ next: "Кейин",
+ today: "Бугун",
+ month: "Ой",
+ week: "Ҳафта",
+ day: "Кун",
+ list: "Кун тартиби"
+ },
+ weekText: "Ҳафта",
+ allDayText: "Кун бўйича",
+ moreLinkText(r) {
+ return "+ яна " + r;
+ },
+ noEventsText: "Кўрсатиш учун воқеалар йўқ"
+}, DTe = {
+ code: "uz",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Oldingi",
+ next: "Keyingi",
+ today: "Bugun",
+ year: "Yil",
+ month: "Oy",
+ week: "Xafta",
+ day: "Kun",
+ list: "Kun tartibi"
+ },
+ allDayText: "Kun bo'yi",
+ moreLinkText(r) {
+ return "+ yana " + r;
+ },
+ noEventsText: "Ko'rsatish uchun voqealar yo'q"
+}, kTe = {
+ code: "vi",
+ week: {
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Trước",
+ next: "Tiếp",
+ today: "Hôm nay",
+ year: "Năm",
+ month: "Tháng",
+ week: "Tuần",
+ day: "Ngày",
+ list: "Lịch biểu"
+ },
+ weekText: "Tu",
+ allDayText: "Cả ngày",
+ moreLinkText(r) {
+ return "+ thêm " + r;
+ },
+ noEventsText: "Không có sự kiện để hiển thị"
+}, OTe = {
+ code: "zh-cn",
+ week: {
+ // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+ dow: 1,
+ doy: 4
+ // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "上月",
+ next: "下月",
+ today: "今天",
+ year: "年",
+ month: "月",
+ week: "周",
+ day: "日",
+ list: "日程"
+ },
+ weekText: "周",
+ allDayText: "全天",
+ moreLinkText(r) {
+ return "另外 " + r + " 个";
+ },
+ noEventsText: "没有事件显示"
+}, LTe = {
+ code: "zh-tw",
+ buttonText: {
+ prev: "上個",
+ next: "下個",
+ today: "今天",
+ year: "年",
+ month: "月",
+ week: "週",
+ day: "天",
+ list: "活動列表"
+ },
+ weekText: "週",
+ allDayText: "整天",
+ moreLinkText: "顯示更多",
+ noEventsText: "沒有任何活動"
+}, PTe = [
+ u1e,
+ c1e,
+ h1e,
+ f1e,
+ d1e,
+ v1e,
+ p1e,
+ g1e,
+ m1e,
+ y1e,
+ _1e,
+ b1e,
+ x1e,
+ S1e,
+ w1e,
+ C1e,
+ T1e,
+ I1e,
+ A1e,
+ E1e,
+ M1e,
+ D1e,
+ k1e,
+ O1e,
+ L1e,
+ P1e,
+ R1e,
+ N1e,
+ z1e,
+ B1e,
+ j1e,
+ F1e,
+ $1e,
+ H1e,
+ V1e,
+ G1e,
+ U1e,
+ W1e,
+ Y1e,
+ X1e,
+ Z1e,
+ J1e,
+ K1e,
+ Q1e,
+ q1e,
+ eTe,
+ tTe,
+ rTe,
+ nTe,
+ iTe,
+ aTe,
+ oTe,
+ sTe,
+ lTe,
+ uTe,
+ cTe,
+ hTe,
+ fTe,
+ dTe,
+ vTe,
+ pTe,
+ gTe,
+ mTe,
+ yTe,
+ _Te,
+ bTe,
+ xTe,
+ STe,
+ wTe,
+ CTe,
+ TTe,
+ ITe,
+ ATe,
+ ETe,
+ MTe,
+ DTe,
+ kTe,
+ OTe,
+ LTe
+];
+function UC(r, e, t, n) {
+ let i;
+ return e === "local" ? i = $moment(r) : e === "UTC" ? i = $moment.utc(r) : $moment.tz ? i = $moment.tz(r, e) : (i = $moment.utc(r), t != null && i.utcOffset(t)), i.locale(n), i;
+}
+function RTe(r, e) {
+ let t = OU(r);
+ if (e.end) {
+ let n = UC(e.start.array, e.timeZone, e.start.timeZoneOffset, e.localeCodes[0]), i = UC(e.end.array, e.timeZone, e.end.timeZoneOffset, e.localeCodes[0]);
+ return uI(t, Zz(n), Zz(i), e.defaultSeparator);
+ }
+ return UC(e.date.array, e.timeZone, e.date.timeZoneOffset, e.localeCodes[0]).format(t.whole);
+}
+function Zz(r) {
+ return (e) => e ? r.format(e) : "";
+}
+function OU(r) {
+ let e = r.match(/^(.*?)\{(.*)\}(.*)$/);
+ if (e) {
+ let t = OU(e[2]);
+ return {
+ head: e[1],
+ middle: t,
+ tail: e[3],
+ whole: e[1] + t.whole + e[3]
+ };
+ }
+ return {
+ head: null,
+ middle: null,
+ tail: null,
+ whole: r
+ };
+}
+function uI(r, e, t, n) {
+ if (r.middle) {
+ let o = e(r.head), s = uI(r.middle, e, t, n), l = e(r.tail), u = t(r.head), c = uI(r.middle, e, t, n), h = t(r.tail);
+ if (o === u && l === h)
+ return o + (s === c ? s : s + n + c) + l;
+ }
+ let i = e(r.whole), a = t(r.whole);
+ return i === a ? i : i + n + a;
+}
+var NTe = Gs({
+ name: "@fullcalendar/moment",
+ cmdFormatter: RTe
+});
+const zTe = $styled_components.div`
+ position: relative;
+ height: 100%;
+ overflow: hidden;
+ color: ${(r) => r.$style.text};
+ .fc-theme-standard .fc-list-day-cushion,
+ .fc .fc-timegrid-col.fc-day-today,
+ .fc .fc-daygrid-day.fc-day-today {
+ background-color: ${(r) => r.$style.background};
+ }
+ .fc .fc-highlight {
+ background-color: ${(r) => r.$style.selectBackground};
+ }
+ a {
+ color: ${(r) => r.$style.text};
+ }
+
+ .fc .fc-timegrid-slot {
+ height: 28px;
+ }
+
+ // day
+ .fc-timeGridDay-view {
+ .fc-col-header-cell {
+ font-size: 20px;
+ font-weight: 500;
+ a {
+ line-height: 67px;
+ }
+ }
+ }
+
+ // list
+ .fc-list {
+ .fc-list-table {
+ table-layout: fixed;
+ th {
+ background-color: ${(r) => r.$style.background};
+ }
+ }
+ .fc-list-event-graphic {
+ display: none;
+ }
+ .fc-list-day-cushion {
+ font-size: 16px;
+ font-weight: 500;
+ line-height: 32px;
+ padding: 0 24px;
+ }
+ .fc-list-day-side-text {
+ float: left;
+ margin-left: 24px;
+ }
+ .fc-list-day {
+ th {
+ padding: 8px 0 3px 0;
+ }
+ > th {
+ border: none;
+ }
+ &:not(:nth-of-type(1)) .fc-list-day-cushion {
+ border-top: 1px solid
+ ${(r) => $lowcoder_sdk.toHex(r.$style.border) === "#D7D9E0" ? "#E1E3EB" : $lowcoder_sdk.lightenColor(r.$style.border, 0.03)};
+ }
+ }
+ .fc-event + .fc-list-day th {
+ padding-top: 11px;
+ .fc-list-day-cushion {
+ padding-top: 8px;
+ }
+ }
+ .fc-event {
+ .fc-list-event-time,
+ .fc-list-event-title {
+ border: none;
+ }
+ &:hover .event {
+ box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.15);
+ border-width: 1px;
+ margin: 2px 5px;
+ height: 20px;
+ .event-title {
+ margin-left: 15px;
+ }
+ &::before {
+ left: 2px;
+ }
+ }
+ }
+ .fc-event {
+ font-size: 13px;
+ line-height: 20px;
+ display: flex;
+ align-items: center;
+ &.no-time {
+ padding-left: 19px;
+ }
+ }
+ .fc-list-event-time {
+ padding: 0px 16px 0 24px;
+ vertical-align: middle;
+ min-width: 87px;
+ width: 87px;
+ box-sizing: content-box;
+ }
+ .fc-list-event-title {
+ min-width: 266px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ padding: 0 14px 0 0;
+ cursor: pointer;
+ .event {
+ font-size: 13px;
+ height: 18px;
+ line-height: 18px;
+ margin: 3px 5px;
+ border-width: 0;
+ align-items: center;
+ &::before {
+ height: 14px;
+ top: 2px;
+ left: 3px;
+ }
+ .event-time {
+ display: none;
+ }
+ .event-title {
+ margin-left: 16px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .event-remove {
+ background-color: inherit;
+ }
+ }
+ }
+ .fc-event:hover td {
+ background-color: inherit;
+ }
+ }
+
+ // month
+ .fc-dayGridMonth-view {
+ .fc-daygrid-day-frame {
+ min-height: 95px;
+ height: 100%;
+ }
+ .fc-col-header-cell {
+ font-size: 14px;
+ font-weight: 400;
+ text-align: left;
+ padding-left: 16px;
+ a {
+ padding: 0;
+ line-height: 39px;
+ }
+ }
+ .fc-daygrid-day-number {
+ font-size: 14px;
+ line-height: 22px;
+ font-weight: 500;
+ padding: 0 6px;
+ border-radius: 11px;
+ margin: 12px 0 0 10px;
+ }
+ .fc-daygrid-day-top {
+ flex-direction: inherit;
+ }
+ .fc-day-today .fc-daygrid-day-number {
+ background-color: ${(r) => r.theme.primary};
+ color: ${(r) => $lowcoder_sdk.contrastText(r.theme.primary || "", r.theme.textDark, r.theme.textLight)};
+ }
+ .fc-daygrid-day-events {
+ padding: 1px 0 5px 0;
+ min-height: unset;
+ .fc-event {
+ margin: 2px 4px 2px 12px;
+ padding: 0;
+ &:hover .event {
+ padding-right: 20px;
+ }
+ .event {
+ font-size: 13px;
+ line-height: 18px;
+ padding-right: 0;
+ .event-time {
+ display: none;
+ }
+ .event-title {
+ margin-left: 15px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ &::before {
+ height: 14px;
+ }
+ }
+ }
+ .fc-daygrid-day-bottom {
+ padding: 2px 2px 0 10px;
+ }
+ }
+ .fc-day-other {
+ color: ${(r) => r.$style.text};
+ .fc-daygrid-day-top,
+ .fc-daygrid-day-events {
+ opacity: 0.35;
+ }
+ .event::before {
+ background-color: ${(r) => r.$style.text};
+ }
+ }
+ }
+ // month drag event
+ .fc > .fc-event {
+ visibility: hidden;
+ }
+
+ // more link
+ .fc-view-harness-active .fc-more-popover {
+ border-radius: 4px;
+ box-shadow: 0 0px 10px 4px rgba(0, 0, 0, 0.25);
+ overflow: hidden;
+ left: ${(r) => `min(${r.left}px, calc(100% - 210px)) !important`};
+ .fc-popover-body {
+ padding: 4px 0;
+ min-width: 200px;
+ width: 200px;
+ .fc-daygrid-event-harness {
+ margin: 4px;
+ .fc-event {
+ margin: 0;
+ .event {
+ height: fit-content;
+ .event-title {
+ white-space: pre-wrap;
+ }
+ .event-time {
+ margin-top: 0;
+ }
+ }
+ }
+ }
+ }
+ .fc-popover-header,
+ .fc-popover-body {
+ background-color: ${(r) => r.$style.background};
+ }
+ .fc-popover-header .fc-popover-close {
+ color: #8b8fa3;
+ &:hover {
+ color: #222;
+ }
+ }
+ }
+
+ .fc-direction-ltr .fc-timegrid-more-link {
+ border: 1px solid ${(r) => r.$style.border};
+ border-radius: 4px;
+ box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.15);
+ font-size: 13px;
+ display: inline-block;
+ font-weight: 500;
+ background-color: ${(r) => $lowcoder_sdk.lightenColor(r.$style.background, 0.1)};
+ }
+
+ .fc-dayGridMonth-view .fc-more-link {
+ margin: 0 2px 2px 2px !important;
+ }
+ .fc-timeGridWeek-view .fc-more-link,
+ .fc-timeGridDay-view .fc-more-link {
+ margin: 2px !important;
+ }
+ .fc-daygrid-day-events {
+ margin: 0 !important;
+ padding: 2px 0;
+ .fc-event {
+ margin: 2px 4px;
+ }
+ .fc-daygrid-day-bottom {
+ line-height: 16px;
+ padding: 0;
+ .fc-more-link {
+ width: calc(100% - 4px);
+ border: 1px solid ${(r) => r.$style.border};
+ border-radius: 4px;
+ box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.15);
+ font-size: 13px;
+ display: inline-block;
+ height: 20px;
+ padding-left: 15px;
+ font-weight: 500;
+ background-color: ${(r) => $lowcoder_sdk.lightenColor(r.$style.background, 0.1)};
+ }
+ }
+ }
+
+ // on resize
+ .fc-media-screen {
+ height: 100% !important;
+ }
+ .fc-scroller {
+ overflow: hidden auto !important;
+ overflow: hidden overlay !important;
+ }
+ .fc-col-header,
+ .fc-scroller > div,
+ .fc-scroller > div > table,
+ .fc-scrollgrid-sync-table,
+ .fc-timegrid-cols > table,
+ .fc .fc-scrollgrid,
+ .fc .fc-scrollgrid table {
+ width: 100% !important;
+ }
+
+ // event
+ .fc-timegrid-event .fc-event-main {
+ padding: 4px 0 4px 1px;
+ }
+ .fc-event {
+ position: relative;
+ height: 100%;
+ background-color: unset !important;
+ border: none !important;
+ box-shadow: none !important;
+ .event-remove {
+ color: ${(r) => r.$style.text};
+ }
+ &:hover {
+ .event-remove {
+ opacity: ${(r) => r.editable && 1};
+ }
+ }
+ }
+
+ // left time
+ .time.past {
+ opacity: 0.35;
+ }
+
+ .past .time {
+ opacity: 0.35;
+ }
+
+ .future .time {
+ opacity: 1;
+ }
+
+ .fc-scrollgrid-liquid > tbody {
+ & > tr:nth-of-type(2) {
+ display: ${(r) => r.allDay && 1};
+ }
+ }
+ .fc .fc-timegrid-slot-label-cushion {
+ padding: 0 15px;
+ }
+
+ // border-radius, bg
+ .fc-theme-standard .fc-list {
+ background-color: ${(r) => r.$style.background};
+ border-radius: ${(r) => `0 0 ${r.$style.radius} ${r.$style.radius}`};
+ border-color: ${(r) => r.$style.border};
+ border-top-color: ${(r) => $lowcoder_sdk.toHex(r.$style.border) === "#D7D9E0" ? "#E1E3EB" : $lowcoder_sdk.lightenColor(r.$style.border, 0.03)};
+ }
+ .fc-scrollgrid-liquid {
+ border-radius: ${(r) => `0 0 ${r.$style.radius} ${r.$style.radius}`};
+ overflow: hidden;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-color: ${(r) => r.$style.border};
+ > thead,
+ > tbody > tr:nth-of-type(1),
+ .fc-scrollgrid-section-liquid > td {
+ background-color: ${(r) => r.$style.background};
+ }
+ }
+ .fc-scrollgrid-section-liquid > td,
+ .fc-scrollgrid-liquid .fc-scrollgrid-section-header > th {
+ border: none;
+ }
+ .fc-scrollgrid-liquid > tbody > tr:nth-of-type(1) > td {
+ border-right: none;
+ }
+ .fc-theme-standard .fc-scrollgrid {
+ border-color: ${(r) => $lowcoder_sdk.toHex(r.$style.border) === "#D7D9E0" ? "#E1E3EB" : $lowcoder_sdk.lightenColor(r.$style.border, 0.03)};
+ }
+ .fc .fc-scrollgrid {
+ border-bottom-width: 1px;
+ border-right-width: 1px;
+ }
+
+ .fc-day-sat,
+ .fc-day-sun {
+ &.fc-timegrid-col,
+ &.fc-daygrid-day {
+ background-color: ${(r) => $lowcoder_sdk.isDarkColor(r.$style.background) ? $lowcoder_sdk.darkenColor(r.$style.background, 0.06) : $lowcoder_sdk.darkenColor(r.$style.background, 0.02)};
+ }
+ }
+ .fc-theme-standard td,
+ .fc-theme-standard th {
+ border-color: ${(r) => $lowcoder_sdk.toHex(r.$style.border) === "#D7D9E0" ? "#E1E3EB" : $lowcoder_sdk.lightenColor(r.$style.border, 0.03)};
+ }
+
+ // header
+ .fc .fc-toolbar.fc-header-toolbar {
+ padding: 16px;
+ margin-bottom: 0;
+ border: 1px solid ${(r) => r.$style.border};
+ border-bottom: none;
+ border-radius: ${(r) => `${r.$style.radius} ${r.$style.radius} 0 0`};
+ background-color: ${(r) => r.$style.background};
+ }
+ .fc-toolbar-title {
+ color: ${(r) => r.$style.title};
+ font-size: 24px;
+ line-height: 24px;
+ display: inline-flex;
+ }
+ .fc-toolbar-chunk {
+ display: inline-flex;
+ align-items: center;
+ }
+ .fc .fc-toolbar-chunk .fc-button.fc-button-primary {
+ height: 28px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ &:not(:disabled):not(.fc-button-active) {
+ &:hover,
+ &:active {
+ color: ${(r) => r.$style.btnText};
+ background-color: ${(r) => $lowcoder_sdk.toHex(r.$style.headerBtnBackground) === "#FFFFFF" ? "#F5F5F6" : $lowcoder_sdk.genHoverColor(r.$style.headerBtnBackground)};
+ border-color: ${(r) => $lowcoder_sdk.toHex(r.$style.headerBtnBackground) === "#FFFFFF" ? "#D7D9E0" : $lowcoder_sdk.backgroundToBorder($lowcoder_sdk.genHoverColor(r.$style.headerBtnBackground))};
+ }
+ }
+ &:not(:disabled):focus {
+ box-shadow: none;
+ }
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 1;
+ &,
+ &:hover {
+ background-color: ${(r) => r.$style.headerBtnBackground};
+ border-color: ${(r) => $lowcoder_sdk.backgroundToBorder(r.$style.headerBtnBackground)};
+ color: ${(r) => $lowcoder_sdk.toHex(r.$style.btnText) === "#222222" ? "#B8B9BF" : $lowcoder_sdk.contrastColor(r.$style.btnText)};
+ }
+ }
+ }
+ .fc .fc-button-primary:not(:disabled).fc-button-active:focus,
+ .fc .fc-button-primary:not(:disabled):active:focus {
+ box-shadow: none;
+ }
+ .fc-toolbar-chunk:nth-of-type(3) .fc-button-primary {
+ height: 28px;
+ display: inline-flex;
+ font-size: 14px;
+ margin-left: 8px;
+ background-color: ${(r) => r.$style.headerBtnBackground};
+ border-color: ${(r) => $lowcoder_sdk.backgroundToBorder(r.$style.headerBtnBackground)};
+ color: ${(r) => r.$style.btnText};
+ &.fc-today-button {
+ min-width: 52px;
+ }
+ &.fc-prev-button,
+ &.fc-next-button {
+ padding: 0;
+ width: 28px;
+ color: ${(r) => $lowcoder_sdk.lightenColor(r.$style.btnText, 0.4)};
+ }
+ &.fc-prev-button {
+ margin-left: 12px;
+ }
+ }
+ .fc-toolbar-chunk:nth-of-type(3) .fc-button-group {
+ background-color: ${(r) => $lowcoder_sdk.toHex(r.$style.headerBtnBackground) === "#FFFFFF" ? "#EFEFF1" : $lowcoder_sdk.isDarkColor(r.$style.headerBtnBackground) ? r.$style.headerBtnBackground : $lowcoder_sdk.darkenColor(r.$style.headerBtnBackground, 0.1)};
+ border-radius: 4px;
+ margin-left: 16px;
+ .fc-button-primary {
+ background-color: transparent;
+ min-width: 60px;
+ border-radius: 4px;
+ margin: 2px;
+ border: none;
+ color: ${(r) => $lowcoder_sdk.toHex(r.$style.btnText) === "#222222" ? "#8B8FA3" : $lowcoder_sdk.lightenColor(r.$style.btnText, 0.4)};
+ font-weight: 500;
+
+ &.fc-button-active {
+ background-color: ${(r) => $lowcoder_sdk.isDarkColor(r.$style.headerBtnBackground) ? $lowcoder_sdk.lightenColor(r.$style.headerBtnBackground, 0.1) : r.$style.headerBtnBackground};
+ color: ${(r) => r.$style.btnText};
+ }
+ }
+ }
+
+ // week head
+ .fc-timeGridWeek-view {
+ .week-head {
+ display: flex;
+ flex-direction: column;
+ font-size: 14px;
+ font-weight: 400;
+ &.past span {
+ opacity: 0.35;
+ }
+ .week {
+ padding-bottom: 3px;
+ }
+ .day {
+ font-size: 20px;
+ font-weight: 500;
+ line-height: 22px;
+ }
+ }
+ .fc-day-today.fc-col-header-cell {
+ background-color: ${(r) => $lowcoder_sdk.isDarkColor(r.$style.background) ? "#ffffff19" : $lowcoder_sdk.toHex(r.theme.primary) + "19"};
+ a {
+ color: ${(r) => !$lowcoder_sdk.isDarkColor(r.$style.background) && $lowcoder_sdk.darkenColor(r.theme.primary, 0.1)};
+ }
+ }
+ .fc-col-header-cell-cushion {
+ padding: 8px 0 13px 0;
+ }
+ }
+
+ // week left
+ .fc .fc-timegrid-axis-cushion {
+ min-width: 62px;
+ min-height: 52px;
+ max-width: none;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ }
+ .fc-direction-ltr .fc-timegrid-slot-label-frame {
+ text-align: center;
+ }
+ .fc .fc-timegrid-slot-label {
+ border: none;
+ }
+
+ // time can doubleClick
+ .fc-timegrid-bg-harness,
+ .fc-daygrid-day-bg {
+ pointer-events: none;
+ }
+`, BTe = $styled_components.div`
+ position: absolute;
+ pointer-events: auto;
+ top: 0;
+ right: 0;
+ display: flex;
+ padding: 5px;
+ opacity: 0;
+ cursor: pointer;
+ &:hover {
+ g {
+ stroke: #315efb;
+ }
+ }
+`, jTe = $styled_components.div`
+ height: 100%;
+ width: 100%;
+ pointer-events: none;
+ border-radius: 4px;
+ box-shadow: ${(r) => !r.isList && "0 0 5px 0 rgba(0, 0, 0, 0.15)"};
+ border: 1px solid ${(r) => r.$style.border};
+ display: ${(r) => r.isList && "flex"};
+ background-color: ${(r) => !r.isList && $lowcoder_sdk.lightenColor(r.$style.background, 0.1)};
+ overflow: hidden;
+ font-size: 13px;
+ line-height: 19px;
+ padding-right: 20px;
+ overflow: hidden;
+ position: relative;
+ &::before {
+ content: "";
+ position: absolute;
+ display: block;
+ width: 5px;
+ height: calc(100% - 4px);
+ left: 2px;
+ top: 2px;
+ border-radius: 3px;
+ background-color: ${(r) => r.bg};
+ }
+
+ .event-time {
+ color: ${(r) => !r.isList && ($lowcoder_sdk.isDarkColor(r.$style.text) ? $lowcoder_sdk.lightenColor(r.$style.text, 0.2) : r.$style.text)};
+ margin-left: 15px;
+ white-space: pre-wrap;
+ margin-top: 2px;
+ }
+ .event-title {
+ color: ${(r) => !r.isList && r.$style.text};
+ font-weight: 500;
+ margin-left: 15px;
+ white-space: pre-wrap;
+ word-break: break-word;
+ }
+
+ &.small {
+ height: 20px;
+ .event-time {
+ display: none;
+ }
+ .event-title {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ }
+ }
+ &.middle {
+ padding-top: 2px;
+ .event-time,
+ .event-title {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ }
+ }
+ &.large {
+ .event-time {
+ margin-top: 13px;
+ }
+ }
+ &.past {
+ background-color: ${(r) => $lowcoder_sdk.isDarkColor(r.$style.background) && r.$style.background};
+ &::before {
+ background-color: ${(r) => $lowcoder_sdk.toHex(r.$style.text) === "#3C3C3C" ? "#8B8FA3" : $lowcoder_sdk.isDarkColor(r.$style.text) ? $lowcoder_sdk.lightenColor(r.$style.text, 0.3) : r.$style.text};
+ }
+ &::before,
+ .event-title,
+ .event-time {
+ opacity: 0.35;
+ }
+ }
+`, FTe = $styled_components($antd.Form)`
+ .ant-form-item-label {
+ width: 100px;
+ text-align: left;
+ line-height: 18px;
+ label:not(.ant-form-item-required) {
+ margin-left: 11px;
+ }
+ label span {
+ ${$lowcoder_sdk.UnderlineCss}
+ }
+ }
+`;
+var Gu = /* @__PURE__ */ ((r) => (r.MONTH = "dayGridMonth", r.WEEK = "timeGridWeek", r.DAY = "timeGridDay", r.LIST = "listWeek", r))(Gu || {});
+const $Te = [{
+ label: Ye("calendar.month"),
+ value: "dayGridMonth"
+}, {
+ label: Ye("calendar.week"),
+ value: "timeGridWeek"
+}, {
+ label: Ye("calendar.day"),
+ value: "timeGridDay"
+}, {
+ label: Ye("calendar.list"),
+ value: "listWeek"
+}], HTe = [{
+ label: Ye("calendar.monday"),
+ value: "1"
+}, {
+ label: Ye("calendar.tuesday"),
+ value: "2"
+}, {
+ label: Ye("calendar.wednesday"),
+ value: "3"
+}, {
+ label: Ye("calendar.thursday"),
+ value: "4"
+}, {
+ label: Ye("calendar.friday"),
+ value: "5"
+}, {
+ label: Ye("calendar.saturday"),
+ value: "6"
+}, {
+ label: Ye("calendar.sunday"),
+ value: "0"
+}], VTe = [{
+ id: "1",
+ title: "Coding",
+ start: $dayjs().hour(10).minute(0).second(0).format($lowcoder_sdk.DATE_TIME_FORMAT),
+ end: $dayjs().hour(11).minute(30).second(0).format($lowcoder_sdk.DATE_TIME_FORMAT),
+ color: "#079968"
+}, {
+ id: "2",
+ title: "Rest",
+ start: $dayjs().hour(24).format($lowcoder_sdk.DATE_FORMAT),
+ end: $dayjs().hour(48).format($lowcoder_sdk.DATE_FORMAT),
+ allDay: !0
+}], GTe = {
+ today: Ye("calendar.today"),
+ month: Ye("calendar.month"),
+ week: Ye("calendar.week"),
+ day: Ye("calendar.day"),
+ list: Ye("calendar.list")
+}, UTe = {
+ left: "title",
+ right: "prev today next dayGridMonth,timeGridWeek,timeGridDay,listWeek"
+}, WTe = (r) => {
+ const e = r.text.split(" ");
+ return {
+ html: `
+ ${e[0]}
+ ${e[1]}
+ `
+ };
+}, Jz = (r) => {
+ let e = !1;
+ return r.view.type === "timeGridWeek" ? e = $dayjs().isAfter($dayjs($dayjs().format("YYYY MM DD " + r.text))) : r.view.type === "timeGridDay" && (e = $dayjs().isAfter($dayjs($dayjs(r.view.activeStart).format("YYYY MM DD " + r.text)))), {
+ html: `${r.text}`
+ };
+}, YTe = {
+ timeGridWeek: {
+ dayHeaderFormat: "ddd DD",
+ dayHeaderContent: (r) => WTe(r),
+ slotLabelContent: (r) => Jz(r)
+ },
+ timeGridDay: {
+ slotLabelContent: (r) => Jz(r)
+ },
+ listWeek: {
+ listDayFormat: {
+ weekday: "short"
+ }
+ }
+}, XTe = [{
+ hour: "2-digit",
+ minute: "2-digit"
+}], ZTe = (r) => {
+ let e = "";
+ return [
+ "timeGridWeek",
+ "timeGridDay"
+ /* DAY */
+ ].includes(r.view.type) && ($dayjs().isAfter(r.view.activeEnd) ? e = "past" : $dayjs().isBefore(r.view.activeStart) && (e = "future")), e;
+}, JTe = {
+ events: $lowcoder_sdk.jsonValueExposingStateControl("events", VTe),
+ onEvent: $lowcoder_sdk.ChangeEventHandlerControl,
+ editable: $lowcoder_sdk.withDefault($lowcoder_sdk.BoolControl, !0),
+ defaultDate: $lowcoder_sdk.withDefault($lowcoder_sdk.StringControl, "{{ new Date() }}"),
+ defaultView: $lowcoder_sdk.dropdownControl($Te, "timeGridWeek"),
+ firstDay: $lowcoder_sdk.dropdownControl(HTe, "1"),
+ showEventTime: $lowcoder_sdk.withDefault($lowcoder_sdk.BoolControl, !0),
+ showWeekends: $lowcoder_sdk.withDefault($lowcoder_sdk.BoolControl, !0),
+ showAllDay: $lowcoder_sdk.withDefault($lowcoder_sdk.BoolControl, !0),
+ dayMaxEvents: $lowcoder_sdk.withDefault($lowcoder_sdk.NumberControl, 2),
+ eventMaxStack: $lowcoder_sdk.withDefault($lowcoder_sdk.NumberControl, 0),
+ style: $lowcoder_sdk.styleControl($lowcoder_sdk.CalendarStyle)
+};
+let cI = function() {
+ return new $lowcoder_sdk.UICompBuilder(JTe, (r) => {
+ const e = $react.useContext($lowcoder_sdk.ThemeContext), t = $react.createRef(), n = $react.useRef(), [i] = $antd.Form.useForm(), [a, o] = $react.useState(void 0), s = r.events.value.map((S) => {
+ var T;
+ return sn({
+ title: S.title,
+ id: S.id,
+ start: $dayjs(S.start, $lowcoder_sdk.DateParser).format(),
+ end: $dayjs(S.end, $lowcoder_sdk.DateParser).format(),
+ allDay: S.allDay,
+ color: $lowcoder_sdk.isValidColor(S.color || "") ? S.color : (T = e == null ? void 0 : e.theme) == null ? void 0 : T.primary
+ }, S.groupId ? {
+ groupId: S.groupId
+ } : null);
+ }), {
+ defaultDate: l,
+ defaultView: u,
+ showEventTime: c,
+ showWeekends: h,
+ showAllDay: f,
+ dayMaxEvents: v,
+ eventMaxStack: b,
+ style: w,
+ firstDay: p,
+ editable: d
+ } = r;
+ function m(S) {
+ const T = S.view.type === "listWeek";
+ let C = "";
+ if ([Gu.WEEK, Gu.DAY].includes(S.view.type)) {
+ const M = $dayjs(S.event.end).diff($dayjs(S.event.start), "minutes");
+ M <= 30 || S.event.allDay ? C = "small" : M <= 60 ? C = "middle" : C = "large";
+ }
+ const E = $dayjs().isAfter($dayjs(S.event.end)) && S.view.type !== Gu.MONTH ? "past" : "";
+ return /* @__PURE__ */ Rn(jTe, {
+ className: `event ${C} ${E}`,
+ isList: T,
+ bg: S.backgroundColor,
+ theme: e == null ? void 0 : e.theme,
+ allDay: f,
+ $style: r.style,
+ children: [/* @__PURE__ */ Bt("div", {
+ className: "event-time",
+ children: S.timeText
+ }), /* @__PURE__ */ Bt("div", {
+ className: "event-title",
+ children: S.event.title
+ }), /* @__PURE__ */ Bt(BTe, {
+ isList: T,
+ className: "event-remove",
+ onClick: (M) => {
+ M.stopPropagation(), r.onEvent("change");
+ const P = s.filter((R) => R.id !== S.event.id);
+ r.events.onChange(P);
+ },
+ onMouseDown: (M) => {
+ M.stopPropagation(), M.preventDefault();
+ },
+ children: /* @__PURE__ */ Bt($lowcoder_sdk.CalendarDeleteIcon, {})
+ })]
+ });
+ }
+ const _ = () => {
+ const S = r.events.value.find((T) => {
+ var C;
+ return T.id === ((C = n.current) == null ? void 0 : C.id);
+ });
+ if (!(!d || !n.current))
+ if (S) {
+ const {
+ title: T,
+ groupId: C,
+ color: E,
+ id: M
+ } = S;
+ x({
+ title: T,
+ groupId: C,
+ color: E,
+ id: M
+ }, !0);
+ } else
+ x(n.current, !1);
+ }, y = (S) => {
+ const T = {
+ allDay: S.allDay,
+ start: S.startStr,
+ end: S.endStr
+ }, C = S.view.type, E = $dayjs(S.end).diff($dayjs(S.start), "minutes");
+ if (C === Gu.MONTH && E === 1440 || [Gu.WEEK, Gu.DAY].includes(C) && E === 30 || S.allDay && E === 1440) {
+ n.current = T, setTimeout(() => {
+ n.current = void 0;
+ }, 500);
+ return;
+ }
+ x(T, !1);
+ }, x = (S, T) => {
+ var M;
+ const C = Ye(T ? "calendar.editEvent" : "calendar.creatEvent");
+ i && i.setFieldsValue(S);
+ const E = (M = n.current) == null ? void 0 : M.id;
+ $lowcoder_sdk.CustomModal.confirm({
+ title: C,
+ content: /* @__PURE__ */ Rn(FTe, {
+ form: i,
+ children: [/* @__PURE__ */ Bt($antd.Form.Item, {
+ label: /* @__PURE__ */ Bt($lowcoder_sdk.Tooltip, {
+ title: Ye("calendar.eventIdTooltip"),
+ children: Ye("calendar.eventId")
+ }),
+ name: "id",
+ rules: [{
+ required: !0,
+ message: Ye("calendar.eventIdRequire")
+ }],
+ children: /* @__PURE__ */ Bt($antd.Input, {})
+ }), /* @__PURE__ */ Bt($antd.Form.Item, {
+ label: Ye("calendar.eventName"),
+ name: "title",
+ rules: [{
+ required: !0,
+ message: Ye("calendar.eventNameRequire")
+ }],
+ children: /* @__PURE__ */ Bt($antd.Input, {})
+ }), /* @__PURE__ */ Bt($antd.Form.Item, {
+ label: Ye("calendar.eventColor"),
+ name: "color",
+ children: /* @__PURE__ */ Bt($antd.Input, {})
+ }), /* @__PURE__ */ Bt($antd.Form.Item, {
+ label: /* @__PURE__ */ Bt($lowcoder_sdk.Tooltip, {
+ title: Ye("calendar.groupIdTooltip"),
+ children: Ye("calendar.eventGroupId")
+ }),
+ name: "groupId",
+ children: /* @__PURE__ */ Bt($antd.Input, {})
+ })]
+ }),
+ onConfirm: () => (i.submit(), i.validateFields().then(() => {
+ const {
+ id: P,
+ groupId: R,
+ color: N,
+ title: F = ""
+ } = i.getFieldsValue();
+ if (r.events.value.findIndex(($) => $.id === P) > -1 && P !== E)
+ throw i.setFields([{
+ name: "id",
+ errors: [Ye("calendar.eventIdExist")]
+ }]), new Error();
+ if (T) {
+ const $ = r.events.value.map((G) => G.id === E ? sn(sn(Za(sn({}, G), {
+ title: F,
+ id: P
+ }), R !== void 0 ? {
+ groupId: R
+ } : null), N !== void 0 ? {
+ color: N
+ } : null) : G);
+ r.events.onChange($);
+ } else {
+ const $ = sn(sn({
+ allDay: S.allDay,
+ start: S.start,
+ end: S.end,
+ id: P,
+ title: F
+ }, R !== void 0 ? {
+ groupId: R
+ } : null), N !== void 0 ? {
+ color: N
+ } : null);
+ r.events.onChange([...r.events.value, $]);
+ }
+ r.onEvent("change"), i.resetFields();
+ })),
+ onCancel: () => {
+ i.resetFields();
+ }
+ });
+ };
+ let g = l;
+ try {
+ g = new Date(l).toISOString();
+ } catch (S) {
+ g = void 0;
+ }
+ return /* @__PURE__ */ Bt(zTe, {
+ ref: t,
+ editable: d,
+ $style: w,
+ theme: e == null ? void 0 : e.theme,
+ onDoubleClick: _,
+ left: a,
+ children: /* @__PURE__ */ Bt(gU, {
+ slotEventOverlap: !1,
+ events: s,
+ expandRows: !0,
+ height: "100%",
+ locale: d6(),
+ locales: PTe,
+ firstDay: Number(p),
+ plugins: [$we, ICe, XCe, l1e, NTe],
+ headerToolbar: UTe,
+ moreLinkClick: (S) => {
+ var E, M, P, R, N, F, U, $, G, Q;
+ let T = 0;
+ const C = S.jsEvent.target;
+ S.view.type === Gu.DAY ? S.allDay ? T = ((M = (E = C.offsetParent) == null ? void 0 : E.parentElement) == null ? void 0 : M.offsetLeft) || 0 : T = ((P = C.parentElement) == null ? void 0 : P.offsetLeft) || 0 : S.allDay ? T = ((F = (N = (R = C.offsetParent) == null ? void 0 : R.parentElement) == null ? void 0 : N.parentElement) == null ? void 0 : F.offsetLeft) || 0 : T = ((Q = (G = ($ = (U = C.offsetParent) == null ? void 0 : U.parentElement) == null ? void 0 : $.parentElement) == null ? void 0 : G.parentElement) == null ? void 0 : Q.offsetLeft) || 0, o(T);
+ },
+ buttonText: GTe,
+ views: YTe,
+ eventClassNames: () => c ? "" : "no-time",
+ slotLabelFormat: XTe,
+ viewClassNames: ZTe,
+ moreLinkText: Ye("calendar.more"),
+ initialDate: g,
+ initialView: u,
+ editable: d,
+ selectable: d,
+ selectMirror: !1,
+ displayEventTime: c,
+ dayMaxEvents: v,
+ eventMaxStack: b || void 0,
+ weekends: h,
+ allDaySlot: f,
+ eventContent: m,
+ select: (S) => y(S),
+ eventClick: (S) => {
+ const T = s.find((C) => C.id === S.event.id);
+ n.current = T, setTimeout(() => {
+ n.current = void 0;
+ }, 500);
+ },
+ eventsSet: (S) => {
+ let T = !1, C = [];
+ S.forEach((E) => {
+ const M = s.find((N) => N.id === E.id), P = $dayjs(E.start, $lowcoder_sdk.DateParser).format(), R = $dayjs(E.end, $lowcoder_sdk.DateParser).format();
+ P !== (M == null ? void 0 : M.start) || R !== (M == null ? void 0 : M.end) || !!E.allDay != !!(M != null && M.allDay) ? (T = !0, C.push(Za(sn({}, M), {
+ allDay: E.allDay,
+ start: E.startStr,
+ end: E.endStr
+ }))) : C.push(M);
+ }), T && (r.events.onChange(C), r.onEvent("change"));
+ }
+ })
+ }, g ? u + g : u);
+ }).setPropertyViewFn((r) => /* @__PURE__ */ Rn(Ni, {
+ children: [/* @__PURE__ */ Bt($lowcoder_sdk.Section, {
+ name: $lowcoder_sdk.sectionNames.basic,
+ children: r.events.propertyView({})
+ }), /* @__PURE__ */ Bt($lowcoder_sdk.Section, {
+ name: $lowcoder_sdk.sectionNames.interaction,
+ children: r.onEvent.getPropertyView()
+ }), /* @__PURE__ */ Rn($lowcoder_sdk.Section, {
+ name: $lowcoder_sdk.sectionNames.advanced,
+ children: [r.editable.propertyView({
+ label: Ye("calendar.editable")
+ }), r.defaultDate.propertyView({
+ label: Ye("calendar.defaultDate"),
+ tooltip: Ye("calendar.defaultDateTooltip")
+ }), r.defaultView.propertyView({
+ label: Ye("calendar.defaultView"),
+ tooltip: Ye("calendar.defaultViewTooltip")
+ }), r.firstDay.propertyView({
+ label: Ye("calendar.startWeek")
+ }), r.showEventTime.propertyView({
+ label: Ye("calendar.showEventTime"),
+ tooltip: Ye("calendar.showEventTimeTooltip")
+ }), r.showWeekends.propertyView({
+ label: Ye("calendar.showWeekends")
+ }), r.showAllDay.propertyView({
+ label: Ye("calendar.showAllDay"),
+ tooltip: Ye("calendar.showAllDayTooltip")
+ }), r.dayMaxEvents.propertyView({
+ label: Ye("calendar.dayMaxEvents"),
+ tooltip: Ye("calendar.dayMaxEventsTooltip")
+ }), r.eventMaxStack.propertyView({
+ label: Ye("calendar.eventMaxStack"),
+ tooltip: Ye("calendar.eventMaxStackTooltip")
+ })]
+ }), /* @__PURE__ */ Bt($lowcoder_sdk.Section, {
+ name: $lowcoder_sdk.sectionNames.layout,
+ children: $lowcoder_sdk.hiddenPropertyView(r)
+ }), /* @__PURE__ */ Bt($lowcoder_sdk.Section, {
+ name: $lowcoder_sdk.sectionNames.style,
+ children: r.style.getPropertyView()
+ })]
+ })).build();
+}();
+cI = class extends cI {
+ autoHeight() {
+ return !1;
+ }
+};
+const KTe = $lowcoder_sdk.withExposingConfigs(cI, [new $lowcoder_sdk.NameConfig("events", Ye("calendar.events")), $lowcoder_sdk.NameConfigHidden]), tIe = {
+ chart: a0e,
+ imageEditor: p0e,
+ calendar: KTe
+};
+export {
+ tIe as default
+};
diff --git a/client/packages/lowcoder-comps/package/package.json b/client/packages/lowcoder-comps/package/package.json
new file mode 100644
index 000000000..3254348be
--- /dev/null
+++ b/client/packages/lowcoder-comps/package/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "lowcoder-comps",
+ "version": "0.0.14",
+ "type": "module",
+ "license": "MIT",
+ "dependencies": {
+ "@fullcalendar/core": "^6.1.6",
+ "@fullcalendar/daygrid": "^6.1.6",
+ "@fullcalendar/interaction": "^6.1.6",
+ "@fullcalendar/list": "^6.1.6",
+ "@fullcalendar/moment": "^6.1.6",
+ "@fullcalendar/react": "^6.1.6",
+ "@fullcalendar/timegrid": "^6.1.6",
+ "@types/react": "17",
+ "@types/react-dom": "17",
+ "big.js": "^6.2.1",
+ "echarts-extension-gmap": "^1.6.0",
+ "lowcoder-cli": "workspace:^",
+ "lowcoder-sdk": "workspace:^",
+ "mermaid": "^10.2.4",
+ "react": "17",
+ "react-dom": "17",
+ "typescript": "4.8.4"
+ },
+ "lowcoder": {
+ "description": "",
+ "comps": {
+ "chart": {
+ "name": "Chart",
+ "icon": "./icons/icon-chart.svg",
+ "layoutInfo": {
+ "w": 11,
+ "h": 35
+ }
+ },
+ "imageEditor": {
+ "name": "Image Editor",
+ "icon": "./icons/icon-chart.svg",
+ "layoutInfo": {
+ "w": 15,
+ "h": 60
+ }
+ },
+ "calendar": {
+ "name": "Calendar",
+ "icon": "./icons/icon-comp-calendar.svg",
+ "layoutInfo": {
+ "w": 15,
+ "h": 60
+ }
+ }
+ },
+ "entry": "index.js"
+ },
+ "scripts": {
+ "start": "vite",
+ "build": "yarn test && lowcoder-cli build",
+ "build_only": "lowcoder-cli build",
+ "build_publish": "lowcoder-cli build --publish",
+ "test": "jest"
+ },
+ "devDependencies": {
+ "jest": "29.3.0",
+ "jest-canvas-mock": "^2.5.2",
+ "vite": "^4.3.9",
+ "vite-tsconfig-paths": "^3.6.0"
+ }
+}
\ No newline at end of file
diff --git a/client/packages/lowcoder-comps/src/comps/chartComp/chartComp.tsx b/client/packages/lowcoder-comps/src/comps/chartComp/chartComp.tsx
index e0dcf03cc..671ccae7c 100644
--- a/client/packages/lowcoder-comps/src/comps/chartComp/chartComp.tsx
+++ b/client/packages/lowcoder-comps/src/comps/chartComp/chartComp.tsx
@@ -23,6 +23,7 @@ import {
UICompBuilder,
withDefault,
withExposingConfigs,
+ withMethodExposing,
withViewFn,
ThemeContext,
chartColorPalette,
@@ -55,12 +56,14 @@ ChartTmpComp = withViewFn(ChartTmpComp, (comp) => {
color: chartColorPalette,
backgroundColor: "#fff",
};
+
let themeConfig = defaultChartTheme;
try {
themeConfig = theme?.theme.chart ? JSON.parse(theme?.theme.chart) : defaultChartTheme;
} catch (error) {
log.error('theme chart error: ', error);
}
+
const onEvent = comp.children.onEvent.getView();
useEffect(() => {
// bind events
@@ -68,8 +71,8 @@ ChartTmpComp = withViewFn(ChartTmpComp, (comp) => {
if (!echartsCompInstance) {
return _.noop;
}
- echartsCompInstance.on("selectchanged", (param: any) => {
- const option: any = echartsCompInstance.getOption();
+ echartsCompInstance?.on("selectchanged", (param: any) => {
+ const option: any = echartsCompInstance?.getOption();
//log.log("chart select change", param);
if (param.fromAction === "select") {
comp.dispatch(changeChildAction("selectedPoints", getSelectedPoints(param, option)));
@@ -80,7 +83,7 @@ ChartTmpComp = withViewFn(ChartTmpComp, (comp) => {
}
});
// unbind
- return () => echartsCompInstance.off("selectchanged");
+ return () => echartsCompInstance?.off("selectchanged");
}, [onEvent]);
const echartsConfigChildren = _.omit(comp.children, echartsConfigOmitChildren);
@@ -96,27 +99,34 @@ ChartTmpComp = withViewFn(ChartTmpComp, (comp) => {
}, [mapScriptLoaded])
const loadGoogleMapsData = () => {
- const echartsCompInstance = echartsCompRef?.current?.getEchartsInstance();
- if (!echartsCompInstance) {
- return _.noop;
- }
- echartsCompInstance.getModel().getComponent("gmap").getGoogleMap();
+ setTimeout(() => {
+ setMapScriptLoaded(true);
+ const echartsCompInstance = echartsCompRef?.current?.getEchartsInstance();
+ if (!echartsCompInstance) {
+ return _.noop;
+ }
+
+ const mapInstance = echartsCompInstance?.getModel()?.getComponent("gmap")?.getGoogleMap();
+ comp.dispatch(changeChildAction("mapInstance", mapInstance));
+ }, 500)
}
const apiKey = comp.children.mapApiKey.getView();
const mode = comp.children.mode.getView();
useEffect(() => {
- if(mode === 'map') {
- const gMapScript = loadGoogleMapsScript('');
- if(isMapScriptLoaded) {
- loadGoogleMapsData();
- return;
- }
- gMapScript.addEventListener('load', function () {
- setMapScriptLoaded(true);
- loadGoogleMapsData();
- });
+ if( mode !== 'map') {
+ comp.dispatch(changeChildAction("mapInstance", undefined));
+ return;
+ }
+
+ const gMapScript = loadGoogleMapsScript(apiKey);
+ if(isMapScriptLoaded) {
+ loadGoogleMapsData();
+ return;
}
+ gMapScript.addEventListener('load', function () {
+ loadGoogleMapsData();
+ });
}, [mode, apiKey, option])
return (
@@ -142,6 +152,7 @@ ChartTmpComp = withViewFn(ChartTmpComp, (comp) => {
opts={{ locale: getEchartsLocale() }}
option={option}
theme={mode !== 'map' ? themeConfig : undefined}
+ mode={mode}
/>
)}
@@ -241,7 +252,7 @@ ChartTmpComp = class extends ChartTmpComp {
}
};
-const ChartComp = withExposingConfigs(ChartTmpComp, [
+let ChartComp = withExposingConfigs(ChartTmpComp, [
depsConfig({
name: "selectedPoints",
desc: trans("chart.selectedPointsDesc"),
@@ -266,6 +277,20 @@ const ChartComp = withExposingConfigs(ChartTmpComp, [
new NameConfig("title", trans("chart.titleDesc")),
]);
+ChartComp = withMethodExposing(ChartTmpComp, [
+ {
+ method: {
+ name: "getMapInstance",
+ },
+ execute: (comp) => {
+ return new Promise((resolve) => {
+ console.log(comp.children.mapInstance.getView())
+ resolve(comp.children.mapInstance.getView())
+ })
+ },
+ },
+])
+
export const ChartCompWithDefault = withDefault(ChartComp, {
xAxisKey: "date",
series: [
diff --git a/client/packages/lowcoder-comps/src/comps/chartComp/chartConfigs/chartUrls.tsx b/client/packages/lowcoder-comps/src/comps/chartComp/chartConfigs/chartUrls.tsx
index ef8ada4b0..320bfc0c1 100644
--- a/client/packages/lowcoder-comps/src/comps/chartComp/chartConfigs/chartUrls.tsx
+++ b/client/packages/lowcoder-comps/src/comps/chartComp/chartConfigs/chartUrls.tsx
@@ -4,6 +4,6 @@ const echartsUrlLocale = language === "zh" ? "zh" : "en";
export const optionUrl = `https://echarts.apache.org/${echartsUrlLocale}/option.html`;
export const examplesUrl = `https://echarts.apache.org/examples/${echartsUrlLocale}/index.html`;
export const xAxisTypeUrl = `${optionUrl}#xAxis.type`;
-export const googleMapsApiUrl = `https://maps.googleapis.com/maps/api/js`;
+export const googleMapsApiUrl = `https://maps.googleapis.com/maps/api/js?v=3.exp`;
export const mapOptionUrl = `https://github.com/plainheart/echarts-extension-gmap`;
export const mapExamplesUrl = `https://codepen.io/plainheart/pen/VweLGbR`;
\ No newline at end of file
diff --git a/client/packages/lowcoder-comps/src/comps/chartComp/chartConstants.tsx b/client/packages/lowcoder-comps/src/comps/chartComp/chartConstants.tsx
index 52e53b2b6..a35b5bf31 100644
--- a/client/packages/lowcoder-comps/src/comps/chartComp/chartConstants.tsx
+++ b/client/packages/lowcoder-comps/src/comps/chartComp/chartConstants.tsx
@@ -1,5 +1,5 @@
import { jsonControl, JSONObject, stateComp, toJSONObjectArray, toObject } from "lowcoder-sdk";
-import { withDefault, BooleanControl, StringControl, NumberControl, JSONObjectControl } from "lowcoder-sdk";
+import { withDefault, BooleanControl, StringControl, NumberControl, JSONObjectControl, FunctionControl } from "lowcoder-sdk";
import { dropdownControl } from "lowcoder-sdk";
import { eventHandlerControl } from "lowcoder-sdk";
import { valueComp, withType } from "lowcoder-sdk";
@@ -225,6 +225,8 @@ export const chartUiModeChildren = {
};
const chartMapModeChildren = {
+ mapInstance: stateComp(),
+ getMapInstance: FunctionControl,
mapApiKey: withDefault(StringControl, ''),
mapZoomLevel: withDefault(NumberControl, 3),
mapCenterLng: withDefault(NumberControl, 15.932644),
diff --git a/client/packages/lowcoder-comps/src/comps/chartComp/chartUtils.ts b/client/packages/lowcoder-comps/src/comps/chartComp/chartUtils.ts
index 14db6b7b8..489c9fd57 100644
--- a/client/packages/lowcoder-comps/src/comps/chartComp/chartUtils.ts
+++ b/client/packages/lowcoder-comps/src/comps/chartComp/chartUtils.ts
@@ -52,7 +52,7 @@ export function transformData(
}
const notAxisChartSet: Set = new Set(["pie"] as const);
-export const echartsConfigOmitChildren = ["hidden", "selectedPoints", "onEvent"] as const;
+export const echartsConfigOmitChildren = ["hidden", "selectedPoints", "onEvent", "mapInstance"] as const;
type EchartsConfigProps = Omit;
export function isAxisChart(type: CharOptionCompType) {
@@ -141,7 +141,7 @@ export function getEchartsConfig(props: EchartsConfigProps, chartSize?: ChartSiz
center: [mapCenterLng, mapCenterLat],
zoom: mapZoomLevel,
renderOnMoving: true,
- // echartsLayerZIndex: 2019,
+ echartsLayerZIndex: 2019,
roam: true
},
...echartsOption,
@@ -261,12 +261,18 @@ export function getSelectedPoints(param: any, option: any) {
}
export function loadGoogleMapsScript(apiKey?: string) {
- const mapsUrl = `${googleMapsApiUrl}?key=${apiKey}`;
+ const mapsUrl = `${googleMapsApiUrl}&key=${apiKey}`;
const scripts = document.getElementsByTagName('script');
- const scriptIndex = _.findIndex(scripts, (script) => script.src === mapsUrl);
+ // is script already loaded
+ let scriptIndex = _.findIndex(scripts, (script) => script.src.endsWith(mapsUrl));
if(scriptIndex > -1) {
return scripts[scriptIndex];
}
+ // is script loaded with diff api_key, remove the script and load again
+ scriptIndex = _.findIndex(scripts, (script) => script.src.startsWith(googleMapsApiUrl));
+ if(scriptIndex > -1) {
+ scripts[scriptIndex].remove();
+ }
const script = document.createElement("script");
script.type = "text/javascript";
diff --git a/client/packages/lowcoder-comps/src/comps/chartComp/reactEcharts/core.tsx b/client/packages/lowcoder-comps/src/comps/chartComp/reactEcharts/core.tsx
index c90bd5b3d..1b5d9410a 100644
--- a/client/packages/lowcoder-comps/src/comps/chartComp/reactEcharts/core.tsx
+++ b/client/packages/lowcoder-comps/src/comps/chartComp/reactEcharts/core.tsx
@@ -59,7 +59,8 @@ export default class EChartsReactCore extends PureComponent {
!isEqual(prevProps.theme, this.props.theme) ||
!isEqual(prevProps.opts, this.props.opts) ||
!isEqual(prevProps.onEvents, this.props.onEvents) ||
- this.props.option.gmap
+ !isEqual(prevProps.mode, this.props.mode)
+ // this.props.option.gmap
) {
this.dispose();
@@ -67,6 +68,11 @@ export default class EChartsReactCore extends PureComponent {
return;
}
+ if(this.props.mode === "json") {
+ this.updateEChartsOption();
+ return;
+ }
+
// when these props are not isEqual, update echarts
const pickKeys = ["option", "notMerge", "lazyUpdate", "showLoading", "loadingOption"];
if (!isEqual(_.pick(this.props, pickKeys), _.pick(prevProps, pickKeys))) {
diff --git a/client/packages/lowcoder-comps/src/comps/chartComp/reactEcharts/types.ts b/client/packages/lowcoder-comps/src/comps/chartComp/reactEcharts/types.ts
index b686408a4..2764d4b81 100644
--- a/client/packages/lowcoder-comps/src/comps/chartComp/reactEcharts/types.ts
+++ b/client/packages/lowcoder-comps/src/comps/chartComp/reactEcharts/types.ts
@@ -69,4 +69,8 @@ export type EChartsReactProps = {
* should update echarts options
*/
readonly shouldSetOption?: (prevProps: EChartsReactProps, props: EChartsReactProps) => boolean;
+ /**
+ * echarts mode: ui | json | map
+ */
+ readonly mode?: 'ui' | 'json' | 'map'
};
diff --git a/client/packages/lowcoder/package.json b/client/packages/lowcoder/package.json
index 3e5579d0d..b9fd727cf 100644
--- a/client/packages/lowcoder/package.json
+++ b/client/packages/lowcoder/package.json
@@ -48,7 +48,7 @@
"cnchar": "^3.2.4",
"copy-to-clipboard": "^3.3.3",
"core-js": "^3.25.2",
- "echarts": "^5.4.2",
+ "echarts": "^5.4.3",
"echarts-wordcloud": "^2.1.0",
"eslint4b-prebuilt-2": "^7.32.0",
"file-saver": "^2.0.5",
diff --git a/client/yarn.lock b/client/yarn.lock
index 1ba2ab280..af6402202 100644
--- a/client/yarn.lock
+++ b/client/yarn.lock
@@ -6331,7 +6331,7 @@ __metadata:
languageName: node
linkType: hard
-"color-name@npm:~1.1.4":
+"color-name@npm:^1.1.4, color-name@npm:~1.1.4":
version: 1.1.4
resolution: "color-name@npm:1.1.4"
checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
@@ -6839,6 +6839,13 @@ __metadata:
languageName: node
linkType: hard
+"cssfontparser@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "cssfontparser@npm:1.2.1"
+ checksum: 952d487cddab591fb944f2a4c326a7736bc963784a6d92b6ad4051f3bf5ee49a732eff62e29a52ff085197cb07f5bd66525a2245ded7fd356113ac81be9238b9
+ languageName: node
+ linkType: hard
+
"csso@npm:^4.2.0":
version: 4.2.0
resolution: "csso@npm:4.2.0"
@@ -7792,13 +7799,13 @@ __metadata:
languageName: node
linkType: hard
-"echarts@npm:^5.4.2":
- version: 5.4.2
- resolution: "echarts@npm:5.4.2"
+"echarts@npm:^5.4.3":
+ version: 5.4.3
+ resolution: "echarts@npm:5.4.3"
dependencies:
tslib: 2.3.0
- zrender: 5.4.3
- checksum: 933c28dada362314f7c7a5fd4243b44b24f75adb233f7c87541ac9a81734cb380a9683c3f56c8e559dacfddd363879e95a96f0047e33820123cd8f5b95b60f8f
+ zrender: 5.4.4
+ checksum: f4f69becf1cf8f546f9488ffa3bffaa971dcfbd49f5d635f288cbc8c5177839154bd6c325d6ed72c2b822c89c9bba4947ac73400614fd23c6f2f7ace3c939132
languageName: node
linkType: hard
@@ -10546,6 +10553,16 @@ __metadata:
languageName: node
linkType: hard
+"jest-canvas-mock@npm:^2.5.2":
+ version: 2.5.2
+ resolution: "jest-canvas-mock@npm:2.5.2"
+ dependencies:
+ cssfontparser: ^1.2.1
+ moo-color: ^1.0.2
+ checksum: a3004d2e96473049045e49dcf98e5ea6011494048ab42b5422b3089d9ff406aaca8353e79587055d840fa145541668eb8f78613765f252ad5901a8217e91ea5d
+ languageName: node
+ linkType: hard
+
"jest-changed-files@npm:^29.5.0":
version: 29.5.0
resolution: "jest-changed-files@npm:29.5.0"
@@ -11836,6 +11853,7 @@ __metadata:
echarts-extension-gmap: ^1.6.0
echarts-wordcloud: ^2.1.0
jest: 29.3.0
+ jest-canvas-mock: ^2.5.2
lowcoder-cli: "workspace:^"
lowcoder-sdk: "workspace:^"
mermaid: ^10.2.4
@@ -12006,7 +12024,7 @@ __metadata:
copy-to-clipboard: ^3.3.3
core-js: ^3.25.2
dotenv: ^16.0.3
- echarts: ^5.4.2
+ echarts: ^5.4.3
echarts-wordcloud: ^2.1.0
eslint: ^8.0.0
eslint-config-react-app: ^7.0.1
@@ -13060,6 +13078,15 @@ __metadata:
languageName: node
linkType: hard
+"moo-color@npm:^1.0.2":
+ version: 1.0.3
+ resolution: "moo-color@npm:1.0.3"
+ dependencies:
+ color-name: ^1.1.4
+ checksum: 02bf59b6bbd5e86641bc062e2dc0843e6e579e18ef67e1c8e93bfc01945df578f20e66ce16aa9632db2aa0e16806e0914a26eb345a804f45fff1ae12a8906a29
+ languageName: node
+ linkType: hard
+
"mq-polyfill@npm:^1.1.8":
version: 1.1.8
resolution: "mq-polyfill@npm:1.1.8"
@@ -19300,12 +19327,12 @@ __metadata:
languageName: node
linkType: hard
-"zrender@npm:5.4.3":
- version: 5.4.3
- resolution: "zrender@npm:5.4.3"
+"zrender@npm:5.4.4":
+ version: 5.4.4
+ resolution: "zrender@npm:5.4.4"
dependencies:
tslib: 2.3.0
- checksum: ae89584fbe4256217e500a74183fd5870a2bed7e7b3234cd78fcbc0a1a82da8449596b2019105927069531b567ecf94425fb171abd6cedcbf517e52fdf438722
+ checksum: 4b317346af8eca38e62ba029239c3a13e97eac4fa15b3ddadbae23442d8b373f0e937c255dee8080d6bb2fc79c9da54f1106415586ed8942bd8bc684b3890ea9
languageName: node
linkType: hard