gantt-task-react-powern 0.6.17 → 0.6.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/task-list/task-list.d.ts +2 -0
- package/dist/index.css +11 -3
- package/dist/index.js +337 -108
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +337 -108
- package/dist/index.modern.js.map +1 -1
- package/dist/types/public-types.d.ts +5 -0
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/types/public-types.ts","../src/helpers/date-helper.ts","../src/components/task-list/task-list-header.tsx","../src/components/task-list/task-list-table.tsx","../src/components/other/tooltip.tsx","../src/components/other/vertical-scroll.tsx","../src/components/task-list/task-list.tsx","../src/components/grid/grid-body.tsx","../src/components/grid/grid.tsx","../src/components/calendar/top-part-of-calendar.tsx","../src/components/calendar/calendar.tsx","../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs","../src/components/other/arrow.tsx","../src/helpers/bar-helper.ts","../src/helpers/other-helper.ts","../src/components/task-item/bar/bar-display.tsx","../src/components/task-item/bar/bar-date-handle.tsx","../src/components/task-item/bar/bar-progress-handle.tsx","../src/components/task-item/bar/bar.tsx","../src/components/task-item/bar/bar-small.tsx","../src/components/task-item/milestone/milestone.tsx","../src/components/task-item/project/project.tsx","../src/components/task-item/task-item.tsx","../src/components/gantt/task-gantt-content.tsx","../src/components/gantt/task-gantt.tsx","../src/components/other/horizontal-scroll.tsx","../src/components/gantt/gantt.tsx"],"sourcesContent":["export enum ViewMode {\n Hour = \"Hour\",\n QuarterDay = \"Quarter Day\",\n HalfDay = \"Half Day\",\n Day = \"Day\",\n /** ISO-8601 week */\n Week = \"Week\",\n Month = \"Month\",\n Quarter = \"Quarter\",\n Year = \"Year\",\n}\nexport type TaskType = \"task\" | \"milestone\" | \"project\";\nexport type Dependency = \"SS\" | \"SF\" | \"FS\" | \"FF\";\n\nexport declare type DependencyType = {\n id: string;\n type: Dependency;\n};\nexport interface Task {\n id: string;\n optionalId?: string | null;\n type: TaskType;\n name: string;\n start: Date;\n end: Date;\n /**\n * From 0 to 100\n */\n progress: number;\n actualStart: Date;\n actualEnd: Date;\n criticalPathArrows?: Array<{ taskId: string; arrowColor: string ; criticalPathType: string }>;\n styles?: {\n taskProgressColor?: string;\n backgroundColor?: string;\n backgroundSelectedColor?: string;\n progressColor?: string;\n progressSelectedColor?: string;\n criticalPathColor?: string;\n };\n depth: number;\n isDisabled?: boolean;\n project?: string;\n dependencies?: DependencyType[];\n hideChildren?: boolean;\n displayOrder?: number;\n childrenCount?: number;\n}\n\nexport interface EventOption {\n /**\n * Time step value for date changes.\n */\n timeStep?: number;\n /**\n * Invokes on bar select on unselect.\n */\n onSelect?: (task: Task, isSelected: boolean) => void;\n /**\n * Invokes on bar double click.\n */\n onDoubleClick?: (task: Task) => void;\n /**\n * Invokes on bar click.\n */\n onClick?: (task: Task) => void;\n /**\n * Invokes on end and start time change. Chart undoes operation if method return false or error.\n */\n onDateChange?: (\n task: Task,\n children: Task[]\n ) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on progress change. Chart undoes operation if method return false or error.\n */\n onProgressChange?: (\n task: Task,\n children: Task[]\n ) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on delete selected task. Chart undoes operation if method return false or error.\n */\n onDelete?: (task: Task) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on expander on task list\n */\n onExpanderClick?: (task: Task) => void;\n /**\n * Invokes when tasks are multi-selected via checkboxes\n */\n onMultiSelect?: (tasks: Task[]) => void;\n}\n\nexport interface DisplayOption {\n viewMode?: ViewMode;\n viewDate?: Date;\n preStepsCount?: number;\n /**\n * Specifies the month name language. Able formats: ISO 639-2, Java Locale\n */\n locale?: string;\n rtl?: boolean;\n}\n\nexport interface StylingOption {\n headerHeight?: number;\n columnWidth?: number;\n listCellWidth?: string;\n rowHeight?: number;\n ganttHeight?: number;\n barCornerRadius?: number;\n handleWidth?: number;\n fontFamily?: string;\n fontSize?: string;\n /**\n * How many of row width can be taken by task.\n * From 0 to 100\n */\n barFill?: number;\n barProgressColor?: string;\n barProgressSelectedColor?: string;\n barBackgroundColor?: string;\n barBackgroundSelectedColor?: string;\n projectProgressColor?: string;\n projectProgressSelectedColor?: string;\n projectBackgroundColor?: string;\n projectBackgroundSelectedColor?: string;\n milestoneBackgroundColor?: string;\n milestoneBackgroundSelectedColor?: string;\n arrowColor?: string;\n arrowIndent?: number;\n todayColor?: string;\n weekendColor?: string;\n TooltipContent?: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n }>;\n TaskListHeader?: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n }>;\n TaskListTable?: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n selectedTaskId: string;\n /**\n * Sets selected task by id\n */\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n }>;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n taskProgressColor?: string;\n delayToRender?: number;\n shouldNotShowLoadingOverlay?: boolean;\n}\n\nexport interface GanttProps extends EventOption, DisplayOption, StylingOption {\n tasks: Task[];\n leafTasks?: Task[];\n scheduleType: string;\n startDate?: Date;\n endDate?: Date;\n}\n","import { Task, ViewMode } from \"../types/public-types\";\nimport DateTimeFormatOptions = Intl.DateTimeFormatOptions;\nimport DateTimeFormat = Intl.DateTimeFormat;\n\ntype DateHelperScales =\n | \"year\"\n | \"quarter\"\n | \"month\"\n | \"day\"\n | \"hour\"\n | \"minute\"\n | \"second\"\n | \"millisecond\";\n\nconst intlDTCache = {};\nexport const getCachedDateTimeFormat = (\n locString: string | string[],\n opts: DateTimeFormatOptions = {}\n): DateTimeFormat => {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n};\n\nexport const addToDate = (\n date: Date,\n quantity: number,\n scale: DateHelperScales\n) => {\n const newDate = new Date(\n date.getFullYear() + (scale === \"year\" ? quantity : 0),\n date.getMonth() + (scale === \"month\" ? quantity : 0),\n date.getDate() + (scale === \"day\" ? quantity : 0),\n date.getHours() + (scale === \"hour\" ? quantity : 0),\n date.getMinutes() + (scale === \"minute\" ? quantity : 0),\n date.getSeconds() + (scale === \"second\" ? quantity : 0),\n date.getMilliseconds() + (scale === \"millisecond\" ? quantity : 0)\n );\n return newDate;\n};\n\nexport const startOfDate = (date: Date, scale: DateHelperScales) => {\n const scores = [\n \"millisecond\",\n \"second\",\n \"minute\",\n \"hour\",\n \"day\",\n \"month\",\n \"quarter\",\n \"year\",\n ];\n\n const shouldReset = (_scale: DateHelperScales) => {\n const maxScore = scores.indexOf(scale);\n return scores.indexOf(_scale) <= maxScore;\n };\n const newDate = new Date(\n date.getFullYear(),\n shouldReset(\"year\") ? 0 : date.getMonth(),\n shouldReset(\"month\") ? 1 : date.getDate(),\n shouldReset(\"day\") ? 0 : date.getHours(),\n shouldReset(\"hour\") ? 0 : date.getMinutes(),\n shouldReset(\"minute\") ? 0 : date.getSeconds(),\n shouldReset(\"second\") ? 0 : date.getMilliseconds()\n );\n return newDate;\n};\n\nexport const ganttDateRange = (\n tasks: Task[],\n viewMode: ViewMode,\n preStepsCount: number\n) => {\n let newStartDate: Date =\n tasks[0]?.start.getTime() !== 0\n ? tasks[0]?.start || new Date()\n : new Date();\n let newEndDate: Date =\n tasks[0]?.end.getTime() !== 0 ? tasks[0]?.end || new Date() : new Date();\n\n for (const task of tasks) {\n if (task.start && task.start.getTime() !== 0 && task.start < newStartDate) {\n newStartDate = task.start;\n }\n if (task.end && task.end.getTime() !== 0 && task.end > newEndDate) {\n newEndDate = task.end;\n }\n if (\n task.actualStart &&\n task.actualStart.getTime() !== 0 &&\n task.actualStart < newStartDate\n ) {\n newStartDate = task.actualStart;\n }\n if (\n task.actualEnd &&\n task.actualEnd.getTime() !== 0 &&\n task.actualEnd > newEndDate\n ) {\n newEndDate = task.actualEnd;\n }\n }\n\n switch (viewMode) {\n case ViewMode.Year:\n newStartDate = addToDate(newStartDate, -1, \"year\");\n newStartDate = startOfDate(newStartDate, \"year\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Quarter:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"year\");\n newStartDate = startOfDate(newStartDate, \"year\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"quarter\");\n break;\n case ViewMode.Month:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"month\");\n newStartDate = startOfDate(newStartDate, \"month\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Week:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(\n getMonday(newStartDate),\n -7 * preStepsCount,\n \"day\"\n );\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1.5, \"month\");\n break;\n case ViewMode.Day:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 19, \"day\");\n break;\n case ViewMode.QuarterDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 66, \"hour\"); // 24(1 day)*3 - 6\n break;\n case ViewMode.HalfDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 108, \"hour\"); // 24(1 day)*5 - 12\n break;\n case ViewMode.Hour:\n newStartDate = startOfDate(newStartDate, \"hour\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"hour\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1, \"day\");\n break;\n }\n return [newStartDate, newEndDate];\n};\n\nexport const seedDates = (\n startDate: Date,\n endDate: Date,\n viewMode: ViewMode\n) => {\n let currentDate: Date = new Date(startDate);\n const dates: Date[] = [currentDate];\n while (currentDate < endDate) {\n switch (viewMode) {\n case ViewMode.Year:\n currentDate = addToDate(currentDate, 1, \"year\");\n break;\n case ViewMode.Quarter:\n currentDate = addToDate(currentDate, 3, \"month\");\n break;\n case ViewMode.Month:\n currentDate = addToDate(currentDate, 1, \"month\");\n break;\n case ViewMode.Week:\n currentDate = addToDate(currentDate, 7, \"day\");\n break;\n case ViewMode.Day:\n currentDate = addToDate(currentDate, 1, \"day\");\n break;\n case ViewMode.HalfDay:\n currentDate = addToDate(currentDate, 12, \"hour\");\n break;\n case ViewMode.QuarterDay:\n currentDate = addToDate(currentDate, 6, \"hour\");\n break;\n case ViewMode.Hour:\n currentDate = addToDate(currentDate, 1, \"hour\");\n break;\n }\n dates.push(currentDate);\n }\n return dates;\n};\n\nexport const getLocaleMonth = (date: Date, locale: string) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n month: \"long\",\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\nexport const getLocalDayOfWeek = (\n date: Date,\n locale: string,\n format?: \"long\" | \"short\" | \"narrow\" | undefined\n) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n weekday: format,\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\n/**\n * Returns monday of current week\n * @param date date for modify\n */\nconst getMonday = (date: Date) => {\n const day = date.getDay();\n const diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\n\nexport const getWeekNumberISO8601 = (date: Date) => {\n const tmpDate = new Date(date.valueOf());\n const dayNumber = (tmpDate.getDay() + 6) % 7;\n tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);\n const firstThursday = tmpDate.valueOf();\n tmpDate.setMonth(0, 1);\n if (tmpDate.getDay() !== 4) {\n tmpDate.setMonth(0, 1 + ((4 - tmpDate.getDay() + 7) % 7));\n }\n const weekNumber = (\n 1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 604800000)\n ).toString();\n\n if (weekNumber.length === 1) {\n return `0${weekNumber}`;\n } else {\n return weekNumber;\n }\n};\n\nexport const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n};\n","import React from \"react\";\nimport styles from \"./task-list-header.module.css\";\n\nexport const TaskListHeaderDefault: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n}> = ({ headerHeight, fontFamily, fontSize, rowWidth, scheduleType, allSelected, onSelectAll }) => {\n return (\n <div\n className={styles.ganttTable}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n <div\n className={styles.ganttTable_Header}\n style={{\n height: headerHeight - 2,\n }}\n >\n {onSelectAll && (\n <div>\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <input \n type=\"checkbox\" \n checked={allSelected}\n onChange={(e) => onSelectAll(e.target.checked)} \n />\n </div>\n </div>\n )}\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n WBS\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n ID\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n >\n Task\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Planned Start\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Planned End\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Actual Start\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Actual End\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport styles from \"./task-list-table.module.css\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\n\nconst localeDateStringCache = {};\nconst toLocaleDateStringFactory =\n (locale: string) =>\n (date: Date, dateTimeOptions: Intl.DateTimeFormatOptions): string => {\n if (!date || date.getTime() === 0) return \"\"; // Handle invalid dates\n const key = date.toString();\n let lds = localeDateStringCache[key];\n if (!lds) {\n lds = date.toLocaleDateString(locale, dateTimeOptions);\n localeDateStringCache[key] = lds;\n }\n return lds;\n };\nconst dateTimeOptions: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n};\n\nexport const TaskListTableDefault: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n virtualItems?: VirtualItem[];\n}> = ({\n rowHeight,\n rowWidth,\n tasks,\n scheduleType,\n leafTasks,\n fontFamily,\n fontSize,\n locale,\n onExpanderClick,\n selectedTasks = [],\n onTaskSelect,\n taskLabelRenderer = t => \" \" + t.name,\n virtualItems,\n}) => {\n const toLocaleDateString = useMemo(\n () => toLocaleDateStringFactory(locale),\n [locale]\n );\n const leafTaskIds = useMemo(\n () => new Set(leafTasks.map(t => t.id)),\n [leafTasks]\n );\n\n // Checks if the task has a selected ancestor by traversing the WBS hierarchy\n const hasSelectedAncestor = (taskId: string, selectedSet: Set<string>, allTasks: Task[]): boolean => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return false;\n const parentWbs = getParentWbs(task.id);\n if (!parentWbs) return false;\n if (selectedSet.has(parentWbs)) return true;\n return hasSelectedAncestor(parentWbs, selectedSet, allTasks);\n };\n\n const itemsToRender = virtualItems || tasks.map((_, index) => ({ index, start: index * rowHeight, size: rowHeight, key: index, end: (index + 1) * rowHeight, lane: 0, measureElement: () => {} }));\n\n return (\n <div\n className={styles.taskListWrapper}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n {itemsToRender.map(vi => {\n const t = tasks[vi.index];\n let expanderSymbol = \"\";\n if (!(leafTaskIds.has(t.id) || t.type=== \"milestone\")) {\n if (t.hideChildren === false) {\n expanderSymbol = \"▼\";\n } else if (t.hideChildren === true) {\n expanderSymbol = \"►\";\n }\n }\n\n const isSelected = selectedTasks.includes(t.id);\n const isAncestorSelected = hasSelectedAncestor(t.id, new Set(selectedTasks), tasks);\n\n return (\n <div\n key={`${vi.key}`}\n data-index={vi.index}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${vi.size}px`,\n transform: `translateY(${vi.start}px)`,\n }}\n >\n <div\n className={\n t.type === \"milestone\"\n ? styles.taskListMilestoneRow\n : scheduleType === \"lookAhead\"\n ? styles.taskListLookAheadRow\n : styles.taskListTableRow\n }\n style={{ height: rowHeight }}\n key={`${t.id}row`}\n >\n {onTaskSelect && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <div className={styles.taskListText} style={{ \n display: \"flex\", \n justifyContent: \"center\", \n alignItems: \"center\",\n height: \"100%\",\n paddingLeft: \"0\",\n paddingRight: \"0\"\n }}>\n <input \n type=\"checkbox\" \n checked={isSelected}\n disabled={isAncestorSelected}\n onChange={(e) => onTaskSelect(t.id, e.target.checked)}\n />\n </div>\n </div>\n )}\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.id}\n >\n <div\n className={styles.taskListNameWrapper}\n style={{ paddingLeft: `${t.depth * 4}px` }}\n >\n {!(leafTaskIds.has(t.id) || t.type=== \"milestone\") ? (\n <div\n className={styles.taskListExpander}\n onClick={() => onExpanderClick(t)}\n >\n \n {expanderSymbol}\n </div>\n ) : (\n <div className={styles.taskListExpanderPlaceholder}></div>\n )}\n <div className={styles.taskListText}>\n {t.id}{\" \"}\n {t.actualEnd.getTime() > 0 &&\n t.actualEnd.getTime() < Date.now() ? (\n <span\n title=\"Task Complete\"\n style={{ color: \"limegreen\", fontSize: \"16px\" }}\n >\n ✔\n </span>\n ) : (\n \"\"\n )}\n </div>\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.optionalId?t.optionalId:\"\"}\n >\n {t.optionalId}\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n title={t.name}\n >\n <div className={styles.taskListText}>{taskLabelRenderer(t)}</div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {toLocaleDateString(t.start, dateTimeOptions)}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {toLocaleDateString(t.end, dateTimeOptions)}\n </div>\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {toLocaleDateString(t.actualStart, dateTimeOptions)}\n </div>\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {toLocaleDateString(t.actualEnd, dateTimeOptions)}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};","import React, { useRef, useEffect, useState } from \"react\";\nimport { Task } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport styles from \"./tooltip.module.css\";\n\nexport type TooltipProps = {\n task: BarTask;\n type: string;\n arrowIndent: number;\n rtl: boolean;\n svgContainerHeight: number;\n svgContainerWidth: number;\n svgWidth: number;\n headerHeight: number;\n taskListWidth: number;\n scrollX: number;\n scrollY: number;\n rowHeight: number;\n fontSize: string;\n fontFamily: string;\n TooltipContent: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n type: string;\n }>;\n};\nexport const Tooltip: React.FC<TooltipProps> = ({\n task,\n type,\n rowHeight,\n rtl,\n svgContainerHeight,\n svgContainerWidth,\n scrollX,\n scrollY,\n arrowIndent,\n fontSize,\n fontFamily,\n headerHeight,\n taskListWidth,\n TooltipContent,\n}) => {\n const tooltipRef = useRef<HTMLDivElement | null>(null);\n const [relatedY, setRelatedY] = useState(0);\n const [relatedX, setRelatedX] = useState(0);\n useEffect(() => {\n if (tooltipRef.current) {\n const tooltipHeight = tooltipRef.current.offsetHeight * 1.1;\n const tooltipWidth = tooltipRef.current.offsetWidth * 1.1;\n\n let newRelatedY = task.index * rowHeight - scrollY + headerHeight;\n let newRelatedX: number;\n if (rtl) {\n newRelatedX = task.x1 - arrowIndent * 1.5 - tooltipWidth - scrollX;\n if (newRelatedX < 0) {\n newRelatedX = task.x2 + arrowIndent * 1.5 - scrollX;\n }\n const tooltipLeftmostPoint = tooltipWidth + newRelatedX;\n if (tooltipLeftmostPoint > svgContainerWidth) {\n newRelatedX = svgContainerWidth - tooltipWidth;\n newRelatedY += rowHeight;\n }\n } else {\n newRelatedX =\n type == \"planned\"\n ? task.x2 + arrowIndent * 1.5 + taskListWidth - scrollX\n : task.actualx2 + arrowIndent * 1.5 + taskListWidth - scrollX;\n const tooltipLeftmostPoint = tooltipWidth + newRelatedX;\n const fullChartWidth = taskListWidth + svgContainerWidth;\n if (tooltipLeftmostPoint > fullChartWidth) {\n newRelatedX =\n type == \"planned\"\n ? task.x1 +\n taskListWidth -\n arrowIndent * 1.5 -\n scrollX -\n tooltipWidth\n : task.actualx1 +\n taskListWidth -\n arrowIndent * 1.5 -\n scrollX -\n tooltipWidth;\n }\n if (newRelatedX < taskListWidth) {\n newRelatedX = svgContainerWidth + taskListWidth - tooltipWidth;\n newRelatedY += rowHeight;\n }\n }\n\n const tooltipLowerPoint = tooltipHeight + newRelatedY - scrollY;\n if (tooltipLowerPoint > svgContainerHeight - scrollY) {\n newRelatedY = svgContainerHeight - tooltipHeight;\n }\n setRelatedY(newRelatedY);\n setRelatedX(newRelatedX);\n }\n }, [\n tooltipRef,\n task,\n arrowIndent,\n scrollX,\n scrollY,\n headerHeight,\n taskListWidth,\n rowHeight,\n svgContainerHeight,\n svgContainerWidth,\n rtl,\n ]);\n\n return (\n <div\n ref={tooltipRef}\n className={\n relatedX\n ? styles.tooltipDetailsContainer\n : styles.tooltipDetailsContainerHidden\n }\n style={{ left: relatedX, top: relatedY }}\n >\n <TooltipContent\n task={task}\n fontSize={fontSize}\n fontFamily={fontFamily}\n type={type}\n />\n </div>\n );\n};\n\nexport const StandardTooltipContent: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n type: string;\n}> = ({ task, fontSize, fontFamily, type }) => {\n const style = {\n fontSize,\n fontFamily,\n };\n if (type == \"planned\")\n return (\n <div className={styles.tooltipDefaultContainer} style={style}>\n <b\n style={{ fontSize: fontSize + 6 }}\n >{`${task.name}: Planned dates: `}</b>\n <b>{`${\n task.start.getMonth() + 1\n }/${task.start.getDate()}/${task.start.getFullYear()} - ${\n task.end.getMonth() + 1\n }/${task.end.getDate()}/${task.end.getFullYear()}`}</b>\n {task.end.getTime() - task.start.getTime() !== 0 && (\n <p\n className={styles.tooltipDefaultContainerParagraph}\n >{`Duration: ${~~(\n Math.round((task.end.getTime() - task.start.getTime()) /\n (1000 * 60 * 60 * 24))\n )} day(s)`}</p>\n )}\n\n <p className={styles.tooltipDefaultContainerParagraph}>\n {!!task.progress && `Progress: ${task.progress} %`}\n </p>\n </div>\n );\n else\n return (\n <div className={styles.tooltipDefaultContainer} style={style}>\n <b\n style={{ fontSize: fontSize + 6 }}\n >{`${task.name}: Actual dates: `}</b>\n <b>{`${\n task.actualStart.getMonth() + 1\n }/${task.actualStart.getDate()}/${task.actualStart.getFullYear()} - ${\n task.actualEnd.getMonth() + 1\n }/${task.actualEnd.getDate()}/${task.actualEnd.getFullYear()}`}</b>\n {task.actualEnd.getTime() - task.actualStart.getTime() !== 0 && (\n <p\n className={styles.tooltipDefaultContainerParagraph}\n >{`Duration: ${~~(\n Math.round((task.actualEnd.getTime() - task.actualStart.getTime()) /\n (1000 * 60 * 60 * 24))\n )} day(s)`}</p>\n )}\n\n <p className={styles.tooltipDefaultContainerParagraph}>\n {!!task.progress && `Progress: ${task.progress} %`}\n </p>\n </div>\n );\n};\n","import React, { SyntheticEvent, useRef, useEffect } from \"react\";\nimport styles from \"./vertical-scroll.module.css\";\n\nexport const VerticalScroll: React.FC<{\n scroll: number;\n ganttHeight: number;\n ganttFullHeight: number;\n headerHeight: number;\n rtl: boolean;\n onScroll: (event: SyntheticEvent<HTMLDivElement>) => void;\n}> = ({\n scroll,\n ganttHeight,\n ganttFullHeight,\n headerHeight,\n rtl,\n onScroll,\n}) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scroll;\n }\n }, [scroll]);\n\n return (\n <div\n style={{\n height: ganttHeight,\n marginTop: headerHeight,\n marginLeft: rtl ? \"\" : \"-1rem\",\n marginRight: \"1rem\",\n }}\n className={styles.scroll}\n onScroll={onScroll}\n ref={scrollRef}\n >\n <div style={{ height: ganttFullHeight, width: 1 }} />\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useVirtualizer, VirtualItem } from \"@tanstack/react-virtual\";\nimport { EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\n\nexport type TaskListProps = {\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n rowHeight: number;\n ganttHeight: number;\n scrollY: number;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n taskListRef: React.RefObject<HTMLDivElement>;\n horizontalContainerClass?: string;\n selectedTask: BarTask | undefined;\n setSelectedTask: (task: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n TaskListHeader: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n }>;\n TaskListTable: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n virtualItems?: VirtualItem[];\n }>;\n} & EventOption;\n\nexport const TaskList: React.FC<TaskListProps> = ({\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n rowHeight,\n scrollY,\n tasks,\n scheduleType,\n leafTasks,\n selectedTask,\n setSelectedTask,\n onExpanderClick,\n locale,\n ganttHeight,\n taskListRef,\n horizontalContainerClass,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n}) => {\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const [selectedTasks, setSelectedTasks] = useState<string[]>([]);\n const [pendingTaskSelect, setPendingTaskSelect] = useState<{ taskId: string; selected: boolean }[]>([]);\n const prevSelectedTasksRef = useRef<string[]>([]);\n const expandedTasks = useRef<string[]>([]);\n\n const virtualizer = useVirtualizer({\n count: tasks.length,\n getScrollElement: () => horizontalContainerRef.current,\n estimateSize: () => rowHeight,\n overscan: 10\n });\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (\n onMultiSelect &&\n JSON.stringify(prevSelectedTasksRef.current) !==\n JSON.stringify(selectedTasks)\n ) {\n const selectedTaskObjects = tasks.filter(task =>\n selectedTasks.includes(task.id)\n );\n prevSelectedTasksRef.current = [...selectedTasks];\n onMultiSelect(selectedTaskObjects);\n }\n }, [selectedTasks, tasks, onMultiSelect]);\n\n\n\n // process pending task selections\n useEffect(() => {\n if (pendingTaskSelect.length === 0) return;\n\n const newSelected = new Set(selectedTasks);\n pendingTaskSelect.forEach(({ taskId, selected }) => {\n if (selected) {\n // Expand the task and its children first\n recursiveOpen(taskId, tasks);\n // Collect descendants after expansion\n const descendants = getDescendants(taskId, tasks);\n newSelected.add(taskId);\n descendants.forEach(d => newSelected.add(d));\n } else {\n const descendants = getDescendants(taskId, tasks);\n newSelected.delete(taskId);\n descendants.forEach(d => newSelected.delete(d));\n }\n });\n\n setSelectedTasks(Array.from(newSelected));\n setPendingTaskSelect([]);\n }, [pendingTaskSelect]);\n\n // Handle tasks prop changes to update descendants of selected tasks\n useEffect(() => {\n expandedTasks.current = expandedTasks.current.filter(id => {\n const t = tasks.find(task => task.id === id);\n return t && !t.hideChildren;\n });\n if (selectedTasks.length === 0) return;\n\n const newSelected = new Set<string>();\n selectedTasks.forEach(taskId => {\n // Only include tasks that still exist\n if (tasks.find(t => t.id === taskId)) {\n recursiveOpen(taskId, tasks); // Ensure task is expanded\n newSelected.add(taskId);\n const descendants = getDescendants(taskId, tasks);\n descendants.forEach(d => newSelected.add(d));\n }\n });\n\n const newSelectedArray = Array.from(newSelected);\n if (JSON.stringify(newSelectedArray) !== JSON.stringify(selectedTasks)) {\n setSelectedTasks(newSelectedArray);\n }\n }, [tasks.length]);\n\n // Finds all descendant task IDs recursively using WBS hierarchy\n const getDescendants = (taskId: string, allTasks: Task[]): string[] => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return [];\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n return children.flatMap(child => [child.id, ...getDescendants(child.id, allTasks)]);\n };\n\n const recursiveOpen = (taskId: string, allTasks: Task[]) => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return;\n if (!expandedTasks.current.includes(taskId) && task.hideChildren) {\n onExpanderClick(task);\n expandedTasks.current = [...expandedTasks.current, taskId];\n }\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n children.forEach(c => recursiveOpen(c.id, allTasks));\n };\n\n const handleTaskSelect = (taskId: string, selected: boolean) => {\n setPendingTaskSelect(prev => [...prev, { taskId, selected }]);\n };\n\n const handleSelectAll = (selected: boolean) => {\n if (selected) {\n const topLevelTasks = tasks.filter(task => !getParentWbs(task.id));\n setPendingTaskSelect(topLevelTasks.map(task => ({ taskId: task.id, selected: true })));\n } else {\n setSelectedTasks([]);\n setPendingTaskSelect([]);\n }\n };\n\n const headerProps = {\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n scheduleType,\n allSelected: tasks.length > 0 && selectedTasks.length === tasks.length,\n onSelectAll: onMultiSelect ? handleSelectAll : undefined,\n };\n const selectedTaskId = selectedTask ? selectedTask.id : \"\";\n\n const tableProps = {\n rowHeight,\n rowWidth,\n fontFamily,\n fontSize,\n tasks,\n leafTasks,\n scheduleType,\n locale,\n selectedTaskId: selectedTaskId,\n setSelectedTask,\n onExpanderClick,\n selectedTasks: onMultiSelect ? selectedTasks : undefined,\n onTaskSelect: onMultiSelect ? handleTaskSelect : undefined,\n taskLabelRenderer,\n virtualItems: virtualizer.getVirtualItems(),\n };\n\n return (\n <div ref={taskListRef}>\n <TaskListHeader {...headerProps} />\n <div\n ref={horizontalContainerRef}\n className={horizontalContainerClass}\n style={ganttHeight ? { height: ganttHeight } : {}}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n <TaskListTable {...tableProps} />\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport { Task } from \"../../types/public-types\";\nimport { addToDate } from \"../../helpers/date-helper\";\nimport styles from \"./grid.module.css\";\n\nexport type GridBodyProps = {\n tasks: Task[];\n scheduleType: string;\n dates: Date[];\n svgWidth: number;\n rowHeight: number;\n columnWidth: number;\n todayColor: string;\n weekendColor: string;\n rtl: boolean;\n virtualItems?: VirtualItem[];\n visibleStartY: number;\n visibleEndY: number;\n};\n\nexport const GridBody: React.FC<GridBodyProps> = ({\n tasks,\n scheduleType,\n dates,\n rowHeight,\n svgWidth,\n columnWidth,\n todayColor,\n weekendColor,\n rtl,\n virtualItems = [],\n visibleStartY,\n visibleEndY,\n}) => {\n const visibleHeight = visibleEndY - visibleStartY;\n const now = new Date();\n\n // === Virtual row calculation ===\n const items =\n virtualItems.length > 0\n ? virtualItems\n : tasks.map((_, i) => ({\n index: i,\n start: i * rowHeight,\n end: (i + 1) * rowHeight,\n size: rowHeight,\n key: i,\n }));\n\n // === Helpers ===\n const isWeekend = (date: Date) => {\n const d = date.getDay();\n return d === 0 || d === 6;\n };\n\n const isTodayColumn = (i: number) => {\n const date = dates[i];\n const next = dates[i + 1];\n\n // Normal case\n if (next && date <= now && next > now) return true;\n\n // Last column edge case\n if (!next && date <= now) {\n const step = date.getTime() - dates[i - 1].getTime();\n const end = addToDate(date, step, \"millisecond\");\n return end > now;\n }\n\n return false;\n };\n\n // === Today & Weekend Rects (only visible area) ===\n const todayRects: React.ReactNode[] = [];\n const weekendRects: React.ReactNode[] = [];\n\n for (let i = 0, x = 0; i < dates.length; i++, x += columnWidth) {\n if (isTodayColumn(i)) {\n todayRects.push(\n <rect\n key={`today-${i}`}\n x={rtl ? x + columnWidth : x}\n y={visibleStartY}\n width={columnWidth}\n height={visibleHeight}\n fill={todayColor}\n />\n );\n }\n\n if (isWeekend(dates[i])) {\n weekendRects.push(\n <rect\n key={`weekend-${i}`}\n x={x}\n y={visibleStartY}\n width={columnWidth}\n height={visibleHeight}\n fill={weekendColor}\n />\n );\n }\n }\n\n // === Vertical Tick Lines ===\n const tickLines = dates.map((_, i) => (\n <line\n key={`tick-${i}`}\n x1={i * columnWidth}\n y1={visibleStartY}\n x2={i * columnWidth}\n y2={visibleEndY}\n className={styles.gridTick}\n />\n ));\n\n // === Horizontal Rows & Lines ===\n const rowBackgrounds: React.ReactNode[] = [];\n const rowLines: React.ReactNode[] = [];\n\n // Top border\n rowLines.push(\n <line\n key=\"top-line\"\n x1={0}\n y1={visibleStartY}\n x2={svgWidth}\n y2={visibleStartY}\n className={styles.gridRowLine}\n />\n );\n\n for (const vi of items) {\n const task = tasks[vi.index];\n if (!task) break;\n\n const y = vi.start;\n const isMilestone = task.type === \"milestone\";\n\n const rowClass = isMilestone\n ? styles.darkerGridRow\n : scheduleType === \"lookAhead\"\n ? styles.gridRowLookAhead\n : styles.gridRow;\n\n rowBackgrounds.push(\n <rect\n key={`bg-${vi.key}`}\n x={0}\n y={y}\n width={svgWidth}\n height={rowHeight}\n className={rowClass}\n />\n );\n\n rowLines.push(\n <line\n key={`line-${vi.key}`}\n x1={0}\n y1={y + rowHeight}\n x2={svgWidth}\n y2={y + rowHeight}\n className={styles.gridRowLine}\n />\n );\n }\n\n return (\n <g className=\"gridBody\">\n <g className=\"rows\">{rowBackgrounds}</g>\n <g className=\"rowLines\">{rowLines}</g>\n <g className=\"ticks\">{tickLines}</g>\n\n {scheduleType === \"lookAhead\" && (\n <g className=\"weekend\">{weekendRects}</g>\n )}\n\n <g className=\"today\">{todayRects}</g>\n </g>\n );\n};\n","import React from \"react\";\nimport { GridBody, GridBodyProps } from \"./grid-body\";\n\nexport type GridProps = GridBodyProps;\nexport const Grid: React.FC<GridProps> = props => {\n return (\n <g className=\"grid\" >\n <GridBody {...props} />\n </g>\n );\n};\n","import React from \"react\";\nimport styles from \"./calendar.module.css\";\n\ntype TopPartOfCalendarProps = {\n value: string;\n x1Line: number;\n y1Line: number;\n y2Line: number;\n xText: number;\n yText: number;\n textAnchor?: \"start\" | \"middle\" | \"end\";\n};\n\nexport const TopPartOfCalendar: React.FC<TopPartOfCalendarProps> = ({\n value,\n x1Line,\n y1Line,\n y2Line,\n xText,\n yText,\n textAnchor = \"middle\",\n}) => {\n const textAnchorClass =\n textAnchor === \"start\"\n ? styles.textAnchorStart\n : textAnchor === \"middle\"\n ? styles.textAnchorMiddle\n : styles.textAnchorEnd;\n return (\n <g className=\"calendarTop\">\n <line\n x1={x1Line}\n y1={y1Line}\n x2={x1Line}\n y2={y2Line}\n className={styles.calendarTopTick}\n key={value + \"line\"}\n />\n <text\n key={value + \"text\"}\n y={yText}\n x={xText}\n className={`${styles.calendarTopText} ${textAnchorClass}`}\n >\n {value}\n </text>\n </g>\n );\n};\n","import React, { ReactChild } from \"react\";\nimport { ViewMode } from \"../../types/public-types\";\nimport { TopPartOfCalendar } from \"./top-part-of-calendar\";\nimport {\n getCachedDateTimeFormat,\n getLocalDayOfWeek,\n getLocaleMonth,\n getWeekNumberISO8601,\n} from \"../../helpers/date-helper\";\nimport { DateSetup } from \"../../types/date-setup\";\nimport styles from \"./calendar.module.css\";\n\nexport type CalendarProps = {\n dateSetup: DateSetup;\n locale: string;\n viewMode: ViewMode;\n rtl: boolean;\n headerHeight: number;\n columnWidth: number;\n fontFamily: string;\n fontSize: string;\n};\n\nexport const Calendar: React.FC<CalendarProps> = ({\n dateSetup,\n locale,\n viewMode,\n rtl,\n headerHeight,\n columnWidth,\n fontFamily,\n fontSize,\n}) => {\n const getCalendarValuesForYear = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const bottomValue = date.getFullYear();\n bottomValues.push(\n <text\n key={date.getFullYear()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={styles.calendarBottomText}\n >\n {bottomValue}\n </text>\n );\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (6 + i + date.getFullYear() + 1) * columnWidth;\n } else {\n xText = (6 + i - date.getFullYear()) * columnWidth;\n }\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={headerHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForQuarter = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const quarter = Math.floor(date.getMonth() / 3) + 1;\n const bottomValue = `Q${quarter}`;\n bottomValues.push(\n <text\n key={`${bottomValue}-${date.getFullYear()}`}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={styles.calendarBottomText}\n >\n {bottomValue}\n </text>\n );\n\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (3 + i + quarter) * columnWidth;\n } else {\n xText = (3 + i - quarter) * columnWidth;\n }\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={headerHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n const getCalendarValuesForMonth = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n // const bottomValue = getLocaleMonth(date, locale);\n const bottomValue = date.toLocaleString(locale, { month: \"short\" });\n bottomValues.push(\n <text\n key={bottomValue + date.getFullYear()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorEnd}`}\n >\n {bottomValue}\n </text>\n );\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (6 + i + date.getMonth() + 1) * columnWidth;\n } else {\n xText = (6 + i - date.getMonth()) * columnWidth;\n }\n console.log(xText);\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n textAnchor=\"end\"\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForWeek = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n let weeksCount: number = 1;\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = dates.length - 1; i >= 0; i--) {\n const date = dates[i];\n let topValue = \"\";\n if (i === 0 || date.getMonth() !== dates[i - 1].getMonth()) {\n // top\n topValue = `${getLocaleMonth(date, locale)}, ${date.getFullYear()}`;\n }\n // bottom\n const bottomValue = `W${getWeekNumberISO8601(date)}`;\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={`${styles.calendarTopText} ${styles.textAnchorStart}`}\n >\n {bottomValue}\n </text>\n );\n\n if (topValue) {\n // if last day is new month\n if (i !== dates.length - 1) {\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i + weeksCount * columnWidth}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * i + columnWidth * weeksCount * 0.5}\n yText={topDefaultHeight * 0.9}\n textAnchor=\"start\"\n />\n );\n }\n weeksCount = 0;\n }\n weeksCount++;\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue =\n columnWidth > 55\n ? `${getLocalDayOfWeek(date, locale, \"short\")}, ${date\n .getDate()\n .toString()}`\n : `${getLocalDayOfWeek(date, locale, \"narrow\")},${date\n .getDate()\n .toString()}`;\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n >\n {bottomValue}\n </text>\n );\n if (\n i + 1 !== dates.length &&\n date.getMonth() !== dates[i + 1].getMonth()\n ) {\n const topValue = `${getLocaleMonth(\n date,\n locale\n )} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * (i + 1)}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={\n topValues.length === 0\n ? columnWidth * (i + 1) * 0.5\n : columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5\n }\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n if (i + 1 === dates.length) {\n const topValue = `${getLocaleMonth(\n date,\n locale\n )} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * (i + 1)}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForPartOfDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const ticks = viewMode === ViewMode.HalfDay ? 2 : 4;\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue = getCachedDateTimeFormat(locale, {\n hour: \"numeric\",\n }).format(date);\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n fontFamily={fontFamily}\n >\n {bottomValue}\n </text>\n );\n if (i === 0 || date.getDate() !== dates[i - 1].getDate()) {\n const topValue = `${getLocalDayOfWeek(\n date,\n locale,\n \"short\"\n )}, ${date.getDate()} ${getLocaleMonth(date, locale)}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * i + ticks * columnWidth}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * i + ticks * columnWidth * 0.5}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForHour = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue = getCachedDateTimeFormat(locale, {\n hour: \"numeric\",\n }).format(date);\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={styles.calendarBottomText}\n fontFamily={fontFamily}\n >\n {bottomValue}\n </text>\n );\n if (i !== 0 && date.getDate() !== dates[i - 1].getDate()) {\n const displayDate = dates[i - 1];\n const topValue = `${getLocalDayOfWeek(\n displayDate,\n locale,\n \"long\"\n )}, ${displayDate.getDate()} ${getLocaleMonth(displayDate, locale)}`;\n const topPosition = (date.getHours() - 24) / 2;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + displayDate.getFullYear()}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * (i + topPosition)}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n\n let topValues: ReactChild[] = [];\n let bottomValues: ReactChild[] = [];\n switch (dateSetup.viewMode) {\n case ViewMode.Year:\n [topValues, bottomValues] = getCalendarValuesForYear();\n break;\n case ViewMode.Quarter:\n [topValues, bottomValues] = getCalendarValuesForQuarter();\n break;\n case ViewMode.Month:\n [topValues, bottomValues] = getCalendarValuesForMonth();\n break;\n case ViewMode.Week:\n [topValues, bottomValues] = getCalendarValuesForWeek();\n break;\n case ViewMode.Day:\n [topValues, bottomValues] = getCalendarValuesForDay();\n break;\n case ViewMode.QuarterDay:\n case ViewMode.HalfDay:\n [topValues, bottomValues] = getCalendarValuesForPartOfDay();\n break;\n case ViewMode.Hour:\n [topValues, bottomValues] = getCalendarValuesForHour();\n }\n return (\n <g\n className=\"calendar\"\n fontSize={fontSize}\n fontFamily={fontFamily}\n width={columnWidth * dateSetup.dates.length}\n >\n <rect\n x={0}\n y={0}\n width={columnWidth * dateSetup.dates.length}\n height={headerHeight}\n className={styles.calendarHeader}\n />\n {bottomValues} {topValues}\n </g>\n );\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import React from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Dependency } from \"../../types/public-types\";\n\ntype ArrowProps = {\n taskFrom: BarTask;\n taskTo: BarTask;\n rowHeight: number;\n taskHeight: number;\n arrowIndent: number;\n arrowColor: string;\n dependencyType: Dependency;\n};\n\nexport const Arrow: React.FC<ArrowProps> = ({\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n arrowColor,\n dependencyType,\n}) => {\n let [path, trianglePoints] = drawPathAndTriangle(\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n dependencyType\n );\n\n return (\n <g className=\"arrow\">\n <path strokeWidth=\"1.5\" d={path} fill=\"none\" stroke={arrowColor} />\n <polygon points={trianglePoints} fill={arrowColor} />\n </g>\n );\n};\n\nconst drawPathAndTriangle = (\n taskFrom: BarTask,\n taskTo: BarTask,\n rowHeight: number,\n taskHeight: number,\n arrowIndent: number,\n dependencyType: Dependency\n) => {\n const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\n const taskToEndY = taskTo.y + taskHeight / 2;\n const verticalOffset = indexCompare * (rowHeight / 2);\n\n // 1️⃣ Pick start/end x-points based on dependency type\n const minX = (t: BarTask) => {\n if (t.x1 && t.actualx1) {\n return Math.min(t.x1, t.actualx1);\n } else if (t.x1) {\n return t.x1;\n } else if (t.actualx1) {\n return t.actualx1;\n } else {\n return 0;\n }\n };\n const maxX = (t: BarTask) => Math.max(t.x2 || 0, t.actualx2 || 0);\n\n let fromPoint: number, toPoint: number;\n switch (dependencyType) {\n case \"SS\":\n fromPoint = minX(taskFrom);\n toPoint = minX(taskTo);\n break;\n case \"SF\":\n fromPoint = minX(taskFrom);\n toPoint = maxX(taskTo);\n break;\n case \"FS\":\n fromPoint = maxX(taskFrom);\n toPoint = minX(taskTo);\n break;\n case \"FF\":\n fromPoint = maxX(taskFrom);\n toPoint = maxX(taskTo);\n break;\n }\n\n // 2️⃣ Helper for arrowhead points\n const arrowPoints = (x: number, y: number, right = true) =>\n right\n ? `${x},${y} ${x - 5},${y - 5} ${x - 5},${y + 5}` // Right\n : `${x},${y} ${x + 5},${y - 5} ${x + 5},${y + 5}`; // Left\n\n let path: string;\n let trianglePoints: string;\n\n // 3️⃣ Routing based on type\n switch (dependencyType) {\n case \"SS\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${\n fromPoint + Math.min(toPoint - fromPoint, 0) - 2 * arrowIndent\n }\n V ${taskToEndY}\n H ${toPoint - 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, true);\n break;\n\n case \"SF\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${fromPoint - 2 * arrowIndent}\n V ${taskFrom.y + taskHeight / 2 + verticalOffset}\n ${\n fromPoint - toPoint > 4 * arrowIndent\n ? \"\"\n : `H ${toPoint + 2 * arrowIndent}`\n }\n V ${taskToEndY}\n H ${toPoint + 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, false);\n break;\n\n case \"FS\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${fromPoint + 2 * arrowIndent}\n V ${taskFrom.y + taskHeight / 2 + verticalOffset}\n ${\n toPoint - fromPoint > 4 * arrowIndent\n ? \"\"\n : `H ${toPoint - 2 * arrowIndent}`\n }\n V ${taskToEndY}\n H ${toPoint - 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, true);\n break;\n\n case \"FF\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${\n fromPoint + Math.max(toPoint - fromPoint, 0) + 2 * arrowIndent\n }\n V ${taskToEndY}\n H ${toPoint + 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, false);\n break;\n }\n\n return [path, trianglePoints];\n};\n","import { Task } from \"../types/public-types\";\nimport { BarTask, TaskTypeInternal } from \"../types/bar-task\";\nimport { BarMoveAction } from \"../types/gantt-task-actions\";\n\nexport const convertToBarTasks = (\n tasks: Task[],\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string,\n projectProgressColor: string,\n projectProgressSelectedColor: string,\n projectBackgroundColor: string,\n projectBackgroundSelectedColor: string,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n) => {\n let barTasks = tasks.map((t, i) => {\n return convertToBarTask(\n t,\n i,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n );\n });\n\n // set dependencies\n barTasks = barTasks.map(task => {\n const dependencies = task.dependencies || [];\n for (let j = 0; j < dependencies.length; j++) {\n const dependence = barTasks.findIndex(\n value => value.id === dependencies[j].id\n );\n if (\n dependence !== -1 &&\n task.start.getTime() > 0 &&\n task.end.getTime() > 0\n ) {\n const barchild = { ...task, dependencyType: dependencies[j].type };\n barTasks[dependence].barChildren.push(barchild);\n }\n }\n return task;\n });\n\n return barTasks;\n};\n\nconst convertToBarTask = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string,\n projectProgressColor: string,\n projectProgressSelectedColor: string,\n projectBackgroundColor: string,\n projectBackgroundSelectedColor: string,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n): BarTask => {\n let barTask: BarTask;\n switch (task.type) {\n case \"milestone\":\n barTask = convertToMilestone(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n );\n break;\n case \"project\":\n barTask = convertToBar(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor\n );\n break;\n default:\n barTask = convertToBar(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor\n );\n break;\n }\n return barTask;\n};\n\nconst convertToBar = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string\n): BarTask => {\n let x1: number;\n let x2: number;\n let actualx1: number;\n let actualx2: number;\n let progressStartWidth: number;\n let progressEndWidth: number;\n if (rtl) {\n //not used\n x2 = task.start ? taskXCoordinateRTL(task.start, dates, columnWidth) : -1;\n x1 = task.end ? taskXCoordinateRTL(task.end, dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinateRTL(task.actualStart, dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinateRTL(task.actualEnd, dates, columnWidth)\n : -1;\n } else {\n x1 = task.start ? taskXCoordinate(task.start, dates, columnWidth) : -1;\n x2 = task.end ? taskXCoordinate(task.end, dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinate(task.actualStart, dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinate(task.actualEnd, dates, columnWidth)\n : -1;\n }\n\n progressStartWidth = actualx1 && x1 ? Math.abs(actualx1 - x1) : -1;\n progressEndWidth = actualx2 && x2 ? Math.abs(actualx2 - x2) : -1;\n\n let typeInternal: TaskTypeInternal = task.type;\n // if (x1 && x2) {\n // if (typeInternal === \"task\" && x2 - x1 < handleWidth * 2) {\n // typeInternal = \"smalltask\";\n // x2 = x1 + handleWidth * 2;\n // }\n // }\n const [progressWidth, progressX] = progressWithByParams(\n actualx1,\n actualx2,\n task.progress,\n rtl\n );\n\n const y = taskYCoordinate(index, rowHeight, taskHeight);\n //const hideChildren = task.type === \"project\" ? task.hideChildren : undefined;\n const hideChildren = task.hideChildren || false; //allows tasks to have chldren. benjamin\n\n const styles = {\n backgroundColor: barBackgroundColor,\n backgroundSelectedColor: barBackgroundSelectedColor,\n progressColor: barProgressColor,\n progressSelectedColor: barProgressSelectedColor,\n ...task.styles,\n };\n return {\n ...task,\n typeInternal,\n x1,\n x2,\n actualx1,\n actualx2,\n progressStartWidth,\n progressEndWidth,\n y,\n index,\n progressX,\n progressWidth,\n barCornerRadius,\n handleWidth,\n hideChildren,\n height: taskHeight,\n barChildren: [],\n styles,\n };\n};\n\nconst convertToMilestone = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n): BarTask => {\n const x =\n task.start && task.end\n ? taskXCoordinate(task.end, dates, columnWidth)\n : 0;\n const y = taskYCoordinate(index, rowHeight, taskHeight);\n\n const x1 = task.start && task.end ? x - taskHeight * 0.5 : 0;\n const x2 = task.start && task.end ? x + taskHeight * 0.5 : 0;\n\n const rotatedHeight = taskHeight / 1.414;\n const styles = {\n backgroundColor: milestoneBackgroundColor,\n backgroundSelectedColor: milestoneBackgroundSelectedColor,\n progressColor: \"\",\n progressSelectedColor: \"\",\n ...task.styles,\n };\n return {\n ...task,\n x1,\n x2,\n actualx1: x1,\n actualx2: x2,\n progressStartWidth: 0,\n progressEndWidth: 0,\n y,\n index,\n progressX: 0,\n progressWidth: 0,\n barCornerRadius,\n handleWidth,\n typeInternal: task.type,\n progress: 0,\n height: rotatedHeight,\n hideChildren: undefined,\n barChildren: [],\n styles,\n };\n};\n\nconst taskXCoordinate = (xDate: Date, dates: Date[], columnWidth: number) => {\n const index = dates.findIndex(d => d.getTime() >= xDate.getTime()) - 1;\n if (index < 0) {\n if (dates[dates.length - 1].getTime() <= xDate.getTime()) {\n return dates.length * columnWidth;\n } else {\n return 0;\n }\n }\n const remainderMillis = xDate.getTime() - dates[index].getTime();\n const percentOfInterval =\n remainderMillis / (dates[index + 1].getTime() - dates[index].getTime());\n const x = index * columnWidth + percentOfInterval * columnWidth;\n return x;\n};\nconst taskXCoordinateRTL = (\n xDate: Date,\n dates: Date[],\n columnWidth: number\n) => {\n let x = taskXCoordinate(xDate, dates, columnWidth);\n x += columnWidth;\n return x;\n};\nconst taskYCoordinate = (\n index: number,\n rowHeight: number,\n taskHeight: number\n) => {\n const y = index * rowHeight + (rowHeight - taskHeight) / 2;\n return y;\n};\n\nexport const progressWithByParams = (\n taskX1: number,\n taskX2: number,\n progress: number,\n rtl: boolean\n) => {\n const progressWidth =\n taskX2 > 0 && taskX1 > 0 ? (taskX2 - taskX1) * progress * 0.01 : 0;\n let progressX: number;\n if (rtl) {\n progressX = taskX2 > 0 ? taskX2 - progressWidth : 0;\n } else {\n progressX = taskX1 > 0 ? taskX1 : 0;\n }\n return [progressWidth, progressX];\n};\n\nexport const progressByProgressWidth = (\n progressWidth: number,\n barTask: BarTask\n) => {\n const barWidth = barTask.x2 - barTask.x1;\n const progressPercent = Math.round((progressWidth * 100) / barWidth);\n if (progressPercent >= 100) return 100;\n else if (progressPercent <= 0) return 0;\n else return progressPercent;\n};\n\n// const progressByX = (x: number, task: BarTask) => {\n// if (x >= task.x2) return 100;\n// else if (x <= task.x1) return 0;\n// else {\n// const barWidth = task.x2 - task.x1;\n// const progressPercent = Math.round(((x - task.x1) * 100) / barWidth);\n// return progressPercent;\n// }\n// };\n// const progressByXRTL = (x: number, task: BarTask) => {\n// if (x >= task.x2) return 0;\n// else if (x <= task.x1) return 100;\n// else {\n// const barWidth = task.x2 - task.x1;\n// const progressPercent = Math.round(((task.x2 - x) * 100) / barWidth);\n// return progressPercent;\n// }\n// };\n\nexport const getProgressPoint = (\n progressX: number,\n taskY: number,\n taskHeight: number\n) => {\n const point = [\n progressX - 5,\n taskY + taskHeight,\n progressX + 5,\n taskY + taskHeight,\n progressX,\n taskY + taskHeight - 8.66,\n ];\n return point.join(\",\");\n};\n\nconst startByX = (x: number, xStep: number, task: BarTask) => {\n if (x >= task.x2 - task.handleWidth * 2) {\n x = task.x2 - task.handleWidth * 2;\n }\n const steps = Math.round((x - task.x1) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.x1 + additionalXValue;\n return newX;\n};\n\nconst startByActualX = (x: number, xStep: number, task: BarTask) => {\n if (x >= task.actualx2 - task.handleWidth * 2) {\n x = task.actualx2 - task.handleWidth * 2;\n }\n const steps = Math.round((x - task.actualx1) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.actualx1 + additionalXValue;\n return newX;\n};\n\nconst endByX = (x: number, xStep: number, task: BarTask) => {\n if (x <= task.x1 + task.handleWidth * 2) {\n x = task.x1 + task.handleWidth * 2;\n }\n const steps = Math.round((x - task.x2) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.x2 + additionalXValue;\n return newX;\n};\n\nconst endByActualX = (x: number, xStep: number, task: BarTask) => {\n if (x <= task.actualx1 + task.handleWidth * 2) {\n x = task.actualx1 + task.handleWidth * 2;\n }\n const steps = Math.round((x - task.actualx2) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.actualx2 + additionalXValue;\n return newX;\n};\n\nconst moveByX = (x: number, xStep: number, task: BarTask) => {\n const steps = Math.round((x - task.x1) / xStep);\n const additionalXValue = steps * xStep;\n const newX1 = task.x1 + additionalXValue;\n const newX2 = newX1 + task.x2 - task.x1;\n return [newX1, newX2];\n};\n\nconst moveByActualX = (x: number, xStep: number, task: BarTask) => {\n const steps = Math.round((x - task.actualx1) / xStep);\n const additionalXValue = steps * xStep;\n const newX1 = task.actualx1 + additionalXValue;\n const newX2 = newX1 + task.actualx2 - task.actualx1;\n return [newX1, newX2];\n};\n\nconst dateByX = (\n x: number,\n taskX: number,\n taskDate: Date,\n xStep: number,\n timeStep: number\n) => {\n let newDate = new Date(((x - taskX) / xStep) * timeStep + taskDate.getTime());\n newDate = new Date(\n newDate.getTime() +\n (newDate.getTimezoneOffset() - taskDate.getTimezoneOffset()) * 60000\n );\n return newDate;\n};\n\n/**\n * Method handles event in real time(mousemove) and on finish(mouseup)\n */\nexport const handleTaskBySVGMouseEvent = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n type: string,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number,\n rtl: boolean\n): { isChanged: boolean; changedTask: BarTask } => {\n let result: { isChanged: boolean; changedTask: BarTask };\n switch (selectedTask.type) {\n case \"milestone\":\n result = handleTaskBySVGMouseEventForMilestone(\n svgX,\n action,\n selectedTask,\n xStep,\n timeStep,\n initEventX1Delta\n );\n break;\n default:\n result = handleTaskBySVGMouseEventForBar(\n svgX,\n action,\n selectedTask,\n type,\n xStep,\n timeStep,\n initEventX1Delta,\n rtl\n );\n break;\n }\n return result;\n};\n\nconst handleTaskBySVGMouseEventForBar = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n type: string,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number,\n rtl: boolean\n): { isChanged: boolean; changedTask: BarTask } => {\n const changedTask: BarTask = { ...selectedTask };\n let isChanged = false;\n switch (action) {\n // case \"progress\":\n // if (rtl) {\n // changedTask.progress = progressByXRTL(svgX, selectedTask);\n // } else {\n // changedTask.progress = progressByX(svgX, selectedTask);\n // }\n // isChanged = changedTask.progress !== selectedTask.progress;\n // if (isChanged) {\n // const [progressWidth, progressX] = progressWithByParams(\n // changedTask.x1,\n // changedTask.x2,\n // changedTask.progress,\n // rtl\n // );\n // changedTask.progressWidth = progressWidth;\n // changedTask.progressX = progressX;\n // }\n // break;\n case \"start\": {\n const newX1 =\n type == \"planned\"\n ? startByX(svgX, xStep, selectedTask)\n : startByActualX(svgX, xStep, selectedTask);\n if (type == \"planned\") changedTask.x1 = newX1;\n else if (type == \"actual\") changedTask.actualx1 = newX1;\n isChanged =\n changedTask.x1 !== selectedTask.x1 ||\n changedTask.actualx1 !== selectedTask.actualx1;\n if (isChanged) {\n if (rtl) {\n if (type == \"planned\")\n changedTask.end = dateByX(\n newX1,\n selectedTask.x1,\n selectedTask.end,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualEnd = dateByX(\n newX1,\n selectedTask.actualx1,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n } else {\n if (type == \"planned\")\n changedTask.start = dateByX(\n newX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualStart = dateByX(\n newX1,\n selectedTask.actualx1,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n }\n const [progressWidth, progressX] = progressWithByParams(\n changedTask.x1,\n changedTask.x2,\n changedTask.progress,\n rtl\n );\n changedTask.progressWidth = progressWidth;\n changedTask.progressX = progressX;\n }\n break;\n }\n case \"end\": {\n const newX2 =\n type == \"planned\"\n ? endByX(svgX, xStep, selectedTask)\n : endByActualX(svgX, xStep, selectedTask);\n if (type == \"planned\") changedTask.x2 = newX2;\n else if (type == \"actual\") changedTask.actualx2 = newX2;\n isChanged =\n changedTask.x2 !== selectedTask.x2 ||\n changedTask.actualx2 !== selectedTask.actualx2;\n if (isChanged) {\n if (rtl) {\n if (type == \"planned\")\n changedTask.start = dateByX(\n newX2,\n selectedTask.x2,\n selectedTask.start,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualStart = dateByX(\n newX2,\n selectedTask.actualx2,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n } else {\n if (type == \"planned\")\n changedTask.end = dateByX(\n newX2,\n selectedTask.x2,\n selectedTask.end,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualEnd = dateByX(\n newX2,\n selectedTask.actualx2,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n }\n const [progressWidth, progressX] = progressWithByParams(\n changedTask.x1,\n changedTask.x2,\n changedTask.progress,\n rtl\n );\n changedTask.progressWidth = progressWidth;\n changedTask.progressX = progressX;\n }\n break;\n }\n case \"move\": {\n const [newMoveX1, newMoveX2] =\n type == \"planned\"\n ? moveByX(svgX - initEventX1Delta, xStep, selectedTask)\n : moveByActualX(svgX - initEventX1Delta, xStep, selectedTask);\n if (type == \"planned\") isChanged = newMoveX1 !== selectedTask.x1;\n if (type == \"actual\") isChanged = newMoveX1 !== selectedTask.actualx1;\n if (isChanged) {\n if (type == \"planned\") {\n changedTask.start = dateByX(\n newMoveX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n changedTask.end = dateByX(\n newMoveX2,\n selectedTask.x2,\n selectedTask.end,\n xStep,\n timeStep\n );\n changedTask.x1 = newMoveX1;\n changedTask.x2 = newMoveX2;\n }\n if (type == \"actual\") {\n changedTask.actualStart = dateByX(\n newMoveX1,\n selectedTask.actualx1,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n changedTask.actualEnd = dateByX(\n newMoveX2,\n selectedTask.actualx2,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n changedTask.actualx1 = newMoveX1;\n changedTask.actualx2 = newMoveX2;\n }\n\n // const [progressWidth, progressX] = progressWithByParams(\n // changedTask.x1,\n // changedTask.x2,\n // changedTask.progress,\n // rtl\n // );\n // changedTask.progressWidth = progressWidth;\n // changedTask.progressX = progressX;\n }\n break;\n }\n }\n return { isChanged, changedTask };\n};\n\nconst handleTaskBySVGMouseEventForMilestone = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number\n): { isChanged: boolean; changedTask: BarTask } => {\n const changedTask: BarTask = { ...selectedTask };\n let isChanged = false;\n switch (action) {\n case \"move\": {\n const [newMoveX1, newMoveX2] = moveByX(\n svgX - initEventX1Delta,\n xStep,\n selectedTask\n );\n isChanged = newMoveX1 !== selectedTask.x1;\n if (isChanged) {\n changedTask.start = dateByX(\n newMoveX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n changedTask.end = changedTask.start;\n changedTask.x1 = newMoveX1;\n changedTask.x2 = newMoveX2;\n }\n break;\n }\n }\n return { isChanged, changedTask };\n};\n","import { BarTask } from \"../types/bar-task\";\nimport { Task } from \"../types/public-types\";\n\nexport function isKeyboardEvent(\n event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\n): event is React.KeyboardEvent {\n return (event as React.KeyboardEvent).key !== undefined;\n}\n\nexport function isMouseEvent(\n event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\n): event is React.MouseEvent {\n return (event as React.MouseEvent).clientX !== undefined;\n}\n\nexport function isBarTask(task: Task | BarTask): task is BarTask {\n return (task as BarTask).x1 !== undefined;\n}\n\nexport function removeHiddenTasks(tasks: Task[]) {\n const groupedTasks = tasks.filter(\n t => t.hideChildren && t.type === \"project\"\n );\n if (groupedTasks.length > 0) {\n for (let i = 0; groupedTasks.length > i; i++) {\n const groupedTask = groupedTasks[i];\n const children = getChildren(tasks, groupedTask);\n tasks = tasks.filter(t => children.indexOf(t) === -1);\n }\n }\n return tasks;\n}\n\nfunction getChildren(taskList: Task[], task: Task) {\n let tasks: Task[] = [];\n if (task.type !== \"project\") {\n tasks = taskList.filter(\n t =>\n t.dependencies &&\n t.dependencies.map(({ id }) => id).indexOf(task.id) !== -1\n );\n } else {\n tasks = taskList.filter(t => t.project && t.project === task.id);\n }\n var taskChildren: Task[] = [];\n tasks.forEach(t => {\n taskChildren.push(...getChildren(taskList, t));\n });\n tasks = tasks.concat(tasks, taskChildren);\n return tasks;\n}\n\nexport const sortTasks = (taskA: Task, taskB: Task) => {\n const orderA = taskA.displayOrder || Number.MAX_VALUE;\n const orderB = taskB.displayOrder || Number.MAX_VALUE;\n if (orderA > orderB) {\n return 1;\n } else if (orderA < orderB) {\n return -1;\n } else {\n return 0;\n }\n};\n","import React from \"react\";\n// import style from \"./bar.module.css\";\n\ntype BarDisplayProps = {\n x: number;\n y: number;\n type: string;\n // actualX1: number;\n // actualX2: number;\n startProgressWidth: number;\n endProgressWidth: number;\n width: number;\n height: number;\n isSelected: boolean;\n /* progress start point */\n progressX: number;\n progressWidth: number;\n barCornerRadius: number;\n criticalPathArrows?: Array<{taskId: string, arrowColor: string}>\n styles: {\n taskProgressColor?: string;\n backgroundColor: string;\n backgroundSelectedColor: string;\n progressColor: string;\n progressSelectedColor: string;\n criticalPathColor?: string;\n };\n onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\n};\nexport const BarDisplay: React.FC<BarDisplayProps> = ({\n x,\n y,\n type,\n // actualX1,\n // actualX2,\n // startProgressWidth,\n // endProgressWidth,\n width,\n height,\n isSelected,\n progressX,\n progressWidth,\n barCornerRadius,\n styles,\n onMouseDown,\n}) => {\n const getProcessColor = () => {\n return isSelected ? styles.progressSelectedColor : styles.progressColor;\n };\n\n const getBarColor = () => {\n return isSelected ? styles.backgroundSelectedColor : styles.backgroundColor;\n };\n\n if (type == \"planned\")\n return (\n <g onMouseDown={onMouseDown}>\n <rect\n x={x}\n width={width}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getBarColor()}\n strokeWidth={2}\n stroke={styles.criticalPathColor}\n />\n {/* <rect\n x={actualX1}\n width={actualX2 - actualX1}\n y={y + height / 2}\n height={height / 2}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n /> */}\n <rect\n x={progressX}\n width={progressWidth}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n </g>\n );\n else\n return (\n <g onMouseDown={onMouseDown}>\n <rect\n x={x}\n width={width}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n />\n <rect\n x={progressX}\n width={progressWidth}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport styles from \"./bar.module.css\";\n\ntype BarDateHandleProps = {\n x: number;\n y: number;\n width: number;\n height: number;\n barCornerRadius: number;\n onMouseDown: (event: React.MouseEvent<SVGRectElement, MouseEvent>) => void;\n};\nexport const BarDateHandle: React.FC<BarDateHandleProps> = ({\n x,\n y,\n width,\n height,\n barCornerRadius,\n onMouseDown,\n}) => {\n return (\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n className={styles.barHandle}\n ry={barCornerRadius}\n rx={barCornerRadius}\n onMouseDown={onMouseDown}\n />\n );\n};\n","import React from \"react\";\n// import styles from \"./bar.module.css\";\n\ntype BarProgressHandleProps = {\n progressPoint: string;\n onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\n};\nexport const BarProgressHandle: React.FC<BarProgressHandleProps> = (\n {\n // progressPoint,\n // onMouseDown,\n }\n) => {\n return (\n <div />\n // <polygon\n // className={styles.barHandle}\n // points={progressPoint}\n // onMouseDown={onMouseDown}\n // />\n );\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarDateHandle } from \"./bar-date-handle\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const Bar: React.FC<TaskItemProps> = ({\n task,\n isProgressChangeable,\n isDateChangeable,\n rtl,\n type,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n +!rtl * task.progressWidth + task.progressX,\n task.y,\n task.height\n );\n const handleHeight = task.height / 2 - 1;\n if (type == \"planned\") {\n if (task?.x1 >= 0 && task?.x2 >= 0 && task.x2 - task.x1 >= 0)\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height / 2}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"planned\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left */}\n <BarDateHandle\n x={task.x1 + 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"start\", task, e, \"planned\");\n }}\n />\n {/* right */}\n <BarDateHandle\n x={task.x2 - task.handleWidth - 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"planned\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"planned\");\n }}\n />\n )}\n </g>\n </g>\n );\n else return <g className={styles.barWrapper} tabIndex={0}></g>;\n } else if (task?.actualx1 >= 0 && task?.actualx2 >= 0 && task.actualx2 - task.actualx1 >= 0) {\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.actualx1}\n y={task.y + task.height / 2}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.actualx2 - task.actualx1}\n height={task.height / 2}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"actual\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left */}\n <BarDateHandle\n x={task.actualx1 + 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"start\", task, e, \"actual\");\n }}\n />\n {/* right */}\n <BarDateHandle\n x={task.actualx2 - task.handleWidth - 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"actual\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"actual\");\n }}\n />\n )}\n </g>\n </g>\n );\n } else {\n return <g className={styles.barWrapper} tabIndex={0}></g>;\n }\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const BarSmall: React.FC<TaskItemProps> = ({\n task,\n type,\n isProgressChangeable,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n task.progressWidth + task.x1,\n task.y,\n task.height\n );\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e);\n }}\n />\n <g className=\"handleGroup\">\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e);\n }}\n />\n )}\n </g>\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./milestone.module.css\";\n\nexport const Milestone: React.FC<TaskItemProps> = ({\n task,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const transform = `rotate(45 ${task.x1 + task.height * 0.356} \n ${task.y + task.height * 0.85})`;\n const getBarColor = () => {\n return isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n };\n\n return (\n <g tabIndex={0} className={styles.milestoneWrapper}>\n <rect\n fill={getBarColor()}\n x={task.x1}\n width={task.height}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n transform={transform}\n className={styles.milestoneBackground}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e,\"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e);\n }}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./project.module.css\";\n\nexport const Project: React.FC<TaskItemProps> = ({ task, isSelected }) => {\n const barColor = isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n const processColor = isSelected\n ? task.styles.progressSelectedColor\n : task.styles.progressColor;\n const projectWith = task.x2 - task.x1;\n\n const projectLeftTriangle = [\n task.x1,\n task.y + task.height / 2 - 1,\n task.x1,\n task.y + task.height,\n task.x1 + 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n const projectRightTriangle = [\n task.x2,\n task.y + task.height / 2 - 1,\n task.x2,\n task.y + task.height,\n task.x2 - 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n\n return (\n <g tabIndex={0} className={styles.projectWrapper}>\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectBackground}\n />\n <rect\n x={task.progressX}\n width={task.progressWidth}\n y={task.y}\n height={task.height}\n ry={task.barCornerRadius}\n rx={task.barCornerRadius}\n fill={processColor}\n />\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height / 2}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectTop}\n />\n <polygon\n className={styles.projectTop}\n points={projectLeftTriangle}\n fill={barColor}\n />\n <polygon\n className={styles.projectTop}\n points={projectRightTriangle}\n fill={barColor}\n />\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { GanttContentMoveAction } from \"../../types/gantt-task-actions\";\nimport { Bar } from \"./bar/bar\";\nimport { BarSmall } from \"./bar/bar-small\";\nimport { Milestone } from \"./milestone/milestone\";\nimport { Project } from \"./project/project\";\n// import style from \"./task-list.module.css\";\n\nexport type TaskItemProps = {\n task: BarTask;\n arrowIndent: number;\n taskHeight: number;\n isProgressChangeable: boolean;\n isDateChangeable: boolean;\n isDelete: boolean;\n isSelected: boolean;\n rtl: boolean;\n type?: string;\n onEventStart: (\n action: GanttContentMoveAction,\n selectedTask: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => any;\n};\n\nexport const TaskItem: React.FC<TaskItemProps> = props => {\n const {\n task,\n // arrowIndent,\n isDelete,\n // taskHeight,\n isSelected,\n // rtl,\n onEventStart,\n } = {\n ...props,\n };\n // const textRef = useRef<SVGTextElement>(null);\n const [taskItem, setTaskItem] = useState<JSX.Element[]>([<div />]);\n // const [isTextInside, setIsTextInside] = useState(true);\n\n useEffect(() => {\n switch (task.typeInternal) {\n case \"milestone\":\n if (task.x1 >= 0 && task.actualx1 >= 0)\n setTaskItem([<Milestone {...props} />]);\n else setTaskItem([]);\n break;\n case \"project\":\n if (\n task?.x1 >= 0 &&\n task?.x2 >= 0 &&\n task.x2 > task.x1 &&\n task?.actualx1 >= 0 &&\n task?.actualx2 >= 0 &&\n task.actualx2 > task.actualx1\n )\n setTaskItem([<Project {...props} />]);\n else setTaskItem([]);\n break;\n case \"smalltask\":\n setTaskItem([<BarSmall {...props} />]);\n break;\n default:\n {\n let taskItem = [];\n if (task?.x1 >= 0 && task?.x2 >= 0) {\n taskItem.push(<Bar {...props} type={\"planned\"} />);\n }\n if (task?.actualx1 >= 0 && task?.actualx2 >= 0) {\n taskItem.push(<Bar {...props} type={\"actual\"} />);\n }\n setTaskItem(taskItem);\n }\n break;\n }\n }, [task, isSelected]);\n\n // useEffect(() => {\n // if (textRef.current) {\n // setIsTextInside(textRef.current.getBBox().width < task.x2 - task.x1);\n // }\n // }, [textRef, task]);\n\n // const getX = () => {\n // const width = task.x2 - task.x1;\n // const hasChild = task.barChildren.length > 0;\n // if (isTextInside) {\n // return task.x1 + width * 0.5;\n // }\n // if (rtl && textRef.current) {\n // return (\n // task.x1 -\n // textRef.current.getBBox().width -\n // arrowIndent * +hasChild -\n // arrowIndent * 0.2\n // );\n // } else {\n // return task.x1 + width + arrowIndent * +hasChild + arrowIndent * 0.2;\n // }\n // };\n\n return (\n <g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"planned\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"planned\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"planned\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"planned\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[0]}\n </g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"actual\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"actual\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"actual\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"actual\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"actual\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[1]}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport { Dependency, EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Arrow } from \"../other/arrow\";\nimport { handleTaskBySVGMouseEvent } from \"../../helpers/bar-helper\";\nimport { isKeyboardEvent } from \"../../helpers/other-helper\";\nimport { TaskItem } from \"../task-item/task-item\";\nimport {\n BarMoveAction,\n GanttContentMoveAction,\n GanttEvent,\n} from \"../../types/gantt-task-actions\";\nimport { Milestone } from \"../task-item/milestone/milestone\";\n\nexport type TaskGanttContentProps = {\n tasks: BarTask[];\n dates: Date[];\n ganttEvent: GanttEvent;\n selectedTask: BarTask | undefined;\n rowHeight: number;\n columnWidth: number;\n timeStep: number;\n svg?: React.RefObject<SVGSVGElement>;\n svgWidth: number;\n taskHeight: number;\n arrowColor: string;\n arrowIndent: number;\n fontSize: string;\n fontFamily: string;\n rtl: boolean;\n virtualItems?: VirtualItem[];\n visibleStartY: number;\n visibleEndY: number;\n setGanttEvent: (value: GanttEvent) => void;\n setFailedTask: (value: BarTask | null) => void;\n setSelectedTask: (taskId: string) => void;\n} & EventOption;\n\nexport const TaskGanttContent: React.FC<TaskGanttContentProps> = ({\n tasks,\n dates,\n ganttEvent,\n selectedTask,\n rowHeight,\n columnWidth,\n timeStep,\n svg,\n taskHeight,\n arrowIndent,\n fontFamily,\n fontSize,\n rtl,\n virtualItems = [],\n setGanttEvent,\n setFailedTask,\n setSelectedTask,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n visibleStartY,\n visibleEndY,\n}) => {\n const point = svg?.current?.createSVGPoint();\n const [xStep, setXStep] = useState(0);\n const [initEventX1Delta, setInitEventX1Delta] = useState(0);\n const [isMoving, setIsMoving] = useState(false);\n\n // create xStep\n useEffect(() => {\n const dateDelta =\n dates[1].getTime() -\n dates[0].getTime() -\n dates[1].getTimezoneOffset() * 60 * 1000 +\n dates[0].getTimezoneOffset() * 60 * 1000;\n const newXStep = (timeStep * columnWidth) / dateDelta;\n setXStep(newXStep);\n }, [columnWidth, dates, timeStep]);\n\n useEffect(() => {\n const handleMouseMove = async (event: MouseEvent) => {\n if (!ganttEvent.changedTask || !point || !svg?.current) return;\n event.preventDefault();\n\n point.x = event.clientX;\n const cursor = point.matrixTransform(\n svg?.current.getScreenCTM()?.inverse()\n );\n const { isChanged, changedTask } = handleTaskBySVGMouseEvent(\n cursor.x,\n ganttEvent.action as BarMoveAction,\n ganttEvent.changedTask,\n ganttEvent.type as string,\n xStep,\n timeStep,\n initEventX1Delta,\n rtl\n );\n if (isChanged) {\n setGanttEvent({ action: ganttEvent.action, changedTask });\n }\n };\n\n const handleMouseUp = async (event: MouseEvent) => {\n const { action, originalSelectedTask, changedTask, type } = ganttEvent;\n if (!changedTask || !point || !svg?.current || !originalSelectedTask)\n return;\n event.preventDefault();\n\n point.x = event.clientX;\n const cursor = point.matrixTransform(\n svg?.current.getScreenCTM()?.inverse()\n );\n const { changedTask: newChangedTask } = handleTaskBySVGMouseEvent(\n cursor.x,\n action as BarMoveAction,\n changedTask,\n type as string,\n xStep,\n timeStep,\n initEventX1Delta,\n rtl\n );\n\n const isNotLikeOriginal =\n originalSelectedTask.start !== newChangedTask.start ||\n originalSelectedTask.end !== newChangedTask.end ||\n originalSelectedTask.actualStart !== newChangedTask.actualStart ||\n originalSelectedTask.actualEnd !== newChangedTask.actualEnd ||\n originalSelectedTask.progress !== newChangedTask.progress;\n\n // remove listeners\n svg.current.removeEventListener(\"mousemove\", handleMouseMove);\n svg.current.removeEventListener(\"mouseup\", handleMouseUp);\n setGanttEvent({ action: \"\" });\n setIsMoving(false);\n\n // custom operation start\n let operationSuccess = true;\n if (\n (action === \"move\" || action === \"end\" || action === \"start\") &&\n onDateChange &&\n isNotLikeOriginal\n ) {\n try {\n const result = await onDateChange(\n newChangedTask,\n newChangedTask.barChildren\n );\n if (result !== undefined) {\n operationSuccess = result;\n }\n } catch (error) {\n operationSuccess = false;\n }\n } else if (onProgressChange && isNotLikeOriginal) {\n try {\n const result = await onProgressChange(\n newChangedTask,\n newChangedTask.barChildren\n );\n if (result !== undefined) {\n operationSuccess = result;\n }\n } catch (error) {\n operationSuccess = false;\n }\n }\n\n // If operation is failed - return old state\n if (!operationSuccess) {\n setFailedTask(originalSelectedTask);\n }\n };\n\n if (\n !isMoving &&\n (ganttEvent.action === \"move\" ||\n ganttEvent.action === \"end\" ||\n ganttEvent.action === \"start\" ||\n ganttEvent.action === \"progress\") &&\n svg?.current\n ) {\n svg.current.addEventListener(\"mousemove\", handleMouseMove);\n svg.current.addEventListener(\"mouseup\", handleMouseUp);\n setIsMoving(true);\n }\n }, [\n ganttEvent,\n xStep,\n initEventX1Delta,\n onProgressChange,\n timeStep,\n onDateChange,\n svg,\n isMoving,\n point,\n rtl,\n setFailedTask,\n setGanttEvent,\n ]);\n\n /**\n * Method is Start point of task change\n */\n const handleBarEventStart = async (\n action: GanttContentMoveAction,\n task: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => {\n if (!event) {\n if (action === \"select\") {\n setSelectedTask(task.id);\n }\n }\n // Keyboard events\n else if (isKeyboardEvent(event)) {\n if (action === \"delete\") {\n if (onDelete) {\n try {\n const result = await onDelete(task);\n if (result !== undefined && result) {\n setGanttEvent({ action, changedTask: task });\n }\n } catch (error) {\n console.error(\"Error on Delete. \" + error);\n }\n }\n }\n }\n // Mouse Events\n else if (action === \"mouseenter\") {\n if (!ganttEvent.action) {\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n }\n } else if (action === \"mouseleave\") {\n if (ganttEvent.action === \"mouseenter\") {\n setGanttEvent({ action: \"\" });\n }\n } else if (action === \"dblclick\") {\n !!onDoubleClick && onDoubleClick(task);\n } else if (action === \"click\") {\n !!onClick && onClick(task);\n }\n // Change task event start\n else if (action === \"move\") {\n if (!svg?.current || !point) return;\n point.x = event.clientX;\n const cursor = point.matrixTransform(\n svg.current.getScreenCTM()?.inverse()\n );\n if (type == \"planned\") setInitEventX1Delta(cursor.x - task.x1);\n else if (type == \"actual\") setInitEventX1Delta(cursor.x - task.actualx1);\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n } else {\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n }\n };\n\n const getArrows = (isCritical: boolean, criticalPathType?: string) => {\n return tasks.flatMap(_task => {\n const task =\n _task.start.getTime() > 0 && _task.end.getTime() > 0\n ? _task\n : undefined;\n if (!task) {\n return [];\n }\n return task.barChildren\n .map(child => {\n if (task.x2 > task.x1 || task.actualx2 > task.actualx1) {\n const criticalTask = task.criticalPathArrows?.find(\n arrow =>\n arrow.taskId === tasks[child.index].id &&\n (!!arrow.criticalPathType\n ? arrow.criticalPathType === criticalPathType\n : !criticalPathType)\n );\n\n const taskTo = tasks[child.index];\n const yFrom = task.y + taskHeight / 2;\n const yTo = taskTo.y + taskHeight / 2;\n const minY = Math.min(yFrom, yTo);\n const maxY = Math.max(yFrom, yTo);\n\n if (maxY < visibleStartY || minY > visibleEndY) {\n return null;\n }\n\n // Only render arrows matching the group\n if (!!criticalTask === isCritical) {\n return (\n <Arrow\n key={`Arrow from ${task.id} to ${tasks[child.index].id}${\n isCritical ? \"-critical\" : \"\"\n }`}\n taskFrom={task}\n taskTo={tasks[child.index]}\n rowHeight={rowHeight}\n dependencyType={child.dependencyType as Dependency}\n taskHeight={taskHeight}\n arrowIndent={arrowIndent}\n arrowColor={criticalTask?.arrowColor || \"#808080\"}\n />\n );\n }\n }\n return null;\n })\n .filter(Boolean);\n });\n };\n\n return (\n <g className=\"content\">\n <g className=\"arrows\">\n {/* Render non-critical arrows first */}\n {getArrows(false)}\n {/* Render secondary critical path arrows on top */}\n {getArrows(true, \"secondary\")}\n {/* Render primary critical path arrows on top */}\n {getArrows(true, \"primary\")}\n </g>\n <g className=\"bar\" fontFamily={fontFamily} fontSize={fontSize}>\n {virtualItems.map(vi => {\n const _task = tasks[vi.index];\n const task = { ..._task, y: 0 }; // Temporary relative y=0 for virtual render\n if (!task && _task.typeInternal === \"milestone\") {\n return (\n <g key={_task.id} transform={`translate(0, ${vi.start})`}>\n <Milestone\n task={task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={false}\n isDateChangeable={false}\n isDelete={!_task.isDisabled}\n onEventStart={handleBarEventStart}\n isSelected={!!selectedTask && _task.id === selectedTask.id}\n rtl={rtl}\n />\n </g>\n );\n }\n if (!task) {\n return (\n <g\n key={_task.id}\n transform={`translate(0, ${vi.start})`}\n style={{ height: taskHeight }}\n />\n );\n }\n return (\n <g key={task.id} transform={`translate(0, ${vi.start})`}>\n <TaskItem\n task={task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={!!onProgressChange && !task.isDisabled}\n isDateChangeable={!!onDateChange && !task.isDisabled}\n isDelete={!task.isDisabled}\n onEventStart={handleBarEventStart}\n isSelected={!!selectedTask && task.id === selectedTask.id}\n rtl={rtl}\n />\n </g>\n );\n })}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useRef } from \"react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { GridProps, Grid } from \"../grid/grid\";\nimport { CalendarProps, Calendar } from \"../calendar/calendar\";\nimport { TaskGanttContentProps, TaskGanttContent } from \"./task-gantt-content\";\nimport styles from \"./gantt.module.css\";\n\nexport type TaskGanttProps = {\n gridProps: GridProps;\n calendarProps: CalendarProps;\n barProps: TaskGanttContentProps;\n ganttHeight: number;\n scrollY: number;\n scrollX: number;\n};\nexport const TaskGantt: React.FC<TaskGanttProps> = ({\n gridProps,\n calendarProps,\n barProps,\n ganttHeight,\n scrollY,\n scrollX,\n}) => {\n const ganttSVGRef = useRef<SVGSVGElement>(null);\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const verticalGanttContainerRef = useRef<HTMLDivElement>(null);\n const newBarProps = { ...barProps, svg: ganttSVGRef, ganttHeight, scrollY };\n\n const buffer = barProps.rowHeight * 10;\n const visibleStartY = scrollY - buffer;\n const visibleEndY = scrollY + ganttHeight + buffer;\n\n const virtualizer = useVirtualizer({\n count: barProps.tasks.length,\n getScrollElement: () => horizontalContainerRef.current,\n estimateSize: () => barProps.rowHeight,\n overscan: 10\n });\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (verticalGanttContainerRef.current) {\n verticalGanttContainerRef.current.scrollLeft = scrollX;\n }\n }, [scrollX]);\n\n return (\n <div\n className={styles.ganttVerticalContainer}\n ref={verticalGanttContainerRef}\n dir=\"ltr\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={gridProps.svgWidth}\n height={calendarProps.headerHeight}\n fontFamily={barProps.fontFamily}\n >\n <Calendar {...calendarProps} />\n </svg>\n <div\n ref={horizontalContainerRef}\n className={styles.horizontalContainer}\n style={\n ganttHeight\n ? { height: ganttHeight, width: gridProps.svgWidth }\n : { width: gridProps.svgWidth }\n }\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={gridProps.svgWidth}\n height={virtualizer.getTotalSize()}\n fontFamily={barProps.fontFamily}\n ref={ganttSVGRef}\n >\n <Grid\n {...gridProps}\n virtualItems={virtualizer.getVirtualItems()}\n visibleStartY={visibleStartY}\n visibleEndY={visibleEndY}\n />\n <TaskGanttContent\n {...newBarProps}\n visibleStartY={visibleStartY}\n visibleEndY={visibleEndY}\n virtualItems={virtualizer.getVirtualItems()}\n />\n </svg>\n </div>\n </div>\n );\n};\n","import React, { SyntheticEvent, useRef, useEffect } from \"react\";\nimport styles from \"./horizontal-scroll.module.css\";\n\nexport const HorizontalScroll: React.FC<{\n scroll: number;\n svgWidth: number;\n taskListWidth: number;\n rtl: boolean;\n onScroll: (event: SyntheticEvent<HTMLDivElement>) => void;\n}> = ({ scroll, svgWidth, taskListWidth, rtl, onScroll }) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollLeft = scroll;\n }\n }, [scroll]);\n\n return (\n <div\n dir=\"ltr\"\n style={{\n margin: rtl\n ? `0px ${taskListWidth}px 0px 0px`\n : `0px 0px 0px ${taskListWidth}px`,\n }}\n className={styles.scrollWrapper}\n onScroll={onScroll}\n ref={scrollRef}\n >\n <div style={{ width: svgWidth }} className={styles.scroll} />\n </div>\n );\n};\n","import React, {\n useState,\n SyntheticEvent,\n useRef,\n useEffect,\n useMemo,\n} from \"react\";\nimport { ViewMode, GanttProps, Task } from \"../../types/public-types\";\nimport { GridProps } from \"../grid/grid\";\nimport { ganttDateRange, seedDates } from \"../../helpers/date-helper\";\nimport { CalendarProps } from \"../calendar/calendar\";\nimport { TaskGanttContentProps } from \"./task-gantt-content\";\nimport { TaskListHeaderDefault } from \"../task-list/task-list-header\";\nimport { TaskListTableDefault } from \"../task-list/task-list-table\";\nimport { StandardTooltipContent, Tooltip } from \"../other/tooltip\";\nimport { VerticalScroll } from \"../other/vertical-scroll\";\nimport { TaskListProps, TaskList } from \"../task-list/task-list\";\nimport { TaskGantt } from \"./task-gantt\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { convertToBarTasks } from \"../../helpers/bar-helper\";\nimport { GanttEvent } from \"../../types/gantt-task-actions\";\nimport { DateSetup } from \"../../types/date-setup\";\nimport { HorizontalScroll } from \"../other/horizontal-scroll\";\nimport { removeHiddenTasks, sortTasks } from \"../../helpers/other-helper\";\nimport styles from \"./gantt.module.css\";\n\nexport const Gantt: React.FunctionComponent<GanttProps> = ({\n tasks,\n leafTasks = [],\n scheduleType = \"main\",\n startDate = new Date(),\n endDate = new Date(),\n headerHeight = 50,\n columnWidth = 60,\n listCellWidth = \"155px\",\n rowHeight = 50,\n ganttHeight = 0,\n viewMode = ViewMode.Day,\n preStepsCount = 1,\n locale = \"en-US\",\n barFill = 60,\n barCornerRadius = 3,\n barProgressColor = \"#a3a3ff\",\n barProgressSelectedColor = \"#8282f5\",\n barBackgroundColor = \"#b8c2cc\",\n barBackgroundSelectedColor = \"#aeb8c2\",\n projectProgressColor = \"#7db59a\",\n projectProgressSelectedColor = \"#59a985\",\n projectBackgroundColor = \"#fac465\",\n projectBackgroundSelectedColor = \"#f7bb53\",\n milestoneBackgroundColor = \"#f1c453\",\n milestoneBackgroundSelectedColor = \"#f29e4c\",\n rtl = false,\n handleWidth = 8,\n timeStep = 300000,\n arrowColor = \"grey\",\n fontFamily = \"Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue\",\n fontSize = \"14px\",\n arrowIndent = 20,\n todayColor = \"rgba(252, 248, 227, 0.5)\",\n weekendColor = \"#f5f5f5\",\n viewDate,\n TooltipContent = StandardTooltipContent,\n TaskListHeader = TaskListHeaderDefault,\n TaskListTable = TaskListTableDefault,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n onSelect,\n onExpanderClick,\n onMultiSelect,\n taskLabelRenderer,\n delayToRender = 500,\n shouldNotShowLoadingOverlay=true\n}) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const [dateSetup, setDateSetup] = useState<DateSetup>(() => {\n const [startDateRange, endDateRange] = ganttDateRange(\n tasks,\n viewMode,\n preStepsCount\n );\n if (scheduleType === \"lookAhead\") {\n return { viewMode, dates: seedDates(startDate, endDate, viewMode) };\n }\n return {\n viewMode,\n dates: seedDates(startDateRange, endDateRange, viewMode),\n };\n });\n const [currentViewDate, setCurrentViewDate] = useState<Date | undefined>(\n undefined\n );\n\n const [taskListWidth, setTaskListWidth] = useState(0);\n const [svgContainerWidth, setSvgContainerWidth] = useState(0);\n const [svgContainerHeight, setSvgContainerHeight] = useState(ganttHeight);\n const [barTasks, setBarTasks] = useState<BarTask[]>([]);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n const [ganttEvent, setGanttEvent] = useState<GanttEvent>({\n action: \"\",\n });\n const taskHeight = useMemo(\n () => (rowHeight * barFill) / 100,\n [rowHeight, barFill]\n );\n\n const [selectedTask, setSelectedTask] = useState<BarTask>();\n const [failedTask, setFailedTask] = useState<BarTask | null>(null);\n\n const svgWidth =\n columnWidth < 55\n ? (dateSetup.dates.length + 0.5) * columnWidth\n : dateSetup.dates.length * columnWidth;\n const ganttFullHeight = useMemo(() => barTasks.length * rowHeight, [barTasks.length, rowHeight]);\n\n const [scrollY, setScrollY] = useState(0);\n const [scrollX, setScrollX] = useState(-1);\n const [ignoreScrollEvent, setIgnoreScrollEvent] = useState(false);\n const [lastTouchX, setLastTouchX] = useState(0);\n const [lastTouchY, setLastTouchY] = useState(0);\n const [isProcessing, setIsProcessing] = useState(false);\n\n const buffer = rowHeight * 10;\n const visibleStartY = scrollY - buffer;\n const visibleEndY = scrollY + ganttHeight + buffer;\n useEffect(() => {\n if (scheduleType === \"lookAhead\" && startDate && endDate) {\n setDateSetup({\n viewMode,\n dates: seedDates(startDate, endDate, viewMode),\n });\n }\n }, [startDate, endDate]);\n // task change events\n useEffect(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if(!shouldNotShowLoadingOverlay){ \n setIsProcessing(true);\n }\n debounceRef.current = setTimeout(() => {\n let filteredTasks: Task[];\n // if (onExpanderClick) {\n filteredTasks = removeHiddenTasks(tasks);\n // } else {\n // filteredTasks = tasks;\n // }\n filteredTasks = filteredTasks.sort(sortTasks);\n const [startDateRange, endDateRange] = ganttDateRange(\n filteredTasks,\n viewMode,\n preStepsCount\n );\n let newDates = seedDates(startDateRange, endDateRange, viewMode);\n if (scheduleType === \"lookAhead\") {\n newDates = seedDates(startDate, endDate, viewMode);\n }\n if (rtl) {\n newDates = newDates.reverse();\n if (scrollX === -1) {\n setScrollX(newDates.length * columnWidth);\n }\n }\n if (scheduleType !== \"lookAhead\") {\n setDateSetup({\n dates: seedDates(startDateRange, endDateRange, viewMode),\n viewMode,\n });\n }\n\n let [primaryPath, secondaryPath] = getCriticalPaths(leafTasks);\n\n // Color the paths.\n uncolorAll(tasks);\n if (scheduleType !== \"lookAhead\") {\n colorPath(secondaryPath, \"#00ff00\", tasks, \"secondary\");\n colorPath(primaryPath, \"#ff0000\", tasks, \"primary\");\n }\n setBarTasks(\n convertToBarTasks(\n filteredTasks,\n newDates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n )\n );\n setIsProcessing(false);\n }, delayToRender);\n }, [\n tasks,\n viewMode,\n preStepsCount,\n rowHeight,\n barCornerRadius,\n columnWidth,\n taskHeight,\n handleWidth,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor,\n rtl,\n shouldNotShowLoadingOverlay\n ]);\n // for debug purpose\n useEffect(() => {\n return () => {\n clearTimeout(debounceRef.current!);\n };\n }, []);\n\n useEffect(() => {\n if (\n viewMode === dateSetup.viewMode &&\n ((viewDate && !currentViewDate) ||\n (viewDate && currentViewDate?.valueOf() !== viewDate.valueOf()))\n ) {\n const dates = dateSetup.dates;\n const index = dates.findIndex(\n (d, i) =>\n viewDate.valueOf() >= d.valueOf() &&\n i + 1 !== dates.length &&\n viewDate.valueOf() < dates[i + 1].valueOf()\n );\n if (index === -1) {\n return;\n }\n setCurrentViewDate(viewDate);\n setScrollX(columnWidth * index);\n }\n }, [\n viewDate,\n columnWidth,\n dateSetup.dates,\n dateSetup.viewMode,\n viewMode,\n currentViewDate,\n setCurrentViewDate,\n ]);\n\n useEffect(() => {\n const { changedTask, action } = ganttEvent;\n if (changedTask) {\n if (action === \"delete\") {\n setGanttEvent({ action: \"\" });\n setBarTasks(barTasks.filter(t => t.id !== changedTask.id));\n } else if (\n action === \"move\" ||\n action === \"end\" ||\n action === \"start\" ||\n action === \"progress\"\n ) {\n const prevStateTask = barTasks.find(t => t.id === changedTask.id);\n if (\n prevStateTask &&\n ((prevStateTask.start.getTime() >= 0 &&\n prevStateTask.start.getTime() !== changedTask.start.getTime()) ||\n (prevStateTask.end.getTime() >= 0 &&\n prevStateTask.end.getTime() !== changedTask.end.getTime()) ||\n (prevStateTask.actualStart.getTime() >= 0 &&\n prevStateTask.actualStart.getTime()) !==\n changedTask.actualStart.getTime() ||\n (prevStateTask.actualEnd.getTime() >= 0 &&\n prevStateTask.actualEnd.getTime() !==\n changedTask.actualEnd.getTime()) ||\n prevStateTask.progress !== changedTask.progress)\n ) {\n // actions for change\n const newTaskList = barTasks.map(t =>\n t.id === changedTask.id ? changedTask : t\n );\n setBarTasks(newTaskList);\n }\n }\n }\n }, [ganttEvent, barTasks]);\n\n useEffect(() => {\n if (failedTask) {\n setBarTasks(barTasks.map(t => (t.id !== failedTask.id ? t : failedTask)));\n setFailedTask(null);\n }\n }, [failedTask, barTasks]);\n\n useEffect(() => {\n if (!listCellWidth) {\n setTaskListWidth(0);\n }\n if (taskListRef.current) {\n setTaskListWidth(taskListRef.current.offsetWidth);\n }\n }, [taskListRef, listCellWidth]);\n\n useEffect(() => {\n if (wrapperRef.current) {\n setSvgContainerWidth(wrapperRef.current.offsetWidth - taskListWidth);\n }\n }, [wrapperRef, taskListWidth]);\n\n useEffect(() => {\n if (ganttHeight) {\n setSvgContainerHeight(ganttHeight + headerHeight);\n } else {\n setSvgContainerHeight(tasks.length * rowHeight + headerHeight);\n }\n }, [ganttHeight, tasks, headerHeight, rowHeight]);\n\n // scroll events\n useEffect(() => {\n const handleWheel = (event: WheelEvent) => {\n if (event.shiftKey || event.deltaX) {\n const scrollMove = event.deltaX ? event.deltaX : event.deltaY;\n let newScrollX = scrollX + scrollMove;\n if (newScrollX < 0) {\n newScrollX = 0;\n } else if (newScrollX > svgWidth) {\n newScrollX = svgWidth;\n }\n setScrollX(newScrollX);\n event.preventDefault();\n } else if (ganttHeight) {\n let newScrollY = scrollY + event.deltaY;\n if (newScrollY < 0) {\n newScrollY = 0;\n } else if (newScrollY > ganttFullHeight - ganttHeight) {\n newScrollY = ganttFullHeight - ganttHeight;\n }\n if (newScrollY !== scrollY) {\n setScrollY(newScrollY);\n event.preventDefault();\n }\n }\n\n setIgnoreScrollEvent(true);\n };\n\n const handleLogTouch = (event: TouchEvent) => {\n if (event) {\n setLastTouchX(event.changedTouches[0].pageX);\n setLastTouchY(event.changedTouches[0].pageY);\n }\n };\n\n const handleTouch = (event: TouchEvent) => {\n if (event.changedTouches[0].pageX || event.changedTouches[0].pageY) {\n let deltaX = event.changedTouches[0].pageX - lastTouchX;\n let deltaY = event.changedTouches[0].pageY - lastTouchY;\n\n // if (lastTouchX > 0 && lastTouchY > 0) {\n if (Math.abs(deltaX) > Math.abs(deltaY)) {\n let newScrollX = scrollX - deltaX / 3;\n if (newScrollX > 0 && newScrollX < 1600) {\n setScrollX(newScrollX);\n } else if (newScrollX < 0) {\n setScrollX(0);\n } else {\n setScrollX(1600);\n }\n } else {\n let newScrollY = scrollY - deltaY;\n if (newScrollY > 0 && newScrollY < 1600) {\n setScrollY(newScrollY);\n } else if (newScrollY < 0) {\n setScrollY(0);\n } else {\n setScrollY(1600);\n }\n }\n // }\n\n setLastTouchX(event.changedTouches[0].pageX);\n setLastTouchY(event.changedTouches[0].pageY);\n }\n\n // if (event.changedTouches[0].pageX) {\n // const scrollMove = event.changedTouches[0].pageX ? event.changedTouches[0].pageX : event.changedTouches[0].pageY;\n // let newScrollX = scrollX + scrollMove;\n // if (newScrollX < 0) {\n // newScrollX = 0;\n // } else if (newScrollX > svgWidth) {\n // newScrollX = svgWidth;\n // }\n // setScrollX(newScrollX);\n // event.preventDefault();\n // } else if (ganttHeight) {\n // let newScrollY = scrollY + event.changedTouches[0].pageY;\n // if (newScrollY < 0) {\n // newScrollY = 0;\n // } else if (newScrollY > ganttFullHeight - ganttHeight) {\n // newScrollY = ganttFullHeight - ganttHeight;\n // }\n // if (newScrollY !== scrollY) {\n // setScrollY(newScrollY);\n // event.preventDefault();\n // }\n // }\n\n setIgnoreScrollEvent(true);\n };\n\n // subscribe if scroll is necessary\n wrapperRef.current?.addEventListener(\"wheel\", handleWheel, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchmove\", handleTouch, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchstart\", handleLogTouch, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchend\", handleLogTouch, {\n passive: false,\n });\n return () => {\n wrapperRef.current?.removeEventListener(\"wheel\", handleWheel);\n wrapperRef.current?.removeEventListener(\"touchmove\", handleTouch);\n wrapperRef.current?.removeEventListener(\"touchend\", handleLogTouch);\n wrapperRef.current?.removeEventListener(\"touchend\", handleLogTouch);\n };\n }, [\n wrapperRef,\n scrollY,\n scrollX,\n ganttHeight,\n svgWidth,\n rtl,\n ganttFullHeight,\n ]);\n\n const handleScrollY = (event: SyntheticEvent<HTMLDivElement>) => {\n if (scrollY !== event.currentTarget.scrollTop && !ignoreScrollEvent) {\n setScrollY(event.currentTarget.scrollTop);\n setIgnoreScrollEvent(true);\n } else {\n setIgnoreScrollEvent(false);\n }\n };\n\n const handleScrollX = (event: SyntheticEvent<HTMLDivElement>) => {\n if (scrollX !== event.currentTarget.scrollLeft) {\n setScrollX(event.currentTarget.scrollLeft);\n setIgnoreScrollEvent(true);\n } else {\n setIgnoreScrollEvent(false);\n }\n };\n\n\n /**\n * Handles arrow keys events and transform it to new scroll\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n event.preventDefault();\n let newScrollY = scrollY;\n let newScrollX = scrollX;\n let isX = true;\n switch (event.key) {\n case \"Down\": // IE/Edge specific value\n case \"ArrowDown\":\n newScrollY += rowHeight;\n isX = false;\n break;\n case \"Up\": // IE/Edge specific value\n case \"ArrowUp\":\n newScrollY -= rowHeight;\n isX = false;\n break;\n case \"Left\":\n case \"ArrowLeft\":\n newScrollX -= columnWidth;\n break;\n case \"Right\": // IE/Edge specific value\n case \"ArrowRight\":\n newScrollX += columnWidth;\n break;\n }\n if (isX) {\n if (newScrollX < 0) {\n newScrollX = 0;\n } else if (newScrollX > svgWidth) {\n newScrollX = svgWidth;\n }\n setScrollX(newScrollX);\n } else {\n if (newScrollY < 0) {\n newScrollY = 0;\n } else if (newScrollY > ganttFullHeight - ganttHeight) {\n newScrollY = ganttFullHeight - ganttHeight;\n }\n setScrollY(newScrollY);\n }\n setIgnoreScrollEvent(true);\n };\n\n /**\n * Task select event\n */\n const handleSelectedTask = (taskId: string) => {\n const newSelectedTask = barTasks.find(t => t.id === taskId);\n const oldSelectedTask = barTasks.find(\n t => !!selectedTask && t.id === selectedTask.id\n );\n if (onSelect) {\n if (oldSelectedTask) {\n onSelect(oldSelectedTask, false);\n }\n if (newSelectedTask) {\n onSelect(newSelectedTask, true);\n }\n }\n setSelectedTask(newSelectedTask);\n };\n const handleExpanderClick = (task: Task) => {\n if (onExpanderClick && task.hideChildren !== undefined) {\n onExpanderClick({ ...task, hideChildren: !task.hideChildren });\n }\n };\n const gridProps: GridProps = {\n columnWidth,\n svgWidth,\n tasks: tasks,\n scheduleType: scheduleType,\n rowHeight,\n dates: dateSetup.dates,\n todayColor,\n weekendColor,\n rtl,\n visibleStartY,\n visibleEndY,\n };\n const calendarProps: CalendarProps = {\n dateSetup,\n locale,\n viewMode,\n headerHeight,\n columnWidth,\n fontFamily,\n fontSize,\n rtl,\n };\n const barProps: TaskGanttContentProps = {\n tasks: barTasks,\n dates: dateSetup.dates,\n ganttEvent,\n selectedTask,\n rowHeight,\n taskHeight,\n columnWidth,\n arrowColor,\n timeStep,\n fontFamily,\n fontSize,\n arrowIndent,\n svgWidth,\n rtl,\n setGanttEvent,\n setFailedTask,\n setSelectedTask: handleSelectedTask,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n visibleStartY,\n visibleEndY,\n };\n\n const tableProps: TaskListProps = {\n rowHeight,\n rowWidth: listCellWidth,\n fontFamily,\n fontSize,\n tasks: barTasks,\n leafTasks,\n scheduleType,\n locale,\n headerHeight,\n scrollY,\n ganttHeight,\n horizontalContainerClass: styles.horizontalContainer,\n selectedTask,\n taskListRef,\n setSelectedTask: handleSelectedTask,\n onExpanderClick: handleExpanderClick,\n onDoubleClick,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n };\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n className={styles.wrapper}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n ref={wrapperRef}\n >\n {listCellWidth && <TaskList {...tableProps} />}\n <TaskGantt\n gridProps={gridProps}\n calendarProps={calendarProps}\n barProps={barProps}\n ganttHeight={ganttHeight}\n scrollY={scrollY}\n scrollX={scrollX}\n />\n {ganttEvent.changedTask && (\n <Tooltip\n arrowIndent={arrowIndent}\n rowHeight={rowHeight}\n svgContainerHeight={svgContainerHeight}\n svgContainerWidth={svgContainerWidth}\n fontFamily={fontFamily}\n fontSize={fontSize}\n scrollX={scrollX}\n scrollY={scrollY}\n task={ganttEvent.changedTask}\n type={ganttEvent.type as string}\n headerHeight={headerHeight}\n taskListWidth={taskListWidth}\n TooltipContent={TooltipContent}\n rtl={rtl}\n svgWidth={svgWidth}\n />\n )}\n <VerticalScroll\n ganttFullHeight={ganttFullHeight}\n ganttHeight={ganttHeight}\n headerHeight={headerHeight}\n scroll={scrollY}\n onScroll={handleScrollY}\n rtl={rtl}\n />\n </div>\n {isProcessing && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: \"20px\",\n zIndex: 9999,\n pointerEvents: \"none\", // ← allows scrolling & interaction underneath!\n borderRadius: \"8px\",\n }}\n >\n <span\n style={{\n fontSize: \"24px\",\n fontWeight: \"600\",\n color: \"#cc0404\",\n fontFamily: \"Arial, sans-serif\",\n }}\n >\n Loading...\n </span>\n <div className={styles.spinner} />\n </div>\n )}\n <HorizontalScroll\n svgWidth={svgWidth}\n taskListWidth={taskListWidth}\n scroll={scrollX}\n rtl={rtl}\n onScroll={handleScrollX}\n />\n </div>\n );\n};\n\n// This is based on the visit function from https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search\nexport function topologicalOrderingHelper(\n taskID: string,\n taskMap: {},\n sortedTaskList: string[]\n) {\n if (!taskMap[taskID]) return true; // dependency pointed to an ID not present in leafTasks. ignore the dependency\n if (taskMap[taskID].finished) return true;\n if (taskMap[taskID].started) {\n console.log(\"Cycle involving \" + taskID);\n return false; // Error: dependencies made a cycle\n }\n\n taskMap[taskID].started = true;\n\n let task: Task = taskMap[taskID].task;\n if (task.dependencies)\n for (let i = 0; i < task.dependencies.length; i++) {\n let successVal = topologicalOrderingHelper(\n task.dependencies[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return false; // Error: an error came from deeper recursive call\n }\n\n taskMap[taskID].finished = true;\n\n sortedTaskList.push(taskID);\n return true;\n}\nexport function getCriticalPaths(leafTasks: Task[]) {\n // Map ids to tasks for faster access.\n // O(n) space, O(n) time to add all from list, O(1) time for each access.\n let taskMap = {};\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id] = { task: leafTasks[i] };\n\n // Sort the tasks so each dependent is listed after its dependencies.\n // O(num vertices + num edges)\n let sortedTaskList: string[] = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let successVal = topologicalOrderingHelper(\n leafTasks[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return [[], []]; // Abort: there was a cycle\n }\n\n // Map tasks to their dependents for faster access.\n // Dependencies are already easy enough to access, but not dependents.\n // O(num vertices + num edges)\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id].dependents = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let task = leafTasks[i];\n if (task.dependencies)\n for (let j = 0; j < task.dependencies.length; j++)\n taskMap[task.dependencies[j].id]?.dependents.push(task.id);\n }\n\n // Compute critical paths, in reverse order to handle dependents before dependencies.\n // O(num vertices + num edges)\n for (let i = sortedTaskList.length - 1; i >= 0; i--)\n computeCriticalPath(sortedTaskList[i], taskMap);\n\n // Now each task has a list of all possible paths and their lengths\n // We want to combine and sort all these entries so we can trace any number\n // of critical paths by following the best available chain\n // O(num tasks)\n let taskChainList = [];\n for (let i = 0; i < sortedTaskList.length; i++) {\n for (let j = 0; j < taskMap[sortedTaskList[i]].paths.length; j++) {\n taskChainList.push(taskMap[sortedTaskList[i]].paths[j]);\n }\n }\n\n // const printedList = taskChainList.map((elem) => {\n // const newElem = { ...elem };\n // newElem.duration = Math.round(elem.duration / 86400000);\n // return newElem;\n // })\n\n // console.debug(printedList);\n\n if (taskChainList.length > 0) {\n\n // Sort by duration (descending)\n // O(n log n)\n taskChainList.sort((a, b) => b.duration - a.duration);\n\n // Select the best next option to build the best path\n let primaryLeaf = taskChainList[0].parent;\n let primaryPath = [];\n\n while (primaryLeaf !== undefined) {\n\n // Add this task to the primary path\n primaryPath.push(taskMap[primaryLeaf].task);\n\n // If this task has no dependents, it is a leaf and the primary path ends here\n if (taskMap[primaryLeaf].paths.length === 0) {\n primaryLeaf = undefined;\n break;\n }\n\n // Check all of this task's paths and select longest duration as next\n let primaryDuration = taskMap[primaryLeaf].paths[0].duration;\n let nextPath = taskMap[primaryLeaf].paths[0];\n for (let i = 1; i < taskMap[primaryLeaf].paths.length; i++) {\n let newDuration = taskMap[primaryLeaf].paths[i].duration;\n if (newDuration > primaryDuration) {\n nextPath = taskMap[primaryLeaf].paths[i]\n primaryDuration = newDuration;\n }\n }\n\n // Disqualify this path from being selected by second best path.\n nextPath.visited = true;\n\n // Follow this path down to the next task\n primaryLeaf = nextPath.task;\n\n }\n\n\n // Select the best next option from the unvisited tasks to build the second best path\n let secondaryLeaf = taskChainList[0].parent;\n\n for (let i = 0; i < taskChainList.length; i++) {\n if (!taskChainList[i].visited) {\n secondaryLeaf = taskChainList[i].parent;\n break;\n }\n }\n\n let secondaryPath = [];\n\n while (secondaryLeaf !== undefined) {\n\n // Add this task to the secondary path\n secondaryPath.push(taskMap[secondaryLeaf].task);\n\n // If this task has no dependents, it is a leaf and the secondary path ends here\n if (taskMap[secondaryLeaf].paths.length === 0) {\n secondaryLeaf = undefined;\n break;\n }\n\n // Check all of this task's paths and select longest duration as next\n let secondaryDuration = taskMap[secondaryLeaf].paths[0].duration;\n let nextPath = taskMap[secondaryLeaf].paths[0];\n\n // If default path has already been visited, discredit it\n if (nextPath.visited) secondaryDuration = 0;\n\n for (let i = 1; i < taskMap[secondaryLeaf].paths.length; i++) {\n let newDuration = taskMap[secondaryLeaf].paths[i].duration;\n // Extra check here to ensure path has not already been used\n if (newDuration > secondaryDuration && !taskMap[secondaryLeaf].paths[i].visited) {\n nextPath = taskMap[secondaryLeaf].paths[i]\n secondaryDuration = newDuration;\n }\n }\n\n // If path we ended up with has already been visited, this task is a leaf node\n if (nextPath.visited) {\n break;\n }\n\n // Disqualify this path from being selected by third best path.\n nextPath.visited = true;\n\n // Follow this path down to the next task\n secondaryLeaf = nextPath.task;\n\n }\n\n return [primaryPath, secondaryPath];\n }\n\n return [[], []];\n}\n\nexport function computeCriticalPath(taskID: string, taskMap: {}) {\n let task: Task = taskMap[taskID].task;\n let dependents = taskMap[taskID].dependents;\n\n taskMap[taskID].start = task.start.getTime();\n taskMap[taskID].end = task.end.getTime();\n taskMap[taskID].paths = []; // Each task will track length of all dep paths\n for (let j = 0; j < dependents.length; j++) {\n\n // Get the duration of the dep task\n let depDuration = taskMap[dependents[j]].task.end.getTime() - taskMap[dependents[j]].task.start.getTime();\n\n // subtracting any overlap in days with its parent\n let overlap = Math.max((taskMap[taskID].end - taskMap[dependents[j]].task.start.getTime()), 0);\n\n // Inherit all paths known by dep task, adding this task's length to the tracked lengths\n let paths = taskMap[dependents[j]].paths;\n for (let k = 0; k < paths.length; k++) {\n\n let totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap + paths[k].duration\n\n if (taskMap[taskID].paths.length < 2) {\n taskMap[taskID].paths.push({\n duration: totalDuration,\n task: dependents[j],\n parent: taskID,\n visited: false\n });\n } else if (totalDuration > taskMap[taskID].paths[0].duration) {\n taskMap[taskID].paths[0].duration = totalDuration;\n taskMap[taskID].paths[0].task = dependents[j];\n taskMap[taskID].paths[0].parent = taskID;\n taskMap[taskID].paths[0].visited = false;\n } else if (totalDuration > taskMap[taskID].paths[1].duration) {\n taskMap[taskID].paths[1].duration = totalDuration;\n taskMap[taskID].paths[1].task = dependents[j];\n taskMap[taskID].paths[1].parent = taskID;\n taskMap[taskID].paths[1].visited = false;\n }\n\n }\n\n // Only add immediate child path if child itself has no children\n if (paths.length === 0) {\n let immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap;\n\n // Create a new path that ends at the immediate dep task\n if (taskMap[taskID].paths.length < 2) {\n taskMap[taskID].paths.push({\n duration: immediateChildDuration,\n task: dependents[j],\n parent: taskID,\n visited: false\n });\n } else if (immediateChildDuration > taskMap[taskID].paths[0].duration) {\n taskMap[taskID].paths[0].duration = immediateChildDuration;\n taskMap[taskID].paths[0].task = dependents[j];\n taskMap[taskID].paths[0].parent = taskID;\n taskMap[taskID].paths[0].visited = false;\n } else if (immediateChildDuration > taskMap[taskID].paths[1].duration) {\n taskMap[taskID].paths[1].duration = immediateChildDuration;\n taskMap[taskID].paths[1].task = dependents[j];\n taskMap[taskID].paths[1].parent = taskID;\n taskMap[taskID].paths[1].visited = false;\n }\n }\n }\n}\n\nexport function uncolorAll(tasks: Task[]) {\n tasks.forEach(task => {\n if (task.styles) delete task.styles.criticalPathColor;\n delete task.criticalPathArrows;\n });\n}\n\nexport function colorPath(path: Task[], color: string, tasks: Task[],criticalPathType: string) {\n // Color boxes\n for (let i = 0; i < path.length; i++) {\n // For this task in the path, find the most immediate ancestor in tasks.\n let longestIDLength = 0;\n let longestTask;\n for (let j = 0; j < tasks.length; j++) {\n if (path[i].id === tasks[j].id) {\n longestTask = tasks[j];\n break;\n }\n if (\n path[i].id.startsWith(tasks[j].id + \".\") &&\n tasks[j].id.length > longestIDLength\n ) {\n longestIDLength = tasks[j].id.length;\n longestTask = tasks[j];\n }\n }\n // If some ancestor is found, color it.\n if (longestTask) {\n let styles = longestTask.styles ?? {};\n styles.criticalPathColor = color;\n longestTask.styles = styles;\n }\n }\n // Color arrows\n for (let i = 0; i + 1 < path.length; i++) {\n // Items in the critical paths came from leafTasks, but we need to change the versions from tasks instead.\n let taskFromTasks;\n for (let j = 0; j < tasks.length; j++)\n if (path[i].id === tasks[j].id) {\n taskFromTasks = tasks[j];\n break;\n }\n if (taskFromTasks) {\n let arrows = taskFromTasks.criticalPathArrows;\n // Create the arrows list if it does not exist.\n if (!arrows) arrows = [];\n // If the arrow is already colored, replace its color in the list.\n let arrow = arrows.find(arrow => arrow.taskId === path[i + 1].id);\n if (arrow) {\n arrow.arrowColor = color;\n arrow.criticalPathType = criticalPathType;\n }\n // Else, add the new colored arrow to the list.\n else arrows.push({ taskId: path[i + 1].id, arrowColor: color, criticalPathType: criticalPathType });\n taskFromTasks.criticalPathArrows = arrows;\n }\n }\n}\nexport const getParentWbs = (wbs: string): string | undefined => {\n const segments = wbs.split('.');\n if (segments.length <= 1) return undefined; // Top-level task has no parent\n return segments.slice(0, -1).join('.'); // Remove last segment\n};\n"],"names":["ViewMode","intlDTCache","getCachedDateTimeFormat","locString","opts","key","JSON","stringify","dtf","Intl","DateTimeFormat","addToDate","date","quantity","scale","newDate","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","startOfDate","scores","shouldReset","_scale","maxScore","indexOf","ganttDateRange","tasks","viewMode","preStepsCount","newStartDate","start","getTime","newEndDate","end","task","actualStart","actualEnd","Year","Quarter","Month","Week","getMonday","Day","QuarterDay","HalfDay","Hour","seedDates","startDate","endDate","currentDate","dates","push","getLocaleMonth","locale","bottomValue","month","format","replace","toLocaleUpperCase","getLocalDayOfWeek","weekday","day","getDay","diff","setDate","getWeekNumberISO8601","tmpDate","valueOf","dayNumber","firstThursday","setMonth","weekNumber","Math","ceil","toString","length","TaskListHeaderDefault","headerHeight","fontFamily","fontSize","rowWidth","scheduleType","allSelected","onSelectAll","React","className","styles","ganttTable","style","ganttTable_Header","height","ganttTable_HeaderItem","minWidth","parseInt","maxWidth","type","checked","onChange","e","target","ganttTable_HeaderSeparator","marginTop","title","localeDateStringCache","toLocaleDateStringFactory","dateTimeOptions","lds","toLocaleDateString","year","TaskListTableDefault","rowHeight","leafTasks","onExpanderClick","selectedTasks","onTaskSelect","taskLabelRenderer","t","name","virtualItems","useMemo","leafTaskIds","Set","map","id","hasSelectedAncestor","taskId","selectedSet","allTasks","find","parentWbs","getParentWbs","has","itemsToRender","_","index","size","lane","measureElement","taskListWrapper","vi","expanderSymbol","hideChildren","isSelected","includes","isAncestorSelected","position","top","left","width","transform","taskListMilestoneRow","taskListLookAheadRow","taskListTableRow","taskListCell","taskListText","display","justifyContent","alignItems","paddingLeft","paddingRight","disabled","taskListNameWrapper","depth","taskListExpander","onClick","taskListExpanderPlaceholder","now","color","optionalId","Tooltip","rtl","svgContainerHeight","svgContainerWidth","scrollX","scrollY","arrowIndent","taskListWidth","TooltipContent","tooltipRef","useRef","useState","relatedY","setRelatedY","relatedX","setRelatedX","useEffect","current","tooltipHeight","offsetHeight","tooltipWidth","offsetWidth","newRelatedY","newRelatedX","x1","x2","tooltipLeftmostPoint","actualx2","fullChartWidth","actualx1","tooltipLowerPoint","ref","tooltipDetailsContainer","tooltipDetailsContainerHidden","StandardTooltipContent","tooltipDefaultContainer","tooltipDefaultContainerParagraph","round","progress","VerticalScroll","scroll","ganttHeight","ganttFullHeight","onScroll","scrollRef","scrollTop","marginLeft","marginRight","TaskList","selectedTask","setSelectedTask","taskListRef","horizontalContainerClass","TaskListHeader","TaskListTable","onMultiSelect","horizontalContainerRef","setSelectedTasks","pendingTaskSelect","setPendingTaskSelect","prevSelectedTasksRef","expandedTasks","virtualizer","useVirtualizer","count","getScrollElement","estimateSize","overscan","selectedTaskObjects","filter","newSelected","forEach","selected","recursiveOpen","descendants","getDescendants","add","d","Array","from","newSelectedArray","children","flatMap","child","c","handleTaskSelect","prev","handleSelectAll","topLevelTasks","headerProps","undefined","selectedTaskId","tableProps","getVirtualItems","getTotalSize","GridBody","svgWidth","columnWidth","todayColor","weekendColor","visibleStartY","visibleEndY","visibleHeight","items","i","isWeekend","isTodayColumn","next","step","todayRects","weekendRects","x","y","fill","tickLines","y1","y2","gridTick","rowBackgrounds","rowLines","gridRowLine","isMilestone","rowClass","darkerGridRow","gridRowLookAhead","gridRow","Grid","props","TopPartOfCalendar","value","x1Line","y1Line","y2Line","xText","yText","textAnchor","textAnchorClass","textAnchorStart","textAnchorMiddle","textAnchorEnd","calendarTopTick","calendarTopText","Calendar","dateSetup","getCalendarValuesForYear","topValues","bottomValues","topDefaultHeight","calendarBottomText","topValue","getCalendarValuesForQuarter","quarter","floor","getCalendarValuesForMonth","toLocaleString","console","log","getCalendarValuesForWeek","weeksCount","getCalendarValuesForDay","getCalendarValuesForPartOfDay","ticks","hour","getCalendarValuesForHour","displayDate","topPosition","calendarHeader","Arrow","taskFrom","taskTo","taskHeight","arrowColor","dependencyType","drawPathAndTriangle","path","trianglePoints","strokeWidth","stroke","points","indexCompare","taskToEndY","verticalOffset","minX","min","maxX","max","fromPoint","toPoint","arrowPoints","right","convertToBarTasks","barCornerRadius","handleWidth","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","projectProgressColor","projectProgressSelectedColor","projectBackgroundColor","projectBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","barTasks","convertToBarTask","dependencies","j","dependence","findIndex","barchild","barChildren","barTask","convertToMilestone","convertToBar","progressStartWidth","progressEndWidth","taskXCoordinateRTL","taskXCoordinate","abs","typeInternal","progressWithByParams","progressWidth","progressX","taskYCoordinate","backgroundColor","backgroundSelectedColor","progressColor","progressSelectedColor","rotatedHeight","xDate","remainderMillis","percentOfInterval","taskX1","taskX2","getProgressPoint","taskY","point","join","startByX","xStep","steps","additionalXValue","newX","startByActualX","endByX","endByActualX","moveByX","newX1","newX2","moveByActualX","dateByX","taskX","taskDate","timeStep","getTimezoneOffset","handleTaskBySVGMouseEvent","svgX","action","initEventX1Delta","result","handleTaskBySVGMouseEventForMilestone","handleTaskBySVGMouseEventForBar","changedTask","isChanged","newMoveX1","newMoveX2","isKeyboardEvent","event","removeHiddenTasks","groupedTasks","groupedTask","getChildren","taskList","project","taskChildren","concat","sortTasks","taskA","taskB","orderA","displayOrder","Number","MAX_VALUE","orderB","BarDisplay","onMouseDown","getProcessColor","getBarColor","ry","rx","criticalPathColor","taskProgressColor","BarDateHandle","barHandle","BarProgressHandle","Bar","isProgressChangeable","isDateChangeable","onEventStart","progressPoint","handleHeight","barWrapper","tabIndex","startProgressWidth","endProgressWidth","BarSmall","Milestone","milestoneWrapper","milestoneBackground","onDoubleClick","Project","barColor","processColor","projectWith","projectLeftTriangle","projectRightTriangle","projectWrapper","projectBackground","projectTop","TaskItem","isDelete","taskItem","setTaskItem","onKeyDown","stopPropagation","onMouseEnter","onMouseLeave","TaskGanttContent","ganttEvent","svg","setGanttEvent","setFailedTask","onDateChange","onProgressChange","onDelete","createSVGPoint","setXStep","setInitEventX1Delta","isMoving","setIsMoving","dateDelta","newXStep","handleMouseMove","preventDefault","clientX","cursor","matrixTransform","getScreenCTM","inverse","handleMouseUp","operationSuccess","originalSelectedTask","newChangedTask","isNotLikeOriginal","removeEventListener","addEventListener","handleBarEventStart","error","getArrows","isCritical","criticalPathType","_task","criticalTask","criticalPathArrows","arrow","yFrom","yTo","minY","maxY","Boolean","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","buffer","scrollLeft","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","Gantt","listCellWidth","barFill","viewDate","onSelect","delayToRender","shouldNotShowLoadingOverlay","wrapperRef","startDateRange","endDateRange","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","debounceRef","failedTask","setScrollY","setScrollX","ignoreScrollEvent","setIgnoreScrollEvent","lastTouchX","setLastTouchX","lastTouchY","setLastTouchY","isProcessing","setIsProcessing","clearTimeout","setTimeout","filteredTasks","sort","newDates","reverse","getCriticalPaths","primaryPath","secondaryPath","uncolorAll","colorPath","prevStateTask","newTaskList","handleWheel","shiftKey","deltaX","scrollMove","deltaY","newScrollX","newScrollY","handleLogTouch","changedTouches","pageX","pageY","handleTouch","passive","handleScrollY","currentTarget","handleScrollX","handleKeyDown","isX","handleSelectedTask","newSelectedTask","oldSelectedTask","handleExpanderClick","wrapper","bottom","gap","zIndex","pointerEvents","borderRadius","fontWeight","spinner","topologicalOrderingHelper","taskID","taskMap","sortedTaskList","finished","started","successVal","dependents","computeCriticalPath","taskChainList","paths","a","b","duration","primaryLeaf","parent","primaryDuration","nextPath","newDuration","visited","secondaryLeaf","secondaryDuration","depDuration","overlap","k","totalDuration","immediateChildDuration","longestIDLength","longestTask","startsWith","taskFromTasks","arrows","wbs","segments","split","slice"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/types/public-types.ts","../src/helpers/date-helper.ts","../src/components/task-list/task-list-header.tsx","../src/components/task-list/task-list-table.tsx","../src/components/other/tooltip.tsx","../src/components/other/vertical-scroll.tsx","../src/components/task-list/task-list.tsx","../src/components/grid/grid-body.tsx","../src/components/grid/grid.tsx","../src/components/calendar/top-part-of-calendar.tsx","../src/components/calendar/calendar.tsx","../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs","../src/components/other/arrow.tsx","../src/helpers/bar-helper.ts","../src/helpers/other-helper.ts","../src/components/task-item/bar/bar-display.tsx","../src/components/task-item/bar/bar-date-handle.tsx","../src/components/task-item/bar/bar-progress-handle.tsx","../src/components/task-item/bar/bar.tsx","../src/components/task-item/bar/bar-small.tsx","../src/components/task-item/milestone/milestone.tsx","../src/components/task-item/project/project.tsx","../src/components/task-item/task-item.tsx","../src/components/gantt/task-gantt-content.tsx","../src/components/gantt/task-gantt.tsx","../src/components/other/horizontal-scroll.tsx","../src/components/gantt/gantt.tsx"],"sourcesContent":["export enum ViewMode {\n Hour = \"Hour\",\n QuarterDay = \"Quarter Day\",\n HalfDay = \"Half Day\",\n Day = \"Day\",\n /** ISO-8601 week */\n Week = \"Week\",\n Month = \"Month\",\n Quarter = \"Quarter\",\n Year = \"Year\",\n}\nexport type TaskType = \"task\" | \"milestone\" | \"project\";\nexport type Dependency = \"SS\" | \"SF\" | \"FS\" | \"FF\";\n\nexport declare type DependencyType = {\n id: string;\n type: Dependency;\n};\nexport interface Task {\n id: string;\n optionalId?: string | null;\n type: TaskType;\n name: string;\n start: Date;\n end: Date;\n /**\n * From 0 to 100\n */\n progress: number;\n actualStart: Date;\n actualEnd: Date;\n criticalPathArrows?: Array<{ taskId: string; arrowColor: string ; criticalPathType: string }>;\n styles?: {\n taskProgressColor?: string;\n backgroundColor?: string;\n backgroundSelectedColor?: string;\n progressColor?: string;\n progressSelectedColor?: string;\n criticalPathColor?: string;\n };\n percentComplete?: number | null;\n plannedDuration?: number | null;\n remainingDuration?: number | null;\n actualDuration?: number | null;\n durationType?: string | null;\n depth: number;\n isDisabled?: boolean;\n project?: string;\n dependencies?: DependencyType[];\n hideChildren?: boolean;\n displayOrder?: number;\n childrenCount?: number;\n}\n\nexport interface EventOption {\n /**\n * Time step value for date changes.\n */\n timeStep?: number;\n /**\n * Invokes on bar select on unselect.\n */\n onSelect?: (task: Task, isSelected: boolean) => void;\n /**\n * Invokes on bar double click.\n */\n onDoubleClick?: (task: Task) => void;\n /**\n * Invokes on bar click.\n */\n onClick?: (task: Task) => void;\n /**\n * Invokes on end and start time change. Chart undoes operation if method return false or error.\n */\n onDateChange?: (\n task: Task,\n children: Task[]\n ) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on progress change. Chart undoes operation if method return false or error.\n */\n onProgressChange?: (\n task: Task,\n children: Task[]\n ) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on delete selected task. Chart undoes operation if method return false or error.\n */\n onDelete?: (task: Task) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on expander on task list\n */\n onExpanderClick?: (task: Task) => void;\n /**\n * Invokes when tasks are multi-selected via checkboxes\n */\n onMultiSelect?: (tasks: Task[]) => void;\n}\n\nexport interface DisplayOption {\n viewMode?: ViewMode;\n viewDate?: Date;\n preStepsCount?: number;\n /**\n * Specifies the month name language. Able formats: ISO 639-2, Java Locale\n */\n locale?: string;\n rtl?: boolean;\n}\n\nexport interface StylingOption {\n headerHeight?: number;\n columnWidth?: number;\n listCellWidth?: string;\n rowHeight?: number;\n ganttHeight?: number;\n barCornerRadius?: number;\n handleWidth?: number;\n fontFamily?: string;\n fontSize?: string;\n /**\n * How many of row width can be taken by task.\n * From 0 to 100\n */\n barFill?: number;\n barProgressColor?: string;\n barProgressSelectedColor?: string;\n barBackgroundColor?: string;\n barBackgroundSelectedColor?: string;\n projectProgressColor?: string;\n projectProgressSelectedColor?: string;\n projectBackgroundColor?: string;\n projectBackgroundSelectedColor?: string;\n milestoneBackgroundColor?: string;\n milestoneBackgroundSelectedColor?: string;\n arrowColor?: string;\n arrowIndent?: number;\n todayColor?: string;\n weekendColor?: string;\n TooltipContent?: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n }>;\n TaskListHeader?: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n }>;\n TaskListTable?: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n selectedTaskId: string;\n /**\n * Sets selected task by id\n */\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n }>;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n taskProgressColor?: string;\n delayToRender?: number;\n shouldNotShowLoadingOverlay?: boolean;\n}\n\nexport interface GanttProps extends EventOption, DisplayOption, StylingOption {\n tasks: Task[];\n leafTasks?: Task[];\n scheduleType: string;\n startDate?: Date;\n endDate?: Date;\n}\n","import { Task, ViewMode } from \"../types/public-types\";\nimport DateTimeFormatOptions = Intl.DateTimeFormatOptions;\nimport DateTimeFormat = Intl.DateTimeFormat;\n\ntype DateHelperScales =\n | \"year\"\n | \"quarter\"\n | \"month\"\n | \"day\"\n | \"hour\"\n | \"minute\"\n | \"second\"\n | \"millisecond\";\n\nconst intlDTCache = {};\nexport const getCachedDateTimeFormat = (\n locString: string | string[],\n opts: DateTimeFormatOptions = {}\n): DateTimeFormat => {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n};\n\nexport const addToDate = (\n date: Date,\n quantity: number,\n scale: DateHelperScales\n) => {\n const newDate = new Date(\n date.getFullYear() + (scale === \"year\" ? quantity : 0),\n date.getMonth() + (scale === \"month\" ? quantity : 0),\n date.getDate() + (scale === \"day\" ? quantity : 0),\n date.getHours() + (scale === \"hour\" ? quantity : 0),\n date.getMinutes() + (scale === \"minute\" ? quantity : 0),\n date.getSeconds() + (scale === \"second\" ? quantity : 0),\n date.getMilliseconds() + (scale === \"millisecond\" ? quantity : 0)\n );\n return newDate;\n};\n\nexport const startOfDate = (date: Date, scale: DateHelperScales) => {\n const scores = [\n \"millisecond\",\n \"second\",\n \"minute\",\n \"hour\",\n \"day\",\n \"month\",\n \"quarter\",\n \"year\",\n ];\n\n const shouldReset = (_scale: DateHelperScales) => {\n const maxScore = scores.indexOf(scale);\n return scores.indexOf(_scale) <= maxScore;\n };\n const newDate = new Date(\n date.getFullYear(),\n shouldReset(\"year\") ? 0 : date.getMonth(),\n shouldReset(\"month\") ? 1 : date.getDate(),\n shouldReset(\"day\") ? 0 : date.getHours(),\n shouldReset(\"hour\") ? 0 : date.getMinutes(),\n shouldReset(\"minute\") ? 0 : date.getSeconds(),\n shouldReset(\"second\") ? 0 : date.getMilliseconds()\n );\n return newDate;\n};\n\nexport const ganttDateRange = (\n tasks: Task[],\n viewMode: ViewMode,\n preStepsCount: number\n) => {\n let newStartDate: Date =\n tasks[0]?.start.getTime() !== 0\n ? tasks[0]?.start || new Date()\n : new Date();\n let newEndDate: Date =\n tasks[0]?.end.getTime() !== 0 ? tasks[0]?.end || new Date() : new Date();\n\n for (const task of tasks) {\n if (task.start && task.start.getTime() !== 0 && task.start < newStartDate) {\n newStartDate = task.start;\n }\n if (task.end && task.end.getTime() !== 0 && task.end > newEndDate) {\n newEndDate = task.end;\n }\n if (\n task.actualStart &&\n task.actualStart.getTime() !== 0 &&\n task.actualStart < newStartDate\n ) {\n newStartDate = task.actualStart;\n }\n if (\n task.actualEnd &&\n task.actualEnd.getTime() !== 0 &&\n task.actualEnd > newEndDate\n ) {\n newEndDate = task.actualEnd;\n }\n }\n\n switch (viewMode) {\n case ViewMode.Year:\n newStartDate = addToDate(newStartDate, -1, \"year\");\n newStartDate = startOfDate(newStartDate, \"year\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Quarter:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"year\");\n newStartDate = startOfDate(newStartDate, \"year\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"quarter\");\n break;\n case ViewMode.Month:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"month\");\n newStartDate = startOfDate(newStartDate, \"month\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Week:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(\n getMonday(newStartDate),\n -7 * preStepsCount,\n \"day\"\n );\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1.5, \"month\");\n break;\n case ViewMode.Day:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 19, \"day\");\n break;\n case ViewMode.QuarterDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 66, \"hour\"); // 24(1 day)*3 - 6\n break;\n case ViewMode.HalfDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 108, \"hour\"); // 24(1 day)*5 - 12\n break;\n case ViewMode.Hour:\n newStartDate = startOfDate(newStartDate, \"hour\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"hour\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1, \"day\");\n break;\n }\n return [newStartDate, newEndDate];\n};\n\nexport const seedDates = (\n startDate: Date,\n endDate: Date,\n viewMode: ViewMode\n) => {\n let currentDate: Date = new Date(startDate);\n const dates: Date[] = [currentDate];\n while (currentDate < endDate) {\n switch (viewMode) {\n case ViewMode.Year:\n currentDate = addToDate(currentDate, 1, \"year\");\n break;\n case ViewMode.Quarter:\n currentDate = addToDate(currentDate, 3, \"month\");\n break;\n case ViewMode.Month:\n currentDate = addToDate(currentDate, 1, \"month\");\n break;\n case ViewMode.Week:\n currentDate = addToDate(currentDate, 7, \"day\");\n break;\n case ViewMode.Day:\n currentDate = addToDate(currentDate, 1, \"day\");\n break;\n case ViewMode.HalfDay:\n currentDate = addToDate(currentDate, 12, \"hour\");\n break;\n case ViewMode.QuarterDay:\n currentDate = addToDate(currentDate, 6, \"hour\");\n break;\n case ViewMode.Hour:\n currentDate = addToDate(currentDate, 1, \"hour\");\n break;\n }\n dates.push(currentDate);\n }\n return dates;\n};\n\nexport const getLocaleMonth = (date: Date, locale: string) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n month: \"long\",\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\nexport const getLocalDayOfWeek = (\n date: Date,\n locale: string,\n format?: \"long\" | \"short\" | \"narrow\" | undefined\n) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n weekday: format,\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\n/**\n * Returns monday of current week\n * @param date date for modify\n */\nconst getMonday = (date: Date) => {\n const day = date.getDay();\n const diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\n\nexport const getWeekNumberISO8601 = (date: Date) => {\n const tmpDate = new Date(date.valueOf());\n const dayNumber = (tmpDate.getDay() + 6) % 7;\n tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);\n const firstThursday = tmpDate.valueOf();\n tmpDate.setMonth(0, 1);\n if (tmpDate.getDay() !== 4) {\n tmpDate.setMonth(0, 1 + ((4 - tmpDate.getDay() + 7) % 7));\n }\n const weekNumber = (\n 1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 604800000)\n ).toString();\n\n if (weekNumber.length === 1) {\n return `0${weekNumber}`;\n } else {\n return weekNumber;\n }\n};\n\nexport const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n};\n","import React from \"react\";\nimport styles from \"./task-list-header.module.css\";\n\nexport const TaskListHeaderDefault: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n}> = ({ headerHeight, fontFamily, fontSize, rowWidth, scheduleType, allSelected, onSelectAll }) => {\n return (\n <div\n className={styles.ganttTable}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n <div\n className={styles.ganttTable_Header}\n style={{\n height: headerHeight - 2,\n }}\n >\n {onSelectAll && (\n <div>\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <input \n type=\"checkbox\" \n checked={allSelected}\n onChange={(e) => onSelectAll(e.target.checked)} \n />\n </div>\n </div>\n )}\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n ID\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n WBS Code / Activity ID\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n >\n Task\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Planned Start\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Planned End\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Actual Start\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Actual End\n </div>\n )}\n {scheduleType === \"main\" && (\n <React.Fragment>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"% Complete\"\n >\n % Complete\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Duration\"\n >\n Planned Duration\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.7,\n maxWidth: parseInt(rowWidth) * 0.7,\n }}\n title=\"Remaining Duration\"\n >\n Remaining Duration\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Actual Duration\"\n >\n Actual Duration\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title=\"Duration Type\"\n >\n Duration Type\n </div>\n </React.Fragment>\n )}\n </div>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport styles from \"./task-list-table.module.css\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\n\nconst localeDateStringCache = {};\nconst toLocaleDateStringFactory =\n (locale: string) =>\n (date: Date, dateTimeOptions: Intl.DateTimeFormatOptions): string => {\n if (!date || date.getTime() === 0) return \"\"; // Handle invalid dates\n const key = date.toString();\n let lds = localeDateStringCache[key];\n if (!lds) {\n lds = date.toLocaleDateString(locale, dateTimeOptions);\n localeDateStringCache[key] = lds;\n }\n return lds;\n };\nconst dateTimeOptions: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n};\n\nexport const TaskListTableDefault: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n virtualItems?: VirtualItem[];\n}> = ({\n rowHeight,\n rowWidth,\n tasks,\n scheduleType,\n leafTasks,\n fontFamily,\n fontSize,\n locale,\n onExpanderClick,\n selectedTasks = [],\n onTaskSelect,\n taskLabelRenderer = t => \" \" + t.name,\n virtualItems,\n}) => {\n const toLocaleDateString = useMemo(\n () => toLocaleDateStringFactory(locale),\n [locale]\n );\n const leafTaskIds = useMemo(\n () => new Set(leafTasks.map(t => t.id)),\n [leafTasks]\n );\n\n // Checks if the task has a selected ancestor by traversing the WBS hierarchy\n const hasSelectedAncestor = (taskId: string, selectedSet: Set<string>, allTasks: Task[]): boolean => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return false;\n const parentWbs = getParentWbs(task.id);\n if (!parentWbs) return false;\n if (selectedSet.has(parentWbs)) return true;\n return hasSelectedAncestor(parentWbs, selectedSet, allTasks);\n };\n\n const itemsToRender = virtualItems || tasks.map((_, index) => ({ index, start: index * rowHeight, size: rowHeight, key: index, end: (index + 1) * rowHeight, lane: 0, measureElement: () => {} }));\n\n return (\n <div\n className={styles.taskListWrapper}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n {itemsToRender.map(vi => {\n const t = tasks[vi.index];\n let expanderSymbol = \"\";\n if (!(leafTaskIds.has(t.id) || t.type=== \"milestone\")) {\n if (t.hideChildren === false) {\n expanderSymbol = \"▼\";\n } else if (t.hideChildren === true) {\n expanderSymbol = \"►\";\n }\n }\n\n const isSelected = selectedTasks.includes(t.id);\n const isAncestorSelected = hasSelectedAncestor(t.id, new Set(selectedTasks), tasks);\n\n return (\n <div\n key={`${vi.key}`}\n data-index={vi.index}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${vi.size}px`,\n transform: `translateY(${vi.start}px)`,\n }}\n >\n <div\n className={\n t.type === \"milestone\"\n ? styles.taskListMilestoneRow\n : scheduleType === \"lookAhead\"\n ? styles.taskListLookAheadRow\n : styles.taskListTableRow\n }\n style={{ height: rowHeight }}\n key={`${t.id}row`}\n >\n {onTaskSelect && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <div className={styles.taskListText} style={{ \n display: \"flex\", \n justifyContent: \"center\", \n alignItems: \"center\",\n height: \"100%\",\n paddingLeft: \"0\",\n paddingRight: \"0\"\n }}>\n <input \n type=\"checkbox\" \n checked={isSelected}\n disabled={isAncestorSelected}\n onChange={(e) => onTaskSelect(t.id, e.target.checked)}\n />\n </div>\n </div>\n )}\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.id}\n >\n <div\n className={styles.taskListNameWrapper}\n style={{ paddingLeft: `${t.depth * 4}px` }}\n >\n {!(leafTaskIds.has(t.id) || t.type=== \"milestone\") ? (\n <div\n className={styles.taskListExpander}\n onClick={() => onExpanderClick(t)}\n >\n \n {expanderSymbol}\n </div>\n ) : (\n <div className={styles.taskListExpanderPlaceholder}></div>\n )}\n <div className={styles.taskListText}>\n {t.id}{\" \"}\n {t.actualEnd.getTime() > 0 &&\n t.actualEnd.getTime() < Date.now() ? (\n <span\n title=\"Task Complete\"\n style={{ color: \"limegreen\", fontSize: \"16px\" }}\n >\n ✔\n </span>\n ) : (\n \"\"\n )}\n </div>\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.optionalId?t.optionalId:\"\"}\n >\n {t.optionalId}\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n title={t.name}\n >\n <div className={styles.taskListText}>{taskLabelRenderer(t)}</div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {toLocaleDateString(t.start, dateTimeOptions)}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {toLocaleDateString(t.end, dateTimeOptions)}\n </div>\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {toLocaleDateString(t.actualStart, dateTimeOptions)}\n </div>\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {toLocaleDateString(t.actualEnd, dateTimeOptions)}\n </div>\n </div>\n )}\n {scheduleType === \"main\" && (() => {\n const percentComplete = t.percentComplete != null ? t.percentComplete : (t.progress ?? 0);\n const plannedDuration = t.plannedDuration != null ? t.plannedDuration : null;\n const remainingDuration = plannedDuration != null\n ? Math.round(plannedDuration - (plannedDuration * (percentComplete / 100)))\n : null;\n const actualDuration = (() => {\n if (!t.actualStart || t.actualStart.getTime() === 0) return null;\n const endRef = (t.actualEnd && t.actualEnd.getTime() > 0) ? t.actualEnd : new Date();\n return Math.ceil((endRef.getTime() - t.actualStart.getTime()) / (1000 * 60 * 60 * 24));\n })();\n return (\n <React.Fragment>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {percentComplete != null ? `${percentComplete}%` : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {plannedDuration != null ? plannedDuration : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.7,\n maxWidth: parseInt(rowWidth) * 0.7,\n }}\n >\n <div className={styles.taskListText}>\n {remainingDuration != null ? remainingDuration : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n {actualDuration != null ? actualDuration : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n <div className={styles.taskListText}>\n {t.durationType ?? \"Activity Calendar\"}\n </div>\n </div>\n </React.Fragment>\n );\n })()}\n </div>\n </div>\n );\n })}\n </div>\n );\n};","import React, { useRef, useEffect, useState } from \"react\";\nimport { Task } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport styles from \"./tooltip.module.css\";\n\nexport type TooltipProps = {\n task: BarTask;\n type: string;\n arrowIndent: number;\n rtl: boolean;\n svgContainerHeight: number;\n svgContainerWidth: number;\n svgWidth: number;\n headerHeight: number;\n taskListWidth: number;\n scrollX: number;\n scrollY: number;\n rowHeight: number;\n fontSize: string;\n fontFamily: string;\n TooltipContent: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n type: string;\n }>;\n};\nexport const Tooltip: React.FC<TooltipProps> = ({\n task,\n type,\n rowHeight,\n rtl,\n svgContainerHeight,\n svgContainerWidth,\n scrollX,\n scrollY,\n arrowIndent,\n fontSize,\n fontFamily,\n headerHeight,\n taskListWidth,\n TooltipContent,\n}) => {\n const tooltipRef = useRef<HTMLDivElement | null>(null);\n const [relatedY, setRelatedY] = useState(0);\n const [relatedX, setRelatedX] = useState(0);\n useEffect(() => {\n if (tooltipRef.current) {\n const tooltipHeight = tooltipRef.current.offsetHeight * 1.1;\n const tooltipWidth = tooltipRef.current.offsetWidth * 1.1;\n\n let newRelatedY = task.index * rowHeight - scrollY + headerHeight;\n let newRelatedX: number;\n if (rtl) {\n newRelatedX = task.x1 - arrowIndent * 1.5 - tooltipWidth - scrollX;\n if (newRelatedX < 0) {\n newRelatedX = task.x2 + arrowIndent * 1.5 - scrollX;\n }\n const tooltipLeftmostPoint = tooltipWidth + newRelatedX;\n if (tooltipLeftmostPoint > svgContainerWidth) {\n newRelatedX = svgContainerWidth - tooltipWidth;\n newRelatedY += rowHeight;\n }\n } else {\n newRelatedX =\n type == \"planned\"\n ? task.x2 + arrowIndent * 1.5 + taskListWidth - scrollX\n : task.actualx2 + arrowIndent * 1.5 + taskListWidth - scrollX;\n const tooltipLeftmostPoint = tooltipWidth + newRelatedX;\n const fullChartWidth = taskListWidth + svgContainerWidth;\n if (tooltipLeftmostPoint > fullChartWidth) {\n newRelatedX =\n type == \"planned\"\n ? task.x1 +\n taskListWidth -\n arrowIndent * 1.5 -\n scrollX -\n tooltipWidth\n : task.actualx1 +\n taskListWidth -\n arrowIndent * 1.5 -\n scrollX -\n tooltipWidth;\n }\n if (newRelatedX < taskListWidth) {\n newRelatedX = svgContainerWidth + taskListWidth - tooltipWidth;\n newRelatedY += rowHeight;\n }\n }\n\n const tooltipLowerPoint = tooltipHeight + newRelatedY - scrollY;\n if (tooltipLowerPoint > svgContainerHeight - scrollY) {\n newRelatedY = svgContainerHeight - tooltipHeight;\n }\n setRelatedY(newRelatedY);\n setRelatedX(newRelatedX);\n }\n }, [\n tooltipRef,\n task,\n arrowIndent,\n scrollX,\n scrollY,\n headerHeight,\n taskListWidth,\n rowHeight,\n svgContainerHeight,\n svgContainerWidth,\n rtl,\n ]);\n\n return (\n <div\n ref={tooltipRef}\n className={\n relatedX\n ? styles.tooltipDetailsContainer\n : styles.tooltipDetailsContainerHidden\n }\n style={{ left: relatedX, top: relatedY }}\n >\n <TooltipContent\n task={task}\n fontSize={fontSize}\n fontFamily={fontFamily}\n type={type}\n />\n </div>\n );\n};\n\nexport const StandardTooltipContent: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n type: string;\n}> = ({ task, fontSize, fontFamily, type }) => {\n const style = {\n fontSize,\n fontFamily,\n };\n if (type == \"planned\")\n return (\n <div className={styles.tooltipDefaultContainer} style={style}>\n <b\n style={{ fontSize: fontSize + 6 }}\n >{`${task.name}: Planned dates: `}</b>\n <b>{`${\n task.start.getMonth() + 1\n }/${task.start.getDate()}/${task.start.getFullYear()} - ${\n task.end.getMonth() + 1\n }/${task.end.getDate()}/${task.end.getFullYear()}`}</b>\n {task.end.getTime() - task.start.getTime() !== 0 && (\n <p\n className={styles.tooltipDefaultContainerParagraph}\n >{`Duration: ${~~(\n Math.round((task.end.getTime() - task.start.getTime()) /\n (1000 * 60 * 60 * 24))\n )} day(s)`}</p>\n )}\n\n <p className={styles.tooltipDefaultContainerParagraph}>\n {!!task.progress && `Progress: ${task.progress} %`}\n </p>\n </div>\n );\n else\n return (\n <div className={styles.tooltipDefaultContainer} style={style}>\n <b\n style={{ fontSize: fontSize + 6 }}\n >{`${task.name}: Actual dates: `}</b>\n <b>{`${\n task.actualStart.getMonth() + 1\n }/${task.actualStart.getDate()}/${task.actualStart.getFullYear()} - ${\n task.actualEnd.getMonth() + 1\n }/${task.actualEnd.getDate()}/${task.actualEnd.getFullYear()}`}</b>\n {task.actualEnd.getTime() - task.actualStart.getTime() !== 0 && (\n <p\n className={styles.tooltipDefaultContainerParagraph}\n >{`Duration: ${~~(\n Math.round((task.actualEnd.getTime() - task.actualStart.getTime()) /\n (1000 * 60 * 60 * 24))\n )} day(s)`}</p>\n )}\n\n <p className={styles.tooltipDefaultContainerParagraph}>\n {!!task.progress && `Progress: ${task.progress} %`}\n </p>\n </div>\n );\n};\n","import React, { SyntheticEvent, useRef, useEffect } from \"react\";\nimport styles from \"./vertical-scroll.module.css\";\n\nexport const VerticalScroll: React.FC<{\n scroll: number;\n ganttHeight: number;\n ganttFullHeight: number;\n headerHeight: number;\n rtl: boolean;\n onScroll: (event: SyntheticEvent<HTMLDivElement>) => void;\n}> = ({\n scroll,\n ganttHeight,\n ganttFullHeight,\n headerHeight,\n rtl,\n onScroll,\n}) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scroll;\n }\n }, [scroll]);\n\n return (\n <div\n style={{\n height: ganttHeight,\n marginTop: headerHeight,\n marginLeft: rtl ? \"\" : \"-1rem\",\n marginRight: \"1rem\",\n }}\n className={styles.scroll}\n onScroll={onScroll}\n ref={scrollRef}\n >\n <div style={{ height: ganttFullHeight, width: 1 }} />\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useVirtualizer, VirtualItem } from \"@tanstack/react-virtual\";\nimport { EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\nimport styles from \"./task-list.module.css\";\n\nexport type TaskListProps = {\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n rowHeight: number;\n ganttHeight: number;\n scrollY: number;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n taskListRef: React.RefObject<HTMLDivElement>;\n horizontalContainerClass?: string;\n selectedTask: BarTask | undefined;\n setSelectedTask: (task: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n TaskListHeader: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n }>;\n TaskListTable: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n virtualItems?: VirtualItem[];\n }>;\n containerWidth?: number;\n innerScrollRef?: React.RefObject<HTMLDivElement>;\n} & EventOption;\n\nexport const TaskList: React.FC<TaskListProps> = ({\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n rowHeight,\n scrollY,\n tasks,\n scheduleType,\n leafTasks,\n selectedTask,\n setSelectedTask,\n onExpanderClick,\n locale,\n ganttHeight,\n taskListRef,\n horizontalContainerClass,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n containerWidth,\n innerScrollRef,\n}) => {\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const [selectedTasks, setSelectedTasks] = useState<string[]>([]);\n const [pendingTaskSelect, setPendingTaskSelect] = useState<{ taskId: string; selected: boolean }[]>([]);\n const prevSelectedTasksRef = useRef<string[]>([]);\n const expandedTasks = useRef<string[]>([]);\n\n const virtualizer = useVirtualizer({\n count: tasks.length,\n getScrollElement: () => horizontalContainerRef.current,\n estimateSize: () => rowHeight,\n overscan: 10\n });\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (\n onMultiSelect &&\n JSON.stringify(prevSelectedTasksRef.current) !==\n JSON.stringify(selectedTasks)\n ) {\n const selectedTaskObjects = tasks.filter(task =>\n selectedTasks.includes(task.id)\n );\n prevSelectedTasksRef.current = [...selectedTasks];\n onMultiSelect(selectedTaskObjects);\n }\n }, [selectedTasks, tasks, onMultiSelect]);\n\n\n\n // process pending task selections\n useEffect(() => {\n if (pendingTaskSelect.length === 0) return;\n\n const newSelected = new Set(selectedTasks);\n pendingTaskSelect.forEach(({ taskId, selected }) => {\n if (selected) {\n // Expand the task and its children first\n recursiveOpen(taskId, tasks);\n // Collect descendants after expansion\n const descendants = getDescendants(taskId, tasks);\n newSelected.add(taskId);\n descendants.forEach(d => newSelected.add(d));\n } else {\n const descendants = getDescendants(taskId, tasks);\n newSelected.delete(taskId);\n descendants.forEach(d => newSelected.delete(d));\n }\n });\n\n setSelectedTasks(Array.from(newSelected));\n setPendingTaskSelect([]);\n }, [pendingTaskSelect]);\n\n // Handle tasks prop changes to update descendants of selected tasks\n useEffect(() => {\n expandedTasks.current = expandedTasks.current.filter(id => {\n const t = tasks.find(task => task.id === id);\n return t && !t.hideChildren;\n });\n if (selectedTasks.length === 0) return;\n\n const newSelected = new Set<string>();\n selectedTasks.forEach(taskId => {\n // Only include tasks that still exist\n if (tasks.find(t => t.id === taskId)) {\n recursiveOpen(taskId, tasks); // Ensure task is expanded\n newSelected.add(taskId);\n const descendants = getDescendants(taskId, tasks);\n descendants.forEach(d => newSelected.add(d));\n }\n });\n\n const newSelectedArray = Array.from(newSelected);\n if (JSON.stringify(newSelectedArray) !== JSON.stringify(selectedTasks)) {\n setSelectedTasks(newSelectedArray);\n }\n }, [tasks.length]);\n\n // Finds all descendant task IDs recursively using WBS hierarchy\n const getDescendants = (taskId: string, allTasks: Task[]): string[] => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return [];\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n return children.flatMap(child => [child.id, ...getDescendants(child.id, allTasks)]);\n };\n\n const recursiveOpen = (taskId: string, allTasks: Task[]) => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return;\n if (!expandedTasks.current.includes(taskId) && task.hideChildren) {\n onExpanderClick(task);\n expandedTasks.current = [...expandedTasks.current, taskId];\n }\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n children.forEach(c => recursiveOpen(c.id, allTasks));\n };\n\n const handleTaskSelect = (taskId: string, selected: boolean) => {\n setPendingTaskSelect(prev => [...prev, { taskId, selected }]);\n };\n\n const handleSelectAll = (selected: boolean) => {\n if (selected) {\n const topLevelTasks = tasks.filter(task => !getParentWbs(task.id));\n setPendingTaskSelect(topLevelTasks.map(task => ({ taskId: task.id, selected: true })));\n } else {\n setSelectedTasks([]);\n setPendingTaskSelect([]);\n }\n };\n\n const headerProps = {\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n scheduleType,\n allSelected: tasks.length > 0 && selectedTasks.length === tasks.length,\n onSelectAll: onMultiSelect ? handleSelectAll : undefined,\n };\n const selectedTaskId = selectedTask ? selectedTask.id : \"\";\n\n const tableProps = {\n rowHeight,\n rowWidth,\n fontFamily,\n fontSize,\n tasks,\n leafTasks,\n scheduleType,\n locale,\n selectedTaskId: selectedTaskId,\n setSelectedTask,\n onExpanderClick,\n selectedTasks: onMultiSelect ? selectedTasks : undefined,\n onTaskSelect: onMultiSelect ? handleTaskSelect : undefined,\n taskLabelRenderer,\n virtualItems: virtualizer.getVirtualItems(),\n };\n\n return (\n <div\n ref={taskListRef}\n style={containerWidth != null ? { width: containerWidth, overflow: \"hidden\", flexShrink: 0 } : {}}\n >\n <div\n ref={innerScrollRef}\n className={styles.hideScrollbar}\n style={{ overflowX: \"auto\" }}\n >\n <TaskListHeader {...headerProps} />\n <div\n ref={horizontalContainerRef}\n className={horizontalContainerClass}\n style={ganttHeight ? { height: ganttHeight } : {}}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n <TaskListTable {...tableProps} />\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport { Task } from \"../../types/public-types\";\nimport { addToDate } from \"../../helpers/date-helper\";\nimport styles from \"./grid.module.css\";\n\nexport type GridBodyProps = {\n tasks: Task[];\n scheduleType: string;\n dates: Date[];\n svgWidth: number;\n rowHeight: number;\n columnWidth: number;\n todayColor: string;\n weekendColor: string;\n rtl: boolean;\n virtualItems?: VirtualItem[];\n visibleStartY: number;\n visibleEndY: number;\n};\n\nexport const GridBody: React.FC<GridBodyProps> = ({\n tasks,\n scheduleType,\n dates,\n rowHeight,\n svgWidth,\n columnWidth,\n todayColor,\n weekendColor,\n rtl,\n virtualItems = [],\n visibleStartY,\n visibleEndY,\n}) => {\n const visibleHeight = visibleEndY - visibleStartY;\n const now = new Date();\n\n // === Virtual row calculation ===\n const items =\n virtualItems.length > 0\n ? virtualItems\n : tasks.map((_, i) => ({\n index: i,\n start: i * rowHeight,\n end: (i + 1) * rowHeight,\n size: rowHeight,\n key: i,\n }));\n\n // === Helpers ===\n const isWeekend = (date: Date) => {\n const d = date.getDay();\n return d === 0 || d === 6;\n };\n\n const isTodayColumn = (i: number) => {\n const date = dates[i];\n const next = dates[i + 1];\n\n // Normal case\n if (next && date <= now && next > now) return true;\n\n // Last column edge case\n if (!next && date <= now) {\n const step = date.getTime() - dates[i - 1].getTime();\n const end = addToDate(date, step, \"millisecond\");\n return end > now;\n }\n\n return false;\n };\n\n // === Today & Weekend Rects (only visible area) ===\n const todayRects: React.ReactNode[] = [];\n const weekendRects: React.ReactNode[] = [];\n\n for (let i = 0, x = 0; i < dates.length; i++, x += columnWidth) {\n if (isTodayColumn(i)) {\n todayRects.push(\n <rect\n key={`today-${i}`}\n x={rtl ? x + columnWidth : x}\n y={visibleStartY}\n width={columnWidth}\n height={visibleHeight}\n fill={todayColor}\n />\n );\n }\n\n if (isWeekend(dates[i])) {\n weekendRects.push(\n <rect\n key={`weekend-${i}`}\n x={x}\n y={visibleStartY}\n width={columnWidth}\n height={visibleHeight}\n fill={weekendColor}\n />\n );\n }\n }\n\n // === Vertical Tick Lines ===\n const tickLines = dates.map((_, i) => (\n <line\n key={`tick-${i}`}\n x1={i * columnWidth}\n y1={visibleStartY}\n x2={i * columnWidth}\n y2={visibleEndY}\n className={styles.gridTick}\n />\n ));\n\n // === Horizontal Rows & Lines ===\n const rowBackgrounds: React.ReactNode[] = [];\n const rowLines: React.ReactNode[] = [];\n\n // Top border\n rowLines.push(\n <line\n key=\"top-line\"\n x1={0}\n y1={visibleStartY}\n x2={svgWidth}\n y2={visibleStartY}\n className={styles.gridRowLine}\n />\n );\n\n for (const vi of items) {\n const task = tasks[vi.index];\n if (!task) break;\n\n const y = vi.start;\n const isMilestone = task.type === \"milestone\";\n\n const rowClass = isMilestone\n ? styles.darkerGridRow\n : scheduleType === \"lookAhead\"\n ? styles.gridRowLookAhead\n : styles.gridRow;\n\n rowBackgrounds.push(\n <rect\n key={`bg-${vi.key}`}\n x={0}\n y={y}\n width={svgWidth}\n height={rowHeight}\n className={rowClass}\n />\n );\n\n rowLines.push(\n <line\n key={`line-${vi.key}`}\n x1={0}\n y1={y + rowHeight}\n x2={svgWidth}\n y2={y + rowHeight}\n className={styles.gridRowLine}\n />\n );\n }\n\n return (\n <g className=\"gridBody\">\n <g className=\"rows\">{rowBackgrounds}</g>\n <g className=\"rowLines\">{rowLines}</g>\n <g className=\"ticks\">{tickLines}</g>\n\n {scheduleType === \"lookAhead\" && (\n <g className=\"weekend\">{weekendRects}</g>\n )}\n\n <g className=\"today\">{todayRects}</g>\n </g>\n );\n};\n","import React from \"react\";\nimport { GridBody, GridBodyProps } from \"./grid-body\";\n\nexport type GridProps = GridBodyProps;\nexport const Grid: React.FC<GridProps> = props => {\n return (\n <g className=\"grid\" >\n <GridBody {...props} />\n </g>\n );\n};\n","import React from \"react\";\nimport styles from \"./calendar.module.css\";\n\ntype TopPartOfCalendarProps = {\n value: string;\n x1Line: number;\n y1Line: number;\n y2Line: number;\n xText: number;\n yText: number;\n textAnchor?: \"start\" | \"middle\" | \"end\";\n};\n\nexport const TopPartOfCalendar: React.FC<TopPartOfCalendarProps> = ({\n value,\n x1Line,\n y1Line,\n y2Line,\n xText,\n yText,\n textAnchor = \"middle\",\n}) => {\n const textAnchorClass =\n textAnchor === \"start\"\n ? styles.textAnchorStart\n : textAnchor === \"middle\"\n ? styles.textAnchorMiddle\n : styles.textAnchorEnd;\n return (\n <g className=\"calendarTop\">\n <line\n x1={x1Line}\n y1={y1Line}\n x2={x1Line}\n y2={y2Line}\n className={styles.calendarTopTick}\n key={value + \"line\"}\n />\n <text\n key={value + \"text\"}\n y={yText}\n x={xText}\n className={`${styles.calendarTopText} ${textAnchorClass}`}\n >\n {value}\n </text>\n </g>\n );\n};\n","import React, { ReactChild } from \"react\";\nimport { ViewMode } from \"../../types/public-types\";\nimport { TopPartOfCalendar } from \"./top-part-of-calendar\";\nimport {\n getCachedDateTimeFormat,\n getLocalDayOfWeek,\n getLocaleMonth,\n getWeekNumberISO8601,\n} from \"../../helpers/date-helper\";\nimport { DateSetup } from \"../../types/date-setup\";\nimport styles from \"./calendar.module.css\";\n\nexport type CalendarProps = {\n dateSetup: DateSetup;\n locale: string;\n viewMode: ViewMode;\n rtl: boolean;\n headerHeight: number;\n columnWidth: number;\n fontFamily: string;\n fontSize: string;\n};\n\nexport const Calendar: React.FC<CalendarProps> = ({\n dateSetup,\n locale,\n viewMode,\n rtl,\n headerHeight,\n columnWidth,\n fontFamily,\n fontSize,\n}) => {\n const getCalendarValuesForYear = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const bottomValue = date.getFullYear();\n bottomValues.push(\n <text\n key={date.getFullYear()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={styles.calendarBottomText}\n >\n {bottomValue}\n </text>\n );\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (6 + i + date.getFullYear() + 1) * columnWidth;\n } else {\n xText = (6 + i - date.getFullYear()) * columnWidth;\n }\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={headerHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForQuarter = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const quarter = Math.floor(date.getMonth() / 3) + 1;\n const bottomValue = `Q${quarter}`;\n bottomValues.push(\n <text\n key={`${bottomValue}-${date.getFullYear()}`}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={styles.calendarBottomText}\n >\n {bottomValue}\n </text>\n );\n\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (3 + i + quarter) * columnWidth;\n } else {\n xText = (3 + i - quarter) * columnWidth;\n }\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={headerHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n const getCalendarValuesForMonth = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n // const bottomValue = getLocaleMonth(date, locale);\n const bottomValue = date.toLocaleString(locale, { month: \"short\" });\n bottomValues.push(\n <text\n key={bottomValue + date.getFullYear()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorEnd}`}\n >\n {bottomValue}\n </text>\n );\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (6 + i + date.getMonth() + 1) * columnWidth;\n } else {\n xText = (6 + i - date.getMonth()) * columnWidth;\n }\n console.log(xText);\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n textAnchor=\"end\"\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForWeek = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n let weeksCount: number = 1;\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = dates.length - 1; i >= 0; i--) {\n const date = dates[i];\n let topValue = \"\";\n if (i === 0 || date.getMonth() !== dates[i - 1].getMonth()) {\n // top\n topValue = `${getLocaleMonth(date, locale)}, ${date.getFullYear()}`;\n }\n // bottom\n const bottomValue = `W${getWeekNumberISO8601(date)}`;\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={`${styles.calendarTopText} ${styles.textAnchorStart}`}\n >\n {bottomValue}\n </text>\n );\n\n if (topValue) {\n // if last day is new month\n if (i !== dates.length - 1) {\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i + weeksCount * columnWidth}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * i + columnWidth * weeksCount * 0.5}\n yText={topDefaultHeight * 0.9}\n textAnchor=\"start\"\n />\n );\n }\n weeksCount = 0;\n }\n weeksCount++;\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue =\n columnWidth > 55\n ? `${getLocalDayOfWeek(date, locale, \"short\")}, ${date\n .getDate()\n .toString()}`\n : `${getLocalDayOfWeek(date, locale, \"narrow\")},${date\n .getDate()\n .toString()}`;\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n >\n {bottomValue}\n </text>\n );\n if (\n i + 1 !== dates.length &&\n date.getMonth() !== dates[i + 1].getMonth()\n ) {\n const topValue = `${getLocaleMonth(\n date,\n locale\n )} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * (i + 1)}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={\n topValues.length === 0\n ? columnWidth * (i + 1) * 0.5\n : columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5\n }\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n if (i + 1 === dates.length) {\n const topValue = `${getLocaleMonth(\n date,\n locale\n )} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * (i + 1)}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForPartOfDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const ticks = viewMode === ViewMode.HalfDay ? 2 : 4;\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue = getCachedDateTimeFormat(locale, {\n hour: \"numeric\",\n }).format(date);\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n fontFamily={fontFamily}\n >\n {bottomValue}\n </text>\n );\n if (i === 0 || date.getDate() !== dates[i - 1].getDate()) {\n const topValue = `${getLocalDayOfWeek(\n date,\n locale,\n \"short\"\n )}, ${date.getDate()} ${getLocaleMonth(date, locale)}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * i + ticks * columnWidth}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * i + ticks * columnWidth * 0.5}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForHour = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue = getCachedDateTimeFormat(locale, {\n hour: \"numeric\",\n }).format(date);\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={styles.calendarBottomText}\n fontFamily={fontFamily}\n >\n {bottomValue}\n </text>\n );\n if (i !== 0 && date.getDate() !== dates[i - 1].getDate()) {\n const displayDate = dates[i - 1];\n const topValue = `${getLocalDayOfWeek(\n displayDate,\n locale,\n \"long\"\n )}, ${displayDate.getDate()} ${getLocaleMonth(displayDate, locale)}`;\n const topPosition = (date.getHours() - 24) / 2;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + displayDate.getFullYear()}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * (i + topPosition)}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n\n let topValues: ReactChild[] = [];\n let bottomValues: ReactChild[] = [];\n switch (dateSetup.viewMode) {\n case ViewMode.Year:\n [topValues, bottomValues] = getCalendarValuesForYear();\n break;\n case ViewMode.Quarter:\n [topValues, bottomValues] = getCalendarValuesForQuarter();\n break;\n case ViewMode.Month:\n [topValues, bottomValues] = getCalendarValuesForMonth();\n break;\n case ViewMode.Week:\n [topValues, bottomValues] = getCalendarValuesForWeek();\n break;\n case ViewMode.Day:\n [topValues, bottomValues] = getCalendarValuesForDay();\n break;\n case ViewMode.QuarterDay:\n case ViewMode.HalfDay:\n [topValues, bottomValues] = getCalendarValuesForPartOfDay();\n break;\n case ViewMode.Hour:\n [topValues, bottomValues] = getCalendarValuesForHour();\n }\n return (\n <g\n className=\"calendar\"\n fontSize={fontSize}\n fontFamily={fontFamily}\n width={columnWidth * dateSetup.dates.length}\n >\n <rect\n x={0}\n y={0}\n width={columnWidth * dateSetup.dates.length}\n height={headerHeight}\n className={styles.calendarHeader}\n />\n {bottomValues} {topValues}\n </g>\n );\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import React from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Dependency } from \"../../types/public-types\";\n\ntype ArrowProps = {\n taskFrom: BarTask;\n taskTo: BarTask;\n rowHeight: number;\n taskHeight: number;\n arrowIndent: number;\n arrowColor: string;\n dependencyType: Dependency;\n};\n\nexport const Arrow: React.FC<ArrowProps> = ({\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n arrowColor,\n dependencyType,\n}) => {\n let [path, trianglePoints] = drawPathAndTriangle(\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n dependencyType\n );\n\n return (\n <g className=\"arrow\">\n <path strokeWidth=\"1.5\" d={path} fill=\"none\" stroke={arrowColor} />\n <polygon points={trianglePoints} fill={arrowColor} />\n </g>\n );\n};\n\nconst drawPathAndTriangle = (\n taskFrom: BarTask,\n taskTo: BarTask,\n rowHeight: number,\n taskHeight: number,\n arrowIndent: number,\n dependencyType: Dependency\n) => {\n const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\n const taskToEndY = taskTo.y + taskHeight / 2;\n const verticalOffset = indexCompare * (rowHeight / 2);\n\n // 1️⃣ Pick start/end x-points based on dependency type\n const minX = (t: BarTask) => {\n if (t.x1 && t.actualx1) {\n return Math.min(t.x1, t.actualx1);\n } else if (t.x1) {\n return t.x1;\n } else if (t.actualx1) {\n return t.actualx1;\n } else {\n return 0;\n }\n };\n const maxX = (t: BarTask) => Math.max(t.x2 || 0, t.actualx2 || 0);\n\n let fromPoint: number, toPoint: number;\n switch (dependencyType) {\n case \"SS\":\n fromPoint = minX(taskFrom);\n toPoint = minX(taskTo);\n break;\n case \"SF\":\n fromPoint = minX(taskFrom);\n toPoint = maxX(taskTo);\n break;\n case \"FS\":\n fromPoint = maxX(taskFrom);\n toPoint = minX(taskTo);\n break;\n case \"FF\":\n fromPoint = maxX(taskFrom);\n toPoint = maxX(taskTo);\n break;\n }\n\n // 2️⃣ Helper for arrowhead points\n const arrowPoints = (x: number, y: number, right = true) =>\n right\n ? `${x},${y} ${x - 5},${y - 5} ${x - 5},${y + 5}` // Right\n : `${x},${y} ${x + 5},${y - 5} ${x + 5},${y + 5}`; // Left\n\n let path: string;\n let trianglePoints: string;\n\n // 3️⃣ Routing based on type\n switch (dependencyType) {\n case \"SS\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${\n fromPoint + Math.min(toPoint - fromPoint, 0) - 2 * arrowIndent\n }\n V ${taskToEndY}\n H ${toPoint - 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, true);\n break;\n\n case \"SF\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${fromPoint - 2 * arrowIndent}\n V ${taskFrom.y + taskHeight / 2 + verticalOffset}\n ${\n fromPoint - toPoint > 4 * arrowIndent\n ? \"\"\n : `H ${toPoint + 2 * arrowIndent}`\n }\n V ${taskToEndY}\n H ${toPoint + 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, false);\n break;\n\n case \"FS\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${fromPoint + 2 * arrowIndent}\n V ${taskFrom.y + taskHeight / 2 + verticalOffset}\n ${\n toPoint - fromPoint > 4 * arrowIndent\n ? \"\"\n : `H ${toPoint - 2 * arrowIndent}`\n }\n V ${taskToEndY}\n H ${toPoint - 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, true);\n break;\n\n case \"FF\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${\n fromPoint + Math.max(toPoint - fromPoint, 0) + 2 * arrowIndent\n }\n V ${taskToEndY}\n H ${toPoint + 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, false);\n break;\n }\n\n return [path, trianglePoints];\n};\n","import { Task } from \"../types/public-types\";\nimport { BarTask, TaskTypeInternal } from \"../types/bar-task\";\nimport { BarMoveAction } from \"../types/gantt-task-actions\";\n\nexport const convertToBarTasks = (\n tasks: Task[],\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string,\n projectProgressColor: string,\n projectProgressSelectedColor: string,\n projectBackgroundColor: string,\n projectBackgroundSelectedColor: string,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n) => {\n let barTasks = tasks.map((t, i) => {\n return convertToBarTask(\n t,\n i,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n );\n });\n\n // set dependencies\n barTasks = barTasks.map(task => {\n const dependencies = task.dependencies || [];\n for (let j = 0; j < dependencies.length; j++) {\n const dependence = barTasks.findIndex(\n value => value.id === dependencies[j].id\n );\n if (\n dependence !== -1 &&\n task.start.getTime() > 0 &&\n task.end.getTime() > 0\n ) {\n const barchild = { ...task, dependencyType: dependencies[j].type };\n barTasks[dependence].barChildren.push(barchild);\n }\n }\n return task;\n });\n\n return barTasks;\n};\n\nconst convertToBarTask = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string,\n projectProgressColor: string,\n projectProgressSelectedColor: string,\n projectBackgroundColor: string,\n projectBackgroundSelectedColor: string,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n): BarTask => {\n let barTask: BarTask;\n switch (task.type) {\n case \"milestone\":\n barTask = convertToMilestone(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n );\n break;\n case \"project\":\n barTask = convertToBar(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor\n );\n break;\n default:\n barTask = convertToBar(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor\n );\n break;\n }\n return barTask;\n};\n\nconst convertToBar = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string\n): BarTask => {\n let x1: number;\n let x2: number;\n let actualx1: number;\n let actualx2: number;\n let progressStartWidth: number;\n let progressEndWidth: number;\n if (rtl) {\n //not used\n x2 = task.start ? taskXCoordinateRTL(task.start, dates, columnWidth) : -1;\n x1 = task.end ? taskXCoordinateRTL(task.end, dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinateRTL(task.actualStart, dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinateRTL(task.actualEnd, dates, columnWidth)\n : -1;\n } else {\n x1 = task.start ? taskXCoordinate(task.start, dates, columnWidth) : -1;\n x2 = task.end ? taskXCoordinate(task.end, dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinate(task.actualStart, dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinate(task.actualEnd, dates, columnWidth)\n : -1;\n }\n\n progressStartWidth = actualx1 && x1 ? Math.abs(actualx1 - x1) : -1;\n progressEndWidth = actualx2 && x2 ? Math.abs(actualx2 - x2) : -1;\n\n let typeInternal: TaskTypeInternal = task.type;\n // if (x1 && x2) {\n // if (typeInternal === \"task\" && x2 - x1 < handleWidth * 2) {\n // typeInternal = \"smalltask\";\n // x2 = x1 + handleWidth * 2;\n // }\n // }\n const [progressWidth, progressX] = progressWithByParams(\n actualx1,\n actualx2,\n task.progress,\n rtl\n );\n\n const y = taskYCoordinate(index, rowHeight, taskHeight);\n //const hideChildren = task.type === \"project\" ? task.hideChildren : undefined;\n const hideChildren = task.hideChildren || false; //allows tasks to have chldren. benjamin\n\n const styles = {\n backgroundColor: barBackgroundColor,\n backgroundSelectedColor: barBackgroundSelectedColor,\n progressColor: barProgressColor,\n progressSelectedColor: barProgressSelectedColor,\n ...task.styles,\n };\n return {\n ...task,\n typeInternal,\n x1,\n x2,\n actualx1,\n actualx2,\n progressStartWidth,\n progressEndWidth,\n y,\n index,\n progressX,\n progressWidth,\n barCornerRadius,\n handleWidth,\n hideChildren,\n height: taskHeight,\n barChildren: [],\n styles,\n };\n};\n\nconst convertToMilestone = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n): BarTask => {\n const x =\n task.start && task.end\n ? taskXCoordinate(task.end, dates, columnWidth)\n : 0;\n const y = taskYCoordinate(index, rowHeight, taskHeight);\n\n const x1 = task.start && task.end ? x - taskHeight * 0.5 : 0;\n const x2 = task.start && task.end ? x + taskHeight * 0.5 : 0;\n\n const rotatedHeight = taskHeight / 1.414;\n const styles = {\n backgroundColor: milestoneBackgroundColor,\n backgroundSelectedColor: milestoneBackgroundSelectedColor,\n progressColor: \"\",\n progressSelectedColor: \"\",\n ...task.styles,\n };\n return {\n ...task,\n x1,\n x2,\n actualx1: x1,\n actualx2: x2,\n progressStartWidth: 0,\n progressEndWidth: 0,\n y,\n index,\n progressX: 0,\n progressWidth: 0,\n barCornerRadius,\n handleWidth,\n typeInternal: task.type,\n progress: 0,\n height: rotatedHeight,\n hideChildren: undefined,\n barChildren: [],\n styles,\n };\n};\n\nconst taskXCoordinate = (xDate: Date, dates: Date[], columnWidth: number) => {\n const index = dates.findIndex(d => d.getTime() >= xDate.getTime()) - 1;\n if (index < 0) {\n if (dates[dates.length - 1].getTime() <= xDate.getTime()) {\n return dates.length * columnWidth;\n } else {\n return 0;\n }\n }\n const remainderMillis = xDate.getTime() - dates[index].getTime();\n const percentOfInterval =\n remainderMillis / (dates[index + 1].getTime() - dates[index].getTime());\n const x = index * columnWidth + percentOfInterval * columnWidth;\n return x;\n};\nconst taskXCoordinateRTL = (\n xDate: Date,\n dates: Date[],\n columnWidth: number\n) => {\n let x = taskXCoordinate(xDate, dates, columnWidth);\n x += columnWidth;\n return x;\n};\nconst taskYCoordinate = (\n index: number,\n rowHeight: number,\n taskHeight: number\n) => {\n const y = index * rowHeight + (rowHeight - taskHeight) / 2;\n return y;\n};\n\nexport const progressWithByParams = (\n taskX1: number,\n taskX2: number,\n progress: number,\n rtl: boolean\n) => {\n const progressWidth =\n taskX2 > 0 && taskX1 > 0 ? (taskX2 - taskX1) * progress * 0.01 : 0;\n let progressX: number;\n if (rtl) {\n progressX = taskX2 > 0 ? taskX2 - progressWidth : 0;\n } else {\n progressX = taskX1 > 0 ? taskX1 : 0;\n }\n return [progressWidth, progressX];\n};\n\nexport const progressByProgressWidth = (\n progressWidth: number,\n barTask: BarTask\n) => {\n const barWidth = barTask.x2 - barTask.x1;\n const progressPercent = Math.round((progressWidth * 100) / barWidth);\n if (progressPercent >= 100) return 100;\n else if (progressPercent <= 0) return 0;\n else return progressPercent;\n};\n\n// const progressByX = (x: number, task: BarTask) => {\n// if (x >= task.x2) return 100;\n// else if (x <= task.x1) return 0;\n// else {\n// const barWidth = task.x2 - task.x1;\n// const progressPercent = Math.round(((x - task.x1) * 100) / barWidth);\n// return progressPercent;\n// }\n// };\n// const progressByXRTL = (x: number, task: BarTask) => {\n// if (x >= task.x2) return 0;\n// else if (x <= task.x1) return 100;\n// else {\n// const barWidth = task.x2 - task.x1;\n// const progressPercent = Math.round(((task.x2 - x) * 100) / barWidth);\n// return progressPercent;\n// }\n// };\n\nexport const getProgressPoint = (\n progressX: number,\n taskY: number,\n taskHeight: number\n) => {\n const point = [\n progressX - 5,\n taskY + taskHeight,\n progressX + 5,\n taskY + taskHeight,\n progressX,\n taskY + taskHeight - 8.66,\n ];\n return point.join(\",\");\n};\n\nconst startByX = (x: number, xStep: number, task: BarTask) => {\n if (x >= task.x2 - task.handleWidth * 2) {\n x = task.x2 - task.handleWidth * 2;\n }\n const steps = Math.round((x - task.x1) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.x1 + additionalXValue;\n return newX;\n};\n\nconst startByActualX = (x: number, xStep: number, task: BarTask) => {\n if (x >= task.actualx2 - task.handleWidth * 2) {\n x = task.actualx2 - task.handleWidth * 2;\n }\n const steps = Math.round((x - task.actualx1) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.actualx1 + additionalXValue;\n return newX;\n};\n\nconst endByX = (x: number, xStep: number, task: BarTask) => {\n if (x <= task.x1 + task.handleWidth * 2) {\n x = task.x1 + task.handleWidth * 2;\n }\n const steps = Math.round((x - task.x2) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.x2 + additionalXValue;\n return newX;\n};\n\nconst endByActualX = (x: number, xStep: number, task: BarTask) => {\n if (x <= task.actualx1 + task.handleWidth * 2) {\n x = task.actualx1 + task.handleWidth * 2;\n }\n const steps = Math.round((x - task.actualx2) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.actualx2 + additionalXValue;\n return newX;\n};\n\nconst moveByX = (x: number, xStep: number, task: BarTask) => {\n const steps = Math.round((x - task.x1) / xStep);\n const additionalXValue = steps * xStep;\n const newX1 = task.x1 + additionalXValue;\n const newX2 = newX1 + task.x2 - task.x1;\n return [newX1, newX2];\n};\n\nconst moveByActualX = (x: number, xStep: number, task: BarTask) => {\n const steps = Math.round((x - task.actualx1) / xStep);\n const additionalXValue = steps * xStep;\n const newX1 = task.actualx1 + additionalXValue;\n const newX2 = newX1 + task.actualx2 - task.actualx1;\n return [newX1, newX2];\n};\n\nconst dateByX = (\n x: number,\n taskX: number,\n taskDate: Date,\n xStep: number,\n timeStep: number\n) => {\n let newDate = new Date(((x - taskX) / xStep) * timeStep + taskDate.getTime());\n newDate = new Date(\n newDate.getTime() +\n (newDate.getTimezoneOffset() - taskDate.getTimezoneOffset()) * 60000\n );\n return newDate;\n};\n\n/**\n * Method handles event in real time(mousemove) and on finish(mouseup)\n */\nexport const handleTaskBySVGMouseEvent = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n type: string,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number,\n rtl: boolean\n): { isChanged: boolean; changedTask: BarTask } => {\n let result: { isChanged: boolean; changedTask: BarTask };\n switch (selectedTask.type) {\n case \"milestone\":\n result = handleTaskBySVGMouseEventForMilestone(\n svgX,\n action,\n selectedTask,\n xStep,\n timeStep,\n initEventX1Delta\n );\n break;\n default:\n result = handleTaskBySVGMouseEventForBar(\n svgX,\n action,\n selectedTask,\n type,\n xStep,\n timeStep,\n initEventX1Delta,\n rtl\n );\n break;\n }\n return result;\n};\n\nconst handleTaskBySVGMouseEventForBar = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n type: string,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number,\n rtl: boolean\n): { isChanged: boolean; changedTask: BarTask } => {\n const changedTask: BarTask = { ...selectedTask };\n let isChanged = false;\n switch (action) {\n // case \"progress\":\n // if (rtl) {\n // changedTask.progress = progressByXRTL(svgX, selectedTask);\n // } else {\n // changedTask.progress = progressByX(svgX, selectedTask);\n // }\n // isChanged = changedTask.progress !== selectedTask.progress;\n // if (isChanged) {\n // const [progressWidth, progressX] = progressWithByParams(\n // changedTask.x1,\n // changedTask.x2,\n // changedTask.progress,\n // rtl\n // );\n // changedTask.progressWidth = progressWidth;\n // changedTask.progressX = progressX;\n // }\n // break;\n case \"start\": {\n const newX1 =\n type == \"planned\"\n ? startByX(svgX, xStep, selectedTask)\n : startByActualX(svgX, xStep, selectedTask);\n if (type == \"planned\") changedTask.x1 = newX1;\n else if (type == \"actual\") changedTask.actualx1 = newX1;\n isChanged =\n changedTask.x1 !== selectedTask.x1 ||\n changedTask.actualx1 !== selectedTask.actualx1;\n if (isChanged) {\n if (rtl) {\n if (type == \"planned\")\n changedTask.end = dateByX(\n newX1,\n selectedTask.x1,\n selectedTask.end,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualEnd = dateByX(\n newX1,\n selectedTask.actualx1,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n } else {\n if (type == \"planned\")\n changedTask.start = dateByX(\n newX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualStart = dateByX(\n newX1,\n selectedTask.actualx1,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n }\n const [progressWidth, progressX] = progressWithByParams(\n changedTask.x1,\n changedTask.x2,\n changedTask.progress,\n rtl\n );\n changedTask.progressWidth = progressWidth;\n changedTask.progressX = progressX;\n }\n break;\n }\n case \"end\": {\n const newX2 =\n type == \"planned\"\n ? endByX(svgX, xStep, selectedTask)\n : endByActualX(svgX, xStep, selectedTask);\n if (type == \"planned\") changedTask.x2 = newX2;\n else if (type == \"actual\") changedTask.actualx2 = newX2;\n isChanged =\n changedTask.x2 !== selectedTask.x2 ||\n changedTask.actualx2 !== selectedTask.actualx2;\n if (isChanged) {\n if (rtl) {\n if (type == \"planned\")\n changedTask.start = dateByX(\n newX2,\n selectedTask.x2,\n selectedTask.start,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualStart = dateByX(\n newX2,\n selectedTask.actualx2,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n } else {\n if (type == \"planned\")\n changedTask.end = dateByX(\n newX2,\n selectedTask.x2,\n selectedTask.end,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualEnd = dateByX(\n newX2,\n selectedTask.actualx2,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n }\n const [progressWidth, progressX] = progressWithByParams(\n changedTask.x1,\n changedTask.x2,\n changedTask.progress,\n rtl\n );\n changedTask.progressWidth = progressWidth;\n changedTask.progressX = progressX;\n }\n break;\n }\n case \"move\": {\n const [newMoveX1, newMoveX2] =\n type == \"planned\"\n ? moveByX(svgX - initEventX1Delta, xStep, selectedTask)\n : moveByActualX(svgX - initEventX1Delta, xStep, selectedTask);\n if (type == \"planned\") isChanged = newMoveX1 !== selectedTask.x1;\n if (type == \"actual\") isChanged = newMoveX1 !== selectedTask.actualx1;\n if (isChanged) {\n if (type == \"planned\") {\n changedTask.start = dateByX(\n newMoveX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n changedTask.end = dateByX(\n newMoveX2,\n selectedTask.x2,\n selectedTask.end,\n xStep,\n timeStep\n );\n changedTask.x1 = newMoveX1;\n changedTask.x2 = newMoveX2;\n }\n if (type == \"actual\") {\n changedTask.actualStart = dateByX(\n newMoveX1,\n selectedTask.actualx1,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n changedTask.actualEnd = dateByX(\n newMoveX2,\n selectedTask.actualx2,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n changedTask.actualx1 = newMoveX1;\n changedTask.actualx2 = newMoveX2;\n }\n\n // const [progressWidth, progressX] = progressWithByParams(\n // changedTask.x1,\n // changedTask.x2,\n // changedTask.progress,\n // rtl\n // );\n // changedTask.progressWidth = progressWidth;\n // changedTask.progressX = progressX;\n }\n break;\n }\n }\n return { isChanged, changedTask };\n};\n\nconst handleTaskBySVGMouseEventForMilestone = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number\n): { isChanged: boolean; changedTask: BarTask } => {\n const changedTask: BarTask = { ...selectedTask };\n let isChanged = false;\n switch (action) {\n case \"move\": {\n const [newMoveX1, newMoveX2] = moveByX(\n svgX - initEventX1Delta,\n xStep,\n selectedTask\n );\n isChanged = newMoveX1 !== selectedTask.x1;\n if (isChanged) {\n changedTask.start = dateByX(\n newMoveX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n changedTask.end = changedTask.start;\n changedTask.x1 = newMoveX1;\n changedTask.x2 = newMoveX2;\n }\n break;\n }\n }\n return { isChanged, changedTask };\n};\n","import { BarTask } from \"../types/bar-task\";\nimport { Task } from \"../types/public-types\";\n\nexport function isKeyboardEvent(\n event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\n): event is React.KeyboardEvent {\n return (event as React.KeyboardEvent).key !== undefined;\n}\n\nexport function isMouseEvent(\n event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\n): event is React.MouseEvent {\n return (event as React.MouseEvent).clientX !== undefined;\n}\n\nexport function isBarTask(task: Task | BarTask): task is BarTask {\n return (task as BarTask).x1 !== undefined;\n}\n\nexport function removeHiddenTasks(tasks: Task[]) {\n const groupedTasks = tasks.filter(\n t => t.hideChildren && t.type === \"project\"\n );\n if (groupedTasks.length > 0) {\n for (let i = 0; groupedTasks.length > i; i++) {\n const groupedTask = groupedTasks[i];\n const children = getChildren(tasks, groupedTask);\n tasks = tasks.filter(t => children.indexOf(t) === -1);\n }\n }\n return tasks;\n}\n\nfunction getChildren(taskList: Task[], task: Task) {\n let tasks: Task[] = [];\n if (task.type !== \"project\") {\n tasks = taskList.filter(\n t =>\n t.dependencies &&\n t.dependencies.map(({ id }) => id).indexOf(task.id) !== -1\n );\n } else {\n tasks = taskList.filter(t => t.project && t.project === task.id);\n }\n var taskChildren: Task[] = [];\n tasks.forEach(t => {\n taskChildren.push(...getChildren(taskList, t));\n });\n tasks = tasks.concat(tasks, taskChildren);\n return tasks;\n}\n\nexport const sortTasks = (taskA: Task, taskB: Task) => {\n const orderA = taskA.displayOrder || Number.MAX_VALUE;\n const orderB = taskB.displayOrder || Number.MAX_VALUE;\n if (orderA > orderB) {\n return 1;\n } else if (orderA < orderB) {\n return -1;\n } else {\n return 0;\n }\n};\n","import React from \"react\";\n// import style from \"./bar.module.css\";\n\ntype BarDisplayProps = {\n x: number;\n y: number;\n type: string;\n // actualX1: number;\n // actualX2: number;\n startProgressWidth: number;\n endProgressWidth: number;\n width: number;\n height: number;\n isSelected: boolean;\n /* progress start point */\n progressX: number;\n progressWidth: number;\n barCornerRadius: number;\n criticalPathArrows?: Array<{taskId: string, arrowColor: string}>\n styles: {\n taskProgressColor?: string;\n backgroundColor: string;\n backgroundSelectedColor: string;\n progressColor: string;\n progressSelectedColor: string;\n criticalPathColor?: string;\n };\n onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\n};\nexport const BarDisplay: React.FC<BarDisplayProps> = ({\n x,\n y,\n type,\n // actualX1,\n // actualX2,\n // startProgressWidth,\n // endProgressWidth,\n width,\n height,\n isSelected,\n progressX,\n progressWidth,\n barCornerRadius,\n styles,\n onMouseDown,\n}) => {\n const getProcessColor = () => {\n return isSelected ? styles.progressSelectedColor : styles.progressColor;\n };\n\n const getBarColor = () => {\n return isSelected ? styles.backgroundSelectedColor : styles.backgroundColor;\n };\n\n if (type == \"planned\")\n return (\n <g onMouseDown={onMouseDown}>\n <rect\n x={x}\n width={width}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getBarColor()}\n strokeWidth={2}\n stroke={styles.criticalPathColor}\n />\n {/* <rect\n x={actualX1}\n width={actualX2 - actualX1}\n y={y + height / 2}\n height={height / 2}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n /> */}\n <rect\n x={progressX}\n width={progressWidth}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n </g>\n );\n else\n return (\n <g onMouseDown={onMouseDown}>\n <rect\n x={x}\n width={width}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n />\n <rect\n x={progressX}\n width={progressWidth}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport styles from \"./bar.module.css\";\n\ntype BarDateHandleProps = {\n x: number;\n y: number;\n width: number;\n height: number;\n barCornerRadius: number;\n onMouseDown: (event: React.MouseEvent<SVGRectElement, MouseEvent>) => void;\n};\nexport const BarDateHandle: React.FC<BarDateHandleProps> = ({\n x,\n y,\n width,\n height,\n barCornerRadius,\n onMouseDown,\n}) => {\n return (\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n className={styles.barHandle}\n ry={barCornerRadius}\n rx={barCornerRadius}\n onMouseDown={onMouseDown}\n />\n );\n};\n","import React from \"react\";\n// import styles from \"./bar.module.css\";\n\ntype BarProgressHandleProps = {\n progressPoint: string;\n onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\n};\nexport const BarProgressHandle: React.FC<BarProgressHandleProps> = (\n {\n // progressPoint,\n // onMouseDown,\n }\n) => {\n return (\n <div />\n // <polygon\n // className={styles.barHandle}\n // points={progressPoint}\n // onMouseDown={onMouseDown}\n // />\n );\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarDateHandle } from \"./bar-date-handle\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const Bar: React.FC<TaskItemProps> = ({\n task,\n isProgressChangeable,\n isDateChangeable,\n rtl,\n type,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n +!rtl * task.progressWidth + task.progressX,\n task.y,\n task.height\n );\n const handleHeight = task.height / 2 - 1;\n if (type == \"planned\") {\n if (task?.x1 >= 0 && task?.x2 >= 0 && task.x2 - task.x1 >= 0)\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height / 2}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"planned\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left */}\n <BarDateHandle\n x={task.x1 + 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"start\", task, e, \"planned\");\n }}\n />\n {/* right */}\n <BarDateHandle\n x={task.x2 - task.handleWidth - 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"planned\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"planned\");\n }}\n />\n )}\n </g>\n </g>\n );\n else return <g className={styles.barWrapper} tabIndex={0}></g>;\n } else if (task?.actualx1 >= 0 && task?.actualx2 >= 0 && task.actualx2 - task.actualx1 >= 0) {\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.actualx1}\n y={task.y + task.height / 2}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.actualx2 - task.actualx1}\n height={task.height / 2}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"actual\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left */}\n <BarDateHandle\n x={task.actualx1 + 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"start\", task, e, \"actual\");\n }}\n />\n {/* right */}\n <BarDateHandle\n x={task.actualx2 - task.handleWidth - 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"actual\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"actual\");\n }}\n />\n )}\n </g>\n </g>\n );\n } else {\n return <g className={styles.barWrapper} tabIndex={0}></g>;\n }\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const BarSmall: React.FC<TaskItemProps> = ({\n task,\n type,\n isProgressChangeable,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n task.progressWidth + task.x1,\n task.y,\n task.height\n );\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e);\n }}\n />\n <g className=\"handleGroup\">\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e);\n }}\n />\n )}\n </g>\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./milestone.module.css\";\n\nexport const Milestone: React.FC<TaskItemProps> = ({\n task,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const transform = `rotate(45 ${task.x1 + task.height * 0.356} \n ${task.y + task.height * 0.85})`;\n const getBarColor = () => {\n return isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n };\n\n return (\n <g tabIndex={0} className={styles.milestoneWrapper}>\n <rect\n fill={getBarColor()}\n x={task.x1}\n width={task.height}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n transform={transform}\n className={styles.milestoneBackground}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e,\"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e);\n }}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./project.module.css\";\n\nexport const Project: React.FC<TaskItemProps> = ({ task, isSelected }) => {\n const barColor = isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n const processColor = isSelected\n ? task.styles.progressSelectedColor\n : task.styles.progressColor;\n const projectWith = task.x2 - task.x1;\n\n const projectLeftTriangle = [\n task.x1,\n task.y + task.height / 2 - 1,\n task.x1,\n task.y + task.height,\n task.x1 + 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n const projectRightTriangle = [\n task.x2,\n task.y + task.height / 2 - 1,\n task.x2,\n task.y + task.height,\n task.x2 - 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n\n return (\n <g tabIndex={0} className={styles.projectWrapper}>\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectBackground}\n />\n <rect\n x={task.progressX}\n width={task.progressWidth}\n y={task.y}\n height={task.height}\n ry={task.barCornerRadius}\n rx={task.barCornerRadius}\n fill={processColor}\n />\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height / 2}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectTop}\n />\n <polygon\n className={styles.projectTop}\n points={projectLeftTriangle}\n fill={barColor}\n />\n <polygon\n className={styles.projectTop}\n points={projectRightTriangle}\n fill={barColor}\n />\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { GanttContentMoveAction } from \"../../types/gantt-task-actions\";\nimport { Bar } from \"./bar/bar\";\nimport { BarSmall } from \"./bar/bar-small\";\nimport { Milestone } from \"./milestone/milestone\";\nimport { Project } from \"./project/project\";\n// import style from \"./task-list.module.css\";\n\nexport type TaskItemProps = {\n task: BarTask;\n arrowIndent: number;\n taskHeight: number;\n isProgressChangeable: boolean;\n isDateChangeable: boolean;\n isDelete: boolean;\n isSelected: boolean;\n rtl: boolean;\n type?: string;\n onEventStart: (\n action: GanttContentMoveAction,\n selectedTask: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => any;\n};\n\nexport const TaskItem: React.FC<TaskItemProps> = props => {\n const {\n task,\n // arrowIndent,\n isDelete,\n // taskHeight,\n isSelected,\n // rtl,\n onEventStart,\n } = {\n ...props,\n };\n // const textRef = useRef<SVGTextElement>(null);\n const [taskItem, setTaskItem] = useState<JSX.Element[]>([<div />]);\n // const [isTextInside, setIsTextInside] = useState(true);\n\n useEffect(() => {\n switch (task.typeInternal) {\n case \"milestone\":\n if (task.x1 >= 0 && task.actualx1 >= 0)\n setTaskItem([<Milestone {...props} />]);\n else setTaskItem([]);\n break;\n case \"project\":\n if (\n task?.x1 >= 0 &&\n task?.x2 >= 0 &&\n task.x2 > task.x1 &&\n task?.actualx1 >= 0 &&\n task?.actualx2 >= 0 &&\n task.actualx2 > task.actualx1\n )\n setTaskItem([<Project {...props} />]);\n else setTaskItem([]);\n break;\n case \"smalltask\":\n setTaskItem([<BarSmall {...props} />]);\n break;\n default:\n {\n let taskItem = [];\n if (task?.x1 >= 0 && task?.x2 >= 0) {\n taskItem.push(<Bar {...props} type={\"planned\"} />);\n }\n if (task?.actualx1 >= 0 && task?.actualx2 >= 0) {\n taskItem.push(<Bar {...props} type={\"actual\"} />);\n }\n setTaskItem(taskItem);\n }\n break;\n }\n }, [task, isSelected]);\n\n // useEffect(() => {\n // if (textRef.current) {\n // setIsTextInside(textRef.current.getBBox().width < task.x2 - task.x1);\n // }\n // }, [textRef, task]);\n\n // const getX = () => {\n // const width = task.x2 - task.x1;\n // const hasChild = task.barChildren.length > 0;\n // if (isTextInside) {\n // return task.x1 + width * 0.5;\n // }\n // if (rtl && textRef.current) {\n // return (\n // task.x1 -\n // textRef.current.getBBox().width -\n // arrowIndent * +hasChild -\n // arrowIndent * 0.2\n // );\n // } else {\n // return task.x1 + width + arrowIndent * +hasChild + arrowIndent * 0.2;\n // }\n // };\n\n return (\n <g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"planned\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"planned\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"planned\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"planned\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[0]}\n </g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"actual\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"actual\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"actual\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"actual\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"actual\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[1]}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport { Dependency, EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Arrow } from \"../other/arrow\";\nimport { handleTaskBySVGMouseEvent } from \"../../helpers/bar-helper\";\nimport { isKeyboardEvent } from \"../../helpers/other-helper\";\nimport { TaskItem } from \"../task-item/task-item\";\nimport {\n BarMoveAction,\n GanttContentMoveAction,\n GanttEvent,\n} from \"../../types/gantt-task-actions\";\nimport { Milestone } from \"../task-item/milestone/milestone\";\n\nexport type TaskGanttContentProps = {\n tasks: BarTask[];\n dates: Date[];\n ganttEvent: GanttEvent;\n selectedTask: BarTask | undefined;\n rowHeight: number;\n columnWidth: number;\n timeStep: number;\n svg?: React.RefObject<SVGSVGElement>;\n svgWidth: number;\n taskHeight: number;\n arrowColor: string;\n arrowIndent: number;\n fontSize: string;\n fontFamily: string;\n rtl: boolean;\n virtualItems?: VirtualItem[];\n visibleStartY: number;\n visibleEndY: number;\n setGanttEvent: (value: GanttEvent) => void;\n setFailedTask: (value: BarTask | null) => void;\n setSelectedTask: (taskId: string) => void;\n} & EventOption;\n\nexport const TaskGanttContent: React.FC<TaskGanttContentProps> = ({\n tasks,\n dates,\n ganttEvent,\n selectedTask,\n rowHeight,\n columnWidth,\n timeStep,\n svg,\n taskHeight,\n arrowIndent,\n fontFamily,\n fontSize,\n rtl,\n virtualItems = [],\n setGanttEvent,\n setFailedTask,\n setSelectedTask,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n visibleStartY,\n visibleEndY,\n}) => {\n const point = svg?.current?.createSVGPoint();\n const [xStep, setXStep] = useState(0);\n const [initEventX1Delta, setInitEventX1Delta] = useState(0);\n const [isMoving, setIsMoving] = useState(false);\n\n // create xStep\n useEffect(() => {\n const dateDelta =\n dates[1].getTime() -\n dates[0].getTime() -\n dates[1].getTimezoneOffset() * 60 * 1000 +\n dates[0].getTimezoneOffset() * 60 * 1000;\n const newXStep = (timeStep * columnWidth) / dateDelta;\n setXStep(newXStep);\n }, [columnWidth, dates, timeStep]);\n\n useEffect(() => {\n const handleMouseMove = async (event: MouseEvent) => {\n if (!ganttEvent.changedTask || !point || !svg?.current) return;\n event.preventDefault();\n\n point.x = event.clientX;\n const cursor = point.matrixTransform(\n svg?.current.getScreenCTM()?.inverse()\n );\n const { isChanged, changedTask } = handleTaskBySVGMouseEvent(\n cursor.x,\n ganttEvent.action as BarMoveAction,\n ganttEvent.changedTask,\n ganttEvent.type as string,\n xStep,\n timeStep,\n initEventX1Delta,\n rtl\n );\n if (isChanged) {\n setGanttEvent({ action: ganttEvent.action, changedTask });\n }\n };\n\n const handleMouseUp = async (event: MouseEvent) => {\n const { action, originalSelectedTask, changedTask, type } = ganttEvent;\n if (!changedTask || !point || !svg?.current || !originalSelectedTask)\n return;\n event.preventDefault();\n\n point.x = event.clientX;\n const cursor = point.matrixTransform(\n svg?.current.getScreenCTM()?.inverse()\n );\n const { changedTask: newChangedTask } = handleTaskBySVGMouseEvent(\n cursor.x,\n action as BarMoveAction,\n changedTask,\n type as string,\n xStep,\n timeStep,\n initEventX1Delta,\n rtl\n );\n\n const isNotLikeOriginal =\n originalSelectedTask.start !== newChangedTask.start ||\n originalSelectedTask.end !== newChangedTask.end ||\n originalSelectedTask.actualStart !== newChangedTask.actualStart ||\n originalSelectedTask.actualEnd !== newChangedTask.actualEnd ||\n originalSelectedTask.progress !== newChangedTask.progress;\n\n // remove listeners\n svg.current.removeEventListener(\"mousemove\", handleMouseMove);\n svg.current.removeEventListener(\"mouseup\", handleMouseUp);\n setGanttEvent({ action: \"\" });\n setIsMoving(false);\n\n // custom operation start\n let operationSuccess = true;\n if (\n (action === \"move\" || action === \"end\" || action === \"start\") &&\n onDateChange &&\n isNotLikeOriginal\n ) {\n try {\n const result = await onDateChange(\n newChangedTask,\n newChangedTask.barChildren\n );\n if (result !== undefined) {\n operationSuccess = result;\n }\n } catch (error) {\n operationSuccess = false;\n }\n } else if (onProgressChange && isNotLikeOriginal) {\n try {\n const result = await onProgressChange(\n newChangedTask,\n newChangedTask.barChildren\n );\n if (result !== undefined) {\n operationSuccess = result;\n }\n } catch (error) {\n operationSuccess = false;\n }\n }\n\n // If operation is failed - return old state\n if (!operationSuccess) {\n setFailedTask(originalSelectedTask);\n }\n };\n\n if (\n !isMoving &&\n (ganttEvent.action === \"move\" ||\n ganttEvent.action === \"end\" ||\n ganttEvent.action === \"start\" ||\n ganttEvent.action === \"progress\") &&\n svg?.current\n ) {\n svg.current.addEventListener(\"mousemove\", handleMouseMove);\n svg.current.addEventListener(\"mouseup\", handleMouseUp);\n setIsMoving(true);\n }\n }, [\n ganttEvent,\n xStep,\n initEventX1Delta,\n onProgressChange,\n timeStep,\n onDateChange,\n svg,\n isMoving,\n point,\n rtl,\n setFailedTask,\n setGanttEvent,\n ]);\n\n /**\n * Method is Start point of task change\n */\n const handleBarEventStart = async (\n action: GanttContentMoveAction,\n task: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => {\n if (!event) {\n if (action === \"select\") {\n setSelectedTask(task.id);\n }\n }\n // Keyboard events\n else if (isKeyboardEvent(event)) {\n if (action === \"delete\") {\n if (onDelete) {\n try {\n const result = await onDelete(task);\n if (result !== undefined && result) {\n setGanttEvent({ action, changedTask: task });\n }\n } catch (error) {\n console.error(\"Error on Delete. \" + error);\n }\n }\n }\n }\n // Mouse Events\n else if (action === \"mouseenter\") {\n if (!ganttEvent.action) {\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n }\n } else if (action === \"mouseleave\") {\n if (ganttEvent.action === \"mouseenter\") {\n setGanttEvent({ action: \"\" });\n }\n } else if (action === \"dblclick\") {\n !!onDoubleClick && onDoubleClick(task);\n } else if (action === \"click\") {\n !!onClick && onClick(task);\n }\n // Change task event start\n else if (action === \"move\") {\n if (!svg?.current || !point) return;\n point.x = event.clientX;\n const cursor = point.matrixTransform(\n svg.current.getScreenCTM()?.inverse()\n );\n if (type == \"planned\") setInitEventX1Delta(cursor.x - task.x1);\n else if (type == \"actual\") setInitEventX1Delta(cursor.x - task.actualx1);\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n } else {\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n }\n };\n\n const getArrows = (isCritical: boolean, criticalPathType?: string) => {\n return tasks.flatMap(_task => {\n const task =\n _task.start.getTime() > 0 && _task.end.getTime() > 0\n ? _task\n : undefined;\n if (!task) {\n return [];\n }\n return task.barChildren\n .map(child => {\n if (task.x2 > task.x1 || task.actualx2 > task.actualx1) {\n const criticalTask = task.criticalPathArrows?.find(\n arrow =>\n arrow.taskId === tasks[child.index].id &&\n (!!arrow.criticalPathType\n ? arrow.criticalPathType === criticalPathType\n : !criticalPathType)\n );\n\n const taskTo = tasks[child.index];\n const yFrom = task.y + taskHeight / 2;\n const yTo = taskTo.y + taskHeight / 2;\n const minY = Math.min(yFrom, yTo);\n const maxY = Math.max(yFrom, yTo);\n\n if (maxY < visibleStartY || minY > visibleEndY) {\n return null;\n }\n\n // Only render arrows matching the group\n if (!!criticalTask === isCritical) {\n return (\n <Arrow\n key={`Arrow from ${task.id} to ${tasks[child.index].id}${\n isCritical ? \"-critical\" : \"\"\n }`}\n taskFrom={task}\n taskTo={tasks[child.index]}\n rowHeight={rowHeight}\n dependencyType={child.dependencyType as Dependency}\n taskHeight={taskHeight}\n arrowIndent={arrowIndent}\n arrowColor={criticalTask?.arrowColor || \"#808080\"}\n />\n );\n }\n }\n return null;\n })\n .filter(Boolean);\n });\n };\n\n return (\n <g className=\"content\">\n <g className=\"arrows\">\n {/* Render non-critical arrows first */}\n {getArrows(false)}\n {/* Render secondary critical path arrows on top */}\n {getArrows(true, \"secondary\")}\n {/* Render primary critical path arrows on top */}\n {getArrows(true, \"primary\")}\n </g>\n <g className=\"bar\" fontFamily={fontFamily} fontSize={fontSize}>\n {virtualItems.map(vi => {\n const _task = tasks[vi.index];\n const task = { ..._task, y: 0 }; // Temporary relative y=0 for virtual render\n if (!task && _task.typeInternal === \"milestone\") {\n return (\n <g key={_task.id} transform={`translate(0, ${vi.start})`}>\n <Milestone\n task={task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={false}\n isDateChangeable={false}\n isDelete={!_task.isDisabled}\n onEventStart={handleBarEventStart}\n isSelected={!!selectedTask && _task.id === selectedTask.id}\n rtl={rtl}\n />\n </g>\n );\n }\n if (!task) {\n return (\n <g\n key={_task.id}\n transform={`translate(0, ${vi.start})`}\n style={{ height: taskHeight }}\n />\n );\n }\n return (\n <g key={task.id} transform={`translate(0, ${vi.start})`}>\n <TaskItem\n task={task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={!!onProgressChange && !task.isDisabled}\n isDateChangeable={!!onDateChange && !task.isDisabled}\n isDelete={!task.isDisabled}\n onEventStart={handleBarEventStart}\n isSelected={!!selectedTask && task.id === selectedTask.id}\n rtl={rtl}\n />\n </g>\n );\n })}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useRef } from \"react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { GridProps, Grid } from \"../grid/grid\";\nimport { CalendarProps, Calendar } from \"../calendar/calendar\";\nimport { TaskGanttContentProps, TaskGanttContent } from \"./task-gantt-content\";\nimport styles from \"./gantt.module.css\";\n\nexport type TaskGanttProps = {\n gridProps: GridProps;\n calendarProps: CalendarProps;\n barProps: TaskGanttContentProps;\n ganttHeight: number;\n scrollY: number;\n scrollX: number;\n};\nexport const TaskGantt: React.FC<TaskGanttProps> = ({\n gridProps,\n calendarProps,\n barProps,\n ganttHeight,\n scrollY,\n scrollX,\n}) => {\n const ganttSVGRef = useRef<SVGSVGElement>(null);\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const verticalGanttContainerRef = useRef<HTMLDivElement>(null);\n const newBarProps = { ...barProps, svg: ganttSVGRef, ganttHeight, scrollY };\n\n const buffer = barProps.rowHeight * 10;\n const visibleStartY = scrollY - buffer;\n const visibleEndY = scrollY + ganttHeight + buffer;\n\n const virtualizer = useVirtualizer({\n count: barProps.tasks.length,\n getScrollElement: () => horizontalContainerRef.current,\n estimateSize: () => barProps.rowHeight,\n overscan: 10\n });\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (verticalGanttContainerRef.current) {\n verticalGanttContainerRef.current.scrollLeft = scrollX;\n }\n }, [scrollX]);\n\n return (\n <div\n className={styles.ganttVerticalContainer}\n ref={verticalGanttContainerRef}\n dir=\"ltr\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={gridProps.svgWidth}\n height={calendarProps.headerHeight}\n fontFamily={barProps.fontFamily}\n >\n <Calendar {...calendarProps} />\n </svg>\n <div\n ref={horizontalContainerRef}\n className={styles.horizontalContainer}\n style={\n ganttHeight\n ? { height: ganttHeight, width: gridProps.svgWidth }\n : { width: gridProps.svgWidth }\n }\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={gridProps.svgWidth}\n height={virtualizer.getTotalSize()}\n fontFamily={barProps.fontFamily}\n ref={ganttSVGRef}\n >\n <Grid\n {...gridProps}\n virtualItems={virtualizer.getVirtualItems()}\n visibleStartY={visibleStartY}\n visibleEndY={visibleEndY}\n />\n <TaskGanttContent\n {...newBarProps}\n visibleStartY={visibleStartY}\n visibleEndY={visibleEndY}\n virtualItems={virtualizer.getVirtualItems()}\n />\n </svg>\n </div>\n </div>\n );\n};\n","import React, { SyntheticEvent, useRef, useEffect } from \"react\";\nimport styles from \"./horizontal-scroll.module.css\";\n\nexport const HorizontalScroll: React.FC<{\n scroll: number;\n svgWidth: number;\n taskListWidth: number;\n rtl: boolean;\n onScroll: (event: SyntheticEvent<HTMLDivElement>) => void;\n}> = ({ scroll, svgWidth, taskListWidth, rtl, onScroll }) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollLeft = scroll;\n }\n }, [scroll]);\n\n return (\n <div\n dir=\"ltr\"\n style={{\n margin: rtl\n ? `0px ${taskListWidth}px 0px 0px`\n : `0px 0px 0px ${taskListWidth}px`,\n }}\n className={styles.scrollWrapper}\n onScroll={onScroll}\n ref={scrollRef}\n >\n <div style={{ width: svgWidth }} className={styles.scroll} />\n </div>\n );\n};\n","import React, {\n useState,\n SyntheticEvent,\n useRef,\n useEffect,\n useMemo,\n} from \"react\";\nimport { ViewMode, GanttProps, Task } from \"../../types/public-types\";\nimport { GridProps } from \"../grid/grid\";\nimport { ganttDateRange, seedDates } from \"../../helpers/date-helper\";\nimport { CalendarProps } from \"../calendar/calendar\";\nimport { TaskGanttContentProps } from \"./task-gantt-content\";\nimport { TaskListHeaderDefault } from \"../task-list/task-list-header\";\nimport { TaskListTableDefault } from \"../task-list/task-list-table\";\nimport { StandardTooltipContent, Tooltip } from \"../other/tooltip\";\nimport { VerticalScroll } from \"../other/vertical-scroll\";\nimport { TaskListProps, TaskList } from \"../task-list/task-list\";\nimport { TaskGantt } from \"./task-gantt\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { convertToBarTasks } from \"../../helpers/bar-helper\";\nimport { GanttEvent } from \"../../types/gantt-task-actions\";\nimport { DateSetup } from \"../../types/date-setup\";\nimport { HorizontalScroll } from \"../other/horizontal-scroll\";\nimport hScrollStyles from \"../other/horizontal-scroll.module.css\";\nimport { removeHiddenTasks, sortTasks } from \"../../helpers/other-helper\";\nimport styles from \"./gantt.module.css\";\n\nexport const Gantt: React.FunctionComponent<GanttProps> = ({\n tasks,\n leafTasks = [],\n scheduleType = \"main\",\n startDate = new Date(),\n endDate = new Date(),\n headerHeight = 50,\n columnWidth = 60,\n listCellWidth = \"155px\",\n rowHeight = 50,\n ganttHeight = 0,\n viewMode = ViewMode.Day,\n preStepsCount = 1,\n locale = \"en-US\",\n barFill = 60,\n barCornerRadius = 3,\n barProgressColor = \"#a3a3ff\",\n barProgressSelectedColor = \"#8282f5\",\n barBackgroundColor = \"#b8c2cc\",\n barBackgroundSelectedColor = \"#aeb8c2\",\n projectProgressColor = \"#7db59a\",\n projectProgressSelectedColor = \"#59a985\",\n projectBackgroundColor = \"#fac465\",\n projectBackgroundSelectedColor = \"#f7bb53\",\n milestoneBackgroundColor = \"#f1c453\",\n milestoneBackgroundSelectedColor = \"#f29e4c\",\n rtl = false,\n handleWidth = 8,\n timeStep = 300000,\n arrowColor = \"grey\",\n fontFamily = \"Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue\",\n fontSize = \"14px\",\n arrowIndent = 20,\n todayColor = \"rgba(252, 248, 227, 0.5)\",\n weekendColor = \"#f5f5f5\",\n viewDate,\n TooltipContent = StandardTooltipContent,\n TaskListHeader = TaskListHeaderDefault,\n TaskListTable = TaskListTableDefault,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n onSelect,\n onExpanderClick,\n onMultiSelect,\n taskLabelRenderer,\n delayToRender = 500,\n shouldNotShowLoadingOverlay=true\n}) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const isDraggingTable = useRef(false);\n const dragStartX = useRef(0);\n const dragStartWidth = useRef(0);\n const dragMaxWidth = useRef<number>(Infinity);\n const [tableContainerWidth, setTableContainerWidth] = useState<number | null>(null);\n const tableInnerScrollRef = useRef<HTMLDivElement>(null);\n const tableHScrollRef = useRef<HTMLDivElement>(null);\n const [tableScrollableWidth, setTableScrollableWidth] = useState(0);\n const [dateSetup, setDateSetup] = useState<DateSetup>(() => {\n const [startDateRange, endDateRange] = ganttDateRange(\n tasks,\n viewMode,\n preStepsCount\n );\n if (scheduleType === \"lookAhead\") {\n return { viewMode, dates: seedDates(startDate, endDate, viewMode) };\n }\n return {\n viewMode,\n dates: seedDates(startDateRange, endDateRange, viewMode),\n };\n });\n const [currentViewDate, setCurrentViewDate] = useState<Date | undefined>(\n undefined\n );\n\n const [taskListWidth, setTaskListWidth] = useState(0);\n\n useEffect(() => {\n if (tableInnerScrollRef.current) {\n setTableScrollableWidth(tableInnerScrollRef.current.scrollWidth);\n }\n }, [taskListWidth, listCellWidth]);\n\n const handleTableResizeMouseDown = (e: React.MouseEvent) => {\n isDraggingTable.current = true;\n dragStartX.current = e.clientX;\n dragStartWidth.current = tableContainerWidth ?? (taskListRef.current?.offsetWidth ?? 0);\n // Cap right-drag at the table's natural content width to prevent white space\n dragMaxWidth.current = tableInnerScrollRef.current?.scrollWidth ?? Math.max(100, (wrapperRef.current?.offsetWidth ?? Infinity) - 200);\n e.preventDefault();\n };\n\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n if (!isDraggingTable.current) return;\n const newWidth = Math.min(dragMaxWidth.current, Math.max(100, dragStartWidth.current + (e.clientX - dragStartX.current)));\n setTableContainerWidth(newWidth);\n setTaskListWidth(newWidth);\n };\n const onMouseUp = () => {\n isDraggingTable.current = false;\n };\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n };\n }, []);\n const [svgContainerWidth, setSvgContainerWidth] = useState(0);\n const [svgContainerHeight, setSvgContainerHeight] = useState(ganttHeight);\n const [barTasks, setBarTasks] = useState<BarTask[]>([]);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n const [ganttEvent, setGanttEvent] = useState<GanttEvent>({\n action: \"\",\n });\n const taskHeight = useMemo(\n () => (rowHeight * barFill) / 100,\n [rowHeight, barFill]\n );\n\n const [selectedTask, setSelectedTask] = useState<BarTask>();\n const [failedTask, setFailedTask] = useState<BarTask | null>(null);\n\n const svgWidth =\n columnWidth < 55\n ? (dateSetup.dates.length + 0.5) * columnWidth\n : dateSetup.dates.length * columnWidth;\n const ganttFullHeight = useMemo(() => barTasks.length * rowHeight, [barTasks.length, rowHeight]);\n\n const [scrollY, setScrollY] = useState(0);\n const [scrollX, setScrollX] = useState(-1);\n const [ignoreScrollEvent, setIgnoreScrollEvent] = useState(false);\n const [lastTouchX, setLastTouchX] = useState(0);\n const [lastTouchY, setLastTouchY] = useState(0);\n const [isProcessing, setIsProcessing] = useState(false);\n\n const buffer = rowHeight * 10;\n const visibleStartY = scrollY - buffer;\n const visibleEndY = scrollY + ganttHeight + buffer;\n useEffect(() => {\n if (scheduleType === \"lookAhead\" && startDate && endDate) {\n setDateSetup({\n viewMode,\n dates: seedDates(startDate, endDate, viewMode),\n });\n }\n }, [startDate, endDate]);\n // task change events\n useEffect(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if(!shouldNotShowLoadingOverlay){ \n setIsProcessing(true);\n }\n debounceRef.current = setTimeout(() => {\n let filteredTasks: Task[];\n // if (onExpanderClick) {\n filteredTasks = removeHiddenTasks(tasks);\n // } else {\n // filteredTasks = tasks;\n // }\n filteredTasks = filteredTasks.sort(sortTasks);\n const [startDateRange, endDateRange] = ganttDateRange(\n filteredTasks,\n viewMode,\n preStepsCount\n );\n let newDates = seedDates(startDateRange, endDateRange, viewMode);\n if (scheduleType === \"lookAhead\") {\n newDates = seedDates(startDate, endDate, viewMode);\n }\n if (rtl) {\n newDates = newDates.reverse();\n if (scrollX === -1) {\n setScrollX(newDates.length * columnWidth);\n }\n }\n if (scheduleType !== \"lookAhead\") {\n setDateSetup({\n dates: seedDates(startDateRange, endDateRange, viewMode),\n viewMode,\n });\n }\n\n let [primaryPath, secondaryPath] = getCriticalPaths(leafTasks);\n\n // Color the paths.\n uncolorAll(tasks);\n if (scheduleType !== \"lookAhead\") {\n colorPath(secondaryPath, \"#00ff00\", tasks, \"secondary\");\n colorPath(primaryPath, \"#ff0000\", tasks, \"primary\");\n }\n setBarTasks(\n convertToBarTasks(\n filteredTasks,\n newDates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n )\n );\n setIsProcessing(false);\n }, delayToRender);\n }, [\n tasks,\n viewMode,\n preStepsCount,\n rowHeight,\n barCornerRadius,\n columnWidth,\n taskHeight,\n handleWidth,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor,\n rtl,\n shouldNotShowLoadingOverlay\n ]);\n // for debug purpose\n useEffect(() => {\n return () => {\n clearTimeout(debounceRef.current!);\n };\n }, []);\n\n useEffect(() => {\n if (\n viewMode === dateSetup.viewMode &&\n ((viewDate && !currentViewDate) ||\n (viewDate && currentViewDate?.valueOf() !== viewDate.valueOf()))\n ) {\n const dates = dateSetup.dates;\n const index = dates.findIndex(\n (d, i) =>\n viewDate.valueOf() >= d.valueOf() &&\n i + 1 !== dates.length &&\n viewDate.valueOf() < dates[i + 1].valueOf()\n );\n if (index === -1) {\n return;\n }\n setCurrentViewDate(viewDate);\n setScrollX(columnWidth * index);\n }\n }, [\n viewDate,\n columnWidth,\n dateSetup.dates,\n dateSetup.viewMode,\n viewMode,\n currentViewDate,\n setCurrentViewDate,\n ]);\n\n useEffect(() => {\n const { changedTask, action } = ganttEvent;\n if (changedTask) {\n if (action === \"delete\") {\n setGanttEvent({ action: \"\" });\n setBarTasks(barTasks.filter(t => t.id !== changedTask.id));\n } else if (\n action === \"move\" ||\n action === \"end\" ||\n action === \"start\" ||\n action === \"progress\"\n ) {\n const prevStateTask = barTasks.find(t => t.id === changedTask.id);\n if (\n prevStateTask &&\n ((prevStateTask.start.getTime() >= 0 &&\n prevStateTask.start.getTime() !== changedTask.start.getTime()) ||\n (prevStateTask.end.getTime() >= 0 &&\n prevStateTask.end.getTime() !== changedTask.end.getTime()) ||\n (prevStateTask.actualStart.getTime() >= 0 &&\n prevStateTask.actualStart.getTime()) !==\n changedTask.actualStart.getTime() ||\n (prevStateTask.actualEnd.getTime() >= 0 &&\n prevStateTask.actualEnd.getTime() !==\n changedTask.actualEnd.getTime()) ||\n prevStateTask.progress !== changedTask.progress)\n ) {\n // actions for change\n const newTaskList = barTasks.map(t =>\n t.id === changedTask.id ? changedTask : t\n );\n setBarTasks(newTaskList);\n }\n }\n }\n }, [ganttEvent, barTasks]);\n\n useEffect(() => {\n if (failedTask) {\n setBarTasks(barTasks.map(t => (t.id !== failedTask.id ? t : failedTask)));\n setFailedTask(null);\n }\n }, [failedTask, barTasks]);\n\n useEffect(() => {\n if (!listCellWidth) {\n setTaskListWidth(0);\n }\n if (taskListRef.current) {\n setTaskListWidth(taskListRef.current.offsetWidth);\n }\n }, [taskListRef, listCellWidth]);\n\n useEffect(() => {\n if (wrapperRef.current) {\n setSvgContainerWidth(wrapperRef.current.offsetWidth - taskListWidth);\n }\n }, [wrapperRef, taskListWidth]);\n\n useEffect(() => {\n if (ganttHeight) {\n setSvgContainerHeight(ganttHeight + headerHeight);\n } else {\n setSvgContainerHeight(tasks.length * rowHeight + headerHeight);\n }\n }, [ganttHeight, tasks, headerHeight, rowHeight]);\n\n // scroll events\n useEffect(() => {\n const handleWheel = (event: WheelEvent) => {\n if (event.shiftKey || event.deltaX) {\n const scrollMove = event.deltaX ? event.deltaX : event.deltaY;\n let newScrollX = scrollX + scrollMove;\n if (newScrollX < 0) {\n newScrollX = 0;\n } else if (newScrollX > svgWidth) {\n newScrollX = svgWidth;\n }\n setScrollX(newScrollX);\n event.preventDefault();\n } else if (ganttHeight) {\n let newScrollY = scrollY + event.deltaY;\n if (newScrollY < 0) {\n newScrollY = 0;\n } else if (newScrollY > ganttFullHeight - ganttHeight) {\n newScrollY = ganttFullHeight - ganttHeight;\n }\n if (newScrollY !== scrollY) {\n setScrollY(newScrollY);\n event.preventDefault();\n }\n }\n\n setIgnoreScrollEvent(true);\n };\n\n const handleLogTouch = (event: TouchEvent) => {\n if (event) {\n setLastTouchX(event.changedTouches[0].pageX);\n setLastTouchY(event.changedTouches[0].pageY);\n }\n };\n\n const handleTouch = (event: TouchEvent) => {\n if (event.changedTouches[0].pageX || event.changedTouches[0].pageY) {\n let deltaX = event.changedTouches[0].pageX - lastTouchX;\n let deltaY = event.changedTouches[0].pageY - lastTouchY;\n\n // if (lastTouchX > 0 && lastTouchY > 0) {\n if (Math.abs(deltaX) > Math.abs(deltaY)) {\n let newScrollX = scrollX - deltaX / 3;\n if (newScrollX > 0 && newScrollX < 1600) {\n setScrollX(newScrollX);\n } else if (newScrollX < 0) {\n setScrollX(0);\n } else {\n setScrollX(1600);\n }\n } else {\n let newScrollY = scrollY - deltaY;\n if (newScrollY > 0 && newScrollY < 1600) {\n setScrollY(newScrollY);\n } else if (newScrollY < 0) {\n setScrollY(0);\n } else {\n setScrollY(1600);\n }\n }\n // }\n\n setLastTouchX(event.changedTouches[0].pageX);\n setLastTouchY(event.changedTouches[0].pageY);\n }\n\n // if (event.changedTouches[0].pageX) {\n // const scrollMove = event.changedTouches[0].pageX ? event.changedTouches[0].pageX : event.changedTouches[0].pageY;\n // let newScrollX = scrollX + scrollMove;\n // if (newScrollX < 0) {\n // newScrollX = 0;\n // } else if (newScrollX > svgWidth) {\n // newScrollX = svgWidth;\n // }\n // setScrollX(newScrollX);\n // event.preventDefault();\n // } else if (ganttHeight) {\n // let newScrollY = scrollY + event.changedTouches[0].pageY;\n // if (newScrollY < 0) {\n // newScrollY = 0;\n // } else if (newScrollY > ganttFullHeight - ganttHeight) {\n // newScrollY = ganttFullHeight - ganttHeight;\n // }\n // if (newScrollY !== scrollY) {\n // setScrollY(newScrollY);\n // event.preventDefault();\n // }\n // }\n\n setIgnoreScrollEvent(true);\n };\n\n // subscribe if scroll is necessary\n wrapperRef.current?.addEventListener(\"wheel\", handleWheel, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchmove\", handleTouch, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchstart\", handleLogTouch, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchend\", handleLogTouch, {\n passive: false,\n });\n return () => {\n wrapperRef.current?.removeEventListener(\"wheel\", handleWheel);\n wrapperRef.current?.removeEventListener(\"touchmove\", handleTouch);\n wrapperRef.current?.removeEventListener(\"touchend\", handleLogTouch);\n wrapperRef.current?.removeEventListener(\"touchend\", handleLogTouch);\n };\n }, [\n wrapperRef,\n scrollY,\n scrollX,\n ganttHeight,\n svgWidth,\n rtl,\n ganttFullHeight,\n ]);\n\n const handleScrollY = (event: SyntheticEvent<HTMLDivElement>) => {\n if (scrollY !== event.currentTarget.scrollTop && !ignoreScrollEvent) {\n setScrollY(event.currentTarget.scrollTop);\n setIgnoreScrollEvent(true);\n } else {\n setIgnoreScrollEvent(false);\n }\n };\n\n const handleScrollX = (event: SyntheticEvent<HTMLDivElement>) => {\n if (scrollX !== event.currentTarget.scrollLeft) {\n setScrollX(event.currentTarget.scrollLeft);\n setIgnoreScrollEvent(true);\n } else {\n setIgnoreScrollEvent(false);\n }\n };\n\n\n /**\n * Handles arrow keys events and transform it to new scroll\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n event.preventDefault();\n let newScrollY = scrollY;\n let newScrollX = scrollX;\n let isX = true;\n switch (event.key) {\n case \"Down\": // IE/Edge specific value\n case \"ArrowDown\":\n newScrollY += rowHeight;\n isX = false;\n break;\n case \"Up\": // IE/Edge specific value\n case \"ArrowUp\":\n newScrollY -= rowHeight;\n isX = false;\n break;\n case \"Left\":\n case \"ArrowLeft\":\n newScrollX -= columnWidth;\n break;\n case \"Right\": // IE/Edge specific value\n case \"ArrowRight\":\n newScrollX += columnWidth;\n break;\n }\n if (isX) {\n if (newScrollX < 0) {\n newScrollX = 0;\n } else if (newScrollX > svgWidth) {\n newScrollX = svgWidth;\n }\n setScrollX(newScrollX);\n } else {\n if (newScrollY < 0) {\n newScrollY = 0;\n } else if (newScrollY > ganttFullHeight - ganttHeight) {\n newScrollY = ganttFullHeight - ganttHeight;\n }\n setScrollY(newScrollY);\n }\n setIgnoreScrollEvent(true);\n };\n\n /**\n * Task select event\n */\n const handleSelectedTask = (taskId: string) => {\n const newSelectedTask = barTasks.find(t => t.id === taskId);\n const oldSelectedTask = barTasks.find(\n t => !!selectedTask && t.id === selectedTask.id\n );\n if (onSelect) {\n if (oldSelectedTask) {\n onSelect(oldSelectedTask, false);\n }\n if (newSelectedTask) {\n onSelect(newSelectedTask, true);\n }\n }\n setSelectedTask(newSelectedTask);\n };\n const handleExpanderClick = (task: Task) => {\n if (onExpanderClick && task.hideChildren !== undefined) {\n onExpanderClick({ ...task, hideChildren: !task.hideChildren });\n }\n };\n const gridProps: GridProps = {\n columnWidth,\n svgWidth,\n tasks: tasks,\n scheduleType: scheduleType,\n rowHeight,\n dates: dateSetup.dates,\n todayColor,\n weekendColor,\n rtl,\n visibleStartY,\n visibleEndY,\n };\n const calendarProps: CalendarProps = {\n dateSetup,\n locale,\n viewMode,\n headerHeight,\n columnWidth,\n fontFamily,\n fontSize,\n rtl,\n };\n const barProps: TaskGanttContentProps = {\n tasks: barTasks,\n dates: dateSetup.dates,\n ganttEvent,\n selectedTask,\n rowHeight,\n taskHeight,\n columnWidth,\n arrowColor,\n timeStep,\n fontFamily,\n fontSize,\n arrowIndent,\n svgWidth,\n rtl,\n setGanttEvent,\n setFailedTask,\n setSelectedTask: handleSelectedTask,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n visibleStartY,\n visibleEndY,\n };\n\n const tableProps: TaskListProps = {\n rowHeight,\n rowWidth: listCellWidth,\n fontFamily,\n fontSize,\n tasks: barTasks,\n leafTasks,\n scheduleType,\n locale,\n headerHeight,\n scrollY,\n ganttHeight,\n horizontalContainerClass: styles.horizontalContainer,\n selectedTask,\n taskListRef,\n setSelectedTask: handleSelectedTask,\n onExpanderClick: handleExpanderClick,\n onDoubleClick,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n containerWidth: tableContainerWidth ?? undefined,\n innerScrollRef: tableInnerScrollRef,\n };\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n className={styles.wrapper}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n ref={wrapperRef}\n >\n {listCellWidth && <TaskList {...tableProps} />}\n {listCellWidth && scheduleType === \"main\" && (\n <div\n style={{\n width: \"20px\",\n cursor: \"col-resize\",\n backgroundColor: \"#e0e0e0\",\n flexShrink: 0,\n zIndex: 1,\n alignSelf: \"stretch\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n userSelect: \"none\",\n fontSize: \"10px\",\n color: \"#666\",\n letterSpacing: \"-1px\",\n }}\n onMouseDown={handleTableResizeMouseDown}\n >\n ◄|►\n </div>\n )}\n <TaskGantt\n gridProps={gridProps}\n calendarProps={calendarProps}\n barProps={barProps}\n ganttHeight={ganttHeight}\n scrollY={scrollY}\n scrollX={scrollX}\n />\n {ganttEvent.changedTask && (\n <Tooltip\n arrowIndent={arrowIndent}\n rowHeight={rowHeight}\n svgContainerHeight={svgContainerHeight}\n svgContainerWidth={svgContainerWidth}\n fontFamily={fontFamily}\n fontSize={fontSize}\n scrollX={scrollX}\n scrollY={scrollY}\n task={ganttEvent.changedTask}\n type={ganttEvent.type as string}\n headerHeight={headerHeight}\n taskListWidth={taskListWidth}\n TooltipContent={TooltipContent}\n rtl={rtl}\n svgWidth={svgWidth}\n />\n )}\n <VerticalScroll\n ganttFullHeight={ganttFullHeight}\n ganttHeight={ganttHeight}\n headerHeight={headerHeight}\n scroll={scrollY}\n onScroll={handleScrollY}\n rtl={rtl}\n />\n </div>\n {isProcessing && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: \"20px\",\n zIndex: 9999,\n pointerEvents: \"none\", // ← allows scrolling & interaction underneath!\n borderRadius: \"8px\",\n }}\n >\n <span\n style={{\n fontSize: \"24px\",\n fontWeight: \"600\",\n color: \"#cc0404\",\n fontFamily: \"Arial, sans-serif\",\n }}\n >\n Loading...\n </span>\n <div className={styles.spinner} />\n </div>\n )}\n <div style={{ display: \"flex\" }}>\n {listCellWidth && (\n <div\n ref={tableHScrollRef}\n className={hScrollStyles.scrollWrapper}\n style={{ width: taskListWidth + 4, flexShrink: 0 }}\n onScroll={(e: SyntheticEvent<HTMLDivElement>) => {\n if (tableInnerScrollRef.current) {\n tableInnerScrollRef.current.scrollLeft = e.currentTarget.scrollLeft;\n }\n }}\n >\n <div style={{ width: tableScrollableWidth }} />\n </div>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <HorizontalScroll\n svgWidth={svgWidth}\n taskListWidth={0}\n scroll={scrollX}\n rtl={rtl}\n onScroll={handleScrollX}\n />\n </div>\n </div>\n </div>\n );\n};\n\n// This is based on the visit function from https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search\nexport function topologicalOrderingHelper(\n taskID: string,\n taskMap: {},\n sortedTaskList: string[]\n) {\n if (!taskMap[taskID]) return true; // dependency pointed to an ID not present in leafTasks. ignore the dependency\n if (taskMap[taskID].finished) return true;\n if (taskMap[taskID].started) {\n console.log(\"Cycle involving \" + taskID);\n return false; // Error: dependencies made a cycle\n }\n\n taskMap[taskID].started = true;\n\n let task: Task = taskMap[taskID].task;\n if (task.dependencies)\n for (let i = 0; i < task.dependencies.length; i++) {\n let successVal = topologicalOrderingHelper(\n task.dependencies[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return false; // Error: an error came from deeper recursive call\n }\n\n taskMap[taskID].finished = true;\n\n sortedTaskList.push(taskID);\n return true;\n}\nexport function getCriticalPaths(leafTasks: Task[]) {\n // Map ids to tasks for faster access.\n // O(n) space, O(n) time to add all from list, O(1) time for each access.\n let taskMap = {};\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id] = { task: leafTasks[i] };\n\n // Sort the tasks so each dependent is listed after its dependencies.\n // O(num vertices + num edges)\n let sortedTaskList: string[] = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let successVal = topologicalOrderingHelper(\n leafTasks[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return [[], []]; // Abort: there was a cycle\n }\n\n // Map tasks to their dependents for faster access.\n // Dependencies are already easy enough to access, but not dependents.\n // O(num vertices + num edges)\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id].dependents = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let task = leafTasks[i];\n if (task.dependencies)\n for (let j = 0; j < task.dependencies.length; j++)\n taskMap[task.dependencies[j].id]?.dependents.push(task.id);\n }\n\n // Compute critical paths, in reverse order to handle dependents before dependencies.\n // O(num vertices + num edges)\n for (let i = sortedTaskList.length - 1; i >= 0; i--)\n computeCriticalPath(sortedTaskList[i], taskMap);\n\n // Now each task has a list of all possible paths and their lengths\n // We want to combine and sort all these entries so we can trace any number\n // of critical paths by following the best available chain\n // O(num tasks)\n let taskChainList = [];\n for (let i = 0; i < sortedTaskList.length; i++) {\n for (let j = 0; j < taskMap[sortedTaskList[i]].paths.length; j++) {\n taskChainList.push(taskMap[sortedTaskList[i]].paths[j]);\n }\n }\n\n // const printedList = taskChainList.map((elem) => {\n // const newElem = { ...elem };\n // newElem.duration = Math.round(elem.duration / 86400000);\n // return newElem;\n // })\n\n // console.debug(printedList);\n\n if (taskChainList.length > 0) {\n\n // Sort by duration (descending)\n // O(n log n)\n taskChainList.sort((a, b) => b.duration - a.duration);\n\n // Select the best next option to build the best path\n let primaryLeaf = taskChainList[0].parent;\n let primaryPath = [];\n\n while (primaryLeaf !== undefined) {\n\n // Add this task to the primary path\n primaryPath.push(taskMap[primaryLeaf].task);\n\n // If this task has no dependents, it is a leaf and the primary path ends here\n if (taskMap[primaryLeaf].paths.length === 0) {\n primaryLeaf = undefined;\n break;\n }\n\n // Check all of this task's paths and select longest duration as next\n let primaryDuration = taskMap[primaryLeaf].paths[0].duration;\n let nextPath = taskMap[primaryLeaf].paths[0];\n for (let i = 1; i < taskMap[primaryLeaf].paths.length; i++) {\n let newDuration = taskMap[primaryLeaf].paths[i].duration;\n if (newDuration > primaryDuration) {\n nextPath = taskMap[primaryLeaf].paths[i]\n primaryDuration = newDuration;\n }\n }\n\n // Disqualify this path from being selected by second best path.\n nextPath.visited = true;\n\n // Follow this path down to the next task\n primaryLeaf = nextPath.task;\n\n }\n\n\n // Select the best next option from the unvisited tasks to build the second best path\n let secondaryLeaf = taskChainList[0].parent;\n\n for (let i = 0; i < taskChainList.length; i++) {\n if (!taskChainList[i].visited) {\n secondaryLeaf = taskChainList[i].parent;\n break;\n }\n }\n\n let secondaryPath = [];\n\n while (secondaryLeaf !== undefined) {\n\n // Add this task to the secondary path\n secondaryPath.push(taskMap[secondaryLeaf].task);\n\n // If this task has no dependents, it is a leaf and the secondary path ends here\n if (taskMap[secondaryLeaf].paths.length === 0) {\n secondaryLeaf = undefined;\n break;\n }\n\n // Check all of this task's paths and select longest duration as next\n let secondaryDuration = taskMap[secondaryLeaf].paths[0].duration;\n let nextPath = taskMap[secondaryLeaf].paths[0];\n\n // If default path has already been visited, discredit it\n if (nextPath.visited) secondaryDuration = 0;\n\n for (let i = 1; i < taskMap[secondaryLeaf].paths.length; i++) {\n let newDuration = taskMap[secondaryLeaf].paths[i].duration;\n // Extra check here to ensure path has not already been used\n if (newDuration > secondaryDuration && !taskMap[secondaryLeaf].paths[i].visited) {\n nextPath = taskMap[secondaryLeaf].paths[i]\n secondaryDuration = newDuration;\n }\n }\n\n // If path we ended up with has already been visited, this task is a leaf node\n if (nextPath.visited) {\n break;\n }\n\n // Disqualify this path from being selected by third best path.\n nextPath.visited = true;\n\n // Follow this path down to the next task\n secondaryLeaf = nextPath.task;\n\n }\n\n return [primaryPath, secondaryPath];\n }\n\n return [[], []];\n}\n\nexport function computeCriticalPath(taskID: string, taskMap: {}) {\n let task: Task = taskMap[taskID].task;\n let dependents = taskMap[taskID].dependents;\n\n taskMap[taskID].start = task.start.getTime();\n taskMap[taskID].end = task.end.getTime();\n taskMap[taskID].paths = []; // Each task will track length of all dep paths\n for (let j = 0; j < dependents.length; j++) {\n\n // Get the duration of the dep task\n let depDuration = taskMap[dependents[j]].task.end.getTime() - taskMap[dependents[j]].task.start.getTime();\n\n // subtracting any overlap in days with its parent\n let overlap = Math.max((taskMap[taskID].end - taskMap[dependents[j]].task.start.getTime()), 0);\n\n // Inherit all paths known by dep task, adding this task's length to the tracked lengths\n let paths = taskMap[dependents[j]].paths;\n for (let k = 0; k < paths.length; k++) {\n\n let totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap + paths[k].duration\n\n if (taskMap[taskID].paths.length < 2) {\n taskMap[taskID].paths.push({\n duration: totalDuration,\n task: dependents[j],\n parent: taskID,\n visited: false\n });\n } else if (totalDuration > taskMap[taskID].paths[0].duration) {\n taskMap[taskID].paths[0].duration = totalDuration;\n taskMap[taskID].paths[0].task = dependents[j];\n taskMap[taskID].paths[0].parent = taskID;\n taskMap[taskID].paths[0].visited = false;\n } else if (totalDuration > taskMap[taskID].paths[1].duration) {\n taskMap[taskID].paths[1].duration = totalDuration;\n taskMap[taskID].paths[1].task = dependents[j];\n taskMap[taskID].paths[1].parent = taskID;\n taskMap[taskID].paths[1].visited = false;\n }\n\n }\n\n // Only add immediate child path if child itself has no children\n if (paths.length === 0) {\n let immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap;\n\n // Create a new path that ends at the immediate dep task\n if (taskMap[taskID].paths.length < 2) {\n taskMap[taskID].paths.push({\n duration: immediateChildDuration,\n task: dependents[j],\n parent: taskID,\n visited: false\n });\n } else if (immediateChildDuration > taskMap[taskID].paths[0].duration) {\n taskMap[taskID].paths[0].duration = immediateChildDuration;\n taskMap[taskID].paths[0].task = dependents[j];\n taskMap[taskID].paths[0].parent = taskID;\n taskMap[taskID].paths[0].visited = false;\n } else if (immediateChildDuration > taskMap[taskID].paths[1].duration) {\n taskMap[taskID].paths[1].duration = immediateChildDuration;\n taskMap[taskID].paths[1].task = dependents[j];\n taskMap[taskID].paths[1].parent = taskID;\n taskMap[taskID].paths[1].visited = false;\n }\n }\n }\n}\n\nexport function uncolorAll(tasks: Task[]) {\n tasks.forEach(task => {\n if (task.styles) delete task.styles.criticalPathColor;\n delete task.criticalPathArrows;\n });\n}\n\nexport function colorPath(path: Task[], color: string, tasks: Task[],criticalPathType: string) {\n // Color boxes\n for (let i = 0; i < path.length; i++) {\n // For this task in the path, find the most immediate ancestor in tasks.\n let longestIDLength = 0;\n let longestTask;\n for (let j = 0; j < tasks.length; j++) {\n if (path[i].id === tasks[j].id) {\n longestTask = tasks[j];\n break;\n }\n if (\n path[i].id.startsWith(tasks[j].id + \".\") &&\n tasks[j].id.length > longestIDLength\n ) {\n longestIDLength = tasks[j].id.length;\n longestTask = tasks[j];\n }\n }\n // If some ancestor is found, color it.\n if (longestTask) {\n let styles = longestTask.styles ?? {};\n styles.criticalPathColor = color;\n longestTask.styles = styles;\n }\n }\n // Color arrows\n for (let i = 0; i + 1 < path.length; i++) {\n // Items in the critical paths came from leafTasks, but we need to change the versions from tasks instead.\n let taskFromTasks;\n for (let j = 0; j < tasks.length; j++)\n if (path[i].id === tasks[j].id) {\n taskFromTasks = tasks[j];\n break;\n }\n if (taskFromTasks) {\n let arrows = taskFromTasks.criticalPathArrows;\n // Create the arrows list if it does not exist.\n if (!arrows) arrows = [];\n // If the arrow is already colored, replace its color in the list.\n let arrow = arrows.find(arrow => arrow.taskId === path[i + 1].id);\n if (arrow) {\n arrow.arrowColor = color;\n arrow.criticalPathType = criticalPathType;\n }\n // Else, add the new colored arrow to the list.\n else arrows.push({ taskId: path[i + 1].id, arrowColor: color, criticalPathType: criticalPathType });\n taskFromTasks.criticalPathArrows = arrows;\n }\n }\n}\nexport const getParentWbs = (wbs: string): string | undefined => {\n const segments = wbs.split('.');\n if (segments.length <= 1) return undefined; // Top-level task has no parent\n return segments.slice(0, -1).join('.'); // Remove last segment\n};\n"],"names":["ViewMode","intlDTCache","getCachedDateTimeFormat","locString","opts","key","JSON","stringify","dtf","Intl","DateTimeFormat","addToDate","date","quantity","scale","newDate","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","startOfDate","scores","shouldReset","_scale","maxScore","indexOf","ganttDateRange","tasks","viewMode","preStepsCount","newStartDate","start","getTime","newEndDate","end","task","actualStart","actualEnd","Year","Quarter","Month","Week","getMonday","Day","QuarterDay","HalfDay","Hour","seedDates","startDate","endDate","currentDate","dates","push","getLocaleMonth","locale","bottomValue","month","format","replace","toLocaleUpperCase","getLocalDayOfWeek","weekday","day","getDay","diff","setDate","getWeekNumberISO8601","tmpDate","valueOf","dayNumber","firstThursday","setMonth","weekNumber","Math","ceil","toString","length","TaskListHeaderDefault","headerHeight","fontFamily","fontSize","rowWidth","scheduleType","allSelected","onSelectAll","React","className","styles","ganttTable","style","ganttTable_Header","height","ganttTable_HeaderItem","minWidth","parseInt","maxWidth","type","checked","onChange","e","target","ganttTable_HeaderSeparator","marginTop","title","Fragment","localeDateStringCache","toLocaleDateStringFactory","dateTimeOptions","lds","toLocaleDateString","year","TaskListTableDefault","rowHeight","leafTasks","onExpanderClick","selectedTasks","onTaskSelect","taskLabelRenderer","t","name","virtualItems","useMemo","leafTaskIds","Set","map","id","hasSelectedAncestor","taskId","selectedSet","allTasks","find","parentWbs","getParentWbs","has","itemsToRender","_","index","size","lane","measureElement","taskListWrapper","vi","expanderSymbol","hideChildren","isSelected","includes","isAncestorSelected","position","top","left","width","transform","taskListMilestoneRow","taskListLookAheadRow","taskListTableRow","taskListCell","taskListText","display","justifyContent","alignItems","paddingLeft","paddingRight","disabled","taskListNameWrapper","depth","taskListExpander","onClick","taskListExpanderPlaceholder","now","color","optionalId","percentComplete","progress","plannedDuration","remainingDuration","round","actualDuration","endRef","durationType","Tooltip","rtl","svgContainerHeight","svgContainerWidth","scrollX","scrollY","arrowIndent","taskListWidth","TooltipContent","tooltipRef","useRef","useState","relatedY","setRelatedY","relatedX","setRelatedX","useEffect","current","tooltipHeight","offsetHeight","tooltipWidth","offsetWidth","newRelatedY","newRelatedX","x1","x2","tooltipLeftmostPoint","actualx2","fullChartWidth","actualx1","tooltipLowerPoint","ref","tooltipDetailsContainer","tooltipDetailsContainerHidden","StandardTooltipContent","tooltipDefaultContainer","tooltipDefaultContainerParagraph","VerticalScroll","scroll","ganttHeight","ganttFullHeight","onScroll","scrollRef","scrollTop","marginLeft","marginRight","TaskList","selectedTask","setSelectedTask","taskListRef","horizontalContainerClass","TaskListHeader","TaskListTable","onMultiSelect","containerWidth","innerScrollRef","horizontalContainerRef","setSelectedTasks","pendingTaskSelect","setPendingTaskSelect","prevSelectedTasksRef","expandedTasks","virtualizer","useVirtualizer","count","getScrollElement","estimateSize","overscan","selectedTaskObjects","filter","newSelected","forEach","selected","recursiveOpen","descendants","getDescendants","add","d","Array","from","newSelectedArray","children","flatMap","child","c","handleTaskSelect","prev","handleSelectAll","topLevelTasks","headerProps","undefined","selectedTaskId","tableProps","getVirtualItems","overflow","flexShrink","hideScrollbar","overflowX","getTotalSize","GridBody","svgWidth","columnWidth","todayColor","weekendColor","visibleStartY","visibleEndY","visibleHeight","items","i","isWeekend","isTodayColumn","next","step","todayRects","weekendRects","x","y","fill","tickLines","y1","y2","gridTick","rowBackgrounds","rowLines","gridRowLine","isMilestone","rowClass","darkerGridRow","gridRowLookAhead","gridRow","Grid","props","TopPartOfCalendar","value","x1Line","y1Line","y2Line","xText","yText","textAnchor","textAnchorClass","textAnchorStart","textAnchorMiddle","textAnchorEnd","calendarTopTick","calendarTopText","Calendar","dateSetup","getCalendarValuesForYear","topValues","bottomValues","topDefaultHeight","calendarBottomText","topValue","getCalendarValuesForQuarter","quarter","floor","getCalendarValuesForMonth","toLocaleString","console","log","getCalendarValuesForWeek","weeksCount","getCalendarValuesForDay","getCalendarValuesForPartOfDay","ticks","hour","getCalendarValuesForHour","displayDate","topPosition","calendarHeader","Arrow","taskFrom","taskTo","taskHeight","arrowColor","dependencyType","drawPathAndTriangle","path","trianglePoints","strokeWidth","stroke","points","indexCompare","taskToEndY","verticalOffset","minX","min","maxX","max","fromPoint","toPoint","arrowPoints","right","convertToBarTasks","barCornerRadius","handleWidth","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","projectProgressColor","projectProgressSelectedColor","projectBackgroundColor","projectBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","barTasks","convertToBarTask","dependencies","j","dependence","findIndex","barchild","barChildren","barTask","convertToMilestone","convertToBar","progressStartWidth","progressEndWidth","taskXCoordinateRTL","taskXCoordinate","abs","typeInternal","progressWithByParams","progressWidth","progressX","taskYCoordinate","backgroundColor","backgroundSelectedColor","progressColor","progressSelectedColor","rotatedHeight","xDate","remainderMillis","percentOfInterval","taskX1","taskX2","getProgressPoint","taskY","point","join","startByX","xStep","steps","additionalXValue","newX","startByActualX","endByX","endByActualX","moveByX","newX1","newX2","moveByActualX","dateByX","taskX","taskDate","timeStep","getTimezoneOffset","handleTaskBySVGMouseEvent","svgX","action","initEventX1Delta","result","handleTaskBySVGMouseEventForMilestone","handleTaskBySVGMouseEventForBar","changedTask","isChanged","newMoveX1","newMoveX2","isKeyboardEvent","event","removeHiddenTasks","groupedTasks","groupedTask","getChildren","taskList","project","taskChildren","concat","sortTasks","taskA","taskB","orderA","displayOrder","Number","MAX_VALUE","orderB","BarDisplay","onMouseDown","getProcessColor","getBarColor","ry","rx","criticalPathColor","taskProgressColor","BarDateHandle","barHandle","BarProgressHandle","Bar","isProgressChangeable","isDateChangeable","onEventStart","progressPoint","handleHeight","barWrapper","tabIndex","startProgressWidth","endProgressWidth","BarSmall","Milestone","milestoneWrapper","milestoneBackground","onDoubleClick","Project","barColor","processColor","projectWith","projectLeftTriangle","projectRightTriangle","projectWrapper","projectBackground","projectTop","TaskItem","isDelete","taskItem","setTaskItem","onKeyDown","stopPropagation","onMouseEnter","onMouseLeave","TaskGanttContent","ganttEvent","svg","setGanttEvent","setFailedTask","onDateChange","onProgressChange","onDelete","createSVGPoint","setXStep","setInitEventX1Delta","isMoving","setIsMoving","dateDelta","newXStep","handleMouseMove","preventDefault","clientX","cursor","matrixTransform","getScreenCTM","inverse","handleMouseUp","operationSuccess","originalSelectedTask","newChangedTask","isNotLikeOriginal","removeEventListener","addEventListener","handleBarEventStart","error","getArrows","isCritical","criticalPathType","_task","criticalTask","criticalPathArrows","arrow","yFrom","yTo","minY","maxY","Boolean","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","buffer","scrollLeft","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","Gantt","listCellWidth","barFill","viewDate","onSelect","delayToRender","shouldNotShowLoadingOverlay","wrapperRef","isDraggingTable","dragStartX","dragStartWidth","dragMaxWidth","Infinity","tableContainerWidth","setTableContainerWidth","tableInnerScrollRef","tableHScrollRef","tableScrollableWidth","setTableScrollableWidth","startDateRange","endDateRange","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","scrollWidth","handleTableResizeMouseDown","onMouseMove","newWidth","onMouseUp","document","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","debounceRef","failedTask","setScrollY","setScrollX","ignoreScrollEvent","setIgnoreScrollEvent","lastTouchX","setLastTouchX","lastTouchY","setLastTouchY","isProcessing","setIsProcessing","clearTimeout","setTimeout","filteredTasks","sort","newDates","reverse","getCriticalPaths","primaryPath","secondaryPath","uncolorAll","colorPath","prevStateTask","newTaskList","handleWheel","shiftKey","deltaX","scrollMove","deltaY","newScrollX","newScrollY","handleLogTouch","changedTouches","pageX","pageY","handleTouch","passive","handleScrollY","currentTarget","handleScrollX","handleKeyDown","isX","handleSelectedTask","newSelectedTask","oldSelectedTask","handleExpanderClick","wrapper","zIndex","alignSelf","userSelect","letterSpacing","bottom","gap","pointerEvents","borderRadius","fontWeight","spinner","hScrollStyles","flex","topologicalOrderingHelper","taskID","taskMap","sortedTaskList","finished","started","successVal","dependents","computeCriticalPath","taskChainList","paths","a","b","duration","primaryLeaf","parent","primaryDuration","nextPath","newDuration","visited","secondaryLeaf","secondaryDuration","depDuration","overlap","k","totalDuration","immediateChildDuration","longestIDLength","longestTask","startsWith","taskFromTasks","arrows","wbs","segments","split","slice"],"mappings":"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"}
|