gantt-task-react-powern 0.4.62 → 0.4.63
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-table.d.ts +2 -0
- package/dist/components/task-list/task-list.d.ts +4 -0
- package/dist/index.css +6 -18
- package/dist/index.js +694 -720
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +694 -720
- package/dist/index.modern.js.map +1 -1
- package/dist/types/public-types.d.ts +2 -0
- package/package.json +1 -1
package/dist/index.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.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 interface Task {\n id: string;\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}>\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?: string[];\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\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 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}\n\nexport interface GanttProps extends EventOption, DisplayOption, StylingOption {\n tasks: Task[];\n leafTasks?: Task[];\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}> = ({ headerHeight, fontFamily, fontSize, rowWidth }) => {\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 <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) * 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.7,\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.7,\n }}\n title=\"Planned End\"\n >\n Planned End\n </div>\n </div>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport styles from \"./task-list-table.module.css\";\nimport { Task } from \"../../types/public-types\";\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 leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n}> = ({\n rowHeight,\n rowWidth,\n tasks,\n leafTasks,\n fontFamily,\n fontSize,\n locale,\n onExpanderClick,\n taskLabelRenderer = t => \" \" + t.name,\n}) => {\n const toLocaleDateString = useMemo(\n () => toLocaleDateStringFactory(locale),\n [locale]\n );\n const leafTaskIds = useMemo(() => new Set(leafTasks.map(t => t.id)), [leafTasks]);\n return (\n <div\n className={styles.taskListWrapper}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n {tasks.map(t => {\n let expanderSymbol = \"\";\n if (!leafTaskIds.has(t.id)) {\n if (t.hideChildren === false) {\n expanderSymbol = \"▼\";\n } else if (t.hideChildren === true) {\n expanderSymbol = \"►\";\n }\n }\n\n return (\n <div\n className={styles.taskListTableRow}\n style={{ height: rowHeight }}\n key={`${t.id}row`}\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) ? (\n <div className={styles.taskListExpander} onClick={() => onExpanderClick(t)}>\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) * 2,\n maxWidth: parseInt(rowWidth) * 2,\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 </div>\n );\n })}\n </div>\n );\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 (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 (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 } from \"react\";\nimport { EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Task } from \"../../types/public-types\";\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 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 }>;\n TaskListTable: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\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 leafTasks,\n selectedTask,\n setSelectedTask,\n onExpanderClick,\n locale,\n ganttHeight,\n taskListRef,\n horizontalContainerClass,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n}) => {\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n const headerProps = {\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n };\n const selectedTaskId = selectedTask ? selectedTask.id : \"\";\n\n const tableProps = {\n rowHeight,\n rowWidth,\n fontFamily,\n fontSize,\n tasks,\n leafTasks,\n locale,\n selectedTaskId: selectedTaskId,\n setSelectedTask,\n onExpanderClick,\n taskLabelRenderer,\n };\n\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 <TaskListTable {...tableProps} />\n </div>\n </div>\n );\n};\n","import React, { ReactChild } from \"react\";\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 dates: Date[];\n svgWidth: number;\n rowHeight: number;\n columnWidth: number;\n todayColor: string;\n rtl: boolean;\n};\nexport const GridBody: React.FC<GridBodyProps> = ({\n tasks,\n dates,\n rowHeight,\n svgWidth,\n columnWidth,\n todayColor,\n rtl,\n}) => {\n let y = 0;\n const gridRows: ReactChild[] = [];\n const rowLines: ReactChild[] = [\n <line\n key=\"RowLineFirst\"\n x=\"0\"\n y1={0}\n x2={svgWidth}\n y2={0}\n className={styles.gridRowLine}\n />,\n ];\n \n for (const task of tasks) {\n const isDarkerRow = task.type === \"milestone\";\n gridRows.push(\n <rect\n key={\"Row\" + task.id}\n x=\"0\"\n y={y}\n width={svgWidth}\n height={rowHeight}\n className={isDarkerRow ? styles.darkerGridRow : styles.gridRow}\n />\n );\n rowLines.push(\n <line\n key={\"RowLine\" + task.id}\n x=\"0\"\n y1={y + rowHeight}\n x2={svgWidth}\n y2={y + rowHeight}\n className={styles.gridRowLine}\n />\n );\n y += rowHeight;\n }\n\n const now = new Date();\n let tickX = 0;\n const ticks: ReactChild[] = [];\n let today: ReactChild = <rect />;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n ticks.push(\n <line\n key={date.getTime()}\n x1={tickX}\n y1={0}\n x2={tickX}\n y2={y}\n className={styles.gridTick}\n />\n );\n if (\n (i + 1 !== dates.length &&\n date.getTime() < now.getTime() &&\n dates[i + 1].getTime() >= now.getTime()) ||\n // if current date is last\n (i !== 0 &&\n i + 1 === dates.length &&\n date.getTime() < now.getTime() &&\n addToDate(\n date,\n date.getTime() - dates[i - 1].getTime(),\n \"millisecond\"\n ).getTime() >= now.getTime())\n ) {\n today = (\n <rect\n x={tickX}\n y={0}\n width={columnWidth}\n height={y}\n fill={todayColor}\n />\n );\n }\n // rtl for today\n if (\n rtl &&\n i + 1 !== dates.length &&\n date.getTime() >= now.getTime() &&\n dates[i + 1].getTime() < now.getTime()\n ) {\n today = (\n <rect\n x={tickX + columnWidth}\n y={0}\n width={columnWidth}\n height={y}\n fill={todayColor}\n />\n );\n }\n tickX += columnWidth;\n }\n return (\n <g className=\"gridBody\">\n <g className=\"rows\">{gridRows}</g>\n <g className=\"rowLines\">{rowLines}</g>\n <g className=\"ticks\">{ticks}</g>\n <g className=\"today\">{today}</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 = textAnchor === \"start\" ? styles.textAnchorStart : textAnchor === \"middle\" ? styles.textAnchorMiddle : 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 getDaysInMonth,\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 = `${getLocalDayOfWeek(date, locale, \"short\")}, ${date\n .getDate()\n .toString()}`;\n\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(date, locale)} ${date.getFullYear()}`;\n\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 columnWidth * (i + 1) -\n getDaysInMonth(date.getMonth(), date.getFullYear()) *\n columnWidth *\n 0.5\n }\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 className=\"calendar\" fontSize={fontSize} fontFamily={fontFamily} width={columnWidth * dateSetup.dates.length}>\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\";\n\ntype ArrowProps = {\n taskFrom: BarTask;\n taskTo: BarTask;\n rowHeight: number;\n taskHeight: number;\n arrowIndent: number;\n rtl: boolean;\n arrowColor: string;\n};\nexport const Arrow: React.FC<ArrowProps> = ({\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n rtl,\n arrowColor,\n}) => {\n let path: string;\n let trianglePoints: string;\n if (rtl) {\n [path, trianglePoints] = drownPathAndTriangleRTL(\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent\n );\n } else {\n [path, trianglePoints] = drownPathAndTriangle(\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent\n );\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 drownPathAndTriangle = (\n taskFrom: BarTask,\n taskTo: BarTask,\n rowHeight: number,\n taskHeight: number,\n arrowIndent: number\n) => {\n let taskToStart, taskFromEnd;\n if (taskTo.x1 > 0 && taskTo.actualx1 > 0) {\n taskToStart = Math.min(taskTo.x1, taskTo.actualx1);\n } else if (taskTo.x1 > 0) taskToStart = taskTo.x1;\n else if (taskTo.actualx1 > 0) taskToStart = taskTo.actualx1;\n else taskToStart = 0;\n\n if (taskFrom.x2 > 0 && taskFrom.actualx2 > 0) {\n taskFromEnd = Math.max(taskFrom.x2, taskFrom.actualx2);\n } else if (taskFrom.x2 > 0) taskFromEnd = taskFrom.x2;\n else if (taskFrom.actualx2 > 0) taskFromEnd = taskFrom.actualx2;\n else taskFromEnd = 0;\n\n const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\n const taskToEndPosition = taskTo.y + taskHeight / 2;\n const taskFromEndPosition = taskFromEnd + arrowIndent * 2;\n const taskFromHorizontalOffsetValue =\n taskFromEndPosition < taskToStart ? \"\" : `H ${taskToStart - arrowIndent}`;\n const taskToHorizontalOffsetValue =\n taskFromEndPosition > taskToStart\n ? arrowIndent\n : taskToStart - taskFromEnd - arrowIndent;\n\n const path = `M ${taskFromEnd} ${taskFrom.y + taskHeight / 2} \n h ${arrowIndent} \n v ${(indexCompare * rowHeight) / 2} \n ${taskFromHorizontalOffsetValue}\n V ${taskToEndPosition} \n h ${taskToHorizontalOffsetValue}`;\n\n const trianglePoints = `${taskToStart},${taskToEndPosition} \n ${taskToStart - 5},${taskToEndPosition - 5} \n ${taskToStart - 5},${taskToEndPosition + 5}`;\n return [path, trianglePoints];\n};\n\nconst drownPathAndTriangleRTL = (\n taskFrom: BarTask,\n taskTo: BarTask,\n rowHeight: number,\n taskHeight: number,\n arrowIndent: number\n) => {\n const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\n const taskToEndPosition = taskTo.y + taskHeight / 2;\n const taskFromEndPosition = taskFrom.x1 - arrowIndent * 2;\n const taskFromHorizontalOffsetValue =\n taskFromEndPosition > taskTo.x2 ? \"\" : `H ${taskTo.x2 + arrowIndent}`;\n const taskToHorizontalOffsetValue =\n taskFromEndPosition < taskTo.x2\n ? -arrowIndent\n : taskTo.x2 - taskFrom.x1 + arrowIndent;\n\n const path = `M ${taskFrom.x1} ${taskFrom.y + taskHeight / 2} \n h ${-arrowIndent} \n v ${(indexCompare * rowHeight) / 2} \n ${taskFromHorizontalOffsetValue}\n V ${taskToEndPosition} \n h ${taskToHorizontalOffsetValue}`;\n\n const trianglePoints = `${taskTo.x2},${taskToEndPosition} \n ${taskTo.x2 + 5},${taskToEndPosition + 5} \n ${taskTo.x2 + 5},${taskToEndPosition - 5}`;\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]\n );\n if (\n dependence !== -1 &&\n task.start.getTime() > 0 &&\n task.end.getTime() > 0\n )\n barTasks[dependence].barChildren.push(task);\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\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.start, 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 return 0;\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 => t.dependencies && t.dependencies.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 && task.x2)\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 && task.actualx2) {\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);\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 setTaskItem([<Milestone {...props} />]);\n break;\n case \"project\":\n setTaskItem([<Project {...props} />]);\n break;\n case \"smalltask\":\n setTaskItem([<BarSmall {...props} />]);\n break;\n default:\n {\n let taskItem = [];\n if (task.x1 && task.x2) {\n taskItem.push(<Bar {...props} type={\"planned\"} />);\n }\n if (task.actualx1 && task.actualx2) {\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 { 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\";\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 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 setGanttEvent,\n setFailedTask,\n setSelectedTask,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\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 return (\n <g className=\"content\">\n <g className=\"arrows\">\n {tasks.map(_task => {\n const task = _task.start.getTime()>0 && _task.end.getTime()>0 ?_task : undefined\n if(!task){\n return <g key={_task.id} style={{ height: taskHeight }} />;\n }\n return task.barChildren.map(child => {\n return (\n <Arrow\n key={`Arrow from ${task.id} to ${tasks[child.index].id}`}\n taskFrom={task}\n taskTo={tasks[child.index]}\n rowHeight={rowHeight}\n taskHeight={taskHeight}\n arrowIndent={arrowIndent}\n rtl={rtl}\n arrowColor={task.criticalPathArrows?.find(arrow => arrow.taskId == tasks[child.index].id)?.arrowColor || \"#808080\"}\n />\n );\n });\n })} \n </g>\n <g className=\"bar\" fontFamily={fontFamily} fontSize={fontSize}>\n {tasks.map(_task => {\n const task = _task.start.getTime()>0 && _task.end.getTime()>0 ?_task : undefined\n if(!task){\n return <g key={_task.id} style={{ height: taskHeight }} />;\n }\n return (\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 key={task.id}\n isSelected={!!selectedTask && task.id === selectedTask.id}\n rtl={rtl}\n />\n );\n })}\n </g>\n </g>\n );\n};\n","import React, { useRef, useEffect } from \"react\";\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 };\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={barProps.rowHeight * barProps.tasks.length}\n fontFamily={barProps.fontFamily}\n ref={ganttSVGRef}\n >\n <Grid {...gridProps} />\n <TaskGanttContent {...newBarProps} />\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 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 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 taskLabelRenderer,\n}) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const [dateSetup, setDateSetup] = useState<DateSetup>(() => {\n const [startDate, endDate] = ganttDateRange(tasks, viewMode, preStepsCount);\n return { viewMode, dates: seedDates(startDate, endDate, viewMode) };\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 [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 = dateSetup.dates.length * columnWidth;\n const ganttFullHeight = barTasks.length * rowHeight;\n\n const [scrollY, setScrollY] = useState(0);\n const [scrollX, setScrollX] = useState(-1);\n const [ignoreScrollEvent, setIgnoreScrollEvent] = useState(false);\n\n // task change events\n useEffect(() => {\n let filteredTasks: Task[];\n if (onExpanderClick) {\n filteredTasks = removeHiddenTasks(tasks);\n } else {\n filteredTasks = tasks;\n }\n filteredTasks = filteredTasks.sort(sortTasks);\n const [startDate, endDate] = ganttDateRange(\n filteredTasks,\n viewMode,\n preStepsCount\n );\n let newDates = seedDates(startDate, endDate, viewMode);\n if (rtl) {\n newDates = newDates.reverse();\n if (scrollX === -1) {\n setScrollX(newDates.length * columnWidth);\n }\n }\n setDateSetup({ dates: newDates, viewMode });\n\n let [primaryPath, secondaryPath] = getCriticalPaths(leafTasks);\n\n // Color the paths.\n uncolorAll(tasks);\n colorPath(secondaryPath, \"#00ff00\", tasks);\n colorPath(primaryPath, \"#ff0000\", tasks);\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 }, [\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 scrollX,\n onExpanderClick,\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 // subscribe if scroll is necessary\n wrapperRef.current?.addEventListener(\"wheel\", handleWheel, {\n passive: false,\n });\n return () => {\n wrapperRef.current?.removeEventListener(\"wheel\", handleWheel);\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 * 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 rowHeight,\n dates: dateSetup.dates,\n todayColor,\n rtl,\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 };\n\n const tableProps: TaskListProps = {\n rowHeight,\n rowWidth: listCellWidth,\n fontFamily,\n fontSize,\n tasks: barTasks,\n leafTasks,\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 };\n return (\n <div>\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 <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],\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]]?.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 // Select the best.\n // O(num vertices)\n let primaryLeaf: string | undefined;\n let primaryDuration = 0;\n for (let i = 0; i < sortedTaskList.length; i++) {\n let newDuration =\n taskMap[sortedTaskList[i]].end -\n taskMap[sortedTaskList[i]].task.start.getTime();\n // let newDuration = taskMap[sortedTaskList[i]].duration;\n if (primaryDuration < newDuration) {\n primaryLeaf = sortedTaskList[i];\n primaryDuration = newDuration;\n }\n }\n // Build the best path.\n // O(num edges)\n let primaryPath = [];\n while (primaryLeaf !== undefined) {\n // Disqualify this task from being selected by second best path.\n taskMap[primaryLeaf].excluded = true;\n // Add to path.\n primaryPath.push(taskMap[primaryLeaf].task);\n primaryLeaf = taskMap[primaryLeaf].next;\n }\n\n // Select the second best.\n // O(num vertices)\n let secondaryLeaf: string | undefined;\n let secondaryDuration = 0;\n for (let i = 0; i < sortedTaskList.length; i++) {\n if (taskMap[sortedTaskList[i]].excluded) continue;\n let newDuration =\n taskMap[sortedTaskList[i]].end -\n taskMap[sortedTaskList[i]].task.start.getTime();\n // let newDuration = taskMap[sortedTaskList[i]].duration;\n if (secondaryDuration < newDuration) {\n secondaryLeaf = sortedTaskList[i];\n secondaryDuration = newDuration;\n }\n }\n // Build the two paths.\n // O(num edges)\n let secondaryPath = [];\n while (secondaryLeaf !== undefined) {\n secondaryPath.push(taskMap[secondaryLeaf].task);\n secondaryLeaf = taskMap[secondaryLeaf].next;\n }\n\n return [primaryPath, secondaryPath];\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].end = task.end.getTime();\n for (let j = 0; j < dependents.length; j++) {\n let newDependentEnd = taskMap[dependents[j]].end;\n if (newDependentEnd > taskMap[taskID].end) {\n taskMap[taskID].next = dependents[j];\n taskMap[taskID].end = newDependentEnd;\n }\n }\n\n /*\n taskMap[taskID].duration = 0;\n for(let j = 0; j < dependents.length; j++) {\n let newDependentDuration = taskMap[dependents[j]].duration;\n if(newDependentDuration > taskMap[taskID].duration) {\n taskMap[taskID].next = dependents[j];\n taskMap[taskID].duration = newDependentDuration;\n }\n }\n taskMap[taskID].duration += task.end.getTime() - task.start.getTime();\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[]) {\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) arrow.arrowColor = color;\n // Else, add the new colored arrow to the list.\n else arrows.push({ taskId: path[i + 1].id, arrowColor: color });\n taskFromTasks.criticalPathArrows = arrows;\n }\n }\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","getDaysInMonth","year","TaskListHeaderDefault","headerHeight","fontFamily","fontSize","rowWidth","React","className","styles","ganttTable","style","ganttTable_Header","height","ganttTable_HeaderItem","minWidth","parseInt","maxWidth","ganttTable_HeaderSeparator","marginTop","title","localeDateStringCache","toLocaleDateStringFactory","dateTimeOptions","lds","toLocaleDateString","TaskListTableDefault","rowHeight","leafTasks","onExpanderClick","taskLabelRenderer","t","name","useMemo","leafTaskIds","Set","map","id","taskListWrapper","expanderSymbol","has","hideChildren","taskListTableRow","taskListCell","taskListNameWrapper","paddingLeft","depth","taskListExpander","onClick","taskListExpanderPlaceholder","taskListText","now","color","Tooltip","type","rtl","svgContainerHeight","svgContainerWidth","scrollX","scrollY","arrowIndent","taskListWidth","TooltipContent","tooltipRef","useRef","useState","relatedY","setRelatedY","relatedX","setRelatedX","useEffect","current","tooltipHeight","offsetHeight","tooltipWidth","offsetWidth","newRelatedY","index","newRelatedX","x1","x2","tooltipLeftmostPoint","actualx2","fullChartWidth","actualx1","tooltipLowerPoint","ref","tooltipDetailsContainer","tooltipDetailsContainerHidden","left","top","StandardTooltipContent","tooltipDefaultContainer","tooltipDefaultContainerParagraph","progress","VerticalScroll","scroll","ganttHeight","ganttFullHeight","onScroll","scrollRef","scrollTop","marginLeft","marginRight","width","TaskList","selectedTask","setSelectedTask","taskListRef","horizontalContainerClass","TaskListHeader","TaskListTable","horizontalContainerRef","headerProps","selectedTaskId","tableProps","GridBody","svgWidth","columnWidth","todayColor","y","gridRows","rowLines","x","y1","y2","gridRowLine","isDarkerRow","darkerGridRow","gridRow","tickX","ticks","today","i","gridTick","fill","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","hour","getCalendarValuesForHour","displayDate","topPosition","calendarHeader","Arrow","taskFrom","taskTo","taskHeight","arrowColor","path","trianglePoints","drownPathAndTriangleRTL","drownPathAndTriangle","strokeWidth","d","stroke","points","taskToStart","taskFromEnd","min","max","indexCompare","taskToEndPosition","taskFromEndPosition","taskFromHorizontalOffsetValue","taskToHorizontalOffsetValue","convertToBarTasks","barCornerRadius","handleWidth","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","projectProgressColor","projectProgressSelectedColor","projectBackgroundColor","projectBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","barTasks","convertToBarTask","dependencies","j","dependence","findIndex","barChildren","barTask","convertToMilestone","convertToBar","progressStartWidth","progressEndWidth","taskXCoordinateRTL","taskXCoordinate","abs","typeInternal","progressWithByParams","progressWidth","progressX","taskYCoordinate","backgroundColor","backgroundSelectedColor","progressColor","progressSelectedColor","rotatedHeight","undefined","xDate","remainderMillis","percentOfInterval","taskX1","taskX2","getProgressPoint","taskY","point","join","startByX","xStep","steps","round","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","filter","groupedTask","children","getChildren","taskList","project","taskChildren","forEach","concat","sortTasks","taskA","taskB","orderA","displayOrder","Number","MAX_VALUE","orderB","BarDisplay","isSelected","onMouseDown","getProcessColor","getBarColor","ry","rx","criticalPathColor","taskProgressColor","BarDateHandle","barHandle","BarProgressHandle","Bar","isProgressChangeable","isDateChangeable","onEventStart","progressPoint","handleHeight","barWrapper","tabIndex","startProgressWidth","endProgressWidth","e","BarSmall","Milestone","transform","milestoneWrapper","milestoneBackground","Project","barColor","processColor","projectWith","projectLeftTriangle","projectRightTriangle","projectWrapper","projectBackground","projectTop","TaskItem","isDelete","taskItem","setTaskItem","onKeyDown","stopPropagation","onMouseEnter","onMouseLeave","onDoubleClick","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","_task","child","criticalPathArrows","find","arrow","taskId","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","scrollLeft","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","Gantt","listCellWidth","barFill","viewDate","onSelect","wrapperRef","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","failedTask","setScrollY","setScrollX","ignoreScrollEvent","setIgnoreScrollEvent","filteredTasks","sort","newDates","reverse","getCriticalPaths","primaryPath","secondaryPath","uncolorAll","colorPath","prevStateTask","newTaskList","handleWheel","shiftKey","deltaX","scrollMove","deltaY","newScrollX","newScrollY","passive","handleScrollY","currentTarget","handleScrollX","handleKeyDown","isX","handleSelectedTask","newSelectedTask","oldSelectedTask","handleExpanderClick","wrapper","topologicalOrderingHelper","taskID","taskMap","sortedTaskList","finished","started","successVal","dependents","computeCriticalPath","primaryLeaf","primaryDuration","newDuration","excluded","next","secondaryLeaf","secondaryDuration","newDependentEnd","longestIDLength","longestTask","startsWith","taskFromTasks","arrows"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.modern.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 interface Task {\n id: string;\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}>\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?: string[];\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\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 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}\n\nexport interface GanttProps extends EventOption, DisplayOption, StylingOption {\n tasks: Task[];\n leafTasks?: Task[];\n selectedTaskIds?: string[];\n onTaskSelectionChange?: (taskIds: string[]) => void;\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}> = ({ headerHeight, fontFamily, fontSize, rowWidth }) => {\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 <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) * 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.7,\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.7,\n }}\n title=\"Planned End\"\n >\n Planned End\n </div>\n </div>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport styles from \"./task-list-table.module.css\";\nimport { Task } from \"../../types/public-types\";\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 leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n selectedTaskIds?: string[];\n onTaskSelectionChange?: (taskIds: string[]) => void;\n}> = ({\n rowHeight,\n rowWidth,\n tasks,\n leafTasks,\n fontFamily,\n fontSize,\n locale,\n onExpanderClick,\n taskLabelRenderer = t => \" \" + t.name,\n selectedTaskIds = [],\n onTaskSelectionChange,\n}) => {\n const toLocaleDateString = useMemo(\n () => toLocaleDateStringFactory(locale),\n [locale]\n );\n\n // handle checkbox change\n const handleCheckboxChange = (taskId: string, isChecked: boolean) => {\n if (!onTaskSelectionChange) return;\n \n const newSelectedIds = isChecked ? [...selectedTaskIds, taskId] : selectedTaskIds.filter(id => id !== taskId);\n\n onTaskSelectionChange(newSelectedIds);\n }\n\n const leafTaskIds = useMemo(() => new Set(leafTasks.map(t => t.id)), [leafTasks]);\n return (\n <div\n className={styles.taskListWrapper}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n {tasks.map(t => {\n let expanderSymbol = \"\";\n if (!leafTaskIds.has(t.id)) {\n if (t.hideChildren === false) {\n expanderSymbol = \"▼\";\n } else if (t.hideChildren === true) {\n expanderSymbol = \"►\";\n }\n }\n\n const isChecked = selectedTaskIds.includes(t.id);\n\n return (\n <div\n className={styles.taskListTableRow}\n style={{ height: rowHeight }}\n key={`${t.id}row`}\n >\n <div\n className={styles.taskListCell}\n style={{\n minWidth: \"40px\",\n maxWidth: \"40px\",\n }}\n >\n <div className={styles.taskListCheckbox}>\n <input\n type=\"checkbox\"\n checked={isChecked}\n onChange={(e) => handleCheckboxChange(t.id, e.target.checked)}\n onClick={(e) => e.stopPropagation()}\n />\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.id}\n >\n <div\n className={styles.taskListNameWrapper}\n style={{ paddingLeft: `${t.depth * 4}px` }}\n >\n {!leafTaskIds.has(t.id) ? (\n <div className={styles.taskListExpander} onClick={() => onExpanderClick(t)}>\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) * 2,\n maxWidth: parseInt(rowWidth) * 2,\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 </div>\n );\n })}\n </div>\n );\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 (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 (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 } from \"react\";\nimport { EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Task } from \"../../types/public-types\";\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 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 selectedTaskIds?: string[];\n onTaskSelectionChange?: (taskIds: string[]) => void;\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 leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n selectedTaskIds?: string[];\n onTaskSelectionChange?: (taskIds: string[]) => void;\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 leafTasks,\n selectedTask,\n setSelectedTask,\n onExpanderClick,\n locale,\n ganttHeight,\n taskListRef,\n horizontalContainerClass,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n selectedTaskIds,\n onTaskSelectionChange,\n}) => {\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n const headerProps = {\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n };\n const selectedTaskId = selectedTask ? selectedTask.id : \"\";\n\n const tableProps = {\n rowHeight,\n rowWidth,\n fontFamily,\n fontSize,\n tasks,\n leafTasks,\n locale,\n selectedTaskId: selectedTaskId,\n setSelectedTask,\n onExpanderClick,\n taskLabelRenderer,\n selectedTaskIds,\n onTaskSelectionChange,\n };\n\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 <TaskListTable {...tableProps} />\n </div>\n </div>\n );\n};\n","import React, { ReactChild } from \"react\";\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 dates: Date[];\n svgWidth: number;\n rowHeight: number;\n columnWidth: number;\n todayColor: string;\n rtl: boolean;\n};\nexport const GridBody: React.FC<GridBodyProps> = ({\n tasks,\n dates,\n rowHeight,\n svgWidth,\n columnWidth,\n todayColor,\n rtl,\n}) => {\n let y = 0;\n const gridRows: ReactChild[] = [];\n const rowLines: ReactChild[] = [\n <line\n key=\"RowLineFirst\"\n x=\"0\"\n y1={0}\n x2={svgWidth}\n y2={0}\n className={styles.gridRowLine}\n />,\n ];\n \n for (const task of tasks) {\n const isDarkerRow = task.type === \"milestone\";\n gridRows.push(\n <rect\n key={\"Row\" + task.id}\n x=\"0\"\n y={y}\n width={svgWidth}\n height={rowHeight}\n className={isDarkerRow ? styles.darkerGridRow : styles.gridRow}\n />\n );\n rowLines.push(\n <line\n key={\"RowLine\" + task.id}\n x=\"0\"\n y1={y + rowHeight}\n x2={svgWidth}\n y2={y + rowHeight}\n className={styles.gridRowLine}\n />\n );\n y += rowHeight;\n }\n\n const now = new Date();\n let tickX = 0;\n const ticks: ReactChild[] = [];\n let today: ReactChild = <rect />;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n ticks.push(\n <line\n key={date.getTime()}\n x1={tickX}\n y1={0}\n x2={tickX}\n y2={y}\n className={styles.gridTick}\n />\n );\n if (\n (i + 1 !== dates.length &&\n date.getTime() < now.getTime() &&\n dates[i + 1].getTime() >= now.getTime()) ||\n // if current date is last\n (i !== 0 &&\n i + 1 === dates.length &&\n date.getTime() < now.getTime() &&\n addToDate(\n date,\n date.getTime() - dates[i - 1].getTime(),\n \"millisecond\"\n ).getTime() >= now.getTime())\n ) {\n today = (\n <rect\n x={tickX}\n y={0}\n width={columnWidth}\n height={y}\n fill={todayColor}\n />\n );\n }\n // rtl for today\n if (\n rtl &&\n i + 1 !== dates.length &&\n date.getTime() >= now.getTime() &&\n dates[i + 1].getTime() < now.getTime()\n ) {\n today = (\n <rect\n x={tickX + columnWidth}\n y={0}\n width={columnWidth}\n height={y}\n fill={todayColor}\n />\n );\n }\n tickX += columnWidth;\n }\n return (\n <g className=\"gridBody\">\n <g className=\"rows\">{gridRows}</g>\n <g className=\"rowLines\">{rowLines}</g>\n <g className=\"ticks\">{ticks}</g>\n <g className=\"today\">{today}</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 = textAnchor === \"start\" ? styles.textAnchorStart : textAnchor === \"middle\" ? styles.textAnchorMiddle : 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 getDaysInMonth,\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 = `${getLocalDayOfWeek(date, locale, \"short\")}, ${date\n .getDate()\n .toString()}`;\n\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(date, locale)} ${date.getFullYear()}`;\n\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 columnWidth * (i + 1) -\n getDaysInMonth(date.getMonth(), date.getFullYear()) *\n columnWidth *\n 0.5\n }\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 className=\"calendar\" fontSize={fontSize} fontFamily={fontFamily} width={columnWidth * dateSetup.dates.length}>\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\";\n\ntype ArrowProps = {\n taskFrom: BarTask;\n taskTo: BarTask;\n rowHeight: number;\n taskHeight: number;\n arrowIndent: number;\n rtl: boolean;\n arrowColor: string;\n};\nexport const Arrow: React.FC<ArrowProps> = ({\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n rtl,\n arrowColor,\n}) => {\n let path: string;\n let trianglePoints: string;\n if (rtl) {\n [path, trianglePoints] = drownPathAndTriangleRTL(\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent\n );\n } else {\n [path, trianglePoints] = drownPathAndTriangle(\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent\n );\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 drownPathAndTriangle = (\n taskFrom: BarTask,\n taskTo: BarTask,\n rowHeight: number,\n taskHeight: number,\n arrowIndent: number\n) => {\n let taskToStart, taskFromEnd;\n if (taskTo.x1 > 0 && taskTo.actualx1 > 0) {\n taskToStart = Math.min(taskTo.x1, taskTo.actualx1);\n } else if (taskTo.x1 > 0) taskToStart = taskTo.x1;\n else if (taskTo.actualx1 > 0) taskToStart = taskTo.actualx1;\n else taskToStart = 0;\n\n if (taskFrom.x2 > 0 && taskFrom.actualx2 > 0) {\n taskFromEnd = Math.max(taskFrom.x2, taskFrom.actualx2);\n } else if (taskFrom.x2 > 0) taskFromEnd = taskFrom.x2;\n else if (taskFrom.actualx2 > 0) taskFromEnd = taskFrom.actualx2;\n else taskFromEnd = 0;\n\n const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\n const taskToEndPosition = taskTo.y + taskHeight / 2;\n const taskFromEndPosition = taskFromEnd + arrowIndent * 2;\n const taskFromHorizontalOffsetValue =\n taskFromEndPosition < taskToStart ? \"\" : `H ${taskToStart - arrowIndent}`;\n const taskToHorizontalOffsetValue =\n taskFromEndPosition > taskToStart\n ? arrowIndent\n : taskToStart - taskFromEnd - arrowIndent;\n\n const path = `M ${taskFromEnd} ${taskFrom.y + taskHeight / 2} \n h ${arrowIndent} \n v ${(indexCompare * rowHeight) / 2} \n ${taskFromHorizontalOffsetValue}\n V ${taskToEndPosition} \n h ${taskToHorizontalOffsetValue}`;\n\n const trianglePoints = `${taskToStart},${taskToEndPosition} \n ${taskToStart - 5},${taskToEndPosition - 5} \n ${taskToStart - 5},${taskToEndPosition + 5}`;\n return [path, trianglePoints];\n};\n\nconst drownPathAndTriangleRTL = (\n taskFrom: BarTask,\n taskTo: BarTask,\n rowHeight: number,\n taskHeight: number,\n arrowIndent: number\n) => {\n const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\n const taskToEndPosition = taskTo.y + taskHeight / 2;\n const taskFromEndPosition = taskFrom.x1 - arrowIndent * 2;\n const taskFromHorizontalOffsetValue =\n taskFromEndPosition > taskTo.x2 ? \"\" : `H ${taskTo.x2 + arrowIndent}`;\n const taskToHorizontalOffsetValue =\n taskFromEndPosition < taskTo.x2\n ? -arrowIndent\n : taskTo.x2 - taskFrom.x1 + arrowIndent;\n\n const path = `M ${taskFrom.x1} ${taskFrom.y + taskHeight / 2} \n h ${-arrowIndent} \n v ${(indexCompare * rowHeight) / 2} \n ${taskFromHorizontalOffsetValue}\n V ${taskToEndPosition} \n h ${taskToHorizontalOffsetValue}`;\n\n const trianglePoints = `${taskTo.x2},${taskToEndPosition} \n ${taskTo.x2 + 5},${taskToEndPosition + 5} \n ${taskTo.x2 + 5},${taskToEndPosition - 5}`;\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]\n );\n if (\n dependence !== -1 &&\n task.start.getTime() > 0 &&\n task.end.getTime() > 0\n )\n barTasks[dependence].barChildren.push(task);\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\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.start, 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 return 0;\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 => t.dependencies && t.dependencies.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 && task.x2)\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 && task.actualx2) {\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);\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 setTaskItem([<Milestone {...props} />]);\n break;\n case \"project\":\n setTaskItem([<Project {...props} />]);\n break;\n case \"smalltask\":\n setTaskItem([<BarSmall {...props} />]);\n break;\n default:\n {\n let taskItem = [];\n if (task.x1 && task.x2) {\n taskItem.push(<Bar {...props} type={\"planned\"} />);\n }\n if (task.actualx1 && task.actualx2) {\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 { 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\";\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 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 setGanttEvent,\n setFailedTask,\n setSelectedTask,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\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 return (\n <g className=\"content\">\n <g className=\"arrows\">\n {tasks.map(_task => {\n const task = _task.start.getTime()>0 && _task.end.getTime()>0 ?_task : undefined\n if(!task){\n return <g key={_task.id} style={{ height: taskHeight }} />;\n }\n return task.barChildren.map(child => {\n return (\n <Arrow\n key={`Arrow from ${task.id} to ${tasks[child.index].id}`}\n taskFrom={task}\n taskTo={tasks[child.index]}\n rowHeight={rowHeight}\n taskHeight={taskHeight}\n arrowIndent={arrowIndent}\n rtl={rtl}\n arrowColor={task.criticalPathArrows?.find(arrow => arrow.taskId == tasks[child.index].id)?.arrowColor || \"#808080\"}\n />\n );\n });\n })} \n </g>\n <g className=\"bar\" fontFamily={fontFamily} fontSize={fontSize}>\n {tasks.map(_task => {\n const task = _task.start.getTime()>0 && _task.end.getTime()>0 ?_task : undefined\n if(!task){\n return <g key={_task.id} style={{ height: taskHeight }} />;\n }\n return (\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 key={task.id}\n isSelected={!!selectedTask && task.id === selectedTask.id}\n rtl={rtl}\n />\n );\n })}\n </g>\n </g>\n );\n};\n","import React, { useRef, useEffect } from \"react\";\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 };\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={barProps.rowHeight * barProps.tasks.length}\n fontFamily={barProps.fontFamily}\n ref={ganttSVGRef}\n >\n <Grid {...gridProps} />\n <TaskGanttContent {...newBarProps} />\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 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 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 taskLabelRenderer,\n selectedTaskIds,\n onTaskSelectionChange,\n}) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const [dateSetup, setDateSetup] = useState<DateSetup>(() => {\n const [startDate, endDate] = ganttDateRange(tasks, viewMode, preStepsCount);\n return { viewMode, dates: seedDates(startDate, endDate, viewMode) };\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 [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 = dateSetup.dates.length * columnWidth;\n const ganttFullHeight = barTasks.length * rowHeight;\n\n const [scrollY, setScrollY] = useState(0);\n const [scrollX, setScrollX] = useState(-1);\n const [ignoreScrollEvent, setIgnoreScrollEvent] = useState(false);\n\n // task change events\n useEffect(() => {\n let filteredTasks: Task[];\n if (onExpanderClick) {\n filteredTasks = removeHiddenTasks(tasks);\n } else {\n filteredTasks = tasks;\n }\n filteredTasks = filteredTasks.sort(sortTasks);\n const [startDate, endDate] = ganttDateRange(\n filteredTasks,\n viewMode,\n preStepsCount\n );\n let newDates = seedDates(startDate, endDate, viewMode);\n if (rtl) {\n newDates = newDates.reverse();\n if (scrollX === -1) {\n setScrollX(newDates.length * columnWidth);\n }\n }\n setDateSetup({ dates: newDates, viewMode });\n\n let [primaryPath, secondaryPath] = getCriticalPaths(leafTasks);\n\n // Color the paths.\n uncolorAll(tasks);\n colorPath(secondaryPath, \"#00ff00\", tasks);\n colorPath(primaryPath, \"#ff0000\", tasks);\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 }, [\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 scrollX,\n onExpanderClick,\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 // subscribe if scroll is necessary\n wrapperRef.current?.addEventListener(\"wheel\", handleWheel, {\n passive: false,\n });\n return () => {\n wrapperRef.current?.removeEventListener(\"wheel\", handleWheel);\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 * 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 rowHeight,\n dates: dateSetup.dates,\n todayColor,\n rtl,\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 };\n\n const tableProps: TaskListProps = {\n rowHeight,\n rowWidth: listCellWidth,\n fontFamily,\n fontSize,\n tasks: barTasks,\n leafTasks,\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 selectedTaskIds,\n onTaskSelectionChange,\n };\n return (\n <div>\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 <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],\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]]?.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 // Select the best.\n // O(num vertices)\n let primaryLeaf: string | undefined;\n let primaryDuration = 0;\n for (let i = 0; i < sortedTaskList.length; i++) {\n let newDuration =\n taskMap[sortedTaskList[i]].end -\n taskMap[sortedTaskList[i]].task.start.getTime();\n // let newDuration = taskMap[sortedTaskList[i]].duration;\n if (primaryDuration < newDuration) {\n primaryLeaf = sortedTaskList[i];\n primaryDuration = newDuration;\n }\n }\n // Build the best path.\n // O(num edges)\n let primaryPath = [];\n while (primaryLeaf !== undefined) {\n // Disqualify this task from being selected by second best path.\n taskMap[primaryLeaf].excluded = true;\n // Add to path.\n primaryPath.push(taskMap[primaryLeaf].task);\n primaryLeaf = taskMap[primaryLeaf].next;\n }\n\n // Select the second best.\n // O(num vertices)\n let secondaryLeaf: string | undefined;\n let secondaryDuration = 0;\n for (let i = 0; i < sortedTaskList.length; i++) {\n if (taskMap[sortedTaskList[i]].excluded) continue;\n let newDuration =\n taskMap[sortedTaskList[i]].end -\n taskMap[sortedTaskList[i]].task.start.getTime();\n // let newDuration = taskMap[sortedTaskList[i]].duration;\n if (secondaryDuration < newDuration) {\n secondaryLeaf = sortedTaskList[i];\n secondaryDuration = newDuration;\n }\n }\n // Build the two paths.\n // O(num edges)\n let secondaryPath = [];\n while (secondaryLeaf !== undefined) {\n secondaryPath.push(taskMap[secondaryLeaf].task);\n secondaryLeaf = taskMap[secondaryLeaf].next;\n }\n\n return [primaryPath, secondaryPath];\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].end = task.end.getTime();\n for (let j = 0; j < dependents.length; j++) {\n let newDependentEnd = taskMap[dependents[j]].end;\n if (newDependentEnd > taskMap[taskID].end) {\n taskMap[taskID].next = dependents[j];\n taskMap[taskID].end = newDependentEnd;\n }\n }\n\n /*\n taskMap[taskID].duration = 0;\n for(let j = 0; j < dependents.length; j++) {\n let newDependentDuration = taskMap[dependents[j]].duration;\n if(newDependentDuration > taskMap[taskID].duration) {\n taskMap[taskID].next = dependents[j];\n taskMap[taskID].duration = newDependentDuration;\n }\n }\n taskMap[taskID].duration += task.end.getTime() - task.start.getTime();\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[]) {\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) arrow.arrowColor = color;\n // Else, add the new colored arrow to the list.\n else arrows.push({ taskId: path[i + 1].id, arrowColor: color });\n taskFromTasks.criticalPathArrows = arrows;\n }\n }\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","getDaysInMonth","year","TaskListHeaderDefault","headerHeight","fontFamily","fontSize","rowWidth","React","className","styles","ganttTable","style","ganttTable_Header","height","ganttTable_HeaderItem","minWidth","parseInt","maxWidth","ganttTable_HeaderSeparator","marginTop","title","localeDateStringCache","toLocaleDateStringFactory","dateTimeOptions","lds","toLocaleDateString","TaskListTableDefault","rowHeight","leafTasks","onExpanderClick","taskLabelRenderer","t","name","selectedTaskIds","onTaskSelectionChange","useMemo","handleCheckboxChange","taskId","isChecked","newSelectedIds","filter","id","leafTaskIds","Set","map","taskListWrapper","expanderSymbol","has","hideChildren","includes","taskListTableRow","taskListCell","taskListCheckbox","type","checked","onChange","e","target","onClick","stopPropagation","taskListNameWrapper","paddingLeft","depth","taskListExpander","taskListExpanderPlaceholder","taskListText","now","color","Tooltip","rtl","svgContainerHeight","svgContainerWidth","scrollX","scrollY","arrowIndent","taskListWidth","TooltipContent","tooltipRef","useRef","relatedY","setRelatedY","useState","relatedX","setRelatedX","useEffect","current","tooltipHeight","offsetHeight","tooltipWidth","offsetWidth","newRelatedY","index","newRelatedX","x1","x2","tooltipLeftmostPoint","actualx2","fullChartWidth","actualx1","tooltipLowerPoint","ref","tooltipDetailsContainer","tooltipDetailsContainerHidden","left","top","StandardTooltipContent","tooltipDefaultContainer","tooltipDefaultContainerParagraph","progress","VerticalScroll","scroll","ganttHeight","ganttFullHeight","onScroll","scrollRef","scrollTop","marginLeft","marginRight","width","TaskList","selectedTask","setSelectedTask","taskListRef","horizontalContainerClass","TaskListHeader","TaskListTable","horizontalContainerRef","headerProps","selectedTaskId","tableProps","GridBody","svgWidth","columnWidth","todayColor","y","gridRows","rowLines","x","y1","y2","gridRowLine","isDarkerRow","darkerGridRow","gridRow","tickX","ticks","today","i","gridTick","fill","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","hour","getCalendarValuesForHour","displayDate","topPosition","calendarHeader","Arrow","taskFrom","taskTo","taskHeight","arrowColor","path","trianglePoints","drownPathAndTriangleRTL","drownPathAndTriangle","strokeWidth","d","stroke","points","taskToStart","taskFromEnd","min","max","indexCompare","taskToEndPosition","taskFromEndPosition","taskFromHorizontalOffsetValue","taskToHorizontalOffsetValue","convertToBarTasks","barCornerRadius","handleWidth","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","projectProgressColor","projectProgressSelectedColor","projectBackgroundColor","projectBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","barTasks","convertToBarTask","dependencies","j","dependence","findIndex","barChildren","barTask","convertToMilestone","convertToBar","progressStartWidth","progressEndWidth","taskXCoordinateRTL","taskXCoordinate","abs","typeInternal","progressWidth","progressX","progressWithByParams","taskYCoordinate","backgroundColor","backgroundSelectedColor","progressColor","progressSelectedColor","rotatedHeight","undefined","xDate","remainderMillis","percentOfInterval","taskX1","taskX2","getProgressPoint","taskY","point","join","startByX","xStep","steps","round","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","children","getChildren","taskList","project","taskChildren","forEach","concat","sortTasks","taskA","taskB","orderA","displayOrder","Number","MAX_VALUE","orderB","BarDisplay","isSelected","onMouseDown","getProcessColor","getBarColor","ry","rx","criticalPathColor","taskProgressColor","BarDateHandle","barHandle","BarProgressHandle","Bar","isProgressChangeable","isDateChangeable","onEventStart","progressPoint","handleHeight","barWrapper","tabIndex","startProgressWidth","endProgressWidth","BarSmall","Milestone","transform","milestoneWrapper","milestoneBackground","Project","barColor","processColor","projectWith","projectLeftTriangle","projectRightTriangle","projectWrapper","projectBackground","projectTop","TaskItem","isDelete","taskItem","setTaskItem","onKeyDown","onMouseEnter","onMouseLeave","onDoubleClick","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","_task","child","criticalPathArrows","find","arrow","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","scrollLeft","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","Gantt","listCellWidth","barFill","viewDate","onSelect","wrapperRef","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","failedTask","setScrollY","setScrollX","ignoreScrollEvent","setIgnoreScrollEvent","filteredTasks","sort","newDates","reverse","getCriticalPaths","primaryPath","secondaryPath","uncolorAll","colorPath","prevStateTask","newTaskList","handleWheel","shiftKey","deltaX","scrollMove","deltaY","newScrollX","newScrollY","passive","handleScrollY","currentTarget","handleScrollX","handleKeyDown","isX","handleSelectedTask","newSelectedTask","oldSelectedTask","handleExpanderClick","wrapper","topologicalOrderingHelper","taskID","taskMap","sortedTaskList","finished","started","successVal","dependents","computeCriticalPath","primaryLeaf","primaryDuration","newDuration","excluded","next","secondaryLeaf","secondaryDuration","newDependentEnd","longestIDLength","longestTask","startsWith","taskFromTasks","arrows"],"mappings":"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"}
|