UNPKG

@r365/react-calendar-timeline

Version:
1,479 lines 96 kB
import { jsx as m, jsxs as E } from "react/jsx-runtime"; import { Temporal as M } from "@js-temporal/polyfill"; import S, { useContext as Re, Component as I, createElement as Ze, PureComponent as Xe } from "react"; import { windowListeners as fe } from "./react-calendar-timeline.resize-detector.es.js"; import { containerListeners as Ir } from "./react-calendar-timeline.resize-detector.es.js"; import V from "classnames"; import X from "interactjs"; import './styles.css';/* empty css */ const Ve = typeof Element < "u", Be = typeof Map == "function", Ye = typeof Set == "function", _e = typeof ArrayBuffer == "function" && !!ArrayBuffer.isView; function U(r, e) { if (r === e) return !0; if (r && e && typeof r == "object" && typeof e == "object") { if (r.constructor !== e.constructor) return !1; let t, i; if (Array.isArray(r)) { if (t = r.length, t != e.length) return !1; for (i = t; i-- !== 0; ) if (!U(r[i], e[i])) return !1; return !0; } let s; if (Be && r instanceof Map && e instanceof Map) { if (r.size !== e.size) return !1; for (s = r.entries(); !(i = s.next()).done; ) if (!e.has(i.value[0])) return !1; for (s = r.entries(); !(i = s.next()).done; ) if (!U(i.value[1], e.get(i.value[0]))) return !1; return !0; } if (Ye && r instanceof Set && e instanceof Set) { if (r.size !== e.size) return !1; for (s = r.entries(); !(i = s.next()).done; ) if (!e.has(i.value[0])) return !1; return !0; } if (_e && ArrayBuffer.isView(r) && ArrayBuffer.isView(e)) { if (t = r.length, t != e.length) return !1; for (i = t; i-- !== 0; ) if (r[i] !== e[i]) return !1; return !0; } if (r.constructor === RegExp) return r.source === e.source && r.flags === e.flags; if (r.constructor === M.ZonedDateTime) return r.equals(e); if (r.valueOf !== Object.prototype.valueOf && typeof r.valueOf == "function" && typeof e.valueOf == "function") return r.valueOf() === e.valueOf(); if (r.toString !== Object.prototype.toString && typeof r.toString == "function" && typeof e.toString == "function") return r.toString() === e.toString(); const n = Object.keys(r); if (t = n.length, t !== Object.keys(e).length) return !1; for (i = t; i-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(e, n[i])) return !1; if (Ve && r instanceof Element) return !1; for (i = t; i-- !== 0; ) if (!((n[i] === "_owner" || n[i] === "__v" || n[i] === "__o") && r.$$typeof) && !U(r[n[i]], e[n[i]])) return !1; return !0; } return r !== r && e !== e; } function B(r, e) { try { return U(r, e); } catch (t) { if (typeof t == "object" && t !== null && "message" in t && typeof t.message == "string" && (t.message || "").match(/stack|recursion/i)) return console.warn("react-fast-compare cannot handle circular refs"), !1; throw t; } } function v(r, e) { return typeof r.get == "function" ? r.get(e) : r[e]; } function ge(r) { return typeof r.count == "function" ? r.count() : r.length; } function W(r, e) { return ge(r) === ge(e) && r.every((t, i) => t === v(e, i.toString())); } function qe(r, e) { const t = {}; return r.forEach((i) => { t[i[e]] = i; }), t; } function N() { } function G(r, e) { return M.Instant.fromEpochMilliseconds(r).toZonedDateTimeISO(e); } function ie(r, e, t) { const i = `${t}s`; return r.add({ [i]: e }); } function L(r, e) { const t = { millisecond: 0, microsecond: 0, nanosecond: 0 }; switch (e) { case "year": return r.with({ ...t, second: 0, minute: 0, hour: 0, day: 1, month: 1 }); case "month": return r.with({ ...t, second: 0, minute: 0, hour: 0, day: 1 }); case "day": return r.with({ ...t, second: 0, minute: 0, hour: 0 }); case "hour": return r.with({ ...t, second: 0, minute: 0 }); case "minute": return r.with({ ...t, second: 0 }); case "second": return r.with(t); default: return r; } } function Ie(r, e) { return L(ie(r, 1, e), e).subtract({ milliseconds: 1 }); } function Je(r, e, t) { if (t <= 1) return r; const i = r[e] % t; return i === 0 ? r : L(ie(r, -i, e), e); } function O(r) { if (typeof r == "number") return r; if (r instanceof M.ZonedDateTime || r instanceof M.Instant) return r.epochMilliseconds; if (r instanceof Date) return r.valueOf(); if (typeof r == "object" && r !== null && "valueOf" in r && typeof r.valueOf == "function") { const e = r.valueOf(); if (typeof e == "number") return e; } throw new Error("Unable to convert value to epoch milliseconds"); } function ze(r) { try { return M.Now.instant().toZonedDateTimeISO(r).offsetNanoseconds / 1e6; } catch { return 0; } } function Y(r, e, t) { return (e - r) / t; } function $(r, e, t, i) { const s = t / (e - r); return (i - r) * s; } function se(r, e, t, i) { return (e - r) / t * i + r; } function ne(r, e, t, i, s, n) { const a = i[t] || 1; let l = Je(L(G(r, s), t), t, a); for (; l.epochMilliseconds < e; ) { const h = L(ie(l, a, t), t); n(l, h), l = h; } } const _ = 17; function F(r, e, t) { const i = { second: 1e3, minute: 60, hour: 60, day: 24, month: 30, year: 12 }; let s = "year", n = r; return Object.keys(i).some((a) => { const l = a; n = n / i[l]; const h = n / t[l], p = t[l] && t[l] > 1 ? 3 * _ : _, d = e / p; if (h < d) return s = a, !0; }), s; } const q = { second: "minute", minute: "hour", hour: "day", day: "month", month: "year", year: "year" }; function oe(r) { if (!q[r]) throw new Error(`unit ${r} is not acceptable`); return q[r]; } function Me({ itemTimeStart: r, itemTimeEnd: e, dragTime: t, isDragging: i, isResizing: s, resizingEdge: n, resizeTime: a }) { const l = e - r; return [ i && t ? t : s && n === "left" && a ? a : r, i && t ? t + l : s && n === "right" && a ? a : e ]; } function Oe({ itemTimeStart: r, itemTimeEnd: e, canvasTimeStart: t, canvasTimeEnd: i, canvasWidth: s }) { const n = e - r, a = Math.max(r, t), l = Math.min(e, i), h = $(t, i, s, a), d = $(t, i, s, l) - h; return { left: h, width: Math.max(d, 3), collisionLeft: r, collisionWidth: n }; } function ae(r, e) { const { groupIdKey: t } = e, i = {}; for (let s = 0; s < r.length; s++) i[v(r[s], t)] = { index: s, group: r[s] }; return i; } function ke(r, e) { var s, n; const t = {}, i = Object.keys(e); for (let a = 0; a < i.length; a++) { const l = e[i[a]]; t[a] = { index: l.index, group: l.group, items: [] }; } for (let a = 0; a < r.length; a++) if (r[a].dimensions !== void 0 && ((s = r[a].dimensions) == null ? void 0 : s.order) !== void 0) { const l = t[((n = r[a].dimensions) == null ? void 0 : n.order.index) ?? 0]; l && l.items.push(r[a]); } return t; } function le(r, e, t, i) { const { itemTimeStartKey: s, itemTimeEndKey: n } = i; return r.filter((a) => { const l = O(v(a, s)), h = O(v(a, n)); return l <= t && h >= e; }); } const Qe = 1e-3; function De(r, e, t, i = Qe) { return r.collisionLeft + i < e.collisionLeft + e.collisionWidth && r.collisionLeft + r.collisionWidth - i > e.collisionLeft && r.top - t + i < e.top + e.height && r.top + r.height + t - i > e.top; } function Pe(r, e, t, i, s, n, a) { let l = i; const h = a ?? (r - e.dimensions.height) / 2; if (e.dimensions.stack && e.dimensions.top === null) { e.dimensions.top = s + h, l = Math.max(l, r, e.dimensions.height + h * 2); do { var p = null; for (let d = n - 1, b = 0; d >= b; d--) { const o = t[d]; if (o.dimensions.top !== null && o.dimensions.stack && De(e.dimensions, o.dimensions, h)) { p = o; break; } } p != null && (e.dimensions.top = p.dimensions.top + p.dimensions.height + /* backward compatibility where gap between items is 2 */ h * (a !== void 0 ? 1 : 2), l = Math.max(l, e.dimensions.top + e.dimensions.height + h - s)); } while (p); } return { groupHeight: l, verticalMargin: h, itemTop: e.dimensions.top }; } function Ee(r, e, t, i, s) { var a, l; const n = s ?? (r - (((a = e.dimensions) == null ? void 0 : a.height) ?? 1)) / 2; return e.dimensions && e.dimensions.top === null && (e.dimensions.top = i + n, t = Math.max(t, r, e.dimensions.height + n)), { groupHeight: t, verticalMargin: 0, itemTop: ((l = e.dimensions) == null ? void 0 : l.top) ?? 0 }; } function be(r = []) { return r.reduce((e, t) => e + t, 0); } function je(r, e, t, i, s) { const n = [], a = [], l = ke(r, e); for (const h in l) { const p = l[h], { items: d, group: b } = p, o = be(n), c = b.stackItems !== void 0 ? b.stackItems : i, { groupHeight: u } = Le(d, c, t, o, s); a.push(o), b.height ? n.push(b.height) : n.push(Math.max(u, t)); } return { height: be(n), groupHeights: n, groupTops: a }; } function Le(r, e, t, i, s) { let n = 0, a = 0; for (let l = 0; l < r.length; l++) { const h = e ? Pe(t, r[l], r, n, i, l, s) : Ee(t, r[l], n, i, s); n = h.groupHeight, a = h.verticalMargin; } return { groupHeight: n, verticalMargin: a }; } function j(r, e, t, i, s, n, a, l, h, p, d, b, o, c, u, f) { const T = le(r, i, s, n).map((R) => xe({ item: R, keys: n, draggingItem: p, resizingItem: d, dragTime: b, resizingEdge: o, resizeTime: c, groups: e, newGroupOrder: u })); if (e.length === 0) return { dimensionItems: [], height: 0, groupHeights: [], groupTops: [] }; const y = ae(e, n), w = T.map((R) => We({ item: R, keys: n, canvasTimeStart: i, canvasTimeEnd: s, canvasWidth: t, groupOrders: y, lineHeight: a, itemHeightRatio: l, itemVerticalGap: f })).filter((R) => !!R), { height: C, groupHeights: z, groupTops: x } = je(w, y, a, h, f); return { dimensionItems: w, height: C, groupHeights: z, groupTops: x }; } function J(r = !0) { return r ? 3 : 1; } function k(r, e) { return r * e; } function We({ item: r, keys: e, canvasTimeStart: t, canvasTimeEnd: i, canvasWidth: s, groupOrders: n, lineHeight: a, itemHeightRatio: l, itemVerticalGap: h }) { const p = v(r, e.itemIdKey), d = Oe({ itemTimeStart: O(v(r, e.itemTimeStartKey)), itemTimeEnd: O(v(r, e.itemTimeEndKey)), canvasTimeStart: t, canvasTimeEnd: i, canvasWidth: s }); if (d) return d.top = null, d.order = n[v(r, e.itemGroupKey)], d.stack = !r.isOverlay, d.height = (r.height || a) * (typeof h > "u" ? l : 1), { id: p, dimensions: d }; } function xe({ item: r, keys: e, draggingItem: t, resizingItem: i, dragTime: s, resizingEdge: n, resizeTime: a, groups: l, newGroupOrder: h }) { if (!i && !t) return r; const p = v(r, e.itemIdKey), d = p === t, b = p === i, o = v(r, e.itemTimeStartKey), c = v(r, e.itemTimeEndKey), [u, f] = Me({ itemTimeStart: O(o), itemTimeEnd: O(c), isDragging: d, isResizing: b, dragTime: s, resizingEdge: n, resizeTime: a }); return { ...r, [e.itemTimeStartKey]: o instanceof M.ZonedDateTime ? G(u, o.timeZoneId) : u, [e.itemTimeEndKey]: c instanceof M.ZonedDateTime ? G(f, c.timeZoneId) : f, [e.itemGroupKey]: d ? v(l[h], e.groupIdKey) : v(r, e.itemGroupKey) }; } function ue(r, e, t, i = !0) { if (!i) return [r, e]; const s = e - r, n = r - s * (t - 1) / 2, a = n + s * t; return [n, a]; } function Q(r, e, t, i, s, n, a) { const l = n.buffer, h = a.canvasTimeStart, p = a.canvasTimeEnd, d = a.visibleTimeEnd - a.visibleTimeStart, b = e - r, o = { ...a, visibleTimeStart: r, visibleTimeEnd: e }; if (!(b === d && r >= h + d * 0.5 && r <= p - d * 1.5 && e >= h + d * 1.5 && e <= p - d * 0.5) || t) { const [u, f] = ue(r, e, l, n.resizableCanvas); o.canvasTimeStart = u, o.canvasTimeEnd = f; const g = { ...a, ...o }, T = k(g.width, a.canvasWidthFactor); Object.assign(o, j(i, s, T, g.canvasTimeStart, g.canvasTimeEnd, n.keys, n.lineHeight, n.itemHeightRatio, n.stackItems, g.draggingItem, g.resizingItem, g.dragTime, g.resizingEdge, g.resizeTime, g.newGroupOrder, n.itemVerticalGap)); } return o; } const vr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, NEXT_UNITS: q, calculateDimensions: Oe, calculateInteractionNewTimes: Me, calculateScrollCanvas: Q, calculateTimeForXPosition: se, calculateXPositionForTime: $, collision: De, coordinateToTimeRatio: Y, getCanvasBoundariesFromVisibleTime: ue, getCanvasWidth: k, getCanvasWidthFactor: J, getEndOfUnit: Ie, getGroupOrders: ae, getGroupedItems: ke, getItemDimensions: We, getItemWithInteractions: xe, getMinUnit: F, getNextUnit: oe, getStartOfUnit: L, getTimezoneOffsetMs: ze, getVisibleItems: le, groupNoStack: Ee, groupStack: Pe, iterateTimes: ne, minCellWidth: _, stackAll: je, stackGroup: Le, stackTimelineItems: j, toEpochMilliseconds: O, toTimelineDate: G }, Symbol.toStringTag, { value: "Module" })), et = { getTimelineState: () => (console.warn('"getTimelineState" default func is being used'), {}), getLeftOffsetFromDate: () => (console.warn('"getLeftOffsetFromDate" default func is being used'), 0), getDateFromLeftOffsetPosition: () => (console.warn('"getDateFromLeftOffsetPosition" default func is being used'), 0), showPeriod: () => { console.warn('"showPeriod" default func is being used'); } }, ce = S.createContext(et), { Consumer: tt, Provider: rt } = ce; class it extends S.Component { constructor(e) { super(e), Object.defineProperty(this, "getTimelineState", { enumerable: !0, configurable: !0, writable: !0, value: () => { const { visibleTimeStart: t, visibleTimeEnd: i, canvasTimeStart: s, canvasTimeEnd: n, canvasWidth: a, timelineUnit: l, timelineWidth: h, timezone: p } = this.props; return { visibleTimeStart: t, visibleTimeEnd: i, canvasTimeStart: s, canvasTimeEnd: n, canvasWidth: a, timelineUnit: l, timelineWidth: h, timezone: p }; } }), Object.defineProperty(this, "getLeftOffsetFromDate", { enumerable: !0, configurable: !0, writable: !0, value: (t) => { const { canvasTimeStart: i, canvasTimeEnd: s, canvasWidth: n } = this.props; return $(i, s, n, t); } }), Object.defineProperty(this, "getDateFromLeftOffsetPosition", { enumerable: !0, configurable: !0, writable: !0, value: (t) => { const { canvasTimeStart: i, canvasTimeEnd: s, canvasWidth: n } = this.props; return se(i, s, n, t); } }), this.state = { timelineContext: { getTimelineState: this.getTimelineState, getLeftOffsetFromDate: this.getLeftOffsetFromDate, getDateFromLeftOffsetPosition: this.getDateFromLeftOffsetPosition, showPeriod: this.props.showPeriod } }; } render() { return m(rt, { value: this.state.timelineContext, children: this.props.children }); } } const A = tt, st = () => Re(ce); class nt extends I { shouldComponentUpdate(e) { return !(e.canvasTimeStart === this.props.canvasTimeStart && e.canvasTimeEnd === this.props.canvasTimeEnd && e.canvasWidth === this.props.canvasWidth && e.lineCount === this.props.lineCount && e.minUnit === this.props.minUnit && e.timeSteps === this.props.timeSteps && e.height === this.props.height && e.timezone === this.props.timezone && e.verticalLineClassNamesForTime === this.props.verticalLineClassNamesForTime); } render() { const { canvasTimeStart: e, canvasTimeEnd: t, timezone: i, minUnit: s, timeSteps: n, height: a, verticalLineClassNamesForTime: l, getLeftOffsetFromDate: h } = this.props, p = []; return ne(e, t, s, n, i, (d, b) => { const c = d[s === "day" ? "day" : s] === (s === "day" ? 1 : 0); let u = []; l && (u = l(d.epochMilliseconds, b.epochMilliseconds - 1)); const f = V("rct-vl", { "rct-vl-first": c, [`rct-day-${d.dayOfWeek}`]: s === "day" || s === "hour" || s === "minute" }, u), g = h(d.epochMilliseconds), T = h(b.epochMilliseconds); p.push(m("div", { className: f, style: { pointerEvents: "none", top: "0px", left: `${g}px`, width: `${T - g}px`, height: `${a}px` } }, `line-${d.epochMilliseconds}`)); }), m("div", { className: "rct-vertical-lines", children: p }); } } const ot = ({ ...r }) => m(A, { children: ({ getLeftOffsetFromDate: e, getTimelineState: t }) => { const i = t(); return m(nt, { getLeftOffsetFromDate: e, timezone: i.timezone, ...r }); } }), at = { groupIdKey: "id", groupTitleKey: "title", groupRightTitleKey: "rightTitle", groupLabelKey: "title", itemIdKey: "id", itemTitleKey: "title", itemDivTitleKey: "title", itemGroupKey: "group", itemTimeStartKey: "start_time", itemTimeEndKey: "end_time" }, lt = { second: 1, minute: 1, hour: 1, day: 1, month: 1, year: 1 }, ut = { year: { long: { year: "numeric" }, mediumLong: { year: "numeric" }, medium: { year: "numeric" }, short: { year: "2-digit" } }, month: { long: { month: "long", year: "numeric" }, mediumLong: { month: "long" }, medium: { month: "short" }, short: { month: "numeric", year: "2-digit" } }, week: { long: { month: "short", day: "numeric" }, mediumLong: { month: "short", day: "numeric" }, medium: { month: "short", day: "numeric" }, short: { month: "short", day: "numeric" } }, day: { long: { weekday: "long", month: "long", day: "numeric" }, mediumLong: { weekday: "long", month: "long", day: "numeric" }, medium: { day: "numeric", weekday: "short" }, short: { day: "numeric" } }, hour: { long: { weekday: "long", month: "long", day: "numeric", hour: "numeric", minute: "numeric" }, mediumLong: { month: "numeric", day: "numeric", hour: "numeric", minute: "numeric" }, medium: { hour: "numeric", minute: "numeric" }, short: { hour: "numeric" } }, minute: { long: { hour: "numeric", minute: "numeric" }, mediumLong: { hour: "numeric", minute: "numeric" }, medium: { hour: "numeric", minute: "numeric" }, short: { minute: "numeric" } }, second: { long: { minute: "numeric", second: "numeric" }, mediumLong: { minute: "numeric", second: "numeric" }, medium: { minute: "numeric", second: "numeric" }, short: { second: "numeric" } } }, ct = { registerScroll: () => (console.warn("default registerScroll header used"), N), rightSidebarWidth: 0, leftSidebarWidth: 150, timeSteps: {} }, He = S.createContext(ct); class ht extends S.Component { render() { const e = { rightSidebarWidth: this.props.rightSidebarWidth, leftSidebarWidth: this.props.leftSidebarWidth, timeSteps: this.props.timeSteps, registerScroll: this.props.registerScroll }; return m(He.Provider, { value: e, children: this.props.children }); } } const dt = He, he = () => Re(dt); class Ue extends S.Component { constructor(e) { super(e), Object.defineProperty(this, "getHeaderIntervals", { enumerable: !0, configurable: !0, writable: !0, value: ({ canvasTimeStart: p, canvasTimeEnd: d, unit: b, timezone: o, timeSteps: c, getLeftOffsetFromDate: u }) => { const f = []; return ne(p, d, b, c, o, (g, T) => { const y = u(g.epochMilliseconds), C = u(T.epochMilliseconds) - y; f.push({ startTime: g, endTime: T, labelWidth: C, left: y }); }), f; } }), Object.defineProperty(this, "getRootProps", { enumerable: !0, configurable: !0, writable: !0, value: (p = {}) => { const { style: d } = p; return { style: Object.assign({}, d || {}, { position: "relative", width: this.props.canvasWidth, height: this.props.height }) }; } }), Object.defineProperty(this, "getIntervalProps", { enumerable: !0, configurable: !0, writable: !0, value: (p = {}) => { const { interval: d, style: b } = p; if (!d) throw new Error("you should provide interval to the prop getter"); const { startTime: o, labelWidth: c, left: u } = d; return { style: { ...b, left: u, width: c, position: "absolute" }, key: `label-${o.epochMilliseconds}` }; } }), Object.defineProperty(this, "getStateAndHelpers", { enumerable: !0, configurable: !0, writable: !0, value: () => { const { canvasTimeStart: p, canvasTimeEnd: d, timelineWidth: b, visibleTimeStart: o, visibleTimeEnd: c, unit: u, showPeriod: f, headerData: g, timezone: T } = this.props; return { timelineContext: { timelineWidth: b, visibleTimeStart: o, visibleTimeEnd: c, canvasTimeStart: p, canvasTimeEnd: d, timezone: T }, headerContext: { unit: u, intervals: this.state.intervals }, getRootProps: this.getRootProps, getIntervalProps: this.getIntervalProps, showPeriod: f, data: g }; } }); const { canvasTimeStart: t, canvasTimeEnd: i, unit: s, timeSteps: n, getLeftOffsetFromDate: a, timezone: l } = e, h = this.getHeaderIntervals({ canvasTimeStart: t, canvasTimeEnd: i, timeSteps: n, timezone: l, unit: s, getLeftOffsetFromDate: a }); this.state = { intervals: h }; } /*shouldComponentUpdate(nextProps: CustomHeaderProps<Data>) { if ( nextProps.canvasTimeStart !== this.props.canvasTimeStart || nextProps.canvasTimeEnd !== this.props.canvasTimeEnd || nextProps.canvasWidth !== this.props.canvasWidth || nextProps.unit !== this.props.unit || nextProps.timeSteps !== this.props.timeSteps || nextProps.showPeriod !== this.props.showPeriod || nextProps.children !== this.props.children || nextProps.headerData !== this.props.headerData ) { return true } return false }*/ componentDidUpdate(e) { if (!B(e, this.props)) { const { canvasTimeStart: t, canvasTimeEnd: i, unit: s, timeSteps: n, getLeftOffsetFromDate: a, timezone: l } = this.props, h = this.getHeaderIntervals({ canvasTimeStart: t, canvasTimeEnd: i, timeSteps: n, timezone: l, unit: s, getLeftOffsetFromDate: a }); this.setState({ intervals: h }); } } render() { const e = this.getStateAndHelpers(); return this.props.children(e); } } Object.defineProperty(Ue, "defaultProps", { enumerable: !0, configurable: !0, writable: !0, value: { height: 30 } }); function pt({ children: r, unit: e, headerData: t, height: i }) { const { getTimelineState: s, showPeriod: n, getLeftOffsetFromDate: a } = st(), l = s(), { timeSteps: h } = he(); return m(Ue, { children: r, timeSteps: h, showPeriod: n, unit: e || l.timelineUnit, ...l, headerData: t, getLeftOffsetFromDate: a, height: i }); } var ve = Number.isNaN || function(e) { return typeof e == "number" && e !== e; }; function mt(r, e) { return !!(r === e || ve(r) && ve(e)); } function ft(r, e) { if (r.length !== e.length) return !1; for (var t = 0; t < r.length; t++) if (!mt(r[t], e[t])) return !1; return !0; } function Te(r, e) { e === void 0 && (e = ft); var t = null; function i() { for (var s = [], n = 0; n < arguments.length; n++) s[n] = arguments[n]; if (t && t.lastThis === this && e(s, t.lastArgs)) return t.lastResult; var a = r.apply(this, s); return t = { lastResult: a, lastArgs: s, lastThis: this }, a; } return i.clear = function() { t = null; }, i; } function P(...r) { return (e, ...t) => { e.preventDefault(), r.forEach((i) => i && i(e, ...t)); }; } class gt extends S.PureComponent { constructor() { super(...arguments), Object.defineProperty(this, "onIntervalClick", { enumerable: !0, configurable: !0, writable: !0, value: () => { const { primaryHeader: e, interval: t, unit: i, showPeriod: s } = this.props; if (e) { const n = oe(i), a = L(t.startTime, n), l = Ie(t.startTime, n); s(a, l); } else s(t.startTime, t.endTime); } }), Object.defineProperty(this, "getIntervalProps", { enumerable: !0, configurable: !0, writable: !0, value: (e = {}) => ({ ...this.props.getIntervalProps({ interval: this.props.interval, ...e }), onClick: P(this.onIntervalClick, e.onClick) }) }); } render() { const { intervalText: e, interval: t, intervalRenderer: i, headerData: s } = this.props, n = i; if (n) return n({ getIntervalProps: this.getIntervalProps, intervalContext: { interval: t, intervalText: e }, data: s }); const { key: a, ...l } = this.getIntervalProps(); return Ze( "div", { "data-testid": "dateHeaderInterval", ...l, key: a, className: `rct-dateHeader ${this.props.primaryHeader ? "rct-dateHeader-primary" : ""}` }, m("span", { children: e }) ); } } function bt({ headerContext: { intervals: r, unit: e }, getRootProps: t, getIntervalProps: i, showPeriod: s, data: { style: n, intervalRenderer: a, className: l, getLabelFormat: h, unitProp: p, headerData: d } }) { return m("div", { "data-testid": "dateHeader", className: l, ...t({ style: n }), children: r.map((b) => { const o = h([b.startTime, b.endTime], e, b.labelWidth); return m(gt, { unit: e, interval: b, showPeriod: s, intervalText: o, primaryHeader: p === "primaryHeader", getIntervalProps: i, intervalRenderer: a, headerData: d }, `label-${b.startTime.epochMilliseconds}`); }) }); } class vt extends S.Component { constructor() { super(...arguments), Object.defineProperty(this, "getHeaderUnit", { enumerable: !0, configurable: !0, writable: !0, value: () => this.props.unit === "primaryHeader" ? oe(this.props.timelineUnit) : this.props.unit ? this.props.unit : this.props.timelineUnit }), Object.defineProperty(this, "getRootStyle", { enumerable: !0, configurable: !0, writable: !0, value: Te((e) => ({ height: 30, ...e })) }), Object.defineProperty(this, "getLabelFormat", { enumerable: !0, configurable: !0, writable: !0, value: (e, t, i) => { const { labelFormat: s } = this.props; if (typeof s == "function") return s(e, t, i); throw new Error("labelFormat should be function or string"); } }), Object.defineProperty(this, "getHeaderData", { enumerable: !0, configurable: !0, writable: !0, value: Te((e, t, i, s, n, a) => ({ intervalRenderer: e, style: t, className: i, getLabelFormat: s, unitProp: n, headerData: a })) }); } render() { const e = this.getHeaderUnit(), { height: t } = this.props; return m(pt, { children: bt, unit: e, height: t, headerData: this.getHeaderData(this.props.intervalRenderer, this.getRootStyle(this.props.style), this.props.className, this.getLabelFormat, this.props.unit, this.props.headerData) }); } } function ye({ labelFormat: r, unit: e, style: t, className: i, intervalRenderer: s, headerData: n, height: a }) { return m(A, { children: ({ getTimelineState: l }) => { const h = l(); return m(vt, { timelineUnit: h.timelineUnit, unit: e, labelFormat: r || Tt, style: t, className: i, intervalRenderer: s, headerData: n, height: a }); } }); } function Tt([r], e, t, i = ut) { let s; return t >= 150 ? s = i[e].long : t >= 100 ? s = i[e].mediumLong : t >= 50 ? s = i[e].medium : s = i[e].short, r.toLocaleString("en-US", s); } const yt = "left", Ne = "right"; class St extends Xe { constructor() { super(...arguments), Object.defineProperty(this, "getRootProps", { enumerable: !0, configurable: !0, writable: !0, value: (e = {}) => { const { style: t } = e, i = this.props.variant === Ne ? this.props.rightSidebarWidth : this.props.leftSidebarWidth; return { style: { ...t, width: i } }; } }), Object.defineProperty(this, "getStateAndHelpers", { enumerable: !0, configurable: !0, writable: !0, value: () => ({ getRootProps: this.getRootProps, data: this.props.headerData }) }); } render() { const e = this.getStateAndHelpers(); return this.props.children(e); } } const Ct = ({ getRootProps: r }) => m("div", { "data-testid": "sidebarHeader", ...r() }), K = (r) => { const { children: e, variant: t = yt, headerData: i } = r, { leftSidebarWidth: s, rightSidebarWidth: n } = he(); return m(St, { leftSidebarWidth: s, rightSidebarWidth: n, variant: t, headerData: i, children: e || Ct }); }; K.secretKey = "SidebarHeader"; class wt extends S.Component { constructor() { super(...arguments), Object.defineProperty(this, "getRootStyle", { enumerable: !0, configurable: !0, writable: !0, value: () => ({ ...this.props.style, display: "flex", width: "100%" }) }), Object.defineProperty(this, "getCalendarHeaderStyle", { enumerable: !0, configurable: !0, writable: !0, value: () => { const { leftSidebarWidth: e, rightSidebarWidth: t, calendarHeaderStyle: i } = this.props; return { ...i, overflow: "hidden", width: `calc(100% - ${e + t}px)` }; } }), Object.defineProperty(this, "isSidebarHeader", { enumerable: !0, configurable: !0, writable: !0, value: (e) => e.type === void 0 ? !1 : e.type.secretKey === K.secretKey }); } render() { let e, t; const i = [], s = Array.isArray(this.props.children) ? this.props.children.filter((n) => n) : [this.props.children]; return S.Children.map(s, (n) => { var a; this.isSidebarHeader(n) ? ((a = n == null ? void 0 : n.props) == null ? void 0 : a.variant) === Ne ? e = n : t = n : i.push(n); }), t || (t = m(K, {})), !e && this.props.rightSidebarWidth && (e = m(K, { variant: "right" })), E("div", { "data-testid": "headerRootDiv", style: this.getRootStyle(), className: V("rct-header-root", this.props.className), children: [t, m("div", { ref: this.props.registerScroll, style: this.getCalendarHeaderStyle(), className: V("rct-calendar-header", this.props.calendarHeaderClassName), "data-testid": "headerContainer", children: i }), e] }); } } const ee = ({ children: r, style: e, className: t, calendarHeaderStyle: i, calendarHeaderClassName: s }) => { const { leftSidebarWidth: n, rightSidebarWidth: a, registerScroll: l } = he(); return m(wt, { leftSidebarWidth: n, rightSidebarWidth: a, registerScroll: l, style: e, className: t, calendarHeaderStyle: i, calendarHeaderClassName: s, children: r }); }; ee.secretKey = "TimelineHeaders"; function Rt({ item: r, itemContext: e, getItemProps: t, getResizeProps: i }) { const { left: s, right: n } = i(); return E("div", { ...t(r.itemProps), children: [e.useResizeHandle ? m("div", { ...s }) : "", m("div", { className: "rct-item-content", style: { maxHeight: `${e.dimensions.height}` }, children: e.title }), e.useResizeHandle ? m("div", { ...n }) : ""] }); } function Se(r) { let e = 0, t = 0, i = !0; for (; r; ) !r.offsetParent && r.tagName === "BODY" && r.scrollLeft === 0 && r.scrollTop === 0 && (r = document.scrollingElement || r), e += r.offsetLeft - (i ? 0 : r.scrollLeft) + r.clientLeft, t += r.offsetTop - (i ? 0 : r.scrollTop) + r.clientTop, r = r.offsetParent, i = !1; return { x: e, y: t }; } function te(r) { if (r === document.body) return { scrollLeft: 0, scrollTop: 0 }; { const e = te(r.parentNode); return { scrollLeft: r.scrollLeft + e.scrollLeft, scrollTop: r.scrollTop + e.scrollTop }; } } function re(r) { if (r === document.body || !r.offsetParent) return { offsetLeft: 0, offsetTop: 0 }; { const e = re(r.offsetParent); return { offsetLeft: r.offsetLeft + e.offsetLeft, offsetTop: r.offsetTop + e.offsetTop }; } } const It = { fontSize: 12, color: "white", cursor: "pointer", background: "#2196f3", border: "1px solid #1a6fb3", zIndex: 80 }, zt = { background: "#ffc107", border: "1px solid #ff9800", zIndex: 82 }, Mt = { willChange: "left, top, width", cursor: "move" }, Ot = { borderLeftWidth: 3 }, kt = { cursor: "w-resize" }, Dt = { borderRightWidth: 3 }, Pt = { cursor: "e-resize" }, Et = { position: "absolute", width: 24, maxWidth: "20%", minWidth: 2, height: "100%", top: 0, left: 0, cursor: "pointer", zIndex: 88 }, jt = { position: "absolute", width: 24, maxWidth: "20%", minWidth: 2, height: "100%", top: 0, right: 0, cursor: "pointer", zIndex: 88 }; class de extends I { constructor(e) { super(e), Object.defineProperty(this, "state", { enumerable: !0, configurable: !0, writable: !0, value: { interactMounted: !1, dragging: !1, dragStart: null, preDragPosition: null, dragTime: null, dragGroupDelta: null, resizing: !1, resizeEdge: null, resizeStart: null, resizeTime: null } }), Object.defineProperty(this, "itemId", { enumerable: !0, configurable: !0, writable: !0, value: "" }), Object.defineProperty(this, "itemTitle", { enumerable: !0, configurable: !0, writable: !0, value: "" }), Object.defineProperty(this, "itemDivTitle", { enumerable: !0, configurable: !0, writable: !0, value: void 0 }), Object.defineProperty(this, "itemTimeStart", { enumerable: !0, configurable: !0, writable: !0, value: void 0 }), Object.defineProperty(this, "itemTimeEnd", { enumerable: !0, configurable: !0, writable: !0, value: void 0 }), Object.defineProperty(this, "item", { enumerable: !0, configurable: !0, writable: !0, value: void 0 }), Object.defineProperty(this, "dragLeft", { enumerable: !0, configurable: !0, writable: !0, value: void 0 }), Object.defineProperty(this, "dragRight", { enumerable: !0, configurable: !0, writable: !0, value: void 0 }), Object.defineProperty(this, "startedClicking", { enumerable: !0, configurable: !0, writable: !0, value: !1 }), Object.defineProperty(this, "startedTouching", { enumerable: !0, configurable: !0, writable: !0, value: !1 }), Object.defineProperty(this, "dragInProgress", { enumerable: !0, configurable: !0, writable: !0, value: !1 }), Object.defineProperty(this, "fireInteractEvent", { enumerable: !0, configurable: !0, writable: !0, value: (t) => { if (this.item) { const i = new CustomEvent("itemInteraction", { bubbles: !0, detail: { itemInteraction: t } }); this.item.dispatchEvent(i); } } }), Object.defineProperty(this, "onMouseDown", { enumerable: !0, configurable: !0, writable: !0, value: (t) => { this.state.interactMounted || (t.preventDefault(), this.startedClicking = !0); } }), Object.defineProperty(this, "onMouseUp", { enumerable: !0, configurable: !0, writable: !0, value: (t) => { !this.state.interactMounted && this.startedClicking && (this.startedClicking = !1, this.actualClick(t, "click")); } }), Object.defineProperty(this, "onTouchStart", { enumerable: !0, configurable: !0, writable: !0, value: (t) => { this.state.interactMounted || (t.preventDefault(), this.startedTouching = !0); } }), Object.defineProperty(this, "onTouchEnd", { enumerable: !0, configurable: !0, writable: !0, value: (t) => { !this.state.interactMounted && this.startedTouching && (this.startedTouching = !1, this.actualClick(t, "touch")); } }), Object.defineProperty(this, "handleDoubleClick", { enumerable: !0, configurable: !0, writable: !0, value: (t) => { t.stopPropagation(), this.props.onItemDoubleClick && this.props.onItemDoubleClick(this.itemId, t); } }), Object.defineProperty(this, "handleContextMenu", { enumerable: !0, configurable: !0, writable: !0, value: (t) => { this.props.onContextMenu && (t.preventDefault(), t.stopPropagation(), this.props.onContextMenu(this.itemId, t)); } }), Object.defineProperty(this, "getItemRef", { enumerable: !0, configurable: !0, writable: !0, value: (t) => this.item = t }), Object.defineProperty(this, "getDragLeftRef", { enumerable: !0, configurable: !0, writable: !0, value: (t) => this.dragLeft = t }), Object.defineProperty(this, "getDragRightRef", { enumerable: !0, configurable: !0, writable: !0, value: (t) => this.dragRight = t }), Object.defineProperty(this, "getItemProps", { enumerable: !0, configurable: !0, writable: !0, value: (t = {}) => { const i = "rct-item" + (this.props.item.className ? ` ${this.props.item.className}` : ""); return { key: this.itemId, ref: this.getItemRef, title: this.itemDivTitle, className: i + ` ${t.className ? t.className : ""}`, onMouseDown: P(this.onMouseDown, t.onMouseDown), onMouseUp: P(this.onMouseUp, t.onMouseUp), onTouchStart: P(this.onTouchStart, t.onTouchStart), onTouchEnd: P(this.onTouchEnd, t.onTouchEnd), onDoubleClick: P(this.handleDoubleClick, t.onDoubleClick), onContextMenu: P(this.handleContextMenu, t.onContextMenu), style: Object.assign({}, this.getItemStyle(t)) }; } }), Object.defineProperty(this, "getResizeProps", { enumerable: !0, configurable: !0, writable: !0, value: (t = {}) => { let i = "rct-item-handler rct-item-handler-left rct-item-handler-resize-left"; t.leftClassName && (i += ` ${t.leftClassName}`); let s = "rct-item-handler rct-item-handler-right rct-item-handler-resize-right"; return t.rightClassName && (s += ` ${t.rightClassName}`), { left: { ref: this.getDragLeftRef, className: i, style: Object.assign({}, Et, t.leftStyle) }, right: { ref: this.getDragRightRef, className: s, style: Object.assign({}, jt, t.rightStyle) } }; } }), this.cacheDataFromProps(e); } shouldComponentUpdate(e, t) { return !B(this.props, e) || !B(this.state, t); } cacheDataFromProps(e) { this.itemId = v(e.item, e.keys.itemIdKey), this.itemTitle = v(e.item, e.keys.itemTitleKey), this.itemDivTitle = e.keys.itemDivTitleKey ? v(e.item, e.keys.itemDivTitleKey) : this.itemTitle; const t = v(e.item, e.keys.itemTimeStartKey), i = v(e.item, e.keys.itemTimeEndKey); this.itemTimeStart = t !== null ? O(t) : void 0, this.itemTimeEnd = i !== null ? O(i) : void 0; } getTimeRatio() { const { canvasTimeStart: e, canvasTimeEnd: t, canvasWidth: i } = this.props; return Y(e, t, i); } dragTimeSnap(e, t) { const { dragSnap: i, timezone: s } = this.props; if (i) { const n = t ? ze(s) : 0; return Math.round(e / i) * i - n % i; } else return e; } resizeTimeSnap(e) { const { dragSnap: t } = this.props; if (t) { const i = this.itemTimeEnd % t; return Math.round((e - i) / t) * t + i; } else return e; } dragTime(e) { if (this.state.dragging) return this.dragTimeSnap(this.timeFor(e) + this.state.dragStart.offset, !0); { const { timezone: t } = this.props; return M.Instant.fromEpochMilliseconds(this.itemTimeStart).toZonedDateTimeISO(t).epochMilliseconds; } } timeFor(e) { const t = Y(this.props.canvasTimeStart, this.props.canvasTimeEnd, this.props.canvasWidth), i = re(this.props.scrollRef).offsetLeft, s = te(this.props.scrollRef); return (e.pageX - i + s.scrollLeft) * t + this.props.canvasTimeStart; } dragGroupDelta(e) { const { groupTops: t, order: i } = this.props; if (this.state.dragging) { if (!this.props.canChangeGroup) return 0; let s = 0; const n = re(this.props.scrollRef).offsetTop, a = te(this.props.scrollRef); for (const l of Object.keys(t)) { const h = t[l]; if (e.pageY - n + a.scrollTop > h) s = parseInt(l, 10) - i.index; else break; } return this.props.order.index + s < 0 ? 0 - this.props.order.index : s; } else return 0; } resizeTimeDelta(e, t) { const i = this.itemTimeEnd - this.itemTimeStart, s = this.dragTimeSnap((e.pageX - this.state.resizeStart) * this.getTimeRatio()); return i + (t === "left" ? -s : s) < (this.props.dragSnap || 1e3) ? t === "left" ? i - (this.props.dragSnap || 1e3) : (this.props.dragSnap || 1e3) - i : s; } mountInteract() { const e = this.props.useResizeHandle ? ".rct-item-handler-resize-left" : !0, t = this.props.useResizeHandle ? ".rct-item-handler-resize-right" : !0; X(this.item).resizable({ edges: { left: this.canResizeLeft() && e, right: this.canResizeRight() && t, top: !1, bottom: !1 }, enabled: this.props.selected && (this.canResizeLeft() || this.canResizeRight()) }).draggable({ enabled: this.props.selected && this.canMove() }).styleCursor(!1).on("dragstart", (i) => { if (this.props.selected) { this.dragInProgress = !0, this.fireInteractEvent(!0); const s = this.timeFor(i); this.setState({ dragging: !0, dragStart: { x: i.pageX, y: i.pageY, offset: this.itemTimeStart - s }, preDragPosition: { x: i.target.offsetLeft, y: i.target.offsetTop }, dragTime: this.itemTimeStart, dragGroupDelta: 0 }); } else return !1; }).on("dragmove", (i) => { this.state.dragging && this.setState((s) => { if (!this.dragInProgress) return { ...s }; let n = this.dragTime(i); const a = this.dragGroupDelta(i); return this.props.moveResizeValidator && (n = this.props.moveResizeValidator("move", this.props.item, n)), this.props.onDrag && this.props.onDrag(this.itemId, n, this.props.order.index + a), { dragTime: n, dragGroupDelta: a }; }); }).on("dragend", (i) => { if (this.state.dragging) { if (this.props.onDrop) { this.dragInProgress = !1, this.fireInteractEvent(!1); let s = this.dragTime(i); this.props.moveResizeValidator && (s = this.props.moveResizeValidator("move", this.props.item, s)), this.props.onDrop(this.itemId, s, this.props.order.index + this.dragGroupDelta(i)); } this.setState({ dragging: !1, dragStart: null, preDragPosition: null, dragTime: null, dragGroupDelta: null }); } }).on("resizestart", (i) => { if (this.props.selected) this.fireInteractEvent(!0), this.setState({ resizing: !0, resizeEdge: null, // we don't know yet resizeStart: i.pageX, resizeTime: 0 }); else return !1; }).on("resizemove", (i) => { if (this.state.resizing) { let s = this.state.resizeEdge; s || (s = i.deltaRect.left !== 0 ? "left" : "right", this.setState({ resizeEdge: s })); let n = this.resizeTimeSnap(this.timeFor(i)); this.props.moveResizeValidator && (n = this.props.moveResizeValidator("resize", this.props.item, n, s)), this.props.onResizing && this.props.onResizing(this.itemId, n, s), this.setState({ resizeTime: n }); } }).on("resizeend", (i) => { if (this.state.resizing) { this.fireInteractEvent(!1); const { resizeEdge: s } = this.state; let n = this.resizeTimeSnap(this.timeFor(i)); this.props.moveResizeValidator && (n = this.props.moveResizeValidator("resize", this.props.item, n, s)), this.props.onResized && this.props.onResized(this.itemId, n, s, this.resizeTimeDelta(i, s)), this.setState({ resizing: !1, resizeStart: null, resizeEdge: null, resizeTime: null }); } }).on("tap", (i) => { this.actualClick(i, i.pointerType === "mouse" ? "click" : "touch"); }), this.setState({ interactMounted: !0 }); } canResizeLeft(e = this.props) { var i; return !e.canResizeLeft || e.minResizeWidth === void 0 ? !1 : parseInt((i = e.dimensions.width) == null ? void 0 : i.toString(), 10) >= e.minResizeWidth; } canResizeRight(e = this.props) { var i; return !e.canResizeRight || e.minResizeWidth === void 0 ? !1 : parseInt((i = e.dimensions.width) == null ? void 0 : i.toString(), 10) >= e.minResizeWidth; } canMove(e = this.props) { return !!e.canMove; } componentDidUpdate(e) { this.cacheDataFromProps(this.props); let { interactMounted: t } = this.state; const i = e.selected && this.canMove(e), s = e.selected && this.canResizeLeft(e), n = e.selected && this.canResizeRight(e), a = this.props.selected && this.canMove(this.props), l = this.props.selected && this.canResizeLeft(this.props), h = this.props.selected && this.canResizeRight(this.props); if (this.item) { if (this.props.selected && !t && (this.mountInteract(), t = !0), t && (s !== l || n !== h)) { const p = this.props.useResizeHandle ? this.dragLeft : !0, d = this.props.useResizeHandle ? this.dragRight : !0; X(this.item).resizable({ enabled: l || h, edges: { top: !1, bottom: !1, left: l && p, right: h && d } }); } t && i !== a && X(this.item).draggable({ enabled: a }); } else t = !1; t !== this.state.interactMounted && this.setState({ interactMounted: t }); } actualClick(e, t) { this.props.canSelect && this.props.onSelect && this.props.onSelect(this.itemId, t, e); } getItemStyle(e) { const t = this.props.dimensions, i = { position: "absolute", boxSizing: "border-box", left: `${t.left}px`, top: `${t.top}px`, width: `${t.width}px`, height: `${t.height}px`, lineHeight: `${t.height}px` }; return Object.assign({}, It, this.props.selected ? zt : {}, this.props.selected && this.canMove(this.props) ? Mt : {}, this.props.selected && this.canResizeLeft(this.props) ? Ot : {}, this.props.selected && this.canResizeLeft(this.props) && this.state.dragging ? kt : {}, this.props.selected && this.canResizeRight(this.props) ? Dt : {}, this.props.selected && this.canResizeRight(this.props) && this.state.dragging ? Pt : {}, e.style, i); } render() { var i, s; if (typeof this.props.order > "u" || this.props.order === null) return null; const e = this.context, t = { dimensions: this.props.dimensions, useResizeHandle: !!this.props.useResizeHandle, title: this.itemTitle, canMove: this.canMove(this.props), canResizeLeft: this.canResizeLeft(this.props), canResizeRight: this.canResizeRight(this.props), selected: this.props.selected, dragging: this.state.dragging, dragStart: this.state.dragStart, dragTime: this.state.dragTime, dragGroupDelta: this.state.dragGroupDelta, resizing: this.state.resizing, resizeEdge: this.state.resizeEdge, resizeStart: this.state.resizeStart, resizeTime: this.state.resizeTime }; return (s = (i = this.props) == null ? void 0 : i.itemRenderer) == null ? void 0 : s.call(i, { item: this.props.item, timelineContext: e, itemContext: t, getItemProps: this.getItemProps, getResizeProps: this.getResizeProps }); } } Object.defineProperty(de, "defaultProps", { enumerable: !0, configurable: !0, writable: !0, value: { selected: !1, itemRenderer: Rt } }); Object.defineProperty(de, "contextType", { enumerable: !0, configurable: !0, writable: !0, value: ce }); function Lt(r, e) { const t = v(r, "canResize") !== void 0 ? v(r, "canResize") : e; return t === "left" || t === "both"; } function Wt(r, e) { const t = v(r, "canResize") !== void 0 ? v(r, "canResize") : e; return t === "right" || t === "both" || t === !0; } class xt extends I { shouldComponentUpdate(e) { return !(W(e.groups, this.props.groups) && W(e.items, this.props.items) && W(e.dimensionItems, this.props.dimensionItems) && e.keys === this.props.keys && e.canvasTimeStart ==