var Mt, C, en, tn, We, G1, lb, on, Mn, C2 = {}, bn = [], pi = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;
function v1(t, e) {
for (var o in e) t[o] = e[o];
return t;
}
function zn(t) {
var e = t.parentNode;
e && e.removeChild(t);
}
function O(t, e, o) {
var M, b, z, n = {};
for (z in e) z == "key" ? M = e[z] : z == "ref" ? b = e[z] : n[z] = e[z];
if (arguments.length > 2 && (n.children = arguments.length > 3 ? Mt.call(arguments, 2) : o), typeof t == "function" && t.defaultProps != null) for (z in t.defaultProps) n[z] === void 0 && (n[z] = t.defaultProps[z]);
return g2(t, n, M, b, null);
}
function g2(t, e, o, M, b) {
var z = { type: t, props: e, key: o, ref: M, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: b ?? ++en };
return b == null && C.vnode != null && C.vnode(z), z;
}
function j() {
return { current: null };
}
function k(t) {
return t.children;
}
function ri(t, e, o, M, b) {
var z;
for (z in o) z === "children" || z === "key" || z in e || D2(t, z, null, o[z], M);
for (z in e) b && typeof e[z] != "function" || z === "children" || z === "key" || z === "value" || z === "checked" || o[z] === e[z] || D2(t, z, e[z], o[z], M);
}
function db(t, e, o) {
e[0] === "-" ? t.setProperty(e, o ?? "") : t[e] = o == null ? "" : typeof o != "number" || pi.test(e) ? o : o + "px";
}
function D2(t, e, o, M, b) {
var z;
e: if (e === "style") if (typeof o == "string") t.style.cssText = o;
else {
if (typeof M == "string" && (t.style.cssText = M = ""), M) for (e in M) o && e in o || db(t.style, e, "");
if (o) for (e in o) M && o[e] === M[e] || db(t.style, e, o[e]);
}
else if (e[0] === "o" && e[1] === "n") z = e !== (e = e.replace(/Capture$/, "")), e = e.toLowerCase() in t ? e.toLowerCase().slice(2) : e.slice(2), t.l || (t.l = {}), t.l[e + z] = o, o ? M || t.addEventListener(e, z ? ub : Ab, z) : t.removeEventListener(e, z ? ub : Ab, z);
else if (e !== "dangerouslySetInnerHTML") {
if (b) e = e.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s");
else if (e !== "width" && e !== "height" && e !== "href" && e !== "list" && e !== "form" && e !== "tabIndex" && e !== "download" && e in t) try {
t[e] = o ?? "";
break e;
} catch {
}
typeof o == "function" || (o == null || o === !1 && e.indexOf("-") == -1 ? t.removeAttribute(e) : t.setAttribute(e, o));
}
}
function Ab(t) {
We = !0;
try {
return this.l[t.type + !1](C.event ? C.event(t) : t);
} finally {
We = !1;
}
}
function ub(t) {
We = !0;
try {
return this.l[t.type + !0](C.event ? C.event(t) : t);
} finally {
We = !1;
}
}
function E0(t, e) {
this.props = t, this.context = e;
}
function Ye(t, e) {
if (e == null) return t.__ ? Ye(t.__, t.__.__k.indexOf(t) + 1) : null;
for (var o; e < t.__k.length; e++) if ((o = t.__k[e]) != null && o.__e != null) return o.__e;
return typeof t.type == "function" ? Ye(t) : null;
}
function nn(t) {
var e, o;
if ((t = t.__) != null && t.__c != null) {
for (t.__e = t.__c.base = null, e = 0; e < t.__k.length; e++) if ((o = t.__k[e]) != null && o.__e != null) {
t.__e = t.__c.base = o.__e;
break;
}
return nn(t);
}
}
function ci(t) {
We ? setTimeout(t) : on(t);
}
function io(t) {
(!t.__d && (t.__d = !0) && G1.push(t) && !X2.__r++ || lb !== C.debounceRendering) && ((lb = C.debounceRendering) || ci)(X2);
}
function X2() {
var t, e, o, M, b, z, n, p;
for (G1.sort(function(r, c) {
return r.__v.__b - c.__v.__b;
}); t = G1.shift(); ) t.__d && (e = G1.length, M = void 0, b = void 0, n = (z = (o = t).__v).__e, (p = o.__P) && (M = [], (b = v1({}, z)).__v = z.__v + 1, Fo(p, z, b, o.__n, p.ownerSVGElement !== void 0, z.__h != null ? [n] : null, M, n ?? Ye(z), z.__h), sn(M, z), z.__e != n && nn(z)), G1.length > e && G1.sort(function(r, c) {
return r.__v.__b - c.__v.__b;
}));
X2.__r = 0;
}
function pn(t, e, o, M, b, z, n, p, r, c) {
var i, a, s, l, d, A, u, W = M && M.__k || bn, h = W.length;
for (o.__k = [], i = 0; i < e.length; i++) if ((l = o.__k[i] = (l = e[i]) == null || typeof l == "boolean" ? null : typeof l == "string" || typeof l == "number" || typeof l == "bigint" ? g2(null, l, null, null, l) : Array.isArray(l) ? g2(k, { children: l }, null, null, null) : l.__b > 0 ? g2(l.type, l.props, l.key, l.ref ? l.ref : null, l.__v) : l) != null) {
if (l.__ = o, l.__b = o.__b + 1, (s = W[i]) === null || s && l.key == s.key && l.type === s.type) W[i] = void 0;
else for (a = 0; a < h; a++) {
if ((s = W[a]) && l.key == s.key && l.type === s.type) {
W[a] = void 0;
break;
}
s = null;
}
Fo(t, l, s = s || C2, b, z, n, p, r, c), d = l.__e, (a = l.ref) && s.ref != a && (u || (u = []), s.ref && u.push(s.ref, null, l), u.push(a, l.__c || d, l)), d != null ? (A == null && (A = d), typeof l.type == "function" && l.__k === s.__k ? l.__d = r = rn(l, r, t) : r = cn(t, l, s, W, d, r), typeof o.type == "function" && (o.__d = r)) : r && s.__e == r && r.parentNode != t && (r = Ye(s));
}
for (o.__e = A, i = h; i--; ) W[i] != null && (typeof o.type == "function" && W[i].__e != null && W[i].__e == o.__d && (o.__d = an(M).nextSibling), ln(W[i], W[i]));
if (u) for (i = 0; i < u.length; i++) On(u[i], u[++i], u[++i]);
}
function rn(t, e, o) {
for (var M, b = t.__k, z = 0; b && z < b.length; z++) (M = b[z]) && (M.__ = t, e = typeof M.type == "function" ? rn(M, e, o) : cn(o, M, M, b, M.__e, e));
return e;
}
function k2(t, e) {
return e = e || [], t == null || typeof t == "boolean" || (Array.isArray(t) ? t.some(function(o) {
k2(o, e);
}) : e.push(t)), e;
}
function cn(t, e, o, M, b, z) {
var n, p, r;
if (e.__d !== void 0) n = e.__d, e.__d = void 0;
else if (o == null || b != z || b.parentNode == null) e: if (z == null || z.parentNode !== t) t.appendChild(b), n = null;
else {
for (p = z, r = 0; (p = p.nextSibling) && r < M.length; r += 1) if (p == b) break e;
t.insertBefore(b, z), n = z;
}
return n !== void 0 ? n : b.nextSibling;
}
function an(t) {
var e, o, M;
if (t.type == null || typeof t.type == "string") return t.__e;
if (t.__k) {
for (e = t.__k.length - 1; e >= 0; e--) if ((o = t.__k[e]) && (M = an(o))) return M;
}
return null;
}
function Fo(t, e, o, M, b, z, n, p, r) {
var c, i, a, s, l, d, A, u, W, h, y, S, _, X, $, H = e.type;
if (e.constructor !== void 0) return null;
o.__h != null && (r = o.__h, p = e.__e = o.__e, e.__h = null, z = [p]), (c = C.__b) && c(e);
try {
e: if (typeof H == "function") {
if (u = e.props, W = (c = H.contextType) && M[c.__c], h = c ? W ? W.props.value : c.__ : M, o.__c ? A = (i = e.__c = o.__c).__ = i.__E : ("prototype" in H && H.prototype.render ? e.__c = i = new H(u, h) : (e.__c = i = new E0(u, h), i.constructor = H, i.render = ai), W && W.sub(i), i.props = u, i.state || (i.state = {}), i.context = h, i.__n = M, a = i.__d = !0, i.__h = [], i._sb = []), i.__s == null && (i.__s = i.state), H.getDerivedStateFromProps != null && (i.__s == i.state && (i.__s = v1({}, i.__s)), v1(i.__s, H.getDerivedStateFromProps(u, i.__s))), s = i.props, l = i.state, i.__v = e, a) H.getDerivedStateFromProps == null && i.componentWillMount != null && i.componentWillMount(), i.componentDidMount != null && i.__h.push(i.componentDidMount);
else {
if (H.getDerivedStateFromProps == null && u !== s && i.componentWillReceiveProps != null && i.componentWillReceiveProps(u, h), !i.__e && i.shouldComponentUpdate != null && i.shouldComponentUpdate(u, i.__s, h) === !1 || e.__v === o.__v) {
for (e.__v !== o.__v && (i.props = u, i.state = i.__s, i.__d = !1), e.__e = o.__e, e.__k = o.__k, e.__k.forEach(function(N0) {
N0 && (N0.__ = e);
}), y = 0; y < i._sb.length; y++) i.__h.push(i._sb[y]);
i._sb = [], i.__h.length && n.push(i);
break e;
}
i.componentWillUpdate != null && i.componentWillUpdate(u, i.__s, h), i.componentDidUpdate != null && i.__h.push(function() {
i.componentDidUpdate(s, l, d);
});
}
if (i.context = h, i.props = u, i.__P = t, S = C.__r, _ = 0, "prototype" in H && H.prototype.render) {
for (i.state = i.__s, i.__d = !1, S && S(e), c = i.render(i.props, i.state, i.context), X = 0; X < i._sb.length; X++) i.__h.push(i._sb[X]);
i._sb = [];
} else do
i.__d = !1, S && S(e), c = i.render(i.props, i.state, i.context), i.state = i.__s;
while (i.__d && ++_ < 25);
i.state = i.__s, i.getChildContext != null && (M = v1(v1({}, M), i.getChildContext())), a || i.getSnapshotBeforeUpdate == null || (d = i.getSnapshotBeforeUpdate(s, l)), $ = c != null && c.type === k && c.key == null ? c.props.children : c, pn(t, Array.isArray($) ? $ : [$], e, o, M, b, z, n, p, r), i.base = e.__e, e.__h = null, i.__h.length && n.push(i), A && (i.__E = i.__ = null), i.__e = !1;
} else z == null && e.__v === o.__v ? (e.__k = o.__k, e.__e = o.__e) : e.__e = ii(o.__e, e, o, M, b, z, n, r);
(c = C.diffed) && c(e);
} catch (N0) {
e.__v = null, (r || z != null) && (e.__e = p, e.__h = !!r, z[z.indexOf(p)] = null), C.__e(N0, e, o);
}
}
function sn(t, e) {
C.__c && C.__c(e, t), t.some(function(o) {
try {
t = o.__h, o.__h = [], t.some(function(M) {
M.call(o);
});
} catch (M) {
C.__e(M, o.__v);
}
});
}
function ii(t, e, o, M, b, z, n, p) {
var r, c, i, a = o.props, s = e.props, l = e.type, d = 0;
if (l === "svg" && (b = !0), z != null) {
for (; d < z.length; d++) if ((r = z[d]) && "setAttribute" in r == !!l && (l ? r.localName === l : r.nodeType === 3)) {
t = r, z[d] = null;
break;
}
}
if (t == null) {
if (l === null) return document.createTextNode(s);
t = b ? document.createElementNS("http://www.w3.org/2000/svg", l) : document.createElement(l, s.is && s), z = null, p = !1;
}
if (l === null) a === s || p && t.data === s || (t.data = s);
else {
if (z = z && Mt.call(t.childNodes), c = (a = o.props || C2).dangerouslySetInnerHTML, i = s.dangerouslySetInnerHTML, !p) {
if (z != null) for (a = {}, d = 0; d < t.attributes.length; d++) a[t.attributes[d].name] = t.attributes[d].value;
(i || c) && (i && (c && i.__html == c.__html || i.__html === t.innerHTML) || (t.innerHTML = i && i.__html || ""));
}
if (ri(t, s, a, b, p), i) e.__k = [];
else if (d = e.props.children, pn(t, Array.isArray(d) ? d : [d], e, o, M, b && l !== "foreignObject", z, n, z ? z[0] : o.__k && Ye(o, 0), p), z != null) for (d = z.length; d--; ) z[d] != null && zn(z[d]);
p || ("value" in s && (d = s.value) !== void 0 && (d !== t.value || l === "progress" && !d || l === "option" && d !== a.value) && D2(t, "value", d, a.value, !1), "checked" in s && (d = s.checked) !== void 0 && d !== t.checked && D2(t, "checked", d, a.checked, !1));
}
return t;
}
function On(t, e, o) {
try {
typeof t == "function" ? t(e) : t.current = e;
} catch (M) {
C.__e(M, o);
}
}
function ln(t, e, o) {
var M, b;
if (C.unmount && C.unmount(t), (M = t.ref) && (M.current && M.current !== t.__e || On(M, null, e)), (M = t.__c) != null) {
if (M.componentWillUnmount) try {
M.componentWillUnmount();
} catch (z) {
C.__e(z, e);
}
M.base = M.__P = null, t.__c = void 0;
}
if (M = t.__k) for (b = 0; b < M.length; b++) M[b] && ln(M[b], e, o || typeof t.type != "function");
o || t.__e == null || zn(t.__e), t.__ = t.__e = t.__d = void 0;
}
function ai(t, e, o) {
return this.constructor(t, o);
}
function Ve(t, e, o) {
var M, b, z;
C.__ && C.__(t, e), b = (M = !1) ? null : e.__k, z = [], Fo(e, t = e.__k = O(k, null, [t]), b || C2, C2, e.ownerSVGElement !== void 0, b ? null : e.firstChild ? Mt.call(e.childNodes) : null, z, b ? b.__e : e.firstChild, M), sn(z, t);
}
function si(t, e) {
var o = { __c: e = "__cC" + Mn++, __: t, Consumer: function(M, b) {
return M.children(b);
}, Provider: function(M) {
var b, z;
return this.getChildContext || (b = [], (z = {})[e] = this, this.getChildContext = function() {
return z;
}, this.shouldComponentUpdate = function(n) {
this.props.value !== n.value && b.some(function(p) {
p.__e = !0, io(p);
});
}, this.sub = function(n) {
b.push(n);
var p = n.componentWillUnmount;
n.componentWillUnmount = function() {
b.splice(b.indexOf(n), 1), p && p.call(n);
};
}), M.children;
} };
return o.Provider.__ = o.Consumer.contextType = o;
}
Mt = bn.slice, C = { __e: function(t, e, o, M) {
for (var b, z, n; e = e.__; ) if ((b = e.__c) && !b.__) try {
if ((z = b.constructor) && z.getDerivedStateFromError != null && (b.setState(z.getDerivedStateFromError(t)), n = b.__d), b.componentDidCatch != null && (b.componentDidCatch(t, M || {}), n = b.__d), n) return b.__E = b;
} catch (p) {
t = p;
}
throw t;
} }, en = 0, tn = function(t) {
return t != null && t.constructor === void 0;
}, We = !1, E0.prototype.setState = function(t, e) {
var o;
o = this.__s != null && this.__s !== this.state ? this.__s : this.__s = v1({}, this.state), typeof t == "function" && (t = t(v1({}, o), this.props)), t && v1(o, t), t != null && this.__v && (e && this._sb.push(e), io(this));
}, E0.prototype.forceUpdate = function(t) {
this.__v && (this.__e = !0, t && this.__h.push(t), io(this));
}, E0.prototype.render = k, G1 = [], on = typeof Promise == "function" ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, X2.__r = 0, Mn = 0;
var J0, Xt, qb, dn = [], kt = [], fb = C.__b, Wb = C.__r, hb = C.diffed, Rb = C.__c, mb = C.unmount;
function Oi() {
for (var t; t = dn.shift(); ) if (t.__P && t.__H) try {
t.__H.__h.forEach(L2), t.__H.__h.forEach(ao), t.__H.__h = [];
} catch (e) {
t.__H.__h = [], C.__e(e, t.__v);
}
}
C.__b = function(t) {
J0 = null, fb && fb(t);
}, C.__r = function(t) {
Wb && Wb(t);
var e = (J0 = t.__c).__H;
e && (Xt === J0 ? (e.__h = [], J0.__h = [], e.__.forEach(function(o) {
o.__N && (o.__ = o.__N), o.__V = kt, o.__N = o.i = void 0;
})) : (e.__h.forEach(L2), e.__h.forEach(ao), e.__h = [])), Xt = J0;
}, C.diffed = function(t) {
hb && hb(t);
var e = t.__c;
e && e.__H && (e.__H.__h.length && (dn.push(e) !== 1 && qb === C.requestAnimationFrame || ((qb = C.requestAnimationFrame) || li)(Oi)), e.__H.__.forEach(function(o) {
o.i && (o.__H = o.i), o.__V !== kt && (o.__ = o.__V), o.i = void 0, o.__V = kt;
})), Xt = J0 = null;
}, C.__c = function(t, e) {
e.some(function(o) {
try {
o.__h.forEach(L2), o.__h = o.__h.filter(function(M) {
return !M.__ || ao(M);
});
} catch (M) {
e.some(function(b) {
b.__h && (b.__h = []);
}), e = [], C.__e(M, o.__v);
}
}), Rb && Rb(t, e);
}, C.unmount = function(t) {
mb && mb(t);
var e, o = t.__c;
o && o.__H && (o.__H.__.forEach(function(M) {
try {
L2(M);
} catch (b) {
e = b;
}
}), o.__H = void 0, e && C.__e(e, o.__v));
};
var gb = typeof requestAnimationFrame == "function";
function li(t) {
var e, o = function() {
clearTimeout(M), gb && cancelAnimationFrame(e), setTimeout(t);
}, M = setTimeout(o, 100);
gb && (e = requestAnimationFrame(o));
}
function L2(t) {
var e = J0, o = t.__c;
typeof o == "function" && (t.__c = void 0, o()), J0 = e;
}
function ao(t) {
var e = J0;
t.__c = t.__(), J0 = e;
}
function di(t, e) {
for (var o in e) t[o] = e[o];
return t;
}
function Lb(t, e) {
for (var o in t) if (o !== "__source" && !(o in e)) return !0;
for (var M in e) if (M !== "__source" && t[M] !== e[M]) return !0;
return !1;
}
function yb(t) {
this.props = t;
}
(yb.prototype = new E0()).isPureReactComponent = !0, yb.prototype.shouldComponentUpdate = function(t, e) {
return Lb(this.props, t) || Lb(this.state, e);
};
var vb = C.__b;
C.__b = function(t) {
t.type && t.type.__f && t.ref && (t.props.ref = t.ref, t.ref = null), vb && vb(t);
};
var Ai = C.__e;
C.__e = function(t, e, o, M) {
if (t.then) {
for (var b, z = e; z = z.__; ) if ((b = z.__c) && b.__c) return e.__e == null && (e.__e = o.__e, e.__k = o.__k), b.__c(t, e);
}
Ai(t, e, o, M);
};
var Nb = C.unmount;
function An(t, e, o) {
return t && (t.__c && t.__c.__H && (t.__c.__H.__.forEach(function(M) {
typeof M.__c == "function" && M.__c();
}), t.__c.__H = null), (t = di({}, t)).__c != null && (t.__c.__P === o && (t.__c.__P = e), t.__c = null), t.__k = t.__k && t.__k.map(function(M) {
return An(M, e, o);
})), t;
}
function un(t, e, o) {
return t && (t.__v = null, t.__k = t.__k && t.__k.map(function(M) {
return un(M, e, o);
}), t.__c && t.__c.__P === e && (t.__e && o.insertBefore(t.__e, t.__d), t.__c.__e = !0, t.__c.__P = o)), t;
}
function xt() {
this.__u = 0, this.t = null, this.__b = null;
}
function qn(t) {
var e = t.__.__c;
return e && e.__a && e.__a(t);
}
function l2() {
this.u = null, this.o = null;
}
C.unmount = function(t) {
var e = t.__c;
e && e.__R && e.__R(), e && t.__h === !0 && (t.type = null), Nb && Nb(t);
}, (xt.prototype = new E0()).__c = function(t, e) {
var o = e.__c, M = this;
M.t == null && (M.t = []), M.t.push(o);
var b = qn(M.__v), z = !1, n = function() {
z || (z = !0, o.__R = null, b ? b(p) : p());
};
o.__R = n;
var p = function() {
if (!--M.__u) {
if (M.state.__a) {
var c = M.state.__a;
M.__v.__k[0] = un(c, c.__c.__P, c.__c.__O);
}
var i;
for (M.setState({ __a: M.__b = null }); i = M.t.pop(); ) i.forceUpdate();
}
}, r = e.__h === !0;
M.__u++ || r || M.setState({ __a: M.__b = M.__v.__k[0] }), t.then(n, n);
}, xt.prototype.componentWillUnmount = function() {
this.t = [];
}, xt.prototype.render = function(t, e) {
if (this.__b) {
if (this.__v.__k) {
var o = document.createElement("div"), M = this.__v.__k[0].__c;
this.__v.__k[0] = An(this.__b, o, M.__O = M.__P);
}
this.__b = null;
}
var b = e.__a && O(k, null, t.fallback);
return b && (b.__h = null), [O(k, null, e.__a ? null : t.children), b];
};
var Tb = function(t, e, o) {
if (++o[1] === o[0] && t.o.delete(e), t.props.revealOrder && (t.props.revealOrder[0] !== "t" || !t.o.size)) for (o = t.u; o; ) {
for (; o.length > 3; ) o.pop()();
if (o[1] < o[0]) break;
t.u = o = o[2];
}
};
function ui(t) {
return this.getChildContext = function() {
return t.context;
}, t.children;
}
function qi(t) {
var e = this, o = t.i;
e.componentWillUnmount = function() {
Ve(null, e.l), e.l = null, e.i = null;
}, e.i && e.i !== o && e.componentWillUnmount(), t.__v ? (e.l || (e.i = o, e.l = { nodeType: 1, parentNode: o, childNodes: [], appendChild: function(M) {
this.childNodes.push(M), e.i.appendChild(M);
}, insertBefore: function(M, b) {
this.childNodes.push(M), e.i.appendChild(M);
}, removeChild: function(M) {
this.childNodes.splice(this.childNodes.indexOf(M) >>> 1, 1), e.i.removeChild(M);
} }), Ve(O(ui, { context: e.context }, t.__v), e.l)) : e.l && e.componentWillUnmount();
}
function fi(t, e) {
var o = O(qi, { __v: t, i: e });
return o.containerInfo = e, o;
}
(l2.prototype = new E0()).__a = function(t) {
var e = this, o = qn(e.__v), M = e.o.get(t);
return M[0]++, function(b) {
var z = function() {
e.props.revealOrder ? (M.push(b), Tb(e, t, M)) : b();
};
o ? o(z) : z();
};
}, l2.prototype.render = function(t) {
this.u = null, this.o = /* @__PURE__ */ new Map();
var e = k2(t.children);
t.revealOrder && t.revealOrder[0] === "b" && e.reverse();
for (var o = e.length; o--; ) this.o.set(e[o], this.u = [1, 0, this.u]);
return t.children;
}, l2.prototype.componentDidUpdate = l2.prototype.componentDidMount = function() {
var t = this;
this.o.forEach(function(e, o) {
Tb(t, o, e);
});
};
var Wi = typeof Symbol < "u" && Symbol.for && /* @__PURE__ */ Symbol.for("react.element") || 60103, hi = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, Ri = typeof document < "u", mi = function(t) {
return (typeof Symbol < "u" && typeof /* @__PURE__ */ Symbol() == "symbol" ? /fil|che|rad/i : /fil|che|ra/i).test(t);
};
E0.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t) {
Object.defineProperty(E0.prototype, t, { configurable: !0, get: function() {
return this["UNSAFE_" + t];
}, set: function(e) {
Object.defineProperty(this, t, { configurable: !0, writable: !0, value: e });
} });
});
var Bb = C.event;
function gi() {
}
function Li() {
return this.cancelBubble;
}
function yi() {
return this.defaultPrevented;
}
C.event = function(t) {
return Bb && (t = Bb(t)), t.persist = gi, t.isPropagationStopped = Li, t.isDefaultPrevented = yi, t.nativeEvent = t;
};
var Sb = { configurable: !0, get: function() {
return this.class;
} }, Eb = C.vnode;
C.vnode = function(t) {
var e = t.type, o = t.props, M = o;
if (typeof e == "string") {
var b = e.indexOf("-") === -1;
for (var z in M = {}, o) {
var n = o[z];
Ri && z === "children" && e === "noscript" || z === "value" && "defaultValue" in o && n == null || (z === "defaultValue" && "value" in o && o.value == null ? z = "value" : z === "download" && n === !0 ? n = "" : /ondoubleclick/i.test(z) ? z = "ondblclick" : /^onchange(textarea|input)/i.test(z + e) && !mi(o.type) ? z = "oninput" : /^onfocus$/i.test(z) ? z = "onfocusin" : /^onblur$/i.test(z) ? z = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(z) ? z = z.toLowerCase() : b && hi.test(z) ? z = z.replace(/[A-Z0-9]/g, "-$&").toLowerCase() : n === null && (n = void 0), /^oninput$/i.test(z) && (z = z.toLowerCase(), M[z] && (z = "oninputCapture")), M[z] = n);
}
e == "select" && M.multiple && Array.isArray(M.value) && (M.value = k2(o.children).forEach(function(p) {
p.props.selected = M.value.indexOf(p.props.value) != -1;
})), e == "select" && M.defaultValue != null && (M.value = k2(o.children).forEach(function(p) {
p.props.selected = M.multiple ? M.defaultValue.indexOf(p.props.value) != -1 : M.defaultValue == p.props.value;
})), t.props = M, o.class != o.className && (Sb.enumerable = "className" in o, o.className != null && (M.class = o.className), Object.defineProperty(M, "className", Sb));
}
t.$$typeof = Wi, Eb && Eb(t);
};
var wb = C.__r;
C.__r = function(t) {
wb && wb(t), t.__c;
};
const fn = [], so = /* @__PURE__ */ new Map();
function _1(t) {
fn.push(t), so.forEach((e) => {
hn(e, t);
});
}
function vi(t) {
t.isConnected && // sometimes true if SSR system simulates DOM
t.getRootNode && Wn(t.getRootNode());
}
function Wn(t) {
let e = so.get(t);
if (!e || !e.isConnected) {
if (e = t.querySelector("style[data-fullcalendar]"), !e) {
e = document.createElement("style"), e.setAttribute("data-fullcalendar", "");
const o = Ti();
o && (e.nonce = o);
const M = t === document ? document.head : t, b = t === document ? M.querySelector("script,link[rel=stylesheet],link[as=style],style") : M.firstChild;
M.insertBefore(e, b);
}
so.set(t, e), Ni(e);
}
}
function Ni(t) {
for (const e of fn)
hn(t, e);
}
function hn(t, e) {
const { sheet: o } = t, M = o.cssRules.length;
e.split("}").forEach((b, z) => {
b = b.trim(), b && o.insertRule(b + "}", M + z);
});
}
let _t;
function Ti() {
return _t === void 0 && (_t = Bi()), _t;
}
function Bi() {
const t = document.querySelector('meta[name="csp-nonce"]');
if (t && t.hasAttribute("content"))
return t.getAttribute("content");
const e = document.querySelector("script[nonce]");
return e && e.nonce || "";
}
typeof document < "u" && Wn(document);
var Si = ':root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:"\\e900"}.fc-icon-chevron-right:before{content:"\\e901"}.fc-icon-chevrons-left:before{content:"\\e902"}.fc-icon-chevrons-right:before{content:"\\e903"}.fc-icon-minus-square:before{content:"\\e904"}.fc-icon-plus-square:before{content:"\\e905"}.fc-icon-x:before{content:"\\e906"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:"";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:"";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}';
_1(Si);
class Qe {
constructor(e) {
this.drainedOption = e, this.isRunning = !1, this.isDirty = !1, this.pauseDepths = {}, this.timeoutId = 0;
}
request(e) {
this.isDirty = !0, this.isPaused() || (this.clearTimeout(), e == null ? this.tryDrain() : this.timeoutId = setTimeout(
// NOT OPTIMAL! TODO: look at debounce
this.tryDrain.bind(this),
e
));
}
pause(e = "") {
let { pauseDepths: o } = this;
o[e] = (o[e] || 0) + 1, this.clearTimeout();
}
resume(e = "", o) {
let { pauseDepths: M } = this;
e in M && (o ? delete M[e] : (M[e] -= 1, M[e] <= 0 && delete M[e]), this.tryDrain());
}
isPaused() {
return Object.keys(this.pauseDepths).length;
}
tryDrain() {
if (!this.isRunning && !this.isPaused()) {
for (this.isRunning = !0; this.isDirty; )
this.isDirty = !1, this.drained();
this.isRunning = !1;
}
}
clear() {
this.clearTimeout(), this.isDirty = !1, this.pauseDepths = {};
}
clearTimeout() {
this.timeoutId && (clearTimeout(this.timeoutId), this.timeoutId = 0);
}
drained() {
this.drainedOption && this.drainedOption();
}
}
function bt(t) {
t.parentNode && t.parentNode.removeChild(t);
}
function q0(t, e) {
if (t.closest)
return t.closest(e);
if (!document.documentElement.contains(t))
return null;
do {
if (Rn(t, e))
return t;
t = t.parentElement || t.parentNode;
} while (t !== null && t.nodeType === 1);
return null;
}
function Rn(t, e) {
return (t.matches || t.matchesSelector || t.msMatchesSelector).call(t, e);
}
function te(t, e) {
let o = t instanceof HTMLElement ? [t] : t, M = [];
for (let b = 0; b < o.length; b += 1) {
let z = o[b].querySelectorAll(e);
for (let n = 0; n < z.length; n += 1)
M.push(z[n]);
}
return M;
}
function Ei(t, e) {
let o = t instanceof HTMLElement ? [t] : t, M = [];
for (let b = 0; b < o.length; b += 1) {
let z = o[b].children;
for (let n = 0; n < z.length; n += 1) {
let p = z[n];
Rn(p, e) && M.push(p);
}
}
return M;
}
const wi = /(top|left|right|bottom|width|height)$/i;
function le(t, e) {
for (let o in e)
mn(t, o, e[o]);
}
function mn(t, e, o) {
o == null ? t.style[e] = "" : typeof o == "number" && wi.test(e) ? t.style[e] = `${o}px` : t.style[e] = o;
}
function gn(t) {
var e, o;
return (o = (e = t.composedPath) === null || e === void 0 ? void 0 : e.call(t)[0]) !== null && o !== void 0 ? o : t.target;
}
let Cb = 0;
function A1() {
return Cb += 1, "fc-dom-" + Cb;
}
function zt(t) {
t.preventDefault();
}
function Ci(t, e) {
return (o) => {
let M = q0(o.target, t);
M && e.call(M, o, M);
};
}
function Ln(t, e, o, M) {
let b = Ci(o, M);
return t.addEventListener(e, b), () => {
t.removeEventListener(e, b);
};
}
function Di(t, e, o, M) {
let b;
return Ln(t, "mouseover", e, (z, n) => {
if (n !== b) {
b = n, o(z, n);
let p = (r) => {
b = null, M(r, n), n.removeEventListener("mouseleave", p);
};
n.addEventListener("mouseleave", p);
}
});
}
const Db = [
"webkitTransitionEnd",
"otransitionend",
"oTransitionEnd",
"msTransitionEnd",
"transitionend"
];
function Xi(t, e) {
let o = (M) => {
e(M), Db.forEach((b) => {
t.removeEventListener(b, o);
});
};
Db.forEach((M) => {
t.addEventListener(M, o);
});
}
function yn(t) {
return Object.assign({ onClick: t }, vn(t));
}
function vn(t) {
return {
tabIndex: 0,
onKeyDown(e) {
(e.key === "Enter" || e.key === " ") && (t(e), e.preventDefault());
}
};
}
let Xb = 0;
function z1() {
return Xb += 1, String(Xb);
}
function Go() {
document.body.classList.add("fc-not-allowed");
}
function Yo() {
document.body.classList.remove("fc-not-allowed");
}
function ki(t) {
t.style.userSelect = "none", t.style.webkitUserSelect = "none", t.addEventListener("selectstart", zt);
}
function xi(t) {
t.style.userSelect = "", t.style.webkitUserSelect = "", t.removeEventListener("selectstart", zt);
}
function _i(t) {
t.addEventListener("contextmenu", zt);
}
function Ii(t) {
t.removeEventListener("contextmenu", zt);
}
function Vo(t) {
let e = [], o = [], M, b;
for (typeof t == "string" ? o = t.split(/\s*,\s*/) : typeof t == "function" ? o = [t] : Array.isArray(t) && (o = t), M = 0; M < o.length; M += 1)
b = o[M], typeof b == "string" ? e.push(b.charAt(0) === "-" ? { field: b.substring(1), order: -1 } : { field: b, order: 1 }) : typeof b == "function" && e.push({ func: b });
return e;
}
function Nn(t, e, o) {
let M, b;
for (M = 0; M < o.length; M += 1)
if (b = Pi(t, e, o[M]), b)
return b;
return 0;
}
function Pi(t, e, o) {
return o.func ? o.func(t, e) : Tn(t[o.field], e[o.field]) * (o.order || 1);
}
function Tn(t, e) {
return !t && !e ? 0 : e == null ? -1 : t == null ? 1 : typeof t == "string" || typeof e == "string" ? String(t).localeCompare(String(e)) : t - e;
}
function u1(t, e) {
let o = String(t);
return "000".substr(0, e - o.length) + o;
}
function He(t, e, o) {
return typeof t == "function" ? t(...e) : typeof t == "string" ? e.reduce((M, b, z) => M.replace("$" + z, b || ""), t) : o;
}
function Hi(t, e) {
return t - e;
}
function V1(t) {
return t % 1 === 0;
}
function Ui(t) {
let e = t.querySelector(".fc-scrollgrid-shrink-frame"), o = t.querySelector(".fc-scrollgrid-shrink-cushion");
if (!e)
throw new Error("needs fc-scrollgrid-shrink-frame className");
if (!o)
throw new Error("needs fc-scrollgrid-shrink-cushion className");
return t.getBoundingClientRect().width - e.getBoundingClientRect().width + // the cell padding+border
o.getBoundingClientRect().width;
}
const kb = ["years", "months", "days", "milliseconds"], ji = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;
function P(t, e) {
return typeof t == "string" ? Fi(t) : typeof t == "object" && t ? xb(t) : typeof t == "number" ? xb({ [e || "milliseconds"]: t }) : null;
}
function Fi(t) {
let e = ji.exec(t);
if (e) {
let o = e[1] ? -1 : 1;
return {
years: 0,
months: 0,
days: o * (e[2] ? parseInt(e[2], 10) : 0),
milliseconds: o * ((e[3] ? parseInt(e[3], 10) : 0) * 60 * 60 * 1e3 + // hours
(e[4] ? parseInt(e[4], 10) : 0) * 60 * 1e3 + // minutes
(e[5] ? parseInt(e[5], 10) : 0) * 1e3 + // seconds
(e[6] ? parseInt(e[6], 10) : 0))
};
}
return null;
}
function xb(t) {
let e = {
years: t.years || t.year || 0,
months: t.months || t.month || 0,
days: t.days || t.day || 0,
milliseconds: (t.hours || t.hour || 0) * 60 * 60 * 1e3 + // hours
(t.minutes || t.minute || 0) * 60 * 1e3 + // minutes
(t.seconds || t.second || 0) * 1e3 + // seconds
(t.milliseconds || t.millisecond || t.ms || 0)
// ms
}, o = t.weeks || t.week;
return o && (e.days += o * 7, e.specifiedWeeks = !0), e;
}
function Gi(t, e) {
return t.years === e.years && t.months === e.months && t.days === e.days && t.milliseconds === e.milliseconds;
}
function Bn(t) {
return !t.years && !t.months && !t.milliseconds ? t.days : 0;
}
function Oo(t, e) {
return {
years: t.years + e.years,
months: t.months + e.months,
days: t.days + e.days,
milliseconds: t.milliseconds + e.milliseconds
};
}
function Yi(t, e) {
return {
years: t.years - e.years,
months: t.months - e.months,
days: t.days - e.days,
milliseconds: t.milliseconds - e.milliseconds
};
}
function Sn(t, e) {
return {
years: t.years * e,
months: t.months * e,
days: t.days * e,
milliseconds: t.milliseconds * e
};
}
function Vi(t) {
return de(t) / 365;
}
function Qi(t) {
return de(t) / 30;
}
function de(t) {
return g0(t) / 864e5;
}
function Ki(t) {
return g0(t) / (1e3 * 60);
}
function $i(t) {
return g0(t) / 1e3;
}
function g0(t) {
return t.years * (365 * 864e5) + t.months * (30 * 864e5) + t.days * 864e5 + t.milliseconds;
}
function X1(t, e) {
let o = null;
for (let M = 0; M < kb.length; M += 1) {
let b = kb[M];
if (e[b]) {
let z = t[b] / e[b];
if (!V1(z) || o !== null && o !== z)
return null;
o = z;
} else if (t[b])
return null;
}
return o;
}
function k1(t) {
let e = t.milliseconds;
if (e) {
if (e % 1e3 !== 0)
return { unit: "millisecond", value: e };
if (e % (1e3 * 60) !== 0)
return { unit: "second", value: e / 1e3 };
if (e % (1e3 * 60 * 60) !== 0)
return { unit: "minute", value: e / (1e3 * 60) };
if (e)
return { unit: "hour", value: e / (1e3 * 60 * 60) };
}
return t.days ? t.specifiedWeeks && t.days % 7 === 0 ? { unit: "week", value: t.days / 7 } : { unit: "day", value: t.days } : t.months ? { unit: "month", value: t.months } : t.years ? { unit: "year", value: t.years } : { unit: "millisecond", value: 0 };
}
function Zi(t, e) {
let o = 0, M = 0;
for (; M < t.length; )
t[M] === e ? (t.splice(M, 1), o += 1) : M += 1;
return o;
}
function C0(t, e, o) {
if (t === e)
return !0;
let M = t.length, b;
if (M !== e.length)
return !1;
for (b = 0; b < M; b += 1)
if (!(o ? o(t[b], e[b]) : t[b] === e[b]))
return !1;
return !0;
}
const En = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
function _b(t, e) {
let o = N1(t);
return o[2] += e * 7, B0(o);
}
function c0(t, e) {
let o = N1(t);
return o[2] += e, B0(o);
}
function W1(t, e) {
let o = N1(t);
return o[6] += e, B0(o);
}
function Ji(t, e) {
return I1(t, e) / 7;
}
function I1(t, e) {
return (e.valueOf() - t.valueOf()) / (1e3 * 60 * 60 * 24);
}
function ea(t, e) {
return (e.valueOf() - t.valueOf()) / (1e3 * 60 * 60);
}
function ta(t, e) {
return (e.valueOf() - t.valueOf()) / (1e3 * 60);
}
function oa(t, e) {
return (e.valueOf() - t.valueOf()) / 1e3;
}
function Ma(t, e) {
let o = J(t), M = J(e);
return {
years: 0,
months: 0,
days: Math.round(I1(o, M)),
milliseconds: e.valueOf() - M.valueOf() - (t.valueOf() - o.valueOf())
};
}
function ba(t, e) {
let o = Ke(t, e);
return o !== null && o % 7 === 0 ? o / 7 : null;
}
function Ke(t, e) {
return T1(t) === T1(e) ? Math.round(I1(t, e)) : null;
}
function J(t) {
return B0([
t.getUTCFullYear(),
t.getUTCMonth(),
t.getUTCDate()
]);
}
function za(t) {
return B0([
t.getUTCFullYear(),
t.getUTCMonth(),
t.getUTCDate(),
t.getUTCHours()
]);
}
function na(t) {
return B0([
t.getUTCFullYear(),
t.getUTCMonth(),
t.getUTCDate(),
t.getUTCHours(),
t.getUTCMinutes()
]);
}
function pa(t) {
return B0([
t.getUTCFullYear(),
t.getUTCMonth(),
t.getUTCDate(),
t.getUTCHours(),
t.getUTCMinutes(),
t.getUTCSeconds()
]);
}
function ra(t, e, o) {
let M = t.getUTCFullYear(), b = It(t, M, e, o);
if (b < 1)
return It(t, M - 1, e, o);
let z = It(t, M + 1, e, o);
return z >= 1 ? Math.min(b, z) : b;
}
function It(t, e, o, M) {
let b = B0([e, 0, 1 + ca(e, o, M)]), z = J(t), n = Math.round(I1(b, z));
return Math.floor(n / 7) + 1;
}
function ca(t, e, o) {
let M = 7 + e - o;
return -((7 + B0([t, 0, M]).getUTCDay() - e) % 7) + M - 1;
}
function Ib(t) {
return [
t.getFullYear(),
t.getMonth(),
t.getDate(),
t.getHours(),
t.getMinutes(),
t.getSeconds(),
t.getMilliseconds()
];
}
function Pb(t) {
return new Date(
t[0],
t[1] || 0,
t[2] == null ? 1 : t[2],
// day of month
t[3] || 0,
t[4] || 0,
t[5] || 0
);
}
function N1(t) {
return [
t.getUTCFullYear(),
t.getUTCMonth(),
t.getUTCDate(),
t.getUTCHours(),
t.getUTCMinutes(),
t.getUTCSeconds(),
t.getUTCMilliseconds()
];
}
function B0(t) {
return t.length === 1 && (t = t.concat([0])), new Date(Date.UTC(...t));
}
function Qo(t) {
return !isNaN(t.valueOf());
}
function T1(t) {
return t.getUTCHours() * 1e3 * 60 * 60 + t.getUTCMinutes() * 1e3 * 60 + t.getUTCSeconds() * 1e3 + t.getUTCMilliseconds();
}
function nt(t, e, o = !1) {
let M = t.toISOString();
return M = M.replace(".000", ""), o && (M = M.replace("T00:00:00Z", "")), M.length > 10 && (e == null ? M = M.replace("Z", "") : e !== 0 && (M = M.replace("Z", Ko(e, !0)))), M;
}
function ye(t) {
return t.toISOString().replace(/T.*$/, "");
}
function lo(t) {
return t.toISOString().match(/^\d{4}-\d{2}/)[0];
}
function ia(t) {
return u1(t.getUTCHours(), 2) + ":" + u1(t.getUTCMinutes(), 2) + ":" + u1(t.getUTCSeconds(), 2);
}
function Ko(t, e = !1) {
let o = t < 0 ? "-" : "+", M = Math.abs(t), b = Math.floor(M / 60), z = Math.round(M % 60);
return e ? `${o + u1(b, 2)}:${u1(z, 2)}` : `GMT${o}${b}${z ? `:${u1(z, 2)}` : ""}`;
}
function L(t, e, o) {
let M, b;
return function(...z) {
if (!M)
b = t.apply(this, z);
else if (!C0(M, z)) {
let n = t.apply(this, z);
(!e || !e(n, b)) && (b = n);
}
return M = z, b;
};
}
function C1(t, e, o) {
let M, b;
return (z) => (M ? f0(M, z) || (b = t.call(this, z)) : b = t.call(this, z), M = z, b);
}
function Pt(t, e, o) {
let M = [], b = [];
return (z) => {
let n = M.length, p = z.length, r = 0;
for (; r < n; r += 1)
if (z[r]) {
if (!C0(M[r], z[r])) {
let c = t.apply(this, z[r]);
(!e || !e(c, b[r])) && (b[r] = c);
}
}
for (; r < p; r += 1)
b[r] = t.apply(this, z[r]);
return M = z, b.splice(p), b;
};
}
function Hb(t, e, o) {
let M = {}, b = {};
return (z) => {
let n = {};
for (let p in z)
if (!b[p])
n[p] = t.apply(this, z[p]);
else if (C0(M[p], z[p]))
n[p] = b[p];
else {
o && o(b[p]);
let r = t.apply(this, z[p]);
n[p] = r;
}
return M = z, b = n, n;
};
}
const Ht = {
week: 3,
separator: 9,
omitZeroMinute: 9,
meridiem: 9,
omitCommas: 9
}, x2 = {
timeZoneName: 7,
era: 6,
year: 5,
month: 4,
day: 2,
weekday: 2,
hour: 1,
minute: 1,
second: 1
}, d2 = /\s*([ap])\.?m\.?/i, aa = /,/g, sa = /\s+/g, Oa = /\u200e/g, la = /UTC|GMT/;
class da {
constructor(e) {
let o = {}, M = {}, b = 9;
for (let z in e)
z in Ht ? (M[z] = e[z], Ht[z] < 9 && (b = Math.min(Ht[z], b))) : (o[z] = e[z], z in x2 && (b = Math.min(x2[z], b)));
this.standardDateProps = o, this.extendedSettings = M, this.smallestUnitNum = b, this.buildFormattingFunc = L(Ub);
}
format(e, o) {
return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, o)(e);
}
formatRange(e, o, M, b) {
let { standardDateProps: z, extendedSettings: n } = this, p = ha(e.marker, o.marker, M.calendarSystem);
if (!p)
return this.format(e, M);
let r = p;
r > 1 && // the two dates are different in a way that's larger scale than time
(z.year === "numeric" || z.year === "2-digit") && (z.month === "numeric" || z.month === "2-digit") && (z.day === "numeric" || z.day === "2-digit") && (r = 1);
let c = this.format(e, M), i = this.format(o, M);
if (c === i)
return c;
let a = Ra(z, r), s = Ub(a, n, M), l = s(e), d = s(o), A = ma(c, l, i, d), u = n.separator || b || M.defaultSeparator || "";
return A ? A.before + l + u + d + A.after : c + u + i;
}
getSmallestUnit() {
switch (this.smallestUnitNum) {
case 7:
case 6:
case 5:
return "year";
case 4:
return "month";
case 3:
return "week";
case 2:
return "day";
default:
return "time";
}
}
}
function Ub(t, e, o) {
let M = Object.keys(t).length;
return M === 1 && t.timeZoneName === "short" ? (b) => Ko(b.timeZoneOffset) : M === 0 && e.week ? (b) => Wa(o.computeWeekNumber(b.marker), o.weekText, o.weekTextLong, o.locale, e.week) : Aa(t, e, o);
}
function Aa(t, e, o) {
t = Object.assign({}, t), e = Object.assign({}, e), ua(t, e), t.timeZone = "UTC";
let M = new Intl.DateTimeFormat(o.locale.codes, t), b;
if (e.omitZeroMinute) {
let z = Object.assign({}, t);
delete z.minute, b = new Intl.DateTimeFormat(o.locale.codes, z);
}
return (z) => {
let { marker: n } = z, p;
b && !n.getUTCMinutes() ? p = b : p = M;
let r = p.format(n);
return qa(r, z, t, e, o);
};
}
function ua(t, e) {
t.timeZoneName && (t.hour || (t.hour = "2-digit"), t.minute || (t.minute = "2-digit")), t.timeZoneName === "long" && (t.timeZoneName = "short"), e.omitZeroMinute && (t.second || t.millisecond) && delete e.omitZeroMinute;
}
function qa(t, e, o, M, b) {
return t = t.replace(Oa, ""), o.timeZoneName === "short" && (t = fa(t, b.timeZone === "UTC" || e.timeZoneOffset == null ? "UTC" : (
// important to normalize for IE, which does "GMT"
Ko(e.timeZoneOffset)
))), M.omitCommas && (t = t.replace(aa, "").trim()), M.omitZeroMinute && (t = t.replace(":00", "")), M.meridiem === !1 ? t = t.replace(d2, "").trim() : M.meridiem === "narrow" ? t = t.replace(d2, (z, n) => n.toLocaleLowerCase()) : M.meridiem === "short" ? t = t.replace(d2, (z, n) => `${n.toLocaleLowerCase()}m`) : M.meridiem === "lowercase" && (t = t.replace(d2, (z) => z.toLocaleLowerCase())), t = t.replace(sa, " "), t = t.trim(), t;
}
function fa(t, e) {
let o = !1;
return t = t.replace(la, () => (o = !0, e)), o || (t += ` ${e}`), t;
}
function Wa(t, e, o, M, b) {
let z = [];
return b === "long" ? z.push(o) : (b === "short" || b === "narrow") && z.push(e), (b === "long" || b === "short") && z.push(" "), z.push(M.simpleNumberFormat.format(t)), M.options.direction === "rtl" && z.reverse(), z.join("");
}
function ha(t, e, o) {
return o.getMarkerYear(t) !== o.getMarkerYear(e) ? 5 : o.getMarkerMonth(t) !== o.getMarkerMonth(e) ? 4 : o.getMarkerDay(t) !== o.getMarkerDay(e) ? 2 : T1(t) !== T1(e) ? 1 : 0;
}
function Ra(t, e) {
let o = {};
for (let M in t)
(!(M in x2) || // not a date part prop (like timeZone)
x2[M] <= e) && (o[M] = t[M]);
return o;
}
function ma(t, e, o, M) {
let b = 0;
for (; b < t.length; ) {
let z = t.indexOf(e, b);
if (z === -1)
break;
let n = t.substr(0, z);
b = z + e.length;
let p = t.substr(b), r = 0;
for (; r < o.length; ) {
let c = o.indexOf(M, r);
if (c === -1)
break;
let i = o.substr(0, c);
r = c + M.length;
let a = o.substr(r);
if (n === i && p === a)
return {
before: n,
after: p
};
}
}
return null;
}
function jb(t, e) {
let o = e.markerToArray(t.marker);
return {
marker: t.marker,
timeZoneOffset: t.timeZoneOffset,
array: o,
year: o[0],
month: o[1],
day: o[2],
hour: o[3],
minute: o[4],
second: o[5],
millisecond: o[6]
};
}
function _2(t, e, o, M) {
let b = jb(t, o.calendarSystem), z = e ? jb(e, o.calendarSystem) : null;
return {
date: b,
start: b,
end: z,
timeZone: o.timeZone,
localeCodes: o.locale.codes,
defaultSeparator: M || o.defaultSeparator
};
}
class ga {
constructor(e) {
this.cmdStr = e;
}
format(e, o, M) {
return o.cmdFormatter(this.cmdStr, _2(e, null, o, M));
}
formatRange(e, o, M, b) {
return M.cmdFormatter(this.cmdStr, _2(e, o, M, b));
}
}
class La {
constructor(e) {
this.func = e;
}
format(e, o, M) {
return this.func(_2(e, null, o, M));
}
formatRange(e, o, M, b) {
return this.func(_2(e, o, M, b));
}
}
function Z(t) {
return typeof t == "object" && t ? new da(t) : typeof t == "string" ? new ga(t) : typeof t == "function" ? new La(t) : null;
}
const Fb = {
navLinkDayClick: f,
navLinkWeekClick: f,
duration: P,
bootstrapFontAwesome: f,
buttonIcons: f,
customButtons: f,
defaultAllDayEventDuration: P,
defaultTimedEventDuration: P,
nextDayThreshold: P,
scrollTime: P,
scrollTimeReset: Boolean,
slotMinTime: P,
slotMaxTime: P,
dayPopoverFormat: Z,
slotDuration: P,
snapDuration: P,
headerToolbar: f,
footerToolbar: f,
defaultRangeSeparator: String,
titleRangeSeparator: String,
forceEventDuration: Boolean,
dayHeaders: Boolean,
dayHeaderFormat: Z,
dayHeaderClassNames: f,
dayHeaderContent: f,
dayHeaderDidMount: f,
dayHeaderWillUnmount: f,
dayCellClassNames: f,
dayCellContent: f,
dayCellDidMount: f,
dayCellWillUnmount: f,
initialView: String,
aspectRatio: Number,
weekends: Boolean,
weekNumberCalculation: f,
weekNumbers: Boolean,
weekNumberClassNames: f,
weekNumberContent: f,
weekNumberDidMount: f,
weekNumberWillUnmount: f,
editable: Boolean,
viewClassNames: f,
viewDidMount: f,
viewWillUnmount: f,
nowIndicator: Boolean,
nowIndicatorSnap: f,
nowIndicatorClassNames: f,
nowIndicatorContent: f,
nowIndicatorDidMount: f,
nowIndicatorWillUnmount: f,
showNonCurrentDates: Boolean,
lazyFetching: Boolean,
startParam: String,
endParam: String,
timeZoneParam: String,
timeZone: String,
locales: f,
locale: f,
themeSystem: String,
dragRevertDuration: Number,
dragScroll: Boolean,
allDayMaintainDuration: Boolean,
unselectAuto: Boolean,
dropAccept: f,
eventOrder: Vo,
eventOrderStrict: Boolean,
handleWindowResize: Boolean,
windowResizeDelay: Number,
longPressDelay: Number,
eventDragMinDistance: Number,
expandRows: Boolean,
height: f,
contentHeight: f,
direction: String,
weekNumberFormat: Z,
eventResizableFromStart: Boolean,
displayEventTime: Boolean,
displayEventEnd: Boolean,
weekText: String,
weekTextLong: String,
progressiveEventRendering: Boolean,
businessHours: f,
initialDate: f,
now: f,
eventDataTransform: f,
stickyHeaderDates: f,
stickyFooterScrollbar: f,
viewHeight: f,
defaultAllDay: Boolean,
eventSourceFailure: f,
eventSourceSuccess: f,
eventDisplay: String,
eventStartEditable: Boolean,
eventDurationEditable: Boolean,
eventOverlap: f,
eventConstraint: f,
eventAllow: f,
eventBackgroundColor: String,
eventBorderColor: String,
eventTextColor: String,
eventColor: String,
eventClassNames: f,
eventContent: f,
eventDidMount: f,
eventWillUnmount: f,
selectConstraint: f,
selectOverlap: f,
selectAllow: f,
droppable: Boolean,
unselectCancel: String,
slotLabelFormat: f,
slotLaneClassNames: f,
slotLaneContent: f,
slotLaneDidMount: f,
slotLaneWillUnmount: f,
slotLabelClassNames: f,
slotLabelContent: f,
slotLabelDidMount: f,
slotLabelWillUnmount: f,
dayMaxEvents: f,
dayMaxEventRows: f,
dayMinWidth: Number,
slotLabelInterval: P,
allDayText: String,
allDayClassNames: f,
allDayContent: f,
allDayDidMount: f,
allDayWillUnmount: f,
slotMinWidth: Number,
navLinks: Boolean,
eventTimeFormat: Z,
rerenderDelay: Number,
moreLinkText: f,
moreLinkHint: f,
selectMinDistance: Number,
selectable: Boolean,
selectLongPressDelay: Number,
eventLongPressDelay: Number,
selectMirror: Boolean,
eventMaxStack: Number,
eventMinHeight: Number,
eventMinWidth: Number,
eventShortHeight: Number,
slotEventOverlap: Boolean,
plugins: f,
firstDay: Number,
dayCount: Number,
dateAlignment: String,
dateIncrement: P,
hiddenDays: f,
fixedWeekCount: Boolean,
validRange: f,
visibleRange: f,
titleFormat: f,
eventInteractive: Boolean,
// only used by list-view, but languages define the value, so we need it in base options
noEventsText: String,
viewHint: f,
navLinkHint: f,
closeHint: String,
timeHint: String,
eventHint: String,
moreLinkClick: f,
moreLinkClassNames: f,
moreLinkContent: f,
moreLinkDidMount: f,
moreLinkWillUnmount: f,
monthStartFormat: Z,
// for connectors
// (can't be part of plugin system b/c must be provided at runtime)
handleCustomRendering: f,
customRenderingMetaMap: f,
customRenderingReplaces: Boolean
}, Ue = {
eventDisplay: "auto",
defaultRangeSeparator: " - ",
titleRangeSeparator: " – ",
defaultTimedEventDuration: "01:00:00",
defaultAllDayEventDuration: { day: 1 },
forceEventDuration: !1,
nextDayThreshold: "00:00:00",
dayHeaders: !0,
initialView: "",
aspectRatio: 1.35,
headerToolbar: {
start: "title",
center: "",
end: "today prev,next"
},
weekends: !0,
weekNumbers: !1,
weekNumberCalculation: "local",
editable: !1,
nowIndicator: !1,
scrollTime: "06:00:00",
scrollTimeReset: !0,
slotMinTime: "00:00:00",
slotMaxTime: "24:00:00",
showNonCurrentDates: !0,
lazyFetching: !0,
startParam: "start",
endParam: "end",
timeZoneParam: "timeZone",
timeZone: "local",
locales: [],
locale: "",
themeSystem: "standard",
dragRevertDuration: 500,
dragScroll: !0,
allDayMaintainDuration: !1,
unselectAuto: !0,
dropAccept: "*",
eventOrder: "start,-duration,allDay,title",
dayPopoverFormat: { month: "long", day: "numeric", year: "numeric" },
handleWindowResize: !0,
windowResizeDelay: 100,
longPressDelay: 1e3,
eventDragMinDistance: 5,
expandRows: !1,
navLinks: !1,
selectable: !1,
eventMinHeight: 15,
eventMinWidth: 30,
eventShortHeight: 30,
monthStartFormat: { month: "long", day: "numeric" },
nowIndicatorSnap: "auto"
}, Gb = {
datesSet: f,
eventsSet: f,
eventAdd: f,
eventChange: f,
eventRemove: f,
windowResize: f,
eventClick: f,
eventMouseEnter: f,
eventMouseLeave: f,
select: f,
unselect: f,
loading: f,
// internal
_unmount: f,
_beforeprint: f,
_afterprint: f,
_noEventDrop: f,
_noEventResize: f,
_resize: f,
_scrollRequest: f
}, Yb = {
buttonText: f,
buttonHints: f,
views: f,
plugins: f,
initialEvents: f,
events: f,
eventSources: f
}, j1 = {
headerToolbar: F1,
footerToolbar: F1,
buttonText: F1,
buttonHints: F1,
buttonIcons: F1,
dateIncrement: F1,
plugins: A2,
events: A2,
eventSources: A2,
resources: A2
};
function F1(t, e) {
return typeof t == "object" && typeof e == "object" && t && e ? f0(t, e) : t === e;
}
function A2(t, e) {
return Array.isArray(t) && Array.isArray(e) ? C0(t, e) : t === e;
}
const ya = {
type: String,
component: f,
buttonText: String,
buttonTextKey: String,
dateProfileGeneratorClass: f,
usesMinMaxTime: Boolean,
classNames: f,
content: f,
didMount: f,
willUnmount: f
};
function Ut(t) {
return $o(t, j1);
}
function b2(t, e) {
let o = {}, M = {};
for (let b in e)
b in t && (o[b] = e[b](t[b]));
for (let b in t)
b in e || (M[b] = t[b]);
return { refined: o, extra: M };
}
function f(t) {
return t;
}
const { hasOwnProperty: I2 } = Object.prototype;
function $o(t, e) {
let o = {};
if (e) {
for (let M in e)
if (e[M] === F1) {
let b = [];
for (let z = t.length - 1; z >= 0; z -= 1) {
let n = t[z][M];
if (typeof n == "object" && n)
b.unshift(n);
else if (n !== void 0) {
o[M] = n;
break;
}
}
b.length && (o[M] = $o(b));
}
}
for (let M = t.length - 1; M >= 0; M -= 1) {
let b = t[M];
for (let z in b)
z in o || (o[z] = b[z]);
}
return o;
}
function h1(t, e) {
let o = {};
for (let M in t)
e(t[M], M) && (o[M] = t[M]);
return o;
}
function d0(t, e) {
let o = {};
for (let M in t)
o[M] = e(t[M], M);
return o;
}
function wn(t) {
let e = {};
for (let o of t)
e[o] = !0;
return e;
}
function Zo(t) {
let e = [];
for (let o in t)
e.push(t[o]);
return e;
}
function f0(t, e) {
if (t === e)
return !0;
for (let o in t)
if (I2.call(t, o) && !(o in e))
return !1;
for (let o in e)
if (I2.call(e, o) && t[o] !== e[o])
return !1;
return !0;
}
const va = /^on[A-Z]/;
function Na(t, e) {
const o = Ta(t, e);
for (let M of o)
if (!va.test(M))
return !1;
return !0;
}
function Ta(t, e) {
let o = [];
for (let M in t)
I2.call(t, M) && (M in e || o.push(M));
for (let M in e)
I2.call(e, M) && t[M] !== e[M] && o.push(M);
return o;
}
function y2(t, e, o = {}) {
if (t === e)
return !0;
for (let M in e)
if (!(M in t && Ba(t[M], e[M], o[M]))) return !1;
for (let M in t)
if (!(M in e))
return !1;
return !0;
}
function Ba(t, e, o) {
return t === e || o === !0 ? !0 : o ? o(t, e) : !1;
}
function Cn(t, e = 0, o, M = 1) {
let b = [];
o == null && (o = Object.keys(t).length);
for (let z = e; z < o; z += M) {
let n = t[z];
n !== void 0 && b.push(n);
}
return b;
}
let Dn = {};
function Sa(t, e) {
Dn[t] = e;
}
function Ea(t) {
return new Dn[t]();
}
class wa {
getMarkerYear(e) {
return e.getUTCFullYear();
}
getMarkerMonth(e) {
return e.getUTCMonth();
}
getMarkerDay(e) {
return e.getUTCDate();
}
arrayToMarker(e) {
return B0(e);
}
markerToArray(e) {
return N1(e);
}
}
Sa("gregory", wa);
const Ca = /^\s*(\d{4})(-?(\d{2})(-?(\d{2})([T ](\d{2}):?(\d{2})(:?(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;
function pt(t) {
let e = Ca.exec(t);
if (e) {
let o = new Date(Date.UTC(Number(e[1]), e[3] ? Number(e[3]) - 1 : 0, Number(e[5] || 1), Number(e[7] || 0), Number(e[8] || 0), Number(e[10] || 0), e[12] ? +`0.${e[12]}` * 1e3 : 0));
if (Qo(o)) {
let M = null;
return e[13] && (M = (e[15] === "-" ? -1 : 1) * (Number(e[16] || 0) * 60 + Number(e[18] || 0))), {
marker: o,
isTimeUnspecified: !e[6],
timeZoneOffset: M
};
}
}
return null;
}
class Da {
constructor(e) {
let o = this.timeZone = e.timeZone, M = o !== "local" && o !== "UTC";
e.namedTimeZoneImpl && M && (this.namedTimeZoneImpl = new e.namedTimeZoneImpl(o)), this.canComputeOffset = !!(!M || this.namedTimeZoneImpl), this.calendarSystem = Ea(e.calendarSystem), this.locale = e.locale, this.weekDow = e.locale.week.dow, this.weekDoy = e.locale.week.doy, e.weekNumberCalculation === "ISO" && (this.weekDow = 1, this.weekDoy = 4), typeof e.firstDay == "number" && (this.weekDow = e.firstDay), typeof e.weekNumberCalculation == "function" && (this.weekNumberFunc = e.weekNumberCalculation), this.weekText = e.weekText != null ? e.weekText : e.locale.options.weekText, this.weekTextLong = (e.weekTextLong != null ? e.weekTextLong : e.locale.options.weekTextLong) || this.weekText, this.cmdFormatter = e.cmdFormatter, this.defaultSeparator = e.defaultSeparator;
}
// Creating / Parsing
createMarker(e) {
let o = this.createMarkerMeta(e);
return o === null ? null : o.marker;
}
createNowMarker() {
return this.canComputeOffset ? this.timestampToMarker((/* @__PURE__ */ new Date()).valueOf()) : B0(Ib(/* @__PURE__ */ new Date()));
}
createMarkerMeta(e) {
if (typeof e == "string")
return this.parse(e);
let o = null;
return typeof e == "number" ? o = this.timestampToMarker(e) : e instanceof Date ? (e = e.valueOf(), isNaN(e) || (o = this.timestampToMarker(e))) : Array.isArray(e) && (o = B0(e)), o === null || !Qo(o) ? null : { marker: o, isTimeUnspecified: !1, forcedTzo: null };
}
parse(e) {
let o = pt(e);
if (o === null)
return null;
let { marker: M } = o, b = null;
return o.timeZoneOffset !== null && (this.canComputeOffset ? M = this.timestampToMarker(M.valueOf() - o.timeZoneOffset * 60 * 1e3) : b = o.timeZoneOffset), { marker: M, isTimeUnspecified: o.isTimeUnspecified, forcedTzo: b };
}
// Accessors
getYear(e) {
return this.calendarSystem.getMarkerYear(e);
}
getMonth(e) {
return this.calendarSystem.getMarkerMonth(e);
}
getDay(e) {
return this.calendarSystem.getMarkerDay(e);
}
// Adding / Subtracting
add(e, o) {
let M = this.calendarSystem.markerToArray(e);
return M[0] += o.years, M[1] += o.months, M[2] += o.days, M[6] += o.milliseconds, this.calendarSystem.arrayToMarker(M);
}
subtract(e, o) {
let M = this.calendarSystem.markerToArray(e);
return M[0] -= o.years, M[1] -= o.months, M[2] -= o.days, M[6] -= o.milliseconds, this.calendarSystem.arrayToMarker(M);
}
addYears(e, o) {
let M = this.calendarSystem.markerToArray(e);
return M[0] += o, this.calendarSystem.arrayToMarker(M);
}
addMonths(e, o) {
let M = this.calendarSystem.markerToArray(e);
return M[1] += o, this.calendarSystem.arrayToMarker(M);
}
// Diffing Whole Units
diffWholeYears(e, o) {
let { calendarSystem: M } = this;
return T1(e) === T1(o) && M.getMarkerDay(e) === M.getMarkerDay(o) && M.getMarkerMonth(e) === M.getMarkerMonth(o) ? M.getMarkerYear(o) - M.getMarkerYear(e) : null;
}
diffWholeMonths(e, o) {
let { calendarSystem: M } = this;
return T1(e) === T1(o) && M.getMarkerDay(e) === M.getMarkerDay(o) ? M.getMarkerMonth(o) - M.getMarkerMonth(e) + (M.getMarkerYear(o) - M.getMarkerYear(e)) * 12 : null;
}
// Range / Duration
greatestWholeUnit(e, o) {
let M = this.diffWholeYears(e, o);
return M !== null ? { unit: "year", value: M } : (M = this.diffWholeMonths(e, o), M !== null ? { unit: "month", value: M } : (M = ba(e, o), M !== null ? { unit: "week", value: M } : (M = Ke(e, o), M !== null ? { unit: "day", value: M } : (M = ea(e, o), V1(M) ? { unit: "hour", value: M } : (M = ta(e, o), V1(M) ? { unit: "minute", value: M } : (M = oa(e, o), V1(M) ? { unit: "second", value: M } : { unit: "millisecond", value: o.valueOf() - e.valueOf() }))))));
}
countDurationsBetween(e, o, M) {
let b;
return M.years && (b = this.diffWholeYears(e, o), b !== null) ? b / Vi(M) : M.months && (b = this.diffWholeMonths(e, o), b !== null) ? b / Qi(M) : M.days && (b = Ke(e, o), b !== null) ? b / de(M) : (o.valueOf() - e.valueOf()) / g0(M);
}
// Start-Of
// these DON'T return zoned-dates. only UTC start-of dates
startOf(e, o) {
return o === "year" ? this.startOfYear(e) : o === "month" ? this.startOfMonth(e) : o === "week" ? this.startOfWeek(e) : o === "day" ? J(e) : o === "hour" ? za(e) : o === "minute" ? na(e) : o === "second" ? pa(e) : null;
}
startOfYear(e) {
return this.calendarSystem.arrayToMarker([
this.calendarSystem.getMarkerYear(e)
]);
}
startOfMonth(e) {
return this.calendarSystem.arrayToMarker([
this.calendarSystem.getMarkerYear(e),
this.calendarSystem.getMarkerMonth(e)
]);
}
startOfWeek(e) {
return this.calendarSystem.arrayToMarker([
this.calendarSystem.getMarkerYear(e),
this.calendarSystem.getMarkerMonth(e),
e.getUTCDate() - (e.getUTCDay() - this.weekDow + 7) % 7
]);
}
// Week Number
computeWeekNumber(e) {
return this.weekNumberFunc ? this.weekNumberFunc(this.toDate(e)) : ra(e, this.weekDow, this.weekDoy);
}
// TODO: choke on timeZoneName: long
format(e, o, M = {}) {
return o.format({
marker: e,
timeZoneOffset: M.forcedTzo != null ? M.forcedTzo : this.offsetForMarker(e)
}, this);
}
formatRange(e, o, M, b = {}) {
return b.isEndExclusive && (o = W1(o, -1)), M.formatRange({
marker: e,
timeZoneOffset: b.forcedStartTzo != null ? b.forcedStartTzo : this.offsetForMarker(e)
}, {
marker: o,
timeZoneOffset: b.forcedEndTzo != null ? b.forcedEndTzo : this.offsetForMarker(o)
}, this, b.defaultSeparator);
}
/*
DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,
might as well use buildIsoString or some other util directly
*/
formatIso(e, o = {}) {
let M = null;
return o.omitTimeZoneOffset || (o.forcedTzo != null ? M = o.forcedTzo : M = this.offsetForMarker(e)), nt(e, M, o.omitTime);
}
// TimeZone
timestampToMarker(e) {
return this.timeZone === "local" ? B0(Ib(new Date(e))) : this.timeZone === "UTC" || !this.namedTimeZoneImpl ? new Date(e) : B0(this.namedTimeZoneImpl.timestampToArray(e));
}
offsetForMarker(e) {
return this.timeZone === "local" ? -Pb(N1(e)).getTimezoneOffset() : this.timeZone === "UTC" ? 0 : this.namedTimeZoneImpl ? this.namedTimeZoneImpl.offsetForArray(N1(e)) : null;
}
// Conversion
toDate(e, o) {
return this.timeZone === "local" ? Pb(N1(e)) : this.timeZone === "UTC" ? new Date(e.valueOf()) : this.namedTimeZoneImpl ? new Date(e.valueOf() - this.namedTimeZoneImpl.offsetForArray(N1(e)) * 1e3 * 60) : new Date(e.valueOf() - (o || 0));
}
}
class z2 {
constructor(e) {
this.iconOverrideOption && this.setIconOverride(e[this.iconOverrideOption]);
}
setIconOverride(e) {
let o, M;
if (typeof e == "object" && e) {
o = Object.assign({}, this.iconClasses);
for (M in e)
o[M] = this.applyIconOverridePrefix(e[M]);
this.iconClasses = o;
} else e === !1 && (this.iconClasses = {});
}
applyIconOverridePrefix(e) {
let o = this.iconOverridePrefix;
return o && e.indexOf(o) !== 0 && (e = o + e), e;
}
getClass(e) {
return this.classes[e] || "";
}
getIconClass(e, o) {
let M;
return o && this.rtlIconClasses ? M = this.rtlIconClasses[e] || this.iconClasses[e] : M = this.iconClasses[e], M ? `${this.baseIconClass} ${M}` : "";
}
getCustomButtonIconClass(e) {
let o;
return this.iconOverrideCustomButtonOption && (o = e[this.iconOverrideCustomButtonOption], o) ? `${this.baseIconClass} ${this.applyIconOverridePrefix(o)}` : "";
}
}
z2.prototype.classes = {};
z2.prototype.iconClasses = {};
z2.prototype.baseIconClass = "";
z2.prototype.iconOverridePrefix = "";
function he(t) {
t();
let e = C.debounceRendering, o = [];
function M(b) {
o.push(b);
}
for (C.debounceRendering = M, Ve(O(Xa, {}), document.createElement("div")); o.length; )
o.shift()();
C.debounceRendering = e;
}
class Xa extends E0 {
render() {
return O("div", {});
}
componentDidMount() {
this.setState({});
}
}
function Xn(t) {
let e = si(t), o = e.Provider;
return e.Provider = function() {
let M = !this.getChildContext, b = o.apply(this, arguments);
if (M) {
let z = [];
this.shouldComponentUpdate = (n) => {
this.props.value !== n.value && z.forEach((p) => {
p.context = n.value, p.forceUpdate();
});
}, this.sub = (n) => {
z.push(n);
let p = n.componentWillUnmount;
n.componentWillUnmount = () => {
z.splice(z.indexOf(n), 1), p && p.call(n);
};
};
}
return b;
}, e;
}
class ka {
constructor(e, o, M, b) {
this.execFunc = e, this.emitter = o, this.scrollTime = M, this.scrollTimeReset = b, this.handleScrollRequest = (z) => {
this.queuedRequest = Object.assign({}, this.queuedRequest || {}, z), this.drain();
}, o.on("_scrollRequest", this.handleScrollRequest), this.fireInitialScroll();
}
detach() {
this.emitter.off("_scrollRequest", this.handleScrollRequest);
}
update(e) {
e && this.scrollTimeReset ? this.fireInitialScroll() : this.drain();
}
fireInitialScroll() {
this.handleScrollRequest({
time: this.scrollTime
});
}
drain() {
this.queuedRequest && this.execFunc(this.queuedRequest) && (this.queuedRequest = null);
}
}
const n1 = Xn({});
function xa(t, e, o, M, b, z, n, p, r, c, i, a, s, l) {
return {
dateEnv: b,
nowManager: z,
options: o,
pluginHooks: p,
emitter: i,
dispatch: r,
getCurrentData: c,
calendarApi: a,
viewSpec: t,
viewApi: e,
dateProfileGenerator: M,
theme: n,
isRtl: o.direction === "rtl",
addResizeHandler(d) {
i.on("_resize", d);
},
removeResizeHandler(d) {
i.off("_resize", d);
},
createScrollResponder(d) {
return new ka(d, i, P(o.scrollTime), o.scrollTimeReset);
},
registerInteractiveComponent: s,
unregisterInteractiveComponent: l
};
}
class oe extends E0 {
// debug: boolean
shouldComponentUpdate(e, o) {
return !y2(
this.props,
e,
this.propEquality
/*, this.debug */
) || !y2(
this.state,
o,
this.stateEquality
/*, this.debug */
);
}
// HACK for freakin' React StrictMode
safeSetState(e) {
y2(this.state, Object.assign(Object.assign({}, this.state), e), this.stateEquality) || this.setState(e);
}
}
oe.addPropsEquality = _a;
oe.addStateEquality = Ia;
oe.contextType = n1;
oe.prototype.propEquality = {};
oe.prototype.stateEquality = {};
class E extends oe {
}
E.contextType = n1;
function _a(t) {
let e = Object.create(this.prototype.propEquality);
Object.assign(e, t), this.prototype.propEquality = e;
}
function Ia(t) {
let e = Object.create(this.prototype.stateEquality);
Object.assign(e, t), this.prototype.stateEquality = e;
}
function D0(t, e) {
typeof t == "function" ? t(e) : t && (t.current = e);
}
class Jo extends E {
constructor() {
super(...arguments), this.id = z1(), this.queuedDomNodes = [], this.currentDomNodes = [], this.handleEl = (e) => {
const { options: o } = this.context, { generatorName: M } = this.props;
(!o.customRenderingReplaces || !Ao(M, o)) && this.updateElRef(e);
}, this.updateElRef = (e) => {
this.props.elRef && D0(this.props.elRef, e);
};
}
render() {
const { props: e, context: o } = this, { options: M } = o, { customGenerator: b, defaultGenerator: z, renderProps: n } = e, p = kn(e, [], this.handleEl);
let r = !1, c, i = [], a;
if (b != null) {
const s = typeof b == "function" ? b(n, O) : b;
if (s === !0)
r = !0;
else {
const l = s && typeof s == "object";
l && "html" in s ? p.dangerouslySetInnerHTML = { __html: s.html } : l && "domNodes" in s ? i = Array.prototype.slice.call(s.domNodes) : (l ? tn(s) : typeof s != "function") ? c = s : a = s;
}
} else
r = !Ao(e.generatorName, M);
return r && z && (c = z(n)), this.queuedDomNodes = i, this.currentGeneratorMeta = a, O(e.elTag, p, c);
}
componentDidMount() {
this.applyQueueudDomNodes(), this.triggerCustomRendering(!0);
}
componentDidUpdate() {
this.applyQueueudDomNodes(), this.triggerCustomRendering(!0);
}
componentWillUnmount() {
this.triggerCustomRendering(!1);
}
triggerCustomRendering(e) {
var o;
const { props: M, context: b } = this, { handleCustomRendering: z, customRenderingMetaMap: n } = b.options;
if (z) {
const p = (o = this.currentGeneratorMeta) !== null && o !== void 0 ? o : n?.[M.generatorName];
p && z(Object.assign(Object.assign({
id: this.id,
isActive: e,
containerEl: this.base,
reportNewContainerEl: this.updateElRef,
// front-end framework tells us about new container els
generatorMeta: p
}, M), { elClasses: (M.elClasses || []).filter(Pa) }));
}
}
applyQueueudDomNodes() {
const { queuedDomNodes: e, currentDomNodes: o } = this, M = this.base;
if (!C0(e, o)) {
o.forEach(bt);
for (let b of e)
M.appendChild(b);
this.currentDomNodes = e;
}
}
}
Jo.addPropsEquality({
elClasses: C0,
elStyle: f0,
elAttrs: Na,
renderProps: f0
});
function Ao(t, e) {
var o;
return !!(e.handleCustomRendering && t && (!((o = e.customRenderingMetaMap) === null || o === void 0) && o[t]));
}
function kn(t, e, o) {
const M = Object.assign(Object.assign({}, t.elAttrs), { ref: o });
return (t.elClasses || e) && (M.className = (t.elClasses || []).concat(e || []).concat(M.className || []).filter(Boolean).join(" ")), t.elStyle && (M.style = t.elStyle), M;
}
function Pa(t) {
return !!t;
}
const xn = Xn(0);
class b0 extends E0 {
constructor() {
super(...arguments), this.InnerContent = Ha.bind(void 0, this), this.handleEl = (e) => {
this.el = e, this.props.elRef && (D0(this.props.elRef, e), e && this.didMountMisfire && this.componentDidMount());
};
}
render() {
const { props: e } = this, o = Ua(e.classNameGenerator, e.renderProps);
if (e.children) {
const M = kn(e, o, this.handleEl), b = e.children(this.InnerContent, e.renderProps, M);
return e.elTag ? O(e.elTag, M, b) : b;
} else
return O(Jo, Object.assign(Object.assign({}, e), { elRef: this.handleEl, elTag: e.elTag || "div", elClasses: (e.elClasses || []).concat(o), renderId: this.context }));
}
componentDidMount() {
var e, o;
this.el ? (o = (e = this.props).didMount) === null || o === void 0 || o.call(e, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el })) : this.didMountMisfire = !0;
}
componentWillUnmount() {
var e, o;
(o = (e = this.props).willUnmount) === null || o === void 0 || o.call(e, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));
}
}
b0.contextType = xn;
function Ha(t, e) {
const o = t.props;
return O(Jo, Object.assign({ renderProps: o.renderProps, generatorName: o.generatorName, customGenerator: o.customGenerator, defaultGenerator: o.defaultGenerator, renderId: t.context }, e));
}
function Ua(t, e) {
const o = typeof t == "function" ? t(e) : t || [];
return typeof o == "string" ? [o] : o;
}
class x1 extends E {
render() {
let { props: e, context: o } = this, { options: M } = o, b = { view: o.viewApi };
return O(b0, { elRef: e.elRef, elTag: e.elTag || "div", elAttrs: e.elAttrs, elClasses: [
..._n(e.viewSpec),
...e.elClasses || []
], elStyle: e.elStyle, renderProps: b, classNameGenerator: M.viewClassNames, generatorName: void 0, didMount: M.viewDidMount, willUnmount: M.viewWillUnmount }, () => e.children);
}
}
function _n(t) {
return [
`fc-${t.type}-view`,
"fc-view"
];
}
function ja(t, e) {
let o = null, M = null;
return t.start && (o = e.createMarker(t.start)), t.end && (M = e.createMarker(t.end)), !o && !M || o && M && M < o ? null : { start: o, end: M };
}
function Vb(t, e) {
let o = [], { start: M } = e, b, z;
for (t.sort(Fa), b = 0; b < t.length; b += 1)
z = t[b], z.start > M && o.push({ start: M, end: z.start }), z.end > M && (M = z.end);
return M < e.end && o.push({ start: M, end: e.end }), o;
}
function Fa(t, e) {
return t.start.valueOf() - e.start.valueOf();
}
function M1(t, e) {
let { start: o, end: M } = t, b = null;
return e.start !== null && (o === null ? o = e.start : o = new Date(Math.max(o.valueOf(), e.start.valueOf()))), e.end != null && (M === null ? M = e.end : M = new Date(Math.min(M.valueOf(), e.end.valueOf()))), (o === null || M === null || o < M) && (b = { start: o, end: M }), b;
}
function In(t, e) {
return (t.start === null ? null : t.start.valueOf()) === (e.start === null ? null : e.start.valueOf()) && (t.end === null ? null : t.end.valueOf()) === (e.end === null ? null : e.end.valueOf());
}
function rt(t, e) {
return (t.end === null || e.start === null || t.end > e.start) && (t.start === null || e.end === null || t.start < e.end);
}
function ct(t, e) {
return (t.start === null || e.start !== null && e.start >= t.start) && (t.end === null || e.end !== null && e.end <= t.end);
}
function o1(t, e) {
return (t.start === null || e >= t.start) && (t.end === null || e < t.end);
}
function Ga(t, e) {
return e.start != null && t < e.start ? e.start : e.end != null && t >= e.end ? new Date(e.end.valueOf() - 1) : t;
}
function Pn(t) {
let e = Math.floor(I1(t.start, t.end)) || 1, o = J(t.start), M = c0(o, e);
return { start: o, end: M };
}
function it(t, e = P(0)) {
let o = null, M = null;
if (t.end) {
M = J(t.end);
let b = t.end.valueOf() - M.valueOf();
b && b >= g0(e) && (M = c0(M, 1));
}
return t.start && (o = J(t.start), M && M <= o && (M = c0(o, 1))), { start: o, end: M };
}
function Ya(t) {
let e = it(t);
return I1(e.start, e.end) > 1;
}
function ie(t, e, o, M) {
return M === "year" ? P(o.diffWholeYears(t, e), "year") : M === "month" ? P(o.diffWholeMonths(t, e), "month") : Ma(t, e);
}
class Hn {
constructor(e) {
this.props = e, this.initHiddenDays();
}
/* Date Range Computation
------------------------------------------------------------------------------------------------------------------*/
// Builds a structure with info about what the dates/ranges will be for the "prev" view.
buildPrev(e, o, M) {
let { dateEnv: b } = this.props, z = b.subtract(
b.startOf(o, e.currentRangeUnit),
// important for start-of-month
e.dateIncrement
);
return this.build(z, -1, M);
}
// Builds a structure with info about what the dates/ranges will be for the "next" view.
buildNext(e, o, M) {
let { dateEnv: b } = this.props, z = b.add(
b.startOf(o, e.currentRangeUnit),
// important for start-of-month
e.dateIncrement
);
return this.build(z, 1, M);
}
// Builds a structure holding dates/ranges for rendering around the given date.
// Optional direction param indicates whether the date is being incremented/decremented
// from its previous value. decremented = -1, incremented = 1 (default).
build(e, o, M = !0) {
let { props: b } = this, z, n, p, r, c, i;
return z = this.buildValidRange(), z = this.trimHiddenDays(z), M && (e = Ga(e, z)), n = this.buildCurrentRangeInfo(e, o), p = /^(year|month|week|day)$/.test(n.unit), r = this.buildRenderRange(this.trimHiddenDays(n.range), n.unit, p), r = this.trimHiddenDays(r), c = r, b.showNonCurrentDates || (c = M1(c, n.range)), c = this.adjustActiveRange(c), c = M1(c, z), i = rt(n.range, z), o1(r, e) || (e = r.start), {
currentDate: e,
// constraint for where prev/next operations can go and where events can be dragged/resized to.
// an object with optional start and end properties.
validRange: z,
// range the view is formally responsible for.
// for example, a month view might have 1st-31st, excluding padded dates
currentRange: n.range,
// name of largest unit being displayed, like "month" or "week"
currentRangeUnit: n.unit,
isRangeAllDay: p,
// dates that display events and accept drag-n-drop
// will be `null` if no dates accept events
activeRange: c,
// date range with a rendered skeleton
// includes not-active days that need some sort of DOM
renderRange: r,
// Duration object that denotes the first visible time of any given day
slotMinTime: b.slotMinTime,
// Duration object that denotes the exclusive visible end time of any given day
slotMaxTime: b.slotMaxTime,
isValid: i,
// how far the current date will move for a prev/next operation
dateIncrement: this.buildDateIncrement(n.duration)
// pass a fallback (might be null) ^
};
}
// Builds an object with optional start/end properties.
// Indicates the minimum/maximum dates to display.
// not responsible for trimming hidden days.
buildValidRange() {
let e = this.props.validRangeInput, o = typeof e == "function" ? e.call(this.props.calendarApi, this.props.dateEnv.toDate(this.props.nowManager.getDateMarker())) : e;
return this.refineRange(o) || { start: null, end: null };
}
// Builds a structure with info about the "current" range, the range that is
// highlighted as being the current month for example.
// See build() for a description of `direction`.
// Guaranteed to have `range` and `unit` properties. `duration` is optional.
buildCurrentRangeInfo(e, o) {
let { props: M } = this, b = null, z = null, n = null, p;
return M.duration ? (b = M.duration, z = M.durationUnit, n = this.buildRangeFromDuration(e, o, b, z)) : (p = this.props.dayCount) ? (z = "day", n = this.buildRangeFromDayCount(e, o, p)) : (n = this.buildCustomVisibleRange(e)) ? z = M.dateEnv.greatestWholeUnit(n.start, n.end).unit : (b = this.getFallbackDuration(), z = k1(b).unit, n = this.buildRangeFromDuration(e, o, b, z)), { duration: b, unit: z, range: n };
}
getFallbackDuration() {
return P({ day: 1 });
}
// Returns a new activeRange to have time values (un-ambiguate)
// slotMinTime or slotMaxTime causes the range to expand.
adjustActiveRange(e) {
let { dateEnv: o, usesMinMaxTime: M, slotMinTime: b, slotMaxTime: z } = this.props, { start: n, end: p } = e;
return M && (de(b) < 0 && (n = J(n), n = o.add(n, b)), de(z) > 1 && (p = J(p), p = c0(p, -1), p = o.add(p, z))), { start: n, end: p };
}
// Builds the "current" range when it is specified as an explicit duration.
// `unit` is the already-computed greatestDurationDenominator unit of duration.
buildRangeFromDuration(e, o, M, b) {
let { dateEnv: z, dateAlignment: n } = this.props, p, r, c;
if (!n) {
let { dateIncrement: a } = this.props;
a && g0(a) < g0(M) ? n = k1(a).unit : n = b;
}
de(M) <= 1 && this.isHiddenDay(p) && (p = this.skipHiddenDays(p, o), p = J(p));
function i() {
p = z.startOf(e, n), r = z.add(p, M), c = { start: p, end: r };
}
return i(), this.trimHiddenDays(c) || (e = this.skipHiddenDays(e, o), i()), c;
}
// Builds the "current" range when a dayCount is specified.
buildRangeFromDayCount(e, o, M) {
let { dateEnv: b, dateAlignment: z } = this.props, n = 0, p = e, r;
z && (p = b.startOf(p, z)), p = J(p), p = this.skipHiddenDays(p, o), r = p;
do
r = c0(r, 1), this.isHiddenDay(r) || (n += 1);
while (n < M);
return { start: p, end: r };
}
// Builds a normalized range object for the "visible" range,
// which is a way to define the currentRange and activeRange at the same time.
buildCustomVisibleRange(e) {
let { props: o } = this, M = o.visibleRangeInput, b = typeof M == "function" ? M.call(o.calendarApi, o.dateEnv.toDate(e)) : M, z = this.refineRange(b);
return z && (z.start == null || z.end == null) ? null : z;
}
// Computes the range that will represent the element/cells for *rendering*,
// but which may have voided days/times.
// not responsible for trimming hidden days.
buildRenderRange(e, o, M) {
return e;
}
// Compute the duration value that should be added/substracted to the current date
// when a prev/next operation happens.
buildDateIncrement(e) {
let { dateIncrement: o } = this.props, M;
return o || ((M = this.props.dateAlignment) ? P(1, M) : e || P({ days: 1 }));
}
refineRange(e) {
if (e) {
let o = ja(e, this.props.dateEnv);
return o && (o = it(o)), o;
}
return null;
}
/* Hidden Days
------------------------------------------------------------------------------------------------------------------*/
// Initializes internal variables related to calculating hidden days-of-week
initHiddenDays() {
let e = this.props.hiddenDays || [], o = [], M = 0, b;
for (this.props.weekends === !1 && e.push(0, 6), b = 0; b < 7; b += 1)
(o[b] = e.indexOf(b) !== -1) || (M += 1);
if (!M)
throw new Error("invalid hiddenDays");
this.isHiddenDayHash = o;
}
// Remove days from the beginning and end of the range that are computed as hidden.
// If the whole range is trimmed off, returns null
trimHiddenDays(e) {
let { start: o, end: M } = e;
return o && (o = this.skipHiddenDays(o)), M && (M = this.skipHiddenDays(M, -1, !0)), o == null || M == null || o < M ? { start: o, end: M } : null;
}
// Is the current day hidden?
// `day` is a day-of-week index (0-6), or a Date (used for UTC)
isHiddenDay(e) {
return e instanceof Date && (e = e.getUTCDay()), this.isHiddenDayHash[e];
}
// Incrementing the current day until it is no longer a hidden day, returning a copy.
// DOES NOT CONSIDER validRange!
// If the initial value of `date` is not a hidden day, don't do anything.
// Pass `isExclusive` as `true` if you are dealing with an end date.
// `inc` defaults to `1` (increment one day forward each time)
skipHiddenDays(e, o = 1, M = !1) {
for (; this.isHiddenDayHash[(e.getUTCDay() + (M ? o : 0) + 7) % 7]; )
e = c0(e, o);
return e;
}
}
function eM(t, e, o, M) {
return {
instanceId: z1(),
defId: t,
range: e,
forcedStartTzo: o ?? null,
forcedEndTzo: M ?? null
};
}
function Va(t, e, o, M) {
for (let b = 0; b < M.length; b += 1) {
let z = M[b].parse(t, o);
if (z) {
let { allDay: n } = t;
return n == null && (n = e, n == null && (n = z.allDayGuess, n == null && (n = !1))), {
allDay: n,
duration: z.duration,
typeData: z.typeData,
typeId: b
};
}
}
return null;
}
function Z1(t, e, o) {
let { dateEnv: M, pluginHooks: b, options: z } = o, { defs: n, instances: p } = t;
p = h1(p, (r) => !n[r.defId].recurringDef);
for (let r in n) {
let c = n[r];
if (c.recurringDef) {
let { duration: i } = c.recurringDef;
i || (i = c.allDay ? z.defaultAllDayEventDuration : z.defaultTimedEventDuration);
let a = Qa(c, i, e, M, b.recurringTypes);
for (let s of a) {
let l = eM(r, {
start: s,
end: M.add(s, i)
});
p[l.instanceId] = l;
}
}
}
return { defs: n, instances: p };
}
function Qa(t, e, o, M, b) {
let n = b[t.recurringDef.typeId].expand(t.recurringDef.typeData, {
start: M.subtract(o.start, e),
end: o.end
}, M);
return t.allDay && (n = n.map(J)), n;
}
const v2 = {
id: String,
groupId: String,
title: String,
url: String,
interactive: Boolean
}, Un = {
start: f,
end: f,
date: f,
allDay: Boolean
}, Ka = Object.assign(Object.assign(Object.assign({}, v2), Un), { extendedProps: f });
function jn(t, e, o, M, b = tM(o), z, n) {
let { refined: p, extra: r } = Fn(t, o, b), c = Za(e, o), i = Va(p, c, o.dateEnv, o.pluginHooks.recurringTypes);
if (i) {
let s = uo(p, r, e ? e.sourceId : "", i.allDay, !!i.duration, o, z);
return s.recurringDef = {
typeId: i.typeId,
typeData: i.typeData,
duration: i.duration
}, { def: s, instance: null };
}
let a = $a(p, c, o, M);
if (a) {
let s = uo(p, r, e ? e.sourceId : "", a.allDay, a.hasEnd, o, z), l = eM(s.defId, a.range, a.forcedStartTzo, a.forcedEndTzo);
return n && s.publicId && n[s.publicId] && (l.instanceId = n[s.publicId]), { def: s, instance: l };
}
return null;
}
function Fn(t, e, o = tM(e)) {
return b2(t, o);
}
function tM(t) {
return Object.assign(Object.assign(Object.assign({}, P2), Ka), t.pluginHooks.eventRefiners);
}
function uo(t, e, o, M, b, z, n) {
let p = {
title: t.title || "",
groupId: t.groupId || "",
publicId: t.id || "",
url: t.url || "",
recurringDef: null,
defId: (n && t.id ? n[t.id] : "") || z1(),
sourceId: o,
allDay: M,
hasEnd: b,
interactive: t.interactive,
ui: Ze(t, z),
extendedProps: Object.assign(Object.assign({}, t.extendedProps || {}), e)
};
for (let r of z.pluginHooks.eventDefMemberAdders)
Object.assign(p, r(t));
return Object.freeze(p.ui.classNames), Object.freeze(p.extendedProps), p;
}
function $a(t, e, o, M) {
let { allDay: b } = t, z, n = null, p = !1, r, c = null, i = t.start != null ? t.start : t.date;
if (z = o.dateEnv.createMarkerMeta(i), z)
n = z.marker;
else if (!M)
return null;
return t.end != null && (r = o.dateEnv.createMarkerMeta(t.end)), b == null && (e != null ? b = e : b = (!z || z.isTimeUnspecified) && (!r || r.isTimeUnspecified)), b && n && (n = J(n)), r && (c = r.marker, b && (c = J(c)), n && c <= n && (c = null)), c ? p = !0 : M || (p = o.options.forceEventDuration || !1, c = o.dateEnv.add(n, b ? o.options.defaultAllDayEventDuration : o.options.defaultTimedEventDuration)), {
allDay: b,
hasEnd: p,
range: { start: n, end: c },
forcedStartTzo: z ? z.forcedTzo : null,
forcedEndTzo: r ? r.forcedTzo : null
};
}
function Za(t, e) {
let o = null;
return t && (o = t.defaultAllDay), o == null && (o = e.options.defaultAllDay), o;
}
function $e(t, e, o, M, b, z) {
let n = w0(), p = tM(o);
for (let r of t) {
let c = jn(r, e, o, M, p, b, z);
c && qo(c, n);
}
return n;
}
function qo(t, e = w0()) {
return e.defs[t.def.defId] = t.def, t.instance && (e.instances[t.instance.instanceId] = t.instance), e;
}
function oM(t, e) {
let o = t.instances[e];
if (o) {
let M = t.defs[o.defId], b = st(t, (z) => Ja(M, z));
return b.defs[M.defId] = M, b.instances[o.instanceId] = o, b;
}
return w0();
}
function Ja(t, e) {
return !!(t.groupId && t.groupId === e.groupId);
}
function w0() {
return { defs: {}, instances: {} };
}
function at(t, e) {
return {
defs: Object.assign(Object.assign({}, t.defs), e.defs),
instances: Object.assign(Object.assign({}, t.instances), e.instances)
};
}
function st(t, e) {
let o = h1(t.defs, e), M = h1(t.instances, (b) => o[b.defId]);
return { defs: o, instances: M };
}
function es(t, e) {
let { defs: o, instances: M } = t, b = {}, z = {};
for (let n in o)
e.defs[n] || (b[n] = o[n]);
for (let n in M)
!e.instances[n] && // not explicitly excluded
b[M[n].defId] && (z[n] = M[n]);
return {
defs: b,
instances: z
};
}
function ts(t, e) {
return Array.isArray(t) ? $e(t, null, e, !0) : typeof t == "object" && t ? $e([t], null, e, !0) : t != null ? String(t) : null;
}
function fo(t) {
return Array.isArray(t) ? t : typeof t == "string" ? t.split(/\s+/) : [];
}
const P2 = {
display: String,
editable: Boolean,
startEditable: Boolean,
durationEditable: Boolean,
constraint: f,
overlap: f,
allow: f,
className: fo,
classNames: fo,
color: String,
backgroundColor: String,
borderColor: String,
textColor: String
}, os = {
display: null,
startEditable: null,
durationEditable: null,
constraints: [],
overlap: null,
allows: [],
backgroundColor: "",
borderColor: "",
textColor: "",
classNames: []
};
function Ze(t, e) {
let o = ts(t.constraint, e);
return {
display: t.display || null,
startEditable: t.startEditable != null ? t.startEditable : t.editable,
durationEditable: t.durationEditable != null ? t.durationEditable : t.editable,
constraints: o != null ? [o] : [],
overlap: t.overlap != null ? t.overlap : null,
allows: t.allow != null ? [t.allow] : [],
backgroundColor: t.backgroundColor || t.color || "",
borderColor: t.borderColor || t.color || "",
textColor: t.textColor || "",
classNames: (t.className || []).concat(t.classNames || [])
// join singular and plural
};
}
function MM(t) {
return t.reduce(Ms, os);
}
function Ms(t, e) {
return {
display: e.display != null ? e.display : t.display,
startEditable: e.startEditable != null ? e.startEditable : t.startEditable,
durationEditable: e.durationEditable != null ? e.durationEditable : t.durationEditable,
constraints: t.constraints.concat(e.constraints),
overlap: typeof e.overlap == "boolean" ? e.overlap : t.overlap,
allows: t.allows.concat(e.allows),
backgroundColor: e.backgroundColor || t.backgroundColor,
borderColor: e.borderColor || t.borderColor,
textColor: e.textColor || t.textColor,
classNames: t.classNames.concat(e.classNames)
};
}
const bs = {
id: String,
defaultAllDay: Boolean,
url: String,
format: String,
events: f,
eventDataTransform: f,
// for any network-related sources
success: f,
failure: f
};
function Gn(t, e, o = Yn(e)) {
let M;
if (typeof t == "string" ? M = { url: t } : typeof t == "function" || Array.isArray(t) ? M = { events: t } : typeof t == "object" && t && (M = t), M) {
let { refined: b, extra: z } = b2(M, o), n = zs(b, e);
if (n)
return {
_raw: t,
isFetching: !1,
latestFetchId: "",
fetchRange: null,
defaultAllDay: b.defaultAllDay,
eventDataTransform: b.eventDataTransform,
success: b.success,
failure: b.failure,
publicId: b.id || "",
sourceId: z1(),
sourceDefId: n.sourceDefId,
meta: n.meta,
ui: Ze(b, e),
extendedProps: z
};
}
return null;
}
function Yn(t) {
return Object.assign(Object.assign(Object.assign({}, P2), bs), t.pluginHooks.eventSourceRefiners);
}
function zs(t, e) {
let o = e.pluginHooks.eventSourceDefs;
for (let M = o.length - 1; M >= 0; M -= 1) {
let z = o[M].parseMeta(t);
if (z)
return { sourceDefId: M, meta: z };
}
return null;
}
function ns(t, e, o, M, b) {
switch (e.type) {
case "RECEIVE_EVENTS":
return ps(t, o[e.sourceId], e.fetchId, e.fetchRange, e.rawEvents, b);
case "RESET_RAW_EVENTS":
return rs(t, o[e.sourceId], e.rawEvents, M.activeRange, b);
case "ADD_EVENTS":
return cs(
t,
e.eventStore,
// new ones
M ? M.activeRange : null,
b
);
case "RESET_EVENTS":
return e.eventStore;
case "MERGE_EVENTS":
return at(t, e.eventStore);
case "PREV":
// TODO: how do we track all actions that affect dateProfile :(
case "NEXT":
case "CHANGE_DATE":
case "CHANGE_VIEW_TYPE":
return M ? Z1(t, M.activeRange, b) : t;
case "REMOVE_EVENTS":
return es(t, e.eventStore);
case "REMOVE_EVENT_SOURCE":
return Qn(t, e.sourceId);
case "REMOVE_ALL_EVENT_SOURCES":
return st(t, (z) => !z.sourceId);
case "REMOVE_ALL_EVENTS":
return w0();
default:
return t;
}
}
function ps(t, e, o, M, b, z) {
if (e && // not already removed
o === e.latestFetchId) {
let n = $e(Vn(b, e, z), e, z);
return M && (n = Z1(n, M, z)), at(Qn(t, e.sourceId), n);
}
return t;
}
function rs(t, e, o, M, b) {
const { defIdMap: z, instanceIdMap: n } = as(t);
let p = $e(Vn(o, e, b), e, b, !1, z, n);
return Z1(p, M, b);
}
function Vn(t, e, o) {
let M = o.options.eventDataTransform, b = e ? e.eventDataTransform : null;
return b && (t = Qb(t, b)), M && (t = Qb(t, M)), t;
}
function Qb(t, e) {
let o;
if (!e)
o = t;
else {
o = [];
for (let M of t) {
let b = e(M);
b ? o.push(b) : b == null && o.push(M);
}
}
return o;
}
function cs(t, e, o, M) {
return o && (e = Z1(e, o, M)), at(t, e);
}
function Kb(t, e, o) {
let { defs: M } = t, b = d0(t.instances, (z) => M[z.defId].allDay ? z : Object.assign(Object.assign({}, z), { range: {
start: o.createMarker(e.toDate(z.range.start, z.forcedStartTzo)),
end: o.createMarker(e.toDate(z.range.end, z.forcedEndTzo))
}, forcedStartTzo: o.canComputeOffset ? null : z.forcedStartTzo, forcedEndTzo: o.canComputeOffset ? null : z.forcedEndTzo }));
return { defs: M, instances: b };
}
function Qn(t, e) {
return st(t, (o) => o.sourceId !== e);
}
function is(t, e) {
return {
defs: t.defs,
instances: h1(t.instances, (o) => !e[o.instanceId])
};
}
function as(t) {
const { defs: e, instances: o } = t, M = {}, b = {};
for (let z in e) {
const n = e[z], { publicId: p } = n;
p && (M[p] = z);
}
for (let z in o) {
const n = o[z], p = e[n.defId], { publicId: r } = p;
r && (b[r] = z);
}
return { defIdMap: M, instanceIdMap: b };
}
class n2 {
constructor() {
this.handlers = {}, this.thisContext = null;
}
setThisContext(e) {
this.thisContext = e;
}
setOptions(e) {
this.options = e;
}
on(e, o) {
ss(this.handlers, e, o);
}
off(e, o) {
Os(this.handlers, e, o);
}
trigger(e, ...o) {
let M = this.handlers[e] || [], b = this.options && this.options[e], z = [].concat(b || [], M);
for (let n of z)
n.apply(this.thisContext, o);
}
hasHandlers(e) {
return !!(this.handlers[e] && this.handlers[e].length || this.options && this.options[e]);
}
}
function ss(t, e, o) {
(t[e] || (t[e] = [])).push(o);
}
function Os(t, e, o) {
o ? t[e] && (t[e] = t[e].filter((M) => M !== o)) : delete t[e];
}
const ls = {
startTime: "09:00",
endTime: "17:00",
daysOfWeek: [1, 2, 3, 4, 5],
display: "inverse-background",
classNames: "fc-non-business",
groupId: "_businessHours"
// so multiple defs get grouped
};
function Kn(t, e) {
return $e(ds(t), null, e);
}
function ds(t) {
let e;
return t === !0 ? e = [{}] : Array.isArray(t) ? e = t.filter((o) => o.daysOfWeek) : typeof t == "object" && t ? e = [t] : e = [], e = e.map((o) => Object.assign(Object.assign({}, ls), o)), e;
}
function $n(t, e, o) {
o.emitter.trigger("select", Object.assign(Object.assign({}, bM(t, o)), { jsEvent: e ? e.origEvent : null, view: o.viewApi || o.calendarApi.view }));
}
function As(t, e) {
e.emitter.trigger("unselect", {
jsEvent: t ? t.origEvent : null,
view: e.viewApi || e.calendarApi.view
});
}
function bM(t, e) {
let o = {};
for (let M of e.pluginHooks.dateSpanTransforms)
Object.assign(o, M(t, e));
return Object.assign(o, Bs(t, e.dateEnv)), o;
}
function $b(t, e, o) {
let { dateEnv: M, options: b } = o, z = e;
return t ? (z = J(z), z = M.add(z, b.defaultAllDayEventDuration)) : z = M.add(z, b.defaultTimedEventDuration), z;
}
function zM(t, e, o, M) {
let b = H2(t.defs, e), z = w0();
for (let n in t.defs) {
let p = t.defs[n];
z.defs[n] = us(p, b[n], o, M);
}
for (let n in t.instances) {
let p = t.instances[n], r = z.defs[p.defId];
z.instances[n] = qs(p, r, b[p.defId], o, M);
}
return z;
}
function us(t, e, o, M) {
let b = o.standardProps || {};
b.hasEnd == null && e.durationEditable && (o.startDelta || o.endDelta) && (b.hasEnd = !0);
let z = Object.assign(Object.assign(Object.assign({}, t), b), { ui: Object.assign(Object.assign({}, t.ui), b.ui) });
o.extendedProps && (z.extendedProps = Object.assign(Object.assign({}, z.extendedProps), o.extendedProps));
for (let n of M.pluginHooks.eventDefMutationAppliers)
n(z, o, M);
return !z.hasEnd && M.options.forceEventDuration && (z.hasEnd = !0), z;
}
function qs(t, e, o, M, b) {
let { dateEnv: z } = b, n = M.standardProps && M.standardProps.allDay === !0, p = M.standardProps && M.standardProps.hasEnd === !1, r = Object.assign({}, t);
return n && (r.range = Pn(r.range)), M.datesDelta && o.startEditable && (r.range = {
start: z.add(r.range.start, M.datesDelta),
end: z.add(r.range.end, M.datesDelta)
}), M.startDelta && o.durationEditable && (r.range = {
start: z.add(r.range.start, M.startDelta),
end: r.range.end
}), M.endDelta && o.durationEditable && (r.range = {
start: r.range.start,
end: z.add(r.range.end, M.endDelta)
}), p && (r.range = {
start: r.range.start,
end: $b(e.allDay, r.range.start, b)
}), e.allDay && (r.range = {
start: J(r.range.start),
end: J(r.range.end)
}), r.range.end < r.range.start && (r.range.end = $b(e.allDay, r.range.start, b)), r;
}
class pe {
constructor(e, o) {
this.context = e, this.internalEventSource = o;
}
remove() {
this.context.dispatch({
type: "REMOVE_EVENT_SOURCE",
sourceId: this.internalEventSource.sourceId
});
}
refetch() {
this.context.dispatch({
type: "FETCH_EVENT_SOURCES",
sourceIds: [this.internalEventSource.sourceId],
isRefetch: !0
});
}
get id() {
return this.internalEventSource.publicId;
}
get url() {
return this.internalEventSource.meta.url;
}
get format() {
return this.internalEventSource.meta.format;
}
}
class M0 {
// instance will be null if expressing a recurring event that has no current instances,
// OR if trying to validate an incoming external event that has no dates assigned
constructor(e, o, M) {
this._context = e, this._def = o, this._instance = M || null;
}
/*
TODO: make event struct more responsible for this
*/
setProp(e, o) {
if (e in Un)
console.warn("Could not set date-related prop 'name'. Use one of the date-related methods instead.");
else if (e === "id")
o = v2[e](o), this.mutate({
standardProps: { publicId: o }
// hardcoded internal name
});
else if (e in v2)
o = v2[e](o), this.mutate({
standardProps: { [e]: o }
});
else if (e in P2) {
let M = P2[e](o);
e === "color" ? M = { backgroundColor: o, borderColor: o } : e === "editable" ? M = { startEditable: o, durationEditable: o } : M = { [e]: o }, this.mutate({
standardProps: { ui: M }
});
} else
console.warn(`Could not set prop '${e}'. Use setExtendedProp instead.`);
}
setExtendedProp(e, o) {
this.mutate({
extendedProps: { [e]: o }
});
}
setStart(e, o = {}) {
let { dateEnv: M } = this._context, b = M.createMarker(e);
if (b && this._instance) {
let z = this._instance.range, n = ie(z.start, b, M, o.granularity);
o.maintainDuration ? this.mutate({ datesDelta: n }) : this.mutate({ startDelta: n });
}
}
setEnd(e, o = {}) {
let { dateEnv: M } = this._context, b;
if (!(e != null && (b = M.createMarker(e), !b)) && this._instance)
if (b) {
let z = ie(this._instance.range.end, b, M, o.granularity);
this.mutate({ endDelta: z });
} else
this.mutate({ standardProps: { hasEnd: !1 } });
}
setDates(e, o, M = {}) {
let { dateEnv: b } = this._context, z = { allDay: M.allDay }, n = b.createMarker(e), p;
if (n && !(o != null && (p = b.createMarker(o), !p)) && this._instance) {
let r = this._instance.range;
M.allDay === !0 && (r = Pn(r));
let c = ie(r.start, n, b, M.granularity);
if (p) {
let i = ie(r.end, p, b, M.granularity);
Gi(c, i) ? this.mutate({ datesDelta: c, standardProps: z }) : this.mutate({ startDelta: c, endDelta: i, standardProps: z });
} else
z.hasEnd = !1, this.mutate({ datesDelta: c, standardProps: z });
}
}
moveStart(e) {
let o = P(e);
o && this.mutate({ startDelta: o });
}
moveEnd(e) {
let o = P(e);
o && this.mutate({ endDelta: o });
}
moveDates(e) {
let o = P(e);
o && this.mutate({ datesDelta: o });
}
setAllDay(e, o = {}) {
let M = { allDay: e }, { maintainDuration: b } = o;
b == null && (b = this._context.options.allDayMaintainDuration), this._def.allDay !== e && (M.hasEnd = b), this.mutate({ standardProps: M });
}
formatRange(e) {
let { dateEnv: o } = this._context, M = this._instance, b = Z(e);
return this._def.hasEnd ? o.formatRange(M.range.start, M.range.end, b, {
forcedStartTzo: M.forcedStartTzo,
forcedEndTzo: M.forcedEndTzo
}) : o.format(M.range.start, b, {
forcedTzo: M.forcedStartTzo
});
}
mutate(e) {
let o = this._instance;
if (o) {
let M = this._def, b = this._context, { eventStore: z } = b.getCurrentData(), n = oM(z, o.instanceId);
n = zM(n, {
"": {
display: "",
startEditable: !0,
durationEditable: !0,
constraints: [],
overlap: null,
allows: [],
backgroundColor: "",
borderColor: "",
textColor: "",
classNames: []
}
}, e, b);
let r = new M0(b, M, o);
this._def = n.defs[M.defId], this._instance = n.instances[o.instanceId], b.dispatch({
type: "MERGE_EVENTS",
eventStore: n
}), b.emitter.trigger("eventChange", {
oldEvent: r,
event: this,
relatedEvents: Q1(n, b, o),
revert() {
b.dispatch({
type: "RESET_EVENTS",
eventStore: z
// the ORIGINAL store
});
}
});
}
}
remove() {
let e = this._context, o = Zn(this);
e.dispatch({
type: "REMOVE_EVENTS",
eventStore: o
}), e.emitter.trigger("eventRemove", {
event: this,
relatedEvents: [],
revert() {
e.dispatch({
type: "MERGE_EVENTS",
eventStore: o
});
}
});
}
get source() {
let { sourceId: e } = this._def;
return e ? new pe(this._context, this._context.getCurrentData().eventSources[e]) : null;
}
get start() {
return this._instance ? this._context.dateEnv.toDate(this._instance.range.start) : null;
}
get end() {
return this._instance && this._def.hasEnd ? this._context.dateEnv.toDate(this._instance.range.end) : null;
}
get startStr() {
let e = this._instance;
return e ? this._context.dateEnv.formatIso(e.range.start, {
omitTime: this._def.allDay,
forcedTzo: e.forcedStartTzo
}) : "";
}
get endStr() {
let e = this._instance;
return e && this._def.hasEnd ? this._context.dateEnv.formatIso(e.range.end, {
omitTime: this._def.allDay,
forcedTzo: e.forcedEndTzo
}) : "";
}
// computable props that all access the def
// TODO: find a TypeScript-compatible way to do this at scale
get id() {
return this._def.publicId;
}
get groupId() {
return this._def.groupId;
}
get allDay() {
return this._def.allDay;
}
get title() {
return this._def.title;
}
get url() {
return this._def.url;
}
get display() {
return this._def.ui.display || "auto";
}
// bad. just normalize the type earlier
get startEditable() {
return this._def.ui.startEditable;
}
get durationEditable() {
return this._def.ui.durationEditable;
}
get constraint() {
return this._def.ui.constraints[0] || null;
}
get overlap() {
return this._def.ui.overlap;
}
get allow() {
return this._def.ui.allows[0] || null;
}
get backgroundColor() {
return this._def.ui.backgroundColor;
}
get borderColor() {
return this._def.ui.borderColor;
}
get textColor() {
return this._def.ui.textColor;
}
// NOTE: user can't modify these because Object.freeze was called in event-def parsing
get classNames() {
return this._def.ui.classNames;
}
get extendedProps() {
return this._def.extendedProps;
}
toPlainObject(e = {}) {
let o = this._def, { ui: M } = o, { startStr: b, endStr: z } = this, n = {
allDay: o.allDay
};
return o.title && (n.title = o.title), b && (n.start = b), z && (n.end = z), o.publicId && (n.id = o.publicId), o.groupId && (n.groupId = o.groupId), o.url && (n.url = o.url), M.display && M.display !== "auto" && (n.display = M.display), e.collapseColor && M.backgroundColor && M.backgroundColor === M.borderColor ? n.color = M.backgroundColor : (M.backgroundColor && (n.backgroundColor = M.backgroundColor), M.borderColor && (n.borderColor = M.borderColor)), M.textColor && (n.textColor = M.textColor), M.classNames.length && (n.classNames = M.classNames), Object.keys(o.extendedProps).length && (e.collapseExtendedProps ? Object.assign(n, o.extendedProps) : n.extendedProps = o.extendedProps), n;
}
toJSON() {
return this.toPlainObject();
}
}
function Zn(t) {
let e = t._def, o = t._instance;
return {
defs: { [e.defId]: e },
instances: o ? { [o.instanceId]: o } : {}
};
}
function Q1(t, e, o) {
let { defs: M, instances: b } = t, z = [], n = o ? o.instanceId : "";
for (let p in b) {
let r = b[p], c = M[r.defId];
r.instanceId !== n && z.push(new M0(e, c, r));
}
return z;
}
function Wo(t, e, o, M) {
let b = {}, z = {}, n = {}, p = [], r = [], c = H2(t.defs, e);
for (let i in t.defs) {
let a = t.defs[i];
c[a.defId].display === "inverse-background" && (a.groupId ? (b[a.groupId] = [], n[a.groupId] || (n[a.groupId] = a)) : z[i] = []);
}
for (let i in t.instances) {
let a = t.instances[i], s = t.defs[a.defId], l = c[s.defId], d = a.range, A = !s.allDay && M ? it(d, M) : d, u = M1(A, o);
u && (l.display === "inverse-background" ? s.groupId ? b[s.groupId].push(u) : z[a.defId].push(u) : l.display !== "none" && (l.display === "background" ? p : r).push({
def: s,
ui: l,
instance: a,
range: u,
isStart: A.start && A.start.valueOf() === u.start.valueOf(),
isEnd: A.end && A.end.valueOf() === u.end.valueOf()
}));
}
for (let i in b) {
let a = b[i], s = Vb(a, o);
for (let l of s) {
let d = n[i], A = c[d.defId];
p.push({
def: d,
ui: A,
instance: null,
range: l,
isStart: !1,
isEnd: !1
});
}
}
for (let i in z) {
let a = z[i], s = Vb(a, o);
for (let l of s)
p.push({
def: t.defs[i],
ui: c[i],
instance: null,
range: l,
isStart: !1,
isEnd: !1
});
}
return { bg: p, fg: r };
}
function fs(t) {
return t.ui.display === "background" || t.ui.display === "inverse-background";
}
function Zb(t, e) {
t.fcSeg = e;
}
function Re(t) {
return t.fcSeg || t.parentNode.fcSeg || // for the harness
null;
}
function H2(t, e) {
return d0(t, (o) => Jn(o, e));
}
function Jn(t, e) {
let o = [];
return e[""] && o.push(e[""]), e[t.defId] && o.push(e[t.defId]), o.push(t.ui), MM(o);
}
function Ot(t, e) {
let o = t.map(Ws);
return o.sort((M, b) => Nn(M, b, e)), o.map((M) => M._seg);
}
function Ws(t) {
let { eventRange: e } = t, o = e.def, M = e.instance ? e.instance.range : e.range, b = M.start ? M.start.valueOf() : 0, z = M.end ? M.end.valueOf() : 0;
return Object.assign(Object.assign(Object.assign({}, o.extendedProps), o), {
id: o.publicId,
start: b,
end: z,
duration: z - b,
allDay: Number(o.allDay),
_seg: t
});
}
function hs(t, e) {
let { pluginHooks: o } = e, M = o.isDraggableTransformers, { def: b, ui: z } = t.eventRange, n = z.startEditable;
for (let p of M)
n = p(n, b, z, e);
return n;
}
function Rs(t, e) {
return t.isStart && t.eventRange.ui.durationEditable && e.options.eventResizableFromStart;
}
function ms(t, e) {
return t.isEnd && t.eventRange.ui.durationEditable;
}
function je(t, e, o, M, b, z, n) {
let { dateEnv: p, options: r } = o, { displayEventTime: c, displayEventEnd: i } = r, a = t.eventRange.def, s = t.eventRange.instance;
c == null && (c = M !== !1), i == null && (i = b !== !1);
let l = s.range.start, d = s.range.end, A = z || t.start || t.eventRange.range.start, u = n || t.end || t.eventRange.range.end, W = J(l).valueOf() === J(A).valueOf(), h = J(W1(d, -1)).valueOf() === J(W1(u, -1)).valueOf();
return c && !a.allDay && (W || h) ? (A = W ? l : A, u = h ? d : u, i && a.hasEnd ? p.formatRange(A, u, e, {
forcedStartTzo: z ? null : s.forcedStartTzo,
forcedEndTzo: n ? null : s.forcedEndTzo
}) : p.format(A, e, {
forcedTzo: z ? null : s.forcedStartTzo
// nooooo, same
})) : "";
}
function I0(t, e, o) {
let M = t.eventRange.range;
return {
isPast: M.end <= (o || e.start),
isFuture: M.start >= (o || e.end),
isToday: e && o1(e, M.start)
};
}
function gs(t) {
let e = ["fc-event"];
return t.isMirror && e.push("fc-event-mirror"), t.isDraggable && e.push("fc-event-draggable"), (t.isStartResizable || t.isEndResizable) && e.push("fc-event-resizable"), t.isDragging && e.push("fc-event-dragging"), t.isResizing && e.push("fc-event-resizing"), t.isSelected && e.push("fc-event-selected"), t.isStart && e.push("fc-event-start"), t.isEnd && e.push("fc-event-end"), t.isPast && e.push("fc-event-past"), t.isToday && e.push("fc-event-today"), t.isFuture && e.push("fc-event-future"), e;
}
function nM(t) {
return t.instance ? t.instance.instanceId : `${t.def.defId}:${t.range.start.toISOString()}`;
}
function pM(t, e) {
let { def: o, instance: M } = t.eventRange, { url: b } = o;
if (b)
return { href: b };
let { emitter: z, options: n } = e, { eventInteractive: p } = n;
return p == null && (p = o.interactive, p == null && (p = !!z.hasHandlers("eventClick"))), p ? vn((r) => {
z.trigger("eventClick", {
el: r.target,
event: new M0(e, o, M),
jsEvent: r,
view: e.viewApi
});
}) : {};
}
const Ls = {
start: f,
end: f,
allDay: Boolean
};
function ys(t, e, o) {
let M = vs(t, e), { range: b } = M;
if (!b.start)
return null;
if (!b.end) {
if (o == null)
return null;
b.end = e.add(b.start, o);
}
return M;
}
function vs(t, e) {
let { refined: o, extra: M } = b2(t, Ls), b = o.start ? e.createMarkerMeta(o.start) : null, z = o.end ? e.createMarkerMeta(o.end) : null, { allDay: n } = o;
return n == null && (n = b && b.isTimeUnspecified && (!z || z.isTimeUnspecified)), Object.assign({ range: {
start: b ? b.marker : null,
end: z ? z.marker : null
}, allDay: n }, M);
}
function Ns(t, e) {
return In(t.range, e.range) && t.allDay === e.allDay && Ts(t, e);
}
function Ts(t, e) {
for (let o in e)
if (o !== "range" && o !== "allDay" && t[o] !== e[o])
return !1;
for (let o in t)
if (!(o in e))
return !1;
return !0;
}
function Bs(t, e) {
return Object.assign(Object.assign({}, tp(t.range, e, t.allDay)), { allDay: t.allDay });
}
function ep(t, e, o) {
return Object.assign(Object.assign({}, tp(t, e, o)), { timeZone: e.timeZone });
}
function tp(t, e, o) {
return {
start: e.toDate(t.start),
end: e.toDate(t.end),
startStr: e.formatIso(t.start, { omitTime: o }),
endStr: e.formatIso(t.end, { omitTime: o })
};
}
function Ss(t, e, o) {
let M = Fn({ editable: !1 }, o), b = uo(
M.refined,
M.extra,
"",
// sourceId
t.allDay,
!0,
// hasEnd
o
);
return {
def: b,
ui: Jn(b, e),
instance: eM(b.defId, t.range),
range: t.range,
isStart: !0,
isEnd: !0
};
}
function op(t, e, o) {
let M = !1, b = function(p) {
M || (M = !0, e(p));
}, z = function(p) {
M || (M = !0, o(p));
}, n = t(b, z);
n && typeof n.then == "function" && n.then(b, z);
}
class Jb extends Error {
constructor(e, o) {
super(e), this.response = o;
}
}
function Mp(t, e, o) {
t = t.toUpperCase();
const M = {
method: t
};
return t === "GET" ? e += (e.indexOf("?") === -1 ? "?" : "&") + new URLSearchParams(o) : (M.body = new URLSearchParams(o), M.headers = {
"Content-Type": "application/x-www-form-urlencoded"
}), fetch(e, M).then((b) => {
if (b.ok)
return b.json().then((z) => [z, b], () => {
throw new Jb("Failure parsing JSON", b);
});
throw new Jb("Request failed", b);
});
}
let jt;
function rM() {
return jt == null && (jt = Es()), jt;
}
function Es() {
if (typeof document > "u")
return !0;
let t = document.createElement("div");
t.style.position = "absolute", t.style.top = "0px", t.style.left = "0px", t.innerHTML = "
", t.querySelector("table").style.height = "100px", t.querySelector("div").style.height = "100%", document.body.appendChild(t);
let o = t.querySelector("div").offsetHeight > 0;
return document.body.removeChild(t), o;
}
class ws extends E {
constructor() {
super(...arguments), this.state = {
forPrint: !1
}, this.handleBeforePrint = () => {
he(() => {
this.setState({ forPrint: !0 });
});
}, this.handleAfterPrint = () => {
he(() => {
this.setState({ forPrint: !1 });
});
};
}
render() {
let { props: e } = this, { options: o } = e, { forPrint: M } = this.state, b = M || o.height === "auto" || o.contentHeight === "auto", z = !b && o.height != null ? o.height : "", n = [
"fc",
M ? "fc-media-print" : "fc-media-screen",
`fc-direction-${o.direction}`,
e.theme.getClass("root")
];
return rM() || n.push("fc-liquid-hack"), e.children(n, z, b, M);
}
componentDidMount() {
let { emitter: e } = this.props;
e.on("_beforeprint", this.handleBeforePrint), e.on("_afterprint", this.handleAfterPrint);
}
componentWillUnmount() {
let { emitter: e } = this.props;
e.off("_beforeprint", this.handleBeforePrint), e.off("_afterprint", this.handleAfterPrint);
}
}
class ve {
constructor(e) {
this.component = e.component, this.isHitComboAllowed = e.isHitComboAllowed || null;
}
destroy() {
}
}
function Cs(t, e) {
return {
component: t,
el: e.el,
useEventCenter: e.useEventCenter != null ? e.useEventCenter : !0,
isHitComboAllowed: e.isHitComboAllowed || null
};
}
function cM(t) {
return {
[t.component.uid]: t
};
}
const ho = {};
class H0 extends E0 {
constructor(e, o) {
super(e, o), this.handleRefresh = () => {
let M = this.computeTiming();
M.state.nowDate.valueOf() !== this.state.nowDate.valueOf() && this.setState(M.state), this.clearTimeout(), this.setTimeout(M.waitMs);
}, this.handleVisibilityChange = () => {
document.hidden || this.handleRefresh();
}, this.state = this.computeTiming().state;
}
render() {
let { props: e, state: o } = this;
return e.children(o.nowDate, o.todayRange);
}
componentDidMount() {
this.setTimeout(), this.context.nowManager.addResetListener(this.handleRefresh), document.addEventListener("visibilitychange", this.handleVisibilityChange);
}
componentDidUpdate(e) {
e.unit !== this.props.unit && (this.clearTimeout(), this.setTimeout());
}
componentWillUnmount() {
this.clearTimeout(), this.context.nowManager.removeResetListener(this.handleRefresh), document.removeEventListener("visibilitychange", this.handleVisibilityChange);
}
computeTiming() {
let { props: e, context: o } = this, M = o.nowManager.getDateMarker(), { nowIndicatorSnap: b } = o.options;
b === "auto" && (b = // large unit?
/year|month|week|day/.test(e.unit) || // if slotDuration 30 mins for example, would NOT appear to snap (legacy behavior)
(e.unitValue || 1) === 1);
let z, n;
return b ? (z = o.dateEnv.startOf(M, e.unit), n = o.dateEnv.add(z, P(1, e.unit)).valueOf() - M.valueOf()) : (z = M, n = 1e3 * 60), n = Math.min(1e3 * 60 * 60 * 24, n), {
state: { nowDate: z, todayRange: Ds(z) },
waitMs: n
};
}
setTimeout(e = this.computeTiming().waitMs) {
this.timeoutId = setTimeout(() => {
const o = this.computeTiming();
this.setState(o.state, () => {
this.setTimeout(o.waitMs);
});
}, e);
}
clearTimeout() {
this.timeoutId && clearTimeout(this.timeoutId);
}
}
H0.contextType = n1;
function Ds(t) {
let e = J(t), o = c0(e, 1);
return { start: e, end: o };
}
class Ne {
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, o) {
this.dispatch({
type: "SET_OPTION",
optionName: e,
rawOptionValue: o
});
}
getOption(e) {
return this.currentDataManager.currentCalendarOptionsInput[e];
}
getAvailableLocaleCodes() {
return Object.keys(this.getCurrentData().availableRawLocales);
}
// Trigger
// -----------------------------------------------------------------------------------------------------------------
on(e, o) {
let { currentDataManager: M } = this;
M.currentCalendarOptionsRefiners[e] ? M.emitter.on(e, o) : console.warn(`Unknown listener name '${e}'`);
}
off(e, o) {
this.currentDataManager.emitter.off(e, o);
}
// not meant for public use
trigger(e, ...o) {
this.currentDataManager.emitter.trigger(e, ...o);
}
// View
// -----------------------------------------------------------------------------------------------------------------
changeView(e, o) {
this.batchRendering(() => {
if (this.unselect(), o)
if (o.start && o.end)
this.dispatch({
type: "CHANGE_VIEW_TYPE",
viewType: e
}), this.dispatch({
type: "SET_OPTION",
optionName: "visibleRange",
rawOptionValue: o
});
else {
let { dateEnv: M } = this.getCurrentData();
this.dispatch({
type: "CHANGE_VIEW_TYPE",
viewType: e,
dateMarker: M.createMarker(o)
});
}
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, o) {
let M = this.getCurrentData(), b;
o = o || "day", b = M.viewSpecs[o] || this.getUnitViewSpec(o), this.unselect(), b ? this.dispatch({
type: "CHANGE_VIEW_TYPE",
viewType: b.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: o, toolbarConfig: M } = this.getCurrentData(), b = [].concat(M.header ? M.header.viewsWithButtons : [], M.footer ? M.footer.viewsWithButtons : []), z, n;
for (let p in o)
b.push(p);
for (z = 0; z < b.length; z += 1)
if (n = o[b[z]], n && n.singleUnit === e)
return n;
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: e.nowManager.getDateMarker()
});
}
gotoDate(e) {
let o = this.getCurrentData();
this.unselect(), this.dispatch({
type: "CHANGE_DATE",
dateMarker: o.dateEnv.createMarker(e)
});
}
incrementDate(e) {
let o = this.getCurrentData(), M = P(e);
M && (this.unselect(), this.dispatch({
type: "CHANGE_DATE",
dateMarker: o.dateEnv.add(o.currentDate, M)
}));
}
getDate() {
let e = this.getCurrentData();
return e.dateEnv.toDate(e.currentDate);
}
// Date Formatting Utils
// -----------------------------------------------------------------------------------------------------------------
formatDate(e, o) {
let { dateEnv: M } = this.getCurrentData();
return M.format(M.createMarker(e), Z(o));
}
// `settings` is for formatter AND isEndExclusive
formatRange(e, o, M) {
let { dateEnv: b } = this.getCurrentData();
return b.formatRange(b.createMarker(e), b.createMarker(o), Z(M), M);
}
formatIso(e, o) {
let { dateEnv: M } = this.getCurrentData();
return M.formatIso(M.createMarker(e), { omitTime: o });
}
// Date Selection / Event Selection / DayClick
// -----------------------------------------------------------------------------------------------------------------
select(e, o) {
let M;
o == null ? e.start != null ? M = e : M = {
start: e,
end: null
} : M = {
start: e,
end: o
};
let b = this.getCurrentData(), z = ys(M, b.dateEnv, P({ days: 1 }));
z && (this.dispatch({ type: "SELECT_DATES", selection: z }), $n(z, null, b));
}
unselect(e) {
let o = this.getCurrentData();
o.dateSelection && (this.dispatch({ type: "UNSELECT_DATES" }), As(e, o));
}
// Public Events API
// -----------------------------------------------------------------------------------------------------------------
addEvent(e, o) {
if (e instanceof M0) {
let n = e._def, p = e._instance;
return this.getCurrentData().eventStore.defs[n.defId] || (this.dispatch({
type: "ADD_EVENTS",
eventStore: qo({ def: n, instance: p })
// TODO: better util for two args?
}), this.triggerEventAdd(e)), e;
}
let M = this.getCurrentData(), b;
if (o instanceof pe)
b = o.internalEventSource;
else if (typeof o == "boolean")
o && ([b] = Zo(M.eventSources));
else if (o != null) {
let n = this.getEventSourceById(o);
if (!n)
return console.warn(`Could not find an event source with ID "${o}"`), null;
b = n.internalEventSource;
}
let z = jn(e, b, M, !1);
if (z) {
let n = new M0(M, z.def, z.def.recurringDef ? null : z.instance);
return this.dispatch({
type: "ADD_EVENTS",
eventStore: qo(z)
}), this.triggerEventAdd(n), n;
}
return null;
}
triggerEventAdd(e) {
let { emitter: o } = this.getCurrentData();
o.trigger("eventAdd", {
event: e,
relatedEvents: [],
revert: () => {
this.dispatch({
type: "REMOVE_EVENTS",
eventStore: Zn(e)
});
}
});
}
// TODO: optimize
getEventById(e) {
let o = this.getCurrentData(), { defs: M, instances: b } = o.eventStore;
e = String(e);
for (let z in M) {
let n = M[z];
if (n.publicId === e) {
if (n.recurringDef)
return new M0(o, n, null);
for (let p in b) {
let r = b[p];
if (r.defId === n.defId)
return new M0(o, n, r);
}
}
}
return null;
}
getEvents() {
let e = this.getCurrentData();
return Q1(e.eventStore, e);
}
removeAllEvents() {
this.dispatch({ type: "REMOVE_ALL_EVENTS" });
}
// Public Event Sources API
// -----------------------------------------------------------------------------------------------------------------
getEventSources() {
let e = this.getCurrentData(), o = e.eventSources, M = [];
for (let b in o)
M.push(new pe(e, o[b]));
return M;
}
getEventSourceById(e) {
let o = this.getCurrentData(), M = o.eventSources;
e = String(e);
for (let b in M)
if (M[b].publicId === e)
return new pe(o, M[b]);
return null;
}
addEventSource(e) {
let o = this.getCurrentData();
if (e instanceof pe)
return o.eventSources[e.internalEventSource.sourceId] || this.dispatch({
type: "ADD_EVENT_SOURCES",
sources: [e.internalEventSource]
}), e;
let M = Gn(e, o);
return M ? (this.dispatch({ type: "ADD_EVENT_SOURCES", sources: [M] }), new pe(o, M)) : null;
}
removeAllEventSources() {
this.dispatch({ type: "REMOVE_ALL_EVENT_SOURCES" });
}
refetchEvents() {
this.dispatch({ type: "FETCH_EVENT_SOURCES", isRefetch: !0 });
}
// Scroll
// -----------------------------------------------------------------------------------------------------------------
scrollToTime(e) {
let o = P(e);
o && this.trigger("_scrollRequest", { time: o });
}
}
function Xs(t, e) {
return t.left >= e.left && t.left < e.right && t.top >= e.top && t.top < e.bottom;
}
function bp(t, e) {
let o = {
left: Math.max(t.left, e.left),
right: Math.min(t.right, e.right),
top: Math.max(t.top, e.top),
bottom: Math.min(t.bottom, e.bottom)
};
return o.left < o.right && o.top < o.bottom ? o : !1;
}
function ez(t, e, o) {
return {
left: t.left + e,
right: t.right + e,
top: t.top + o,
bottom: t.bottom + o
};
}
function ks(t, e) {
return {
left: Math.min(Math.max(t.left, e.left), e.right),
top: Math.min(Math.max(t.top, e.top), e.bottom)
};
}
function xs(t) {
return {
left: (t.left + t.right) / 2,
top: (t.top + t.bottom) / 2
};
}
function _s(t, e) {
return {
left: t.left - e.left,
top: t.top - e.top
};
}
const Ft = w0();
class iM {
constructor() {
this.getKeysForEventDefs = L(this._getKeysForEventDefs), this.splitDateSelection = L(this._splitDateSpan), this.splitEventStore = L(this._splitEventStore), this.splitIndividualUi = L(this._splitIndividualUi), this.splitEventDrag = L(this._splitInteraction), this.splitEventResize = L(this._splitInteraction), this.eventUiBuilders = {};
}
splitProps(e) {
let o = this.getKeyInfo(e), M = this.getKeysForEventDefs(e.eventStore), b = this.splitDateSelection(e.dateSelection), z = this.splitIndividualUi(e.eventUiBases, M), n = this.splitEventStore(e.eventStore, M), p = this.splitEventDrag(e.eventDrag), r = this.splitEventResize(e.eventResize), c = {};
this.eventUiBuilders = d0(o, (i, a) => this.eventUiBuilders[a] || L(Is));
for (let i in o) {
let a = o[i], s = n[i] || Ft, l = this.eventUiBuilders[i];
c[i] = {
businessHours: a.businessHours || e.businessHours,
dateSelection: b[i] || null,
eventStore: s,
eventUiBases: l(e.eventUiBases[""], a.ui, z[i]),
eventSelection: s.instances[e.eventSelection] ? e.eventSelection : "",
eventDrag: p[i] || null,
eventResize: r[i] || null
};
}
return c;
}
_splitDateSpan(e) {
let o = {};
if (e) {
let M = this.getKeysForDateSpan(e);
for (let b of M)
o[b] = e;
}
return o;
}
_getKeysForEventDefs(e) {
return d0(e.defs, (o) => this.getKeysForEventDef(o));
}
_splitEventStore(e, o) {
let { defs: M, instances: b } = e, z = {};
for (let n in M)
for (let p of o[n])
z[p] || (z[p] = w0()), z[p].defs[n] = M[n];
for (let n in b) {
let p = b[n];
for (let r of o[p.defId])
z[r] && (z[r].instances[n] = p);
}
return z;
}
_splitIndividualUi(e, o) {
let M = {};
for (let b in e)
if (b)
for (let z of o[b])
M[z] || (M[z] = {}), M[z][b] = e[b];
return M;
}
_splitInteraction(e) {
let o = {};
if (e) {
let M = this._splitEventStore(e.affectedEvents, this._getKeysForEventDefs(e.affectedEvents)), b = this._getKeysForEventDefs(e.mutatedEvents), z = this._splitEventStore(e.mutatedEvents, b), n = (p) => {
o[p] || (o[p] = {
affectedEvents: M[p] || Ft,
mutatedEvents: z[p] || Ft,
isEvent: e.isEvent
});
};
for (let p in M)
n(p);
for (let p in z)
n(p);
}
return o;
}
}
function Is(t, e, o) {
let M = [];
t && M.push(t), e && M.push(e);
let b = {
"": MM(M)
};
return o && Object.assign(b, o), b;
}
function p2(t, e, o, M) {
return {
dow: t.getUTCDay(),
isDisabled: !!(M && (!M.activeRange || !o1(M.activeRange, t))),
isOther: !!(M && !o1(M.currentRange, t)),
isToday: !!(e && o1(e, t)),
isPast: !!(o ? t < o : e && t < e.start),
isFuture: !!(o ? t > o : e && t >= e.end)
};
}
function Te(t, e) {
let o = [
"fc-day",
`fc-day-${En[t.dow]}`
];
return t.isDisabled ? o.push("fc-day-disabled") : (t.isToday && (o.push("fc-day-today"), o.push(e.getClass("today"))), t.isPast && o.push("fc-day-past"), t.isFuture && o.push("fc-day-future"), t.isOther && o.push("fc-day-other")), o;
}
function zp(t, e) {
let o = [
"fc-slot",
`fc-slot-${En[t.dow]}`
];
return t.isDisabled ? o.push("fc-slot-disabled") : (t.isToday && (o.push("fc-slot-today"), o.push(e.getClass("today"))), t.isPast && o.push("fc-slot-past"), t.isFuture && o.push("fc-slot-future")), o;
}
const Ps = Z({ year: "numeric", month: "long", day: "numeric" }), Hs = Z({ week: "long" });
function J1(t, e, o = "day", M = !0) {
const { dateEnv: b, options: z, calendarApi: n } = t;
let p = b.format(e, o === "week" ? Hs : Ps);
if (z.navLinks) {
let r = b.toDate(e);
const c = (i) => {
let a = o === "day" ? z.navLinkDayClick : o === "week" ? z.navLinkWeekClick : null;
typeof a == "function" ? a.call(n, b.toDate(e), i) : (typeof a == "string" && (o = a), n.zoomTo(e, o));
};
return Object.assign({ title: He(z.navLinkHint, [p, r], p), "data-navlink": "" }, M ? yn(c) : { onClick: c });
}
return { "aria-label": p };
}
let Gt = null;
function U2() {
return Gt === null && (Gt = Us()), Gt;
}
function Us() {
let t = document.createElement("div");
le(t, {
position: "absolute",
top: -1e3,
left: 0,
border: 0,
padding: 0,
overflow: "scroll",
direction: "rtl"
}), t.innerHTML = "", document.body.appendChild(t);
let o = t.firstChild.getBoundingClientRect().left > t.getBoundingClientRect().left;
return bt(t), o;
}
let Yt;
function np() {
return Yt || (Yt = js()), Yt;
}
function js() {
let t = document.createElement("div");
t.style.overflow = "scroll", t.style.position = "absolute", t.style.top = "-9999px", t.style.left = "-9999px", document.body.appendChild(t);
let e = pp(t);
return document.body.removeChild(t), e;
}
function pp(t) {
return {
x: t.offsetHeight - t.clientHeight,
y: t.offsetWidth - t.clientWidth
};
}
function rp(t, e = !1) {
let o = window.getComputedStyle(t), M = parseInt(o.borderLeftWidth, 10) || 0, b = parseInt(o.borderRightWidth, 10) || 0, z = parseInt(o.borderTopWidth, 10) || 0, n = parseInt(o.borderBottomWidth, 10) || 0, p = pp(t), r = p.y - M - b, c = p.x - z - n, i = {
borderLeft: M,
borderRight: b,
borderTop: z,
borderBottom: n,
scrollbarBottom: c,
scrollbarLeft: 0,
scrollbarRight: 0
};
return U2() && o.direction === "rtl" ? i.scrollbarLeft = r : i.scrollbarRight = r, e && (i.paddingLeft = parseInt(o.paddingLeft, 10) || 0, i.paddingRight = parseInt(o.paddingRight, 10) || 0, i.paddingTop = parseInt(o.paddingTop, 10) || 0, i.paddingBottom = parseInt(o.paddingBottom, 10) || 0), i;
}
function cp(t, e = !1, o) {
let M = o ? t.getBoundingClientRect() : aM(t), b = rp(t, e), z = {
left: M.left + b.borderLeft + b.scrollbarLeft,
right: M.right - b.borderRight - b.scrollbarRight,
top: M.top + b.borderTop,
bottom: M.bottom - b.borderBottom - b.scrollbarBottom
};
return e && (z.left += b.paddingLeft, z.right -= b.paddingRight, z.top += b.paddingTop, z.bottom -= b.paddingBottom), z;
}
function aM(t) {
let e = t.getBoundingClientRect();
return {
left: e.left + window.scrollX,
top: e.top + window.scrollY,
right: e.right + window.scrollX,
bottom: e.bottom + window.scrollY
};
}
function Fs(t) {
let e = ip(t), o = t.getBoundingClientRect();
for (let M of e) {
let b = bp(o, M.getBoundingClientRect());
if (b)
o = b;
else
return null;
}
return o;
}
function ip(t) {
let e = [];
for (; t instanceof HTMLElement; ) {
let o = window.getComputedStyle(t);
if (o.position === "fixed")
break;
/(auto|scroll)/.test(o.overflow + o.overflowY + o.overflowX) && e.push(t), t = t.parentNode;
}
return e;
}
class R1 {
constructor(e, o, M, b) {
this.els = o;
let z = this.originClientRect = e.getBoundingClientRect();
M && this.buildElHorizontals(z.left), b && this.buildElVerticals(z.top);
}
// Populates the left/right internal coordinate arrays
buildElHorizontals(e) {
let o = [], M = [];
for (let b of this.els) {
let z = b.getBoundingClientRect();
o.push(z.left - e), M.push(z.right - e);
}
this.lefts = o, this.rights = M;
}
// Populates the top/bottom internal coordinate arrays
buildElVerticals(e) {
let o = [], M = [];
for (let b of this.els) {
let z = b.getBoundingClientRect();
o.push(z.top - e), M.push(z.bottom - e);
}
this.tops = o, this.bottoms = M;
}
// Given a left offset (from document left), returns the index of the el that it horizontally intersects.
// If no intersection is made, returns undefined.
leftToIndex(e) {
let { lefts: o, rights: M } = this, b = o.length, z;
for (z = 0; z < b; z += 1)
if (e >= o[z] && e < M[z])
return z;
}
// Given a top offset (from document top), returns the index of the el that it vertically intersects.
// If no intersection is made, returns undefined.
topToIndex(e) {
let { tops: o, bottoms: M } = this, b = o.length, z;
for (z = 0; z < b; z += 1)
if (e >= o[z] && e < M[z])
return z;
}
// Gets the width of the element at the given index
getWidth(e) {
return this.rights[e] - this.lefts[e];
}
// Gets the height of the element at the given index
getHeight(e) {
return this.bottoms[e] - this.tops[e];
}
similarTo(e) {
return u2(this.tops || [], e.tops || []) && u2(this.bottoms || [], e.bottoms || []) && u2(this.lefts || [], e.lefts || []) && u2(this.rights || [], e.rights || []);
}
}
function u2(t, e) {
const o = t.length;
if (o !== e.length)
return !1;
for (let M = 0; M < o; M++)
if (Math.round(t[M]) !== Math.round(e[M]))
return !1;
return !0;
}
class sM {
getMaxScrollTop() {
return this.getScrollHeight() - this.getClientHeight();
}
getMaxScrollLeft() {
return this.getScrollWidth() - this.getClientWidth();
}
canScrollVertically() {
return this.getMaxScrollTop() > 0;
}
canScrollHorizontally() {
return this.getMaxScrollLeft() > 0;
}
canScrollUp() {
return this.getScrollTop() > 0;
}
canScrollDown() {
return this.getScrollTop() < this.getMaxScrollTop();
}
canScrollLeft() {
return this.getScrollLeft() > 0;
}
canScrollRight() {
return this.getScrollLeft() < this.getMaxScrollLeft();
}
}
class Gs extends sM {
constructor(e) {
super(), this.el = e;
}
getScrollTop() {
return this.el.scrollTop;
}
getScrollLeft() {
return this.el.scrollLeft;
}
setScrollTop(e) {
this.el.scrollTop = e;
}
setScrollLeft(e) {
this.el.scrollLeft = e;
}
getScrollWidth() {
return this.el.scrollWidth;
}
getScrollHeight() {
return this.el.scrollHeight;
}
getClientHeight() {
return this.el.clientHeight;
}
getClientWidth() {
return this.el.clientWidth;
}
}
class Ys extends sM {
getScrollTop() {
return window.scrollY;
}
getScrollLeft() {
return window.scrollX;
}
setScrollTop(e) {
window.scroll(window.scrollX, e);
}
setScrollLeft(e) {
window.scroll(e, window.scrollY);
}
getScrollWidth() {
return document.documentElement.scrollWidth;
}
getScrollHeight() {
return document.documentElement.scrollHeight;
}
getClientHeight() {
return document.documentElement.clientHeight;
}
getClientWidth() {
return document.documentElement.clientWidth;
}
}
class W0 extends E {
constructor() {
super(...arguments), this.uid = z1();
}
// Hit System
// -----------------------------------------------------------------------------------------------------------------
prepareHits() {
}
queryHit(e, o, M, b) {
return null;
}
// Pointer Interaction Utils
// -----------------------------------------------------------------------------------------------------------------
isValidSegDownEl(e) {
return !this.props.eventDrag && // HACK
!this.props.eventResize && // HACK
!q0(e, ".fc-event-mirror");
}
isValidDateDownEl(e) {
return !q0(e, ".fc-event:not(.fc-bg-event)") && !q0(e, ".fc-more-link") && // a "more.." link
!q0(e, "a[data-navlink]") && // a clickable nav link
!q0(e, ".fc-popover");
}
}
class Vs {
constructor(e) {
this.timeZoneName = e;
}
}
class OM {
constructor(e = (o) => o.thickness || 1) {
this.getEntryThickness = e, this.strictOrder = !1, this.allowReslicing = !1, this.maxCoord = -1, this.maxStackCnt = -1, this.levelCoords = [], this.entriesByLevel = [], this.stackCnts = {};
}
addSegs(e) {
let o = [];
for (let M of e)
this.insertEntry(M, o);
return o;
}
insertEntry(e, o) {
let M = this.findInsertion(e);
this.isInsertionValid(M, e) ? this.insertEntryAt(e, M) : this.handleInvalidInsertion(M, e, o);
}
isInsertionValid(e, o) {
return (this.maxCoord === -1 || e.levelCoord + this.getEntryThickness(o) <= this.maxCoord) && (this.maxStackCnt === -1 || e.stackCnt < this.maxStackCnt);
}
handleInvalidInsertion(e, o, M) {
if (this.allowReslicing && e.touchingEntry) {
const b = Object.assign(Object.assign({}, o), { span: lM(o.span, e.touchingEntry.span) });
M.push(b), this.splitEntry(o, e.touchingEntry, M);
} else
M.push(o);
}
/*
Does NOT add what hit the `barrier` into hiddenEntries. Should already be done.
*/
splitEntry(e, o, M) {
let b = e.span, z = o.span;
b.start < z.start && this.insertEntry({
index: e.index,
thickness: e.thickness,
span: { start: b.start, end: z.start }
}, M), b.end > z.end && this.insertEntry({
index: e.index,
thickness: e.thickness,
span: { start: z.end, end: b.end }
}, M);
}
insertEntryAt(e, o) {
let { entriesByLevel: M, levelCoords: b } = this;
o.lateral === -1 ? (Vt(b, o.level, o.levelCoord), Vt(M, o.level, [e])) : Vt(M[o.level], o.lateral, e), this.stackCnts[K1(e)] = o.stackCnt;
}
/*
does not care about limits
*/
findInsertion(e) {
let { levelCoords: o, entriesByLevel: M, strictOrder: b, stackCnts: z } = this, n = o.length, p = 0, r = -1, c = -1, i = null, a = 0;
for (let d = 0; d < n; d += 1) {
const A = o[d];
if (!b && A >= p + this.getEntryThickness(e))
break;
let u = M[d], W, h = mo(u, e.span.start, Ro), y = h[0] + h[1];
for (
;
// loop through entries that horizontally intersect
(W = u[y]) && // but not past the whole entry list
W.span.start < e.span.end;
) {
let S = A + this.getEntryThickness(W);
S > p && (p = S, i = W, r = d, c = y), S === p && (a = Math.max(a, z[K1(W)] + 1)), y += 1;
}
}
let s = 0;
if (i)
for (s = r + 1; s < n && o[s] < p; )
s += 1;
let l = -1;
return s < n && o[s] === p && (l = mo(M[s], e.span.end, Ro)[0]), {
touchingLevel: r,
touchingLateral: c,
touchingEntry: i,
stackCnt: a,
levelCoord: p,
level: s,
lateral: l
};
}
// sorted by levelCoord (lowest to highest)
toRects() {
let { entriesByLevel: e, levelCoords: o } = this, M = e.length, b = [];
for (let z = 0; z < M; z += 1) {
let n = e[z], p = o[z];
for (let r of n)
b.push(Object.assign(Object.assign({}, r), { thickness: this.getEntryThickness(r), levelCoord: p }));
}
return b;
}
}
function Ro(t) {
return t.span.end;
}
function K1(t) {
return t.index + ":" + t.span.start;
}
function ap(t) {
let e = [];
for (let o of t) {
let M = [], b = {
span: o.span,
entries: [o]
};
for (let z of e)
lM(z.span, b.span) ? b = {
entries: z.entries.concat(b.entries),
span: Qs(z.span, b.span)
} : M.push(z);
M.push(b), e = M;
}
return e;
}
function Qs(t, e) {
return {
start: Math.min(t.start, e.start),
end: Math.max(t.end, e.end)
};
}
function lM(t, e) {
let o = Math.max(t.start, e.start), M = Math.min(t.end, e.end);
return o < M ? { start: o, end: M } : null;
}
function Vt(t, e, o) {
t.splice(e, 0, o);
}
function mo(t, e, o) {
let M = 0, b = t.length;
if (!b || e < o(t[M]))
return [0, 0];
if (e > o(t[b - 1]))
return [b, 0];
for (; M < b; ) {
let z = Math.floor(M + (b - M) / 2), n = o(t[z]);
if (e < n)
b = z;
else if (e > n)
M = z + 1;
else
return [z, 1];
}
return [M, 0];
}
class Ks {
constructor(e, o) {
this.emitter = new n2();
}
destroy() {
}
setMirrorIsVisible(e) {
}
setMirrorNeedsRevert(e) {
}
setAutoScrollEnabled(e) {
}
}
const P0 = {};
function sp(t, e) {
return !t || e > 10 ? Z({ weekday: "short" }) : e > 1 ? Z({ weekday: "short", month: "numeric", day: "numeric", omitCommas: !0 }) : Z({ weekday: "long" });
}
const Op = "fc-col-header-cell";
function lp(t) {
return t.text;
}
class dp extends E {
render() {
let { dateEnv: e, options: o, theme: M, viewApi: b } = this.context, { props: z } = this, { date: n, dateProfile: p } = z, r = p2(n, z.todayRange, null, p), c = [Op].concat(Te(r, M)), i = e.format(n, z.dayHeaderFormat), a = !r.isDisabled && z.colCnt > 1 ? J1(this.context, n) : {}, s = e.toDate(n);
e.namedTimeZoneImpl && (s = W1(s, 36e5));
let l = Object.assign(Object.assign(Object.assign({ date: s, view: b }, z.extraRenderProps), { text: i }), r);
return O(b0, { elTag: "th", elClasses: c, elAttrs: Object.assign({ role: "columnheader", colSpan: z.colSpan, "data-date": r.isDisabled ? void 0 : ye(n) }, z.extraDataAttrs), renderProps: l, generatorName: "dayHeaderContent", customGenerator: o.dayHeaderContent, defaultGenerator: lp, classNameGenerator: o.dayHeaderClassNames, didMount: o.dayHeaderDidMount, willUnmount: o.dayHeaderWillUnmount }, (d) => O("div", { className: "fc-scrollgrid-sync-inner" }, !r.isDisabled && O(d, { elTag: "a", elAttrs: a, elClasses: [
"fc-col-header-cell-cushion",
z.isSticky && "fc-sticky"
] })));
}
}
const $s = Z({ weekday: "long" });
class Ap extends E {
render() {
let { props: e } = this, { dateEnv: o, theme: M, viewApi: b, options: z } = this.context, n = c0(/* @__PURE__ */ new Date(2592e5), e.dow), p = {
dow: e.dow,
isDisabled: !1,
isFuture: !1,
isPast: !1,
isToday: !1,
isOther: !1
}, r = o.format(n, e.dayHeaderFormat), c = Object.assign(Object.assign(Object.assign(Object.assign({
// TODO: make this public?
date: n
}, p), { view: b }), e.extraRenderProps), { text: r });
return O(b0, { elTag: "th", elClasses: [
Op,
...Te(p, M),
...e.extraClassNames || []
], elAttrs: Object.assign({ role: "columnheader", colSpan: e.colSpan }, e.extraDataAttrs), renderProps: c, generatorName: "dayHeaderContent", customGenerator: z.dayHeaderContent, defaultGenerator: lp, classNameGenerator: z.dayHeaderClassNames, didMount: z.dayHeaderDidMount, willUnmount: z.dayHeaderWillUnmount }, (i) => O(
"div",
{ className: "fc-scrollgrid-sync-inner" },
O(i, { elTag: "a", elClasses: [
"fc-col-header-cell-cushion",
e.isSticky && "fc-sticky"
], elAttrs: {
"aria-label": o.format(n, $s)
} })
));
}
}
class dM extends E {
constructor() {
super(...arguments), this.createDayHeaderFormatter = L(Zs);
}
render() {
let { context: e } = this, { dates: o, dateProfile: M, datesRepDistinctDays: b, renderIntro: z } = this.props, n = this.createDayHeaderFormatter(e.options.dayHeaderFormat, b, o.length);
return O(H0, { unit: "day" }, (p, r) => O(
"tr",
{ role: "row" },
z && z("day"),
o.map((c) => b ? O(dp, { key: c.toISOString(), date: c, dateProfile: M, todayRange: r, colCnt: o.length, dayHeaderFormat: n }) : O(Ap, { key: c.getUTCDay(), dow: c.getUTCDay(), dayHeaderFormat: n }))
));
}
}
function Zs(t, e, o) {
return t || sp(e, o);
}
class up {
constructor(e, o) {
let M = e.start, { end: b } = e, z = [], n = [], p = -1;
for (; M < b; )
o.isHiddenDay(M) ? z.push(p + 0.5) : (p += 1, z.push(p), n.push(M)), M = c0(M, 1);
this.dates = n, this.indices = z, this.cnt = n.length;
}
sliceRange(e) {
let o = this.getDateDayIndex(e.start), M = this.getDateDayIndex(c0(e.end, -1)), b = Math.max(0, o), z = Math.min(this.cnt - 1, M);
return b = Math.ceil(b), z = Math.floor(z), b <= z ? {
firstIndex: b,
lastIndex: z,
isStart: o === b,
isEnd: M === z
} : null;
}
// Given a date, returns its chronolocial cell-index from the first cell of the grid.
// If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.
// If before the first offset, returns a negative number.
// If after the last offset, returns an offset past the last cell offset.
// Only works for *start* dates of cells. Will not work for exclusive end dates for cells.
getDateDayIndex(e) {
let { indices: o } = this, M = Math.floor(I1(this.dates[0], e));
return M < 0 ? o[0] - 1 : M >= o.length ? o[o.length - 1] + 1 : o[M];
}
}
class qp {
constructor(e, o) {
let { dates: M } = e, b, z, n;
if (o) {
for (z = M[0].getUTCDay(), b = 1; b < M.length && M[b].getUTCDay() !== z; b += 1)
;
n = Math.ceil(M.length / b);
} else
n = 1, b = M.length;
this.rowCnt = n, this.colCnt = b, this.daySeries = e, this.cells = this.buildCells(), this.headerDates = this.buildHeaderDates();
}
buildCells() {
let e = [];
for (let o = 0; o < this.rowCnt; o += 1) {
let M = [];
for (let b = 0; b < this.colCnt; b += 1)
M.push(this.buildCell(o, b));
e.push(M);
}
return e;
}
buildCell(e, o) {
let M = this.daySeries.dates[e * this.colCnt + o];
return {
key: M.toISOString(),
date: M
};
}
buildHeaderDates() {
let e = [];
for (let o = 0; o < this.colCnt; o += 1)
e.push(this.cells[0][o].date);
return e;
}
sliceRange(e) {
let { colCnt: o } = this, M = this.daySeries.sliceRange(e), b = [];
if (M) {
let { firstIndex: z, lastIndex: n } = M, p = z;
for (; p <= n; ) {
let r = Math.floor(p / o), c = Math.min((r + 1) * o, n + 1);
b.push({
row: r,
firstCol: p % o,
lastCol: (c - 1) % o,
isStart: M.isStart && p === z,
isEnd: M.isEnd && c - 1 === n
}), p = c;
}
}
return b;
}
}
class AM {
constructor() {
this.sliceBusinessHours = L(this._sliceBusinessHours), this.sliceDateSelection = L(this._sliceDateSpan), this.sliceEventStore = L(this._sliceEventStore), this.sliceEventDrag = L(this._sliceInteraction), this.sliceEventResize = L(this._sliceInteraction), this.forceDayIfListItem = !1;
}
sliceProps(e, o, M, b, ...z) {
let { eventUiBases: n } = e, p = this.sliceEventStore(e.eventStore, n, o, M, ...z);
return {
dateSelectionSegs: this.sliceDateSelection(e.dateSelection, o, M, n, b, ...z),
businessHourSegs: this.sliceBusinessHours(e.businessHours, o, M, b, ...z),
fgEventSegs: p.fg,
bgEventSegs: p.bg,
eventDrag: this.sliceEventDrag(e.eventDrag, n, o, M, ...z),
eventResize: this.sliceEventResize(e.eventResize, n, o, M, ...z),
eventSelection: e.eventSelection
};
}
sliceNowDate(e, o, M, b, ...z) {
return this._sliceDateSpan(
{ range: { start: e, end: W1(e, 1) }, allDay: !1 },
// add 1 ms, protect against null range
o,
M,
{},
b,
...z
);
}
_sliceBusinessHours(e, o, M, b, ...z) {
return e ? this._sliceEventStore(Z1(e, q2(o, !!M), b), {}, o, M, ...z).bg : [];
}
_sliceEventStore(e, o, M, b, ...z) {
if (e) {
let n = Wo(e, o, q2(M, !!b), b);
return {
bg: this.sliceEventRanges(n.bg, z),
fg: this.sliceEventRanges(n.fg, z)
};
}
return { bg: [], fg: [] };
}
_sliceInteraction(e, o, M, b, ...z) {
if (!e)
return null;
let n = Wo(e.mutatedEvents, o, q2(M, !!b), b);
return {
segs: this.sliceEventRanges(n.fg, z),
affectedInstances: e.affectedEvents.instances,
isEvent: e.isEvent
};
}
_sliceDateSpan(e, o, M, b, z, ...n) {
if (!e)
return [];
let p = q2(o, !!M), r = M1(e.range, p);
if (r) {
e = Object.assign(Object.assign({}, e), { range: r });
let c = Ss(e, b, z), i = this.sliceRange(e.range, ...n);
for (let a of i)
a.eventRange = c;
return i;
}
return [];
}
/*
"complete" seg means it has component and eventRange
*/
sliceEventRanges(e, o) {
let M = [];
for (let b of e)
M.push(...this.sliceEventRange(b, o));
return M;
}
/*
"complete" seg means it has component and eventRange
*/
sliceEventRange(e, o) {
let M = e.range;
this.forceDayIfListItem && e.ui.display === "list-item" && (M = {
start: M.start,
end: c0(M.start, 1)
});
let b = this.sliceRange(M, ...o);
for (let z of b)
z.eventRange = e, z.isStart = e.isStart && z.isStart, z.isEnd = e.isEnd && z.isEnd;
return b;
}
}
function q2(t, e) {
let o = t.activeRange;
return e ? o : {
start: W1(o.start, t.slotMinTime.milliseconds),
end: W1(o.end, t.slotMaxTime.milliseconds - 864e5)
// 864e5 = ms in a day
};
}
function fp(t, e, o) {
let { instances: M } = t.mutatedEvents;
for (let b in M)
if (!ct(e.validRange, M[b].range))
return !1;
return Wp({ eventDrag: t }, o);
}
function Js(t, e, o) {
return ct(e.validRange, t.range) ? Wp({ dateSelection: t }, o) : !1;
}
function Wp(t, e) {
let o = e.getCurrentData(), M = Object.assign({ businessHours: o.businessHours, dateSelection: "", eventStore: o.eventStore, eventUiBases: o.eventUiBases, eventSelection: "", eventDrag: null, eventResize: null }, t);
return (e.pluginHooks.isPropsValid || hp)(M, e);
}
function hp(t, e, o = {}, M) {
return !(t.eventDrag && !eO(t, e, o, M) || t.dateSelection && !tO(t, e, o, M));
}
function eO(t, e, o, M) {
let b = e.getCurrentData(), z = t.eventDrag, n = z.mutatedEvents, p = n.defs, r = n.instances, c = H2(p, z.isEvent ? t.eventUiBases : { "": b.selectionConfig });
M && (c = d0(c, M));
let i = is(t.eventStore, z.affectedEvents.instances), a = i.defs, s = i.instances, l = H2(a, t.eventUiBases);
for (let d in r) {
let A = r[d], u = A.range, W = c[A.defId], h = p[A.defId];
if (!Rp(W.constraints, u, i, t.businessHours, e))
return !1;
let { eventOverlap: y } = e.options, S = typeof y == "function" ? y : null;
for (let X in s) {
let $ = s[X];
if (rt(u, $.range) && (l[$.defId].overlap === !1 && z.isEvent || W.overlap === !1 || S && !S(
new M0(e, a[$.defId], $),
// still event
new M0(e, h, A)
)))
return !1;
}
let _ = b.eventStore;
for (let X of W.allows) {
let $ = Object.assign(Object.assign({}, o), { range: A.range, allDay: h.allDay }), H = _.defs[h.defId], N0 = _.instances[d], i1;
if (H ? i1 = new M0(e, H, N0) : i1 = new M0(e, h), !X(bM($, e), i1))
return !1;
}
}
return !0;
}
function tO(t, e, o, M) {
let b = t.eventStore, z = b.defs, n = b.instances, p = t.dateSelection, r = p.range, { selectionConfig: c } = e.getCurrentData();
if (M && (c = M(c)), !Rp(c.constraints, r, b, t.businessHours, e))
return !1;
let { selectOverlap: i } = e.options, a = typeof i == "function" ? i : null;
for (let s in n) {
let l = n[s];
if (rt(r, l.range) && (c.overlap === !1 || a && !a(new M0(e, z[l.defId], l), null)))
return !1;
}
for (let s of c.allows) {
let l = Object.assign(Object.assign({}, o), p);
if (!s(bM(l, e), null))
return !1;
}
return !0;
}
function Rp(t, e, o, M, b) {
for (let z of t)
if (!MO(oO(z, e, o, M, b), e))
return !1;
return !0;
}
function oO(t, e, o, M, b) {
return t === "businessHours" ? Qt(Z1(M, e, b)) : typeof t == "string" ? Qt(st(o, (z) => z.groupId === t)) : typeof t == "object" && t ? Qt(Z1(t, e, b)) : [];
}
function Qt(t) {
let { instances: e } = t, o = [];
for (let M in e)
o.push(e[M].range);
return o;
}
function MO(t, e) {
for (let o of t)
if (ct(o, e))
return !0;
return !1;
}
const f2 = /^(visible|hidden)$/;
class uM extends E {
constructor() {
super(...arguments), this.handleEl = (e) => {
this.el = e, D0(this.props.elRef, e);
};
}
render() {
let { props: e } = this, { liquid: o, liquidIsAbsolute: M } = e, b = o && M, z = ["fc-scroller"];
return o && (M ? z.push("fc-scroller-liquid-absolute") : z.push("fc-scroller-liquid")), O("div", { ref: this.handleEl, className: z.join(" "), style: {
overflowX: e.overflowX,
overflowY: e.overflowY,
left: b && -(e.overcomeLeft || 0) || "",
right: b && -(e.overcomeRight || 0) || "",
bottom: b && -(e.overcomeBottom || 0) || "",
marginLeft: !b && -(e.overcomeLeft || 0) || "",
marginRight: !b && -(e.overcomeRight || 0) || "",
marginBottom: !b && -(e.overcomeBottom || 0) || "",
maxHeight: e.maxHeight || ""
} }, e.children);
}
needsXScrolling() {
if (f2.test(this.props.overflowX))
return !1;
let { el: e } = this, o = this.el.getBoundingClientRect().width - this.getYScrollbarWidth(), { children: M } = e;
for (let b = 0; b < M.length; b += 1)
if (M[b].getBoundingClientRect().width > o)
return !0;
return !1;
}
needsYScrolling() {
if (f2.test(this.props.overflowY))
return !1;
let { el: e } = this, o = this.el.getBoundingClientRect().height - this.getXScrollbarWidth(), { children: M } = e;
for (let b = 0; b < M.length; b += 1)
if (M[b].getBoundingClientRect().height > o)
return !0;
return !1;
}
getXScrollbarWidth() {
return f2.test(this.props.overflowX) ? 0 : this.el.offsetHeight - this.el.clientHeight;
}
getYScrollbarWidth() {
return f2.test(this.props.overflowY) ? 0 : this.el.offsetWidth - this.el.clientWidth;
}
}
class h0 {
constructor(e) {
this.masterCallback = e, this.currentMap = {}, this.depths = {}, this.callbackMap = {}, this.handleValue = (o, M) => {
let { depths: b, currentMap: z } = this, n = !1, p = !1;
o !== null ? (n = M in z, z[M] = o, b[M] = (b[M] || 0) + 1, p = !0) : (b[M] -= 1, b[M] || (delete z[M], delete this.callbackMap[M], n = !0)), this.masterCallback && (n && this.masterCallback(null, String(M)), p && this.masterCallback(o, String(M)));
};
}
createRef(e) {
let o = this.callbackMap[e];
return o || (o = this.callbackMap[e] = (M) => {
this.handleValue(M, String(e));
}), o;
}
// TODO: check callers that don't care about order. should use getAll instead
// NOTE: this method has become less valuable now that we are encouraged to map order by some other index
// TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and "collect"
collect(e, o, M) {
return Cn(this.currentMap, e, o, M);
}
getAll() {
return Zo(this.currentMap);
}
}
function mp(t) {
let e = te(t, ".fc-scrollgrid-shrink"), o = 0;
for (let M of e)
o = Math.max(o, Ui(M));
return Math.ceil(o);
}
function qM(t, e) {
return t.liquid && e.liquid;
}
function gp(t, e) {
return e.maxHeight != null || // if its possible for the height to max out, we might need scrollbars
qM(t, e);
}
function Lp(t, e, o, M) {
let { expandRows: b } = o;
return typeof e.content == "function" ? e.content(o) : O("table", {
role: "presentation",
className: [
e.tableClassName,
t.syncRowHeights ? "fc-scrollgrid-sync-table" : ""
].join(" "),
style: {
minWidth: o.tableMinWidth,
width: o.clientWidth,
height: b ? o.clientHeight : ""
// css `height` on a
serves as a min-height
}
}, o.tableColGroupNode, O(M ? "thead" : "tbody", {
role: "presentation"
}, typeof e.rowContent == "function" ? e.rowContent(o) : e.rowContent));
}
function yp(t, e) {
return C0(t, e, f0);
}
function vp(t, e) {
let o = [];
for (let M of t) {
let b = M.span || 1;
for (let z = 0; z < b; z += 1)
o.push(O("col", { style: {
width: M.width === "shrink" ? Np(e) : M.width || "",
minWidth: M.minWidth || ""
} }));
}
return O("colgroup", {}, ...o);
}
function Np(t) {
return t ?? 4;
}
function Tp(t) {
for (let e of t)
if (e.width === "shrink")
return !0;
return !1;
}
function Bp(t, e) {
let o = [
"fc-scrollgrid",
e.theme.getClass("table")
];
return t && o.push("fc-scrollgrid-liquid"), o;
}
function Sp(t, e) {
let o = [
"fc-scrollgrid-section",
`fc-scrollgrid-section-${t.type}`,
t.className
// used?
];
return e && t.liquid && t.maxHeight == null && o.push("fc-scrollgrid-section-liquid"), t.isSticky && o.push("fc-scrollgrid-section-sticky"), o;
}
function me(t) {
return O("div", { className: "fc-scrollgrid-sticky-shim", style: {
width: t.clientWidth,
minWidth: t.tableMinWidth
} });
}
function ge(t) {
let { stickyHeaderDates: e } = t;
return (e == null || e === "auto") && (e = t.height === "auto" || t.viewHeight === "auto"), e;
}
function lt(t) {
let { stickyFooterScrollbar: e } = t;
return (e == null || e === "auto") && (e = t.height === "auto" || t.viewHeight === "auto"), e;
}
class fM extends E {
constructor() {
super(...arguments), this.processCols = L((e) => e, yp), this.renderMicroColGroup = L(vp), this.scrollerRefs = new h0(), this.scrollerElRefs = new h0(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: o, context: M } = this, b = e.sections || [], z = this.processCols(e.cols), n = this.renderMicroColGroup(z, o.shrinkWidth), p = Bp(e.liquid, M);
e.collapsibleWidth && p.push("fc-scrollgrid-collapsible");
let r = b.length, c = 0, i, a = [], s = [], l = [];
for (; c < r && (i = b[c]).type === "header"; )
a.push(this.renderSection(i, n, !0)), c += 1;
for (; c < r && (i = b[c]).type === "body"; )
s.push(this.renderSection(i, n, !1)), c += 1;
for (; c < r && (i = b[c]).type === "footer"; )
l.push(this.renderSection(i, n, !0)), c += 1;
let d = !rM();
const A = { role: "rowgroup" };
return O("table", {
role: "grid",
className: p.join(" "),
style: { height: e.height }
}, !!(!d && a.length) && O("thead", A, ...a), !!(!d && s.length) && O("tbody", A, ...s), !!(!d && l.length) && O("tfoot", A, ...l), d && O("tbody", A, ...a, ...s, ...l));
}
renderSection(e, o, M) {
return "outerContent" in e ? O(k, { key: e.key }, e.outerContent) : O("tr", { key: e.key, role: "presentation", className: Sp(e, this.props.liquid).join(" ") }, this.renderChunkTd(e, o, e.chunk, M));
}
renderChunkTd(e, o, M, b) {
if ("outerContent" in M)
return M.outerContent;
let { props: z } = this, { forceYScrollbars: n, scrollerClientWidths: p, scrollerClientHeights: r } = this.state, c = gp(z, e), i = qM(z, e), a = z.liquid ? n ? "scroll" : c ? "auto" : "hidden" : "visible", s = e.key, l = Lp(e, M, {
tableColGroupNode: o,
tableMinWidth: "",
clientWidth: !z.collapsibleWidth && p[s] !== void 0 ? p[s] : null,
clientHeight: r[s] !== void 0 ? r[s] : null,
expandRows: e.expandRows,
syncRowHeights: !1,
rowSyncHeights: [],
reportRowHeightChange: () => {
}
}, b);
return O(b ? "th" : "td", {
ref: M.elRef,
role: "presentation"
}, O(
"div",
{ className: `fc-scroller-harness${i ? " fc-scroller-harness-liquid" : ""}` },
O(uM, { ref: this.scrollerRefs.createRef(s), elRef: this.scrollerElRefs.createRef(s), overflowY: a, overflowX: z.liquid ? "hidden" : "visible", maxHeight: e.maxHeight, liquid: i, liquidIsAbsolute: !0 }, l)
));
}
_handleScrollerEl(e, o) {
let M = bO(this.props.sections, o);
M && D0(M.chunk.scrollerElRef, e);
}
componentDidMount() {
this.handleSizing(), this.context.addResizeHandler(this.handleSizing);
}
componentDidUpdate() {
this.handleSizing();
}
componentWillUnmount() {
this.context.removeResizeHandler(this.handleSizing);
}
computeShrinkWidth() {
return Tp(this.props.cols) ? mp(this.scrollerElRefs.getAll()) : 0;
}
computeScrollerDims() {
let e = np(), { scrollerRefs: o, scrollerElRefs: M } = this, b = !1, z = {}, n = {};
for (let p in o.currentMap) {
let r = o.currentMap[p];
if (r && r.needsYScrolling()) {
b = !0;
break;
}
}
for (let p of this.props.sections) {
let r = p.key, c = M.currentMap[r];
if (c) {
let i = c.parentNode;
z[r] = Math.floor(i.getBoundingClientRect().width - (b ? e.y : 0)), n[r] = Math.floor(i.getBoundingClientRect().height);
}
}
return { forceYScrollbars: b, scrollerClientWidths: z, scrollerClientHeights: n };
}
}
fM.addStateEquality({
scrollerClientWidths: f0,
scrollerClientHeights: f0
});
function bO(t, e) {
for (let o of t)
if (o.key === e)
return o;
return null;
}
class dt extends E {
constructor() {
super(...arguments), this.buildPublicEvent = L((e, o, M) => new M0(e, o, M)), this.handleEl = (e) => {
this.el = e, D0(this.props.elRef, e), e && Zb(e, this.props.seg);
};
}
render() {
const { props: e, context: o } = this, { options: M } = o, { seg: b } = e, { eventRange: z } = b, { ui: n } = z, p = {
event: this.buildPublicEvent(o, z.def, z.instance),
view: o.viewApi,
timeText: e.timeText,
textColor: n.textColor,
backgroundColor: n.backgroundColor,
borderColor: n.borderColor,
isDraggable: !e.disableDragging && hs(b, o),
isStartResizable: !e.disableResizing && Rs(b, o),
isEndResizable: !e.disableResizing && ms(b),
isMirror: !!(e.isDragging || e.isResizing || e.isDateSelecting),
isStart: !!b.isStart,
isEnd: !!b.isEnd,
isPast: !!e.isPast,
isFuture: !!e.isFuture,
isToday: !!e.isToday,
isSelected: !!e.isSelected,
isDragging: !!e.isDragging,
isResizing: !!e.isResizing
};
return O(b0, { elRef: this.handleEl, elTag: e.elTag, elAttrs: e.elAttrs, elClasses: [
...gs(p),
...b.eventRange.ui.classNames,
...e.elClasses || []
], elStyle: e.elStyle, renderProps: p, generatorName: "eventContent", customGenerator: M.eventContent, defaultGenerator: e.defaultGenerator, classNameGenerator: M.eventClassNames, didMount: M.eventDidMount, willUnmount: M.eventWillUnmount }, e.children);
}
componentDidUpdate(e) {
this.el && this.props.seg !== e.seg && Zb(this.el, this.props.seg);
}
}
class At extends E {
render() {
let { props: e, context: o } = this, { options: M } = o, { seg: b } = e, { ui: z } = b.eventRange, n = M.eventTimeFormat || e.defaultTimeFormat, p = je(b, n, o, e.defaultDisplayEventTime, e.defaultDisplayEventEnd);
return O(dt, Object.assign({}, e, { elTag: "a", elStyle: {
borderColor: z.borderColor,
backgroundColor: z.backgroundColor
}, elAttrs: pM(b, o), defaultGenerator: zO, timeText: p }), (r, c) => O(
k,
null,
O(r, { elTag: "div", elClasses: ["fc-event-main"], elStyle: { color: c.textColor } }),
!!c.isStartResizable && O("div", { className: "fc-event-resizer fc-event-resizer-start" }),
!!c.isEndResizable && O("div", { className: "fc-event-resizer fc-event-resizer-end" })
));
}
}
At.addPropsEquality({
seg: f0
});
function zO(t) {
return O(
"div",
{ className: "fc-event-main-frame" },
t.timeText && O("div", { className: "fc-event-time" }, t.timeText),
O(
"div",
{ className: "fc-event-title-container" },
O("div", { className: "fc-event-title fc-sticky" }, t.event.title || O(k, null, " "))
)
);
}
const Be = (t) => O(n1.Consumer, null, (e) => {
let { options: o } = e, M = {
isAxis: t.isAxis,
date: e.dateEnv.toDate(t.date),
view: e.viewApi
};
return O(b0, { elRef: t.elRef, elTag: t.elTag || "div", elAttrs: t.elAttrs, elClasses: t.elClasses, elStyle: t.elStyle, renderProps: M, generatorName: "nowIndicatorContent", customGenerator: o.nowIndicatorContent, classNameGenerator: o.nowIndicatorClassNames, didMount: o.nowIndicatorDidMount, willUnmount: o.nowIndicatorWillUnmount }, t.children);
}), nO = Z({ day: "numeric" });
class WM extends E {
constructor() {
super(...arguments), this.refineRenderProps = C1(pO);
}
render() {
let { props: e, context: o } = this, { options: M } = o, b = this.refineRenderProps({
date: e.date,
dateProfile: e.dateProfile,
todayRange: e.todayRange,
isMonthStart: e.isMonthStart || !1,
showDayNumber: e.showDayNumber,
extraRenderProps: e.extraRenderProps,
viewApi: o.viewApi,
dateEnv: o.dateEnv,
monthStartFormat: M.monthStartFormat
});
return O(b0, { elRef: e.elRef, elTag: e.elTag, elAttrs: Object.assign(Object.assign({}, e.elAttrs), b.isDisabled ? {} : { "data-date": ye(e.date) }), elClasses: [
...Te(b, o.theme),
...e.elClasses || []
], elStyle: e.elStyle, renderProps: b, generatorName: "dayCellContent", customGenerator: M.dayCellContent, defaultGenerator: e.defaultGenerator, classNameGenerator: (
// don't use custom classNames if disabled
b.isDisabled ? void 0 : M.dayCellClassNames
), didMount: M.dayCellDidMount, willUnmount: M.dayCellWillUnmount }, e.children);
}
}
function hM(t) {
return !!(t.dayCellContent || Ao("dayCellContent", t));
}
function pO(t) {
let { date: e, dateEnv: o, dateProfile: M, isMonthStart: b } = t, z = p2(e, t.todayRange, null, M), n = t.showDayNumber ? o.format(e, b ? t.monthStartFormat : nO) : "";
return Object.assign(Object.assign(Object.assign({ date: o.toDate(e), view: t.viewApi }, z), {
isMonthStart: b,
dayNumberText: n
}), t.extraRenderProps);
}
class RM extends E {
render() {
let { props: e } = this, { seg: o } = e;
return O(dt, { elTag: "div", elClasses: ["fc-bg-event"], elStyle: { backgroundColor: o.eventRange.ui.backgroundColor }, defaultGenerator: rO, seg: o, timeText: "", isDragging: !1, isResizing: !1, isDateSelecting: !1, isSelected: !1, isPast: e.isPast, isFuture: e.isFuture, isToday: e.isToday, disableDragging: !0, disableResizing: !0 });
}
}
function rO(t) {
let { title: e } = t.event;
return e && O("div", { className: "fc-event-title" }, t.event.title);
}
function mM(t) {
return O("div", { className: `fc-${t}` });
}
const Ep = (t) => O(n1.Consumer, null, (e) => {
let { dateEnv: o, options: M } = e, { date: b } = t, z = M.weekNumberFormat || t.defaultFormat, n = o.computeWeekNumber(b), p = o.format(b, z), r = { num: n, text: p, date: b };
return O(
b0,
{ elRef: t.elRef, elTag: t.elTag, elAttrs: t.elAttrs, elClasses: t.elClasses, elStyle: t.elStyle, renderProps: r, generatorName: "weekNumberContent", customGenerator: M.weekNumberContent, defaultGenerator: cO, classNameGenerator: M.weekNumberClassNames, didMount: M.weekNumberDidMount, willUnmount: M.weekNumberWillUnmount },
t.children
);
});
function cO(t) {
return t.text;
}
const Kt = 10;
class iO extends E {
constructor() {
super(...arguments), this.state = {
titleId: A1()
}, this.handleRootEl = (e) => {
this.rootEl = e, this.props.elRef && D0(this.props.elRef, e);
}, this.handleDocumentMouseDown = (e) => {
const o = gn(e);
this.rootEl.contains(o) || this.handleCloseClick();
}, this.handleDocumentKeyDown = (e) => {
e.key === "Escape" && this.handleCloseClick();
}, this.handleCloseClick = () => {
let { onClose: e } = this.props;
e && e();
};
}
render() {
let { theme: e, options: o } = this.context, { props: M, state: b } = this, z = [
"fc-popover",
e.getClass("popover")
].concat(M.extraClassNames || []);
return fi(O(
"div",
Object.assign({}, M.extraAttrs, { id: M.id, className: z.join(" "), "aria-labelledby": b.titleId, ref: this.handleRootEl }),
O(
"div",
{ className: "fc-popover-header " + e.getClass("popoverHeader") },
O("span", { className: "fc-popover-title", id: b.titleId }, M.title),
O("span", { className: "fc-popover-close " + e.getIconClass("close"), title: o.closeHint, onClick: this.handleCloseClick })
),
O("div", { className: "fc-popover-body " + e.getClass("popoverContent") }, M.children)
), M.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: o, alignGridTop: M } = this.props, { rootEl: b } = this, z = Fs(o);
if (z) {
let n = b.getBoundingClientRect(), p = M ? q0(o, ".fc-scrollgrid").getBoundingClientRect().top : z.top, r = e ? z.right - n.width : z.left;
p = Math.max(p, Kt), r = Math.min(r, document.documentElement.clientWidth - Kt - n.width), r = Math.max(r, Kt);
let c = b.offsetParent.getBoundingClientRect();
le(b, {
top: p - c.top,
left: r - c.left
});
}
}
}
class aO extends W0 {
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: o } = this.context, { props: M } = this, { startDate: b, todayRange: z, dateProfile: n } = M, p = o.format(b, e.dayPopoverFormat);
return O(WM, { elRef: this.handleRootEl, date: b, dateProfile: n, todayRange: z }, (r, c, i) => O(
iO,
{ elRef: i.ref, id: M.id, title: p, extraClassNames: ["fc-more-popover"].concat(i.className || []), extraAttrs: i, parentEl: M.parentEl, alignmentEl: M.alignmentEl, alignGridTop: M.alignGridTop, onClose: M.onClose },
hM(e) && O(r, { elTag: "div", elClasses: ["fc-more-popover-misc"] }),
M.children
));
}
queryHit(e, o, M, b) {
let { rootEl: z, props: n } = this;
return e >= 0 && e < M && o >= 0 && o < b ? {
dateProfile: n.dateProfile,
dateSpan: Object.assign({ allDay: !n.forceTimed, range: {
start: n.startDate,
end: n.endDate
} }, n.extraDateSpan),
dayEl: z,
rect: {
left: 0,
top: 0,
right: M,
bottom: b
},
layer: 1
// important when comparing with hits from other components
} : null;
}
}
class gM extends E {
constructor() {
super(...arguments), this.state = {
isPopoverOpen: !1,
popoverId: A1()
}, this.handleLinkEl = (e) => {
this.linkEl = e, this.props.elRef && D0(this.props.elRef, e);
}, this.handleClick = (e) => {
let { props: o, context: M } = this, { moreLinkClick: b } = M.options, z = tz(o).start;
function n(p) {
let { def: r, instance: c, range: i } = p.eventRange;
return {
event: new M0(M, r, c),
start: M.dateEnv.toDate(i.start),
end: M.dateEnv.toDate(i.end),
isStart: p.isStart,
isEnd: p.isEnd
};
}
typeof b == "function" && (b = b({
date: z,
allDay: !!o.allDayDate,
allSegs: o.allSegs.map(n),
hiddenSegs: o.hiddenSegs.map(n),
jsEvent: e,
view: M.viewApi
})), !b || b === "popover" ? this.setState({ isPopoverOpen: !0 }) : typeof b == "string" && M.calendarApi.zoomTo(z, b);
}, this.handlePopoverClose = () => {
this.setState({ isPopoverOpen: !1 });
};
}
render() {
let { props: e, state: o } = this;
return O(n1.Consumer, null, (M) => {
let { viewApi: b, options: z, calendarApi: n } = M, { moreLinkText: p } = z, { moreCnt: r } = e, c = tz(e), i = typeof p == "function" ? p.call(n, r) : `+${r} ${p}`, a = He(z.moreLinkHint, [r], i), s = {
num: r,
shortText: `+${r}`,
text: i,
view: b
};
return O(
k,
null,
!!e.moreCnt && O(b0, { 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), yn(this.handleClick)), { title: a, "aria-expanded": o.isPopoverOpen, "aria-controls": o.isPopoverOpen ? o.popoverId : "" }), renderProps: s, generatorName: "moreLinkContent", customGenerator: z.moreLinkContent, defaultGenerator: e.defaultGenerator || sO, classNameGenerator: z.moreLinkClassNames, didMount: z.moreLinkDidMount, willUnmount: z.moreLinkWillUnmount }, e.children),
o.isPopoverOpen && O(aO, { id: o.popoverId, startDate: c.start, endDate: c.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 = q0(this.linkEl, ".fc-view-harness"));
}
}
function sO(t) {
return t.text;
}
function tz(t) {
if (t.allDayDate)
return {
start: t.allDayDate,
end: c0(t.allDayDate, 1)
};
let { hiddenSegs: e } = t;
return {
start: ut(e),
end: lO(e)
};
}
function ut(t) {
return t.reduce(OO).eventRange.range.start;
}
function OO(t, e) {
return t.eventRange.range.start < e.eventRange.range.start ? t : e;
}
function lO(t) {
return t.reduce(dO).eventRange.range.end;
}
function dO(t, e) {
return t.eventRange.range.end > e.eventRange.range.end ? t : e;
}
const AO = [], wp = {
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"
}, Cp = Object.assign(Object.assign({}, wp), {
// 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(t, e) {
return e === "day" ? "Today" : `This ${t}`;
}
},
viewHint: "$0 view",
navLinkHint: "Go to $0",
moreLinkHint(t) {
return `Show ${t} more event${t === 1 ? "" : "s"}`;
}
});
function uO(t) {
let e = t.length > 0 ? t[0].code : "en", o = AO.concat(t), M = {
en: Cp
};
for (let b of o)
M[b.code] = b;
return {
map: M,
defaultCode: e
};
}
function Dp(t, e) {
return typeof t == "object" && !Array.isArray(t) ? Xp(t.code, [t.code], t) : qO(t, e);
}
function qO(t, e) {
let o = [].concat(t || []), M = fO(o, e) || Cp;
return Xp(t, o, M);
}
function fO(t, e) {
for (let o = 0; o < t.length; o += 1) {
let M = t[o].toLocaleLowerCase().split("-");
for (let b = M.length; b > 0; b -= 1) {
let z = M.slice(0, b).join("-");
if (e[z])
return e[z];
}
}
return null;
}
function Xp(t, e, o) {
let M = $o([wp, o], ["buttonText"]);
delete M.code;
let { week: b } = M;
return delete M.week, {
codeArg: t,
codes: e,
week: b,
simpleNumberFormat: new Intl.NumberFormat(t),
options: M
};
}
function a0(t) {
return {
id: z1(),
name: t.name,
premiumReleaseDate: t.premiumReleaseDate ? new Date(t.premiumReleaseDate) : void 0,
deps: t.deps || [],
reducers: t.reducers || [],
isLoadingFuncs: t.isLoadingFuncs || [],
contextInit: [].concat(t.contextInit || []),
eventRefiners: t.eventRefiners || {},
eventDefMemberAdders: t.eventDefMemberAdders || [],
eventSourceRefiners: t.eventSourceRefiners || {},
isDraggableTransformers: t.isDraggableTransformers || [],
eventDragMutationMassagers: t.eventDragMutationMassagers || [],
eventDefMutationAppliers: t.eventDefMutationAppliers || [],
dateSelectionTransformers: t.dateSelectionTransformers || [],
datePointTransforms: t.datePointTransforms || [],
dateSpanTransforms: t.dateSpanTransforms || [],
views: t.views || {},
viewPropsTransformers: t.viewPropsTransformers || [],
isPropsValid: t.isPropsValid || null,
externalDefTransforms: t.externalDefTransforms || [],
viewContainerAppends: t.viewContainerAppends || [],
eventDropTransformers: t.eventDropTransformers || [],
componentInteractions: t.componentInteractions || [],
calendarInteractions: t.calendarInteractions || [],
themeClasses: t.themeClasses || {},
eventSourceDefs: t.eventSourceDefs || [],
cmdFormatter: t.cmdFormatter,
recurringTypes: t.recurringTypes || [],
namedTimeZonedImpl: t.namedTimeZonedImpl,
initialView: t.initialView || "",
elementDraggingImpl: t.elementDraggingImpl,
optionChangeHandlers: t.optionChangeHandlers || {},
scrollGridImpl: t.scrollGridImpl || null,
listenerRefiners: t.listenerRefiners || {},
optionRefiners: t.optionRefiners || {},
propSetHandlers: t.propSetHandlers || {}
};
}
function WO(t, e) {
let o = {}, M = {
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 b(z) {
for (let n of z) {
const p = n.name, r = o[p];
r === void 0 ? (o[p] = n.id, b(n.deps), M = RO(M, n)) : r !== n.id && console.warn(`Duplicate plugin '${p}'`);
}
}
return t && b(t), b(e), M;
}
function hO() {
let t = [], e = [], o;
return (M, b) => ((!o || !C0(M, t) || !C0(b, e)) && (o = WO(M, b)), t = M, e = b, o);
}
function RO(t, e) {
return {
premiumReleaseDate: mO(t.premiumReleaseDate, e.premiumReleaseDate),
reducers: t.reducers.concat(e.reducers),
isLoadingFuncs: t.isLoadingFuncs.concat(e.isLoadingFuncs),
contextInit: t.contextInit.concat(e.contextInit),
eventRefiners: Object.assign(Object.assign({}, t.eventRefiners), e.eventRefiners),
eventDefMemberAdders: t.eventDefMemberAdders.concat(e.eventDefMemberAdders),
eventSourceRefiners: Object.assign(Object.assign({}, t.eventSourceRefiners), e.eventSourceRefiners),
isDraggableTransformers: t.isDraggableTransformers.concat(e.isDraggableTransformers),
eventDragMutationMassagers: t.eventDragMutationMassagers.concat(e.eventDragMutationMassagers),
eventDefMutationAppliers: t.eventDefMutationAppliers.concat(e.eventDefMutationAppliers),
dateSelectionTransformers: t.dateSelectionTransformers.concat(e.dateSelectionTransformers),
datePointTransforms: t.datePointTransforms.concat(e.datePointTransforms),
dateSpanTransforms: t.dateSpanTransforms.concat(e.dateSpanTransforms),
views: Object.assign(Object.assign({}, t.views), e.views),
viewPropsTransformers: t.viewPropsTransformers.concat(e.viewPropsTransformers),
isPropsValid: e.isPropsValid || t.isPropsValid,
externalDefTransforms: t.externalDefTransforms.concat(e.externalDefTransforms),
viewContainerAppends: t.viewContainerAppends.concat(e.viewContainerAppends),
eventDropTransformers: t.eventDropTransformers.concat(e.eventDropTransformers),
calendarInteractions: t.calendarInteractions.concat(e.calendarInteractions),
componentInteractions: t.componentInteractions.concat(e.componentInteractions),
themeClasses: Object.assign(Object.assign({}, t.themeClasses), e.themeClasses),
eventSourceDefs: t.eventSourceDefs.concat(e.eventSourceDefs),
cmdFormatter: e.cmdFormatter || t.cmdFormatter,
recurringTypes: t.recurringTypes.concat(e.recurringTypes),
namedTimeZonedImpl: e.namedTimeZonedImpl || t.namedTimeZonedImpl,
initialView: t.initialView || e.initialView,
elementDraggingImpl: t.elementDraggingImpl || e.elementDraggingImpl,
optionChangeHandlers: Object.assign(Object.assign({}, t.optionChangeHandlers), e.optionChangeHandlers),
scrollGridImpl: e.scrollGridImpl || t.scrollGridImpl,
listenerRefiners: Object.assign(Object.assign({}, t.listenerRefiners), e.listenerRefiners),
optionRefiners: Object.assign(Object.assign({}, t.optionRefiners), e.optionRefiners),
propSetHandlers: Object.assign(Object.assign({}, t.propSetHandlers), e.propSetHandlers)
};
}
function mO(t, e) {
return t === void 0 ? e : e === void 0 ? t : new Date(Math.max(t.valueOf(), e.valueOf()));
}
class P1 extends z2 {
}
P1.prototype.classes = {
root: "fc-theme-standard",
tableCellShaded: "fc-cell-shaded",
buttonGroup: "fc-button-group",
button: "fc-button fc-button-primary",
buttonActive: "fc-button-active"
};
P1.prototype.baseIconClass = "fc-icon";
P1.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"
};
P1.prototype.rtlIconClasses = {
prev: "fc-icon-chevron-right",
next: "fc-icon-chevron-left",
prevYear: "fc-icon-chevrons-right",
nextYear: "fc-icon-chevrons-left"
};
P1.prototype.iconOverrideOption = "buttonIcons";
P1.prototype.iconOverrideCustomButtonOption = "icon";
P1.prototype.iconOverridePrefix = "fc-icon-";
function gO(t, e) {
let o = {}, M;
for (M in t)
go(M, o, t, e);
for (M in e)
go(M, o, t, e);
return o;
}
function go(t, e, o, M) {
if (e[t])
return e[t];
let b = LO(t, e, o, M);
return b && (e[t] = b), b;
}
function LO(t, e, o, M) {
let b = o[t], z = M[t], n = (i) => b && b[i] !== null ? b[i] : z && z[i] !== null ? z[i] : null, p = n("component"), r = n("superType"), c = null;
if (r) {
if (r === t)
throw new Error("Can't have a custom view type that references itself");
c = go(r, e, o, M);
}
return !p && c && (p = c.component), p ? {
type: t,
component: p,
defaults: Object.assign(Object.assign({}, c ? c.defaults : {}), b ? b.rawOptions : {}),
overrides: Object.assign(Object.assign({}, c ? c.overrides : {}), z ? z.rawOptions : {})
} : null;
}
function oz(t) {
return d0(t, yO);
}
function yO(t) {
let e = typeof t == "function" ? { component: t } : t, { component: o } = e;
return e.content ? o = Mz(e) : o && !(o.prototype instanceof E) && (o = Mz(Object.assign(Object.assign({}, e), { content: o }))), {
superType: e.type,
component: o,
rawOptions: e
// includes type and component too :(
};
}
function Mz(t) {
return (e) => O(n1.Consumer, null, (o) => O(b0, { elTag: "div", elClasses: _n(o.viewSpec), renderProps: Object.assign(Object.assign({}, e), { nextDayThreshold: o.options.nextDayThreshold }), generatorName: void 0, customGenerator: t.content, classNameGenerator: t.classNames, didMount: t.didMount, willUnmount: t.willUnmount }));
}
function vO(t, e, o, M) {
let b = oz(t), z = oz(e.views), n = gO(b, z);
return d0(n, (p) => NO(p, z, e, o, M));
}
function NO(t, e, o, M, b) {
let z = t.overrides.duration || t.defaults.duration || M.duration || o.duration, n = null, p = "", r = "", c = {};
if (z && (n = TO(z), n)) {
let s = k1(n);
p = s.unit, s.value === 1 && (r = p, c = e[p] ? e[p].rawOptions : {});
}
let i = (s) => {
let l = s.buttonText || {}, d = t.defaults.buttonTextKey;
return d != null && l[d] != null ? l[d] : l[t.type] != null ? l[t.type] : l[r] != null ? l[r] : null;
}, a = (s) => {
let l = s.buttonHints || {}, d = t.defaults.buttonTextKey;
return d != null && l[d] != null ? l[d] : l[t.type] != null ? l[t.type] : l[r] != null ? l[r] : null;
};
return {
type: t.type,
component: t.component,
duration: n,
durationUnit: p,
singleUnit: r,
optionDefaults: t.defaults,
optionOverrides: Object.assign(Object.assign({}, c), t.overrides),
buttonTextOverride: i(M) || i(o) || // constructor-specified buttonText lookup hash takes precedence
t.overrides.buttonText,
buttonTextDefault: i(b) || t.defaults.buttonText || i(Ue) || t.type,
// not DRY
buttonTitleOverride: a(M) || a(o) || t.overrides.buttonHint,
buttonTitleDefault: a(b) || t.defaults.buttonHint || a(Ue)
// will eventually fall back to buttonText
};
}
let bz = {};
function TO(t) {
let e = JSON.stringify(t), o = bz[e];
return o === void 0 && (o = P(t), bz[e] = o), o;
}
function BO(t, e) {
return e.type === "CHANGE_VIEW_TYPE" && (t = e.viewType), t;
}
function SO(t, e) {
return e.type === "CHANGE_DATE" ? e.dateMarker : t;
}
function EO(t, e, o) {
let M = t.initialDate;
return M != null ? e.createMarker(M) : o.getDateMarker();
}
function wO(t, e) {
return e.type === "SET_OPTION" ? Object.assign(Object.assign({}, t), { [e.optionName]: e.rawOptionValue }) : t;
}
function CO(t, e, o, M) {
let b;
switch (e.type) {
case "CHANGE_VIEW_TYPE":
return M.build(e.dateMarker || o);
case "CHANGE_DATE":
return M.build(e.dateMarker);
case "PREV":
if (b = M.buildPrev(t, o), b.isValid)
return b;
break;
case "NEXT":
if (b = M.buildNext(t, o), b.isValid)
return b;
break;
}
return t;
}
function DO(t, e, o) {
let M = e ? e.activeRange : null;
return xp({}, HO(t, o), M, o);
}
function XO(t, e, o, M) {
let b = o ? o.activeRange : null;
switch (e.type) {
case "ADD_EVENT_SOURCES":
return xp(t, e.sources, b, M);
case "REMOVE_EVENT_SOURCE":
return xO(t, e.sourceId);
case "PREV":
// TODO: how do we track all actions that affect dateProfile :(
case "NEXT":
case "CHANGE_DATE":
case "CHANGE_VIEW_TYPE":
return o ? _p(t, b, M) : t;
case "FETCH_EVENT_SOURCES":
return LM(t, e.sourceIds ? (
// why no type?
wn(e.sourceIds)
) : Ip(t, M), b, e.isRefetch || !1, M);
case "RECEIVE_EVENTS":
case "RECEIVE_EVENT_ERROR":
return PO(t, e.sourceId, e.fetchId, e.fetchRange);
case "REMOVE_ALL_EVENT_SOURCES":
return {};
default:
return t;
}
}
function kO(t, e, o) {
let M = e ? e.activeRange : null;
return LM(t, Ip(t, o), M, !0, o);
}
function kp(t) {
for (let e in t)
if (t[e].isFetching)
return !0;
return !1;
}
function xp(t, e, o, M) {
let b = {};
for (let z of e)
b[z.sourceId] = z;
return o && (b = _p(b, o, M)), Object.assign(Object.assign({}, t), b);
}
function xO(t, e) {
return h1(t, (o) => o.sourceId !== e);
}
function _p(t, e, o) {
return LM(t, h1(t, (M) => _O(M, e, o)), e, !1, o);
}
function _O(t, e, o) {
return Pp(t, o) ? !o.options.lazyFetching || !t.fetchRange || t.isFetching || // always cancel outdated in-progress fetches
e.start < t.fetchRange.start || e.end > t.fetchRange.end : !t.latestFetchId;
}
function LM(t, e, o, M, b) {
let z = {};
for (let n in t) {
let p = t[n];
e[n] ? z[n] = IO(p, o, M, b) : z[n] = p;
}
return z;
}
function IO(t, e, o, M) {
let { options: b, calendarApi: z } = M, n = M.pluginHooks.eventSourceDefs[t.sourceDefId], p = z1();
return n.fetch({
eventSource: t,
range: e,
isRefetch: o,
context: M
}, (r) => {
let { rawEvents: c } = r;
b.eventSourceSuccess && (c = b.eventSourceSuccess.call(z, c, r.response) || c), t.success && (c = t.success.call(z, c, r.response) || c), M.dispatch({
type: "RECEIVE_EVENTS",
sourceId: t.sourceId,
fetchId: p,
fetchRange: e,
rawEvents: c
});
}, (r) => {
let c = !1;
b.eventSourceFailure && (b.eventSourceFailure.call(z, r), c = !0), t.failure && (t.failure(r), c = !0), c || console.warn(r.message, r), M.dispatch({
type: "RECEIVE_EVENT_ERROR",
sourceId: t.sourceId,
fetchId: p,
fetchRange: e,
error: r
});
}), Object.assign(Object.assign({}, t), { isFetching: !0, latestFetchId: p });
}
function PO(t, e, o, M) {
let b = t[e];
return b && // not already removed
o === b.latestFetchId ? Object.assign(Object.assign({}, t), { [e]: Object.assign(Object.assign({}, b), { isFetching: !1, fetchRange: M }) }) : t;
}
function Ip(t, e) {
return h1(t, (o) => Pp(o, e));
}
function HO(t, e) {
let o = Yn(e), M = [].concat(t.eventSources || []), b = [];
t.initialEvents && M.unshift(t.initialEvents), t.events && M.unshift(t.events);
for (let z of M) {
let n = Gn(z, e, o);
n && b.push(n);
}
return b;
}
function Pp(t, e) {
return !e.pluginHooks.eventSourceDefs[t.sourceDefId].ignoreRange;
}
function UO(t, e) {
switch (e.type) {
case "UNSELECT_DATES":
return null;
case "SELECT_DATES":
return e.selection;
default:
return t;
}
}
function jO(t, e) {
switch (e.type) {
case "UNSELECT_EVENT":
return "";
case "SELECT_EVENT":
return e.eventInstanceId;
default:
return t;
}
}
function FO(t, e) {
let o;
switch (e.type) {
case "UNSET_EVENT_DRAG":
return null;
case "SET_EVENT_DRAG":
return o = e.state, {
affectedEvents: o.affectedEvents,
mutatedEvents: o.mutatedEvents,
isEvent: o.isEvent
};
default:
return t;
}
}
function GO(t, e) {
let o;
switch (e.type) {
case "UNSET_EVENT_RESIZE":
return null;
case "SET_EVENT_RESIZE":
return o = e.state, {
affectedEvents: o.affectedEvents,
mutatedEvents: o.mutatedEvents,
isEvent: o.isEvent
};
default:
return t;
}
}
function YO(t, e, o, M, b) {
let z = t.headerToolbar ? zz(t.headerToolbar, t, e, o, M, b) : null, n = t.footerToolbar ? zz(t.footerToolbar, t, e, o, M, b) : null;
return { header: z, footer: n };
}
function zz(t, e, o, M, b, z) {
let n = {}, p = [], r = !1;
for (let c in t) {
let i = t[c], a = VO(i, e, o, M, b, z);
n[c] = a.widgets, p.push(...a.viewsWithButtons), r = r || a.hasTitle;
}
return { sectionWidgets: n, viewsWithButtons: p, hasTitle: r };
}
function VO(t, e, o, M, b, z) {
let n = e.direction === "rtl", p = e.customButtons || {}, r = o.buttonText || {}, c = e.buttonText || {}, i = o.buttonHints || {}, a = e.buttonHints || {}, s = t ? t.split(" ") : [], l = [], d = !1;
return { widgets: s.map((u) => u.split(",").map((W) => {
if (W === "title")
return d = !0, { buttonName: W };
let h, y, S, _, X, $;
if (h = p[W])
S = (H) => {
h.click && h.click.call(H.target, H, H.target);
}, (_ = M.getCustomButtonIconClass(h)) || (_ = M.getIconClass(W, n)) || (X = h.text), $ = h.hint || h.text;
else if (y = b[W]) {
l.push(W), S = () => {
z.changeView(W);
}, (X = y.buttonTextOverride) || (_ = M.getIconClass(W, n)) || (X = y.buttonTextDefault);
let H = y.buttonTextOverride || y.buttonTextDefault;
$ = He(
y.buttonTitleOverride || y.buttonTitleDefault || e.viewHint,
[H, W],
// view-name = buttonName
H
);
} else if (z[W])
if (S = () => {
z[W]();
}, (X = r[W]) || (_ = M.getIconClass(W, n)) || (X = c[W]), W === "prevYear" || W === "nextYear") {
let H = W === "prevYear" ? "prev" : "next";
$ = He(i[H] || a[H], [
c.year || "year",
"year"
], c[W]);
} else
$ = (H) => He(i[W] || a[W], [
c[H] || H,
H
], c[W]);
return { buttonName: W, buttonClick: S, buttonIcon: _, buttonText: X, buttonHint: $ };
})), viewsWithButtons: l, hasTitle: d };
}
class QO {
constructor(e, o, M) {
this.type = e, this.getCurrentData = o, this.dateEnv = M;
}
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 KO = {
ignoreRange: !0,
parseMeta(t) {
return Array.isArray(t.events) ? t.events : null;
},
fetch(t, e) {
e({
rawEvents: t.eventSource.meta
});
}
};
const $O = a0({
name: "array-event-source",
eventSourceDefs: [KO]
});
let ZO = {
parseMeta(t) {
return typeof t.events == "function" ? t.events : null;
},
fetch(t, e, o) {
const { dateEnv: M } = t.context, b = t.eventSource.meta;
op(b.bind(null, ep(t.range, M)), (z) => e({ rawEvents: z }), o);
}
};
const JO = a0({
name: "func-event-source",
eventSourceDefs: [ZO]
}), e3 = {
method: String,
extraParams: f,
startParam: String,
endParam: String,
timeZoneParam: String
};
let t3 = {
parseMeta(t) {
return t.url && (t.format === "json" || !t.format) ? {
url: t.url,
format: "json",
method: (t.method || "GET").toUpperCase(),
extraParams: t.extraParams,
startParam: t.startParam,
endParam: t.endParam,
timeZoneParam: t.timeZoneParam
} : null;
},
fetch(t, e, o) {
const { meta: M } = t.eventSource, b = M3(M, t.range, t.context);
Mp(M.method, M.url, b).then(([z, n]) => {
e({ rawEvents: z, response: n });
}, o);
}
};
const o3 = a0({
name: "json-event-source",
eventSourceRefiners: e3,
eventSourceDefs: [t3]
});
function M3(t, e, o) {
let { dateEnv: M, options: b } = o, z, n, p, r, c = {};
return z = t.startParam, z == null && (z = b.startParam), n = t.endParam, n == null && (n = b.endParam), p = t.timeZoneParam, p == null && (p = b.timeZoneParam), typeof t.extraParams == "function" ? r = t.extraParams() : r = t.extraParams || {}, Object.assign(c, r), c[z] = M.formatIso(e.start), c[n] = M.formatIso(e.end), M.timeZone !== "local" && (c[p] = M.timeZone), c;
}
const b3 = {
daysOfWeek: f,
startTime: P,
endTime: P,
duration: P,
startRecur: f,
endRecur: f
};
let z3 = {
parse(t, e) {
if (t.daysOfWeek || t.startTime || t.endTime || t.startRecur || t.endRecur) {
let o = {
daysOfWeek: t.daysOfWeek || null,
startTime: t.startTime || null,
endTime: t.endTime || null,
startRecur: t.startRecur ? e.createMarker(t.startRecur) : null,
endRecur: t.endRecur ? e.createMarker(t.endRecur) : null,
dateEnv: e
}, M;
return t.duration && (M = t.duration), !M && t.startTime && t.endTime && (M = Yi(t.endTime, t.startTime)), {
allDayGuess: !t.startTime && !t.endTime,
duration: M,
typeData: o
// doesn't need endTime anymore but oh well
};
}
return null;
},
expand(t, e, o) {
let M = M1(e, { start: t.startRecur, end: t.endRecur });
return M ? p3(t.daysOfWeek, t.startTime, t.dateEnv, o, M) : [];
}
};
const n3 = a0({
name: "simple-recurring-event",
recurringTypes: [z3],
eventRefiners: b3
});
function p3(t, e, o, M, b) {
let z = t ? wn(t) : null, n = J(b.start), p = b.end, r = [];
for (e && (e.milliseconds < 0 ? p = c0(p, 1) : e.milliseconds >= 1e3 * 60 * 60 * 24 && (n = c0(n, -1))); n < p; ) {
let c;
(!z || z[n.getUTCDay()]) && (e ? c = M.add(n, e) : c = n, r.push(M.createMarker(o.toDate(c)))), n = c0(n, 1);
}
return r;
}
const r3 = a0({
name: "change-handler",
optionChangeHandlers: {
events(t, e) {
nz([t], e);
},
eventSources: nz
}
});
function nz(t, e) {
let o = Zo(e.getCurrentData().eventSources);
if (o.length === 1 && t.length === 1 && Array.isArray(o[0]._raw) && Array.isArray(t[0])) {
e.dispatch({
type: "RESET_RAW_EVENTS",
sourceId: o[0].sourceId,
rawEvents: t[0]
});
return;
}
let M = [];
for (let b of t) {
let z = !1;
for (let n = 0; n < o.length; n += 1)
if (o[n]._raw === b) {
o.splice(n, 1), z = !0;
break;
}
z || M.push(b);
}
for (let b of o)
e.dispatch({
type: "REMOVE_EVENT_SOURCE",
sourceId: b.sourceId
});
for (let b of M)
e.calendarApi.addEventSource(b);
}
function c3(t, e) {
e.emitter.trigger("datesSet", Object.assign(Object.assign({}, ep(t.activeRange, e.dateEnv)), { view: e.viewApi }));
}
function i3(t, e) {
let { emitter: o } = e;
o.hasHandlers("eventsSet") && o.trigger("eventsSet", Q1(t, e));
}
const a3 = [
$O,
JO,
o3,
n3,
r3,
a0({
name: "misc",
isLoadingFuncs: [
(t) => kp(t.eventSources)
],
propSetHandlers: {
dateProfile: c3,
eventStore: i3
}
})
];
class s3 {
constructor(e, o) {
this.runTaskOption = e, this.drainedOption = o, this.queue = [], this.delayedRunner = new Qe(this.drain.bind(this));
}
request(e, o) {
this.queue.push(e), this.delayedRunner.request(o);
}
pause(e) {
this.delayedRunner.pause(e);
}
resume(e, o) {
this.delayedRunner.resume(e, o);
}
drain() {
let { queue: e } = this;
for (; e.length; ) {
let o = [], M;
for (; M = e.shift(); )
this.runTask(M), o.push(M);
this.drained(o);
}
}
runTask(e) {
this.runTaskOption && this.runTaskOption(e);
}
drained(e) {
this.drainedOption && this.drainedOption(e);
}
}
function O3(t, e, o) {
let M;
return /^(year|month)$/.test(t.currentRangeUnit) ? M = t.currentRange : M = t.activeRange, o.formatRange(M.start, M.end, Z(e.titleFormat || l3(t)), {
isEndExclusive: t.isRangeAllDay,
defaultSeparator: e.titleRangeSeparator
});
}
function l3(t) {
let { currentRangeUnit: e } = t;
if (e === "year")
return { year: "numeric" };
if (e === "month")
return { year: "numeric", month: "long" };
let o = Ke(t.currentRange.start, t.currentRange.end);
return o !== null && o > 1 ? { year: "numeric", month: "short", day: "numeric" } : { year: "numeric", month: "long", day: "numeric" };
}
class pz {
constructor() {
this.resetListeners = /* @__PURE__ */ new Set();
}
handleInput(e, o) {
const M = this.dateEnv;
if (e !== M && (typeof o == "function" ? this.nowFn = o : M || (this.nowAnchorDate = e.toDate(o ? e.createMarker(o) : e.createNowMarker()), this.nowAnchorQueried = Date.now()), this.dateEnv = e, M))
for (const b of this.resetListeners.values())
b();
}
getDateMarker() {
return this.nowAnchorDate ? this.dateEnv.timestampToMarker(this.nowAnchorDate.valueOf() + (Date.now() - this.nowAnchorQueried)) : this.dateEnv.createMarker(this.nowFn());
}
addResetListener(e) {
this.resetListeners.add(e);
}
removeResetListener(e) {
this.resetListeners.delete(e);
}
}
class d3 {
constructor(e) {
this.computeCurrentViewData = L(this._computeCurrentViewData), this.organizeRawLocales = L(uO), this.buildLocale = L(Dp), this.buildPluginHooks = hO(), this.buildDateEnv = L(A3), this.buildTheme = L(u3), this.parseToolbars = L(YO), this.buildViewSpecs = L(vO), this.buildDateProfileGenerator = C1(q3), this.buildViewApi = L(f3), this.buildViewUiProps = C1(R3), this.buildEventUiBySource = L(W3, f0), this.buildEventUiBases = L(h3), this.parseContextBusinessHours = C1(m3), this.buildTitle = L(O3), this.nowManager = new pz(), this.emitter = new n2(), this.actionRunner = new s3(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 = (s) => {
this.actionRunner.request(s);
}, this.props = e, this.actionRunner.pause(), this.nowManager = new pz();
let o = {}, M = this.computeOptionsData(e.optionOverrides, o, e.calendarApi), b = M.calendarOptions.initialView || M.pluginHooks.initialView, z = this.computeCurrentViewData(b, M, e.optionOverrides, o);
e.calendarApi.currentDataManager = this, this.emitter.setThisContext(e.calendarApi), this.emitter.setOptions(z.options);
let n = {
nowManager: this.nowManager,
dateEnv: M.dateEnv,
options: M.calendarOptions,
pluginHooks: M.pluginHooks,
calendarApi: e.calendarApi,
dispatch: this.dispatch,
emitter: this.emitter,
getCurrentData: this.getCurrentData
}, p = EO(M.calendarOptions, M.dateEnv, this.nowManager), r = z.dateProfileGenerator.build(p);
o1(r.activeRange, p) || (p = r.currentRange.start);
for (let s of M.pluginHooks.contextInit)
s(n);
let c = DO(M.calendarOptions, r, n), i = {
dynamicOptionOverrides: o,
currentViewType: b,
currentDate: p,
dateProfile: r,
businessHours: this.parseContextBusinessHours(n),
eventSources: c,
eventUiBases: {},
eventStore: w0(),
renderableEventStore: w0(),
dateSelection: null,
eventSelection: "",
eventDrag: null,
eventResize: null,
selectionConfig: this.buildViewUiProps(n).selectionConfig
}, a = Object.assign(Object.assign({}, n), i);
for (let s of M.pluginHooks.reducers)
Object.assign(i, s(null, null, a));
$t(i, n) && this.emitter.trigger("loading", !0), this.state = i, this.updateData(), this.actionRunner.resume();
}
resetOptions(e, o) {
let { props: M } = this;
o === void 0 ? M.optionOverrides = e : (M.optionOverrides = Object.assign(Object.assign({}, M.optionOverrides || {}), e), this.optionsForRefining.push(...o)), (o === void 0 || o.length) && this.actionRunner.request({
type: "NOTHING"
});
}
_handleAction(e) {
let { props: o, state: M, emitter: b } = this, z = wO(M.dynamicOptionOverrides, e), n = this.computeOptionsData(o.optionOverrides, z, o.calendarApi), p = BO(M.currentViewType, e), r = this.computeCurrentViewData(p, n, o.optionOverrides, z);
o.calendarApi.currentDataManager = this, b.setThisContext(o.calendarApi), b.setOptions(r.options);
let c = {
nowManager: this.nowManager,
dateEnv: n.dateEnv,
options: n.calendarOptions,
pluginHooks: n.pluginHooks,
calendarApi: o.calendarApi,
dispatch: this.dispatch,
emitter: b,
getCurrentData: this.getCurrentData
}, { currentDate: i, dateProfile: a } = M;
this.data && this.data.dateProfileGenerator !== r.dateProfileGenerator && (a = r.dateProfileGenerator.build(i)), i = SO(i, e), a = CO(a, e, i, r.dateProfileGenerator), (e.type === "PREV" || // TODO: move this logic into DateProfileGenerator
e.type === "NEXT" || // "
!o1(a.currentRange, i)) && (i = a.currentRange.start);
let s = XO(M.eventSources, e, a, c), l = ns(M.eventStore, e, s, a, c), A = kp(s) && !r.options.progressiveEventRendering && M.renderableEventStore || l, { eventUiSingleBase: u, selectionConfig: W } = this.buildViewUiProps(c), h = this.buildEventUiBySource(s), y = this.buildEventUiBases(A.defs, u, h), S = {
dynamicOptionOverrides: z,
currentViewType: p,
currentDate: i,
dateProfile: a,
eventSources: s,
eventStore: l,
renderableEventStore: A,
selectionConfig: W,
eventUiBases: y,
businessHours: this.parseContextBusinessHours(c),
dateSelection: UO(M.dateSelection, e),
eventSelection: jO(M.eventSelection, e),
eventDrag: FO(M.eventDrag, e),
eventResize: GO(M.eventResize, e)
}, _ = Object.assign(Object.assign({}, c), S);
for (let H of n.pluginHooks.reducers)
Object.assign(S, H(M, e, _));
let X = $t(M, c), $ = $t(S, c);
!X && $ ? b.trigger("loading", !0) : X && !$ && b.trigger("loading", !1), this.state = S, o.onAction && o.onAction(e);
}
updateData() {
let { props: e, state: o } = this, M = this.data, b = this.computeOptionsData(e.optionOverrides, o.dynamicOptionOverrides, e.calendarApi), z = this.computeCurrentViewData(o.currentViewType, b, e.optionOverrides, o.dynamicOptionOverrides), n = this.data = Object.assign(Object.assign(Object.assign({ nowManager: this.nowManager, viewTitle: this.buildTitle(o.dateProfile, z.options, b.dateEnv), calendarApi: e.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, b), z), o), p = b.pluginHooks.optionChangeHandlers, r = M && M.calendarOptions, c = b.calendarOptions;
if (r && r !== c) {
r.timeZone !== c.timeZone && (o.eventSources = n.eventSources = kO(n.eventSources, o.dateProfile, n), o.eventStore = n.eventStore = Kb(n.eventStore, M.dateEnv, n.dateEnv), o.renderableEventStore = n.renderableEventStore = Kb(n.renderableEventStore, M.dateEnv, n.dateEnv));
for (let i in p)
(this.optionsForHandling.indexOf(i) !== -1 || r[i] !== c[i]) && p[i](c[i], n);
}
this.optionsForHandling = [], e.onData && e.onData(n);
}
computeOptionsData(e, o, M) {
if (!this.optionsForRefining.length && e === this.stableOptionOverrides && o === this.stableDynamicOptionOverrides)
return this.stableCalendarOptionsData;
let { refinedOptions: b, pluginHooks: z, localeDefaults: n, availableLocaleData: p, extra: r } = this.processRawCalendarOptions(e, o);
rz(r);
let c = this.buildDateEnv(b.timeZone, b.locale, b.weekNumberCalculation, b.firstDay, b.weekText, z, p, b.defaultRangeSeparator), i = this.buildViewSpecs(z.views, this.stableOptionOverrides, this.stableDynamicOptionOverrides, n), a = this.buildTheme(b, z), s = this.parseToolbars(b, this.stableOptionOverrides, a, i, M);
return this.stableCalendarOptionsData = {
calendarOptions: b,
pluginHooks: z,
dateEnv: c,
viewSpecs: i,
theme: a,
toolbarConfig: s,
localeDefaults: n,
availableRawLocales: p.map
};
}
// always called from behind a memoizer
processRawCalendarOptions(e, o) {
let { locales: M, locale: b } = Ut([
Ue,
e,
o
]), z = this.organizeRawLocales(M), n = z.map, p = this.buildLocale(b || z.defaultCode, n).options, r = this.buildPluginHooks(e.plugins || [], a3), c = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, Fb), Gb), Yb), r.listenerRefiners), r.optionRefiners), i = {}, a = Ut([
Ue,
p,
e,
o
]), s = {}, l = this.currentCalendarOptionsInput, d = this.currentCalendarOptionsRefined, A = !1;
for (let u in a)
this.optionsForRefining.indexOf(u) === -1 && (a[u] === l[u] || j1[u] && u in l && j1[u](l[u], a[u])) ? s[u] = d[u] : c[u] ? (s[u] = c[u](a[u]), A = !0) : i[u] = l[u];
return A && (this.currentCalendarOptionsInput = a, this.currentCalendarOptionsRefined = s, this.stableOptionOverrides = e, this.stableDynamicOptionOverrides = o), this.optionsForHandling.push(...this.optionsForRefining), this.optionsForRefining = [], {
rawOptions: this.currentCalendarOptionsInput,
refinedOptions: this.currentCalendarOptionsRefined,
pluginHooks: r,
availableLocaleData: z,
localeDefaults: p,
extra: i
};
}
_computeCurrentViewData(e, o, M, b) {
let z = o.viewSpecs[e];
if (!z)
throw new Error(`viewType "${e}" is not available. Please make sure you've loaded all neccessary plugins`);
let { refinedOptions: n, extra: p } = this.processRawViewOptions(z, o.pluginHooks, o.localeDefaults, M, b);
rz(p), this.nowManager.handleInput(o.dateEnv, n.now);
let r = this.buildDateProfileGenerator({
dateProfileGeneratorClass: z.optionDefaults.dateProfileGeneratorClass,
nowManager: this.nowManager,
duration: z.duration,
durationUnit: z.durationUnit,
usesMinMaxTime: z.optionDefaults.usesMinMaxTime,
dateEnv: o.dateEnv,
calendarApi: this.props.calendarApi,
slotMinTime: n.slotMinTime,
slotMaxTime: n.slotMaxTime,
showNonCurrentDates: n.showNonCurrentDates,
dayCount: n.dayCount,
dateAlignment: n.dateAlignment,
dateIncrement: n.dateIncrement,
hiddenDays: n.hiddenDays,
weekends: n.weekends,
validRangeInput: n.validRange,
visibleRangeInput: n.visibleRange,
fixedWeekCount: n.fixedWeekCount
}), c = this.buildViewApi(e, this.getCurrentData, o.dateEnv);
return { viewSpec: z, options: n, dateProfileGenerator: r, viewApi: c };
}
processRawViewOptions(e, o, M, b, z) {
let n = Ut([
Ue,
e.optionDefaults,
M,
b,
e.optionOverrides,
z
]), p = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, Fb), Gb), Yb), ya), o.listenerRefiners), o.optionRefiners), r = {}, c = this.currentViewOptionsInput, i = this.currentViewOptionsRefined, a = !1, s = {};
for (let l in n)
n[l] === c[l] || j1[l] && j1[l](n[l], c[l]) ? r[l] = i[l] : (n[l] === this.currentCalendarOptionsInput[l] || j1[l] && j1[l](n[l], this.currentCalendarOptionsInput[l]) ? l in this.currentCalendarOptionsRefined && (r[l] = this.currentCalendarOptionsRefined[l]) : p[l] ? r[l] = p[l](n[l]) : s[l] = n[l], a = !0);
return a && (this.currentViewOptionsInput = n, this.currentViewOptionsRefined = r), {
rawOptions: this.currentViewOptionsInput,
refinedOptions: this.currentViewOptionsRefined,
extra: s
};
}
}
function A3(t, e, o, M, b, z, n, p) {
let r = Dp(e || n.defaultCode, n.map);
return new Da({
calendarSystem: "gregory",
timeZone: t,
namedTimeZoneImpl: z.namedTimeZonedImpl,
locale: r,
weekNumberCalculation: o,
firstDay: M,
weekText: b,
cmdFormatter: z.cmdFormatter,
defaultSeparator: p
});
}
function u3(t, e) {
let o = e.themeClasses[t.themeSystem] || P1;
return new o(t);
}
function q3(t) {
let e = t.dateProfileGeneratorClass || Hn;
return new e(t);
}
function f3(t, e, o) {
return new QO(t, e, o);
}
function W3(t) {
return d0(t, (e) => e.ui);
}
function h3(t, e, o) {
let M = { "": e };
for (let b in t) {
let z = t[b];
z.sourceId && o[z.sourceId] && (M[b] = o[z.sourceId]);
}
return M;
}
function R3(t) {
let { options: e } = t;
return {
eventUiSingleBase: Ze({
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
}, t),
selectionConfig: Ze({
constraint: e.selectConstraint,
overlap: typeof e.selectOverlap == "boolean" ? e.selectOverlap : void 0,
allow: e.selectAllow
}, t)
};
}
function $t(t, e) {
for (let o of e.pluginHooks.isLoadingFuncs)
if (o(t))
return !0;
return !1;
}
function m3(t) {
return Kn(t.options.businessHours, t);
}
function rz(t, e) {
for (let o in t)
console.warn(`Unknown option '${o}'`);
}
class g3 extends E {
render() {
let e = this.props.widgetGroups.map((o) => this.renderWidgetGroup(o));
return O("div", { className: "fc-toolbar-chunk" }, ...e);
}
renderWidgetGroup(e) {
let { props: o } = this, { theme: M } = this.context, b = [], z = !0;
for (let n of e) {
let { buttonName: p, buttonClick: r, buttonText: c, buttonIcon: i, buttonHint: a } = n;
if (p === "title")
z = !1, b.push(O("h2", { className: "fc-toolbar-title", id: o.titleId }, o.title));
else {
let s = p === o.activeButton, l = !o.isTodayEnabled && p === "today" || !o.isPrevEnabled && p === "prev" || !o.isNextEnabled && p === "next", d = [`fc-${p}-button`, M.getClass("button")];
s && d.push(M.getClass("buttonActive")), b.push(O("button", { type: "button", title: typeof a == "function" ? a(o.navUnit) : a, disabled: l, "aria-pressed": s, className: d.join(" "), onClick: r }, c || (i ? O("span", { className: i, role: "img" }) : "")));
}
}
if (b.length > 1) {
let n = z && M.getClass("buttonGroup") || "";
return O("div", { className: n }, ...b);
}
return b[0];
}
}
class cz extends E {
render() {
let { model: e, extraClassName: o } = this.props, M = !1, b, z, n = e.sectionWidgets, p = n.center;
return n.left ? (M = !0, b = n.left) : b = n.start, n.right ? (M = !0, z = n.right) : z = n.end, O(
"div",
{ className: [
o || "",
"fc-toolbar",
M ? "fc-toolbar-ltr" : ""
].join(" ") },
this.renderSection("start", b || []),
this.renderSection("center", p || []),
this.renderSection("end", z || [])
);
}
renderSection(e, o) {
let { props: M } = this;
return O(g3, { key: e, widgetGroups: o, title: M.title, navUnit: M.navUnit, activeButton: M.activeButton, isTodayEnabled: M.isTodayEnabled, isPrevEnabled: M.isPrevEnabled, isNextEnabled: M.isNextEnabled, titleId: M.titleId });
}
}
class L3 extends E {
constructor() {
super(...arguments), this.state = {
availableWidth: null
}, this.handleEl = (e) => {
this.el = e, D0(this.props.elRef, e), this.updateAvailableWidth();
}, this.handleResize = () => {
this.updateAvailableWidth();
};
}
render() {
let { props: e, state: o } = this, { aspectRatio: M } = e, b = [
"fc-view-harness",
M || e.liquid || e.height ? "fc-view-harness-active" : "fc-view-harness-passive"
// let the view do the height
], z = "", n = "";
return M ? o.availableWidth !== null ? z = o.availableWidth / M : n = `${1 / M * 100}%` : z = e.height || "", O("div", { "aria-labelledby": e.labeledById, ref: this.handleEl, className: b.join(" "), style: { height: z, paddingBottom: n } }, 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 y3 extends ve {
constructor(e) {
super(e), this.handleSegClick = (o, M) => {
let { component: b } = this, { context: z } = b, n = Re(M);
if (n && // might be the
surrounding the more link
b.isValidSegDownEl(o.target)) {
let p = q0(o.target, ".fc-event-forced-url"), r = p ? p.querySelector("a[href]").href : "";
z.emitter.trigger("eventClick", {
el: M,
event: new M0(b.context, n.eventRange.def, n.eventRange.instance),
jsEvent: o,
view: z.viewApi
}), r && !o.defaultPrevented && (window.location.href = r);
}
}, this.destroy = Ln(
e.el,
"click",
".fc-event",
// on both fg and bg events
this.handleSegClick
);
}
}
class v3 extends ve {
constructor(e) {
super(e), this.handleEventElRemove = (o) => {
o === this.currentSegEl && this.handleSegLeave(null, this.currentSegEl);
}, this.handleSegEnter = (o, M) => {
Re(M) && (this.currentSegEl = M, this.triggerEvent("eventMouseEnter", o, M));
}, this.handleSegLeave = (o, M) => {
this.currentSegEl && (this.currentSegEl = null, this.triggerEvent("eventMouseLeave", o, M));
}, this.removeHoverListeners = Di(
e.el,
".fc-event",
// on both fg and bg events
this.handleSegEnter,
this.handleSegLeave
);
}
destroy() {
this.removeHoverListeners();
}
triggerEvent(e, o, M) {
let { component: b } = this, { context: z } = b, n = Re(M);
(!o || b.isValidSegDownEl(o.target)) && z.emitter.trigger(e, {
el: M,
event: new M0(z, n.eventRange.def, n.eventRange.instance),
jsEvent: o,
view: z.viewApi
});
}
}
class N3 extends oe {
constructor() {
super(...arguments), this.buildViewContext = L(xa), this.buildViewPropTransformers = L(B3), this.buildToolbarProps = L(T3), this.headerRef = j(), this.footerRef = j(), this.interactionsStore = {}, this.state = {
viewLabelId: A1()
}, this.registerInteractiveComponent = (e, o) => {
let M = Cs(e, o), n = [
y3,
v3
].concat(this.props.pluginHooks.componentInteractions).map((p) => new p(M));
this.interactionsStore[e.uid] = n, ho[e.uid] = M;
}, this.unregisterInteractiveComponent = (e) => {
let o = this.interactionsStore[e.uid];
if (o) {
for (let M of o)
M.destroy();
delete this.interactionsStore[e.uid];
}
delete ho[e.uid];
}, this.resizeRunner = new Qe(() => {
this.props.emitter.trigger("_resize", !0), this.props.emitter.trigger("windowResize", { view: this.props.viewApi });
}), this.handleWindowResize = (e) => {
let { options: o } = this.props;
o.handleWindowResize && e.target === window && this.resizeRunner.request(o.windowResizeDelay);
};
}
/*
renders INSIDE of an outer div
*/
render() {
let { props: e } = this, { toolbarConfig: o, options: M } = e, b = !1, z = "", n;
e.isHeightAuto || e.forPrint ? z = "" : M.height != null ? b = !0 : M.contentHeight != null ? z = M.contentHeight : n = Math.max(M.aspectRatio, 0.5);
let p = this.buildViewContext(e.viewSpec, e.viewApi, e.options, e.dateProfileGenerator, e.dateEnv, e.nowManager, e.theme, e.pluginHooks, e.dispatch, e.getCurrentData, e.emitter, e.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent), r = o.header && o.header.hasTitle ? this.state.viewLabelId : void 0;
return O(
n1.Provider,
{ value: p },
O(H0, { unit: "day" }, (c) => {
let i = this.buildToolbarProps(e.viewSpec, e.dateProfile, e.dateProfileGenerator, e.currentDate, c, e.viewTitle);
return O(
k,
null,
o.header && O(cz, Object.assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: o.header, titleId: r }, i)),
O(
L3,
{ liquid: b, height: z, aspectRatio: n, labeledById: r },
this.renderView(e),
this.buildAppendContent()
),
o.footer && O(cz, Object.assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: o.footer, titleId: "" }, i))
);
})
);
}
componentDidMount() {
let { props: e } = this;
this.calendarInteractions = e.pluginHooks.calendarInteractions.map((M) => new M(e)), window.addEventListener("resize", this.handleWindowResize);
let { propSetHandlers: o } = e.pluginHooks;
for (let M in o)
o[M](e[M], e);
}
componentDidUpdate(e) {
let { props: o } = this, { propSetHandlers: M } = o.pluginHooks;
for (let b in M)
o[b] !== e[b] && M[b](o[b], o);
}
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, o = e.pluginHooks.viewContainerAppends.map((M) => M(e));
return O(k, {}, ...o);
}
renderView(e) {
let { pluginHooks: o } = e, { viewSpec: M } = e, b = {
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
}, z = this.buildViewPropTransformers(o.viewPropsTransformers);
for (let p of z)
Object.assign(b, p.transform(b, e));
let n = M.component;
return O(n, Object.assign({}, b));
}
}
function T3(t, e, o, M, b, z) {
let n = o.build(b, void 0, !1), p = o.buildPrev(e, M, !1), r = o.buildNext(e, M, !1);
return {
title: z,
activeButton: t.type,
navUnit: t.singleUnit,
isTodayEnabled: n.isValid && !o1(e.currentRange, b),
isPrevEnabled: p.isValid,
isNextEnabled: r.isValid
};
}
function B3(t) {
return t.map((e) => new e());
}
class S3 extends Ne {
constructor(e, o = {}) {
super(), this.isRendering = !1, this.isRendered = !1, this.currentClassNames = [], this.customContentRenderId = 0, this.handleAction = (M) => {
switch (M.type) {
case "SET_EVENT_DRAG":
case "SET_EVENT_RESIZE":
this.renderRunner.tryDrain();
}
}, this.handleData = (M) => {
this.currentData = M, this.renderRunner.request(M.calendarOptions.rerenderDelay);
}, this.handleRenderRequest = () => {
if (this.isRendering) {
this.isRendered = !0;
let { currentData: M } = this;
he(() => {
Ve(O(ws, { options: M.calendarOptions, theme: M.theme, emitter: M.emitter }, (b, z, n, p) => (this.setClassNames(b), this.setHeight(z), O(
xn.Provider,
{ value: this.customContentRenderId },
O(N3, Object.assign({ isHeightAuto: n, forPrint: p }, M))
))), this.el);
});
} else this.isRendered && (this.isRendered = !1, Ve(null, this.el), this.setClassNames([]), this.setHeight(""));
}, vi(e), this.el = e, this.renderRunner = new Qe(this.handleRenderRequest), new d3({
optionOverrides: o,
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() {
he(() => {
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, o) {
this.currentDataManager.resetOptions(e, o);
}
setClassNames(e) {
if (!C0(e, this.currentClassNames)) {
let { classList: o } = this.el;
for (let M of this.currentClassNames)
o.remove(M);
for (let M of e)
o.add(M);
this.currentClassNames = e;
}
}
setHeight(e) {
mn(this.el, "height", e);
}
}
var E3 = {
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"
}, w3 = {
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: "أي أحداث لعرض"
}, C3 = {
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: "أي أحداث لعرض"
}, D3 = {
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: "أي أحداث لعرض"
}, X3 = {
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: "أي أحداث لعرض"
}, k3 = {
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: "أي أحداث لعرض"
}, x3 = {
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: "أي أحداث لعرض"
}, _3 = {
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: "أي أحداث لعرض"
}, I3 = {
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(t) {
return "+ daha çox " + t;
},
noEventsText: "Göstərmək üçün hadisə yoxdur"
}, P3 = {
code: "bg",
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: "График"
},
allDayText: "Цял ден",
moreLinkText(t) {
return "+още " + t;
},
noEventsText: "Няма събития за показване"
}, H3 = {
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(t) {
return "+অন্যান্য " + t;
},
noEventsText: "কোনো ইভেন্ট নেই"
}, U3 = {
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(t) {
return "+ još " + t;
},
noEventsText: "Nema događaja za prikazivanje"
}, j3 = {
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: "Any",
month: "Mes",
week: "Setmana",
day: "Dia",
list: "Agenda"
},
weekText: "Set",
allDayText: "Tot el dia",
moreLinkText: "més",
noEventsText: "No hi ha esdeveniments per mostrar"
}, F3 = {
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(t) {
return "+další: " + t;
},
noEventsText: "Žádné akce k zobrazení"
}, G3 = {
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"
}, Y3 = {
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 Zt(t) {
return t === "Tag" || t === "Monat" ? "r" : t === "Jahr" ? "s" : "";
}
var V3 = {
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(t) {
return "+ weitere " + t;
},
noEventsText: "Keine Ereignisse anzuzeigen",
buttonHints: {
prev(t) {
return `Vorherige${Zt(t)} ${t}`;
},
next(t) {
return `Nächste${Zt(t)} ${t}`;
},
today(t) {
return t === "Tag" ? "Heute" : `Diese${Zt(t)} ${t}`;
}
},
viewHint(t) {
return t + (t === "Woche" ? "n" : t === "Monat" ? "s" : "es") + "ansicht";
},
navLinkHint: "Gehe zu $0",
moreLinkHint(t) {
return "Zeige " + (t === 1 ? "ein weiteres Ereignis" : t + " weitere Ereignisse");
},
closeHint: "Schließen",
timeHint: "Uhrzeit",
eventHint: "Ereignis"
};
function Jt(t) {
return t === "Tag" || t === "Monat" ? "r" : t === "Jahr" ? "s" : "";
}
var Q3 = {
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(t) {
return "+ weitere " + t;
},
noEventsText: "Keine Ereignisse anzuzeigen",
buttonHints: {
prev(t) {
return `Vorherige${Jt(t)} ${t}`;
},
next(t) {
return `Nächste${Jt(t)} ${t}`;
},
today(t) {
return t === "Tag" ? "Heute" : `Diese${Jt(t)} ${t}`;
}
},
viewHint(t) {
return t + (t === "Woche" ? "n" : t === "Monat" ? "s" : "es") + "ansicht";
},
navLinkHint: "Gehe zu $0",
moreLinkHint(t) {
return "Zeige " + (t === 1 ? "ein weiteres Ereignis" : t + " weitere Ereignisse");
},
closeHint: "Schließen",
timeHint: "Uhrzeit",
eventHint: "Ereignis"
}, K3 = {
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: "Δεν υπάρχουν γεγονότα προς εμφάνιση"
}, $3 = {
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(t) {
return `Show ${t} more event${t === 1 ? "" : "s"}`;
}
}, Z3 = {
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(t) {
return `Show ${t} more event${t === 1 ? "" : "s"}`;
}
}, J3 = {
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(t) {
return `Show ${t} more event${t === 1 ? "" : "s"}`;
}
}, el = {
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"
}, tl = {
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"
}, ol = {
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(t) {
return t === "Día" ? "Hoy" : (t === "Semana" ? "Esta" : "Este") + " " + t.toLocaleLowerCase();
}
},
viewHint(t) {
return "Vista " + (t === "Semana" ? "de la" : "del") + " " + t.toLocaleLowerCase();
},
weekText: "Sm",
weekTextLong: "Semana",
allDayText: "Todo el día",
moreLinkText: "más",
moreLinkHint(t) {
return `Mostrar ${t} eventos más`;
},
noEventsText: "No hay eventos para mostrar",
navLinkHint: "Ir al $0",
closeHint: "Cerrar",
timeHint: "La hora",
eventHint: "Evento"
}, Ml = {
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(t) {
return "+ veel " + t;
},
noEventsText: "Kuvamiseks puuduvad sündmused"
}, bl = {
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"
}, zl = {
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(t) {
return "بیش از " + t;
},
noEventsText: "هیچ رویدادی به نمایش"
}, nl = {
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"
}, pl = {
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"
}, rl = {
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"
}, cl = {
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"
}, il = {
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(t) {
return t === "Día" ? "Hoxe" : (t === "Semana" ? "Esta" : "Este") + " " + t.toLocaleLowerCase();
}
},
viewHint(t) {
return "Vista " + (t === "Semana" ? "da" : "do") + " " + t.toLocaleLowerCase();
},
weekText: "Sm",
weekTextLong: "Semana",
allDayText: "Todo o día",
moreLinkText: "máis",
moreLinkHint(t) {
return `Amosar ${t} eventos máis`;
},
noEventsText: "Non hai eventos para amosar",
navLinkHint: "Ir ao $0",
closeHint: "Pechar",
timeHint: "A hora",
eventHint: "Evento"
}, al = {
code: "he",
direction: "rtl",
buttonText: {
prev: "הקודם",
next: "הבא",
today: "היום",
year: "שנה",
month: "חודש",
week: "שבוע",
day: "יום",
list: "סדר יום"
},
allDayText: "כל היום",
moreLinkText: "נוספים",
noEventsText: "אין אירועים להצגה",
weekText: "שבוע"
}, sl = {
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(t) {
return "+अधिक " + t;
},
noEventsText: "कोई घटनाओं को प्रदर्शित करने के लिए"
}, Ol = {
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(t) {
return "+ još " + t;
},
noEventsText: "Nema događaja za prikaz"
}, ll = {
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"
}, dl = {
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(t) {
return "+ ևս " + t;
},
noEventsText: "Բացակայում է իրադարձությունը ցուցադրելու"
}, Al = {
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"
}, ul = {
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"
}, ql = {
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(t) {
return "+altri " + t;
},
noEventsText: "Non ci sono eventi da visualizzare"
}, fl = {
code: "ja",
buttonText: {
prev: "前",
next: "次",
today: "今日",
year: "年",
month: "月",
week: "週",
day: "日",
list: "予定リスト"
},
weekText: "週",
allDayText: "終日",
moreLinkText(t) {
return "他 " + t + " 件";
},
noEventsText: "表示する予定はありません"
}, Wl = {
code: "ka",
week: {
dow: 1,
doy: 7
},
buttonText: {
prev: "წინა",
next: "შემდეგი",
today: "დღეს",
year: "წელიწადი",
month: "თვე",
week: "კვირა",
day: "დღე",
list: "დღის წესრიგი"
},
weekText: "კვ",
allDayText: "მთელი დღე",
moreLinkText(t) {
return "+ კიდევ " + t;
},
noEventsText: "ღონისძიებები არ არის"
}, hl = {
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(t) {
return "+ тағы " + t;
},
noEventsText: "Көрсету үшін оқиғалар жоқ"
}, Rl = {
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: "គ្មានព្រឹត្តិការណ៍ត្រូវបង្ហាញ"
}, ml = {
code: "ko",
buttonText: {
prev: "이전달",
next: "다음달",
today: "오늘",
year: "년도",
month: "월",
week: "주",
day: "일",
list: "일정목록"
},
weekText: "주",
allDayText: "종일",
moreLinkText: "개",
noEventsText: "일정이 없습니다"
}, gl = {
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: "هیچ ڕووداوێك نیە"
}, Ll = {
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"
}, yl = {
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"
}, vl = {
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(t) {
return "+vēl " + t;
},
noEventsText: "Nav notikumu"
}, Nl = {
code: "mk",
buttonText: {
prev: "претходно",
next: "следно",
today: "Денес",
year: "година",
month: "Месец",
week: "Недела",
day: "Ден",
list: "График"
},
weekText: "Сед",
allDayText: "Цел ден",
moreLinkText(t) {
return "+повеќе " + t;
},
noEventsText: "Нема настани за прикажување"
}, Tl = {
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(t) {
return "masih ada " + t + " acara";
},
noEventsText: "Tiada peristiwa untuk dipaparkan"
}, Bl = {
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(t) {
return `Vis ${t} flere hendelse${t === 1 ? "" : "r"}`;
}
}, Sl = {
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: "देखाउनको लागि कुनै घटनाहरू छैनन्"
}, El = {
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: "Lijst"
},
allDayText: "Hele dag",
moreLinkText: "extra",
noEventsText: "Geen evenementen om te laten zien"
}, wl = {
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"
}, Cl = {
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"
}, Dl = {
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(t) {
return t === "Dia" ? "Hoje" : (t === "Semana" ? "Esta" : "Este") + " " + t.toLocaleLowerCase();
}
},
viewHint(t) {
return "Visualizar " + (t === "Semana" ? "a" : "o") + " " + t.toLocaleLowerCase();
},
weekText: "Sm",
weekTextLong: "Semana",
allDayText: "dia inteiro",
moreLinkText(t) {
return "mais +" + t;
},
moreLinkHint(t) {
return `Mostrar mais ${t} eventos`;
},
noEventsText: "Não há eventos para mostrar",
navLinkHint: "Ir para $0",
closeHint: "Fechar",
timeHint: "A hora",
eventHint: "Evento"
}, Xl = {
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"
}, kl = {
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(t) {
return "+alte " + t;
},
noEventsText: "Nu există evenimente de afișat"
}, xl = {
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(t) {
return "+ ещё " + t;
},
noEventsText: "Нет событий для отображения"
}, _l = {
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: "මුකුත් නැත"
}, Il = {
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(t) {
return "+ďalšie: " + t;
},
noEventsText: "Žiadne akcie na zobrazenie"
}, Pl = {
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"
}, Hl = {
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"
}, Ul = {
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(t) {
return "+më tepër " + t;
},
noEventsText: "Nuk ka evente për të shfaqur"
}, jl = {
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(t) {
return "+ још " + t;
},
noEventsText: "Нема догађаја за приказ"
}, Fl = {
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(t) {
return "+ još " + t;
},
noEventsText: "Nеma događaja za prikaz"
}, Gl = {
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(t) {
return `Föregående ${t.toLocaleLowerCase()}`;
},
next(t) {
return `Nästa ${t.toLocaleLowerCase()}`;
},
today(t) {
return (t === "Program" ? "Detta" : "Denna") + " " + t.toLocaleLowerCase();
}
},
viewHint: "$0 vy",
navLinkHint: "Gå till $0",
moreLinkHint(t) {
return `Visa ytterligare ${t} händelse${t === 1 ? "" : "r"}`;
},
weekText: "v.",
weekTextLong: "Vecka",
allDayText: "Heldag",
moreLinkText: "till",
noEventsText: "Inga händelser att visa",
closeHint: "Stäng",
timeHint: "Klockan",
eventHint: "Händelse"
}, Yl = {
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(t) {
return "+ மேலும் " + t;
},
noEventsText: "காண்பிக்க நிகழ்வுகள் இல்லை"
}, Vl = {
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: "ไม่มีกิจกรรมที่จะแสดง"
}, Ql = {
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"
}, Kl = {
code: "ug",
buttonText: {
prev: "ئالدىنقى",
next: "كېيىنكى",
today: "بۈگۈن",
year: "يىل",
month: "ئاي",
week: "ھەپتە",
day: "كۈن",
list: "كۈنتەرتىپ"
},
allDayText: "پۈتۈن كۈن"
}, $l = {
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(t) {
return "+ще " + t + "...";
},
noEventsText: "Немає подій для відображення"
}, Zl = {
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(t) {
return "+ яна " + t;
},
noEventsText: "Кўрсатиш учун воқеалар йўқ"
}, Jl = {
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(t) {
return "+ yana " + t;
},
noEventsText: "Ko'rsatish uchun voqealar yo'q"
}, ed = {
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(t) {
return "+ thêm " + t;
},
noEventsText: "Không có sự kiện để hiển thị"
}, td = {
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(t) {
return "另外 " + t + " 个";
},
noEventsText: "没有事件显示"
}, od = {
code: "zh-tw",
buttonText: {
prev: "上個",
next: "下個",
today: "今天",
year: "年",
month: "月",
week: "週",
day: "天",
list: "活動列表"
},
weekText: "週",
allDayText: "整天",
moreLinkText: "顯示更多",
noEventsText: "沒有任何活動"
}, Md = [
E3,
w3,
C3,
D3,
X3,
k3,
x3,
_3,
I3,
P3,
H3,
U3,
j3,
F3,
G3,
Y3,
V3,
Q3,
K3,
$3,
Z3,
J3,
el,
tl,
ol,
Ml,
bl,
zl,
nl,
pl,
rl,
cl,
il,
al,
sl,
Ol,
ll,
dl,
Al,
ul,
ql,
fl,
Wl,
hl,
Rl,
ml,
gl,
Ll,
yl,
vl,
Nl,
Tl,
Bl,
Sl,
El,
wl,
Cl,
Dl,
Xl,
kl,
xl,
_l,
Il,
Pl,
Hl,
Ul,
jl,
Fl,
Gl,
Yl,
Vl,
Ql,
Kl,
$l,
Zl,
Jl,
ed,
td,
od
];
P0.touchMouseIgnoreWait = 500;
let Lo = 0, j2 = 0, yo = !1;
class Hp {
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 = (o) => {
if (!this.shouldIgnoreMouse() && bd(o) && this.tryStart(o)) {
let M = this.createEventFromMouse(o, !0);
this.emitter.trigger("pointerdown", M), this.initScrollWatch(M), this.shouldIgnoreMove || document.addEventListener("mousemove", this.handleMouseMove), document.addEventListener("mouseup", this.handleMouseUp);
}
}, this.handleMouseMove = (o) => {
let M = this.createEventFromMouse(o);
this.recordCoords(M), this.emitter.trigger("pointermove", M);
}, this.handleMouseUp = (o) => {
document.removeEventListener("mousemove", this.handleMouseMove), document.removeEventListener("mouseup", this.handleMouseUp), this.emitter.trigger("pointerup", this.createEventFromMouse(o)), this.cleanup();
}, this.handleTouchStart = (o) => {
if (this.tryStart(o)) {
this.isTouchDragging = !0;
let M = this.createEventFromTouch(o, !0);
this.emitter.trigger("pointerdown", M), this.initScrollWatch(M);
let b = o.target;
this.shouldIgnoreMove || b.addEventListener("touchmove", this.handleTouchMove), b.addEventListener("touchend", this.handleTouchEnd), b.addEventListener("touchcancel", this.handleTouchEnd), window.addEventListener("scroll", this.handleTouchScroll, !0);
}
}, this.handleTouchMove = (o) => {
let M = this.createEventFromTouch(o);
this.recordCoords(M), this.emitter.trigger("pointermove", M);
}, this.handleTouchEnd = (o) => {
if (this.isDragging) {
let M = o.target;
M.removeEventListener("touchmove", this.handleTouchMove), M.removeEventListener("touchend", this.handleTouchEnd), M.removeEventListener("touchcancel", this.handleTouchEnd), window.removeEventListener("scroll", this.handleTouchScroll, !0), this.emitter.trigger("pointerup", this.createEventFromTouch(o)), this.cleanup(), this.isTouchDragging = !1, zd();
}
}, this.handleTouchScroll = () => {
this.wasTouchScroll = !0;
}, this.handleScroll = (o) => {
if (!this.shouldIgnoreMove) {
let M = window.scrollX - this.prevScrollX + this.prevPageX, b = window.scrollY - this.prevScrollY + this.prevPageY;
this.emitter.trigger("pointermove", {
origEvent: o,
isTouch: this.isTouchDragging,
subjectEl: this.subjectEl,
pageX: M,
pageY: b,
deltaX: M - this.origPageX,
deltaY: b - this.origPageY
});
}
}, this.containerEl = e, this.emitter = new n2(), e.addEventListener("mousedown", this.handleMouseDown), e.addEventListener("touchstart", this.handleTouchStart, { passive: !0 }), nd();
}
destroy() {
this.containerEl.removeEventListener("mousedown", this.handleMouseDown), this.containerEl.removeEventListener("touchstart", this.handleTouchStart, { passive: !0 }), pd();
}
tryStart(e) {
let o = this.querySubjectEl(e), M = e.target;
return o && (!this.handleSelector || q0(M, this.handleSelector)) ? (this.subjectEl = o, this.isDragging = !0, this.wasTouchScroll = !1, !0) : !1;
}
cleanup() {
yo = !1, this.isDragging = !1, this.subjectEl = null, this.destroyScrollWatch();
}
querySubjectEl(e) {
return this.selector ? q0(e.target, this.selector) : this.containerEl;
}
shouldIgnoreMouse() {
return Lo || this.isTouchDragging;
}
// can be called by user of this class, to cancel touch-based scrolling for the current drag
cancelTouchScroll() {
this.isDragging && (yo = !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.scrollX, this.prevScrollY = window.scrollY);
}
destroyScrollWatch() {
this.shouldWatchScroll && window.removeEventListener("scroll", this.handleScroll, !0);
}
// Event Normalization
// ----------------------------------------------------------------------------------------------------
createEventFromMouse(e, o) {
let M = 0, b = 0;
return o ? (this.origPageX = e.pageX, this.origPageY = e.pageY) : (M = e.pageX - this.origPageX, b = e.pageY - this.origPageY), {
origEvent: e,
isTouch: !1,
subjectEl: this.subjectEl,
pageX: e.pageX,
pageY: e.pageY,
deltaX: M,
deltaY: b
};
}
createEventFromTouch(e, o) {
let M = e.touches, b, z, n = 0, p = 0;
return M && M.length ? (b = M[0].pageX, z = M[0].pageY) : (b = e.pageX, z = e.pageY), o ? (this.origPageX = b, this.origPageY = z) : (n = b - this.origPageX, p = z - this.origPageY), {
origEvent: e,
isTouch: !0,
subjectEl: this.subjectEl,
pageX: b,
pageY: z,
deltaX: n,
deltaY: p
};
}
}
function bd(t) {
return t.button === 0 && !t.ctrlKey;
}
function zd() {
Lo += 1, setTimeout(() => {
Lo -= 1;
}, P0.touchMouseIgnoreWait);
}
function nd() {
j2 += 1, j2 === 1 && window.addEventListener("touchmove", Up, { passive: !1 });
}
function pd() {
j2 -= 1, j2 || window.removeEventListener("touchmove", Up, { passive: !1 });
}
function Up(t) {
yo && t.preventDefault();
}
class rd {
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, o, M) {
this.sourceEl = e, this.sourceElRect = this.sourceEl.getBoundingClientRect(), this.origScreenX = o - window.scrollX, this.origScreenY = M - window.scrollY, this.deltaX = 0, this.deltaY = 0, this.updateElPosition();
}
handleMove(e, o) {
this.deltaX = e - window.scrollX - this.origScreenX, this.deltaY = o - window.scrollY - 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, o) {
let M = () => {
this.cleanup(), o();
};
e && this.mirrorEl && this.isVisible && this.revertDuration && // if 0, transition won't work
(this.deltaX || this.deltaY) ? this.doRevertAnimation(M, this.revertDuration) : setTimeout(M, 0);
}
doRevertAnimation(e, o) {
let M = this.mirrorEl, b = this.sourceEl.getBoundingClientRect();
M.style.transition = "top " + o + "ms,left " + o + "ms", le(M, {
left: b.left,
top: b.top
}), Xi(M, () => {
M.style.transition = "", e();
});
}
cleanup() {
this.mirrorEl && (bt(this.mirrorEl), this.mirrorEl = null), this.sourceEl = null;
}
updateElPosition() {
this.sourceEl && this.isVisible && le(this.getMirrorEl(), {
left: this.sourceElRect.left + this.deltaX,
top: this.sourceElRect.top + this.deltaY
});
}
getMirrorEl() {
let e = this.sourceElRect, o = this.mirrorEl;
return o || (o = this.mirrorEl = this.sourceEl.cloneNode(!0), o.style.userSelect = "none", o.style.webkitUserSelect = "none", o.style.pointerEvents = "none", o.classList.add("fc-event-dragging"), le(o, {
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(o)), o;
}
}
class jp extends sM {
constructor(e, o) {
super(), this.handleScroll = () => {
this.scrollTop = this.scrollController.getScrollTop(), this.scrollLeft = this.scrollController.getScrollLeft(), this.handleScrollChange();
}, this.scrollController = e, this.doesListening = o, 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 Fp extends jp {
constructor(e, o) {
super(new Gs(e), o);
}
getEventTarget() {
return this.scrollController.el;
}
computeClientRect() {
return cp(this.scrollController.el);
}
}
class cd extends jp {
constructor(e) {
super(new Ys(), 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 iz = typeof performance == "function" ? performance.now : Date.now;
class id {
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.scrollX, this.pointerScreenY + window.scrollY);
if (e) {
let o = iz();
this.handleSide(e, (o - this.msSinceRequest) / 1e3), this.requestAnimation(o);
} else
this.isAnimating = !1;
}
};
}
start(e, o, M) {
this.isEnabled && (this.scrollCaches = this.buildCaches(M), this.pointerScreenX = null, this.pointerScreenY = null, this.everMovedUp = !1, this.everMovedDown = !1, this.everMovedLeft = !1, this.everMovedRight = !1, this.handleMove(e, o));
}
handleMove(e, o) {
if (this.isEnabled) {
let M = e - window.scrollX, b = o - window.scrollY, z = this.pointerScreenY === null ? 0 : b - this.pointerScreenY, n = this.pointerScreenX === null ? 0 : M - this.pointerScreenX;
z < 0 ? this.everMovedUp = !0 : z > 0 && (this.everMovedDown = !0), n < 0 ? this.everMovedLeft = !0 : n > 0 && (this.everMovedRight = !0), this.pointerScreenX = M, this.pointerScreenY = b, this.isAnimating || (this.isAnimating = !0, this.requestAnimation(iz()));
}
}
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, o) {
let { scrollCache: M } = e, { edgeThreshold: b } = this, z = b - e.distance, n = (
// the closer to the edge, the faster we scroll
z * z / (b * b) * // quadratic
this.maxVelocity * o
), p = 1;
switch (e.name) {
case "left":
p = -1;
// falls through
case "right":
M.setScrollLeft(M.getScrollLeft() + n * p);
break;
case "top":
p = -1;
// falls through
case "bottom":
M.setScrollTop(M.getScrollTop() + n * p);
break;
}
}
// left/top are relative to document topleft
computeBestEdge(e, o) {
let { edgeThreshold: M } = this, b = null, z = this.scrollCaches || [];
for (let n of z) {
let p = n.clientRect, r = e - p.left, c = p.right - e, i = o - p.top, a = p.bottom - o;
r >= 0 && c >= 0 && i >= 0 && a >= 0 && (i <= M && this.everMovedUp && n.canScrollUp() && (!b || b.distance > i) && (b = { scrollCache: n, name: "top", distance: i }), a <= M && this.everMovedDown && n.canScrollDown() && (!b || b.distance > a) && (b = { scrollCache: n, name: "bottom", distance: a }), r <= M && this.everMovedLeft && n.canScrollLeft() && (!b || b.distance > r) && (b = { scrollCache: n, name: "left", distance: r }), c <= M && this.everMovedRight && n.canScrollRight() && (!b || b.distance > c) && (b = { scrollCache: n, name: "right", distance: c }));
}
return b;
}
buildCaches(e) {
return this.queryScrollEls(e).map((o) => o === window ? new cd(!1) : new Fp(o, !1));
}
queryScrollEls(e) {
let o = [];
for (let M of this.scrollQuery)
typeof M == "object" ? o.push(M) : o.push(...Array.prototype.slice.call(e.getRootNode().querySelectorAll(M)));
return o;
}
}
class r2 extends Ks {
constructor(e, o) {
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 = (b) => {
this.isDragging || (this.isInteracting = !0, this.isDelayEnded = !1, this.isDistanceSurpassed = !1, ki(document.body), _i(document.body), b.isTouch || b.origEvent.preventDefault(), this.emitter.trigger("pointerdown", b), this.isInteracting && // not destroyed via pointerdown handler
!this.pointer.shouldIgnoreMove && (this.mirror.setIsVisible(!1), this.mirror.start(b.subjectEl, b.pageX, b.pageY), this.startDelay(b), this.minDistance || this.handleDistanceSurpassed(b)));
}, this.onPointerMove = (b) => {
if (this.isInteracting) {
if (this.emitter.trigger("pointermove", b), !this.isDistanceSurpassed) {
let z = this.minDistance, n, { deltaX: p, deltaY: r } = b;
n = p * p + r * r, n >= z * z && this.handleDistanceSurpassed(b);
}
this.isDragging && (b.origEvent.type !== "scroll" && (this.mirror.handleMove(b.pageX, b.pageY), this.autoScroller.handleMove(b.pageX, b.pageY)), this.emitter.trigger("dragmove", b));
}
}, this.onPointerUp = (b) => {
this.isInteracting && (this.isInteracting = !1, xi(document.body), Ii(document.body), this.emitter.trigger("pointerup", b), this.isDragging && (this.autoScroller.stop(), this.tryStopDrag(b)), this.delayTimeoutId && (clearTimeout(this.delayTimeoutId), this.delayTimeoutId = null));
};
let M = this.pointer = new Hp(e);
M.emitter.on("pointerdown", this.onPointerDown), M.emitter.on("pointermove", this.onPointerMove), M.emitter.on("pointerup", this.onPointerUp), o && (M.selector = o), this.mirror = new rd(), this.autoScroller = new id();
}
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 ad {
constructor(e) {
this.el = e, this.origRect = aM(e), this.scrollCaches = ip(e).map((o) => new Fp(o, !0));
}
destroy() {
for (let e of this.scrollCaches)
e.destroy();
}
computeLeft() {
let e = this.origRect.left;
for (let o of this.scrollCaches)
e += o.origScrollLeft - o.getScrollLeft();
return e;
}
computeTop() {
let e = this.origRect.top;
for (let o of this.scrollCaches)
e += o.origScrollTop - o.getScrollTop();
return e;
}
isWithinClipping(e, o) {
let M = { left: e, top: o };
for (let b of this.scrollCaches)
if (!sd(b.getEventTarget()) && !Xs(M, b.clientRect))
return !1;
return !0;
}
}
function sd(t) {
let e = t.tagName;
return e === "HTML" || e === "BODY";
}
class qt {
constructor(e, o) {
this.useSubjectCenter = !1, this.requireInitial = !0, this.disablePointCheck = !1, this.initialHit = null, this.movingHit = null, this.finalHit = null, this.handlePointerDown = (M) => {
let { dragging: b } = this;
this.initialHit = null, this.movingHit = null, this.finalHit = null, this.prepareHits(), this.processFirstCoord(M), this.initialHit || !this.requireInitial ? (b.setIgnoreMove(!1), this.emitter.trigger("pointerdown", M)) : b.setIgnoreMove(!0);
}, this.handleDragStart = (M) => {
this.emitter.trigger("dragstart", M), this.handleMove(M, !0);
}, this.handleDragMove = (M) => {
this.emitter.trigger("dragmove", M), this.handleMove(M);
}, this.handlePointerUp = (M) => {
this.releaseHits(), this.emitter.trigger("pointerup", M);
}, this.handleDragEnd = (M) => {
this.movingHit && this.emitter.trigger("hitupdate", null, !0, M), this.finalHit = this.movingHit, this.movingHit = null, this.emitter.trigger("dragend", M);
}, this.droppableStore = o, 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 n2();
}
// sets initialHit
// sets coordAdjust
processFirstCoord(e) {
let o = { left: e.pageX, top: e.pageY }, M = o, b = e.subjectEl, z;
b instanceof HTMLElement && (z = aM(b), M = ks(M, z));
let n = this.initialHit = this.queryHitForOffset(M.left, M.top);
if (n) {
if (this.useSubjectCenter && z) {
let p = bp(z, n.rect);
p && (M = xs(p));
}
this.coordAdjust = _s(M, o);
} else
this.coordAdjust = { left: 0, top: 0 };
}
handleMove(e, o) {
let M = this.queryHitForOffset(e.pageX + this.coordAdjust.left, e.pageY + this.coordAdjust.top);
(o || !ft(this.movingHit, M)) && (this.movingHit = M, this.emitter.trigger("hitupdate", M, !1, e));
}
prepareHits() {
this.offsetTrackers = d0(this.droppableStore, (e) => (e.component.prepareHits(), new ad(e.el)));
}
releaseHits() {
let { offsetTrackers: e } = this;
for (let o in e)
e[o].destroy();
this.offsetTrackers = {};
}
queryHitForOffset(e, o) {
let { droppableStore: M, offsetTrackers: b } = this, z = null;
for (let n in M) {
let p = M[n].component, r = b[n];
if (r && // wasn't destroyed mid-drag
r.isWithinClipping(e, o)) {
let c = r.computeLeft(), i = r.computeTop(), a = e - c, s = o - i, { origRect: l } = r, d = l.right - l.left, A = l.bottom - l.top;
if (
// must be within the element's bounds
a >= 0 && a < d && s >= 0 && s < A
) {
let u = p.queryHit(a, s, d, A);
u && // make sure the hit is within activeRange, meaning it's not a dead cell
ct(u.dateProfile.activeRange, u.dateSpan.range) && // Ensure the component we are querying for the hit is accessibly my the pointer
// Prevents obscured calendars (ex: under a modal dialog) from accepting hit
// https://github.com/fullcalendar/fullcalendar/issues/5026
(this.disablePointCheck || r.el.contains(r.el.getRootNode().elementFromPoint(
// add-back origins to get coordinate relative to top-left of window viewport
a + c - window.scrollX,
s + i - window.scrollY
))) && (!z || u.layer > z.layer) && (u.componentId = n, u.context = p.context, u.rect.left += c, u.rect.right += c, u.rect.top += i, u.rect.bottom += i, z = u);
}
}
}
return z;
}
}
function ft(t, e) {
return !t && !e ? !0 : !!t != !!e ? !1 : Ns(t.dateSpan, e.dateSpan);
}
function Gp(t, e) {
let o = {};
for (let M of e.pluginHooks.datePointTransforms)
Object.assign(o, M(t, e));
return Object.assign(o, Od(t, e.dateEnv)), o;
}
function Od(t, e) {
return {
date: e.toDate(t.range.start),
dateStr: e.formatIso(t.range.start, { omitTime: t.allDay }),
allDay: t.allDay
};
}
class ld extends ve {
constructor(e) {
super(e), this.handlePointerDown = (M) => {
let { dragging: b } = this, z = M.origEvent.target;
b.setIgnoreMove(!this.component.isValidDateDownEl(z));
}, this.handleDragEnd = (M) => {
let { component: b } = this, { pointer: z } = this.dragging;
if (!z.wasTouchScroll) {
let { initialHit: n, finalHit: p } = this.hitDragging;
if (n && p && ft(n, p)) {
let { context: r } = b, c = Object.assign(Object.assign({}, Gp(n.dateSpan, r)), { dayEl: n.dayEl, jsEvent: M.origEvent, view: r.viewApi || r.calendarApi.view });
r.emitter.trigger("dateClick", c);
}
}
}, this.dragging = new r2(e.el), this.dragging.autoScroller.isEnabled = !1;
let o = this.hitDragging = new qt(this.dragging, cM(e));
o.emitter.on("pointerdown", this.handlePointerDown), o.emitter.on("dragend", this.handleDragEnd);
}
destroy() {
this.dragging.destroy();
}
}
class dd extends ve {
constructor(e) {
super(e), this.dragSelection = null, this.handlePointerDown = (n) => {
let { component: p, dragging: r } = this, { options: c } = p.context, i = c.selectable && p.isValidDateDownEl(n.origEvent.target);
r.setIgnoreMove(!i), r.delay = n.isTouch ? Ad(p) : null;
}, this.handleDragStart = (n) => {
this.component.context.calendarApi.unselect(n);
}, this.handleHitUpdate = (n, p) => {
let { context: r } = this.component, c = null, i = !1;
if (n) {
let a = this.hitDragging.initialHit;
n.componentId === a.componentId && this.isHitComboAllowed && !this.isHitComboAllowed(a, n) || (c = ud(a, n, r.pluginHooks.dateSelectionTransformers)), (!c || !Js(c, n.dateProfile, r)) && (i = !0, c = null);
}
c ? r.dispatch({ type: "SELECT_DATES", selection: c }) : p || r.dispatch({ type: "UNSELECT_DATES" }), i ? Go() : Yo(), p || (this.dragSelection = c);
}, this.handlePointerUp = (n) => {
this.dragSelection && ($n(this.dragSelection, n, this.component.context), this.dragSelection = null);
};
let { component: o } = e, { options: M } = o.context, b = this.dragging = new r2(e.el);
b.touchScrollAllowed = !1, b.minDistance = M.selectMinDistance || 0, b.autoScroller.isEnabled = M.dragScroll;
let z = this.hitDragging = new qt(this.dragging, cM(e));
z.emitter.on("pointerdown", this.handlePointerDown), z.emitter.on("dragstart", this.handleDragStart), z.emitter.on("hitupdate", this.handleHitUpdate), z.emitter.on("pointerup", this.handlePointerUp);
}
destroy() {
this.dragging.destroy();
}
}
function Ad(t) {
let { options: e } = t.context, o = e.selectLongPressDelay;
return o == null && (o = e.longPressDelay), o;
}
function ud(t, e, o) {
let M = t.dateSpan, b = e.dateSpan, z = [
M.range.start,
M.range.end,
b.range.start,
b.range.end
];
z.sort(Hi);
let n = {};
for (let p of o) {
let r = p(t, e);
if (r === !1)
return null;
r && Object.assign(n, r);
}
return n.range = { start: z[0], end: z[3] }, n.allDay = M.allDay, n;
}
class c2 extends ve {
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 = (n) => {
let p = n.origEvent.target, { component: r, dragging: c } = this, { mirror: i } = c, { options: a } = r.context, s = r.context;
this.subjectEl = n.subjectEl;
let l = this.subjectSeg = Re(n.subjectEl), A = (this.eventRange = l.eventRange).instance.instanceId;
this.relevantEvents = oM(s.getCurrentData().eventStore, A), c.minDistance = n.isTouch ? 0 : a.eventDragMinDistance, c.delay = // only do a touch delay if touch and this event hasn't been selected yet
n.isTouch && A !== r.props.eventSelection ? fd(r) : null, a.fixedMirrorParent ? i.parentNode = a.fixedMirrorParent : i.parentNode = q0(p, ".fc"), i.revertDuration = a.dragRevertDuration;
let u = r.isValidSegDownEl(p) && !q0(p, ".fc-event-resizer");
c.setIgnoreMove(!u), this.isDragging = u && n.subjectEl.classList.contains("fc-event-draggable");
}, this.handleDragStart = (n) => {
let p = this.component.context, r = this.eventRange, c = r.instance.instanceId;
n.isTouch ? c !== this.component.props.eventSelection && p.dispatch({ type: "SELECT_EVENT", eventInstanceId: c }) : p.dispatch({ type: "UNSELECT_EVENT" }), this.isDragging && (p.calendarApi.unselect(n), p.emitter.trigger("eventDragStart", {
el: this.subjectEl,
event: new M0(p, r.def, r.instance),
jsEvent: n.origEvent,
view: p.viewApi
}));
}, this.handleHitUpdate = (n, p) => {
if (!this.isDragging)
return;
let r = this.relevantEvents, c = this.hitDragging.initialHit, i = this.component.context, a = null, s = null, l = null, d = !1, A = {
affectedEvents: r,
mutatedEvents: w0(),
isEvent: !0
};
if (n) {
a = n.context;
let u = a.options;
i === a || u.editable && u.droppable ? (s = qd(c, n, this.eventRange.instance.range.start, a.getCurrentData().pluginHooks.eventDragMutationMassagers), s && (l = zM(r, a.getCurrentData().eventUiBases, s, a), A.mutatedEvents = l, fp(A, n.dateProfile, a) || (d = !0, s = null, l = null, A.mutatedEvents = w0()))) : a = null;
}
this.displayDrag(a, A), d ? Go() : Yo(), p || (i === a && // TODO: write test for this
ft(c, n) && (s = null), this.dragging.setMirrorNeedsRevert(!s), this.dragging.setMirrorIsVisible(!n || !this.subjectEl.getRootNode().querySelector(".fc-event-mirror")), this.receivingContext = a, this.validMutation = s, this.mutatedRelevantEvents = l);
}, this.handlePointerUp = () => {
this.isDragging || this.cleanup();
}, this.handleDragEnd = (n) => {
if (this.isDragging) {
let p = this.component.context, r = p.viewApi, { receivingContext: c, validMutation: i } = this, a = this.eventRange.def, s = this.eventRange.instance, l = new M0(p, a, s), d = this.relevantEvents, A = this.mutatedRelevantEvents, { finalHit: u } = this.hitDragging;
if (this.clearDrag(), p.emitter.trigger("eventDragStop", {
el: this.subjectEl,
event: l,
jsEvent: n.origEvent,
view: r
}), i) {
if (c === p) {
let W = new M0(p, A.defs[a.defId], s ? A.instances[s.instanceId] : null);
p.dispatch({
type: "MERGE_EVENTS",
eventStore: A
});
let h = {
oldEvent: l,
event: W,
relatedEvents: Q1(A, p, s),
revert() {
p.dispatch({
type: "MERGE_EVENTS",
eventStore: d
// the pre-change data
});
}
}, y = {};
for (let S of p.getCurrentData().pluginHooks.eventDropTransformers)
Object.assign(y, S(i, p));
p.emitter.trigger("eventDrop", Object.assign(Object.assign(Object.assign({}, h), y), { el: n.subjectEl, delta: i.datesDelta, jsEvent: n.origEvent, view: r })), p.emitter.trigger("eventChange", h);
} else if (c) {
let W = {
event: l,
relatedEvents: Q1(d, p, s),
revert() {
p.dispatch({
type: "MERGE_EVENTS",
eventStore: d
});
}
};
p.emitter.trigger("eventLeave", Object.assign(Object.assign({}, W), { draggedEl: n.subjectEl, view: r })), p.dispatch({
type: "REMOVE_EVENTS",
eventStore: d
}), p.emitter.trigger("eventRemove", W);
let h = A.defs[a.defId], y = A.instances[s.instanceId], S = new M0(c, h, y);
c.dispatch({
type: "MERGE_EVENTS",
eventStore: A
});
let _ = {
event: S,
relatedEvents: Q1(A, c, y),
revert() {
c.dispatch({
type: "REMOVE_EVENTS",
eventStore: A
});
}
};
c.emitter.trigger("eventAdd", _), n.isTouch && c.dispatch({
type: "SELECT_EVENT",
eventInstanceId: s.instanceId
}), c.emitter.trigger("drop", Object.assign(Object.assign({}, Gp(u.dateSpan, c)), { draggedEl: n.subjectEl, jsEvent: n.origEvent, view: u.context.viewApi })), c.emitter.trigger("eventReceive", Object.assign(Object.assign({}, _), { draggedEl: n.subjectEl, view: u.context.viewApi }));
}
} else
p.emitter.trigger("_noEventDrop");
}
this.cleanup();
};
let { component: o } = this, { options: M } = o.context, b = this.dragging = new r2(e.el);
b.pointer.selector = c2.SELECTOR, b.touchScrollAllowed = !1, b.autoScroller.isEnabled = M.dragScroll;
let z = this.hitDragging = new qt(this.dragging, ho);
z.useSubjectCenter = e.useEventCenter, z.emitter.on("pointerdown", this.handlePointerDown), z.emitter.on("dragstart", this.handleDragStart), z.emitter.on("hitupdate", this.handleHitUpdate), z.emitter.on("pointerup", this.handlePointerUp), z.emitter.on("dragend", this.handleDragEnd);
}
destroy() {
this.dragging.destroy();
}
// render a drag state on the next receivingCalendar
displayDrag(e, o) {
let M = this.component.context, b = this.receivingContext;
b && b !== e && (b === M ? b.dispatch({
type: "SET_EVENT_DRAG",
state: {
affectedEvents: o.affectedEvents,
mutatedEvents: w0(),
isEvent: !0
}
}) : b.dispatch({ type: "UNSET_EVENT_DRAG" })), e && e.dispatch({ type: "SET_EVENT_DRAG", state: o });
}
clearDrag() {
let e = this.component.context, { receivingContext: o } = this;
o && o.dispatch({ type: "UNSET_EVENT_DRAG" }), e !== o && 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;
}
}
c2.SELECTOR = ".fc-event-draggable, .fc-event-resizable";
function qd(t, e, o, M) {
let b = t.dateSpan, z = e.dateSpan, n = b.range.start, p = z.range.start, r = {};
b.allDay !== z.allDay && (r.allDay = z.allDay, r.hasEnd = e.context.options.allDayMaintainDuration, z.allDay ? n = J(o) : n = o);
let c = ie(n, p, t.context.dateEnv, t.componentId === e.componentId ? t.largeUnit : null);
c.milliseconds && (r.allDay = !1);
let i = {
datesDelta: c,
standardProps: r
};
for (let a of M)
a(i, t, e);
return i;
}
function fd(t) {
let { options: e } = t.context, o = e.eventLongPressDelay;
return o == null && (o = e.longPressDelay), o;
}
class Wd extends ve {
constructor(e) {
super(e), this.draggingSegEl = null, this.draggingSeg = null, this.eventRange = null, this.relevantEvents = null, this.validMutation = null, this.mutatedRelevantEvents = null, this.handlePointerDown = (z) => {
let { component: n } = this, p = this.querySegEl(z), r = Re(p), c = this.eventRange = r.eventRange;
this.dragging.minDistance = n.context.options.eventDragMinDistance, this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(z.origEvent.target) || z.isTouch && this.component.props.eventSelection !== c.instance.instanceId);
}, this.handleDragStart = (z) => {
let { context: n } = this.component, p = this.eventRange;
this.relevantEvents = oM(n.getCurrentData().eventStore, this.eventRange.instance.instanceId);
let r = this.querySegEl(z);
this.draggingSegEl = r, this.draggingSeg = Re(r), n.calendarApi.unselect(), n.emitter.trigger("eventResizeStart", {
el: r,
event: new M0(n, p.def, p.instance),
jsEvent: z.origEvent,
view: n.viewApi
});
}, this.handleHitUpdate = (z, n, p) => {
let { context: r } = this.component, c = this.relevantEvents, i = this.hitDragging.initialHit, a = this.eventRange.instance, s = null, l = null, d = !1, A = {
affectedEvents: c,
mutatedEvents: w0(),
isEvent: !0
};
z && (z.componentId === i.componentId && this.isHitComboAllowed && !this.isHitComboAllowed(i, z) || (s = hd(i, z, p.subjectEl.classList.contains("fc-event-resizer-start"), a.range))), s && (l = zM(c, r.getCurrentData().eventUiBases, s, r), A.mutatedEvents = l, fp(A, z.dateProfile, r) || (d = !0, s = null, l = null, A.mutatedEvents = null)), l ? r.dispatch({
type: "SET_EVENT_RESIZE",
state: A
}) : r.dispatch({ type: "UNSET_EVENT_RESIZE" }), d ? Go() : Yo(), n || (s && ft(i, z) && (s = null), this.validMutation = s, this.mutatedRelevantEvents = l);
}, this.handleDragEnd = (z) => {
let { context: n } = this.component, p = this.eventRange.def, r = this.eventRange.instance, c = new M0(n, p, r), i = this.relevantEvents, a = this.mutatedRelevantEvents;
if (n.emitter.trigger("eventResizeStop", {
el: this.draggingSegEl,
event: c,
jsEvent: z.origEvent,
view: n.viewApi
}), this.validMutation) {
let s = new M0(n, a.defs[p.defId], r ? a.instances[r.instanceId] : null);
n.dispatch({
type: "MERGE_EVENTS",
eventStore: a
});
let l = {
oldEvent: c,
event: s,
relatedEvents: Q1(a, n, r),
revert() {
n.dispatch({
type: "MERGE_EVENTS",
eventStore: i
// the pre-change events
});
}
};
n.emitter.trigger("eventResize", Object.assign(Object.assign({}, l), { el: this.draggingSegEl, startDelta: this.validMutation.startDelta || P(0), endDelta: this.validMutation.endDelta || P(0), jsEvent: z.origEvent, view: n.viewApi })), n.emitter.trigger("eventChange", l);
} else
n.emitter.trigger("_noEventResize");
this.draggingSeg = null, this.relevantEvents = null, this.validMutation = null;
};
let { component: o } = e, M = this.dragging = new r2(e.el);
M.pointer.selector = ".fc-event-resizer", M.touchScrollAllowed = !1, M.autoScroller.isEnabled = o.context.options.dragScroll;
let b = this.hitDragging = new qt(this.dragging, cM(e));
b.emitter.on("pointerdown", this.handlePointerDown), b.emitter.on("dragstart", this.handleDragStart), b.emitter.on("hitupdate", this.handleHitUpdate), b.emitter.on("dragend", this.handleDragEnd);
}
destroy() {
this.dragging.destroy();
}
querySegEl(e) {
return q0(e.subjectEl, ".fc-event");
}
}
function hd(t, e, o, M) {
let b = t.context.dateEnv, z = t.dateSpan.range.start, n = e.dateSpan.range.start, p = ie(z, n, b, t.largeUnit);
if (o) {
if (b.add(M.start, p) < M.end)
return { startDelta: p };
} else if (b.add(M.end, p) > M.start)
return { endDelta: p };
return null;
}
class Rd {
constructor(e) {
this.context = e, this.isRecentPointerDateSelect = !1, this.matchesCancel = !1, this.matchesEvent = !1, this.onSelect = (M) => {
M.jsEvent && (this.isRecentPointerDateSelect = !0);
}, this.onDocumentPointerDown = (M) => {
let b = this.context.options.unselectCancel, z = gn(M.origEvent);
this.matchesCancel = !!q0(z, b), this.matchesEvent = !!q0(z, c2.SELECTOR);
}, this.onDocumentPointerUp = (M) => {
let { context: b } = this, { documentPointer: z } = this, n = b.getCurrentData();
if (!z.wasTouchScroll) {
if (n.dateSelection && // an existing date selection?
!this.isRecentPointerDateSelect) {
let p = b.options.unselectAuto;
p && (!p || !this.matchesCancel) && b.calendarApi.unselect(M);
}
n.eventSelection && // an existing event selected?
!this.matchesEvent && b.dispatch({ type: "UNSELECT_EVENT" });
}
this.isRecentPointerDateSelect = !1;
};
let o = this.documentPointer = new Hp(document);
o.shouldIgnoreMove = !0, o.shouldWatchScroll = !1, o.emitter.on("pointerdown", this.onDocumentPointerDown), o.emitter.on("pointerup", this.onDocumentPointerUp), e.emitter.on("select", this.onSelect);
}
destroy() {
this.context.emitter.off("select", this.onSelect), this.documentPointer.destroy();
}
}
const md = {
fixedMirrorParent: f
}, gd = {
dateClick: f,
eventDragStart: f,
eventDragStop: f,
eventDrop: f,
eventResizeStart: f,
eventResizeStop: f,
eventResize: f,
drop: f,
eventReceive: f,
eventLeave: f
};
P0.dataAttrPrefix = "";
var Ld = a0({
name: "@fullcalendar/interaction",
componentInteractions: [ld, dd, c2, Wd],
calendarInteractions: [Rd],
elementDraggingImpl: r2,
optionRefiners: md,
listenerRefiners: gd
});
class Yp extends W0 {
constructor() {
super(...arguments), this.headerElRef = j();
}
renderSimpleLayout(e, o) {
let { props: M, context: b } = this, z = [], n = ge(b.options);
return e && z.push({
type: "header",
key: "header",
isSticky: n,
chunk: {
elRef: this.headerElRef,
tableClassName: "fc-col-header",
rowContent: e
}
}), z.push({
type: "body",
key: "body",
liquid: !0,
chunk: { content: o }
}), O(
x1,
{ elClasses: ["fc-daygrid"], viewSpec: b.viewSpec },
O(fM, { liquid: !M.isHeightAuto && !M.forPrint, collapsibleWidth: M.forPrint, cols: [], sections: z })
);
}
renderHScrollLayout(e, o, M, b) {
let z = this.context.pluginHooks.scrollGridImpl;
if (!z)
throw new Error("No ScrollGrid implementation");
let { props: n, context: p } = this, r = !n.forPrint && ge(p.options), c = !n.forPrint && lt(p.options), i = [];
return e && i.push({
type: "header",
key: "header",
isSticky: r,
chunks: [{
key: "main",
elRef: this.headerElRef,
tableClassName: "fc-col-header",
rowContent: e
}]
}), i.push({
type: "body",
key: "body",
liquid: !0,
chunks: [{
key: "main",
content: o
}]
}), c && i.push({
type: "footer",
key: "footer",
isSticky: !0,
chunks: [{
key: "main",
content: me
}]
}), O(
x1,
{ elClasses: ["fc-daygrid"], viewSpec: p.viewSpec },
O(z, { liquid: !n.isHeightAuto && !n.forPrint, forPrint: n.forPrint, collapsibleWidth: n.forPrint, colGroups: [{ cols: [{ span: M, minWidth: b }] }], sections: i })
);
}
}
function N2(t, e) {
let o = [];
for (let M = 0; M < e; M += 1)
o[M] = [];
for (let M of t)
o[M.row].push(M);
return o;
}
function W2(t, e) {
let o = [];
for (let M = 0; M < e; M += 1)
o[M] = [];
for (let M of t)
o[M.firstCol].push(M);
return o;
}
function az(t, e) {
let o = [];
if (t) {
for (let M = 0; M < e; M += 1)
o[M] = {
affectedInstances: t.affectedInstances,
isEvent: t.isEvent,
segs: []
};
for (let M of t.segs)
o[M.row].segs.push(M);
} else
for (let M = 0; M < e; M += 1)
o[M] = null;
return o;
}
const Vp = Z({
hour: "numeric",
minute: "2-digit",
omitZeroMinute: !0,
meridiem: "narrow"
});
function Qp(t) {
let { display: e } = t.eventRange.ui;
return e === "list-item" || e === "auto" && !t.eventRange.def.allDay && t.firstCol === t.lastCol && // can't be multi-day
t.isStart && // "
t.isEnd;
}
class Kp extends E {
render() {
let { props: e } = this;
return O(At, Object.assign({}, e, { elClasses: ["fc-daygrid-event", "fc-daygrid-block-event", "fc-h-event"], defaultTimeFormat: Vp, defaultDisplayEventEnd: e.defaultDisplayEventEnd, disableResizing: !e.seg.eventRange.def.allDay }));
}
}
class $p extends E {
render() {
let { props: e, context: o } = this, { options: M } = o, { seg: b } = e, z = M.eventTimeFormat || Vp, n = je(b, z, o, !0, e.defaultDisplayEventEnd);
return O(dt, Object.assign({}, e, { elTag: "a", elClasses: ["fc-daygrid-event", "fc-daygrid-dot-event"], elAttrs: pM(e.seg, o), defaultGenerator: yd, timeText: n, isResizing: !1, isDateSelecting: !1 }));
}
}
function yd(t) {
return O(
k,
null,
O("div", { className: "fc-daygrid-event-dot", style: { borderColor: t.borderColor || t.backgroundColor } }),
t.timeText && O("div", { className: "fc-event-time" }, t.timeText),
O("div", { className: "fc-event-title" }, t.event.title || O(k, null, " "))
);
}
class vd extends E {
constructor() {
super(...arguments), this.compileSegs = L(Nd);
}
render() {
let { props: e } = this, { allSegs: o, invisibleSegs: M } = this.compileSegs(e.singlePlacements);
return O(gM, { elClasses: ["fc-daygrid-more-link"], dateProfile: e.dateProfile, todayRange: e.todayRange, allDayDate: e.allDayDate, moreCnt: e.moreCnt, allSegs: o, hiddenSegs: M, alignmentElRef: e.alignmentElRef, alignGridTop: e.alignGridTop, extraDateSpan: e.extraDateSpan, popoverContent: () => {
let b = (e.eventDrag ? e.eventDrag.affectedInstances : null) || (e.eventResize ? e.eventResize.affectedInstances : null) || {};
return O(k, null, o.map((z) => {
let n = z.eventRange.instance.instanceId;
return O("div", { className: "fc-daygrid-event-harness", key: n, style: {
visibility: b[n] ? "hidden" : ""
} }, Qp(z) ? O($p, Object.assign({ seg: z, isDragging: !1, isSelected: n === e.eventSelection, defaultDisplayEventEnd: !1 }, I0(z, e.todayRange))) : O(Kp, Object.assign({ seg: z, isDragging: !1, isResizing: !1, isDateSelecting: !1, isSelected: n === e.eventSelection, defaultDisplayEventEnd: !1 }, I0(z, e.todayRange))));
}));
} });
}
}
function Nd(t) {
let e = [], o = [];
for (let M of t)
e.push(M.seg), M.isVisible || o.push(M.seg);
return { allSegs: e, invisibleSegs: o };
}
const Td = Z({ week: "narrow" });
class Bd extends W0 {
constructor() {
super(...arguments), this.rootElRef = j(), this.state = {
dayNumberId: A1()
}, this.handleRootEl = (e) => {
D0(this.rootElRef, e), D0(this.props.elRef, e);
};
}
render() {
let { context: e, props: o, state: M, rootElRef: b } = this, { options: z, dateEnv: n } = e, { date: p, dateProfile: r } = o;
const c = o.showDayNumber && Ed(p, r.currentRange, n);
return O(WM, { elTag: "td", elRef: this.handleRootEl, elClasses: [
"fc-daygrid-day",
...o.extraClassNames || []
], elAttrs: Object.assign(Object.assign(Object.assign({}, o.extraDataAttrs), o.showDayNumber ? { "aria-labelledby": M.dayNumberId } : {}), { role: "gridcell" }), defaultGenerator: Sd, date: p, dateProfile: r, todayRange: o.todayRange, showDayNumber: o.showDayNumber, isMonthStart: c, extraRenderProps: o.extraRenderProps }, (i, a) => O(
"div",
{ ref: o.innerElRef, className: "fc-daygrid-day-frame fc-scrollgrid-sync-inner", style: { minHeight: o.minHeight } },
o.showWeekNumber && O(Ep, { elTag: "a", elClasses: ["fc-daygrid-week-number"], elAttrs: J1(e, p, "week"), date: p, defaultFormat: Td }),
!a.isDisabled && (o.showDayNumber || hM(z) || o.forceDayTop) ? O(
"div",
{ className: "fc-daygrid-day-top" },
O(i, { elTag: "a", elClasses: [
"fc-daygrid-day-number",
c && "fc-daygrid-month-start"
], elAttrs: Object.assign(Object.assign({}, J1(e, p)), { id: M.dayNumberId }) })
) : o.showDayNumber ? (
// for creating correct amount of space (see issue #7162)
O(
"div",
{ className: "fc-daygrid-day-top", style: { visibility: "hidden" } },
O("a", { className: "fc-daygrid-day-number" }, " ")
)
) : void 0,
O(
"div",
{ className: "fc-daygrid-day-events", ref: o.fgContentElRef },
o.fgContent,
O(
"div",
{ className: "fc-daygrid-day-bottom", style: { marginTop: o.moreMarginTop } },
O(vd, { allDayDate: p, singlePlacements: o.singlePlacements, moreCnt: o.moreCnt, alignmentElRef: b, alignGridTop: !o.showDayNumber, extraDateSpan: o.extraDateSpan, dateProfile: o.dateProfile, eventSelection: o.eventSelection, eventDrag: o.eventDrag, eventResize: o.eventResize, todayRange: o.todayRange })
)
),
O("div", { className: "fc-daygrid-day-bg" }, o.bgContent)
));
}
}
function Sd(t) {
return t.dayNumberText || O(k, null, " ");
}
function Ed(t, e, o) {
const { start: M, end: b } = e, z = W1(b, -1), n = o.getYear(M), p = o.getMonth(M), r = o.getYear(z), c = o.getMonth(z);
return !(n === r && p === c) && // first date in current view?
(t.valueOf() === M.valueOf() || // a month-start that's within the current range?
o.getDay(t) === 1 && t.valueOf() < b.valueOf());
}
function Zp(t) {
return t.eventRange.instance.instanceId + ":" + t.firstCol;
}
function Jp(t) {
return Zp(t) + ":" + t.lastCol;
}
function wd(t, e, o, M, b, z, n) {
let p = new Xd((W) => {
let h = t[W.index].eventRange.instance.instanceId + ":" + W.span.start + ":" + (W.span.end - 1);
return b[h] || 1;
});
p.allowReslicing = !0, p.strictOrder = M, e === !0 || o === !0 ? (p.maxCoord = z, p.hiddenConsumes = !0) : typeof e == "number" ? p.maxStackCnt = e : typeof o == "number" && (p.maxStackCnt = o, p.hiddenConsumes = !0);
let r = [], c = [];
for (let W = 0; W < t.length; W += 1) {
let h = t[W], y = Jp(h);
b[y] != null ? r.push({
index: W,
span: {
start: h.firstCol,
end: h.lastCol + 1
}
}) : c.push(h);
}
let i = p.addSegs(r), a = p.toRects(), { singleColPlacements: s, multiColPlacements: l, leftoverMargins: d } = Cd(a, t, n), A = [], u = [];
for (let W of c) {
l[W.firstCol].push({
seg: W,
isVisible: !1,
isAbsolute: !0,
absoluteTop: 0,
marginTop: 0
});
for (let h = W.firstCol; h <= W.lastCol; h += 1)
s[h].push({
seg: Ae(W, h, h + 1, n),
isVisible: !1,
isAbsolute: !1,
absoluteTop: 0,
marginTop: 0
});
}
for (let W = 0; W < n.length; W += 1)
A.push(0);
for (let W of i) {
let h = t[W.index], y = W.span;
l[y.start].push({
seg: Ae(h, y.start, y.end, n),
isVisible: !1,
isAbsolute: !0,
absoluteTop: 0,
marginTop: 0
});
for (let S = y.start; S < y.end; S += 1)
A[S] += 1, s[S].push({
seg: Ae(h, S, S + 1, n),
isVisible: !1,
isAbsolute: !1,
absoluteTop: 0,
marginTop: 0
});
}
for (let W = 0; W < n.length; W += 1)
u.push(d[W]);
return { singleColPlacements: s, multiColPlacements: l, moreCnts: A, moreMarginTops: u };
}
function Cd(t, e, o) {
let M = Dd(t, o.length), b = [], z = [], n = [];
for (let p = 0; p < o.length; p += 1) {
let r = M[p], c = [], i = 0, a = 0;
for (let l of r) {
let d = e[l.index];
c.push({
seg: Ae(d, p, p + 1, o),
isVisible: !0,
isAbsolute: !1,
absoluteTop: l.levelCoord,
marginTop: l.levelCoord - i
}), i = l.levelCoord + l.thickness;
}
let s = [];
i = 0, a = 0;
for (let l of r) {
let d = e[l.index], A = l.span.end - l.span.start > 1, u = l.span.start === p;
a += l.levelCoord - i, i = l.levelCoord + l.thickness, A ? (a += l.thickness, u && s.push({
seg: Ae(d, l.span.start, l.span.end, o),
isVisible: !0,
isAbsolute: !0,
absoluteTop: l.levelCoord,
marginTop: 0
})) : u && (s.push({
seg: Ae(d, l.span.start, l.span.end, o),
isVisible: !0,
isAbsolute: !1,
absoluteTop: l.levelCoord,
marginTop: a
// claim the margin
}), a = 0);
}
b.push(c), z.push(s), n.push(a);
}
return { singleColPlacements: b, multiColPlacements: z, leftoverMargins: n };
}
function Dd(t, e) {
let o = [];
for (let M = 0; M < e; M += 1)
o.push([]);
for (let M of t)
for (let b = M.span.start; b < M.span.end; b += 1)
o[b].push(M);
return o;
}
function Ae(t, e, o, M) {
if (t.firstCol === e && t.lastCol === o - 1)
return t;
let b = t.eventRange, z = b.range, n = M1(z, {
start: M[e].date,
end: c0(M[o - 1].date, 1)
});
return Object.assign(Object.assign({}, t), { firstCol: e, lastCol: o - 1, eventRange: {
def: b.def,
ui: Object.assign(Object.assign({}, b.ui), { durationEditable: !1 }),
instance: b.instance,
range: n
}, isStart: t.isStart && n.start.valueOf() === z.start.valueOf(), isEnd: t.isEnd && n.end.valueOf() === z.end.valueOf() });
}
class Xd extends OM {
constructor() {
super(...arguments), this.hiddenConsumes = !1, this.forceHidden = {};
}
addSegs(e) {
const o = super.addSegs(e), { entriesByLevel: M } = this, b = (z) => !this.forceHidden[K1(z)];
for (let z = 0; z < M.length; z += 1)
M[z] = M[z].filter(b);
return o;
}
handleInvalidInsertion(e, o, M) {
const { entriesByLevel: b, forceHidden: z } = this, { touchingEntry: n, touchingLevel: p, touchingLateral: r } = e;
if (this.hiddenConsumes && n) {
const c = K1(n);
if (!z[c])
if (this.allowReslicing) {
const i = Object.assign(Object.assign({}, n), { span: lM(n.span, o.span) }), a = K1(i);
z[a] = !0, b[p][r] = i, M.push(i), this.splitEntry(n, o, M);
} else
z[c] = !0, M.push(n);
}
super.handleInvalidInsertion(e, o, M);
}
}
class er extends W0 {
constructor() {
super(...arguments), this.cellElRefs = new h0(), this.frameElRefs = new h0(), this.fgElRefs = new h0(), this.segHarnessRefs = new h0(), this.rootElRef = j(), this.state = {
framePositions: null,
maxContentHeight: null,
segHeights: {}
}, this.handleResize = (e) => {
e && this.updateSizing(!0);
};
}
render() {
let { props: e, state: o, context: M } = this, { options: b } = M, z = e.cells.length, n = W2(e.businessHourSegs, z), p = W2(e.bgEventSegs, z), r = W2(this.getHighlightSegs(), z), c = W2(this.getMirrorSegs(), z), { singleColPlacements: i, multiColPlacements: a, moreCnts: s, moreMarginTops: l } = wd(Ot(e.fgEventSegs, b.eventOrder), e.dayMaxEvents, e.dayMaxEventRows, b.eventOrderStrict, o.segHeights, o.maxContentHeight, e.cells), d = (
// TODO: messy way to compute this
e.eventDrag && e.eventDrag.affectedInstances || e.eventResize && e.eventResize.affectedInstances || {}
);
return O(
"tr",
{ ref: this.rootElRef, role: "row" },
e.renderIntro && e.renderIntro(),
e.cells.map((A, u) => {
let W = this.renderFgSegs(u, e.forPrint ? i[u] : a[u], e.todayRange, d), h = this.renderFgSegs(u, kd(c[u], a), e.todayRange, {}, !!e.eventDrag, !!e.eventResize, !1);
return O(Bd, { key: A.key, elRef: this.cellElRefs.createRef(A.key), innerElRef: this.frameElRefs.createRef(A.key), dateProfile: e.dateProfile, date: A.date, showDayNumber: e.showDayNumbers, showWeekNumber: e.showWeekNumbers && u === 0, forceDayTop: e.showWeekNumbers, todayRange: e.todayRange, eventSelection: e.eventSelection, eventDrag: e.eventDrag, eventResize: e.eventResize, extraRenderProps: A.extraRenderProps, extraDataAttrs: A.extraDataAttrs, extraClassNames: A.extraClassNames, extraDateSpan: A.extraDateSpan, moreCnt: s[u], moreMarginTop: l[u], singlePlacements: i[u], fgContentElRef: this.fgElRefs.createRef(A.key), fgContent: (
// Fragment scopes the keys
O(
k,
null,
O(k, null, W),
O(k, null, h)
)
), bgContent: (
// Fragment scopes the keys
O(
k,
null,
this.renderFillSegs(r[u], "highlight"),
this.renderFillSegs(n[u], "non-business"),
this.renderFillSegs(p[u], "bg-event")
)
), minHeight: e.cellMinHeight });
})
);
}
componentDidMount() {
this.updateSizing(!0), this.context.addResizeHandler(this.handleResize);
}
componentDidUpdate(e, o) {
let M = this.props;
this.updateSizing(!f0(e, M));
}
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, o, M, b, z, n, p) {
let { context: r } = this, { eventSelection: c } = this.props, { framePositions: i } = this.state, a = this.props.cells.length === 1, s = z || n || p, l = [];
if (i)
for (let d of o) {
let { seg: A } = d, { instanceId: u } = A.eventRange.instance, W = d.isVisible && !b[u], h = d.isAbsolute, y = "", S = "";
h && (r.isRtl ? (S = 0, y = i.lefts[A.lastCol] - i.lefts[A.firstCol]) : (y = 0, S = i.rights[A.firstCol] - i.rights[A.lastCol])), l.push(O("div", { className: "fc-daygrid-event-harness" + (h ? " fc-daygrid-event-harness-abs" : ""), key: Zp(A), ref: s ? null : this.segHarnessRefs.createRef(Jp(A)), style: {
visibility: W ? "" : "hidden",
marginTop: h ? "" : d.marginTop,
top: h ? d.absoluteTop : "",
left: y,
right: S
} }, Qp(A) ? O($p, Object.assign({ seg: A, isDragging: z, isSelected: u === c, defaultDisplayEventEnd: a }, I0(A, M))) : O(Kp, Object.assign({ seg: A, isDragging: z, isResizing: n, isDateSelecting: p, isSelected: u === c, defaultDisplayEventEnd: a }, I0(A, M)))));
}
return l;
}
renderFillSegs(e, o) {
let { isRtl: M } = this.context, { todayRange: b } = this.props, { framePositions: z } = this.state, n = [];
if (z)
for (let p of e) {
let r = M ? {
right: 0,
left: z.lefts[p.lastCol] - z.lefts[p.firstCol]
} : {
left: 0,
right: z.rights[p.firstCol] - z.rights[p.lastCol]
};
n.push(O("div", { key: nM(p.eventRange), className: "fc-daygrid-bg-harness", style: r }, o === "bg-event" ? O(RM, Object.assign({ seg: p }, I0(p, b))) : mM(o)));
}
return O(k, {}, ...n);
}
updateSizing(e) {
let { props: o, state: M, frameElRefs: b } = this;
if (!o.forPrint && o.clientWidth !== null) {
if (e) {
let r = o.cells.map((c) => b.currentMap[c.key]);
if (r.length) {
let c = this.rootElRef.current, i = new R1(
c,
r,
!0,
// isHorizontal
!1
);
(!M.framePositions || !M.framePositions.similarTo(i)) && this.setState({
framePositions: new R1(
c,
r,
!0,
// isHorizontal
!1
)
});
}
}
const z = this.state.segHeights, n = this.querySegHeights(), p = o.dayMaxEvents === !0 || o.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?
segHeights: Object.assign(Object.assign({}, z), n),
maxContentHeight: p ? this.computeMaxContentHeight() : null
});
}
}
querySegHeights() {
let e = this.segHarnessRefs.currentMap, o = {};
for (let M in e) {
let b = Math.round(e[M].getBoundingClientRect().height);
o[M] = Math.max(o[M] || 0, b);
}
return o;
}
computeMaxContentHeight() {
let e = this.props.cells[0].key, o = this.cellElRefs.currentMap[e], M = this.fgElRefs.currentMap[e];
return o.getBoundingClientRect().bottom - M.getBoundingClientRect().top;
}
getCellEls() {
let e = this.cellElRefs.currentMap;
return this.props.cells.map((o) => e[o.key]);
}
}
er.addStateEquality({
segHeights: f0
});
function kd(t, e) {
if (!t.length)
return [];
let o = xd(e);
return t.map((M) => ({
seg: M,
isVisible: !0,
isAbsolute: !0,
absoluteTop: o[M.eventRange.instance.instanceId],
marginTop: 0
}));
}
function xd(t) {
let e = {};
for (let o of t)
for (let M of o)
e[M.seg.eventRange.instance.instanceId] = M.absoluteTop;
return e;
}
class tr extends W0 {
constructor() {
super(...arguments), this.splitBusinessHourSegs = L(N2), this.splitBgEventSegs = L(_d), this.splitFgEventSegs = L(N2), this.splitDateSelectionSegs = L(N2), this.splitEventDrag = L(az), this.splitEventResize = L(az), this.rowRefs = new h0();
}
render() {
let { props: e, context: o } = this, M = e.cells.length, b = this.splitBusinessHourSegs(e.businessHourSegs, M), z = this.splitBgEventSegs(e.bgEventSegs, M), n = this.splitFgEventSegs(e.fgEventSegs, M), p = this.splitDateSelectionSegs(e.dateSelectionSegs, M), r = this.splitEventDrag(e.eventDrag, M), c = this.splitEventResize(e.eventResize, M), i = M >= 7 && e.clientWidth ? e.clientWidth / o.options.aspectRatio / 6 : null;
return O(H0, { unit: "day" }, (a, s) => O(k, null, e.cells.map((l, d) => O(er, {
ref: this.rowRefs.createRef(d),
key: l.length ? l[0].date.toISOString() : d,
showDayNumbers: M > 1,
showWeekNumbers: e.showWeekNumbers,
todayRange: s,
dateProfile: e.dateProfile,
cells: l,
renderIntro: e.renderRowIntro,
businessHourSegs: b[d],
eventSelection: e.eventSelection,
bgEventSegs: z[d],
fgEventSegs: n[d],
dateSelectionSegs: p[d],
eventDrag: r[d],
eventResize: c[d],
dayMaxEvents: e.dayMaxEvents,
dayMaxEventRows: e.dayMaxEventRows,
clientWidth: e.clientWidth,
clientHeight: e.clientHeight,
cellMinHeight: i,
forPrint: e.forPrint
}))));
}
componentDidMount() {
this.registerInteractiveComponent();
}
componentDidUpdate() {
this.registerInteractiveComponent();
}
registerInteractiveComponent() {
if (!this.rootEl) {
const e = this.rowRefs.currentMap[0].getCellEls()[0], o = e ? e.closest(".fc-daygrid-body") : null;
o && (this.rootEl = o, this.context.registerInteractiveComponent(this, {
el: o,
isHitComboAllowed: this.props.isHitComboAllowed
}));
}
}
componentWillUnmount() {
this.rootEl && (this.context.unregisterInteractiveComponent(this), this.rootEl = null);
}
// Hit System
// ----------------------------------------------------------------------------------------------------
prepareHits() {
this.rowPositions = new R1(
this.rootEl,
this.rowRefs.collect().map((e) => e.getCellEls()[0]),
// first cell el in each row. TODO: not optimal
!1,
!0
), this.colPositions = new R1(
this.rootEl,
this.rowRefs.currentMap[0].getCellEls(),
// cell els in first row
!0,
// horizontal
!1
);
}
queryHit(e, o) {
let { colPositions: M, rowPositions: b } = this, z = M.leftToIndex(e), n = b.topToIndex(o);
if (n != null && z != null) {
let p = this.props.cells[n][z];
return {
dateProfile: this.props.dateProfile,
dateSpan: Object.assign({ range: this.getCellRange(n, z), allDay: !0 }, p.extraDateSpan),
dayEl: this.getCellEl(n, z),
rect: {
left: M.lefts[z],
right: M.rights[z],
top: b.tops[n],
bottom: b.bottoms[n]
},
layer: 0
};
}
return null;
}
getCellEl(e, o) {
return this.rowRefs.currentMap[e].getCellEls()[o];
}
getCellRange(e, o) {
let M = this.props.cells[e][o].date, b = c0(M, 1);
return { start: M, end: b };
}
}
function _d(t, e) {
return N2(t.filter(Id), e);
}
function Id(t) {
return t.eventRange.def.allDay;
}
class or extends W0 {
constructor() {
super(...arguments), this.elRef = j(), this.needsScrollReset = !1;
}
render() {
let { props: e } = this, { dayMaxEventRows: o, dayMaxEvents: M, expandRows: b } = e, z = M === !0 || o === !0;
z && !b && (z = !1, o = null, M = null);
let n = [
"fc-daygrid-body",
z ? "fc-daygrid-body-balanced" : "fc-daygrid-body-unbalanced",
b ? "" : "fc-daygrid-body-natural"
// will height of one row depend on the others?
];
return O(
"div",
{ ref: this.elRef, className: n.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
} },
O(
"table",
{ role: "presentation", className: "fc-scrollgrid-sync-table", style: {
width: e.clientWidth,
minWidth: e.tableMinWidth,
height: b ? e.clientHeight : ""
} },
e.colGroupNode,
O(
"tbody",
{ role: "presentation" },
O(tr, { 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: M, dayMaxEventRows: o, 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 = Pd(this.elRef.current, this.props.dateProfile);
if (e) {
const o = e.closest(".fc-daygrid-body"), M = o.closest(".fc-scroller"), b = e.getBoundingClientRect().top - o.getBoundingClientRect().top;
M.scrollTop = b ? b + 1 : 0;
}
this.needsScrollReset = !1;
}
}
}
function Pd(t, e) {
let o;
return e.currentRangeUnit.match(/year|month/) && (o = t.querySelector(`[data-date="${lo(e.currentDate)}-01"]`)), o || (o = t.querySelector(`[data-date="${ye(e.currentDate)}"]`)), o;
}
class yM extends AM {
constructor() {
super(...arguments), this.forceDayIfListItem = !0;
}
sliceRange(e, o) {
return o.sliceRange(e);
}
}
class Mr extends W0 {
constructor() {
super(...arguments), this.slicer = new yM(), this.tableRef = j();
}
render() {
let { props: e, context: o } = this;
return O(or, Object.assign({ ref: this.tableRef }, this.slicer.sliceProps(e, e.dateProfile, e.nextDayThreshold, o, 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 Hd extends Yp {
constructor() {
super(...arguments), this.buildDayTableModel = L(vM), this.headerRef = j(), this.tableRef = j();
}
render() {
let { options: e, dateProfileGenerator: o } = this.context, { props: M } = this, b = this.buildDayTableModel(M.dateProfile, o), z = e.dayHeaders && O(dM, { ref: this.headerRef, dateProfile: M.dateProfile, dates: b.headerDates, datesRepDistinctDays: b.rowCnt === 1 }), n = (p) => O(Mr, { ref: this.tableRef, dateProfile: M.dateProfile, dayTableModel: b, businessHours: M.businessHours, dateSelection: M.dateSelection, eventStore: M.eventStore, eventUiBases: M.eventUiBases, eventSelection: M.eventSelection, eventDrag: M.eventDrag, eventResize: M.eventResize, nextDayThreshold: e.nextDayThreshold, colGroupNode: p.tableColGroupNode, tableMinWidth: p.tableMinWidth, dayMaxEvents: e.dayMaxEvents, dayMaxEventRows: e.dayMaxEventRows, showWeekNumbers: e.weekNumbers, expandRows: !M.isHeightAuto, headerAlignElRef: this.headerElRef, clientWidth: p.clientWidth, clientHeight: p.clientHeight, forPrint: M.forPrint });
return e.dayMinWidth ? this.renderHScrollLayout(z, n, b.colCnt, e.dayMinWidth) : this.renderSimpleLayout(z, n);
}
}
function vM(t, e) {
let o = new up(t.renderRange, e);
return new qp(o, /year|month|week/.test(t.currentRangeUnit));
}
class br extends Hn {
// Computes the date range that will be rendered
buildRenderRange(e, o, M) {
let b = super.buildRenderRange(e, o, M), { props: z } = this;
return zr({
currentRange: b,
snapToWeek: /^(year|month)$/.test(o),
fixedWeekCount: z.fixedWeekCount,
dateEnv: z.dateEnv
});
}
}
function zr(t) {
let { dateEnv: e, currentRange: o } = t, { start: M, end: b } = o, z;
if (t.snapToWeek && (M = e.startOfWeek(M), z = e.startOfWeek(b), z.valueOf() !== b.valueOf() && (b = _b(z, 1))), t.fixedWeekCount) {
let n = e.startOfWeek(e.startOfMonth(c0(o.end, -1))), p = Math.ceil(
// could be partial weeks due to hiddenDays
Ji(n, b)
);
b = _b(b, 6 - p);
}
return { start: M, end: b };
}
var Ud = ':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}';
_1(Ud);
var nr = a0({
name: "@fullcalendar/daygrid",
initialView: "dayGridMonth",
views: {
dayGrid: {
component: Hd,
dateProfileGeneratorClass: br
},
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 }
}
}
});
class jd extends iM {
getKeyInfo() {
return {
allDay: {},
timed: {}
};
}
getKeysForDateSpan(e) {
return e.allDay ? ["allDay"] : ["timed"];
}
getKeysForEventDef(e) {
return e.allDay ? fs(e) ? ["timed", "allDay"] : ["allDay"] : ["timed"];
}
}
const Fd = Z({
hour: "numeric",
minute: "2-digit",
omitZeroMinute: !0,
meridiem: "short"
});
function pr(t) {
let e = [
"fc-timegrid-slot",
"fc-timegrid-slot-label",
t.isLabeled ? "fc-scrollgrid-shrink" : "fc-timegrid-slot-minor"
];
return O(n1.Consumer, null, (o) => {
if (!t.isLabeled)
return O("td", { className: e.join(" "), "data-time": t.isoTimeStr });
let { dateEnv: M, options: b, viewApi: z } = o, n = (
// TODO: fully pre-parse
b.slotLabelFormat == null ? Fd : Array.isArray(b.slotLabelFormat) ? Z(b.slotLabelFormat[0]) : Z(b.slotLabelFormat)
), p = {
level: 0,
time: t.time,
date: M.toDate(t.date),
view: z,
text: M.format(t.date, n)
};
return O(b0, { elTag: "td", elClasses: e, elAttrs: {
"data-time": t.isoTimeStr
}, renderProps: p, generatorName: "slotLabelContent", customGenerator: b.slotLabelContent, defaultGenerator: Gd, classNameGenerator: b.slotLabelClassNames, didMount: b.slotLabelDidMount, willUnmount: b.slotLabelWillUnmount }, (r) => O(
"div",
{ className: "fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame" },
O(r, { elTag: "div", elClasses: [
"fc-timegrid-slot-label-cushion",
"fc-scrollgrid-shrink-cushion"
] })
));
});
}
function Gd(t) {
return t.text;
}
class Yd extends E {
render() {
return this.props.slatMetas.map((e) => O(
"tr",
{ key: e.key },
O(pr, Object.assign({}, e))
));
}
}
const Vd = Z({ week: "short" }), Qd = 5;
class rr extends W0 {
constructor() {
super(...arguments), this.allDaySplitter = new jd(), this.headerElRef = j(), this.rootElRef = j(), this.scrollerElRef = j(), this.state = {
slatCoords: null
}, this.handleScrollTopRequest = (e) => {
let o = this.scrollerElRef.current;
o && (o.scrollTop = e);
}, this.renderHeadAxis = (e, o = "") => {
let { options: M } = this.context, { dateProfile: b } = this.props, z = b.renderRange, p = I1(z.start, z.end) === 1 ? J1(this.context, z.start, "week") : {};
return M.weekNumbers && e === "day" ? O(Ep, { elTag: "th", elClasses: [
"fc-timegrid-axis",
"fc-scrollgrid-shrink"
], elAttrs: {
"aria-hidden": !0
}, date: z.start, defaultFormat: Vd }, (r) => O(
"div",
{ className: [
"fc-timegrid-axis-frame",
"fc-scrollgrid-shrink-frame",
"fc-timegrid-axis-frame-liquid"
].join(" "), style: { height: o } },
O(r, { elTag: "a", elClasses: [
"fc-timegrid-axis-cushion",
"fc-scrollgrid-shrink-cushion",
"fc-scrollgrid-sync-inner"
], elAttrs: p })
)) : O(
"th",
{ "aria-hidden": !0, className: "fc-timegrid-axis" },
O("div", { className: "fc-timegrid-axis-frame", style: { height: o } })
);
}, this.renderTableRowAxis = (e) => {
let { options: o, viewApi: M } = this.context, b = {
text: o.allDayText,
view: M
};
return (
// TODO: make reusable hook. used in list view too
O(b0, { elTag: "td", elClasses: [
"fc-timegrid-axis",
"fc-scrollgrid-shrink"
], elAttrs: {
"aria-hidden": !0
}, renderProps: b, generatorName: "allDayContent", customGenerator: o.allDayContent, defaultGenerator: Kd, classNameGenerator: o.allDayClassNames, didMount: o.allDayDidMount, willUnmount: o.allDayWillUnmount }, (z) => O(
"div",
{ className: [
"fc-timegrid-axis-frame",
"fc-scrollgrid-shrink-frame",
e == null ? " fc-timegrid-axis-frame-liquid" : ""
].join(" "), style: { height: e } },
O(z, { 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, o, M) {
let { context: b, props: z } = this, n = [], p = ge(b.options);
return e && n.push({
type: "header",
key: "header",
isSticky: p,
chunk: {
elRef: this.headerElRef,
tableClassName: "fc-col-header",
rowContent: e
}
}), o && (n.push({
type: "body",
key: "all-day",
chunk: { content: o }
}), n.push({
type: "body",
key: "all-day-divider",
outerContent: (
// TODO: rename to cellContent so don't need to define
?
O(
"tr",
{ role: "presentation", className: "fc-scrollgrid-section" },
O("td", { className: "fc-timegrid-divider " + b.theme.getClass("tableCellShaded") })
)
)
})), n.push({
type: "body",
key: "body",
liquid: !0,
expandRows: !!b.options.expandRows,
chunk: {
scrollerElRef: this.scrollerElRef,
content: M
}
}), O(
x1,
{ elRef: this.rootElRef, elClasses: ["fc-timegrid"], viewSpec: b.viewSpec },
O(fM, { liquid: !z.isHeightAuto && !z.forPrint, collapsibleWidth: z.forPrint, cols: [{ width: "shrink" }], sections: n })
);
}
renderHScrollLayout(e, o, M, b, z, n, p) {
let r = this.context.pluginHooks.scrollGridImpl;
if (!r)
throw new Error("No ScrollGrid implementation");
let { context: c, props: i } = this, a = !i.forPrint && ge(c.options), s = !i.forPrint && lt(c.options), l = [];
e && l.push({
type: "header",
key: "header",
isSticky: a,
syncRowHeights: !0,
chunks: [
{
key: "axis",
rowContent: (A) => O("tr", { role: "presentation" }, this.renderHeadAxis("day", A.rowSyncHeights[0]))
},
{
key: "cols",
elRef: this.headerElRef,
tableClassName: "fc-col-header",
rowContent: e
}
]
}), o && (l.push({
type: "body",
key: "all-day",
syncRowHeights: !0,
chunks: [
{
key: "axis",
rowContent: (A) => O("tr", { role: "presentation" }, this.renderTableRowAxis(A.rowSyncHeights[0]))
},
{
key: "cols",
content: o
}
]
}), l.push({
key: "all-day-divider",
type: "body",
outerContent: (
// TODO: rename to cellContent so don't need to define
?
O(
"tr",
{ role: "presentation", className: "fc-scrollgrid-section" },
O("td", { colSpan: 2, className: "fc-timegrid-divider " + c.theme.getClass("tableCellShaded") })
)
)
}));
let d = c.options.nowIndicator;
return l.push({
type: "body",
key: "body",
liquid: !0,
expandRows: !!c.options.expandRows,
chunks: [
{
key: "axis",
content: (A) => (
// TODO: make this now-indicator arrow more DRY with TimeColsContent
O(
"div",
{ className: "fc-timegrid-axis-chunk" },
O(
"table",
{ "aria-hidden": !0, style: { height: A.expandRows ? A.clientHeight : "" } },
A.tableColGroupNode,
O(
"tbody",
null,
O(Yd, { slatMetas: n })
)
),
O(
"div",
{ className: "fc-timegrid-now-indicator-container" },
O(H0, {
unit: d ? "minute" : "day"
/* hacky */
}, (u) => {
let W = d && p && p.safeComputeTop(u);
return typeof W == "number" ? O(Be, { elClasses: ["fc-timegrid-now-indicator-arrow"], elStyle: { top: W }, isAxis: !0, date: u }) : null;
})
)
)
)
},
{
key: "cols",
scrollerElRef: this.scrollerElRef,
content: M
}
]
}), s && l.push({
key: "footer",
type: "footer",
isSticky: !0,
chunks: [
{
key: "axis",
content: me
},
{
key: "cols",
content: me
}
]
}), O(
x1,
{ elRef: this.rootElRef, elClasses: ["fc-timegrid"], viewSpec: c.viewSpec },
O(r, { liquid: !i.isHeightAuto && !i.forPrint, forPrint: i.forPrint, collapsibleWidth: !1, colGroups: [
{ width: "shrink", cols: [{ width: "shrink" }] },
{ cols: [{ span: b, minWidth: z }] }
], sections: l })
);
}
/* Dimensions
------------------------------------------------------------------------------------------------------------------*/
getAllDayMaxEventProps() {
let { dayMaxEvents: e, dayMaxEventRows: o } = this.context.options;
return (e === !0 || o === !0) && (e = void 0, o = Qd), { dayMaxEvents: e, dayMaxEventRows: o };
}
}
function Kd(t) {
return t.text;
}
class $d {
constructor(e, o, M) {
this.positions = e, this.dateProfile = o, this.slotDuration = M;
}
safeComputeTop(e) {
let { dateProfile: o } = this;
if (o1(o.currentRange, e)) {
let M = J(e), b = e.valueOf() - M.valueOf();
if (b >= g0(o.slotMinTime) && b < g0(o.slotMaxTime))
return this.computeTimeTop(P(b));
}
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, o) {
return o || (o = J(e)), this.computeTimeTop(P(e.valueOf() - o.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: o, dateProfile: M } = this, b = o.els.length, z = (e.milliseconds - g0(M.slotMinTime)) / g0(this.slotDuration), n, p;
return z = Math.max(0, z), z = Math.min(b, z), n = Math.floor(z), n = Math.min(n, b - 1), p = z - n, o.tops[n] + o.getHeight(n) * p;
}
}
class Zd extends E {
render() {
let { props: e, context: o } = this, { options: M } = o, { slatElRefs: b } = e;
return O("tbody", null, e.slatMetas.map((z, n) => {
let p = {
time: z.time,
date: o.dateEnv.toDate(z.date),
view: o.viewApi
};
return O(
"tr",
{ key: z.key, ref: b.createRef(z.key) },
e.axis && O(pr, Object.assign({}, z)),
O(b0, { elTag: "td", elClasses: [
"fc-timegrid-slot",
"fc-timegrid-slot-lane",
!z.isLabeled && "fc-timegrid-slot-minor"
], elAttrs: {
"data-time": z.isoTimeStr
}, renderProps: p, generatorName: "slotLaneContent", customGenerator: M.slotLaneContent, classNameGenerator: M.slotLaneClassNames, didMount: M.slotLaneDidMount, willUnmount: M.slotLaneWillUnmount })
);
}));
}
}
class Jd extends E {
constructor() {
super(...arguments), this.rootElRef = j(), this.slatElRefs = new h0();
}
render() {
let { props: e, context: o } = this;
return O(
"div",
{ ref: this.rootElRef, className: "fc-timegrid-slots" },
O(
"table",
{ "aria-hidden": !0, className: o.theme.getClass("table"), style: {
minWidth: e.tableMinWidth,
width: e.clientWidth,
height: e.minHeight
} },
e.tableColGroupNode,
O(Zd, { 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: o } = this;
o.onCoords && o.clientWidth !== null && this.rootElRef.current.offsetHeight && o.onCoords(new $d(new R1(this.rootElRef.current, eA(this.slatElRefs.currentMap, o.slatMetas), !1, !0), this.props.dateProfile, e.options.slotDuration));
}
}
function eA(t, e) {
return e.map((o) => t[o.key]);
}
function xe(t, e) {
let o = [], M;
for (M = 0; M < e; M += 1)
o.push([]);
if (t)
for (M = 0; M < t.length; M += 1)
o[t[M].col].push(t[M]);
return o;
}
function sz(t, e) {
let o = [];
if (t) {
for (let M = 0; M < e; M += 1)
o[M] = {
affectedInstances: t.affectedInstances,
isEvent: t.isEvent,
segs: []
};
for (let M of t.segs)
o[M.col].segs.push(M);
} else
for (let M = 0; M < e; M += 1)
o[M] = null;
return o;
}
class tA extends E {
render() {
let { props: e } = this;
return O(gM, { 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: () => ir(e.hiddenSegs, e), defaultGenerator: oA, forceTimed: !0 }, (o) => O(o, { elTag: "div", elClasses: ["fc-timegrid-more-link-inner", "fc-sticky"] }));
}
}
function oA(t) {
return t.shortText;
}
function MA(t, e, o) {
let M = new OM();
e != null && (M.strictOrder = e), o != null && (M.maxStackCnt = o);
let b = M.addSegs(t), z = ap(b), n = bA(M);
return n = rA(n, 1), { segRects: cA(n), hiddenGroups: z };
}
function bA(t) {
const { entriesByLevel: e } = t, o = NM((M, b) => M + ":" + b, (M, b) => {
let z = pA(t, M, b), n = Oz(z, o), p = e[M][b];
return [
Object.assign(Object.assign({}, p), { nextLevelNodes: n[0] }),
p.thickness + n[1]
// the pressure builds
];
});
return Oz(e.length ? { level: 0, lateralStart: 0, lateralEnd: e[0].length } : null, o)[0];
}
function Oz(t, e) {
if (!t)
return [[], 0];
let { level: o, lateralStart: M, lateralEnd: b } = t, z = M, n = [];
for (; z < b; )
n.push(e(o, z)), z += 1;
return n.sort(zA), [
n.map(nA),
n[0][1]
// first item's pressure
];
}
function zA(t, e) {
return e[1] - t[1];
}
function nA(t) {
return t[0];
}
function pA(t, e, o) {
let { levelCoords: M, entriesByLevel: b } = t, z = b[e][o], n = M[e] + z.thickness, p = M.length, r = e;
for (; r < p && M[r] < n; r += 1)
;
for (; r < p; r += 1) {
let c = b[r], i, a = mo(c, z.span.start, Ro), s = a[0] + a[1], l = s;
for (
;
// loop through entries that horizontally intersect
(i = c[l]) && // but not past the whole seg list
i.span.start < z.span.end;
)
l += 1;
if (s < l)
return { level: r, lateralStart: s, lateralEnd: l };
}
return null;
}
function rA(t, e) {
const o = NM((M, b, z) => K1(M), (M, b, z) => {
let { nextLevelNodes: n, thickness: p } = M, r = p + z, c = p / r, i, a = [];
if (!n.length)
i = e;
else
for (let l of n)
if (i === void 0) {
let d = o(l, b, r);
i = d[0], a.push(d[1]);
} else {
let d = o(l, i, 0);
a.push(d[1]);
}
let s = (i - b) * c;
return [i - s, Object.assign(Object.assign({}, M), { thickness: s, nextLevelNodes: a })];
});
return t.map((M) => o(M, 0, 0)[1]);
}
function cA(t) {
let e = [];
const o = NM((b, z, n) => K1(b), (b, z, n) => {
let p = Object.assign(Object.assign({}, b), {
levelCoord: z,
stackDepth: n,
stackForward: 0
});
return e.push(p), p.stackForward = M(b.nextLevelNodes, z + b.thickness, n + 1) + 1;
});
function M(b, z, n) {
let p = 0;
for (let r of b)
p = Math.max(o(r, z, n), p);
return p;
}
return M(t, 0, 0), e;
}
function NM(t, e) {
const o = {};
return (...M) => {
let b = t(...M);
return b in o ? o[b] : o[b] = e(...M);
};
}
function lz(t, e, o = null, M = 0) {
let b = [];
if (o)
for (let z = 0; z < t.length; z += 1) {
let n = t[z], p = o.computeDateTop(n.start, e), r = Math.max(
p + (M || 0),
// :(
o.computeDateTop(n.end, e)
);
b.push({
start: Math.round(p),
end: Math.round(r)
//
});
}
return b;
}
function iA(t, e, o, M) {
let b = [], z = [];
for (let c = 0; c < t.length; c += 1) {
let i = e[c];
i ? b.push({
index: c,
thickness: 1,
span: i
}) : z.push(t[c]);
}
let { segRects: n, hiddenGroups: p } = MA(b, o, M), r = [];
for (let c of n)
r.push({
seg: t[c.index],
rect: c
});
for (let c of z)
r.push({ seg: c, rect: null });
return { segPlacements: r, hiddenGroups: p };
}
const aA = Z({
hour: "numeric",
minute: "2-digit",
meridiem: !1
});
class cr extends E {
render() {
return O(At, Object.assign({}, this.props, { elClasses: [
"fc-timegrid-event",
"fc-v-event",
this.props.isShort && "fc-timegrid-event-short"
], defaultTimeFormat: aA }));
}
}
class sA extends E {
constructor() {
super(...arguments), this.sortEventSegs = L(Ot);
}
// TODO: memoize event-placement?
render() {
let { props: e, context: o } = this, { options: M } = o, b = M.selectMirror, z = (
// yuck
e.eventDrag && e.eventDrag.segs || e.eventResize && e.eventResize.segs || b && e.dateSelectionSegs || []
), n = (
// TODO: messy way to compute this
e.eventDrag && e.eventDrag.affectedInstances || e.eventResize && e.eventResize.affectedInstances || {}
), p = this.sortEventSegs(e.fgEventSegs, M.eventOrder);
return O(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 }, (r) => O(
"div",
{ className: "fc-timegrid-col-frame" },
O(
"div",
{ className: "fc-timegrid-col-bg" },
this.renderFillSegs(e.businessHourSegs, "non-business"),
this.renderFillSegs(e.bgEventSegs, "bg-event"),
this.renderFillSegs(e.dateSelectionSegs, "highlight")
),
O("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(p, n, !1, !1, !1)),
O("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(z, {}, !!e.eventDrag, !!e.eventResize, !!b, "mirror")),
O("div", { className: "fc-timegrid-now-indicator-container" }, this.renderNowIndicator(e.nowIndicatorSegs)),
hM(M) && O(r, { elTag: "div", elClasses: ["fc-timegrid-col-misc"] })
));
}
renderFgSegs(e, o, M, b, z, n) {
let { props: p } = this;
return p.forPrint ? ir(e, p) : this.renderPositionedFgSegs(e, o, M, b, z, n);
}
renderPositionedFgSegs(e, o, M, b, z, n) {
let { eventMaxStack: p, eventShortHeight: r, eventOrderStrict: c, eventMinHeight: i } = this.context.options, { date: a, slatCoords: s, eventSelection: l, todayRange: d, nowDate: A } = this.props, u = M || b || z, W = lz(e, a, s, i), { segPlacements: h, hiddenGroups: y } = iA(e, W, c, p);
return O(
k,
null,
this.renderHiddenGroups(y, e),
h.map((S) => {
let { seg: _, rect: X } = S, $ = _.eventRange.instance.instanceId, H = u || !!(!o[$] && X), N0 = eo(X && X.span), i1 = !u && X ? this.computeSegHStyle(X) : { left: 0, right: 0 }, De = !!X && X.stackForward > 0, wt = !!X && X.span.end - X.span.start < r;
return O(
"div",
{ className: "fc-timegrid-event-harness" + (De ? " fc-timegrid-event-harness-inset" : ""), key: n || $, style: Object.assign(Object.assign({ visibility: H ? "" : "hidden" }, N0), i1) },
O(cr, Object.assign({ seg: _, isDragging: M, isResizing: b, isDateSelecting: z, isSelected: $ === l, isShort: wt }, I0(_, d, A)))
);
})
);
}
// will already have eventMinHeight applied because segInputs already had it
renderHiddenGroups(e, o) {
let { extraDateSpan: M, dateProfile: b, todayRange: z, nowDate: n, eventSelection: p, eventDrag: r, eventResize: c } = this.props;
return O(k, null, e.map((i) => {
let a = eo(i.span), s = OA(i.entries, o);
return O(tA, { key: nt(ut(s)), hiddenSegs: s, top: a.top, bottom: a.bottom, extraDateSpan: M, dateProfile: b, todayRange: z, nowDate: n, eventSelection: p, eventDrag: r, eventResize: c });
}));
}
renderFillSegs(e, o) {
let { props: M, context: b } = this, n = lz(e, M.date, M.slatCoords, b.options.eventMinHeight).map((p, r) => {
let c = e[r];
return O("div", { key: nM(c.eventRange), className: "fc-timegrid-bg-harness", style: eo(p) }, o === "bg-event" ? O(RM, Object.assign({ seg: c }, I0(c, M.todayRange, M.nowDate))) : mM(o));
});
return O(k, null, n);
}
renderNowIndicator(e) {
let { slatCoords: o, date: M } = this.props;
return o ? e.map((b, z) => O(
Be,
{
// key doesn't matter. will only ever be one
key: z,
elClasses: ["fc-timegrid-now-indicator-line"],
elStyle: {
top: o.computeDateTop(b.start, M)
},
isAxis: !1,
date: M
}
)) : null;
}
computeSegHStyle(e) {
let { isRtl: o, options: M } = this.context, b = M.slotEventOverlap, z = e.levelCoord, n = e.levelCoord + e.thickness, p, r;
b && (n = Math.min(1, z + (n - z) * 2)), o ? (p = 1 - n, r = z) : (p = z, r = 1 - n);
let c = {
zIndex: e.stackDepth + 1,
left: p * 100 + "%",
right: r * 100 + "%"
};
return b && !e.stackForward && (c[o ? "marginLeft" : "marginRight"] = 20), c;
}
}
function ir(t, { todayRange: e, nowDate: o, eventSelection: M, eventDrag: b, eventResize: z }) {
let n = (b ? b.affectedInstances : null) || (z ? z.affectedInstances : null) || {};
return O(k, null, t.map((p) => {
let r = p.eventRange.instance.instanceId;
return O(
"div",
{ key: r, style: { visibility: n[r] ? "hidden" : "" } },
O(cr, Object.assign({ seg: p, isDragging: !1, isResizing: !1, isDateSelecting: !1, isSelected: r === M, isShort: !1 }, I0(p, e, o)))
);
}));
}
function eo(t) {
return t ? {
top: t.start,
bottom: -t.end
} : { top: "", bottom: "" };
}
function OA(t, e) {
return t.map((o) => e[o.index]);
}
class lA extends E {
constructor() {
super(...arguments), this.splitFgEventSegs = L(xe), this.splitBgEventSegs = L(xe), this.splitBusinessHourSegs = L(xe), this.splitNowIndicatorSegs = L(xe), this.splitDateSelectionSegs = L(xe), this.splitEventDrag = L(sz), this.splitEventResize = L(sz), this.rootElRef = j(), this.cellElRefs = new h0();
}
render() {
let { props: e, context: o } = this, M = o.options.nowIndicator && e.slatCoords && e.slatCoords.safeComputeTop(e.nowDate), b = e.cells.length, z = this.splitFgEventSegs(e.fgEventSegs, b), n = this.splitBgEventSegs(e.bgEventSegs, b), p = this.splitBusinessHourSegs(e.businessHourSegs, b), r = this.splitNowIndicatorSegs(e.nowIndicatorSegs, b), c = this.splitDateSelectionSegs(e.dateSelectionSegs, b), i = this.splitEventDrag(e.eventDrag, b), a = this.splitEventResize(e.eventResize, b);
return O(
"div",
{ className: "fc-timegrid-cols", ref: this.rootElRef },
O(
"table",
{ role: "presentation", style: {
minWidth: e.tableMinWidth,
width: e.clientWidth
} },
e.tableColGroupNode,
O(
"tbody",
{ role: "presentation" },
O(
"tr",
{ role: "row" },
e.axis && O(
"td",
{ "aria-hidden": !0, className: "fc-timegrid-col fc-timegrid-axis" },
O(
"div",
{ className: "fc-timegrid-col-frame" },
O("div", { className: "fc-timegrid-now-indicator-container" }, typeof M == "number" && O(Be, { elClasses: ["fc-timegrid-now-indicator-arrow"], elStyle: { top: M }, isAxis: !0, date: e.nowDate }))
)
),
e.cells.map((s, l) => O(sA, { key: s.key, elRef: this.cellElRefs.createRef(s.key), dateProfile: e.dateProfile, date: s.date, nowDate: e.nowDate, todayRange: e.todayRange, extraRenderProps: s.extraRenderProps, extraDataAttrs: s.extraDataAttrs, extraClassNames: s.extraClassNames, extraDateSpan: s.extraDateSpan, fgEventSegs: z[l], bgEventSegs: n[l], businessHourSegs: p[l], nowIndicatorSegs: r[l], dateSelectionSegs: c[l], eventDrag: i[l], eventResize: a[l], 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 R1(
this.rootElRef.current,
dA(this.cellElRefs.currentMap, e.cells),
!0,
// horizontal
!1
));
}
}
function dA(t, e) {
return e.map((o) => t[o.key]);
}
class ar extends W0 {
constructor() {
super(...arguments), this.processSlotOptions = L(AA), 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: o } = this.props, { slatCoords: M } = this.state;
if (o && M) {
if (e.time) {
let b = M.computeTimeTop(e.time);
b = Math.ceil(b), b && (b += 1), o(b);
}
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: o } = this;
return O(
"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
} },
O(Jd, { 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 }),
O(lA, { 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: o.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, o) {
let { dateEnv: M, options: b } = this.context, { colCoords: z } = this, { dateProfile: n } = this.props, { slatCoords: p } = this.state, { snapDuration: r, snapsPerSlot: c } = this.processSlotOptions(this.props.slotDuration, b.snapDuration), i = z.leftToIndex(e), a = p.positions.topToIndex(o);
if (i != null && a != null) {
let s = this.props.cells[i], l = p.positions.tops[a], d = p.positions.getHeight(a), A = (o - l) / d, u = Math.floor(A * c), W = a * c + u, h = this.props.cells[i].date, y = Oo(n.slotMinTime, Sn(r, W)), S = M.add(h, y), _ = M.add(S, r);
return {
dateProfile: n,
dateSpan: Object.assign({ range: { start: S, end: _ }, allDay: !1 }, s.extraDateSpan),
dayEl: z.els[i],
rect: {
left: z.lefts[i],
right: z.rights[i],
top: l,
bottom: l + d
},
layer: 0
};
}
return null;
}
}
function AA(t, e) {
let o = e || t, M = X1(t, o);
return M === null && (o = t, M = 1), { snapDuration: o, snapsPerSlot: M };
}
class sr extends AM {
sliceRange(e, o) {
let M = [];
for (let b = 0; b < o.length; b += 1) {
let z = M1(e, o[b]);
z && M.push({
start: z.start,
end: z.end,
isStart: z.start.valueOf() === e.start.valueOf(),
isEnd: z.end.valueOf() === e.end.valueOf(),
col: b
});
}
return M;
}
}
class uA extends W0 {
constructor() {
super(...arguments), this.buildDayRanges = L(Or), this.slicer = new sr(), this.timeColsRef = j();
}
render() {
let { props: e, context: o } = this, { dateProfile: M, dayTableModel: b } = e, { nowIndicator: z, nextDayThreshold: n } = o.options, p = this.buildDayRanges(b, M, o.dateEnv);
return O(H0, { unit: z ? "minute" : "day" }, (r, c) => O(ar, Object.assign({ ref: this.timeColsRef }, this.slicer.sliceProps(e, M, null, o, p), { forPrint: e.forPrint, axis: e.axis, dateProfile: M, slatMetas: e.slatMetas, slotDuration: e.slotDuration, cells: b.cells[0], tableColGroupNode: e.tableColGroupNode, tableMinWidth: e.tableMinWidth, clientWidth: e.clientWidth, clientHeight: e.clientHeight, expandRows: e.expandRows, nowDate: r, nowIndicatorSegs: z && this.slicer.sliceNowDate(r, M, n, o, p), todayRange: c, onScrollTopRequest: e.onScrollTopRequest, onSlatCoords: e.onSlatCoords })));
}
}
function Or(t, e, o) {
let M = [];
for (let b of t.headerDates)
M.push({
start: o.add(b, e.slotMinTime),
end: o.add(b, e.slotMaxTime)
});
return M;
}
const dz = [
{ hours: 1 },
{ minutes: 30 },
{ minutes: 15 },
{ seconds: 30 },
{ seconds: 15 }
];
function lr(t, e, o, M, b) {
let z = /* @__PURE__ */ new Date(0), n = t, p = P(0), r = o || qA(M), c = [];
for (; g0(n) < g0(e); ) {
let i = b.add(z, n), a = X1(p, r) !== null;
c.push({
date: i,
time: n,
key: i.toISOString(),
isoTimeStr: ia(i),
isLabeled: a
}), n = Oo(n, M), p = Oo(p, M);
}
return c;
}
function qA(t) {
let e, o, M;
for (e = dz.length - 1; e >= 0; e -= 1)
if (o = P(dz[e]), M = X1(o, t), M !== null && M > 1)
return o;
return t;
}
class fA extends rr {
constructor() {
super(...arguments), this.buildTimeColsModel = L(dr), this.buildSlatMetas = L(lr);
}
render() {
let { options: e, dateEnv: o, dateProfileGenerator: M } = this.context, { props: b } = this, { dateProfile: z } = b, n = this.buildTimeColsModel(z, M), p = this.allDaySplitter.splitProps(b), r = this.buildSlatMetas(z.slotMinTime, z.slotMaxTime, e.slotLabelInterval, e.slotDuration, o), { dayMinWidth: c } = e, i = !c, a = c, s = e.dayHeaders && O(dM, { dates: n.headerDates, dateProfile: z, datesRepDistinctDays: !0, renderIntro: i ? this.renderHeadAxis : null }), l = e.allDaySlot !== !1 && ((A) => O(Mr, Object.assign({}, p.allDay, { dateProfile: z, dayTableModel: n, nextDayThreshold: e.nextDayThreshold, tableMinWidth: A.tableMinWidth, colGroupNode: A.tableColGroupNode, renderRowIntro: i ? this.renderTableRowAxis : null, showWeekNumbers: !1, expandRows: !1, headerAlignElRef: this.headerElRef, clientWidth: A.clientWidth, clientHeight: A.clientHeight, forPrint: b.forPrint }, this.getAllDayMaxEventProps()))), d = (A) => O(uA, Object.assign({}, p.timed, { dayTableModel: n, dateProfile: z, axis: i, slotDuration: e.slotDuration, slatMetas: r, forPrint: b.forPrint, tableColGroupNode: A.tableColGroupNode, tableMinWidth: A.tableMinWidth, clientWidth: A.clientWidth, clientHeight: A.clientHeight, onSlatCoords: this.handleSlatCoords, expandRows: A.expandRows, onScrollTopRequest: this.handleScrollTopRequest }));
return a ? this.renderHScrollLayout(s, l, d, n.colCnt, c, r, this.state.slatCoords) : this.renderSimpleLayout(s, l, d);
}
}
function dr(t, e) {
let o = new up(t.renderRange, e);
return new qp(o, !1);
}
var WA = '.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-arrow,.fc .fc-timegrid-now-indicator-line{pointer-events:none}.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}';
_1(WA);
const hA = {
allDaySlot: Boolean
};
var Ar = a0({
name: "@fullcalendar/timegrid",
initialView: "timeGridWeek",
optionRefiners: hA,
views: {
timeGrid: {
component: fA,
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 }
}
}
});
class RA extends E {
constructor() {
super(...arguments), this.state = {
textId: A1()
};
}
render() {
let { theme: e, dateEnv: o, options: M, viewApi: b } = this.context, { cellId: z, dayDate: n, todayRange: p } = this.props, { textId: r } = this.state, c = p2(n, p), i = M.listDayFormat ? o.format(n, M.listDayFormat) : "", a = M.listDaySideFormat ? o.format(n, M.listDaySideFormat) : "", s = Object.assign({
date: o.toDate(n),
view: b,
textId: r,
text: i,
sideText: a,
navLinkAttrs: J1(this.context, n),
sideNavLinkAttrs: J1(this.context, n, "day", !1)
}, c);
return O(b0, { elTag: "tr", elClasses: [
"fc-list-day",
...Te(c, e)
], elAttrs: {
"data-date": ye(n)
}, renderProps: s, generatorName: "dayHeaderContent", customGenerator: M.dayHeaderContent, defaultGenerator: mA, classNameGenerator: M.dayHeaderClassNames, didMount: M.dayHeaderDidMount, willUnmount: M.dayHeaderWillUnmount }, (l) => (
// TODO: force-hide top border based on :first-child
O(
"th",
{ scope: "colgroup", colSpan: 3, id: z, "aria-labelledby": r },
O(l, { elTag: "div", elClasses: [
"fc-list-day-cushion",
e.getClass("tableCellShaded")
] })
)
));
}
}
function mA(t) {
return O(
k,
null,
t.text && O("a", Object.assign({ id: t.textId, className: "fc-list-day-text" }, t.navLinkAttrs), t.text),
t.sideText && /* not keyboard tabbable */
O("a", Object.assign({ "aria-hidden": !0, className: "fc-list-day-side-text" }, t.sideNavLinkAttrs), t.sideText)
);
}
const gA = Z({
hour: "numeric",
minute: "2-digit",
meridiem: "short"
});
class LA extends E {
render() {
let { props: e, context: o } = this, { options: M } = o, { seg: b, timeHeaderId: z, eventHeaderId: n, dateHeaderId: p } = e, r = M.eventTimeFormat || gA;
return O(dt, Object.assign({}, e, { elTag: "tr", elClasses: [
"fc-list-event",
b.eventRange.def.url && "fc-event-forced-url"
], defaultGenerator: () => yA(b, o), seg: b, timeText: "", disableDragging: !0, disableResizing: !0 }), (c, i) => O(
k,
null,
vA(b, r, o, z, p),
O(
"td",
{ "aria-hidden": !0, className: "fc-list-event-graphic" },
O("span", { className: "fc-list-event-dot", style: {
borderColor: i.borderColor || i.backgroundColor
} })
),
O(c, { elTag: "td", elClasses: ["fc-list-event-title"], elAttrs: { headers: `${n} ${p}` } })
));
}
}
function yA(t, e) {
let o = pM(t, e);
return O("a", Object.assign({}, o), t.eventRange.def.title);
}
function vA(t, e, o, M, b) {
let { options: z } = o;
if (z.displayEventTime !== !1) {
let n = t.eventRange.def, p = t.eventRange.instance, r = !1, c;
if (n.allDay ? r = !0 : Ya(t.eventRange.range) ? t.isStart ? c = je(t, e, o, null, null, p.range.start, t.end) : t.isEnd ? c = je(t, e, o, null, null, t.start, p.range.end) : r = !0 : c = je(t, e, o), r) {
let i = {
text: o.options.allDayText,
view: o.viewApi
};
return O(b0, { elTag: "td", elClasses: ["fc-list-event-time"], elAttrs: {
headers: `${M} ${b}`
}, renderProps: i, generatorName: "allDayContent", customGenerator: z.allDayContent, defaultGenerator: NA, classNameGenerator: z.allDayClassNames, didMount: z.allDayDidMount, willUnmount: z.allDayWillUnmount });
}
return O("td", { className: "fc-list-event-time" }, c);
}
return null;
}
function NA(t) {
return t.text;
}
class TA extends W0 {
constructor() {
super(...arguments), this.computeDateVars = L(SA), this.eventStoreToSegs = L(this._eventStoreToSegs), this.state = {
timeHeaderId: A1(),
eventHeaderId: A1(),
dateHeaderIdRoot: A1()
}, this.setRootEl = (e) => {
e ? this.context.registerInteractiveComponent(this, {
el: e
}) : this.context.unregisterInteractiveComponent(this);
};
}
render() {
let { props: e, context: o } = this, { dayDates: M, dayRanges: b } = this.computeDateVars(e.dateProfile), z = this.eventStoreToSegs(e.eventStore, e.eventUiBases, b);
return O(
x1,
{ elRef: this.setRootEl, elClasses: [
"fc-list",
o.theme.getClass("table"),
o.options.stickyHeaderDates !== !1 ? "fc-list-sticky" : ""
], viewSpec: o.viewSpec },
O(uM, { liquid: !e.isHeightAuto, overflowX: e.isHeightAuto ? "visible" : "hidden", overflowY: e.isHeightAuto ? "visible" : "auto" }, z.length > 0 ? this.renderSegList(z, M) : this.renderEmptyMessage())
);
}
renderEmptyMessage() {
let { options: e, viewApi: o } = this.context, M = {
text: e.noEventsText,
view: o
};
return O(b0, { elTag: "div", elClasses: ["fc-list-empty"], renderProps: M, generatorName: "noEventsContent", customGenerator: e.noEventsContent, defaultGenerator: BA, classNameGenerator: e.noEventsClassNames, didMount: e.noEventsDidMount, willUnmount: e.noEventsWillUnmount }, (b) => O(b, { elTag: "div", elClasses: ["fc-list-empty-cushion"] }));
}
renderSegList(e, o) {
let { theme: M, options: b } = this.context, { timeHeaderId: z, eventHeaderId: n, dateHeaderIdRoot: p } = this.state, r = EA(e);
return O(H0, { unit: "day" }, (c, i) => {
let a = [];
for (let s = 0; s < r.length; s += 1) {
let l = r[s];
if (l) {
let d = ye(o[s]), A = p + "-" + d;
a.push(O(RA, { key: d, cellId: A, dayDate: o[s], todayRange: i })), l = Ot(l, b.eventOrder);
for (let u of l)
a.push(O(LA, Object.assign({ key: d + ":" + u.eventRange.instance.instanceId, seg: u, isDragging: !1, isResizing: !1, isDateSelecting: !1, isSelected: !1, timeHeaderId: z, eventHeaderId: n, dateHeaderId: A }, I0(u, i, c))));
}
}
return O(
"table",
{ className: "fc-list-table " + M.getClass("table") },
O(
"thead",
null,
O(
"tr",
null,
O("th", { scope: "col", id: z }, b.timeHint),
O("th", { scope: "col", "aria-hidden": !0 }),
O("th", { scope: "col", id: n }, b.eventHint)
)
),
O("tbody", null, a)
);
});
}
_eventStoreToSegs(e, o, M) {
return this.eventRangesToSegs(Wo(e, o, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, M);
}
eventRangesToSegs(e, o) {
let M = [];
for (let b of e)
M.push(...this.eventRangeToSegs(b, o));
return M;
}
eventRangeToSegs(e, o) {
let { dateEnv: M } = this.context, { nextDayThreshold: b } = this.context.options, z = e.range, n = e.def.allDay, p, r, c, i = [];
for (p = 0; p < o.length; p += 1)
if (r = M1(z, o[p]), r && (c = {
component: this,
eventRange: e,
start: r.start,
end: r.end,
isStart: e.isStart && r.start.valueOf() === z.start.valueOf(),
isEnd: e.isEnd && r.end.valueOf() === z.end.valueOf(),
dayIndex: p
}, i.push(c), !c.isEnd && !n && p + 1 < o.length && z.end < M.add(o[p + 1].start, b))) {
c.end = z.end, c.isEnd = !0;
break;
}
return i;
}
}
function BA(t) {
return t.text;
}
function SA(t) {
let e = J(t.renderRange.start), o = t.renderRange.end, M = [], b = [];
for (; e < o; )
M.push(e), b.push({
start: e,
end: c0(e, 1)
}), e = c0(e, 1);
return { dayDates: M, dayRanges: b };
}
function EA(t) {
let e = [], o, M;
for (o = 0; o < t.length; o += 1)
M = t[o], (e[M.dayIndex] || (e[M.dayIndex] = [])).push(M);
return e;
}
var wA = ':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}';
_1(wA);
const CA = {
listDayFormat: Az,
listDaySideFormat: Az,
noEventsClassNames: f,
noEventsContent: f,
noEventsDidMount: f,
noEventsWillUnmount: f
// noEventsText is defined in base options
};
function Az(t) {
return t === !1 ? null : Z(t);
}
var DA = a0({
name: "@fullcalendar/list",
optionRefiners: CA,
views: {
list: {
component: TA,
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
}
}
});
class XA extends W0 {
constructor() {
super(...arguments), this.buildDayTableModel = L(vM), this.slicer = new yM(), this.state = {
labelId: A1()
};
}
render() {
const { props: e, state: o, context: M } = this, { dateProfile: b, forPrint: z } = e, { options: n } = M, p = this.buildDayTableModel(b, M.dateProfileGenerator), r = this.slicer.sliceProps(e, b, n.nextDayThreshold, M, p), c = e.tableWidth != null ? e.tableWidth / n.aspectRatio : null, i = p.cells.length, a = c != null ? c / i : null;
return O(
"div",
{ ref: e.elRef, "data-date": e.isoDateStr, className: "fc-multimonth-month", style: { width: e.width }, role: "grid", "aria-labelledby": o.labelId },
O(
"div",
{ className: "fc-multimonth-header", style: { marginBottom: a }, role: "presentation" },
O("div", { className: "fc-multimonth-title", id: o.labelId }, M.dateEnv.format(e.dateProfile.currentRange.start, e.titleFormat)),
O(
"table",
{ className: [
"fc-multimonth-header-table",
M.theme.getClass("table")
].join(" "), role: "presentation" },
O(
"thead",
{ role: "rowgroup" },
O(dM, { dateProfile: e.dateProfile, dates: p.headerDates, datesRepDistinctDays: !1 })
)
)
),
O(
"div",
{ className: [
"fc-multimonth-daygrid",
"fc-daygrid",
"fc-daygrid-body",
!z && "fc-daygrid-body-balanced",
z && "fc-daygrid-body-unbalanced",
z && "fc-daygrid-body-natural"
].join(" "), style: { marginTop: -a } },
O(
"table",
{ className: [
"fc-multimonth-daygrid-table",
M.theme.getClass("table")
].join(" "), style: { height: z ? "" : c }, role: "presentation" },
O(
"tbody",
{ role: "rowgroup" },
O(tr, Object.assign({}, r, { dateProfile: b, cells: p.cells, eventSelection: e.eventSelection, dayMaxEvents: !z, dayMaxEventRows: !z, showWeekNumbers: n.weekNumbers, clientWidth: e.clientWidth, clientHeight: e.clientHeight, forPrint: z }))
)
)
)
);
}
}
class kA extends W0 {
constructor() {
super(...arguments), this.splitDateProfileByMonth = L(_A), this.buildMonthFormat = L(HA), this.scrollElRef = j(), this.firstMonthElRef = j(), this.needsScrollReset = !1, this.handleSizing = (e) => {
e && this.updateSize();
};
}
render() {
const { context: e, props: o, state: M } = this, { options: b } = e, { clientWidth: z, clientHeight: n } = M, p = M.monthHPadding || 0, r = Math.min(z != null ? Math.floor(z / (b.multiMonthMinWidth + p)) : 1, b.multiMonthMaxColumns) || 1, c = 100 / r + "%", i = z == null ? null : z / r - p, a = z != null && r === 1, s = this.splitDateProfileByMonth(e.dateProfileGenerator, o.dateProfile, e.dateEnv, a ? !1 : b.fixedWeekCount, b.showNonCurrentDates), l = this.buildMonthFormat(b.multiMonthTitleFormat, s), d = [
"fc-multimonth",
a ? "fc-multimonth-singlecol" : "fc-multimonth-multicol",
i != null && i < 400 ? "fc-multimonth-compact" : "",
o.isHeightAuto ? "" : "fc-scroller"
// for AutoScroller
];
return O(x1, { elRef: this.scrollElRef, elClasses: d, viewSpec: e.viewSpec }, s.map((A, u) => {
const W = lo(A.currentRange.start);
return O(XA, Object.assign({}, o, { key: W, isoDateStr: W, elRef: u === 0 ? this.firstMonthElRef : void 0, titleFormat: l, dateProfile: A, width: c, tableWidth: i, clientWidth: z, clientHeight: n }));
}));
}
componentDidMount() {
this.updateSize(), this.context.addResizeHandler(this.handleSizing), this.requestScrollReset();
}
componentDidUpdate(e) {
f0(e, this.props) || this.handleSizing(!1), e.dateProfile !== this.props.dateProfile ? this.requestScrollReset() : this.flushScrollReset();
}
componentWillUnmount() {
this.context.removeResizeHandler(this.handleSizing);
}
updateSize() {
const e = this.scrollElRef.current, o = this.firstMonthElRef.current;
e && this.setState({
clientWidth: e.clientWidth,
clientHeight: e.clientHeight
}), o && e && this.state.monthHPadding == null && this.setState({
monthHPadding: e.clientWidth - // go within padding
o.firstChild.offsetWidth
});
}
requestScrollReset() {
this.needsScrollReset = !0, this.flushScrollReset();
}
flushScrollReset() {
if (this.needsScrollReset && this.state.monthHPadding != null) {
const { currentDate: e } = this.props.dateProfile, o = this.scrollElRef.current, M = o.querySelector(`[data-date="${lo(e)}"]`);
o.scrollTop = M.getBoundingClientRect().top - this.firstMonthElRef.current.getBoundingClientRect().top, this.needsScrollReset = !1;
}
}
// workaround for when queued setState render (w/ clientWidth) gets cancelled because
// subsequent update and shouldComponentUpdate says not to render :(
shouldComponentUpdate() {
return !0;
}
}
const xA = P(1, "month");
function _A(t, e, o, M, b) {
const { start: z, end: n } = e.currentRange;
let p = z;
const r = [];
for (; p.valueOf() < n.valueOf(); ) {
const c = o.add(p, xA), i = {
// yuck
start: t.skipHiddenDays(p),
end: t.skipHiddenDays(c, -1, !0)
};
let a = zr({
currentRange: i,
snapToWeek: !0,
fixedWeekCount: M,
dateEnv: o
});
a = {
// yuck
start: t.skipHiddenDays(a.start),
end: t.skipHiddenDays(a.end, -1, !0)
};
const s = e.activeRange ? M1(e.activeRange, b ? a : i) : null;
r.push({
currentDate: e.currentDate,
isValid: e.isValid,
validRange: e.validRange,
renderRange: a,
activeRange: s,
currentRange: i,
currentRangeUnit: "month",
isRangeAllDay: !0,
dateIncrement: e.dateIncrement,
slotMinTime: e.slotMaxTime,
slotMaxTime: e.slotMinTime
}), p = c;
}
return r;
}
const IA = Z({ year: "numeric", month: "long" }), PA = Z({ month: "long" });
function HA(t, e) {
return t || (e[0].currentRange.start.getUTCFullYear() !== e[e.length - 1].currentRange.start.getUTCFullYear() ? IA : PA);
}
const UA = {
multiMonthTitleFormat: Z,
multiMonthMaxColumns: Number,
multiMonthMinWidth: Number
};
var jA = ".fc .fc-multimonth{border:1px solid var(--fc-border-color);display:flex;flex-wrap:wrap;overflow-x:hidden;overflow-y:auto}.fc .fc-multimonth-title{font-size:1.2em;font-weight:700;padding:1em 0;text-align:center}.fc .fc-multimonth-daygrid{background:var(--fc-page-bg-color)}.fc .fc-multimonth-daygrid-table,.fc .fc-multimonth-header-table{table-layout:fixed;width:100%}.fc .fc-multimonth-daygrid-table{border-top-style:hidden!important}.fc .fc-multimonth-singlecol .fc-multimonth{position:relative}.fc .fc-multimonth-singlecol .fc-multimonth-header{background:var(--fc-page-bg-color);position:relative;top:0;z-index:2}.fc .fc-multimonth-singlecol .fc-multimonth-daygrid{position:relative;z-index:1}.fc .fc-multimonth-singlecol .fc-multimonth-daygrid-table,.fc .fc-multimonth-singlecol .fc-multimonth-header-table{border-left-style:hidden;border-right-style:hidden}.fc .fc-multimonth-singlecol .fc-multimonth-month:last-child .fc-multimonth-daygrid-table{border-bottom-style:hidden}.fc .fc-multimonth-multicol{line-height:1}.fc .fc-multimonth-multicol .fc-multimonth-month{padding:0 1.2em 1.2em}.fc .fc-multimonth-multicol .fc-daygrid-more-link{border:1px solid var(--fc-event-border-color);display:block;float:none;padding:1px}.fc .fc-multimonth-compact{line-height:1}.fc .fc-multimonth-compact .fc-multimonth-daygrid-table,.fc .fc-multimonth-compact .fc-multimonth-header-table{font-size:.9em}.fc-media-screen .fc-multimonth-singlecol .fc-multimonth-header{position:sticky}.fc-media-print .fc-multimonth{overflow:visible}";
_1(jA);
var FA = a0({
name: "@fullcalendar/multimonth",
initialView: "multiMonthYear",
optionRefiners: UA,
views: {
multiMonth: {
component: kA,
dateProfileGeneratorClass: br,
multiMonthMinWidth: 350,
multiMonthMaxColumns: 3
},
multiMonthYear: {
type: "multiMonth",
duration: { years: 1 },
fixedWeekCount: !0,
showNonCurrentDates: !1
}
}
});
const GA = "https://fullcalendar.io/docs/schedulerLicenseKey#invalid", YA = "https://fullcalendar.io/docs/schedulerLicenseKey#outdated", VA = [
"GPL-My-Project-Is-Open-Source",
"CC-Attribution-NonCommercial-NoDerivatives"
], QA = {
position: "absolute",
zIndex: 99999,
bottom: "1px",
left: "1px",
background: "#eee",
borderColor: "#ddd",
borderStyle: "solid",
borderWidth: "1px 1px 0 0",
padding: "2px 4px",
fontSize: "12px",
borderTopRightRadius: "3px"
};
function KA(t) {
let e = t.options.schedulerLicenseKey, o = typeof window < "u" ? window.location.href : "";
if (!ZA(o)) {
let M = $A(e, t.pluginHooks.premiumReleaseDate);
if (M !== "valid")
return O("div", { className: "fc-license-message", style: QA }, M === "outdated" ? O(
k,
null,
"Your license key is too old to work with this version. ",
O("a", { href: YA }, "More Info")
) : O(
k,
null,
"Your license key is invalid. ",
O("a", { href: GA }, "More Info")
));
}
return null;
}
function $A(t, e) {
if (VA.indexOf(t) !== -1)
return "valid";
const o = (t || "").match(/^(\d+)-fcs-(\d+)$/);
if (o && o[1].length === 10) {
const M = new Date(parseInt(o[2], 10) * 1e3), b = P0.mockSchedulerReleaseDate || e;
if (Qo(b))
return c0(b, -372) < M ? "valid" : "outdated";
}
return "invalid";
}
function ZA(t) {
return /\w+:\/\/fullcalendar\.io\/|\/examples\/[\w-]+\.html$/.test(t);
}
const JA = {
schedulerLicenseKey: String
};
var Me = a0({
name: "@fullcalendar/premium-common",
premiumReleaseDate: "2025-08-10",
optionRefiners: JA,
viewContainerAppends: [KA]
});
function eu(t) {
let e = t.getBoundingClientRect(), o = rp(t);
return {
left: e.left + o.borderLeft + o.scrollbarLeft - tu(t),
top: e.top + o.borderTop - t.scrollTop
};
}
function tu(t) {
let e = t.scrollLeft;
if (window.getComputedStyle(t).direction === "rtl")
switch (ur()) {
case "negative":
e *= -1;
// convert to 'reverse'. fall through...
case "reverse":
e = t.scrollWidth - e - t.clientWidth;
}
return e;
}
function ou(t, e) {
if (window.getComputedStyle(t).direction === "rtl")
switch (ur()) {
case "reverse":
e = t.scrollWidth - e;
break;
case "negative":
e = -(t.scrollWidth - e);
break;
}
t.scrollLeft = e;
}
let uz;
function ur() {
return uz || (uz = Mu());
}
function Mu() {
let t = document.createElement("div");
t.style.position = "absolute", t.style.top = "-1000px", t.style.width = "100px", t.style.height = "100px", t.style.overflow = "scroll", t.style.direction = "rtl";
let e = document.createElement("div");
e.style.width = "200px", e.style.height = "200px", t.appendChild(e), document.body.appendChild(t);
let o;
return t.scrollLeft > 0 ? o = "positive" : (t.scrollLeft = 1, t.scrollLeft > 0 ? o = "reverse" : o = "negative"), bt(t), o;
}
const bu = ".fc-sticky";
class zu {
constructor(e, o) {
this.scrollEl = e, this.isRtl = o, this.updateSize = () => {
let { scrollEl: M } = this, b = te(M, bu), z = this.queryElGeoms(b), n = M.clientWidth;
nu(b, z, n);
};
}
queryElGeoms(e) {
let { scrollEl: o, isRtl: M } = this, b = eu(o), z = [];
for (let n of e) {
let p = ez(
cp(n.parentNode, !0, !0),
// weird way to call this!!!
-b.left,
-b.top
), r = n.getBoundingClientRect(), c = window.getComputedStyle(n), i = window.getComputedStyle(n.parentNode).textAlign, a = null;
i === "start" ? i = M ? "right" : "left" : i === "end" && (i = M ? "left" : "right"), c.position !== "sticky" && (a = ez(
r,
-b.left - (parseFloat(c.left) || 0),
// could be 'auto'
-b.top - (parseFloat(c.top) || 0)
)), z.push({
parentBound: p,
naturalBound: a,
elWidth: r.width,
elHeight: r.height,
textAlign: i
});
}
return z;
}
}
function nu(t, e, o) {
t.forEach((M, b) => {
let { textAlign: z, elWidth: n, parentBound: p } = e[b], r = p.right - p.left, c;
z === "center" && r > o ? c = (o - n) / 2 : c = "", le(M, {
left: c,
right: c,
top: 0
});
});
}
class pu extends E {
constructor() {
super(...arguments), this.elRef = j(), this.state = {
xScrollbarWidth: 0,
yScrollbarWidth: 0
}, this.handleScroller = (e) => {
this.scroller = e, D0(this.props.scrollerRef, e);
}, this.handleSizing = () => {
let { props: e } = this;
e.overflowY === "scroll-hidden" && this.setState({ yScrollbarWidth: this.scroller.getYScrollbarWidth() }), e.overflowX === "scroll-hidden" && this.setState({ xScrollbarWidth: this.scroller.getXScrollbarWidth() });
};
}
render() {
let { props: e, state: o, context: M } = this, b = M.isRtl && U2(), z = 0, n = 0, p = 0, { overflowX: r, overflowY: c } = e;
return e.forPrint && (r = "visible", c = "visible"), r === "scroll-hidden" && (p = o.xScrollbarWidth), c === "scroll-hidden" && o.yScrollbarWidth != null && (b ? z = o.yScrollbarWidth : n = o.yScrollbarWidth), O(
"div",
{ ref: this.elRef, className: "fc-scroller-harness" + (e.liquid ? " fc-scroller-harness-liquid" : "") },
O(uM, { ref: this.handleScroller, elRef: this.props.scrollerElRef, overflowX: r === "scroll-hidden" ? "scroll" : r, overflowY: c === "scroll-hidden" ? "scroll" : c, overcomeLeft: z, overcomeRight: n, overcomeBottom: p, maxHeight: typeof e.maxHeight == "number" ? e.maxHeight + (r === "scroll-hidden" ? o.xScrollbarWidth : 0) : "", liquid: e.liquid, liquidIsAbsolute: !0 }, e.children)
);
}
componentDidMount() {
this.handleSizing(), this.context.addResizeHandler(this.handleSizing);
}
getSnapshotBeforeUpdate(e) {
return this.props.forPrint && !e.forPrint ? { simulateScrollLeft: this.scroller.el.scrollLeft } : {};
}
componentDidUpdate(e, o, M) {
const { props: b, scroller: { el: z } } = this;
if (f0(e, b) || this.handleSizing(), M.simulateScrollLeft !== void 0)
z.style.left = -M.simulateScrollLeft + "px";
else if (!b.forPrint && e.forPrint) {
const n = -parseInt(z.style.left);
z.style.left = "", z.scrollLeft = n;
}
}
componentWillUnmount() {
this.context.removeResizeHandler(this.handleSizing);
}
needsXScrolling() {
return this.scroller.needsXScrolling();
}
needsYScrolling() {
return this.scroller.needsYScrolling();
}
}
const qz = "wheel mousewheel DomMouseScroll MozMousePixelScroll".split(" ");
class ru {
constructor(e) {
this.el = e, this.emitter = new n2(), this.isScrolling = !1, this.isTouching = !1, this.isRecentlyWheeled = !1, this.isRecentlyScrolled = !1, this.wheelWaiter = new Qe(this._handleWheelWaited.bind(this)), this.scrollWaiter = new Qe(this._handleScrollWaited.bind(this)), this.handleScroll = () => {
this.startScroll(), this.emitter.trigger("scroll", this.isRecentlyWheeled, this.isTouching), this.isRecentlyScrolled = !0, this.scrollWaiter.request(500);
}, this.handleWheel = () => {
this.isRecentlyWheeled = !0, this.wheelWaiter.request(500);
}, this.handleTouchStart = () => {
this.isTouching = !0;
}, this.handleTouchEnd = () => {
this.isTouching = !1, this.isRecentlyScrolled || this.endScroll();
}, e.addEventListener("scroll", this.handleScroll), e.addEventListener("touchstart", this.handleTouchStart, { passive: !0 }), e.addEventListener("touchend", this.handleTouchEnd);
for (let o of qz)
e.addEventListener(o, this.handleWheel);
}
destroy() {
let { el: e } = this;
e.removeEventListener("scroll", this.handleScroll), e.removeEventListener("touchstart", this.handleTouchStart, { passive: !0 }), e.removeEventListener("touchend", this.handleTouchEnd);
for (let o of qz)
e.removeEventListener(o, this.handleWheel);
}
// Start / Stop
// ----------------------------------------------------------------------------------------------
startScroll() {
this.isScrolling || (this.isScrolling = !0, this.emitter.trigger("scrollStart", this.isRecentlyWheeled, this.isTouching));
}
endScroll() {
this.isScrolling && (this.emitter.trigger("scrollEnd"), this.isScrolling = !1, this.isRecentlyScrolled = !0, this.isRecentlyWheeled = !1, this.scrollWaiter.clear(), this.wheelWaiter.clear());
}
_handleScrollWaited() {
this.isRecentlyScrolled = !1, this.isTouching || this.endScroll();
}
_handleWheelWaited() {
this.isRecentlyWheeled = !1;
}
}
class cu {
constructor(e, o) {
this.isVertical = e, this.scrollEls = o, this.isPaused = !1, this.scrollListeners = o.map((M) => this.bindScroller(M));
}
destroy() {
for (let e of this.scrollListeners)
e.destroy();
}
bindScroller(e) {
let { scrollEls: o, isVertical: M } = this, b = new ru(e);
const z = (p, r) => {
if (!this.isPaused && ((!this.masterEl || this.masterEl !== e && (p || r)) && this.assignMaster(e), this.masterEl === e))
for (let c of o)
c !== e && (M ? c.scrollTop = e.scrollTop : c.scrollLeft = e.scrollLeft);
}, n = () => {
this.masterEl === e && (this.masterEl = null);
};
return b.emitter.on("scroll", z), b.emitter.on("scrollEnd", n), b;
}
assignMaster(e) {
this.masterEl = e;
for (let o of this.scrollListeners)
o.el !== e && o.endScroll();
}
/*
will normalize the scrollLeft value
*/
forceScrollLeft(e) {
this.isPaused = !0;
for (let o of this.scrollListeners)
ou(o.el, e);
this.isPaused = !1;
}
forceScrollTop(e) {
this.isPaused = !0;
for (let o of this.scrollListeners)
o.el.scrollTop = e;
this.isPaused = !1;
}
}
P0.SCROLLGRID_RESIZE_INTERVAL = 500;
class Wt extends E {
constructor() {
super(...arguments), this.compileColGroupStats = Pt(Ou, du), this.renderMicroColGroups = Pt(vp), this.clippedScrollerRefs = new h0(), this.scrollerElRefs = new h0(this._handleScrollerEl.bind(this)), this.chunkElRefs = new h0(this._handleChunkEl.bind(this)), this.scrollSyncersBySection = {}, this.scrollSyncersByColumn = {}, this.rowUnstableMap = /* @__PURE__ */ new Map(), this.rowInnerMaxHeightMap = /* @__PURE__ */ new Map(), this.anyRowHeightsChanged = !1, this.recentSizingCnt = 0, this.state = {
shrinkWidths: [],
forceYScrollbars: !1,
forceXScrollbars: !1,
scrollerClientWidths: {},
scrollerClientHeights: {},
sectionRowMaxHeights: []
}, this.handleSizing = (e, o) => {
if (!this.allowSizing())
return;
o || (this.anyRowHeightsChanged = !0);
let M = {};
(e || !o && !this.rowUnstableMap.size) && (M.sectionRowMaxHeights = this.computeSectionRowMaxHeights()), this.setState(Object.assign(Object.assign({ shrinkWidths: this.computeShrinkWidths() }, this.computeScrollerDims()), M), () => {
this.rowUnstableMap.size || this.updateStickyScrolling();
});
}, this.handleRowHeightChange = (e, o) => {
let { rowUnstableMap: M, rowInnerMaxHeightMap: b } = this;
if (!o)
M.set(e, !0);
else {
M.delete(e);
let z = fz(e);
(!b.has(e) || b.get(e) !== z) && (b.set(e, z), this.anyRowHeightsChanged = !0), !M.size && this.anyRowHeightsChanged && (this.anyRowHeightsChanged = !1, this.setState({
sectionRowMaxHeights: this.computeSectionRowMaxHeights()
}));
}
};
}
render() {
let { props: e, state: o, context: M } = this, { shrinkWidths: b } = o, z = this.compileColGroupStats(e.colGroups.map((W) => [W])), n = this.renderMicroColGroups(z.map((W, h) => [W.cols, b[h]])), p = Bp(e.liquid, M);
this.getDims();
let r = e.sections, c = r.length, i = 0, a, s = [], l = [], d = [];
for (; i < c && (a = r[i]).type === "header"; )
s.push(this.renderSection(a, i, z, n, o.sectionRowMaxHeights, !0)), i += 1;
for (; i < c && (a = r[i]).type === "body"; )
l.push(this.renderSection(a, i, z, n, o.sectionRowMaxHeights, !1)), i += 1;
for (; i < c && (a = r[i]).type === "footer"; )
d.push(this.renderSection(a, i, z, n, o.sectionRowMaxHeights, !0)), i += 1;
const A = !rM(), u = { role: "rowgroup" };
return O("table", {
ref: e.elRef,
role: "grid",
className: p.join(" ")
}, su(z, b), !!(!A && s.length) && O("thead", u, ...s), !!(!A && l.length) && O("tbody", u, ...l), !!(!A && d.length) && O("tfoot", u, ...d), A && O("tbody", u, ...s, ...l, ...d));
}
renderSection(e, o, M, b, z, n) {
return "outerContent" in e ? O(k, { key: e.key }, e.outerContent) : O("tr", { key: e.key, role: "presentation", className: Sp(e, this.props.liquid).join(" ") }, e.chunks.map((p, r) => this.renderChunk(e, o, M[r], b[r], p, r, (z[o] || [])[r] || [], n)));
}
renderChunk(e, o, M, b, z, n, p, r) {
if ("outerContent" in z)
return O(k, { key: z.key }, z.outerContent);
let { state: c } = this, { scrollerClientWidths: i, scrollerClientHeights: a } = c, [s, l] = this.getDims(), d = o * l + n, A = !this.context.isRtl || U2() ? l - 1 : 0, u = n === A, W = o === s - 1, h = W && c.forceXScrollbars, y = u && c.forceYScrollbars, S = M && M.allowXScrolling, _ = gp(this.props, e), X = qM(this.props, e), $ = e.expandRows && X, H = M && M.totalColMinWidth || "", N0 = Lp(e, z, {
tableColGroupNode: b,
tableMinWidth: H,
clientWidth: i[d] !== void 0 ? i[d] : null,
clientHeight: a[d] !== void 0 ? a[d] : null,
expandRows: $,
syncRowHeights: !!e.syncRowHeights,
rowSyncHeights: p,
reportRowHeightChange: this.handleRowHeightChange
}, r), i1 = h ? W ? "scroll" : "scroll-hidden" : S ? W ? "auto" : "scroll-hidden" : "hidden", De = y ? u ? "scroll" : "scroll-hidden" : _ ? u ? "auto" : "scroll-hidden" : "hidden";
return N0 = O(pu, { ref: this.clippedScrollerRefs.createRef(d), scrollerElRef: this.scrollerElRefs.createRef(d), overflowX: i1, overflowY: De, forPrint: this.props.forPrint, liquid: X, maxHeight: e.maxHeight }, N0), O(r ? "th" : "td", {
key: z.key,
ref: this.chunkElRefs.createRef(d),
role: "presentation"
}, N0);
}
componentDidMount() {
this.getStickyScrolling = Pt(Au), this.getScrollSyncersBySection = Hb(hz.bind(this, !0), null, h2), this.getScrollSyncersByColumn = Hb(hz.bind(this, !1), null, h2), this.updateScrollSyncers(), this.handleSizing(!1), this.context.addResizeHandler(this.handleSizing);
}
componentDidUpdate(e, o) {
this.updateScrollSyncers(), this.handleSizing(!1, o.sectionRowMaxHeights !== this.state.sectionRowMaxHeights);
}
componentWillUnmount() {
this.context.removeResizeHandler(this.handleSizing), this.destroyScrollSyncers();
}
allowSizing() {
let e = /* @__PURE__ */ new Date();
return !this.lastSizingDate || e.valueOf() > this.lastSizingDate.valueOf() + P0.SCROLLGRID_RESIZE_INTERVAL ? (this.lastSizingDate = e, this.recentSizingCnt = 0, !0) : (this.recentSizingCnt += 1) <= 10;
}
computeShrinkWidths() {
let e = this.compileColGroupStats(this.props.colGroups.map((n) => [n])), [o, M] = this.getDims(), b = o * M, z = [];
return e.forEach((n, p) => {
if (n.hasShrinkCol) {
let r = this.chunkElRefs.collect(p, b, M);
z[p] = mp(r);
}
}), z;
}
// has the side effect of grooming rowInnerMaxHeightMap
// TODO: somehow short-circuit if there are no new height changes
computeSectionRowMaxHeights() {
let e = /* @__PURE__ */ new Map(), [o, M] = this.getDims(), b = [];
for (let z = 0; z < o; z += 1) {
let n = this.props.sections[z], p = [];
if (n && n.syncRowHeights) {
let r = [];
for (let a = 0; a < M; a += 1) {
let s = z * M + a, l = [], d = this.chunkElRefs.currentMap[s];
d ? l = te(d, ".fc-scrollgrid-sync-table tr").map((A) => {
let u = fz(A);
return e.set(A, u), u;
}) : l = [], r.push(l);
}
let c = r[0].length, i = !0;
for (let a = 1; a < M; a += 1)
if (!(n.chunks[a] && n.chunks[a].outerContent !== void 0) && r[a].length !== c) {
i = !1;
break;
}
if (i) {
for (let a = 0; a < M; a += 1)
p.push([]);
for (let a = 0; a < c; a += 1) {
let s = [];
for (let d = 0; d < M; d += 1) {
let A = r[d][a];
A != null && s.push(A);
}
let l = Math.max(...s);
for (let d = 0; d < M; d += 1)
p[d].push(l);
}
} else {
let a = [];
for (let l = 0; l < M; l += 1)
a.push(iu(r[l]) + r[l].length);
let s = Math.max(...a);
for (let l = 0; l < M; l += 1) {
let d = r[l].length, A = s - d, u = Math.floor(A / d), W = A - u * (d - 1), h = [], y = 0;
for (y < d && (h.push(W), y += 1); y < d; )
h.push(u), y += 1;
p.push(h);
}
}
}
b.push(p);
}
return this.rowInnerMaxHeightMap = e, b;
}
computeScrollerDims() {
let e = np(), [o, M] = this.getDims(), b = !this.context.isRtl || U2() ? M - 1 : 0, z = o - 1, n = this.clippedScrollerRefs.currentMap, p = this.scrollerElRefs.currentMap, r = !1, c = !1, i = {}, a = {};
for (let s = 0; s < o; s += 1) {
let l = s * M + b, d = n[l];
if (d && d.needsYScrolling()) {
r = !0;
break;
}
}
for (let s = 0; s < M; s += 1) {
let l = z * M + s, d = n[l];
if (d && d.needsXScrolling()) {
c = !0;
break;
}
}
for (let s = 0; s < o; s += 1)
for (let l = 0; l < M; l += 1) {
let d = s * M + l, A = p[d];
if (A) {
let u = A.parentNode;
i[d] = Math.floor(u.getBoundingClientRect().width - (l === b && r ? e.y : 0)), a[d] = Math.floor(u.getBoundingClientRect().height - (s === z && c ? e.x : 0));
}
}
return { forceYScrollbars: r, forceXScrollbars: c, scrollerClientWidths: i, scrollerClientHeights: a };
}
updateStickyScrolling() {
let { isRtl: e } = this.context, o = this.scrollerElRefs.getAll().map((M) => [M, e]);
this.getStickyScrolling(o).forEach((M) => M.updateSize());
}
updateScrollSyncers() {
let [e, o] = this.getDims(), M = e * o, b = {}, z = {}, n = this.scrollerElRefs.currentMap;
for (let p = 0; p < e; p += 1) {
let r = p * o, c = r + o;
b[p] = Cn(n, r, c, 1);
}
for (let p = 0; p < o; p += 1)
z[p] = this.scrollerElRefs.collect(p, M, o);
this.scrollSyncersBySection = this.getScrollSyncersBySection(b), this.scrollSyncersByColumn = this.getScrollSyncersByColumn(z);
}
destroyScrollSyncers() {
d0(this.scrollSyncersBySection, h2), d0(this.scrollSyncersByColumn, h2);
}
getChunkConfigByIndex(e) {
let o = this.getDims()[1], M = Math.floor(e / o), b = e % o, z = this.props.sections[M];
return z && z.chunks[b];
}
forceScrollLeft(e, o) {
let M = this.scrollSyncersByColumn[e];
M && M.forceScrollLeft(o);
}
forceScrollTop(e, o) {
let M = this.scrollSyncersBySection[e];
M && M.forceScrollTop(o);
}
_handleChunkEl(e, o) {
let M = this.getChunkConfigByIndex(parseInt(o, 10));
M && D0(M.elRef, e);
}
_handleScrollerEl(e, o) {
let M = this.getChunkConfigByIndex(parseInt(o, 10));
M && D0(M.scrollerElRef, e);
}
getDims() {
let e = this.props.sections.length, o = e ? this.props.sections[0].chunks.length : 0;
return [e, o];
}
}
Wt.addStateEquality({
shrinkWidths: C0,
scrollerClientWidths: f0,
scrollerClientHeights: f0
});
function iu(t) {
let e = 0;
for (let o of t)
e += o;
return e;
}
function fz(t) {
let e = te(t, ".fc-scrollgrid-sync-inner").map(au);
return e.length ? Math.max(...e) : 0;
}
function au(t) {
return t.offsetHeight;
}
function su(t, e) {
let o = t.map((M, b) => {
let z = M.width;
return z === "shrink" && (z = M.totalColWidth + Np(e[b]) + 1), // eslint-disable-next-line react/jsx-key
O("col", { style: { width: z } });
});
return O("colgroup", {}, ...o);
}
function Ou(t) {
let e = Wz(t.cols, "width"), o = Wz(t.cols, "minWidth"), M = Tp(t.cols), b = t.width !== "shrink" && !!(e || o || M);
return {
hasShrinkCol: M,
totalColWidth: e,
totalColMinWidth: o,
allowXScrolling: b,
cols: t.cols,
width: t.width
};
}
function Wz(t, e) {
let o = 0;
for (let M of t) {
let b = M[e];
typeof b == "number" && (o += b * (M.span || 1));
}
return o;
}
const lu = {
cols: yp
};
function du(t, e) {
return y2(t, e, lu);
}
function hz(t, ...e) {
return new cu(t, e);
}
function h2(t) {
t.destroy();
}
function Au(t, e) {
return new zu(t, e);
}
var uu = a0({
name: "@fullcalendar/scrollgrid",
premiumReleaseDate: "2025-08-10",
deps: [Me],
scrollGridImpl: Wt
});
const qu = 18, F2 = 6, fu = 200;
P0.MAX_TIMELINE_SLOTS = 1e3;
const vo = [
{ years: 1 },
{ months: 1 },
{ days: 1 },
{ hours: 1 },
{ minutes: 30 },
{ minutes: 15 },
{ minutes: 10 },
{ minutes: 5 },
{ minutes: 1 },
{ seconds: 30 },
{ seconds: 15 },
{ seconds: 10 },
{ seconds: 5 },
{ seconds: 1 },
{ milliseconds: 500 },
{ milliseconds: 100 },
{ milliseconds: 10 },
{ milliseconds: 1 }
];
function qr(t, e, o, M) {
let b = {
labelInterval: o.slotLabelInterval,
slotDuration: o.slotDuration
};
hu(b, t, e), fr(b, t, e), Ru(b, t, e);
let z = o.slotLabelFormat, n = Array.isArray(z) ? z : z != null ? [z] : mu(b, t, e, o);
b.headerFormats = n.map((S) => Z(S)), b.isTimeScale = !!b.slotDuration.milliseconds;
let p = null;
if (!b.isTimeScale) {
const S = k1(b.slotDuration).unit;
/year|month|week/.test(S) && (p = S);
}
b.largeUnit = p, b.emphasizeWeeks = Bn(b.slotDuration) === 1 && re("weeks", t, e) >= 2 && !o.businessHours;
let r = o.snapDuration, c, i;
r && (c = P(r), i = X1(b.slotDuration, c)), i == null && (c = b.slotDuration, i = 1), b.snapDuration = c, b.snapsPerSlot = i;
let a = g0(t.slotMaxTime) - g0(t.slotMinTime), s = Rz(t.renderRange.start, b, e), l = Rz(t.renderRange.end, b, e);
b.isTimeScale && (s = e.add(s, t.slotMinTime), l = e.add(c0(l, -1), t.slotMaxTime)), b.timeWindowMs = a, b.normalizedRange = { start: s, end: l };
let d = [], A = s;
for (; A < l; )
G2(A, b, t, M) && d.push(A), A = e.add(A, b.slotDuration);
b.slotDates = d;
let u = -1, W = 0;
const h = [], y = [];
for (A = s; A < l; )
G2(A, b, t, M) ? (u += 1, h.push(u), y.push(W)) : h.push(u + 0.5), A = e.add(A, b.snapDuration), W += 1;
return b.snapDiffToIndex = h, b.snapIndexToDiff = y, b.snapCnt = u + 1, b.slotCnt = b.snapCnt / b.snapsPerSlot, b.isWeekStarts = gu(b, e), b.cellRows = Lu(b, e), b.slotsPerLabel = X1(b.labelInterval, b.slotDuration), b;
}
function Rz(t, e, o) {
let M = t;
return e.isTimeScale || (M = J(M), e.largeUnit && (M = o.startOf(M, e.largeUnit))), M;
}
function Wu(t, e, o) {
if (!e.isTimeScale && (t = it(t), e.largeUnit)) {
let M = t;
t = {
start: o.startOf(t.start, e.largeUnit),
end: o.startOf(t.end, e.largeUnit)
}, (t.end.valueOf() !== M.end.valueOf() || t.end <= t.start) && (t = {
start: t.start,
end: o.add(t.end, e.slotDuration)
});
}
return t;
}
function G2(t, e, o, M) {
if (M.isHiddenDay(t))
return !1;
if (e.isTimeScale) {
let b = J(t), n = t.valueOf() - b.valueOf() - g0(o.slotMinTime);
return n = (n % 864e5 + 864e5) % 864e5, n < e.timeWindowMs;
}
return !0;
}
function hu(t, e, o) {
const { currentRange: M } = e;
if (t.labelInterval && o.countDurationsBetween(M.start, M.end, t.labelInterval) > P0.MAX_TIMELINE_SLOTS && (console.warn("slotLabelInterval results in too many cells"), t.labelInterval = null), t.slotDuration && o.countDurationsBetween(M.start, M.end, t.slotDuration) > P0.MAX_TIMELINE_SLOTS && (console.warn("slotDuration results in too many cells"), t.slotDuration = null), t.labelInterval && t.slotDuration) {
const b = X1(t.labelInterval, t.slotDuration);
(b === null || b < 1) && (console.warn("slotLabelInterval must be a multiple of slotDuration"), t.slotDuration = null);
}
}
function fr(t, e, o) {
const { currentRange: M } = e;
let { labelInterval: b } = t;
if (!b) {
let z;
if (t.slotDuration) {
for (z of vo) {
const n = P(z), p = X1(n, t.slotDuration);
if (p !== null && p <= F2) {
b = n;
break;
}
}
b || (b = t.slotDuration);
} else
for (z of vo)
if (b = P(z), o.countDurationsBetween(M.start, M.end, b) >= qu)
break;
t.labelInterval = b;
}
return b;
}
function Ru(t, e, o) {
const { currentRange: M } = e;
let { slotDuration: b } = t;
if (!b) {
const z = fr(t, e, o);
for (let n of vo) {
const p = P(n), r = X1(z, p);
if (r !== null && r > 1 && r <= F2) {
b = p;
break;
}
}
b && o.countDurationsBetween(M.start, M.end, b) > fu && (b = null), b || (b = z), t.slotDuration = b;
}
return b;
}
function mu(t, e, o, M) {
let b, z;
const { labelInterval: n } = t;
let p = k1(n).unit;
const r = M.weekNumbers;
let c = b = z = null;
switch (p === "week" && !r && (p = "day"), p) {
case "year":
c = { year: "numeric" };
break;
case "month":
re("years", e, o) > 1 && (c = { year: "numeric" }), b = { month: "short" };
break;
case "week":
re("years", e, o) > 1 && (c = { year: "numeric" }), b = { week: "narrow" };
break;
case "day":
re("years", e, o) > 1 ? c = { year: "numeric", month: "long" } : re("months", e, o) > 1 && (c = { month: "long" }), r && (b = { week: "short" }), z = { weekday: "narrow", day: "numeric" };
break;
case "hour":
r && (c = { week: "short" }), re("days", e, o) > 1 && (b = { weekday: "short", day: "numeric", month: "numeric", omitCommas: !0 }), z = {
hour: "numeric",
minute: "2-digit",
omitZeroMinute: !0,
meridiem: "short"
};
break;
case "minute":
Ki(n) / 60 >= F2 ? (c = {
hour: "numeric",
meridiem: "short"
}, b = (i) => ":" + u1(i.date.minute, 2)) : c = {
hour: "numeric",
minute: "numeric",
meridiem: "short"
};
break;
case "second":
$i(n) / 60 >= F2 ? (c = { hour: "numeric", minute: "2-digit", meridiem: "lowercase" }, b = (i) => ":" + u1(i.date.second, 2)) : c = { hour: "numeric", minute: "2-digit", second: "2-digit", meridiem: "lowercase" };
break;
case "millisecond":
c = { hour: "numeric", minute: "2-digit", second: "2-digit", meridiem: "lowercase" }, b = (i) => "." + u1(i.millisecond, 3);
break;
}
return [].concat(c || [], b || [], z || []);
}
function re(t, e, o) {
let M = e.currentRange, b = null;
return t === "years" ? b = o.diffWholeYears(M.start, M.end) : t === "months" || t === "weeks" ? b = o.diffWholeMonths(M.start, M.end) : t === "days" && (b = Ke(M.start, M.end)), b || 0;
}
function gu(t, e) {
let { slotDates: o, emphasizeWeeks: M } = t, b = null, z = [];
for (let n of o) {
let p = e.computeWeekNumber(n), r = M && b !== null && b !== p;
b = p, z.push(r);
}
return z;
}
function Lu(t, e) {
let o = t.slotDates, M = t.headerFormats, b = M.map(() => []), z = Bn(t.slotDuration), n = z === 7 ? "week" : z === 1 ? "day" : null, p = M.map((r) => r.getSmallestUnit ? r.getSmallestUnit() : null);
for (let r = 0; r < o.length; r += 1) {
let c = o[r], i = t.isWeekStarts[r];
for (let a = 0; a < M.length; a += 1) {
let s = M[a], l = b[a], d = l[l.length - 1], A = a === M.length - 1, u = M.length > 1 && !A, W = null, h = p[a] || (A ? n : null);
if (u) {
let y = e.format(c, s);
!d || d.text !== y ? W = mz(c, y, h) : d.colspan += 1;
} else if (!d || V1(e.countDurationsBetween(t.normalizedRange.start, c, t.labelInterval))) {
let y = e.format(c, s);
W = mz(c, y, h);
} else
d.colspan += 1;
W && (W.weekStart = i, l.push(W));
}
}
return b;
}
function mz(t, e, o) {
return { date: t, text: e, rowUnit: o, colspan: 1, isWeekStart: !1 };
}
class yu extends E {
constructor() {
super(...arguments), this.refineRenderProps = C1(Tu), this.buildCellNavLinkAttrs = L(vu);
}
render() {
let { props: e, context: o } = this, { dateEnv: M, options: b } = o, { cell: z, dateProfile: n, tDateProfile: p } = e, r = p2(z.date, e.todayRange, e.nowDate, n), c = this.refineRenderProps({
level: e.rowLevel,
dateMarker: z.date,
text: z.text,
dateEnv: o.dateEnv,
viewApi: o.viewApi
});
return O(b0, { elTag: "th", elClasses: [
"fc-timeline-slot",
"fc-timeline-slot-label",
z.isWeekStart && "fc-timeline-slot-em",
...// TODO: so slot classnames for week/month/bigger. see note above about rowUnit
z.rowUnit === "time" ? zp(r, o.theme) : Te(r, o.theme)
], elAttrs: {
colSpan: z.colspan,
"data-date": M.formatIso(z.date, {
omitTime: !p.isTimeScale,
omitTimeZoneOffset: !0
})
}, renderProps: c, generatorName: "slotLabelContent", customGenerator: b.slotLabelContent, defaultGenerator: Nu, classNameGenerator: b.slotLabelClassNames, didMount: b.slotLabelDidMount, willUnmount: b.slotLabelWillUnmount }, (i) => O(
"div",
{ className: "fc-timeline-slot-frame", style: { height: e.rowInnerHeight } },
O(i, { elTag: "a", elClasses: [
"fc-timeline-slot-cushion",
"fc-scrollgrid-sync-inner",
e.isSticky && "fc-sticky"
], elAttrs: this.buildCellNavLinkAttrs(o, z.date, z.rowUnit) })
));
}
}
function vu(t, e, o) {
return o && o !== "time" ? J1(t, e, o) : {};
}
function Nu(t) {
return t.text;
}
function Tu(t) {
return {
level: t.level,
date: t.dateEnv.toDate(t.dateMarker),
view: t.viewApi,
text: t.text
};
}
class Bu extends E {
render() {
let { dateProfile: e, tDateProfile: o, rowInnerHeights: M, todayRange: b, nowDate: z } = this.props, { cellRows: n } = o;
return O(k, null, n.map((p, r) => {
let c = r === n.length - 1, a = [
"fc-timeline-header-row",
o.isTimeScale && c ? "fc-timeline-header-row-chrono" : ""
];
return (
// eslint-disable-next-line react/no-array-index-key
O("tr", { key: r, className: a.join(" ") }, p.map((s) => O(yu, { key: s.date.toISOString(), cell: s, rowLevel: r, dateProfile: e, tDateProfile: o, todayRange: b, nowDate: z, rowInnerHeight: M && M[r], isSticky: !c })))
);
}));
}
}
class Su {
constructor(e, o, M, b, z, n) {
this.slatRootEl = e, this.dateProfile = M, this.tDateProfile = b, this.dateEnv = z, this.isRtl = n, this.outerCoordCache = new R1(
e,
o,
!0,
// isHorizontal
!1
), this.innerCoordCache = new R1(
e,
Ei(o, "div"),
!0,
// isHorizontal
!1
);
}
isDateInRange(e) {
return o1(this.dateProfile.currentRange, e);
}
// results range from negative width of area to 0
dateToCoord(e) {
let { tDateProfile: o } = this, b = this.computeDateSnapCoverage(e) / o.snapsPerSlot, z = Math.floor(b);
z = Math.min(z, o.slotCnt - 1);
let n = b - z, { innerCoordCache: p, outerCoordCache: r } = this;
return this.isRtl ? r.originClientRect.width - (r.rights[z] - p.getWidth(z) * n) : r.lefts[z] + p.getWidth(z) * n;
}
rangeToCoords(e) {
return {
start: this.dateToCoord(e.start),
end: this.dateToCoord(e.end)
};
}
durationToCoord(e) {
let { dateProfile: o, tDateProfile: M, dateEnv: b, isRtl: z } = this, n = 0;
if (o) {
let p = b.add(o.activeRange.start, e);
M.isTimeScale || (p = J(p)), n = this.dateToCoord(p), !z && n && (n += 1);
}
return n;
}
coordFromLeft(e) {
return this.isRtl ? this.outerCoordCache.originClientRect.width - e : e;
}
// returned value is between 0 and the number of snaps
computeDateSnapCoverage(e) {
return No(e, this.tDateProfile, this.dateEnv);
}
}
function No(t, e, o) {
let M = o.countDurationsBetween(e.normalizedRange.start, t, e.snapDuration);
if (M < 0)
return 0;
if (M >= e.snapDiffToIndex.length)
return e.snapCnt;
let b = Math.floor(M), z = e.snapDiffToIndex[b];
return V1(z) ? z += M - b : z = Math.ceil(z), z;
}
function TM(t, e) {
return t === null ? { left: "", right: "" } : e ? { right: t, left: "" } : { left: t, right: "" };
}
function BM(t, e) {
return t ? e ? { right: t.start, left: -t.end } : { left: t.start, right: -t.end } : { left: "", right: "" };
}
class Wr extends E {
constructor() {
super(...arguments), this.rootElRef = j();
}
render() {
let { props: e, context: o } = this, { unit: M, value: b } = k1(e.tDateProfile.slotDuration), z = e.slatCoords && e.slatCoords.dateProfile === e.dateProfile ? e.slatCoords : null;
return O(H0, { unit: M, unitValue: b }, (n, p) => O(
"div",
{ className: "fc-timeline-header", ref: this.rootElRef },
O(
"table",
{ "aria-hidden": !0, className: "fc-scrollgrid-sync-table", style: { minWidth: e.tableMinWidth, width: e.clientWidth } },
e.tableColGroupNode,
O(
"tbody",
null,
O(Bu, { dateProfile: e.dateProfile, tDateProfile: e.tDateProfile, nowDate: n, todayRange: p, rowInnerHeights: e.rowInnerHeights })
)
),
o.options.nowIndicator && // need to have a container regardless of whether the current view has a visible now indicator
// because apparently removal of the element resets the scroll for some reasons (issue #5351).
// this issue doesn't happen for the timeline body however (
O("div", { className: "fc-timeline-now-indicator-container" }, z && z.isDateInRange(n) && O(Be, { elClasses: ["fc-timeline-now-indicator-arrow"], elStyle: TM(z.dateToCoord(n), o.isRtl), isAxis: !0, date: n }))
));
}
componentDidMount() {
this.updateSize();
}
componentDidUpdate() {
this.updateSize();
}
updateSize() {
this.props.onMaxCushionWidth && this.props.onMaxCushionWidth(this.computeMaxCushionWidth());
}
computeMaxCushionWidth() {
return Math.max(...te(this.rootElRef.current, ".fc-timeline-header-row:last-child .fc-timeline-slot-cushion").map((e) => e.getBoundingClientRect().width));
}
}
class Eu extends E {
render() {
let { props: e, context: o } = this, { dateEnv: M, options: b, theme: z } = o, { date: n, tDateProfile: p, isEm: r } = e, c = p2(e.date, e.todayRange, e.nowDate, e.dateProfile), i = Object.assign(Object.assign({ date: M.toDate(e.date) }, c), { view: o.viewApi });
return O(b0, { elTag: "td", elRef: e.elRef, elClasses: [
"fc-timeline-slot",
"fc-timeline-slot-lane",
r && "fc-timeline-slot-em",
p.isTimeScale ? V1(M.countDurationsBetween(p.normalizedRange.start, e.date, p.labelInterval)) ? "fc-timeline-slot-major" : "fc-timeline-slot-minor" : "",
...e.isDay ? Te(c, z) : zp(c, z)
], elAttrs: {
"data-date": M.formatIso(n, {
omitTimeZoneOffset: !0,
omitTime: !p.isTimeScale
})
}, renderProps: i, generatorName: "slotLaneContent", customGenerator: b.slotLaneContent, classNameGenerator: b.slotLaneClassNames, didMount: b.slotLaneDidMount, willUnmount: b.slotLaneWillUnmount }, (a) => O(a, { elTag: "div" }));
}
}
class wu extends E {
render() {
let { props: e } = this, { tDateProfile: o, cellElRefs: M } = e, { slotDates: b, isWeekStarts: z } = o, n = !o.isTimeScale && !o.largeUnit;
return O(
"tbody",
null,
O("tr", null, b.map((p, r) => {
let c = p.toISOString();
return O(Eu, { key: c, elRef: M.createRef(c), date: p, dateProfile: e.dateProfile, tDateProfile: o, nowDate: e.nowDate, todayRange: e.todayRange, isEm: z[r], isDay: n });
}))
);
}
}
class hr extends E {
constructor() {
super(...arguments), this.rootElRef = j(), this.cellElRefs = new h0(), this.handleScrollRequest = (e) => {
let { onScrollLeftRequest: o } = this.props, { coords: M } = this;
if (o && M) {
if (e.time) {
let b = M.coordFromLeft(M.durationToCoord(e.time));
o(b);
}
return !0;
}
return null;
};
}
render() {
let { props: e, context: o } = this;
return O(
"div",
{ className: "fc-timeline-slots", ref: this.rootElRef },
O(
"table",
{ "aria-hidden": !0, className: o.theme.getClass("table"), style: {
minWidth: e.tableMinWidth,
width: e.clientWidth
} },
e.tableColGroupNode,
O(wu, { cellElRefs: this.cellElRefs, dateProfile: e.dateProfile, tDateProfile: e.tDateProfile, nowDate: e.nowDate, todayRange: e.todayRange })
)
);
}
componentDidMount() {
this.updateSizing(), this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);
}
componentDidUpdate(e) {
this.updateSizing(), this.scrollResponder.update(e.dateProfile !== this.props.dateProfile);
}
componentWillUnmount() {
this.scrollResponder.detach(), this.props.onCoords && this.props.onCoords(null);
}
updateSizing() {
let { props: e, context: o } = this;
e.clientWidth !== null && // is sizing stable?
this.scrollResponder && this.rootElRef.current.offsetWidth && (this.coords = new Su(this.rootElRef.current, Cu(this.cellElRefs.currentMap, e.tDateProfile.slotDates), e.dateProfile, e.tDateProfile, o.dateEnv, o.isRtl), e.onCoords && e.onCoords(this.coords), this.scrollResponder.update(!1));
}
positionToHit(e) {
let { outerCoordCache: o } = this.coords, { dateEnv: M, isRtl: b } = this.context, { tDateProfile: z } = this.props, n = o.leftToIndex(e);
if (n != null) {
let p = o.getWidth(n), r = b ? (o.rights[n] - e) / p : (e - o.lefts[n]) / p, c = Math.floor(r * z.snapsPerSlot), i = M.add(z.slotDates[n], Sn(z.snapDuration, c)), a = M.add(i, z.snapDuration);
return {
dateSpan: {
range: { start: i, end: a },
allDay: !this.props.tDateProfile.isTimeScale
},
dayEl: this.cellElRefs.currentMap[n],
left: o.lefts[n],
right: o.rights[n]
};
}
return null;
}
}
function Cu(t, e) {
return e.map((o) => {
let M = o.toISOString();
return t[M];
});
}
function Rr(t, e, o) {
let M = [];
if (o)
for (let b of t) {
let z = o.rangeToCoords(b), n = Math.round(z.start), p = Math.round(z.end);
p - n < e && (p = n + e), M.push({ start: n, end: p });
}
return M;
}
function Du(t, e, o, M, b, z) {
let n = [], p = [];
for (let h = 0; h < t.length; h += 1) {
let y = t[h], S = y.eventRange.instance.instanceId, _ = o[S], X = e[h];
_ && X ? n.push({
index: h,
span: X,
thickness: _
}) : p.push({
seg: y,
hcoords: X,
top: null
});
}
let r = new OM();
b != null && (r.strictOrder = b), z != null && (r.maxStackCnt = z);
let c = r.addSegs(n), i = c.map((h) => ({
seg: t[h.index],
hcoords: h.span,
top: null
})), a = ap(c), s = [], l = [];
const d = (h) => t[h.index];
for (let h = 0; h < a.length; h += 1) {
let y = a[h], S = y.entries.map(d), _ = M[nt(ut(S))];
_ != null ? s.push({
index: t.length + h,
thickness: _,
span: y.span
}) : l.push({
seg: S,
hcoords: y.span,
top: null
});
}
r.maxStackCnt = -1, r.addSegs(s);
let A = r.toRects(), u = [], W = 0;
for (let h of A) {
let y = h.index;
u.push({
seg: y < t.length ? t[y] : a[y - t.length].entries.map(d),
hcoords: h.span,
top: h.levelCoord
}), W = Math.max(W, h.levelCoord + h.thickness);
}
return [
u.concat(p, i, l),
W
];
}
class mr extends E {
render() {
let { props: e } = this, o = [].concat(e.eventResizeSegs, e.dateSelectionSegs);
return e.timelineCoords && O(
"div",
{ className: "fc-timeline-bg" },
this.renderSegs(e.businessHourSegs || [], e.timelineCoords, "non-business"),
this.renderSegs(e.bgEventSegs || [], e.timelineCoords, "bg-event"),
this.renderSegs(o, e.timelineCoords, "highlight")
);
}
renderSegs(e, o, M) {
let { todayRange: b, nowDate: z } = this.props, { isRtl: n } = this.context, p = Rr(e, 0, o), r = e.map((c, i) => {
let a = p[i], s = BM(a, n);
return O("div", { key: nM(c.eventRange), className: "fc-timeline-bg-harness", style: s }, M === "bg-event" ? O(RM, Object.assign({ seg: c }, I0(c, b, z))) : mM(M));
});
return O(k, null, r);
}
}
class gr extends AM {
sliceRange(e, o, M, b, z) {
let n = Wu(e, b, z), p = [];
if (No(n.start, b, z) < No(n.end, b, z)) {
let r = M1(n, b.normalizedRange);
r && p.push({
start: r.start,
end: r.end,
isStart: r.start.valueOf() === n.start.valueOf() && G2(r.start, b, o, M),
isEnd: r.end.valueOf() === n.end.valueOf() && G2(W1(r.end, -1), b, o, M)
});
}
return p;
}
}
const Xu = Z({
hour: "numeric",
minute: "2-digit",
omitZeroMinute: !0,
meridiem: "narrow"
});
class Lr extends E {
render() {
let { props: e } = this;
return O(At, Object.assign({}, e, { elClasses: ["fc-timeline-event", "fc-h-event"], defaultTimeFormat: Xu, defaultDisplayEventTime: !e.isTimeScale }));
}
}
class ku extends E {
render() {
let { props: e, context: o } = this, { hiddenSegs: M, placement: b, resourceId: z } = e, { top: n, hcoords: p } = b, r = p && n !== null, c = BM(p, o.isRtl), i = z ? { resourceId: z } : {};
return O(gM, { elRef: e.elRef, elClasses: ["fc-timeline-more-link"], elStyle: Object.assign({ visibility: r ? "" : "hidden", top: n || 0 }, c), allDayDate: null, moreCnt: M.length, allSegs: M, hiddenSegs: M, dateProfile: e.dateProfile, todayRange: e.todayRange, extraDateSpan: i, popoverContent: () => O(k, null, M.map((a) => {
let s = a.eventRange.instance.instanceId;
return O(
"div",
{ key: s, style: { visibility: e.isForcedInvisible[s] ? "hidden" : "" } },
O(Lr, Object.assign({ isTimeScale: e.isTimeScale, seg: a, isDragging: !1, isResizing: !1, isDateSelecting: !1, isSelected: s === e.eventSelection }, I0(a, e.todayRange, e.nowDate)))
);
})) }, (a) => O(a, { elTag: "div", elClasses: ["fc-timeline-more-link-inner", "fc-sticky"] }));
}
}
class SM extends E {
constructor() {
super(...arguments), this.slicer = new gr(), this.sortEventSegs = L(Ot), this.harnessElRefs = new h0(), this.moreElRefs = new h0(), this.innerElRef = j(), this.state = {
eventInstanceHeights: {},
moreLinkHeights: {}
}, this.handleResize = (e) => {
e && this.updateSize();
};
}
render() {
let { props: e, state: o, context: M } = this, { options: b } = M, { dateProfile: z, tDateProfile: n } = e, p = this.slicer.sliceProps(
e,
z,
n.isTimeScale ? null : e.nextDayThreshold,
M,
// wish we didn't have to pass in the rest of the args...
z,
M.dateProfileGenerator,
n,
M.dateEnv
), r = (p.eventDrag ? p.eventDrag.segs : null) || (p.eventResize ? p.eventResize.segs : null) || [], c = this.sortEventSegs(p.fgEventSegs, b.eventOrder), i = Rr(c, b.eventMinWidth, e.timelineCoords), [a, s] = Du(c, i, o.eventInstanceHeights, o.moreLinkHeights, b.eventOrderStrict, b.eventMaxStack), l = (
// TODO: more convenient
(p.eventDrag ? p.eventDrag.affectedInstances : null) || (p.eventResize ? p.eventResize.affectedInstances : null) || {}
);
return O(
k,
null,
O(mr, { businessHourSegs: p.businessHourSegs, bgEventSegs: p.bgEventSegs, timelineCoords: e.timelineCoords, eventResizeSegs: p.eventResize ? p.eventResize.segs : [], dateSelectionSegs: p.dateSelectionSegs, nowDate: e.nowDate, todayRange: e.todayRange }),
O(
"div",
{ className: "fc-timeline-events fc-scrollgrid-sync-inner", ref: this.innerElRef, style: { height: s } },
this.renderFgSegs(a, l, !1, !1, !1),
this.renderFgSegs(xu(r, e.timelineCoords, a), {}, !!p.eventDrag, !!p.eventResize, !1)
)
);
}
componentDidMount() {
this.updateSize(), this.context.addResizeHandler(this.handleResize);
}
componentDidUpdate(e, o) {
(e.eventStore !== this.props.eventStore || // external thing changed?
e.timelineCoords !== this.props.timelineCoords || // external thing changed?
o.moreLinkHeights !== this.state.moreLinkHeights) && this.updateSize();
}
componentWillUnmount() {
this.context.removeResizeHandler(this.handleResize);
}
updateSize() {
let { props: e } = this, { timelineCoords: o } = e;
const M = this.innerElRef.current;
e.onHeightChange && e.onHeightChange(M, !1), o && this.setState({
eventInstanceHeights: d0(this.harnessElRefs.currentMap, (b) => Math.round(b.getBoundingClientRect().height)),
moreLinkHeights: d0(this.moreElRefs.currentMap, (b) => Math.round(b.getBoundingClientRect().height))
}, () => {
e.onHeightChange && e.onHeightChange(M, !0);
}), e.syncParentMinHeight && (M.parentElement.style.minHeight = M.style.height);
}
renderFgSegs(e, o, M, b, z) {
let { harnessElRefs: n, moreElRefs: p, props: r, context: c } = this, i = M || b || z;
return O(k, null, e.map((a) => {
let { seg: s, hcoords: l, top: d } = a;
if (Array.isArray(s)) {
let h = nt(ut(s));
return O(ku, { key: "m:" + h, elRef: p.createRef(h), hiddenSegs: s, placement: a, dateProfile: r.dateProfile, nowDate: r.nowDate, todayRange: r.todayRange, isTimeScale: r.tDateProfile.isTimeScale, eventSelection: r.eventSelection, resourceId: r.resourceId, isForcedInvisible: o });
}
let A = s.eventRange.instance.instanceId, u = i || !!(!o[A] && l && d !== null), W = BM(l, c.isRtl);
return O(
"div",
{ key: "e:" + A, ref: i ? null : n.createRef(A), className: "fc-timeline-event-harness", style: Object.assign({ visibility: u ? "" : "hidden", top: d || 0 }, W) },
O(Lr, Object.assign({
isTimeScale: r.tDateProfile.isTimeScale,
seg: s,
isDragging: M,
isResizing: b,
isDateSelecting: z,
isSelected: A === r.eventSelection
/* TODO: bad for mirror? */
}, I0(s, r.todayRange, r.nowDate)))
);
}));
}
}
SM.addStateEquality({
eventInstanceHeights: f0,
moreLinkHeights: f0
});
function xu(t, e, o) {
if (!t.length || !e)
return [];
let M = _u(o);
return t.map((b) => ({
seg: b,
hcoords: e.rangeToCoords(b),
top: M[b.eventRange.instance.instanceId]
}));
}
function _u(t) {
let e = {};
for (let o of t) {
let { seg: M } = o;
Array.isArray(M) || (e[M.eventRange.instance.instanceId] = o.top);
}
return e;
}
class Iu extends W0 {
constructor() {
super(...arguments), this.slatsRef = j(), this.state = {
coords: null
}, this.handeEl = (e) => {
e ? this.context.registerInteractiveComponent(this, { el: e }) : this.context.unregisterInteractiveComponent(this);
}, this.handleCoords = (e) => {
this.setState({ coords: e }), this.props.onSlatCoords && this.props.onSlatCoords(e);
};
}
render() {
let { props: e, state: o, context: M } = this, { options: b } = M, { dateProfile: z, tDateProfile: n } = e, { unit: p, value: r } = k1(n.slotDuration);
return O(
"div",
{ className: "fc-timeline-body", ref: this.handeEl, style: {
minWidth: e.tableMinWidth,
height: e.clientHeight,
width: e.clientWidth
} },
O(H0, { unit: p, unitValue: r }, (c, i) => O(
k,
null,
O(hr, { ref: this.slatsRef, dateProfile: z, tDateProfile: n, nowDate: c, todayRange: i, clientWidth: e.clientWidth, tableColGroupNode: e.tableColGroupNode, tableMinWidth: e.tableMinWidth, onCoords: this.handleCoords, onScrollLeftRequest: e.onScrollLeftRequest }),
O(SM, { dateProfile: z, tDateProfile: e.tDateProfile, nowDate: c, todayRange: i, nextDayThreshold: b.nextDayThreshold, businessHours: e.businessHours, eventStore: e.eventStore, eventUiBases: e.eventUiBases, dateSelection: e.dateSelection, eventSelection: e.eventSelection, eventDrag: e.eventDrag, eventResize: e.eventResize, timelineCoords: o.coords, syncParentMinHeight: !0 }),
b.nowIndicator && o.coords && o.coords.isDateInRange(c) && O(
"div",
{ className: "fc-timeline-now-indicator-container" },
O(Be, { elClasses: ["fc-timeline-now-indicator-line"], elStyle: TM(o.coords.dateToCoord(c), M.isRtl), isAxis: !1, date: c })
)
))
);
}
// Hit System
// ------------------------------------------------------------------------------------------
queryHit(e, o, M, b) {
let n = this.slatsRef.current.positionToHit(e);
return n ? {
dateProfile: this.props.dateProfile,
dateSpan: n.dateSpan,
rect: {
left: n.left,
right: n.right,
top: 0,
bottom: b
},
dayEl: n.dayEl,
layer: 0
} : null;
}
}
class Pu extends W0 {
constructor() {
super(...arguments), this.buildTimelineDateProfile = L(qr), this.scrollGridRef = j(), this.state = {
slatCoords: null,
slotCushionMaxWidth: null
}, this.handleSlatCoords = (e) => {
this.setState({ slatCoords: e });
}, this.handleScrollLeftRequest = (e) => {
this.scrollGridRef.current.forceScrollLeft(0, e);
}, this.handleMaxCushionWidth = (e) => {
this.setState({
slotCushionMaxWidth: Math.ceil(e)
// for less rerendering TODO: DRY
});
};
}
render() {
let { props: e, state: o, context: M } = this, { options: b } = M, z = !e.forPrint && ge(b), n = !e.forPrint && lt(b), p = this.buildTimelineDateProfile(e.dateProfile, M.dateEnv, b, M.dateProfileGenerator), { slotMinWidth: r } = b, c = yr(p, r || this.computeFallbackSlotMinWidth(p)), i = [
{
type: "header",
key: "header",
isSticky: z,
chunks: [{
key: "timeline",
content: (a) => O(Wr, { dateProfile: e.dateProfile, clientWidth: a.clientWidth, clientHeight: a.clientHeight, tableMinWidth: a.tableMinWidth, tableColGroupNode: a.tableColGroupNode, tDateProfile: p, slatCoords: o.slatCoords, onMaxCushionWidth: r ? null : this.handleMaxCushionWidth })
}]
},
{
type: "body",
key: "body",
liquid: !0,
chunks: [{
key: "timeline",
content: (a) => O(Iu, Object.assign({}, e, { clientWidth: a.clientWidth, clientHeight: a.clientHeight, tableMinWidth: a.tableMinWidth, tableColGroupNode: a.tableColGroupNode, tDateProfile: p, onSlatCoords: this.handleSlatCoords, onScrollLeftRequest: this.handleScrollLeftRequest }))
}]
}
];
return n && i.push({
type: "footer",
key: "footer",
isSticky: !0,
chunks: [{
key: "timeline",
content: me
}]
}), O(
x1,
{ elClasses: [
"fc-timeline",
b.eventOverlap === !1 ? "fc-timeline-overlap-disabled" : ""
], viewSpec: M.viewSpec },
O(Wt, { ref: this.scrollGridRef, liquid: !e.isHeightAuto && !e.forPrint, forPrint: e.forPrint, collapsibleWidth: !1, colGroups: [
{ cols: c }
], sections: i })
);
}
computeFallbackSlotMinWidth(e) {
return Math.max(30, (this.state.slotCushionMaxWidth || 0) / e.slotsPerLabel);
}
}
function yr(t, e) {
return [{
span: t.slotCnt,
minWidth: e || 1
// needs to be a non-zero number to trigger horizontal scrollbars!??????
}];
}
var Hu = '.fc .fc-timeline-body{min-height:100%;position:relative;z-index:1}.fc .fc-timeline-slots{bottom:0;position:absolute;top:0;z-index:1}.fc .fc-timeline-slots>table{height:100%}.fc .fc-timeline-slot-minor{border-style:dotted}.fc .fc-timeline-slot-frame{align-items:center;display:flex;justify-content:center}.fc .fc-timeline-header-row-chrono .fc-timeline-slot-frame{justify-content:flex-start}.fc .fc-timeline-header-row:last-child .fc-timeline-slot-frame{overflow:hidden}.fc .fc-timeline-slot-cushion{padding:4px 5px;white-space:nowrap}.fc-direction-ltr .fc-timeline-slot{border-right:0!important}.fc-direction-rtl .fc-timeline-slot{border-left:0!important}.fc .fc-timeline-now-indicator-container{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:4}.fc .fc-timeline-now-indicator-arrow,.fc .fc-timeline-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;pointer-events:none;position:absolute;top:0}.fc .fc-timeline-now-indicator-arrow{border-left-color:transparent;border-right-color:transparent;border-width:6px 5px 0;margin:0 -6px}.fc .fc-timeline-now-indicator-line{border-width:0 0 0 1px;bottom:0;margin:0 -1px}.fc .fc-timeline-events{position:relative;width:0;z-index:3}.fc .fc-timeline-event-harness,.fc .fc-timeline-more-link{position:absolute;top:0}.fc-timeline-event{z-index:1}.fc-timeline-event.fc-event-mirror{z-index:2}.fc-timeline-event{align-items:center;border-radius:0;display:flex;font-size:var(--fc-small-font-size);margin-bottom:1px;padding:2px 1px;position:relative}.fc-timeline-event .fc-event-main{flex-grow:1;flex-shrink:1;min-width:0}.fc-timeline-event .fc-event-time{font-weight:700}.fc-timeline-event .fc-event-time,.fc-timeline-event .fc-event-title{padding:0 2px;white-space:nowrap}.fc-direction-ltr .fc-timeline-event.fc-event-end,.fc-direction-ltr .fc-timeline-more-link{margin-right:1px}.fc-direction-rtl .fc-timeline-event.fc-event-end,.fc-direction-rtl .fc-timeline-more-link{margin-left:1px}.fc-timeline-overlap-disabled .fc-timeline-event{margin-bottom:0;padding-bottom:5px;padding-top:5px}.fc-timeline-event:not(.fc-event-end):after,.fc-timeline-event:not(.fc-event-start):before{border-color:transparent #000;border-style:solid;border-width:5px;content:"";flex-grow:0;flex-shrink:0;height:0;margin:0 1px;opacity:.5;width:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-start):before,.fc-direction-rtl .fc-timeline-event:not(.fc-event-end):after{border-left:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-end):after,.fc-direction-rtl .fc-timeline-event:not(.fc-event-start):before{border-right:0}.fc-timeline-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;font-size:var(--fc-small-font-size);padding:1px}.fc-timeline-more-link-inner{display:inline-block;left:0;padding:2px;right:0}.fc .fc-timeline-bg{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:2}.fc .fc-timeline-bg .fc-non-business{z-index:1}.fc .fc-timeline-bg .fc-bg-event{z-index:2}.fc .fc-timeline-bg .fc-highlight{z-index:3}.fc .fc-timeline-bg-harness{bottom:0;position:absolute;top:0}';
_1(Hu);
var vr = a0({
name: "@fullcalendar/timeline",
premiumReleaseDate: "2025-08-10",
deps: [Me],
initialView: "timelineDay",
views: {
timeline: {
component: Pu,
usesMinMaxTime: !0,
eventResizableFromStart: !0
// how is this consumed for TimelineView tho?
},
timelineDay: {
type: "timeline",
duration: { days: 1 }
},
timelineWeek: {
type: "timeline",
duration: { weeks: 1 }
},
timelineMonth: {
type: "timeline",
duration: { months: 1 }
},
timelineYear: {
type: "timeline",
duration: { years: 1 }
}
}
});
P0.COLLAPSIBLE_WIDTH_THRESHOLD = 1200;
let ae = [], To = [];
function Uu(t) {
ae.length || ju(), ae.push(t), t.calendarApi.on("_unmount", () => {
Zi(ae, t), ae.length || Fu();
});
}
function ju() {
window.addEventListener("beforeprint", Nr), window.addEventListener("afterprint", Tr);
}
function Fu() {
window.removeEventListener("beforeprint", Nr), window.removeEventListener("afterprint", Tr);
}
function Nr() {
for (let t of ae)
t.emitter.trigger("_beforeprint");
he(() => {
To.push(Gu());
});
}
function Tr() {
for (let t of ae)
t.emitter.trigger("_afterprint");
he(() => {
for (; To.length; )
To.shift()();
});
}
function Gu() {
let t = te(document.body, ".fc-scrollgrid");
return t.forEach(Yu), () => t.forEach(Vu);
}
function Yu(t) {
let e = t.getBoundingClientRect().width;
(!t.classList.contains("fc-scrollgrid-collapsible") || e < P0.COLLAPSIBLE_WIDTH_THRESHOLD) && (t.style.width = e + "px");
}
function Vu(t) {
t.style.width = "";
}
var Qu = ".fc .fc-event,.fc .fc-scrollgrid table tr{-moz-column-break-inside:avoid;break-inside:avoid}.fc-media-print{display:block;max-width:100%}.fc-media-print .fc-bg-event,.fc-media-print .fc-non-business,.fc-media-print .fc-timegrid-axis-chunk,.fc-media-print .fc-timegrid-slots,.fc-media-print .fc-timeline-slots{display:none}.fc-media-print .fc-h-event,.fc-media-print .fc-toolbar button,.fc-media-print .fc-v-event{background:#fff!important;color:#000!important}.fc-media-print .fc-event,.fc-media-print .fc-event-main{color:#000!important}.fc-media-print .fc-timegrid-event{margin:.5em 0}";
_1(Qu);
var Ku = a0({
name: "@fullcalendar/adaptive",
premiumReleaseDate: "2025-08-10",
deps: [Me],
contextInit: Uu
});
const Br = "_fc:", $u = {
id: String,
parentId: String,
children: f,
title: String,
businessHours: f,
extendedProps: f,
// event-ui
eventEditable: Boolean,
eventStartEditable: Boolean,
eventDurationEditable: Boolean,
eventConstraint: f,
eventOverlap: Boolean,
eventAllow: f,
eventClassNames: fo,
eventBackgroundColor: String,
eventBorderColor: String,
eventTextColor: String,
eventColor: String
};
function EM(t, e = "", o, M) {
let { refined: b, extra: z } = b2(t, $u), n = {
id: b.id || Br + z1(),
parentId: b.parentId || e,
title: b.title || "",
businessHours: b.businessHours ? Kn(b.businessHours, M) : null,
ui: Ze({
editable: b.eventEditable,
startEditable: b.eventStartEditable,
durationEditable: b.eventDurationEditable,
constraint: b.eventConstraint,
overlap: b.eventOverlap,
allow: b.eventAllow,
classNames: b.eventClassNames,
backgroundColor: b.eventBackgroundColor,
borderColor: b.eventBorderColor,
textColor: b.eventTextColor,
color: b.eventColor
}, M),
extendedProps: Object.assign(Object.assign({}, z), b.extendedProps)
};
if (Object.freeze(n.ui.classNames), Object.freeze(n.extendedProps), !o[n.id]) {
if (o[n.id] = n, b.children)
for (let p of b.children)
EM(p, n.id, o, M);
}
return n;
}
function Sr(t) {
return t.indexOf(Br) === 0 ? "" : t;
}
class L0 {
constructor(e, o) {
this._context = e, this._resource = o;
}
setProp(e, o) {
let M = this._resource;
this._context.dispatch({
type: "SET_RESOURCE_PROP",
resourceId: M.id,
propName: e,
propValue: o
}), this.sync(M);
}
setExtendedProp(e, o) {
let M = this._resource;
this._context.dispatch({
type: "SET_RESOURCE_EXTENDED_PROP",
resourceId: M.id,
propName: e,
propValue: o
}), this.sync(M);
}
sync(e) {
let o = this._context, M = e.id;
this._resource = o.getCurrentData().resourceStore[M], o.emitter.trigger("resourceChange", {
oldResource: new L0(o, e),
resource: this,
revert() {
o.dispatch({
type: "ADD_RESOURCE",
resourceHash: {
[M]: e
}
});
}
});
}
remove() {
let e = this._context, o = this._resource, M = o.id;
e.dispatch({
type: "REMOVE_RESOURCE",
resourceId: M
}), e.emitter.trigger("resourceRemove", {
resource: this,
revert() {
e.dispatch({
type: "ADD_RESOURCE",
resourceHash: {
[M]: o
}
});
}
});
}
getParent() {
let e = this._context, o = this._resource.parentId;
return o ? new L0(e, e.getCurrentData().resourceStore[o]) : null;
}
getChildren() {
let e = this._resource.id, o = this._context, { resourceStore: M } = o.getCurrentData(), b = [];
for (let z in M)
M[z].parentId === e && b.push(new L0(o, M[z]));
return b;
}
/*
this is really inefficient!
TODO: make EventApi::resourceIds a hash or keep an index in the Calendar's state
*/
getEvents() {
let e = this._resource.id, o = this._context, { defs: M, instances: b } = o.getCurrentData().eventStore, z = [];
for (let n in b) {
let p = b[n], r = M[p.defId];
r.resourceIds.indexOf(e) !== -1 && z.push(new M0(o, r, p));
}
return z;
}
get id() {
return Sr(this._resource.id);
}
get title() {
return this._resource.title;
}
get eventConstraint() {
return this._resource.ui.constraints[0] || null;
}
// TODO: better type
get eventOverlap() {
return this._resource.ui.overlap;
}
get eventAllow() {
return this._resource.ui.allows[0] || null;
}
// TODO: better type
get eventBackgroundColor() {
return this._resource.ui.backgroundColor;
}
get eventBorderColor() {
return this._resource.ui.borderColor;
}
get eventTextColor() {
return this._resource.ui.textColor;
}
// NOTE: user can't modify these because Object.freeze was called in event-def parsing
get eventClassNames() {
return this._resource.ui.classNames;
}
get extendedProps() {
return this._resource.extendedProps;
}
toPlainObject(e = {}) {
let o = this._resource, { ui: M } = o, b = this.id, z = {};
return b && (z.id = b), o.title && (z.title = o.title), e.collapseEventColor && M.backgroundColor && M.backgroundColor === M.borderColor ? z.eventColor = M.backgroundColor : (M.backgroundColor && (z.eventBackgroundColor = M.backgroundColor), M.borderColor && (z.eventBorderColor = M.borderColor)), M.textColor && (z.eventTextColor = M.textColor), M.classNames.length && (z.eventClassNames = M.classNames), Object.keys(o.extendedProps).length && (e.collapseExtendedProps ? Object.assign(z, o.extendedProps) : z.extendedProps = o.extendedProps), z;
}
toJSON() {
return this.toPlainObject();
}
}
function Zu(t, e) {
let o = [];
for (let M in t)
o.push(new L0(e, t[M]));
return o;
}
class Er extends iM {
getKeyInfo(e) {
return Object.assign({ "": {} }, e.resourceStore);
}
getKeysForDateSpan(e) {
return [e.resourceId || ""];
}
getKeysForEventDef(e) {
let o = e.resourceIds;
return o.length ? o : [""];
}
}
const wM = Vo("id,title");
function Ju(t, e) {
let { emitter: o } = e;
o.hasHandlers("resourcesSet") && o.trigger("resourcesSet", Zu(t, e));
}
function e4(t) {
return {
resource: new L0(t.context, t.resource)
};
}
class t4 extends E {
constructor() {
super(...arguments), this.refineRenderProps = C1(M4);
}
render() {
const { props: e } = this;
return O(n1.Consumer, null, (o) => {
let { options: M } = o, b = this.refineRenderProps({
resource: e.resource,
date: e.date,
context: o
});
return O(b0, { elRef: e.elRef, elTag: e.elTag, elAttrs: Object.assign(Object.assign({}, e.elAttrs), { "data-resource-id": e.resource.id, "data-date": e.date ? ye(e.date) : void 0 }), elClasses: e.elClasses, elStyle: e.elStyle, renderProps: b, generatorName: "resourceLabelContent", customGenerator: M.resourceLabelContent, defaultGenerator: o4, classNameGenerator: M.resourceLabelClassNames, didMount: M.resourceLabelDidMount, willUnmount: M.resourceLabelWillUnmount }, e.children);
});
}
}
function o4(t) {
return t.resource.title || t.resource.id;
}
function M4(t) {
return {
resource: new L0(t.context, t.resource),
date: t.date ? t.context.dateEnv.toDate(t.date) : null,
view: t.context.viewApi
};
}
class to extends E {
render() {
let { props: e } = this;
return O(t4, { elTag: "th", elClasses: ["fc-col-header-cell", "fc-resource"], elAttrs: {
role: "columnheader",
colSpan: e.colSpan
}, resource: e.resource, date: e.date }, (o) => O(
"div",
{ className: "fc-scrollgrid-sync-inner" },
O(o, { elTag: "span", elClasses: [
"fc-col-header-cell-cushion",
e.isSticky && "fc-sticky"
] })
));
}
}
class wr extends E {
constructor() {
super(...arguments), this.buildDateFormat = L(b4);
}
render() {
let { props: e, context: o } = this, M = this.buildDateFormat(o.options.dayHeaderFormat, e.datesRepDistinctDays, e.dates.length);
return O(H0, { unit: "day" }, (b, z) => e.dates.length === 1 ? this.renderResourceRow(e.resources, e.dates[0]) : o.options.datesAboveResources ? this.renderDayAndResourceRows(e.dates, M, z, e.resources) : this.renderResourceAndDayRows(e.resources, e.dates, M, z));
}
renderResourceRow(e, o) {
let M = e.map((b) => O(to, { key: b.id, resource: b, colSpan: 1, date: o }));
return this.buildTr(M, "resources");
}
renderDayAndResourceRows(e, o, M, b) {
let z = [], n = [];
for (let p of e) {
z.push(this.renderDateCell(p, o, M, b.length, null, !0));
for (let r of b)
n.push(O(to, { key: r.id + ":" + p.toISOString(), resource: r, colSpan: 1, date: p }));
}
return O(
k,
null,
this.buildTr(z, "day"),
this.buildTr(n, "resources")
);
}
renderResourceAndDayRows(e, o, M, b) {
let z = [], n = [];
for (let p of e) {
z.push(O(to, { key: p.id, resource: p, colSpan: o.length, isSticky: !0 }));
for (let r of o)
n.push(this.renderDateCell(r, M, b, 1, p));
}
return O(
k,
null,
this.buildTr(z, "resources"),
this.buildTr(n, "day")
);
}
// a cell with date text. might have a resource associated with it
renderDateCell(e, o, M, b, z, n) {
let { props: p } = this, r = z ? `:${z.id}` : "", c = z ? { resource: new L0(this.context, z) } : {}, i = z ? { "data-resource-id": z.id } : {};
return p.datesRepDistinctDays ? O(dp, { key: e.toISOString() + r, date: e, dateProfile: p.dateProfile, todayRange: M, colCnt: p.dates.length * p.resources.length, dayHeaderFormat: o, colSpan: b, isSticky: n, extraRenderProps: c, extraDataAttrs: i }) : O(
Ap,
{ key: e.getUTCDay() + r, dow: e.getUTCDay(), dayHeaderFormat: o, colSpan: b, isSticky: n, extraRenderProps: c, extraDataAttrs: i }
);
}
buildTr(e, o) {
let { renderIntro: M } = this.props;
return e.length || (e = [O("td", { key: 0 }, " ")]), O(
"tr",
{ key: o, role: "row" },
M && M(o),
e
);
}
}
function b4(t, e, o) {
return t || sp(e, o);
}
class z4 {
constructor(e) {
let o = {}, M = [];
for (let b = 0; b < e.length; b += 1) {
let z = e[b].id;
M.push(z), o[z] = b;
}
this.ids = M, this.indicesById = o, this.length = e.length;
}
}
class Cr {
constructor(e, o, M) {
this.dayTableModel = e, this.resources = o, this.context = M, this.resourceIndex = new z4(o), this.rowCnt = e.rowCnt, this.colCnt = e.colCnt * o.length, this.cells = this.buildCells();
}
buildCells() {
let { rowCnt: e, dayTableModel: o, resources: M } = this, b = [];
for (let z = 0; z < e; z += 1) {
let n = [];
for (let p = 0; p < o.colCnt; p += 1)
for (let r = 0; r < M.length; r += 1) {
let c = M[r], i = { resource: new L0(this.context, c) }, a = { "data-resource-id": c.id }, s = ["fc-resource"], l = { resourceId: c.id }, d = o.cells[z][p].date;
n[this.computeCol(p, r)] = {
key: c.id + ":" + d.toISOString(),
date: d,
extraRenderProps: i,
extraDataAttrs: a,
extraClassNames: s,
extraDateSpan: l
};
}
b.push(n);
}
return b;
}
}
class Dr extends Cr {
computeCol(e, o) {
return o * this.dayTableModel.colCnt + e;
}
/*
all date ranges are intact
*/
computeColRanges(e, o, M) {
return [
{
firstCol: this.computeCol(e, M),
lastCol: this.computeCol(o, M),
isStart: !0,
isEnd: !0
}
];
}
}
class Xr extends Cr {
computeCol(e, o) {
return e * this.resources.length + o;
}
/*
every single day is broken up
*/
computeColRanges(e, o, M) {
let b = [];
for (let z = e; z <= o; z += 1) {
let n = this.computeCol(z, M);
b.push({
firstCol: n,
lastCol: n,
isStart: z === e,
isEnd: z === o
});
}
return b;
}
}
const gz = [];
class kr {
constructor() {
this.joinDateSelection = L(this.joinSegs), this.joinBusinessHours = L(this.joinSegs), this.joinFgEvents = L(this.joinSegs), this.joinBgEvents = L(this.joinSegs), this.joinEventDrags = L(this.joinInteractions), this.joinEventResizes = L(this.joinInteractions);
}
/*
propSets also has a '' key for things with no resource
*/
joinProps(e, o) {
let M = [], b = [], z = [], n = [], p = [], r = [], c = "", i = o.resourceIndex.ids.concat([""]);
for (let a of i) {
let s = e[a];
M.push(s.dateSelectionSegs), b.push(a ? s.businessHourSegs : gz), z.push(a ? s.fgEventSegs : gz), n.push(s.bgEventSegs), p.push(s.eventDrag), r.push(s.eventResize), c = c || s.eventSelection;
}
return {
dateSelectionSegs: this.joinDateSelection(o, ...M),
businessHourSegs: this.joinBusinessHours(o, ...b),
fgEventSegs: this.joinFgEvents(o, ...z),
bgEventSegs: this.joinBgEvents(o, ...n),
eventDrag: this.joinEventDrags(o, ...p),
eventResize: this.joinEventResizes(o, ...r),
eventSelection: c
};
}
joinSegs(e, ...o) {
let M = e.resources.length, b = [];
for (let z = 0; z < M; z += 1) {
for (let n of o[z])
b.push(...this.transformSeg(n, e, z));
for (let n of o[M])
b.push(...this.transformSeg(n, e, z));
}
return b;
}
/*
for expanding non-resource segs to all resources.
only for public use.
no memoizing.
*/
expandSegs(e, o) {
let M = e.resources.length, b = [];
for (let z = 0; z < M; z += 1)
for (let n of o)
b.push(...this.transformSeg(n, e, z));
return b;
}
joinInteractions(e, ...o) {
let M = e.resources.length, b = {}, z = [], n = !1, p = !1;
for (let r = 0; r < M; r += 1) {
let c = o[r];
if (c) {
n = !0;
for (let i of c.segs)
z.push(...this.transformSeg(i, e, r));
Object.assign(b, c.affectedInstances), p = p || c.isEvent;
}
if (o[M])
for (let i of o[M].segs)
z.push(...this.transformSeg(i, e, r));
}
return n ? {
affectedInstances: b,
segs: z,
isEvent: p
} : null;
}
}
class xr extends iM {
getKeyInfo(e) {
let { resourceDayTableModel: o } = e, M = d0(o.resourceIndex.indicesById, (b) => o.resources[b]);
return M[""] = {}, M;
}
getKeysForDateSpan(e) {
return [e.resourceId || ""];
}
getKeysForEventDef(e) {
let o = e.resourceIds;
return o.length ? o : [""];
}
}
function _r(t, e) {
return Ir(t, [], e, !1, {}, !0).map((o) => o.resource);
}
function Ir(t, e, o, M, b, z) {
let n = n4(t, M ? -1 : 1, e, o), p = [];
return T2(n, p, M, [], 0, b, z), p;
}
function T2(t, e, o, M, b, z, n) {
for (let p = 0; p < t.length; p += 1) {
let r = t[p], c = r.group;
if (c)
if (o) {
let i = e.length, a = M.length;
if (T2(r.children, e, o, M.concat(0), b, z, n), i < e.length) {
let s = e[i], l = s.rowSpans = s.rowSpans.slice();
l[a] = e.length - i;
}
} else {
let i = c.spec.field + ":" + c.value, a = z[i] != null ? z[i] : n;
e.push({ id: i, group: c, isExpanded: a }), a && T2(r.children, e, o, M, b + 1, z, n);
}
else if (r.resource) {
let i = r.resource.id, a = z[i] != null ? z[i] : n;
e.push({
id: i,
rowSpans: M,
depth: b,
isExpanded: a,
hasChildren: !!r.children.length,
resource: r.resource,
resourceFields: r.resourceFields
}), a && T2(r.children, e, o, M, b + 1, z, n);
}
}
}
function n4(t, e, o, M) {
let b = p4(t, M), z = [];
for (let n in b) {
let p = b[n];
p.resource.parentId || Pr(p, z, o, 0, e, M);
}
return z;
}
function p4(t, e) {
let o = {};
for (let M in t) {
let b = t[M];
o[M] = {
resource: b,
resourceFields: Ur(b),
children: []
};
}
for (let M in t) {
let b = t[M];
if (b.parentId) {
let z = o[b.parentId];
z && Hr(o[M], z.children, e);
}
}
return o;
}
function Pr(t, e, o, M, b, z) {
if (o.length && (b === -1 || M <= b)) {
let n = r4(t, e, o[0]);
Pr(t, n.children, o.slice(1), M + 1, b, z);
} else
Hr(t, e, z);
}
function r4(t, e, o) {
let M = t.resourceFields[o.field], b, z;
if (o.order)
for (z = 0; z < e.length; z += 1) {
let n = e[z];
if (n.group) {
let p = Tn(M, n.group.value) * o.order;
if (p === 0) {
b = n;
break;
} else if (p < 0)
break;
}
}
else
for (z = 0; z < e.length; z += 1) {
let n = e[z];
if (n.group && M === n.group.value) {
b = n;
break;
}
}
return b || (b = {
group: {
value: M,
spec: o
},
children: []
}, e.splice(z, 0, b)), b;
}
function Hr(t, e, o) {
let M;
for (M = 0; M < e.length && !(Nn(e[M].resourceFields, t.resourceFields, o) > 0); M += 1)
;
e.splice(M, 0, t);
}
function Ur(t) {
let e = Object.assign(Object.assign(Object.assign({}, t.extendedProps), t.ui), t);
return delete e.ui, delete e.extendedProps, e;
}
function c4(t, e) {
return t.spec === e.spec && t.value === e.value;
}
function i4(t, e, o) {
let M = e.dateSpan.resourceId, b = o.dateSpan.resourceId;
M && b && M !== b && (t.resourceMutation = {
matchResourceId: M,
setResourceId: b
});
}
function a4(t, e, o) {
let M = e.resourceMutation;
if (M && jr(t, o)) {
let b = t.resourceIds.indexOf(M.matchResourceId);
if (b !== -1) {
let z = t.resourceIds.slice();
z.splice(b, 1), z.indexOf(M.setResourceId) === -1 && z.push(M.setResourceId), t.resourceIds = z;
}
}
}
function jr(t, e) {
let { resourceEditable: o } = t;
if (o == null) {
let M = t.sourceId && e.getCurrentData().eventSources[t.sourceId];
M && (o = M.extendedProps.resourceEditable), o == null && (o = e.options.eventResourceEditable, o == null && (o = e.options.editable));
}
return o;
}
function s4(t, e) {
let { resourceMutation: o } = t;
if (o) {
let { calendarApi: M } = e;
return {
oldResource: M.getResourceById(o.matchResourceId),
newResource: M.getResourceById(o.setResourceId)
};
}
return {
oldResource: null,
newResource: null
};
}
class O4 {
constructor() {
this.filterResources = L(l4);
}
transform(e, o) {
return o.viewSpec.optionDefaults.needsResourceData ? {
resourceStore: this.filterResources(o.resourceStore, o.options.filterResourcesWithEvents, o.eventStore, o.dateProfile.activeRange),
resourceEntityExpansions: o.resourceEntityExpansions
} : null;
}
}
function l4(t, e, o, M) {
if (e) {
let b = d4(o.instances, M), z = A4(b, o.defs);
return Object.assign(z, u4(z, t)), h1(t, (n, p) => z[p]);
}
return t;
}
function d4(t, e) {
return h1(t, (o) => rt(o.range, e));
}
function A4(t, e) {
let o = {};
for (let M in t) {
let b = t[M];
for (let z of e[b.defId].resourceIds)
o[z] = !0;
}
return o;
}
function u4(t, e) {
let o = {};
for (let M in t) {
let b;
for (; (b = e[M]) && (M = b.parentId, M); )
o[M] = !0;
}
return o;
}
function q4(t, e, o, M) {
if (!t) {
let b = M.getCurrentData();
if (b.viewSpecs[b.currentViewType].optionDefaults.needsResourceData && jr(e, M))
return !0;
}
return t;
}
class f4 {
constructor() {
this.buildResourceEventUis = L(W4, f0), this.injectResourceEventUis = L(h4);
}
transform(e, o) {
return o.viewSpec.optionDefaults.needsResourceData ? null : {
eventUiBases: this.injectResourceEventUis(e.eventUiBases, e.eventStore.defs, this.buildResourceEventUis(o.resourceStore))
};
}
}
function W4(t) {
return d0(t, (e) => e.ui);
}
function h4(t, e, o) {
return d0(t, (M, b) => b ? R4(M, e[b], o) : M);
}
function R4(t, e, o) {
let M = [];
for (let b of e.resourceIds)
o[b] && M.unshift(o[b]);
return M.unshift(t), MM(M);
}
let CM = [];
function DM(t) {
CM.push(t);
}
function Fr(t) {
return CM[t];
}
function m4() {
return CM;
}
const g4 = {
id: String,
// for array. TODO: move to resource-array
resources: f,
// for json feed. TODO: move to resource-json-feed
url: String,
method: String,
startParam: String,
endParam: String,
timeZoneParam: String,
extraParams: f
};
function L4(t) {
let e;
if (typeof t == "string" ? e = { url: t } : typeof t == "function" || Array.isArray(t) ? e = { resources: t } : typeof t == "object" && t && (e = t), e) {
let { refined: o, extra: M } = b2(e, g4);
v4(M);
let b = y4(o);
if (b)
return {
_raw: t,
sourceId: z1(),
sourceDefId: b.sourceDefId,
meta: b.meta,
publicId: o.id || "",
isFetching: !1,
latestFetchId: "",
fetchRange: null
};
}
return null;
}
function y4(t) {
let e = m4();
for (let o = e.length - 1; o >= 0; o -= 1) {
let b = e[o].parseMeta(t);
if (b)
return { meta: b, sourceDefId: o };
}
return null;
}
function v4(t) {
for (let e in t)
console.warn(`Unknown resource prop '${e}'`);
}
function N4(t, e, o) {
let { options: M, dateProfile: b } = o;
if (!t || !e)
return Lz(M.initialResources || M.resources, b.activeRange, M.refetchResourcesOnNavigate, o);
switch (e.type) {
case "RESET_RESOURCE_SOURCE":
return Lz(e.resourceSourceInput, b.activeRange, M.refetchResourcesOnNavigate, o);
case "PREV":
// TODO: how do we track all actions that affect dateProfile :(
case "NEXT":
case "CHANGE_DATE":
case "CHANGE_VIEW_TYPE":
return T4(t, b.activeRange, M.refetchResourcesOnNavigate, o);
case "RECEIVE_RESOURCES":
case "RECEIVE_RESOURCE_ERROR":
return S4(t, e.fetchId, e.fetchRange);
case "REFETCH_RESOURCES":
return XM(t, b.activeRange, o);
default:
return t;
}
}
function Lz(t, e, o, M) {
if (t) {
let b = L4(t);
return b = XM(b, o ? e : null, M), b;
}
return null;
}
function T4(t, e, o, M) {
return o && !B4(t) && (!t.fetchRange || !In(t.fetchRange, e)) ? XM(t, e, M) : t;
}
function B4(t) {
return !!Fr(t.sourceDefId).ignoreRange;
}
function XM(t, e, o) {
let M = Fr(t.sourceDefId), b = z1();
return M.fetch({
resourceSource: t,
range: e,
context: o
}, (z) => {
o.dispatch({
type: "RECEIVE_RESOURCES",
fetchId: b,
fetchRange: e,
rawResources: z.rawResources
});
}, (z) => {
o.dispatch({
type: "RECEIVE_RESOURCE_ERROR",
fetchId: b,
fetchRange: e,
error: z
});
}), Object.assign(Object.assign({}, t), { isFetching: !0, latestFetchId: b });
}
function S4(t, e, o) {
return e === t.latestFetchId ? Object.assign(Object.assign({}, t), { isFetching: !1, fetchRange: o }) : t;
}
function E4(t, e, o, M) {
if (!t || !e)
return {};
switch (e.type) {
case "RECEIVE_RESOURCES":
return w4(t, e.rawResources, e.fetchId, o, M);
case "ADD_RESOURCE":
return C4(t, e.resourceHash);
case "REMOVE_RESOURCE":
return D4(t, e.resourceId);
case "SET_RESOURCE_PROP":
return X4(t, e.resourceId, e.propName, e.propValue);
case "SET_RESOURCE_EXTENDED_PROP":
return k4(t, e.resourceId, e.propName, e.propValue);
default:
return t;
}
}
function w4(t, e, o, M, b) {
if (M.latestFetchId === o) {
let z = {};
for (let n of e)
EM(n, "", z, b);
return z;
}
return t;
}
function C4(t, e) {
return Object.assign(Object.assign({}, t), e);
}
function D4(t, e) {
let o = Object.assign({}, t);
delete o[e];
for (let M in o)
o[M].parentId === e && (o[M] = Object.assign(Object.assign({}, o[M]), { parentId: "" }));
return o;
}
function X4(t, e, o, M) {
let b = t[e];
return b ? Object.assign(Object.assign({}, t), { [e]: Object.assign(Object.assign({}, b), { [o]: M }) }) : t;
}
function k4(t, e, o, M) {
let b = t[e];
return b ? Object.assign(Object.assign({}, t), { [e]: Object.assign(Object.assign({}, b), { extendedProps: Object.assign(Object.assign({}, b.extendedProps), { [o]: M }) }) }) : t;
}
function x4(t, e) {
return !t || !e ? {} : e.type === "SET_RESOURCE_ENTITY_EXPANDED" ? Object.assign(Object.assign({}, t), { [e.id]: e.isExpanded }) : t;
}
function _4(t, e, o) {
let M = N4(t && t.resourceSource, e, o), b = E4(t && t.resourceStore, e, M, o), z = x4(t && t.resourceEntityExpansions, e);
return {
resourceSource: M,
resourceStore: b,
resourceEntityExpansions: z
};
}
const I4 = {
resourceId: String,
resourceIds: f,
resourceEditable: Boolean
};
function P4(t) {
return {
resourceIds: H4(t.resourceIds).concat(t.resourceId ? [t.resourceId] : []),
resourceEditable: t.resourceEditable
};
}
function H4(t) {
return (t || []).map((e) => String(e));
}
function U4(t, e) {
let o = t.dateSpan.resourceId, M = e.dateSpan.resourceId;
return o && M ? { resourceId: o } : null;
}
Ne.prototype.addResource = function(t, e = !0) {
let o = this.getCurrentData(), M, b;
t instanceof L0 ? (b = t._resource, M = { [b.id]: b }) : (M = {}, b = EM(t, "", M, o)), this.dispatch({
type: "ADD_RESOURCE",
resourceHash: M
}), e && this.trigger("_scrollRequest", { resourceId: b.id });
let z = new L0(o, b);
return o.emitter.trigger("resourceAdd", {
resource: z,
revert: () => {
this.dispatch({
type: "REMOVE_RESOURCE",
resourceId: b.id
});
}
}), z;
};
Ne.prototype.getResourceById = function(t) {
t = String(t);
let e = this.getCurrentData();
if (e.resourceStore) {
let o = e.resourceStore[t];
if (o)
return new L0(e, o);
}
return null;
};
Ne.prototype.getResources = function() {
let t = this.getCurrentData(), { resourceStore: e } = t, o = [];
if (e)
for (let M in e)
o.push(new L0(t, e[M]));
return o;
};
Ne.prototype.getTopLevelResources = function() {
let t = this.getCurrentData(), { resourceStore: e } = t, o = [];
if (e)
for (let M in e)
e[M].parentId || o.push(new L0(t, e[M]));
return o;
};
Ne.prototype.refetchResources = function() {
this.dispatch({
type: "REFETCH_RESOURCES"
});
};
function j4(t, e) {
return t.resourceId ? { resource: e.calendarApi.getResourceById(t.resourceId) } : {};
}
function F4(t, e) {
return t.resourceId ? { resource: e.calendarApi.getResourceById(t.resourceId) } : {};
}
function G4(t, e) {
let M = new Er().splitProps(Object.assign(Object.assign({}, t), { resourceStore: e.getCurrentData().resourceStore }));
for (let b in M) {
let z = M[b];
if (b && M[""] && (z = Object.assign(Object.assign({}, z), { eventStore: at(M[""].eventStore, z.eventStore), eventUiBases: Object.assign(Object.assign({}, M[""].eventUiBases), z.eventUiBases) })), !hp(z, e, { resourceId: b }, Y4.bind(null, b)))
return !1;
}
return !0;
}
function Y4(t, e) {
return Object.assign(Object.assign({}, e), { constraints: V4(t, e.constraints) });
}
function V4(t, e) {
return e.map((o) => {
let M = o.defs;
if (M)
for (let b in M) {
let z = M[b].resourceIds;
if (z.length && z.indexOf(t) === -1)
return !1;
}
return o;
});
}
function Q4(t) {
return t.resourceId ? { resourceId: t.resourceId } : {};
}
const K4 = {
resources: $4
};
function $4(t, e) {
e.getCurrentData().resourceSource._raw !== t && e.dispatch({
type: "RESET_RESOURCE_SOURCE",
resourceSourceInput: t
});
}
const Z4 = {
initialResources: f,
resources: f,
eventResourceEditable: Boolean,
refetchResourcesOnNavigate: Boolean,
resourceOrder: Vo,
filterResourcesWithEvents: Boolean,
resourceGroupField: String,
resourceAreaWidth: f,
resourceAreaColumns: f,
resourcesInitiallyExpanded: Boolean,
datesAboveResources: Boolean,
needsResourceData: Boolean,
resourceAreaHeaderClassNames: f,
resourceAreaHeaderContent: f,
resourceAreaHeaderDidMount: f,
resourceAreaHeaderWillUnmount: f,
resourceGroupLabelClassNames: f,
resourceGroupLabelContent: f,
resourceGroupLabelDidMount: f,
resourceGroupLabelWillUnmount: f,
resourceLabelClassNames: f,
resourceLabelContent: f,
resourceLabelDidMount: f,
resourceLabelWillUnmount: f,
resourceLaneClassNames: f,
resourceLaneContent: f,
resourceLaneDidMount: f,
resourceLaneWillUnmount: f,
resourceGroupLaneClassNames: f,
resourceGroupLaneContent: f,
resourceGroupLaneDidMount: f,
resourceGroupLaneWillUnmount: f
}, J4 = {
resourcesSet: f,
resourceAdd: f,
resourceChange: f,
resourceRemove: f
};
M0.prototype.getResources = function() {
let { calendarApi: t } = this._context;
return this._def.resourceIds.map((e) => t.getResourceById(e));
};
M0.prototype.setResources = function(t) {
let e = [];
for (let o of t) {
let M = null;
typeof o == "string" ? M = o : typeof o == "number" ? M = String(o) : o instanceof L0 ? M = o.id : console.warn("unknown resource type: " + o), M && e.push(M);
}
this.mutate({
standardProps: {
resourceIds: e
}
});
};
DM({
ignoreRange: !0,
parseMeta(t) {
return Array.isArray(t.resources) ? t.resources : null;
},
fetch(t, e) {
e({
rawResources: t.resourceSource.meta
});
}
});
DM({
parseMeta(t) {
return typeof t.resources == "function" ? t.resources : null;
},
fetch(t, e, o) {
const M = t.context.dateEnv, b = t.resourceSource.meta, z = t.range ? {
start: M.toDate(t.range.start),
end: M.toDate(t.range.end),
startStr: M.formatIso(t.range.start),
endStr: M.formatIso(t.range.end),
timeZone: M.timeZone
} : {};
op(b.bind(null, z), (n) => e({ rawResources: n }), o);
}
});
DM({
parseMeta(t) {
return t.url ? {
url: t.url,
method: (t.method || "GET").toUpperCase(),
extraParams: t.extraParams
} : null;
},
fetch(t, e, o) {
const M = t.resourceSource.meta, b = eq(M, t.range, t.context);
Mp(M.method, M.url, b).then(([z, n]) => {
e({ rawResources: z, response: n });
}, o);
}
});
function eq(t, e, o) {
let { dateEnv: M, options: b } = o, z, n, p, r, c = {};
return e && (z = t.startParam, z == null && (z = b.startParam), n = t.endParam, n == null && (n = b.endParam), p = t.timeZoneParam, p == null && (p = b.timeZoneParam), c[z] = M.formatIso(e.start), c[n] = M.formatIso(e.end), M.timeZone !== "local" && (c[p] = M.timeZone)), typeof t.extraParams == "function" ? r = t.extraParams() : r = t.extraParams || {}, Object.assign(c, r), c;
}
var ht = a0({
name: "@fullcalendar/resource",
premiumReleaseDate: "2025-08-10",
deps: [Me],
reducers: [_4],
isLoadingFuncs: [
(t) => t.resourceSource && t.resourceSource.isFetching
],
eventRefiners: I4,
eventDefMemberAdders: [P4],
isDraggableTransformers: [q4],
eventDragMutationMassagers: [i4],
eventDefMutationAppliers: [a4],
dateSelectionTransformers: [U4],
datePointTransforms: [j4],
dateSpanTransforms: [F4],
viewPropsTransformers: [O4, f4],
isPropsValid: G4,
externalDefTransforms: [Q4],
eventDropTransformers: [s4],
optionChangeHandlers: K4,
optionRefiners: Z4,
listenerRefiners: J4,
propSetHandlers: { resourceStore: Ju }
});
class tq extends kr {
transformSeg(e, o, M) {
return o.computeColRanges(e.firstCol, e.lastCol, M).map((z) => Object.assign(Object.assign(Object.assign({}, e), z), { isStart: e.isStart && z.isStart, isEnd: e.isEnd && z.isEnd }));
}
}
class Gr extends W0 {
constructor() {
super(...arguments), this.splitter = new xr(), this.slicers = {}, this.joiner = new tq(), this.tableRef = j(), this.isHitComboAllowed = (e, o) => this.props.resourceDayTableModel.dayTableModel.colCnt === 1 || e.dateSpan.resourceId === o.dateSpan.resourceId;
}
render() {
let { props: e, context: o } = this, { resourceDayTableModel: M, nextDayThreshold: b, dateProfile: z } = e, n = this.splitter.splitProps(e);
this.slicers = d0(n, (r, c) => this.slicers[c] || new yM());
let p = d0(this.slicers, (r, c) => r.sliceProps(n[c], z, b, o, M.dayTableModel));
return O(or, Object.assign({ forPrint: e.forPrint, ref: this.tableRef }, this.joiner.joinProps(p, M), { cells: M.cells, dateProfile: z, 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, isHitComboAllowed: this.isHitComboAllowed }));
}
}
class oq extends Yp {
constructor() {
super(...arguments), this.flattenResources = L(_r), this.buildResourceDayTableModel = L(Mq), this.headerRef = j(), this.tableRef = j();
}
render() {
let { props: e, context: o } = this, { options: M } = o, b = M.resourceOrder || wM, z = this.flattenResources(e.resourceStore, b), n = this.buildResourceDayTableModel(e.dateProfile, o.dateProfileGenerator, z, M.datesAboveResources, o), p = M.dayHeaders && O(wr, { ref: this.headerRef, resources: z, dateProfile: e.dateProfile, dates: n.dayTableModel.headerDates, datesRepDistinctDays: !0 }), r = (c) => O(Gr, { ref: this.tableRef, dateProfile: e.dateProfile, resourceDayTableModel: n, businessHours: e.businessHours, eventStore: e.eventStore, eventUiBases: e.eventUiBases, dateSelection: e.dateSelection, eventSelection: e.eventSelection, eventDrag: e.eventDrag, eventResize: e.eventResize, nextDayThreshold: M.nextDayThreshold, tableMinWidth: c.tableMinWidth, colGroupNode: c.tableColGroupNode, dayMaxEvents: M.dayMaxEvents, dayMaxEventRows: M.dayMaxEventRows, showWeekNumbers: M.weekNumbers, expandRows: !e.isHeightAuto, headerAlignElRef: this.headerElRef, clientWidth: c.clientWidth, clientHeight: c.clientHeight, forPrint: e.forPrint });
return M.dayMinWidth ? this.renderHScrollLayout(p, r, n.colCnt, M.dayMinWidth) : this.renderSimpleLayout(p, r);
}
}
function Mq(t, e, o, M, b) {
let z = vM(t, e);
return M ? new Xr(z, o, b) : new Dr(z, o, b);
}
var bq = a0({
name: "@fullcalendar/resource-daygrid",
premiumReleaseDate: "2025-08-10",
deps: [
Me,
ht,
nr
],
initialView: "resourceDayGridDay",
views: {
resourceDayGrid: {
type: "dayGrid",
component: oq,
needsResourceData: !0
},
resourceDayGridDay: {
type: "resourceDayGrid",
duration: { days: 1 }
},
resourceDayGridWeek: {
type: "resourceDayGrid",
duration: { weeks: 1 }
},
resourceDayGridMonth: {
type: "resourceDayGrid",
duration: { months: 1 },
fixedWeekCount: !0
}
}
});
function Yr({ depth: t, hasChildren: e, isExpanded: o, onExpanderClick: M }) {
let b = [];
for (let n = 0; n < t; n += 1)
b.push(O("span", { className: "fc-icon" }));
let z = ["fc-icon"];
return e && (o ? z.push("fc-icon-minus-square") : z.push("fc-icon-plus-square")), b.push(O(
"span",
{ className: "fc-datagrid-expander" + (e ? "" : " fc-datagrid-expander-placeholder"), onClick: M },
O("span", { className: z.join(" ") })
)), O(k, {}, ...b);
}
class zq extends E {
constructor() {
super(...arguments), this.refineRenderProps = C1(pq), this.onExpanderClick = (e) => {
let { props: o } = this;
o.hasChildren && this.context.dispatch({
type: "SET_RESOURCE_ENTITY_EXPANDED",
id: o.resource.id,
isExpanded: !o.isExpanded
});
};
}
render() {
let { props: e, context: o } = this, { colSpec: M } = e, b = this.refineRenderProps({
resource: e.resource,
fieldValue: e.fieldValue,
context: o
});
return O(b0, { elTag: "td", elClasses: [
"fc-datagrid-cell",
"fc-resource"
], elAttrs: {
role: "gridcell",
"data-resource-id": e.resource.id
}, renderProps: b, generatorName: M.isMain ? "resourceLabelContent" : void 0, customGenerator: M.cellContent, defaultGenerator: nq, classNameGenerator: M.cellClassNames, didMount: M.cellDidMount, willUnmount: M.cellWillUnmount }, (z) => O(
"div",
{ className: "fc-datagrid-cell-frame", style: { height: e.innerHeight } },
O(
"div",
{ className: "fc-datagrid-cell-cushion fc-scrollgrid-sync-inner" },
M.isMain && O(Yr, { depth: e.depth, hasChildren: e.hasChildren, isExpanded: e.isExpanded, onExpanderClick: this.onExpanderClick }),
O(z, { elTag: "span", elClasses: ["fc-datagrid-cell-main"] })
)
));
}
}
function nq(t) {
return t.fieldValue || O(k, null, " ");
}
function pq(t) {
return {
resource: new L0(t.context, t.resource),
fieldValue: t.fieldValue,
view: t.context.viewApi
};
}
class rq extends E {
render() {
let { props: e, context: o } = this, { colSpec: M } = e, b = {
groupValue: e.fieldValue,
view: o.viewApi
};
return O(b0, { elTag: "td", elClasses: [
"fc-datagrid-cell",
"fc-resource-group"
], elAttrs: {
role: "gridcell",
rowSpan: e.rowSpan
}, renderProps: b, generatorName: "resourceGroupLabelContent", customGenerator: M.cellContent, defaultGenerator: cq, classNameGenerator: M.cellClassNames, didMount: M.cellDidMount, willUnmount: M.cellWillUnmount }, (z) => O(
"div",
{ className: "fc-datagrid-cell-frame fc-datagrid-cell-frame-liquid" },
O(z, { elTag: "div", elClasses: ["fc-datagrid-cell-cushion", "fc-sticky"] })
));
}
}
function cq(t) {
return t.groupValue || O(k, null, " ");
}
class Vr extends E {
render() {
let { props: e } = this, { resource: o, rowSpans: M, depth: b } = e, z = Ur(o);
return O("tr", { role: "row" }, e.colSpecs.map((n, p) => {
let r = M[p];
if (r === 0)
return null;
r == null && (r = 1);
let c = n.field ? z[n.field] : o.title || Sr(o.id);
return r > 1 ? O(rq, { key: p, colSpec: n, fieldValue: c, rowSpan: r }) : O(zq, { key: p, colSpec: n, resource: o, fieldValue: c, depth: b, hasChildren: e.hasChildren, isExpanded: e.isExpanded, innerHeight: e.innerHeight });
}));
}
}
Vr.addPropsEquality({
rowSpans: C0
});
class Qr extends E {
constructor() {
super(...arguments), this.innerInnerRef = j(), this.onExpanderClick = () => {
let { props: e } = this;
this.context.dispatch({
type: "SET_RESOURCE_ENTITY_EXPANDED",
id: e.id,
isExpanded: !e.isExpanded
});
};
}
render() {
let { props: e, context: o } = this, M = { groupValue: e.group.value, view: o.viewApi }, b = e.group.spec;
return O(
"tr",
{ role: "row" },
O(b0, { elTag: "th", elClasses: [
"fc-datagrid-cell",
"fc-resource-group",
o.theme.getClass("tableCellShaded")
], elAttrs: {
// ARIA TODO: not really a columnheader
// extremely tedious to make this aria-compliant,
// to assign multiple headers to each cell
// https://www.w3.org/WAI/tutorials/tables/multi-level/
role: "columnheader",
scope: "colgroup",
colSpan: e.spreadsheetColCnt
}, renderProps: M, generatorName: "resourceGroupLabelContent", customGenerator: b.labelContent, defaultGenerator: iq, classNameGenerator: b.labelClassNames, didMount: b.labelDidMount, willUnmount: b.labelWillUnmount }, (z) => O(
"div",
{ className: "fc-datagrid-cell-frame", style: { height: e.innerHeight } },
O(
"div",
{ className: "fc-datagrid-cell-cushion fc-scrollgrid-sync-inner", ref: this.innerInnerRef },
O(Yr, { depth: 0, hasChildren: !0, isExpanded: e.isExpanded, onExpanderClick: this.onExpanderClick }),
O(z, { elTag: "span", elClasses: ["fc-datagrid-cell-main"] })
)
))
);
}
}
Qr.addPropsEquality({
group: c4
});
function iq(t) {
return t.groupValue || O(k, null, " ");
}
const aq = 20;
class sq extends E {
constructor() {
super(...arguments), this.resizerElRefs = new h0(this._handleColResizerEl.bind(this)), this.colDraggings = {};
}
render() {
let { colSpecs: e, superHeaderRendering: o, rowInnerHeights: M } = this.props, b = { view: this.context.viewApi }, z = [];
if (M = M.slice(), o) {
let p = M.shift();
z.push(O(
"tr",
{ key: "row-super", role: "row" },
O(b0, { elTag: "th", elClasses: [
"fc-datagrid-cell",
"fc-datagrid-cell-super"
], elAttrs: {
role: "columnheader",
scope: "colgroup",
colSpan: e.length
}, renderProps: b, generatorName: "resourceAreaHeaderContent", customGenerator: o.headerContent, defaultGenerator: o.headerDefault, classNameGenerator: o.headerClassNames, didMount: o.headerDidMount, willUnmount: o.headerWillUnmount }, (r) => O(
"div",
{ className: "fc-datagrid-cell-frame", style: { height: p } },
O(r, { elTag: "div", elClasses: ["fc-datagrid-cell-cushion", "fc-scrollgrid-sync-inner"] })
))
));
}
let n = M.shift();
return z.push(O("tr", { key: "row", role: "row" }, e.map((p, r) => {
let c = r === e.length - 1;
return O(b0, { key: r, elTag: "th", elClasses: ["fc-datagrid-cell"], elAttrs: { role: "columnheader" }, renderProps: b, generatorName: "resourceAreaHeaderContent", customGenerator: p.headerContent, defaultGenerator: p.headerDefault, classNameGenerator: p.headerClassNames, didMount: p.headerDidMount, willUnmount: p.headerWillUnmount }, (i) => O(
"div",
{ className: "fc-datagrid-cell-frame", style: { height: n } },
O(
"div",
{ className: "fc-datagrid-cell-cushion fc-scrollgrid-sync-inner" },
p.isMain && O(
"span",
{ className: "fc-datagrid-expander fc-datagrid-expander-placeholder" },
O("span", { className: "fc-icon" })
),
O(i, { elTag: "span", elClasses: ["fc-datagrid-cell-main"] })
),
!c && O("div", { className: "fc-datagrid-cell-resizer", ref: this.resizerElRefs.createRef(r) })
));
}))), O(k, null, z);
}
_handleColResizerEl(e, o) {
let { colDraggings: M } = this;
if (e) {
let b = this.initColResizing(e, parseInt(o, 10));
b && (M[o] = b);
} else {
let b = M[o];
b && (b.destroy(), delete M[o]);
}
}
initColResizing(e, o) {
let { pluginHooks: M, isRtl: b } = this.context, { onColWidthChange: z } = this.props, n = M.elementDraggingImpl;
if (n) {
let p = new n(e), r, c;
return p.emitter.on("dragstart", () => {
c = te(q0(e, "tr"), "th").map((a) => a.getBoundingClientRect().width), r = c[o];
}), p.emitter.on("dragmove", (i) => {
c[o] = Math.max(r + i.deltaX * (b ? -1 : 1), aq), z && z(c.slice());
}), p.setAutoScrollEnabled(!1), p;
}
return null;
}
}
class Oq extends E {
constructor() {
super(...arguments), this.refineRenderProps = C1(e4), this.handleHeightChange = (e, o) => {
this.props.onHeightChange && this.props.onHeightChange(
// would want to use own