@wamra/gantt-task-react
Version:
Interactive Gantt Chart for React with TypeScript
1,548 lines (1,547 loc) • 400 kB
JavaScript
import { jsx, jsxs, Fragment as Fragment$1 } from "react/jsx-runtime";
import * as React from "react";
import React__default, { memo, Fragment, useCallback, useMemo, useState, useEffect, useRef, useLayoutEffect } from "react";
import { UnfoldLess, UnfoldMore, UnfoldMoreDouble } from "@mui/icons-material";
import { createTheme, ThemeProvider, Tooltip as Tooltip$1, IconButton } from "@mui/material";
import Popper from "@mui/material/Popper";
import Paper from "@mui/material/Paper";
import ClickAwayListener from "@mui/material/ClickAwayListener";
import * as ReactDOM from "react-dom";
var formatDistanceLocale = {
lessThanXSeconds: {
one: "less than a second",
other: "less than {{count}} seconds"
},
xSeconds: {
one: "1 second",
other: "{{count}} seconds"
},
halfAMinute: "half a minute",
lessThanXMinutes: {
one: "less than a minute",
other: "less than {{count}} minutes"
},
xMinutes: {
one: "1 minute",
other: "{{count}} minutes"
},
aboutXHours: {
one: "about 1 hour",
other: "about {{count}} hours"
},
xHours: {
one: "1 hour",
other: "{{count}} hours"
},
xDays: {
one: "1 day",
other: "{{count}} days"
},
aboutXWeeks: {
one: "about 1 week",
other: "about {{count}} weeks"
},
xWeeks: {
one: "1 week",
other: "{{count}} weeks"
},
aboutXMonths: {
one: "about 1 month",
other: "about {{count}} months"
},
xMonths: {
one: "1 month",
other: "{{count}} months"
},
aboutXYears: {
one: "about 1 year",
other: "about {{count}} years"
},
xYears: {
one: "1 year",
other: "{{count}} years"
},
overXYears: {
one: "over 1 year",
other: "over {{count}} years"
},
almostXYears: {
one: "almost 1 year",
other: "almost {{count}} years"
}
};
var formatDistance = function formatDistance2(token, count2, options) {
var result;
var tokenValue = formatDistanceLocale[token];
if (typeof tokenValue === "string") {
result = tokenValue;
} else if (count2 === 1) {
result = tokenValue.one;
} else {
result = tokenValue.other.replace("{{count}}", count2.toString());
}
if (options !== null && options !== void 0 && options.addSuffix) {
if (options.comparison && options.comparison > 0) {
return "in " + result;
} else {
return result + " ago";
}
}
return result;
};
const formatDistance$1 = formatDistance;
function buildFormatLongFn(args) {
return function() {
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
var width = options.width ? String(options.width) : args.defaultWidth;
var format2 = args.formats[width] || args.formats[args.defaultWidth];
return format2;
};
}
var dateFormats = {
full: "EEEE, MMMM do, y",
long: "MMMM do, y",
medium: "MMM d, y",
short: "MM/dd/yyyy"
};
var timeFormats = {
full: "h:mm:ss a zzzz",
long: "h:mm:ss a z",
medium: "h:mm:ss a",
short: "h:mm a"
};
var dateTimeFormats = {
full: "{{date}} 'at' {{time}}",
long: "{{date}} 'at' {{time}}",
medium: "{{date}}, {{time}}",
short: "{{date}}, {{time}}"
};
var formatLong = {
date: buildFormatLongFn({
formats: dateFormats,
defaultWidth: "full"
}),
time: buildFormatLongFn({
formats: timeFormats,
defaultWidth: "full"
}),
dateTime: buildFormatLongFn({
formats: dateTimeFormats,
defaultWidth: "full"
})
};
const formatLong$1 = formatLong;
var formatRelativeLocale = {
lastWeek: "'last' eeee 'at' p",
yesterday: "'yesterday at' p",
today: "'today at' p",
tomorrow: "'tomorrow at' p",
nextWeek: "eeee 'at' p",
other: "P"
};
var formatRelative = function formatRelative2(token, _date, _baseDate, _options) {
return formatRelativeLocale[token];
};
const formatRelative$1 = formatRelative;
function buildLocalizeFn(args) {
return function(dirtyIndex, options) {
var context = options !== null && options !== void 0 && options.context ? String(options.context) : "standalone";
var valuesArray;
if (context === "formatting" && args.formattingValues) {
var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;
valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
} else {
var _defaultWidth = args.defaultWidth;
var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;
valuesArray = args.values[_width] || args.values[_defaultWidth];
}
var index2 = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;
return valuesArray[index2];
};
}
var eraValues = {
narrow: ["B", "A"],
abbreviated: ["BC", "AD"],
wide: ["Before Christ", "Anno Domini"]
};
var quarterValues = {
narrow: ["1", "2", "3", "4"],
abbreviated: ["Q1", "Q2", "Q3", "Q4"],
wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]
};
var monthValues = {
narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"],
abbreviated: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
wide: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
};
var dayValues = {
narrow: ["S", "M", "T", "W", "T", "F", "S"],
short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
wide: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
};
var dayPeriodValues = {
narrow: {
am: "a",
pm: "p",
midnight: "mi",
noon: "n",
morning: "morning",
afternoon: "afternoon",
evening: "evening",
night: "night"
},
abbreviated: {
am: "AM",
pm: "PM",
midnight: "midnight",
noon: "noon",
morning: "morning",
afternoon: "afternoon",
evening: "evening",
night: "night"
},
wide: {
am: "a.m.",
pm: "p.m.",
midnight: "midnight",
noon: "noon",
morning: "morning",
afternoon: "afternoon",
evening: "evening",
night: "night"
}
};
var formattingDayPeriodValues = {
narrow: {
am: "a",
pm: "p",
midnight: "mi",
noon: "n",
morning: "in the morning",
afternoon: "in the afternoon",
evening: "in the evening",
night: "at night"
},
abbreviated: {
am: "AM",
pm: "PM",
midnight: "midnight",
noon: "noon",
morning: "in the morning",
afternoon: "in the afternoon",
evening: "in the evening",
night: "at night"
},
wide: {
am: "a.m.",
pm: "p.m.",
midnight: "midnight",
noon: "noon",
morning: "in the morning",
afternoon: "in the afternoon",
evening: "in the evening",
night: "at night"
}
};
var ordinalNumber = function ordinalNumber2(dirtyNumber, _options) {
var number = Number(dirtyNumber);
var rem100 = number % 100;
if (rem100 > 20 || rem100 < 10) {
switch (rem100 % 10) {
case 1:
return number + "st";
case 2:
return number + "nd";
case 3:
return number + "rd";
}
}
return number + "th";
};
var localize = {
ordinalNumber,
era: buildLocalizeFn({
values: eraValues,
defaultWidth: "wide"
}),
quarter: buildLocalizeFn({
values: quarterValues,
defaultWidth: "wide",
argumentCallback: function argumentCallback(quarter) {
return quarter - 1;
}
}),
month: buildLocalizeFn({
values: monthValues,
defaultWidth: "wide"
}),
day: buildLocalizeFn({
values: dayValues,
defaultWidth: "wide"
}),
dayPeriod: buildLocalizeFn({
values: dayPeriodValues,
defaultWidth: "wide",
formattingValues: formattingDayPeriodValues,
defaultFormattingWidth: "wide"
})
};
const localize$1 = localize;
function buildMatchFn(args) {
return function(string) {
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
var width = options.width;
var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
var matchResult = string.match(matchPattern);
if (!matchResult) {
return null;
}
var matchedString = matchResult[0];
var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function(pattern) {
return pattern.test(matchedString);
}) : findKey(parsePatterns, function(pattern) {
return pattern.test(matchedString);
});
var value;
value = args.valueCallback ? args.valueCallback(key) : key;
value = options.valueCallback ? options.valueCallback(value) : value;
var rest = string.slice(matchedString.length);
return {
value,
rest
};
};
}
function findKey(object, predicate) {
for (var key in object) {
if (object.hasOwnProperty(key) && predicate(object[key])) {
return key;
}
}
return void 0;
}
function findIndex(array, predicate) {
for (var key = 0; key < array.length; key++) {
if (predicate(array[key])) {
return key;
}
}
return void 0;
}
function buildMatchPatternFn(args) {
return function(string) {
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
var matchResult = string.match(args.matchPattern);
if (!matchResult)
return null;
var matchedString = matchResult[0];
var parseResult = string.match(args.parsePattern);
if (!parseResult)
return null;
var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
value = options.valueCallback ? options.valueCallback(value) : value;
var rest = string.slice(matchedString.length);
return {
value,
rest
};
};
}
var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
var parseOrdinalNumberPattern = /\d+/i;
var matchEraPatterns = {
narrow: /^(b|a)/i,
abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
wide: /^(before christ|before common era|anno domini|common era)/i
};
var parseEraPatterns = {
any: [/^b/i, /^(a|c)/i]
};
var matchQuarterPatterns = {
narrow: /^[1234]/i,
abbreviated: /^q[1234]/i,
wide: /^[1234](th|st|nd|rd)? quarter/i
};
var parseQuarterPatterns = {
any: [/1/i, /2/i, /3/i, /4/i]
};
var matchMonthPatterns = {
narrow: /^[jfmasond]/i,
abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
};
var parseMonthPatterns = {
narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],
any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]
};
var matchDayPatterns = {
narrow: /^[smtwf]/i,
short: /^(su|mo|tu|we|th|fr|sa)/i,
abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
};
var parseDayPatterns = {
narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
};
var matchDayPeriodPatterns = {
narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
};
var parseDayPeriodPatterns = {
any: {
am: /^a/i,
pm: /^p/i,
midnight: /^mi/i,
noon: /^no/i,
morning: /morning/i,
afternoon: /afternoon/i,
evening: /evening/i,
night: /night/i
}
};
var match = {
ordinalNumber: buildMatchPatternFn({
matchPattern: matchOrdinalNumberPattern,
parsePattern: parseOrdinalNumberPattern,
valueCallback: function valueCallback(value) {
return parseInt(value, 10);
}
}),
era: buildMatchFn({
matchPatterns: matchEraPatterns,
defaultMatchWidth: "wide",
parsePatterns: parseEraPatterns,
defaultParseWidth: "any"
}),
quarter: buildMatchFn({
matchPatterns: matchQuarterPatterns,
defaultMatchWidth: "wide",
parsePatterns: parseQuarterPatterns,
defaultParseWidth: "any",
valueCallback: function valueCallback2(index2) {
return index2 + 1;
}
}),
month: buildMatchFn({
matchPatterns: matchMonthPatterns,
defaultMatchWidth: "wide",
parsePatterns: parseMonthPatterns,
defaultParseWidth: "any"
}),
day: buildMatchFn({
matchPatterns: matchDayPatterns,
defaultMatchWidth: "wide",
parsePatterns: parseDayPatterns,
defaultParseWidth: "any"
}),
dayPeriod: buildMatchFn({
matchPatterns: matchDayPeriodPatterns,
defaultMatchWidth: "any",
parsePatterns: parseDayPeriodPatterns,
defaultParseWidth: "any"
})
};
const match$1 = match;
var locale = {
code: "en-US",
formatDistance: formatDistance$1,
formatLong: formatLong$1,
formatRelative: formatRelative$1,
localize: localize$1,
match: match$1,
options: {
weekStartsOn: 0,
firstWeekContainsDate: 1
}
};
const enDateLocale = locale;
var ViewMode = /* @__PURE__ */ ((ViewMode2) => {
ViewMode2["Hour"] = "Hour";
ViewMode2["QuarterDay"] = "Quarter Day";
ViewMode2["HalfDay"] = "Half Day";
ViewMode2["Day"] = "Day";
ViewMode2["TwoDays"] = "Two Days";
ViewMode2["Week"] = "Week";
ViewMode2["Month"] = "Month";
ViewMode2["QuarterYear"] = "QuarterYear";
ViewMode2["Year"] = "Year";
return ViewMode2;
})(ViewMode || {});
var GanttDateRoundingTimeUnit = /* @__PURE__ */ ((GanttDateRoundingTimeUnit2) => {
GanttDateRoundingTimeUnit2[GanttDateRoundingTimeUnit2["MINUTE"] = 0] = "MINUTE";
GanttDateRoundingTimeUnit2[GanttDateRoundingTimeUnit2["HOUR"] = 1] = "HOUR";
GanttDateRoundingTimeUnit2[GanttDateRoundingTimeUnit2["DAY"] = 2] = "DAY";
return GanttDateRoundingTimeUnit2;
})(GanttDateRoundingTimeUnit || {});
function toInteger(dirtyNumber) {
if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {
return NaN;
}
var number = Number(dirtyNumber);
if (isNaN(number)) {
return number;
}
return number < 0 ? Math.ceil(number) : Math.floor(number);
}
function requiredArgs(required, args) {
if (args.length < required) {
throw new TypeError(required + " argument" + (required > 1 ? "s" : "") + " required, but only " + args.length + " present");
}
}
function _typeof$3(obj) {
"@babel/helpers - typeof";
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof$3 = function _typeof2(obj2) {
return typeof obj2;
};
} else {
_typeof$3 = function _typeof2(obj2) {
return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
};
}
return _typeof$3(obj);
}
function toDate(argument) {
requiredArgs(1, arguments);
var argStr = Object.prototype.toString.call(argument);
if (argument instanceof Date || _typeof$3(argument) === "object" && argStr === "[object Date]") {
return new Date(argument.getTime());
} else if (typeof argument === "number" || argStr === "[object Number]") {
return new Date(argument);
} else {
if ((typeof argument === "string" || argStr === "[object String]") && typeof console !== "undefined") {
console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments");
console.warn(new Error().stack);
}
return /* @__PURE__ */ new Date(NaN);
}
}
function addMonths(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var date = toDate(dirtyDate);
var amount = toInteger(dirtyAmount);
if (isNaN(amount)) {
return /* @__PURE__ */ new Date(NaN);
}
if (!amount) {
return date;
}
var dayOfMonth = date.getDate();
var endOfDesiredMonth = new Date(date.getTime());
endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);
var daysInMonth = endOfDesiredMonth.getDate();
if (dayOfMonth >= daysInMonth) {
return endOfDesiredMonth;
} else {
date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);
return date;
}
}
function addYears(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
return addMonths(dirtyDate, amount * 12);
}
function addDays(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var date = toDate(dirtyDate);
var amount = toInteger(dirtyAmount);
if (isNaN(amount)) {
return /* @__PURE__ */ new Date(NaN);
}
if (!amount) {
return date;
}
date.setDate(date.getDate() + amount);
return date;
}
function addMilliseconds(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var timestamp = toDate(dirtyDate).getTime();
var amount = toInteger(dirtyAmount);
return new Date(timestamp + amount);
}
var MILLISECONDS_IN_HOUR = 36e5;
function addHours(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR);
}
function subYears(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
return addYears(dirtyDate, -amount);
}
function subMonths(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
return addMonths(dirtyDate, -amount);
}
function subDays(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
return addDays(dirtyDate, -amount);
}
function subHours(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
return addHours(dirtyDate, -amount);
}
function addWeeks(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
var days = amount * 7;
return addDays(dirtyDate, days);
}
function subWeeks(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
return addWeeks(dirtyDate, -amount);
}
function startOfYear(dirtyDate) {
requiredArgs(1, arguments);
var cleanDate = toDate(dirtyDate);
var date = /* @__PURE__ */ new Date(0);
date.setFullYear(cleanDate.getFullYear(), 0, 1);
date.setHours(0, 0, 0, 0);
return date;
}
function startOfMonth(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
date.setDate(1);
date.setHours(0, 0, 0, 0);
return date;
}
function startOfDay(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
date.setHours(0, 0, 0, 0);
return date;
}
function startOfHour(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
date.setMinutes(0, 0, 0);
return date;
}
var defaultOptions = {};
function getDefaultOptions() {
return defaultOptions;
}
function startOfWeek(dirtyDate, options) {
var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
requiredArgs(1, arguments);
var defaultOptions2 = getDefaultOptions();
var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions2.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions2.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");
}
var date = toDate(dirtyDate);
var day = date.getDay();
var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
date.setDate(date.getDate() - diff);
date.setHours(0, 0, 0, 0);
return date;
}
function startOfQuarter(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
var currentMonth = date.getMonth();
var month = currentMonth - currentMonth % 3;
date.setMonth(month, 1);
date.setHours(0, 0, 0, 0);
return date;
}
function getTimezoneOffsetInMilliseconds(date) {
var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));
utcDate.setUTCFullYear(date.getFullYear());
return date.getTime() - utcDate.getTime();
}
var MILLISECONDS_IN_DAY$1 = 864e5;
function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
var startOfDayLeft = startOfDay(dirtyDateLeft);
var startOfDayRight = startOfDay(dirtyDateRight);
var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);
var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight);
return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY$1);
}
function compareLocalAsc(dateLeft, dateRight) {
var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();
if (diff < 0) {
return -1;
} else if (diff > 0) {
return 1;
} else {
return diff;
}
}
function differenceInDays(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
var dateLeft = toDate(dirtyDateLeft);
var dateRight = toDate(dirtyDateRight);
var sign = compareLocalAsc(dateLeft, dateRight);
var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));
dateLeft.setDate(dateLeft.getDate() - sign * difference);
var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);
var result = sign * (difference - isLastDayNotFull);
return result === 0 ? 0 : result;
}
var millisecondsInMinute = 6e4;
var millisecondsInHour = 36e5;
function differenceInMilliseconds(dateLeft, dateRight) {
requiredArgs(2, arguments);
return toDate(dateLeft).getTime() - toDate(dateRight).getTime();
}
var roundingMap = {
ceil: Math.ceil,
round: Math.round,
floor: Math.floor,
trunc: function trunc(value) {
return value < 0 ? Math.ceil(value) : Math.floor(value);
}
// Math.trunc is not supported by IE
};
var defaultRoundingMethod = "trunc";
function getRoundingMethod(method) {
return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];
}
function differenceInHours(dateLeft, dateRight, options) {
requiredArgs(2, arguments);
var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;
return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
var dateLeft = toDate(dirtyDateLeft);
var dateRight = toDate(dirtyDateRight);
var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();
var monthDiff = dateLeft.getMonth() - dateRight.getMonth();
return yearDiff * 12 + monthDiff;
}
function compareAsc(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
var dateLeft = toDate(dirtyDateLeft);
var dateRight = toDate(dirtyDateRight);
var diff = dateLeft.getTime() - dateRight.getTime();
if (diff < 0) {
return -1;
} else if (diff > 0) {
return 1;
} else {
return diff;
}
}
function endOfDay(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
date.setHours(23, 59, 59, 999);
return date;
}
function endOfMonth(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
var month = date.getMonth();
date.setFullYear(date.getFullYear(), month + 1, 0);
date.setHours(23, 59, 59, 999);
return date;
}
function isLastDayOfMonth(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
return endOfDay(date).getTime() === endOfMonth(date).getTime();
}
function differenceInMonths(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
var dateLeft = toDate(dirtyDateLeft);
var dateRight = toDate(dirtyDateRight);
var sign = compareAsc(dateLeft, dateRight);
var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));
var result;
if (difference < 1) {
result = 0;
} else {
if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {
dateLeft.setDate(30);
}
dateLeft.setMonth(dateLeft.getMonth() - sign * difference);
var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign;
if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {
isLastMonthNotFull = false;
}
result = sign * (difference - Number(isLastMonthNotFull));
}
return result === 0 ? 0 : result;
}
function differenceInWeeks(dateLeft, dateRight, options) {
requiredArgs(2, arguments);
var diff = differenceInDays(dateLeft, dateRight) / 7;
return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
var dateLeft = toDate(dirtyDateLeft);
var dateRight = toDate(dirtyDateRight);
return dateLeft.getFullYear() - dateRight.getFullYear();
}
function differenceInYears(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
var dateLeft = toDate(dirtyDateLeft);
var dateRight = toDate(dirtyDateRight);
var sign = compareAsc(dateLeft, dateRight);
var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight));
dateLeft.setFullYear(1584);
dateRight.setFullYear(1584);
var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;
var result = sign * (difference - Number(isLastYearNotFull));
return result === 0 ? 0 : result;
}
function differenceInQuarters(dateLeft, dateRight, options) {
requiredArgs(2, arguments);
var diff = differenceInMonths(dateLeft, dateRight) / 3;
return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
const getDatesDiff = (dateFrom, dateTo, viewMode) => {
switch (viewMode) {
case ViewMode.Day:
return differenceInDays(dateFrom, dateTo);
case ViewMode.TwoDays:
return Math.round(differenceInDays(dateFrom, dateTo) / 2);
case ViewMode.HalfDay:
return Math.round(differenceInHours(dateFrom, dateTo) / 12);
case ViewMode.QuarterDay:
return Math.round(differenceInHours(dateFrom, dateTo) / 6);
case ViewMode.Hour:
return differenceInHours(dateFrom, dateTo);
case ViewMode.Month:
return differenceInMonths(dateFrom, dateTo);
case ViewMode.Week:
return differenceInWeeks(dateFrom, dateTo);
case ViewMode.QuarterYear:
return differenceInQuarters(dateFrom, dateTo);
case ViewMode.Year:
return differenceInYears(dateFrom, dateTo);
default:
throw new Error("Unknown view mode");
}
};
const ganttDateRange = (tasks, viewMode, preStepsCount) => {
let minTaskDate = null;
let maxTaskDate = null;
for (const task of tasks) {
if (task.type !== "empty") {
if (!minTaskDate || task.start < minTaskDate) {
minTaskDate = task.start;
}
if (!maxTaskDate || task.end > maxTaskDate) {
maxTaskDate = task.end;
}
}
}
if (!minTaskDate || !maxTaskDate) {
return [/* @__PURE__ */ new Date(), /* @__PURE__ */ new Date(), 2];
}
let newStartDate = null;
let newEndDate = null;
switch (viewMode) {
case ViewMode.Year:
newStartDate = subYears(minTaskDate, preStepsCount);
newStartDate = startOfYear(newStartDate);
newEndDate = addYears(maxTaskDate, 1);
newEndDate = startOfYear(newEndDate);
break;
case ViewMode.QuarterYear:
newStartDate = subMonths(minTaskDate, preStepsCount * 3);
newStartDate = startOfQuarter(newStartDate);
newEndDate = addMonths(maxTaskDate, 3);
newEndDate = startOfQuarter(addMonths(newEndDate, 3));
break;
case ViewMode.Month:
newStartDate = subMonths(minTaskDate, preStepsCount);
newStartDate = startOfMonth(newStartDate);
newEndDate = addYears(maxTaskDate, 1);
newEndDate = startOfYear(newEndDate);
break;
case ViewMode.Week:
newStartDate = startOfWeek(minTaskDate);
newStartDate = subWeeks(newStartDate, preStepsCount);
newEndDate = startOfDay(maxTaskDate);
newEndDate = addMonths(newEndDate, 1.5);
break;
case ViewMode.TwoDays:
newStartDate = startOfDay(minTaskDate);
newStartDate = subDays(newStartDate, preStepsCount);
newEndDate = startOfDay(maxTaskDate);
newEndDate = addDays(newEndDate, 19);
break;
case ViewMode.Day:
newStartDate = startOfDay(minTaskDate);
newStartDate = subDays(newStartDate, preStepsCount);
newEndDate = startOfDay(maxTaskDate);
newEndDate = addDays(newEndDate, 30);
break;
case ViewMode.QuarterDay:
newStartDate = startOfDay(minTaskDate);
newStartDate = subHours(newStartDate, preStepsCount * 6);
newEndDate = startOfDay(maxTaskDate);
newEndDate = addHours(newEndDate, 66);
break;
case ViewMode.HalfDay:
newStartDate = startOfDay(minTaskDate);
newStartDate = subHours(newStartDate, preStepsCount * 12);
newEndDate = startOfDay(maxTaskDate);
newEndDate = addHours(newEndDate, 108);
break;
case ViewMode.Hour:
newStartDate = startOfHour(minTaskDate);
newStartDate = subHours(newStartDate, preStepsCount);
newEndDate = startOfDay(maxTaskDate);
newEndDate = addDays(newEndDate, 1);
break;
}
return [
newStartDate,
minTaskDate,
getDatesDiff(newEndDate, newStartDate, viewMode)
];
};
const getWeekNumberISO8601 = (date) => {
const tmpDate = new Date(date.valueOf());
const dayNumber = (tmpDate.getDay() + 6) % 7;
tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);
const firstThursday = tmpDate.valueOf();
tmpDate.setMonth(0, 1);
if (tmpDate.getDay() !== 4) {
tmpDate.setMonth(0, 1 + (4 - tmpDate.getDay() + 7) % 7);
}
const weekNumber = (1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 6048e5)).toString();
if (weekNumber.length === 1) {
return `0${weekNumber}`;
} else {
return weekNumber;
}
};
const getDaysInMonth = (month, year) => {
return new Date(year, month + 1, 0).getDate();
};
const ganttTable_Header = "_ganttTable_Header_7mmcq_1";
const ganttTable_HeaderSeparator = "_ganttTable_HeaderSeparator_7mmcq_8";
const ganttTable_HeaderContent = "_ganttTable_HeaderContent_7mmcq_15";
const ganttTable_HeaderTitle = "_ganttTable_HeaderTitle_7mmcq_21";
const ganttTable_HeaderItem = "_ganttTable_HeaderItem_7mmcq_25";
const resizer = "_resizer_7mmcq_38";
const styles$j = {
ganttTable_Header,
ganttTable_HeaderSeparator,
ganttTable_HeaderContent,
ganttTable_HeaderTitle,
ganttTable_HeaderItem,
resizer
};
const taskListHeaderAction = "_taskListHeaderAction_j1iwy_1";
const style$1 = {
taskListHeaderAction
};
const TaskListHeaderActions = ({
onCollapseAll,
onExpandFirstLevel,
onExpandAll,
colors
}) => {
let themeOptions = {
palette: {
primary: {
main: colors.barLabelColor
// Maps to a primary color (e.g., task bar background)
},
secondary: {
main: colors.barLabelColor
// Maps to a secondary color (e.g., task progress)
},
background: {
default: colors.evenTaskBackgroundColor,
// Background color for even tasks
paper: colors.oddTaskBackgroundColor
// Background color for odd tasks or paper elements
},
text: {
primary: colors.barLabelColor,
// Main text color (bar labels, etc.)
secondary: colors.barLabelColor
// Context menu text color
}
},
components: {
MuiButton: {
styleOverrides: {
root: {
color: colors.barLabelColor
// Use the bar label color for button text
}
}
},
MuiTooltip: {
styleOverrides: {
tooltip: {
backgroundColor: colors.contextMenuBgColor,
// Tooltip background color
color: colors.contextMenuTextColor
// Tooltip text color
}
}
},
MuiSvgIcon: {
styleOverrides: {
root: {
color: colors.barLabelColor,
// Apply primary icon color to all icons
"&.MuiSvgIcon-colorSecondary": {
color: colors.barLabelWhenOutsideColor
// Apply secondary color to icons
}
}
}
}
}
};
const materialLightTheme = createTheme(themeOptions);
return /* @__PURE__ */ jsx(ThemeProvider, { theme: materialLightTheme, children: /* @__PURE__ */ jsxs("div", { className: style$1.taskListHeaderAction, children: [
/* @__PURE__ */ jsx(Tooltip$1, { title: "Collapse All", children: /* @__PURE__ */ jsx(IconButton, { onClick: onCollapseAll, children: /* @__PURE__ */ jsx(UnfoldLess, {}) }) }),
/* @__PURE__ */ jsx(Tooltip$1, { title: "Expand First Level", children: /* @__PURE__ */ jsx(IconButton, { onClick: onExpandFirstLevel, children: /* @__PURE__ */ jsx(UnfoldMore, {}) }) }),
/* @__PURE__ */ jsx(Tooltip$1, { title: "Expand All", children: /* @__PURE__ */ jsx(IconButton, { onClick: onExpandAll, children: /* @__PURE__ */ jsx(UnfoldMoreDouble, {}) }) })
] }) });
};
const TaskListHeaderDefaultInner = (props) => {
const {
headerHeight,
fontFamily,
fontSize,
columns,
canResizeColumns,
onColumnResizeStart,
onCollapseAll,
onExpandFirstLevel,
onExpandAll,
colors
} = props;
return /* @__PURE__ */ jsx(
"div",
{
className: styles$j.ganttTable_Header,
style: {
height: headerHeight,
fontFamily,
fontSize
},
children: columns.map(({ title, width, canResize }, index2) => {
return /* @__PURE__ */ jsxs(Fragment, { children: [
index2 > 0 && /* @__PURE__ */ jsx(
"div",
{
className: styles$j.ganttTable_HeaderSeparator,
style: {
height: headerHeight * 0.5,
marginTop: headerHeight * 0.2
}
}
),
/* @__PURE__ */ jsxs(
"div",
{
"data-testid": `table-column-header-${title}`,
className: styles$j.ganttTable_HeaderItem,
style: {
minWidth: width,
maxWidth: width
},
children: [
/* @__PURE__ */ jsxs("div", { className: styles$j.ganttTable_HeaderContent, children: [
/* @__PURE__ */ jsx("div", { className: styles$j.ganttTable_HeaderTitle, children: title }),
title === "Name" && /* @__PURE__ */ jsx(
TaskListHeaderActions,
{
onCollapseAll,
onExpandFirstLevel,
onExpandAll,
colors
}
)
] }),
canResizeColumns && canResize !== false && /* @__PURE__ */ jsx(
"div",
{
"data-testid": `table-column-header-resize-handle-${title}`,
className: styles$j.resizer,
onMouseDown: (event) => {
onColumnResizeStart(index2, event.clientX);
},
onTouchStart: (event) => {
const firstTouch = event.touches[0];
if (firstTouch) {
onColumnResizeStart(index2, firstTouch.clientX);
}
}
}
)
]
}
)
] }, index2);
})
}
);
};
const TaskListHeaderDefault = memo(TaskListHeaderDefaultInner);
const checkHasChildren = (task, childTasksMap) => {
const {
id,
comparisonLevel = 1
} = task;
const childIdsByLevel = childTasksMap.get(comparisonLevel);
if (!childIdsByLevel) {
return false;
}
const childs = childIdsByLevel.get(id);
if (!childs) {
return false;
}
return childs.length > 0;
};
const taskListTableRow = "_taskListTableRow_w35p0_1";
const taskListTableRowGrabbing = "_taskListTableRowGrabbing_w35p0_7";
const cut = "_cut_w35p0_11";
const taskListCell = "_taskListCell_w35p0_15";
const taskListCellInner = "_taskListCellInner_w35p0_24";
const dropAfter = "_dropAfter_w35p0_29";
const dropAfterLighten = "_dropAfterLighten_w35p0_41";
const dropBefore = "_dropBefore_w35p0_53";
const dropBeforeLighten = "_dropBeforeLighten_w35p0_64";
const styles$i = {
taskListTableRow,
taskListTableRowGrabbing,
cut,
taskListCell,
taskListCellInner,
dropAfter,
dropAfterLighten,
dropBefore,
dropBeforeLighten
};
const TaskListTableRowInner = ({
canMoveTasks,
colors,
columns,
dateSetup,
dependencyMap,
depth,
distances,
fullRowHeight,
getTaskCurrentState,
handleAddTask,
handleDeleteTasks,
handleEditTask,
handleMoveTaskBefore,
handleMoveTaskAfter,
handleMoveTasksInside,
handleOpenContextMenu,
hasChildren,
icons = void 0,
indexStr,
isClosed,
isCut,
isEven,
isSelected,
isShowTaskNumbers,
onClick,
onExpanderClick,
scrollToTask,
selectTaskOnMouseDown,
style: style2 = void 0,
task,
tasks,
draggedTask,
setDraggedTask
}) => {
const { id, comparisonLevel = 1 } = task;
const onRootMouseDown = useCallback(
(event) => {
if (event.button !== 0) {
return;
}
if (task.type !== "empty") {
scrollToTask(task);
}
selectTaskOnMouseDown(task.id, event);
onClick(task);
},
[scrollToTask, selectTaskOnMouseDown, task]
);
const onContextMenu = useCallback(
(event) => {
event.preventDefault();
handleOpenContextMenu(task, event.clientX, event.clientY);
},
[handleOpenContextMenu, task]
);
const isDraggedTaskAncestorOfDropTarget = (draggedItem) => {
let idToTaskIndex = new Map(tasks.map((task2, index2) => [task2.id, index2]));
let parentId = task.parent;
const parentsId = [];
while (parentId) {
parentsId.push(parentId);
parentId = tasks[idToTaskIndex.get(parentId)].parent;
}
return parentsId.includes(draggedItem.id);
};
const dependencies = useMemo(() => {
const dependenciesAtLevel = dependencyMap.get(comparisonLevel);
if (!dependenciesAtLevel) {
return [];
}
const dependenciesByTask = dependenciesAtLevel.get(id);
if (!dependenciesByTask) {
return [];
}
return dependenciesByTask.map(({ source }) => source);
}, [comparisonLevel, dependencyMap, id]);
const columnData = useMemo(
() => ({
canMoveTasks,
dateSetup,
dependencies,
depth,
distances,
handleDeleteTasks,
handleAddTask,
handleEditTask,
hasChildren,
icons,
indexStr,
isClosed,
isShowTaskNumbers,
onExpanderClick,
task,
//: task.type === "empty" ? task : getTaskCurrentState(task),
colors
}),
[
canMoveTasks,
dateSetup,
dependencies,
depth,
distances,
getTaskCurrentState,
handleDeleteTasks,
handleAddTask,
handleEditTask,
hasChildren,
icons,
indexStr,
isClosed,
isShowTaskNumbers,
onExpanderClick,
task,
colors
]
);
const dropPreviewOffset = distances.nestedTaskNameOffset * depth + distances.expandIconWidth;
const [hoveringState, setHoveringState] = useState({
hoveringBefore: false,
hoveringInside: false,
hoveringAfter: false
});
let backgroundColor = isSelected ? colors.selectedTaskBackgroundColor : isEven && !hoveringState.hoveringInside ? colors.evenTaskBackgroundColor : colors.oddTaskBackgroundColor;
if (hoveringState.hoveringInside && !hoveringState.hoveringAfter && !hoveringState.hoveringBefore) {
backgroundColor = colors.taskDragColor;
}
const handleDragStart = (event) => {
setDraggedTask(task);
event.dataTransfer.setData("draggedTask", task == null ? void 0 : task.id);
};
const handleDragOver = (event) => {
event.preventDefault();
};
const handleDragEnd = () => {
setDraggedTask(null);
};
const canDropBefore = () => {
let canDropBefore2 = false;
if (draggedTask) {
const hoveringOnBrother = draggedTask.parent === task.parent && tasks.findIndex((t2) => t2.id === draggedTask.id) === tasks.findIndex((t2) => t2.id === task.id) - 1;
if (!hoveringOnBrother && draggedTask.id !== task.id) {
canDropBefore2 = !isDraggedTaskAncestorOfDropTarget(draggedTask);
}
}
return canDropBefore2;
};
const dropBefore2 = () => {
if (canDropBefore()) {
handleMoveTaskBefore(task, draggedTask);
}
setHoveringState({
hoveringBefore: false,
hoveringInside: false,
hoveringAfter: false
});
};
const canDropAfter = () => {
let canDropAfter2 = false;
if (draggedTask) {
const hoveringOnBrother = draggedTask.parent === task.parent && tasks.findIndex((t2) => t2.id === draggedTask.id) === tasks.findIndex((t2) => t2.id === task.id) + 1;
if (!hoveringOnBrother && draggedTask.id !== task.id) {
canDropAfter2 = !isDraggedTaskAncestorOfDropTarget(draggedTask);
}
}
return canDropAfter2;
};
const dropAfter2 = () => {
if (canDropAfter()) {
handleMoveTaskAfter(task, draggedTask);
}
setHoveringState({
hoveringBefore: false,
hoveringInside: false,
hoveringAfter: false
});
};
const canDropInside = () => {
let canDropInside2 = false;
if (task.type !== "empty" && task.type !== "milestone") {
if (draggedTask) {
if (!isDraggedTaskAncestorOfDropTarget(draggedTask)) {
canDropInside2 = draggedTask.id !== id || (draggedTask.comparisonLevel || 1) !== comparisonLevel;
}
}
}
return canDropInside2;
};
const dropInside = () => {
if (canDropInside() && task.type !== "empty") {
handleMoveTasksInside(task, [draggedTask]);
}
setHoveringState({
hoveringBefore: false,
hoveringInside: false,
hoveringAfter: false
});
};
return /* @__PURE__ */ jsxs(
"div",
{
className: `${styles$i.taskListTableRow} ${isCut ? styles$i.cut : ""}`,
onMouseDown: onRootMouseDown,
style: {
height: fullRowHeight,
backgroundColor,
...style2
},
onContextMenu,
draggable: true,
onDragStart: handleDragStart,
onDragOver: handleDragOver,
onDragEnd: handleDragEnd,
children: [
columns.map((column, index2) => {
const { Cell, width } = column;
return /* @__PURE__ */ jsx(
"div",
{
className: styles$i.taskListCell,
style: {
minWidth: width,
maxWidth: width
},
children: /* @__PURE__ */ jsx(
"div",
{
className: styles$i.taskListCellInner,
onDragEnter: () => {
setHoveringState({
hoveringBefore: false,
hoveringInside: canDropInside(),
hoveringAfter: false
});
},
onDragLeave: () => {
setHoveringState((prevState) => {
return { ...prevState, hoveringInside: false };
});
},
onDragOver: (event) => {
event.preventDefault();
event.dataTransfer.dropEffect = canDropInside() ? "move" : "none";
},
onDrop: dropInside,
style: {
height: Math.max(0, fullRowHeight - 2 * 8)
},
children: /* @__PURE__ */ jsx(
"div",
{
style: {
pointerEvents: hoveringState.hoveringInside ? "none" : "auto"
},
children: /* @__PURE__ */ jsx(Cell, { data: columnData })
}
)
}
)
},
index2
);
}),
/* @__PURE__ */ jsx(
"div",
{
"data-testid": `table-row-drop-before-${task.name}`,
className: `${styles$i.dropBefore} ${hoveringState.hoveringBefore ? styles$i.dropBeforeLighten : ""}`,
style: {
left: dropPreviewOffset,
backgroundColor: hoveringState.hoveringBefore ? colors.taskDragColor : void 0,
color: hoveringState.hoveringBefore ? colors.taskDragColor : void 0
},
onDragEnter: (event) => {
event.preventDefault();
setHoveringState({
hoveringBefore: canDropBefore(),
hoveringInside: false,
hoveringAfter: false
});
},
onDragLeave: () => {
setHoveringState((prevState) => {
return { ...prevState, hoveringBefore: false };
});
},
onDragOver: (event) => {
event.preventDefault();
event.dataTransfer.dropEffect = canDropBefore() ? "move" : "none";
},
onDrop: dropBefore2
}
),
/* @__PURE__ */ jsx(
"div",
{
"data-testid": `table-row-drop-after-${task.name}`,
className: `${styles$i.dropAfter} ${hoveringState.hoveringAfter ? styles$i.dropBeforeLighten : ""}`,
style: {
left: dropPreviewOffset,
backgroundColor: hoveringState.hoveringAfter ? colors.taskDragColor : void 0,
color: hoveringState.hoveringAfter ? colors.taskDragColor : void 0
},
onDragEnter: () => setHoveringState({
hoveringBefore: false,
hoveringInside: false,
hoveringAfter: canDropAfter()
}),
onDragLeave: () => setHoveringState((prevState) => {
return { ...prevState, hoveringAfter: false };
}),
onDragOver: (event) => {
event.preventDefault();
event.dataTransfer.dropEffect = canDropAfter() ? "move" : "none";
},
onDrop: dropAfter2
}
)
]
}
);
};
const TaskListTableRow = memo(TaskListTableRowInner);
const taskListWrapper = "_taskListWrapper_yx1w7_1";
const styles$h = {
taskListWrapper
};
const TaskListTableDefaultInner = ({
canMoveTasks,
childTasksMap,
colors,
columns,
cutIdsMirror,
dateSetup,
dependencyMap,
distances,
fontFamily,
fontSize,
fullRowHeight,
getTaskCurrentState,
handleAddTask,
handleDeleteTasks,
handleEditTask,
handleMoveTaskBefore,
handleMoveTaskAfter,
handleMoveTasksInside,
handleOpenContextMenu,
icons,
isShowTaskNumbers,
mapTaskToNestedIndex,
onClick,
onExpanderClick,
renderedIndexes,
scrollToTask,
selectTaskOnMouseDown,
selectedIdsMirror,
tasks
}) => {
const renderedTasks = useMemo(
/**
* TO DO: maybe consider tasks on other levels?
*/
() => tasks.filter((task) => !task.comparisonLevel || task.comparisonLevel === 1),
[tasks]
);
const [draggedTask, setDraggedTask] = useState(null);
const renderedListWithOffset = useMemo(() => {
if (!renderedIndexes) {
return null;
}
const [start, end] = renderedIndexes;
const renderedList = [];
for (let index2 = start; index2 <= end; ++index2) {
const task = renderedTasks[index2];
if (!task) {
break;
}
const { id, comparisonLevel = 1 } = task;
const indexesOnLevel = mapTaskToNestedIndex.get(comparisonLevel);
if (!indexesOnLevel) {
throw new Error(`Indexes are not found for level ${comparisonLevel}`);
}
const taskIndex = indexesOnLevel.get(id);
if (!taskIndex) {
throw new Error(`Index is not found for task ${id}`);
}
const [depth, indexStr] = taskIndex;
renderedList.push(
/* @__PURE__ */ jsx(
TaskListTableRow,
{
canMoveTasks,
colors,
columns,
dateSetup,
dependencyMap,
depth,
distances,
fullRowHeight,
getTaskCurrentState,
handleAddTask,
handleDeleteTasks,
handleEditTask,
handleMoveTaskBefore,
handleMoveTaskAfter,
handleMoveTasksInside,
handleOpenContextMenu,
hasChildren: checkHasChildren(task, childTasksMap),
icons,
indexStr,
isClosed: Boolean(task == null ? void 0 : task.hideChildren),
isCut: cutIdsMirror[id],
isEven: index2 % 2 === 1,