@progress/kendo-react-gantt
Version:
React Gantt enables the display of self-referencing tabular data with many features. KendoReact Gantt package
262 lines (261 loc) • 8.66 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
import * as T from "react";
import { MS_PER_DAY as E, getDate as S, addDays as W, ZonedDate as g, firstDayInWeek as _, addMonths as y, MS_PER_MINUTE as x } from "@progress/kendo-date-math";
import { mapTree as A, extendDataItem as L, getter as f, classNames as z } from "@progress/kendo-react-common";
import { orderBy as N, filterBy as b } from "@progress/kendo-react-data-tools";
import { createDataTree as C } from "@progress/kendo-react-treelist";
import { DEFAULT_TASK_MODEL_FIELDS as I, DEFAULT_DEPENDENCY_MODEL_FIELDS as H, HOUR_DATE_FORMAT as O, DAY_DATE_FORMAT as h, MONTH_DATE_FORMAT as F, YEAR_DATE_FORMAT as B, DAYS_IN_WEEK_COUNT as U } from "../constants/index.mjs";
const te = N, ne = b, ae = A, re = L, oe = C, se = (e) => ({ fields: { ...I, ...e } }), de = (e) => ({ fields: { ...H, ...e } }), ce = (e) => S(e), Y = (e, t) => S(W(e, t || 1)), me = (e, t, n, o) => n < t && e <= o;
function $(e) {
return new Date(
Date.UTC(
e.getFullYear(),
e.getMonth(),
e.getDate(),
e.getHours(),
e.getMinutes(),
e.getSeconds(),
e.getMilliseconds()
)
);
}
const l = 4, p = 10, ie = (e, t, n, o) => {
const r = [];
let s = 0, a = 0;
const d = p, i = Math.floor(n / 2), u = e.top < t.top, c = () => r.push({ left: a, top: s });
if (o === 0 || o === 3) {
const m = o === 3 ? "start" : "end";
s = e.top, a = e[m], c(), a = Math[m === "start" ? "min" : "max"](e[m], t[m]), a = m === "start" ? a - d : a + d, c(), s = t.top, c(), a = m === "start" ? t[m] - l : t[m] + l, c(), w(s, a, r, m !== "start");
} else {
const m = o === 2 ? "start" : "end", D = o === 2 ? "end" : "start", k = o === 2 ? e[m] - p * 2 >= t[D] : e[m] + p * 2 <= t[D];
s = e.top, a = e[m], c(), a = m === "start" ? a - d : a + d, c(), k || (s = u ? s + i : s - i, c(), a = m === "start" ? t[D] + d : t[D] - d, c()), s = t.top, c(), a = D === "start" ? t[D] - l : t[D] + l, c(), w(s, a, r, D !== "start");
}
return r;
}, w = (e, t, n, o) => o ? R(e, t, n) : P(e, t, n), R = (e, t, n) => {
n.push({
top: e - l / 2,
left: t
}), n.push({
top: e,
left: t - l + 1
}), n.push({
top: e + l / 2,
left: t
}), n.push({
top: e,
left: t
});
}, P = (e, t, n) => {
n.push({
top: e + l / 2,
left: t
}), n.push({
top: e,
left: t + l - 1
}), n.push({
top: e - l / 2,
left: t
}), n.push({
top: e,
left: t
});
}, ge = (e) => {
if (e.workWeekStart === void 0 || e.workWeekEnd === void 0)
return [];
const t = [];
let n = e.workWeekStart;
for (t.push(n); e.workWeekEnd !== n; )
n > 6 ? n -= 7 : n++, t.push(n);
return t;
}, K = (e, t) => {
const n = e.getDay();
return t.indexOf(n) > -1;
}, M = (e, { step: t, timezone: n }) => {
const o = [], r = g.fromLocalDate(e.start, n), s = g.fromLocalDate(e.end, n);
let a = r.clone();
for (; a.getTime() < s.getTime(); ) {
const d = a.clone(), i = d.clone().addTime(t), u = new Date(d.getTime()), m = {
end: new Date(i.getTime()),
start: u,
zonedStart: d,
zonedEnd: i
};
o.push(m), a = a.addTime(t);
}
return o;
}, Z = (e, { timezone: t }, n) => {
const o = [], r = g.fromLocalDate(e.start, t), s = g.fromLocalDate(e.end, t);
for (let a = r.clone(); a.getTime() < s.getTime(); ) {
const d = a.clone(), i = Y(_(S(d), n.firstDay()), U), u = g.fromUTCDate($(i), t), c = u.getTime() > s.getTime() ? s.clone() : u;
a = c.clone();
const m = new Date(d.getTime()), k = {
end: new Date(c.getTime()),
start: m,
zonedStart: d,
zonedEnd: c
};
o.push(k);
}
return o;
}, v = (e, { timezone: t }) => {
const n = [], o = g.fromLocalDate(e.start, t), r = g.fromLocalDate(e.end, t);
for (let s = o.clone(); s.getTime() < r.getTime(); ) {
const a = s.clone(), d = g.fromLocalDate(y(new Date(a.getTime()), 1), t);
s = d.clone();
const i = new Date(a.getTime()), c = {
end: new Date(d.getTime()),
start: i,
zonedStart: a,
zonedEnd: d
};
n.push(c);
}
return n;
}, j = (e, { timezone: t }) => {
const n = [], o = g.fromLocalDate(e.start, t), r = g.fromLocalDate(e.end, t);
for (let s = o.clone(); s.getTime() < r.getTime(); ) {
const a = s.clone(), d = g.fromLocalDate(y(new Date(a.getTime()), 12), t);
s = d.clone();
const i = new Date(a.getTime()), c = {
end: new Date(d.getTime()),
start: i,
zonedStart: a,
zonedEnd: d
};
n.push(c);
}
return n;
}, le = (e, t, n) => {
const o = n.parseDate(t.workDayStart).getHours(), r = n.parseDate(t.workDayEnd).getHours();
return M(e, { step: x * t.slotDuration, timezone: t.timezone }).map((a) => {
const d = a.zonedStart.getHours();
return {
range: a,
isWork: d >= o && d < r,
span: 1,
text: n.formatDate(a.zonedStart, O),
type: "time"
};
});
}, De = (e, t, n) => M(e, { step: E, timezone: t.timezone }).map((r) => ({
range: r,
isWork: K(r.start, t.workDays),
span: 1,
text: n.formatDate(r.zonedStart, h),
type: "day"
})), Te = (e, t, n) => Z(e, { timezone: t.timezone }, n).map((r) => {
const s = Math.round((r.zonedEnd.getTime() - r.zonedStart.getTime()) / E);
return {
range: r,
isWork: !1,
span: s,
text: `${n.formatDate(r.zonedStart, h)} - ${n.formatDate(
r.zonedEnd,
h
)}`,
type: "week"
};
}), ue = (e, t, n) => v(e, { timezone: t.timezone }).map((r) => {
const s = Math.round((r.zonedEnd.getTime() - r.zonedStart.getTime()) / E);
return {
range: r,
isWork: !1,
span: s,
text: n.formatDate(r.zonedStart, F),
type: "month"
};
}), Ee = (e, t, n) => j(e, { timezone: t.timezone }).map((r) => {
const s = Math.round((r.zonedEnd.getTime() - r.zonedStart.getTime()) / E);
return {
range: r,
isWork: !1,
span: s,
text: n.formatDate(r.zonedStart, B),
type: "year"
};
}), ke = (e, t, n) => {
const o = n;
return /* @__PURE__ */ T.createElement("table", { className: "k-table k-table-md", ref: t, "aria-hidden": !0 }, /* @__PURE__ */ T.createElement("tbody", { className: "k-table-tbody" }, e.map((r, s) => /* @__PURE__ */ T.createElement("tr", { className: "k-table-row", key: s }, r.map((a, d) => /* @__PURE__ */ T.createElement(
"td",
{
key: a.range.start.getTime(),
colSpan: a.span,
className: z("k-table-th", {
"k-header": !0,
"k-nonwork-hour": !a.isWork
})
},
o ? /* @__PURE__ */ T.createElement(
o,
{
rowIndex: s,
index: d,
range: a.range,
text: a.text,
isWork: a.isWork,
type: a.type
}
) : a.text
))))));
}, pe = (e, t) => {
const n = e[e.length - 1];
return /* @__PURE__ */ T.createElement("table", { className: "k-table k-table-md k-gantt-columns", ref: t, "aria-hidden": !0 }, /* @__PURE__ */ T.createElement("tbody", { className: "k-table-tbody" }, /* @__PURE__ */ T.createElement("tr", { className: "k-table-row" }, n.map((o) => /* @__PURE__ */ T.createElement(
"td",
{
key: o.range.start.getTime(),
colSpan: o.span,
className: z("k-table-td", {
"k-nonwork-hour": !o.isWork
})
}
)))));
}, he = (e, t) => {
const n = e[e.length - 1];
let o = 0, r = 0;
return n.forEach((s) => {
const a = s.span;
r += a, a > o && (o = a);
}), Math.round(r * t / o);
}, q = (e, t) => !!f(t)(e), G = (e, t) => !!f(t)(e), Se = (e, t) => (n) => q(n, e) && G(n, t) ? [...f(t)(n)] : [];
export {
l as ARROW_SIZE,
p as MIN_LINE_WIDTH,
w as addArrow,
P as addArrowEast,
R as addArrowWest,
oe as createDataTree,
ie as dependencyCoordinates,
Se as expandedChildren,
re as extendDataItem,
ne as filterBy,
De as getDaySlots,
de as getDependencyModelFields,
Y as getEndDate,
le as getHourSlots,
ue as getMonthSlots,
ce as getStartDate,
se as getTaskModelFields,
pe as getTimelineContent,
ke as getTimelineHeader,
he as getTimelineWidth,
Te as getWeekSlots,
ge as getWorkDays,
Ee as getYearSlots,
G as hasChildren,
q as isExpanded,
me as isInRange,
K as isWorkDay,
ae as mapTree,
te as orderBy,
v as toMonthRanges,
M as toRanges,
$ as toUTCDateTime,
Z as toWeekRanges,
j as toYearRanges
};