gantt-task-react-powern 0.4.95 → 0.4.97

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/types/public-types.ts","../src/helpers/date-helper.ts","../src/components/task-list/task-list-header.tsx","../src/components/task-list/task-list-table.tsx","../src/components/other/tooltip.tsx","../src/components/other/vertical-scroll.tsx","../src/components/task-list/task-list.tsx","../src/components/grid/grid-body.tsx","../src/components/grid/grid.tsx","../src/components/calendar/top-part-of-calendar.tsx","../src/components/calendar/calendar.tsx","../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs","../src/components/other/arrow.tsx","../src/helpers/bar-helper.ts","../src/helpers/other-helper.ts","../src/components/task-item/bar/bar-display.tsx","../src/components/task-item/bar/bar-date-handle.tsx","../src/components/task-item/bar/bar-progress-handle.tsx","../src/components/task-item/bar/bar.tsx","../src/components/task-item/bar/bar-small.tsx","../src/components/task-item/milestone/milestone.tsx","../src/components/task-item/project/project.tsx","../src/components/task-item/task-item.tsx","../src/components/gantt/task-gantt-content.tsx","../src/components/gantt/task-gantt.tsx","../src/components/other/horizontal-scroll.tsx","../src/components/gantt/gantt.tsx"],"sourcesContent":["export enum ViewMode {\n Hour = \"Hour\",\n QuarterDay = \"Quarter Day\",\n HalfDay = \"Half Day\",\n Day = \"Day\",\n /** ISO-8601 week */\n Week = \"Week\",\n Month = \"Month\",\n Quarter = \"Quarter\",\n Year = \"Year\",\n}\nexport type TaskType = \"task\" | \"milestone\" | \"project\";\nexport type Dependency = \"SS\" | \"SF\" | \"FS\" | \"FF\";\n\nexport declare type DependencyType = {\n id: string;\n type: Dependency;\n};\nexport interface Task {\n id: string;\n optionalId?: string | null;\n type: TaskType;\n name: string;\n start: Date;\n end: Date;\n /**\n * From 0 to 100\n */\n progress: number;\n actualStart: Date;\n actualEnd: Date;\n criticalPathArrows?: Array<{ taskId: string; arrowColor: string ; criticalPathType: string }>;\n styles?: {\n taskProgressColor?: string;\n backgroundColor?: string;\n backgroundSelectedColor?: string;\n progressColor?: string;\n progressSelectedColor?: string;\n criticalPathColor?: string;\n };\n depth: number;\n isDisabled?: boolean;\n project?: string;\n dependencies?: DependencyType[];\n hideChildren?: boolean;\n displayOrder?: number;\n childrenCount?: number;\n}\n\nexport interface EventOption {\n /**\n * Time step value for date changes.\n */\n timeStep?: number;\n /**\n * Invokes on bar select on unselect.\n */\n onSelect?: (task: Task, isSelected: boolean) => void;\n /**\n * Invokes on bar double click.\n */\n onDoubleClick?: (task: Task) => void;\n /**\n * Invokes on bar click.\n */\n onClick?: (task: Task) => void;\n /**\n * Invokes on end and start time change. Chart undoes operation if method return false or error.\n */\n onDateChange?: (\n task: Task,\n children: Task[]\n ) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on progress change. Chart undoes operation if method return false or error.\n */\n onProgressChange?: (\n task: Task,\n children: Task[]\n ) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on delete selected task. Chart undoes operation if method return false or error.\n */\n onDelete?: (task: Task) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on expander on task list\n */\n onExpanderClick?: (task: Task) => void;\n /**\n * Invokes when tasks are multi-selected via checkboxes\n */\n onMultiSelect?: (tasks: Task[]) => void;\n}\n\nexport interface DisplayOption {\n viewMode?: ViewMode;\n viewDate?: Date;\n preStepsCount?: number;\n /**\n * Specifies the month name language. Able formats: ISO 639-2, Java Locale\n */\n locale?: string;\n rtl?: boolean;\n}\n\nexport interface StylingOption {\n headerHeight?: number;\n columnWidth?: number;\n listCellWidth?: string;\n rowHeight?: number;\n ganttHeight?: number;\n barCornerRadius?: number;\n handleWidth?: number;\n fontFamily?: string;\n fontSize?: string;\n /**\n * How many of row width can be taken by task.\n * From 0 to 100\n */\n barFill?: number;\n barProgressColor?: string;\n barProgressSelectedColor?: string;\n barBackgroundColor?: string;\n barBackgroundSelectedColor?: string;\n projectProgressColor?: string;\n projectProgressSelectedColor?: string;\n projectBackgroundColor?: string;\n projectBackgroundSelectedColor?: string;\n milestoneBackgroundColor?: string;\n milestoneBackgroundSelectedColor?: string;\n arrowColor?: string;\n arrowIndent?: number;\n todayColor?: string;\n weekendColor?: string;\n TooltipContent?: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n }>;\n TaskListHeader?: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n }>;\n TaskListTable?: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n selectedTaskId: string;\n /**\n * Sets selected task by id\n */\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n }>;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n taskProgressColor?: string;\n}\n\nexport interface GanttProps extends EventOption, DisplayOption, StylingOption {\n tasks: Task[];\n leafTasks?: Task[];\n scheduleType: string;\n startDate?: Date;\n endDate?: Date;\n}\n","import { Task, ViewMode } from \"../types/public-types\";\nimport DateTimeFormatOptions = Intl.DateTimeFormatOptions;\nimport DateTimeFormat = Intl.DateTimeFormat;\n\ntype DateHelperScales =\n | \"year\"\n | \"quarter\"\n | \"month\"\n | \"day\"\n | \"hour\"\n | \"minute\"\n | \"second\"\n | \"millisecond\";\n\nconst intlDTCache = {};\nexport const getCachedDateTimeFormat = (\n locString: string | string[],\n opts: DateTimeFormatOptions = {}\n): DateTimeFormat => {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n};\n\nexport const addToDate = (\n date: Date,\n quantity: number,\n scale: DateHelperScales\n) => {\n const newDate = new Date(\n date.getFullYear() + (scale === \"year\" ? quantity : 0),\n date.getMonth() + (scale === \"month\" ? quantity : 0),\n date.getDate() + (scale === \"day\" ? quantity : 0),\n date.getHours() + (scale === \"hour\" ? quantity : 0),\n date.getMinutes() + (scale === \"minute\" ? quantity : 0),\n date.getSeconds() + (scale === \"second\" ? quantity : 0),\n date.getMilliseconds() + (scale === \"millisecond\" ? quantity : 0)\n );\n return newDate;\n};\n\nexport const startOfDate = (date: Date, scale: DateHelperScales) => {\n const scores = [\n \"millisecond\",\n \"second\",\n \"minute\",\n \"hour\",\n \"day\",\n \"month\",\n \"quarter\",\n \"year\",\n ];\n\n const shouldReset = (_scale: DateHelperScales) => {\n const maxScore = scores.indexOf(scale);\n return scores.indexOf(_scale) <= maxScore;\n };\n const newDate = new Date(\n date.getFullYear(),\n shouldReset(\"year\") ? 0 : date.getMonth(),\n shouldReset(\"month\") ? 1 : date.getDate(),\n shouldReset(\"day\") ? 0 : date.getHours(),\n shouldReset(\"hour\") ? 0 : date.getMinutes(),\n shouldReset(\"minute\") ? 0 : date.getSeconds(),\n shouldReset(\"second\") ? 0 : date.getMilliseconds()\n );\n return newDate;\n};\n\nexport const ganttDateRange = (\n tasks: Task[],\n viewMode: ViewMode,\n preStepsCount: number\n) => {\n let newStartDate: Date =\n tasks[0]?.start.getTime() !== 0\n ? tasks[0]?.start || new Date()\n : new Date();\n let newEndDate: Date =\n tasks[0]?.end.getTime() !== 0 ? tasks[0]?.end || new Date() : new Date();\n\n for (const task of tasks) {\n if (task.start && task.start.getTime() !== 0 && task.start < newStartDate) {\n newStartDate = task.start;\n }\n if (task.end && task.end.getTime() !== 0 && task.end > newEndDate) {\n newEndDate = task.end;\n }\n if (\n task.actualStart &&\n task.actualStart.getTime() !== 0 &&\n task.actualStart < newStartDate\n ) {\n newStartDate = task.actualStart;\n }\n if (\n task.actualEnd &&\n task.actualEnd.getTime() !== 0 &&\n task.actualEnd > newEndDate\n ) {\n newEndDate = task.actualEnd;\n }\n }\n\n switch (viewMode) {\n case ViewMode.Year:\n newStartDate = addToDate(newStartDate, -1, \"year\");\n newStartDate = startOfDate(newStartDate, \"year\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Quarter:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"year\");\n newStartDate = startOfDate(newStartDate, \"year\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"quarter\");\n break;\n case ViewMode.Month:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"month\");\n newStartDate = startOfDate(newStartDate, \"month\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Week:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(\n getMonday(newStartDate),\n -7 * preStepsCount,\n \"day\"\n );\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1.5, \"month\");\n break;\n case ViewMode.Day:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 19, \"day\");\n break;\n case ViewMode.QuarterDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 66, \"hour\"); // 24(1 day)*3 - 6\n break;\n case ViewMode.HalfDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 108, \"hour\"); // 24(1 day)*5 - 12\n break;\n case ViewMode.Hour:\n newStartDate = startOfDate(newStartDate, \"hour\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"hour\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1, \"day\");\n break;\n }\n return [newStartDate, newEndDate];\n};\n\nexport const seedDates = (\n startDate: Date,\n endDate: Date,\n viewMode: ViewMode\n) => {\n let currentDate: Date = new Date(startDate);\n const dates: Date[] = [currentDate];\n while (currentDate < endDate) {\n switch (viewMode) {\n case ViewMode.Year:\n currentDate = addToDate(currentDate, 1, \"year\");\n break;\n case ViewMode.Quarter:\n currentDate = addToDate(currentDate, 3, \"month\");\n break;\n case ViewMode.Month:\n currentDate = addToDate(currentDate, 1, \"month\");\n break;\n case ViewMode.Week:\n currentDate = addToDate(currentDate, 7, \"day\");\n break;\n case ViewMode.Day:\n currentDate = addToDate(currentDate, 1, \"day\");\n break;\n case ViewMode.HalfDay:\n currentDate = addToDate(currentDate, 12, \"hour\");\n break;\n case ViewMode.QuarterDay:\n currentDate = addToDate(currentDate, 6, \"hour\");\n break;\n case ViewMode.Hour:\n currentDate = addToDate(currentDate, 1, \"hour\");\n break;\n }\n dates.push(currentDate);\n }\n return dates;\n};\n\nexport const getLocaleMonth = (date: Date, locale: string) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n month: \"long\",\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\nexport const getLocalDayOfWeek = (\n date: Date,\n locale: string,\n format?: \"long\" | \"short\" | \"narrow\" | undefined\n) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n weekday: format,\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\n/**\n * Returns monday of current week\n * @param date date for modify\n */\nconst getMonday = (date: Date) => {\n const day = date.getDay();\n const diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\n\nexport const getWeekNumberISO8601 = (date: Date) => {\n const tmpDate = new Date(date.valueOf());\n const dayNumber = (tmpDate.getDay() + 6) % 7;\n tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);\n const firstThursday = tmpDate.valueOf();\n tmpDate.setMonth(0, 1);\n if (tmpDate.getDay() !== 4) {\n tmpDate.setMonth(0, 1 + ((4 - tmpDate.getDay() + 7) % 7));\n }\n const weekNumber = (\n 1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 604800000)\n ).toString();\n\n if (weekNumber.length === 1) {\n return `0${weekNumber}`;\n } else {\n return weekNumber;\n }\n};\n\nexport const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n};\n","import React from \"react\";\nimport styles from \"./task-list-header.module.css\";\n\nexport const TaskListHeaderDefault: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n}> = ({ headerHeight, fontFamily, fontSize, rowWidth, scheduleType, allSelected, onSelectAll }) => {\n return (\n <div\n className={styles.ganttTable}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n <div\n className={styles.ganttTable_Header}\n style={{\n height: headerHeight - 2,\n }}\n >\n {onSelectAll && (\n <div>\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <input \n type=\"checkbox\" \n checked={allSelected}\n onChange={(e) => onSelectAll(e.target.checked)} \n />\n </div>\n </div>\n )}\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n WBS\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n ID\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n >\n Task\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Planned Start\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Planned End\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Actual Start\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Actual End\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport 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 scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n}> = ({\n rowHeight,\n rowWidth,\n tasks,\n scheduleType,\n leafTasks,\n fontFamily,\n fontSize,\n locale,\n onExpanderClick,\n selectedTasks = [],\n onTaskSelect,\n taskLabelRenderer = t => \" \" + t.name,\n}) => {\n const toLocaleDateString = useMemo(\n () => toLocaleDateStringFactory(locale),\n [locale]\n );\n const leafTaskIds = useMemo(\n () => new Set(leafTasks.map(t => t.id)),\n [leafTasks]\n );\n 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) || t.type=== \"milestone\")) {\n if (t.hideChildren === false) {\n expanderSymbol = \"▼\";\n } else if (t.hideChildren === true) {\n expanderSymbol = \"►\";\n }\n }\n\n const isSelected = selectedTasks.includes(t.id);\n\n return (\n <div\n className={\n t.type === \"milestone\"\n ? styles.taskListMilestoneRow\n : scheduleType === \"lookAhead\"\n ? styles.taskListLookAheadRow\n : styles.taskListTableRow\n }\n style={{ height: rowHeight }}\n key={`${t.id}row`}\n >\n {onTaskSelect && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <div className={styles.taskListText} style={{ \n display: \"flex\", \n justifyContent: \"center\", \n alignItems: \"center\",\n height: \"100%\",\n paddingLeft: \"0\",\n paddingRight: \"0\"\n }}>\n <input \n type=\"checkbox\" \n checked={isSelected}\n onChange={(e) => onTaskSelect(t.id, e.target.checked)}\n />\n </div>\n </div>\n )}\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.id}\n >\n <div\n className={styles.taskListNameWrapper}\n style={{ paddingLeft: `${t.depth * 4}px` }}\n >\n {!(leafTaskIds.has(t.id) || t.type=== \"milestone\") ? (\n <div\n className={styles.taskListExpander}\n onClick={() => onExpanderClick(t)}\n >\n \n {expanderSymbol}\n </div>\n ) : (\n <div className={styles.taskListExpanderPlaceholder}></div>\n )}\n <div className={styles.taskListText}>\n {t.id}{\" \"}\n {t.actualEnd.getTime() > 0 &&\n t.actualEnd.getTime() < Date.now() ? (\n <span\n title=\"Task Complete\"\n style={{ color: \"limegreen\", fontSize: \"16px\" }}\n >\n ✔\n </span>\n ) : (\n \"\"\n )}\n </div>\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.optionalId?t.optionalId:\"\"}\n >\n {t.optionalId}\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n title={t.name}\n >\n <div className={styles.taskListText}>{taskLabelRenderer(t)}</div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{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 &nbsp;{toLocaleDateString(t.end, dateTimeOptions)}\n </div>\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{toLocaleDateString(t.actualStart, dateTimeOptions)}\n </div>\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{toLocaleDateString(t.actualEnd, dateTimeOptions)}\n </div>\n </div>\n )}\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, useState } 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 scheduleType: string;\n leafTasks: Task[];\n taskListRef: React.RefObject<HTMLDivElement>;\n horizontalContainerClass?: string;\n selectedTask: BarTask | undefined;\n setSelectedTask: (task: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n TaskListHeader: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n }>;\n TaskListTable: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n }>;\n} & EventOption;\n\nexport const TaskList: React.FC<TaskListProps> = ({\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n rowHeight,\n scrollY,\n tasks,\n scheduleType,\n leafTasks,\n selectedTask,\n setSelectedTask,\n onExpanderClick,\n locale,\n ganttHeight,\n taskListRef,\n horizontalContainerClass,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n}) => {\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const [selectedTasks, setSelectedTasks] = useState<string[]>([]);\n const prevSelectedTasksRef = useRef<string[]>([]);\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (\n onMultiSelect &&\n JSON.stringify(prevSelectedTasksRef.current) !==\n JSON.stringify(selectedTasks)\n ) {\n const selectedTaskObjects = tasks.filter(task =>\n selectedTasks.includes(task.id)\n );\n prevSelectedTasksRef.current = [...selectedTasks];\n onMultiSelect(selectedTaskObjects);\n }\n }, [selectedTasks, tasks, onMultiSelect]);\n\n const handleTaskSelect = (taskId: string, selected: boolean) => {\n if (selected) {\n setSelectedTasks(prev => [...prev, taskId]);\n } else {\n setSelectedTasks(prev => prev.filter(id => id !== taskId));\n }\n };\n\n const handleSelectAll = (selected: boolean) => {\n if (selected) {\n setSelectedTasks(tasks.map(task => task.id));\n } else {\n setSelectedTasks([]);\n }\n };\n\n const headerProps = {\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n scheduleType,\n allSelected: tasks.length > 0 && selectedTasks.length === tasks.length,\n onSelectAll: onMultiSelect ? handleSelectAll : undefined,\n };\n const selectedTaskId = selectedTask ? selectedTask.id : \"\";\n\n const tableProps = {\n rowHeight,\n rowWidth,\n fontFamily,\n fontSize,\n tasks,\n leafTasks,\n scheduleType,\n locale,\n selectedTaskId: selectedTaskId,\n setSelectedTask,\n onExpanderClick,\n selectedTasks: onMultiSelect ? selectedTasks : undefined,\n onTaskSelect: onMultiSelect ? handleTaskSelect : undefined,\n taskLabelRenderer,\n };\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 scheduleType: string;\n dates: Date[];\n svgWidth: number;\n rowHeight: number;\n columnWidth: number;\n todayColor: string;\n weekendColor: string;\n rtl: boolean;\n};\nexport const GridBody: React.FC<GridBodyProps> = ({\n tasks,\n scheduleType,\n dates,\n rowHeight,\n svgWidth,\n columnWidth,\n todayColor,\n weekendColor,\n rtl,\n}) => {\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={\n isDarkerRow\n ? styles.darkerGridRow\n : scheduleType === \"lookAhead\"\n ? styles.gridRowLookAhead\n : styles.gridRow\n }\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 let weekend: ReactChild[] = [];\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 if (date.getDay() === 6 || date.getDay() === 0) {\n weekend.push(\n <rect\n x={tickX}\n y={0}\n width={columnWidth}\n height={y}\n fill={weekendColor}\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 {scheduleType === \"lookAhead\" && <g className=\"weekend\">{weekend}</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 =\n textAnchor === \"start\"\n ? styles.textAnchorStart\n : textAnchor === \"middle\"\n ? styles.textAnchorMiddle\n : styles.textAnchorEnd;\n return (\n <g className=\"calendarTop\">\n <line\n x1={x1Line}\n y1={y1Line}\n x2={x1Line}\n y2={y2Line}\n className={styles.calendarTopTick}\n key={value + \"line\"}\n />\n <text\n key={value + \"text\"}\n y={yText}\n x={xText}\n className={`${styles.calendarTopText} ${textAnchorClass}`}\n >\n {value}\n </text>\n </g>\n );\n};\n","import React, { ReactChild } from \"react\";\nimport { ViewMode } from \"../../types/public-types\";\nimport { TopPartOfCalendar } from \"./top-part-of-calendar\";\nimport {\n getCachedDateTimeFormat,\n getLocalDayOfWeek,\n getLocaleMonth,\n getWeekNumberISO8601,\n} from \"../../helpers/date-helper\";\nimport { DateSetup } from \"../../types/date-setup\";\nimport styles from \"./calendar.module.css\";\n\nexport type CalendarProps = {\n dateSetup: DateSetup;\n locale: string;\n viewMode: ViewMode;\n rtl: boolean;\n headerHeight: number;\n columnWidth: number;\n fontFamily: string;\n fontSize: string;\n};\n\nexport const Calendar: React.FC<CalendarProps> = ({\n dateSetup,\n locale,\n viewMode,\n rtl,\n headerHeight,\n columnWidth,\n fontFamily,\n fontSize,\n}) => {\n const getCalendarValuesForYear = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const bottomValue = date.getFullYear();\n bottomValues.push(\n <text\n key={date.getFullYear()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={styles.calendarBottomText}\n >\n {bottomValue}\n </text>\n );\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (6 + i + date.getFullYear() + 1) * columnWidth;\n } else {\n xText = (6 + i - date.getFullYear()) * columnWidth;\n }\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={headerHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForQuarter = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const quarter = Math.floor(date.getMonth() / 3) + 1;\n const bottomValue = `Q${quarter}`;\n bottomValues.push(\n <text\n key={`${bottomValue}-${date.getFullYear()}`}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={styles.calendarBottomText}\n >\n {bottomValue}\n </text>\n );\n\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (3 + i + quarter) * columnWidth;\n } else {\n xText = (3 + i - quarter) * columnWidth;\n }\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={headerHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n const getCalendarValuesForMonth = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n // const bottomValue = getLocaleMonth(date, locale);\n const bottomValue = date.toLocaleString(locale, { month: \"short\" });\n bottomValues.push(\n <text\n key={bottomValue + date.getFullYear()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorEnd}`}\n >\n {bottomValue}\n </text>\n );\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (6 + i + date.getMonth() + 1) * columnWidth;\n } else {\n xText = (6 + i - date.getMonth()) * columnWidth;\n }\n console.log(xText);\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n textAnchor=\"end\"\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForWeek = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n let weeksCount: number = 1;\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = dates.length - 1; i >= 0; i--) {\n const date = dates[i];\n let topValue = \"\";\n if (i === 0 || date.getMonth() !== dates[i - 1].getMonth()) {\n // top\n topValue = `${getLocaleMonth(date, locale)}, ${date.getFullYear()}`;\n }\n // bottom\n const bottomValue = `W${getWeekNumberISO8601(date)}`;\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={`${styles.calendarTopText} ${styles.textAnchorStart}`}\n >\n {bottomValue}\n </text>\n );\n\n if (topValue) {\n // if last day is new month\n if (i !== dates.length - 1) {\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i + weeksCount * columnWidth}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * i + columnWidth * weeksCount * 0.5}\n yText={topDefaultHeight * 0.9}\n textAnchor=\"start\"\n />\n );\n }\n weeksCount = 0;\n }\n weeksCount++;\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue =\n columnWidth > 55\n ? `${getLocalDayOfWeek(date, locale, \"short\")}, ${date\n .getDate()\n .toString()}`\n : `${getLocalDayOfWeek(date, locale, \"narrow\")},${date\n .getDate()\n .toString()}`;\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n >\n {bottomValue}\n </text>\n );\n if (\n i + 1 !== dates.length &&\n date.getMonth() !== dates[i + 1].getMonth()\n ) {\n const topValue = `${getLocaleMonth(\n date,\n locale\n )} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * (i + 1)}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={\n topValues.length === 0\n ? columnWidth * (i + 1) * 0.5\n : columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5\n }\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n if (i + 1 === dates.length) {\n const topValue = `${getLocaleMonth(\n date,\n locale\n )} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * (i + 1)}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForPartOfDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const ticks = viewMode === ViewMode.HalfDay ? 2 : 4;\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue = getCachedDateTimeFormat(locale, {\n hour: \"numeric\",\n }).format(date);\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n fontFamily={fontFamily}\n >\n {bottomValue}\n </text>\n );\n if (i === 0 || date.getDate() !== dates[i - 1].getDate()) {\n const topValue = `${getLocalDayOfWeek(\n date,\n locale,\n \"short\"\n )}, ${date.getDate()} ${getLocaleMonth(date, locale)}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * i + ticks * columnWidth}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * i + ticks * columnWidth * 0.5}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForHour = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue = getCachedDateTimeFormat(locale, {\n hour: \"numeric\",\n }).format(date);\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={styles.calendarBottomText}\n fontFamily={fontFamily}\n >\n {bottomValue}\n </text>\n );\n if (i !== 0 && date.getDate() !== dates[i - 1].getDate()) {\n const displayDate = dates[i - 1];\n const topValue = `${getLocalDayOfWeek(\n displayDate,\n locale,\n \"long\"\n )}, ${displayDate.getDate()} ${getLocaleMonth(displayDate, locale)}`;\n const topPosition = (date.getHours() - 24) / 2;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + displayDate.getFullYear()}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * (i + topPosition)}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n\n let topValues: ReactChild[] = [];\n let bottomValues: ReactChild[] = [];\n switch (dateSetup.viewMode) {\n case ViewMode.Year:\n [topValues, bottomValues] = getCalendarValuesForYear();\n break;\n case ViewMode.Quarter:\n [topValues, bottomValues] = getCalendarValuesForQuarter();\n break;\n case ViewMode.Month:\n [topValues, bottomValues] = getCalendarValuesForMonth();\n break;\n case ViewMode.Week:\n [topValues, bottomValues] = getCalendarValuesForWeek();\n break;\n case ViewMode.Day:\n [topValues, bottomValues] = getCalendarValuesForDay();\n break;\n case ViewMode.QuarterDay:\n case ViewMode.HalfDay:\n [topValues, bottomValues] = getCalendarValuesForPartOfDay();\n break;\n case ViewMode.Hour:\n [topValues, bottomValues] = getCalendarValuesForHour();\n }\n return (\n <g\n className=\"calendar\"\n fontSize={fontSize}\n fontFamily={fontFamily}\n width={columnWidth * dateSetup.dates.length}\n >\n <rect\n x={0}\n y={0}\n width={columnWidth * dateSetup.dates.length}\n height={headerHeight}\n className={styles.calendarHeader}\n />\n {bottomValues} {topValues}\n </g>\n );\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import React from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Dependency } from \"../../types/public-types\";\n\ntype ArrowProps = {\n taskFrom: BarTask;\n taskTo: BarTask;\n rowHeight: number;\n taskHeight: number;\n arrowIndent: number;\n arrowColor: string;\n dependencyType: Dependency;\n};\n\nexport const Arrow: React.FC<ArrowProps> = ({\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n arrowColor,\n dependencyType,\n}) => {\n let [path, trianglePoints] = drawPathAndTriangle(\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n dependencyType\n );\n\n return (\n <g className=\"arrow\">\n <path strokeWidth=\"1.5\" d={path} fill=\"none\" stroke={arrowColor} />\n <polygon points={trianglePoints} fill={arrowColor} />\n </g>\n );\n};\n\nconst drawPathAndTriangle = (\n taskFrom: BarTask,\n taskTo: BarTask,\n rowHeight: number,\n taskHeight: number,\n arrowIndent: number,\n dependencyType: Dependency\n) => {\n const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\n const taskToEndY = taskTo.y + taskHeight / 2;\n const verticalOffset = indexCompare * (rowHeight / 2);\n\n // 1️⃣ Pick start/end x-points based on dependency type\n const minX = (t: BarTask) => {\n if (t.x1 && t.actualx1) {\n return Math.min(t.x1, t.actualx1);\n } else if (t.x1) {\n return t.x1;\n } else if (t.actualx1) {\n return t.actualx1;\n } else {\n return 0;\n }\n };\n const maxX = (t: BarTask) => Math.max(t.x2 || 0, t.actualx2 || 0);\n\n let fromPoint: number, toPoint: number;\n switch (dependencyType) {\n case \"SS\":\n fromPoint = minX(taskFrom);\n toPoint = minX(taskTo);\n break;\n case \"SF\":\n fromPoint = minX(taskFrom);\n toPoint = maxX(taskTo);\n break;\n case \"FS\":\n fromPoint = maxX(taskFrom);\n toPoint = minX(taskTo);\n break;\n case \"FF\":\n fromPoint = maxX(taskFrom);\n toPoint = maxX(taskTo);\n break;\n }\n\n // 2️⃣ Helper for arrowhead points\n const arrowPoints = (x: number, y: number, right = true) =>\n right\n ? `${x},${y} ${x - 5},${y - 5} ${x - 5},${y + 5}` // Right\n : `${x},${y} ${x + 5},${y - 5} ${x + 5},${y + 5}`; // Left\n\n let path: string;\n let trianglePoints: string;\n\n // 3️⃣ Routing based on type\n switch (dependencyType) {\n case \"SS\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${\n fromPoint + Math.min(toPoint - fromPoint, 0) - 2 * arrowIndent\n }\n V ${taskToEndY}\n H ${toPoint - 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, true);\n break;\n\n case \"SF\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${fromPoint - 2 * arrowIndent}\n V ${taskFrom.y + taskHeight / 2 + verticalOffset}\n ${\n fromPoint - toPoint > 4 * arrowIndent\n ? \"\"\n : `H ${toPoint + 2 * arrowIndent}`\n }\n V ${taskToEndY}\n H ${toPoint + 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, false);\n break;\n\n case \"FS\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${fromPoint + 2 * arrowIndent}\n V ${taskFrom.y + taskHeight / 2 + verticalOffset}\n ${\n toPoint - fromPoint > 4 * arrowIndent\n ? \"\"\n : `H ${toPoint - 2 * arrowIndent}`\n }\n V ${taskToEndY}\n H ${toPoint - 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, true);\n break;\n\n case \"FF\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${\n fromPoint + Math.max(toPoint - fromPoint, 0) + 2 * arrowIndent\n }\n V ${taskToEndY}\n H ${toPoint + 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, false);\n break;\n }\n\n return [path, trianglePoints];\n};\n","import { Task } from \"../types/public-types\";\nimport { BarTask, TaskTypeInternal } from \"../types/bar-task\";\nimport { BarMoveAction } from \"../types/gantt-task-actions\";\n\nexport const convertToBarTasks = (\n tasks: Task[],\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string,\n projectProgressColor: string,\n projectProgressSelectedColor: string,\n projectBackgroundColor: string,\n projectBackgroundSelectedColor: string,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n) => {\n let barTasks = tasks.map((t, i) => {\n return convertToBarTask(\n t,\n i,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n );\n });\n\n // set dependencies\n barTasks = barTasks.map(task => {\n const dependencies = task.dependencies || [];\n for (let j = 0; j < dependencies.length; j++) {\n const dependence = barTasks.findIndex(\n value => value.id === dependencies[j].id\n );\n if (\n dependence !== -1 &&\n task.start.getTime() > 0 &&\n task.end.getTime() > 0\n ) {\n const barchild = { ...task, dependencyType: dependencies[j].type };\n barTasks[dependence].barChildren.push(barchild);\n }\n }\n return task;\n });\n\n return barTasks;\n};\n\nconst convertToBarTask = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string,\n projectProgressColor: string,\n projectProgressSelectedColor: string,\n projectBackgroundColor: string,\n projectBackgroundSelectedColor: string,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n): BarTask => {\n let barTask: BarTask;\n switch (task.type) {\n case \"milestone\":\n barTask = convertToMilestone(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n );\n break;\n case \"project\":\n barTask = convertToBar(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor\n );\n break;\n default:\n barTask = convertToBar(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor\n );\n break;\n }\n return barTask;\n};\n\nconst convertToBar = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string\n): BarTask => {\n let x1: number;\n let x2: number;\n let actualx1: number;\n let actualx2: number;\n let progressStartWidth: number;\n let progressEndWidth: number;\n if (rtl) {\n //not used\n x2 = task.start ? taskXCoordinateRTL(task.start, dates, columnWidth) : -1;\n x1 = task.end ? taskXCoordinateRTL(task.end, dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinateRTL(task.actualStart, dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinateRTL(task.actualEnd, dates, columnWidth)\n : -1;\n } else {\n x1 = task.start ? taskXCoordinate(task.start, dates, columnWidth) : -1;\n x2 = task.end ? taskXCoordinate(task.end, dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinate(task.actualStart, dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinate(task.actualEnd, dates, columnWidth)\n : -1;\n }\n\n progressStartWidth = actualx1 && x1 ? Math.abs(actualx1 - x1) : -1;\n progressEndWidth = actualx2 && x2 ? Math.abs(actualx2 - x2) : -1;\n\n let typeInternal: TaskTypeInternal = task.type;\n // if (x1 && x2) {\n // if (typeInternal === \"task\" && x2 - x1 < handleWidth * 2) {\n // typeInternal = \"smalltask\";\n // x2 = x1 + handleWidth * 2;\n // }\n // }\n const [progressWidth, progressX] = progressWithByParams(\n actualx1,\n actualx2,\n task.progress,\n rtl\n );\n\n const y = taskYCoordinate(index, rowHeight, taskHeight);\n //const hideChildren = task.type === \"project\" ? task.hideChildren : undefined;\n const hideChildren = task.hideChildren || false; //allows tasks to have chldren. benjamin\n\n const styles = {\n backgroundColor: barBackgroundColor,\n backgroundSelectedColor: barBackgroundSelectedColor,\n progressColor: barProgressColor,\n progressSelectedColor: barProgressSelectedColor,\n ...task.styles,\n };\n return {\n ...task,\n typeInternal,\n x1,\n x2,\n actualx1,\n actualx2,\n progressStartWidth,\n progressEndWidth,\n y,\n index,\n progressX,\n progressWidth,\n barCornerRadius,\n handleWidth,\n hideChildren,\n height: taskHeight,\n barChildren: [],\n styles,\n };\n};\n\nconst convertToMilestone = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n): BarTask => {\n const x =\n task.start && task.end\n ? taskXCoordinate(task.end, dates, columnWidth)\n : 0;\n const y = taskYCoordinate(index, rowHeight, taskHeight);\n\n const x1 = task.start && task.end ? x - taskHeight * 0.5 : 0;\n const x2 = task.start && task.end ? x + taskHeight * 0.5 : 0;\n\n const rotatedHeight = taskHeight / 1.414;\n const styles = {\n backgroundColor: milestoneBackgroundColor,\n backgroundSelectedColor: milestoneBackgroundSelectedColor,\n progressColor: \"\",\n progressSelectedColor: \"\",\n ...task.styles,\n };\n return {\n ...task,\n x1,\n x2,\n actualx1: x1,\n actualx2: x2,\n progressStartWidth: 0,\n progressEndWidth: 0,\n y,\n index,\n progressX: 0,\n progressWidth: 0,\n barCornerRadius,\n handleWidth,\n typeInternal: task.type,\n progress: 0,\n height: rotatedHeight,\n hideChildren: undefined,\n barChildren: [],\n styles,\n };\n};\n\nconst taskXCoordinate = (xDate: Date, dates: Date[], columnWidth: number) => {\n const index = dates.findIndex(d => d.getTime() >= xDate.getTime()) - 1;\n if (index < 0) {\n if (dates[dates.length - 1].getTime() <= xDate.getTime()) {\n return dates.length * columnWidth;\n } else {\n return 0;\n }\n }\n const remainderMillis = xDate.getTime() - dates[index].getTime();\n const percentOfInterval =\n remainderMillis / (dates[index + 1].getTime() - dates[index].getTime());\n const x = index * columnWidth + percentOfInterval * columnWidth;\n return x;\n};\nconst taskXCoordinateRTL = (\n xDate: Date,\n dates: Date[],\n columnWidth: number\n) => {\n let x = taskXCoordinate(xDate, dates, columnWidth);\n x += columnWidth;\n return x;\n};\nconst taskYCoordinate = (\n index: number,\n rowHeight: number,\n taskHeight: number\n) => {\n const y = index * rowHeight + (rowHeight - taskHeight) / 2;\n return y;\n};\n\nexport const progressWithByParams = (\n taskX1: number,\n taskX2: number,\n progress: number,\n rtl: boolean\n) => {\n const progressWidth =\n taskX2 > 0 && taskX1 > 0 ? (taskX2 - taskX1) * progress * 0.01 : 0;\n let progressX: number;\n if (rtl) {\n progressX = taskX2 > 0 ? taskX2 - progressWidth : 0;\n } else {\n progressX = taskX1 > 0 ? taskX1 : 0;\n }\n return [progressWidth, progressX];\n};\n\nexport const progressByProgressWidth = (\n progressWidth: number,\n barTask: BarTask\n) => {\n const barWidth = barTask.x2 - barTask.x1;\n const progressPercent = Math.round((progressWidth * 100) / barWidth);\n if (progressPercent >= 100) return 100;\n else if (progressPercent <= 0) return 0;\n else return progressPercent;\n};\n\n// const progressByX = (x: number, task: BarTask) => {\n// if (x >= task.x2) return 100;\n// else if (x <= task.x1) return 0;\n// else {\n// const barWidth = task.x2 - task.x1;\n// const progressPercent = Math.round(((x - task.x1) * 100) / barWidth);\n// return progressPercent;\n// }\n// };\n// const progressByXRTL = (x: number, task: BarTask) => {\n// if (x >= task.x2) return 0;\n// else if (x <= task.x1) return 100;\n// else {\n// const barWidth = task.x2 - task.x1;\n// const progressPercent = Math.round(((task.x2 - x) * 100) / barWidth);\n// return progressPercent;\n// }\n// };\n\nexport const getProgressPoint = (\n progressX: number,\n taskY: number,\n taskHeight: number\n) => {\n const point = [\n progressX - 5,\n taskY + taskHeight,\n progressX + 5,\n taskY + taskHeight,\n progressX,\n taskY + taskHeight - 8.66,\n ];\n return point.join(\",\");\n};\n\nconst startByX = (x: number, xStep: number, task: BarTask) => {\n if (x >= task.x2 - task.handleWidth * 2) {\n x = task.x2 - task.handleWidth * 2;\n }\n const steps = Math.round((x - task.x1) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.x1 + additionalXValue;\n return newX;\n};\n\nconst startByActualX = (x: number, xStep: number, task: BarTask) => {\n if (x >= task.actualx2 - task.handleWidth * 2) {\n x = task.actualx2 - task.handleWidth * 2;\n }\n const steps = Math.round((x - task.actualx1) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.actualx1 + additionalXValue;\n return newX;\n};\n\nconst endByX = (x: number, xStep: number, task: BarTask) => {\n if (x <= task.x1 + task.handleWidth * 2) {\n x = task.x1 + task.handleWidth * 2;\n }\n const steps = Math.round((x - task.x2) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.x2 + additionalXValue;\n return newX;\n};\n\nconst endByActualX = (x: number, xStep: number, task: BarTask) => {\n if (x <= task.actualx1 + task.handleWidth * 2) {\n x = task.actualx1 + task.handleWidth * 2;\n }\n const steps = Math.round((x - task.actualx2) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.actualx2 + additionalXValue;\n return newX;\n};\n\nconst moveByX = (x: number, xStep: number, task: BarTask) => {\n const steps = Math.round((x - task.x1) / xStep);\n const additionalXValue = steps * xStep;\n const newX1 = task.x1 + additionalXValue;\n const newX2 = newX1 + task.x2 - task.x1;\n return [newX1, newX2];\n};\n\nconst moveByActualX = (x: number, xStep: number, task: BarTask) => {\n const steps = Math.round((x - task.actualx1) / xStep);\n const additionalXValue = steps * xStep;\n const newX1 = task.actualx1 + additionalXValue;\n const newX2 = newX1 + task.actualx2 - task.actualx1;\n return [newX1, newX2];\n};\n\nconst dateByX = (\n x: number,\n taskX: number,\n taskDate: Date,\n xStep: number,\n timeStep: number\n) => {\n let newDate = new Date(((x - taskX) / xStep) * timeStep + taskDate.getTime());\n newDate = new Date(\n newDate.getTime() +\n (newDate.getTimezoneOffset() - taskDate.getTimezoneOffset()) * 60000\n );\n return newDate;\n};\n\n/**\n * Method handles event in real time(mousemove) and on finish(mouseup)\n */\nexport const handleTaskBySVGMouseEvent = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n type: string,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number,\n rtl: boolean\n): { isChanged: boolean; changedTask: BarTask } => {\n let result: { isChanged: boolean; changedTask: BarTask };\n switch (selectedTask.type) {\n case \"milestone\":\n result = handleTaskBySVGMouseEventForMilestone(\n svgX,\n action,\n selectedTask,\n xStep,\n timeStep,\n initEventX1Delta\n );\n break;\n default:\n result = handleTaskBySVGMouseEventForBar(\n svgX,\n action,\n selectedTask,\n type,\n xStep,\n timeStep,\n initEventX1Delta,\n rtl\n );\n break;\n }\n return result;\n};\n\nconst handleTaskBySVGMouseEventForBar = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n type: string,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number,\n rtl: boolean\n): { isChanged: boolean; changedTask: BarTask } => {\n const changedTask: BarTask = { ...selectedTask };\n let isChanged = false;\n switch (action) {\n // case \"progress\":\n // if (rtl) {\n // changedTask.progress = progressByXRTL(svgX, selectedTask);\n // } else {\n // changedTask.progress = progressByX(svgX, selectedTask);\n // }\n // isChanged = changedTask.progress !== selectedTask.progress;\n // if (isChanged) {\n // const [progressWidth, progressX] = progressWithByParams(\n // changedTask.x1,\n // changedTask.x2,\n // changedTask.progress,\n // rtl\n // );\n // changedTask.progressWidth = progressWidth;\n // changedTask.progressX = progressX;\n // }\n // break;\n case \"start\": {\n const newX1 =\n type == \"planned\"\n ? startByX(svgX, xStep, selectedTask)\n : startByActualX(svgX, xStep, selectedTask);\n if (type == \"planned\") changedTask.x1 = newX1;\n else if (type == \"actual\") changedTask.actualx1 = newX1;\n isChanged =\n changedTask.x1 !== selectedTask.x1 ||\n changedTask.actualx1 !== selectedTask.actualx1;\n if (isChanged) {\n if (rtl) {\n if (type == \"planned\")\n changedTask.end = dateByX(\n newX1,\n selectedTask.x1,\n selectedTask.end,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualEnd = dateByX(\n newX1,\n selectedTask.actualx1,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n } else {\n if (type == \"planned\")\n changedTask.start = dateByX(\n newX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualStart = dateByX(\n newX1,\n selectedTask.actualx1,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n }\n const [progressWidth, progressX] = progressWithByParams(\n changedTask.x1,\n changedTask.x2,\n changedTask.progress,\n rtl\n );\n changedTask.progressWidth = progressWidth;\n changedTask.progressX = progressX;\n }\n break;\n }\n case \"end\": {\n const newX2 =\n type == \"planned\"\n ? endByX(svgX, xStep, selectedTask)\n : endByActualX(svgX, xStep, selectedTask);\n if (type == \"planned\") changedTask.x2 = newX2;\n else if (type == \"actual\") changedTask.actualx2 = newX2;\n isChanged =\n changedTask.x2 !== selectedTask.x2 ||\n changedTask.actualx2 !== selectedTask.actualx2;\n if (isChanged) {\n if (rtl) {\n if (type == \"planned\")\n changedTask.start = dateByX(\n newX2,\n selectedTask.x2,\n selectedTask.start,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualStart = dateByX(\n newX2,\n selectedTask.actualx2,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n } else {\n if (type == \"planned\")\n changedTask.end = dateByX(\n newX2,\n selectedTask.x2,\n selectedTask.end,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualEnd = dateByX(\n newX2,\n selectedTask.actualx2,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n }\n const [progressWidth, progressX] = progressWithByParams(\n changedTask.x1,\n changedTask.x2,\n changedTask.progress,\n rtl\n );\n changedTask.progressWidth = progressWidth;\n changedTask.progressX = progressX;\n }\n break;\n }\n case \"move\": {\n const [newMoveX1, newMoveX2] =\n type == \"planned\"\n ? moveByX(svgX - initEventX1Delta, xStep, selectedTask)\n : moveByActualX(svgX - initEventX1Delta, xStep, selectedTask);\n if (type == \"planned\") isChanged = newMoveX1 !== selectedTask.x1;\n if (type == \"actual\") isChanged = newMoveX1 !== selectedTask.actualx1;\n if (isChanged) {\n if (type == \"planned\") {\n changedTask.start = dateByX(\n newMoveX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n changedTask.end = dateByX(\n newMoveX2,\n selectedTask.x2,\n selectedTask.end,\n xStep,\n timeStep\n );\n changedTask.x1 = newMoveX1;\n changedTask.x2 = newMoveX2;\n }\n if (type == \"actual\") {\n changedTask.actualStart = dateByX(\n newMoveX1,\n selectedTask.actualx1,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n changedTask.actualEnd = dateByX(\n newMoveX2,\n selectedTask.actualx2,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n changedTask.actualx1 = newMoveX1;\n changedTask.actualx2 = newMoveX2;\n }\n\n // const [progressWidth, progressX] = progressWithByParams(\n // changedTask.x1,\n // changedTask.x2,\n // changedTask.progress,\n // rtl\n // );\n // changedTask.progressWidth = progressWidth;\n // changedTask.progressX = progressX;\n }\n break;\n }\n }\n return { isChanged, changedTask };\n};\n\nconst handleTaskBySVGMouseEventForMilestone = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number\n): { isChanged: boolean; changedTask: BarTask } => {\n const changedTask: BarTask = { ...selectedTask };\n let isChanged = false;\n switch (action) {\n case \"move\": {\n const [newMoveX1, newMoveX2] = moveByX(\n svgX - initEventX1Delta,\n xStep,\n selectedTask\n );\n isChanged = newMoveX1 !== selectedTask.x1;\n if (isChanged) {\n changedTask.start = dateByX(\n newMoveX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n changedTask.end = changedTask.start;\n changedTask.x1 = newMoveX1;\n changedTask.x2 = newMoveX2;\n }\n break;\n }\n }\n return { isChanged, changedTask };\n};\n","import { BarTask } from \"../types/bar-task\";\nimport { Task } from \"../types/public-types\";\n\nexport function isKeyboardEvent(\n event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\n): event is React.KeyboardEvent {\n return (event as React.KeyboardEvent).key !== undefined;\n}\n\nexport function isMouseEvent(\n event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\n): event is React.MouseEvent {\n return (event as React.MouseEvent).clientX !== undefined;\n}\n\nexport function isBarTask(task: Task | BarTask): task is BarTask {\n return (task as BarTask).x1 !== undefined;\n}\n\nexport function removeHiddenTasks(tasks: Task[]) {\n const groupedTasks = tasks.filter(\n t => t.hideChildren && t.type === \"project\"\n );\n if (groupedTasks.length > 0) {\n for (let i = 0; groupedTasks.length > i; i++) {\n const groupedTask = groupedTasks[i];\n const children = getChildren(tasks, groupedTask);\n tasks = tasks.filter(t => children.indexOf(t) === -1);\n }\n }\n return tasks;\n}\n\nfunction getChildren(taskList: Task[], task: Task) {\n let tasks: Task[] = [];\n if (task.type !== \"project\") {\n tasks = taskList.filter(\n t =>\n t.dependencies &&\n t.dependencies.map(({ id }) => id).indexOf(task.id) !== -1\n );\n } else {\n tasks = taskList.filter(t => t.project && t.project === task.id);\n }\n var taskChildren: Task[] = [];\n tasks.forEach(t => {\n taskChildren.push(...getChildren(taskList, t));\n });\n tasks = tasks.concat(tasks, taskChildren);\n return tasks;\n}\n\nexport const sortTasks = (taskA: Task, taskB: Task) => {\n const orderA = taskA.displayOrder || Number.MAX_VALUE;\n const orderB = taskB.displayOrder || Number.MAX_VALUE;\n if (orderA > orderB) {\n return 1;\n } else if (orderA < orderB) {\n return -1;\n } else {\n return 0;\n }\n};\n","import React from \"react\";\n// import style from \"./bar.module.css\";\n\ntype BarDisplayProps = {\n x: number;\n y: number;\n type: string;\n // actualX1: number;\n // actualX2: number;\n startProgressWidth: number;\n endProgressWidth: number;\n width: number;\n height: number;\n isSelected: boolean;\n /* progress start point */\n progressX: number;\n progressWidth: number;\n barCornerRadius: number;\n criticalPathArrows?: Array<{taskId: string, arrowColor: string}>\n styles: {\n taskProgressColor?: string;\n backgroundColor: string;\n backgroundSelectedColor: string;\n progressColor: string;\n progressSelectedColor: string;\n criticalPathColor?: string;\n };\n onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\n};\nexport const BarDisplay: React.FC<BarDisplayProps> = ({\n x,\n y,\n type,\n // actualX1,\n // actualX2,\n // startProgressWidth,\n // endProgressWidth,\n width,\n height,\n isSelected,\n progressX,\n progressWidth,\n barCornerRadius,\n styles,\n onMouseDown,\n}) => {\n const getProcessColor = () => {\n return isSelected ? styles.progressSelectedColor : styles.progressColor;\n };\n\n const getBarColor = () => {\n return isSelected ? styles.backgroundSelectedColor : styles.backgroundColor;\n };\n\n if (type == \"planned\")\n return (\n <g onMouseDown={onMouseDown}>\n <rect\n x={x}\n width={width}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getBarColor()}\n strokeWidth={2}\n stroke={styles.criticalPathColor}\n />\n {/* <rect\n x={actualX1}\n width={actualX2 - actualX1}\n y={y + height / 2}\n height={height / 2}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n /> */}\n <rect\n x={progressX}\n width={progressWidth}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n </g>\n );\n else\n return (\n <g onMouseDown={onMouseDown}>\n <rect\n x={x}\n width={width}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n />\n <rect\n x={progressX}\n width={progressWidth}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport styles from \"./bar.module.css\";\n\ntype BarDateHandleProps = {\n x: number;\n y: number;\n width: number;\n height: number;\n barCornerRadius: number;\n onMouseDown: (event: React.MouseEvent<SVGRectElement, MouseEvent>) => void;\n};\nexport const BarDateHandle: React.FC<BarDateHandleProps> = ({\n x,\n y,\n width,\n height,\n barCornerRadius,\n onMouseDown,\n}) => {\n return (\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n className={styles.barHandle}\n ry={barCornerRadius}\n rx={barCornerRadius}\n onMouseDown={onMouseDown}\n />\n );\n};\n","import React from \"react\";\n// import styles from \"./bar.module.css\";\n\ntype BarProgressHandleProps = {\n progressPoint: string;\n onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\n};\nexport const BarProgressHandle: React.FC<BarProgressHandleProps> = (\n {\n // progressPoint,\n // onMouseDown,\n }\n) => {\n return (\n <div />\n // <polygon\n // className={styles.barHandle}\n // points={progressPoint}\n // onMouseDown={onMouseDown}\n // />\n );\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarDateHandle } from \"./bar-date-handle\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const Bar: React.FC<TaskItemProps> = ({\n task,\n isProgressChangeable,\n isDateChangeable,\n rtl,\n type,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n +!rtl * task.progressWidth + task.progressX,\n task.y,\n task.height\n );\n const handleHeight = task.height / 2 - 1;\n if (type == \"planned\") {\n if (task?.x1 >= 0 && task?.x2 > 0)\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height / 2}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"planned\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left */}\n <BarDateHandle\n x={task.x1 + 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"start\", task, e, \"planned\");\n }}\n />\n {/* right */}\n <BarDateHandle\n x={task.x2 - task.handleWidth - 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"planned\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"planned\");\n }}\n />\n )}\n </g>\n </g>\n );\n else return <g className={styles.barWrapper} tabIndex={0}></g>;\n } else if (task?.actualx1 >= 0 && task?.actualx2 > 0) {\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.actualx1}\n y={task.y + task.height / 2}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.actualx2 - task.actualx1}\n height={task.height / 2}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"actual\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left */}\n <BarDateHandle\n x={task.actualx1 + 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"start\", task, e, \"actual\");\n }}\n />\n {/* right */}\n <BarDateHandle\n x={task.actualx2 - task.handleWidth - 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"actual\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"actual\");\n }}\n />\n )}\n </g>\n </g>\n );\n } else {\n return <g className={styles.barWrapper} tabIndex={0}></g>;\n }\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const BarSmall: React.FC<TaskItemProps> = ({\n task,\n type,\n isProgressChangeable,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n task.progressWidth + task.x1,\n task.y,\n task.height\n );\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e);\n }}\n />\n <g className=\"handleGroup\">\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e);\n }}\n />\n )}\n </g>\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./milestone.module.css\";\n\nexport const Milestone: React.FC<TaskItemProps> = ({\n task,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const transform = `rotate(45 ${task.x1 + task.height * 0.356} \n ${task.y + task.height * 0.85})`;\n const getBarColor = () => {\n return isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n };\n\n return (\n <g tabIndex={0} className={styles.milestoneWrapper}>\n <rect\n fill={getBarColor()}\n x={task.x1}\n width={task.height}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n transform={transform}\n className={styles.milestoneBackground}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e,\"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e);\n }}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./project.module.css\";\n\nexport const Project: React.FC<TaskItemProps> = ({ task, isSelected }) => {\n const barColor = isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n const processColor = isSelected\n ? task.styles.progressSelectedColor\n : task.styles.progressColor;\n const projectWith = task.x2 - task.x1;\n\n const projectLeftTriangle = [\n task.x1,\n task.y + task.height / 2 - 1,\n task.x1,\n task.y + task.height,\n task.x1 + 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n const projectRightTriangle = [\n task.x2,\n task.y + task.height / 2 - 1,\n task.x2,\n task.y + task.height,\n task.x2 - 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n\n return (\n <g tabIndex={0} className={styles.projectWrapper}>\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectBackground}\n />\n <rect\n x={task.progressX}\n width={task.progressWidth}\n y={task.y}\n height={task.height}\n ry={task.barCornerRadius}\n rx={task.barCornerRadius}\n fill={processColor}\n />\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height / 2}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectTop}\n />\n <polygon\n className={styles.projectTop}\n points={projectLeftTriangle}\n fill={barColor}\n />\n <polygon\n className={styles.projectTop}\n points={projectRightTriangle}\n fill={barColor}\n />\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { GanttContentMoveAction } from \"../../types/gantt-task-actions\";\nimport { Bar } from \"./bar/bar\";\nimport { BarSmall } from \"./bar/bar-small\";\nimport { Milestone } from \"./milestone/milestone\";\nimport { Project } from \"./project/project\";\n// import style from \"./task-list.module.css\";\n\nexport type TaskItemProps = {\n task: BarTask;\n arrowIndent: number;\n taskHeight: number;\n isProgressChangeable: boolean;\n isDateChangeable: boolean;\n isDelete: boolean;\n isSelected: boolean;\n rtl: boolean;\n type?: string;\n onEventStart: (\n action: GanttContentMoveAction,\n selectedTask: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => any;\n};\n\nexport const TaskItem: React.FC<TaskItemProps> = props => {\n const {\n task,\n // arrowIndent,\n isDelete,\n // taskHeight,\n isSelected,\n // rtl,\n onEventStart,\n } = {\n ...props,\n };\n // const textRef = useRef<SVGTextElement>(null);\n const [taskItem, setTaskItem] = useState<JSX.Element[]>([<div />]);\n // const [isTextInside, setIsTextInside] = useState(true);\n\n useEffect(() => {\n switch (task.typeInternal) {\n case \"milestone\":\n if (task.x1 >= 0 && task.actualx1 >= 0)\n setTaskItem([<Milestone {...props} />]);\n else setTaskItem([]);\n break;\n case \"project\":\n if (\n task?.x1 >= 0 &&\n task?.x2 >= 0 &&\n task.x2 > task.x1 &&\n task?.actualx1 >= 0 &&\n task?.actualx2 >= 0 &&\n task.actualx2 > task.actualx1\n )\n setTaskItem([<Project {...props} />]);\n else setTaskItem([]);\n break;\n case \"smalltask\":\n setTaskItem([<BarSmall {...props} />]);\n break;\n default:\n {\n let taskItem = [];\n if (task?.x1 >= 0 && task?.x2 >= 0) {\n taskItem.push(<Bar {...props} type={\"planned\"} />);\n }\n if (task?.actualx1 >= 0 && task?.actualx2 >= 0) {\n taskItem.push(<Bar {...props} type={\"actual\"} />);\n }\n setTaskItem(taskItem);\n }\n break;\n }\n }, [task, isSelected]);\n\n // useEffect(() => {\n // if (textRef.current) {\n // setIsTextInside(textRef.current.getBBox().width < task.x2 - task.x1);\n // }\n // }, [textRef, task]);\n\n // const getX = () => {\n // const width = task.x2 - task.x1;\n // const hasChild = task.barChildren.length > 0;\n // if (isTextInside) {\n // return task.x1 + width * 0.5;\n // }\n // if (rtl && textRef.current) {\n // return (\n // task.x1 -\n // textRef.current.getBBox().width -\n // arrowIndent * +hasChild -\n // arrowIndent * 0.2\n // );\n // } else {\n // return task.x1 + width + arrowIndent * +hasChild + arrowIndent * 0.2;\n // }\n // };\n\n return (\n <g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"planned\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"planned\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"planned\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"planned\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[0]}\n </g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"actual\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"actual\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"actual\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"actual\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"actual\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[1]}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Dependency, EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Arrow } from \"../other/arrow\";\nimport { handleTaskBySVGMouseEvent } from \"../../helpers/bar-helper\";\nimport { isKeyboardEvent } from \"../../helpers/other-helper\";\nimport { TaskItem } from \"../task-item/task-item\";\nimport {\n BarMoveAction,\n GanttContentMoveAction,\n GanttEvent,\n} from \"../../types/gantt-task-actions\";\nimport { Milestone } from \"../task-item/milestone/milestone\";\n\nexport type TaskGanttContentProps = {\n tasks: BarTask[];\n dates: Date[];\n ganttEvent: GanttEvent;\n selectedTask: BarTask | undefined;\n rowHeight: number;\n columnWidth: number;\n timeStep: number;\n svg?: React.RefObject<SVGSVGElement>;\n svgWidth: number;\n taskHeight: number;\n arrowColor: string;\n arrowIndent: number;\n fontSize: string;\n fontFamily: string;\n rtl: boolean;\n 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 const getArrows = (isCritical: boolean, criticalPathType?: string) =>\n tasks.flatMap(_task => {\n const task =\n _task.start.getTime() > 0 && _task.end.getTime() > 0\n ? _task\n : undefined;\n if (!task) {\n return [\n <g\n key={_task.id + (isCritical ? \"-critical\" : \"-normal\")}\n style={{ height: taskHeight }}\n />,\n ];\n }\n return task.barChildren\n .map(child => {\n if (task.x2 > task.x1 || task.actualx2 > task.actualx1) {\n const criticalTask = task.criticalPathArrows?.find(\n arrow => arrow.taskId === tasks[child.index].id &&\n (!!arrow.criticalPathType\n ? arrow.criticalPathType === criticalPathType\n : !criticalPathType)\n );\n\n // Only render arrows matching the group\n if (!!criticalTask === isCritical) {\n return (\n <Arrow\n key={`Arrow from ${task.id} to ${tasks[child.index].id}${\n isCritical ? \"-critical\" : \"\"\n }`}\n taskFrom={task}\n taskTo={tasks[child.index]}\n rowHeight={rowHeight}\n dependencyType={child.dependencyType as Dependency}\n taskHeight={taskHeight}\n arrowIndent={arrowIndent}\n arrowColor={criticalTask?.arrowColor || \"#808080\"}\n />\n );\n }\n }\n return null;\n })\n .filter(Boolean);\n });\n\n return (\n <g className=\"content\">\n <g className=\"arrows\">\n {/* Render non-critical arrows first */}\n {getArrows(false)}\n {/* Render secondary critical path arrows on top */}\n {getArrows(true, \"secondary\")}\n {/* Render primary critical path arrows on top */}\n {getArrows(true, \"primary\")}\n </g>\n <g className=\"bar\" fontFamily={fontFamily} fontSize={fontSize}>\n {tasks.map(_task => {\n const task =\n (_task.start.getTime() > 0 && _task.end.getTime() > 0) ||\n (_task.actualStart.getTime() > 0 && _task.actualEnd.getTime() > 0)\n ? _task\n : undefined;\n if (!task && _task.typeInternal === \"milestone\") {\n return (\n <Milestone\n task={_task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={false}\n isDateChangeable={false}\n isDelete={!_task.isDisabled}\n onEventStart={handleBarEventStart}\n key={_task.id}\n isSelected={!!selectedTask && _task.id === selectedTask.id}\n rtl={rtl}\n />\n );\n }\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 {\n ViewMode,\n GanttProps,\n Task,\n DependencyType,\n} from \"../../types/public-types\";\nimport { GridProps } from \"../grid/grid\";\nimport { ganttDateRange, seedDates } from \"../../helpers/date-helper\";\nimport { CalendarProps } from \"../calendar/calendar\";\nimport { TaskGanttContentProps } from \"./task-gantt-content\";\nimport { TaskListHeaderDefault } from \"../task-list/task-list-header\";\nimport { TaskListTableDefault } from \"../task-list/task-list-table\";\nimport { StandardTooltipContent, Tooltip } from \"../other/tooltip\";\nimport { VerticalScroll } from \"../other/vertical-scroll\";\nimport { TaskListProps, TaskList } from \"../task-list/task-list\";\nimport { TaskGantt } from \"./task-gantt\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { convertToBarTasks } from \"../../helpers/bar-helper\";\nimport { GanttEvent } from \"../../types/gantt-task-actions\";\nimport { DateSetup } from \"../../types/date-setup\";\nimport { HorizontalScroll } from \"../other/horizontal-scroll\";\nimport { removeHiddenTasks, sortTasks } from \"../../helpers/other-helper\";\nimport styles from \"./gantt.module.css\";\n\nexport const Gantt: React.FunctionComponent<GanttProps> = ({\n tasks,\n leafTasks = [],\n scheduleType = \"main\",\n startDate = new Date(),\n endDate = new Date(),\n headerHeight = 50,\n columnWidth = 60,\n listCellWidth = \"155px\",\n rowHeight = 50,\n ganttHeight = 0,\n viewMode = ViewMode.Day,\n preStepsCount = 1,\n locale = \"en-US\",\n barFill = 60,\n barCornerRadius = 3,\n barProgressColor = \"#a3a3ff\",\n barProgressSelectedColor = \"#8282f5\",\n barBackgroundColor = \"#b8c2cc\",\n barBackgroundSelectedColor = \"#aeb8c2\",\n projectProgressColor = \"#7db59a\",\n projectProgressSelectedColor = \"#59a985\",\n projectBackgroundColor = \"#fac465\",\n projectBackgroundSelectedColor = \"#f7bb53\",\n milestoneBackgroundColor = \"#f1c453\",\n milestoneBackgroundSelectedColor = \"#f29e4c\",\n rtl = false,\n handleWidth = 8,\n timeStep = 300000,\n arrowColor = \"grey\",\n fontFamily = \"Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue\",\n fontSize = \"14px\",\n arrowIndent = 20,\n todayColor = \"rgba(252, 248, 227, 0.5)\",\n weekendColor = \"#f5f5f5\",\n viewDate,\n TooltipContent = StandardTooltipContent,\n TaskListHeader = TaskListHeaderDefault,\n TaskListTable = TaskListTableDefault,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n onSelect,\n onExpanderClick,\n onMultiSelect,\n taskLabelRenderer,\n}) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const [dateSetup, setDateSetup] = useState<DateSetup>(() => {\n const [startDateRange, endDateRange] = ganttDateRange(\n tasks,\n viewMode,\n preStepsCount\n );\n if (scheduleType === \"lookAhead\") {\n return { viewMode, dates: seedDates(startDate, endDate, viewMode) };\n }\n return {\n viewMode,\n dates: seedDates(startDateRange, endDateRange, viewMode),\n };\n });\n const [currentViewDate, setCurrentViewDate] = useState<Date | undefined>(\n undefined\n );\n\n const [taskListWidth, setTaskListWidth] = useState(0);\n const [svgContainerWidth, setSvgContainerWidth] = useState(0);\n const [svgContainerHeight, setSvgContainerHeight] = useState(ganttHeight);\n const [barTasks, setBarTasks] = useState<BarTask[]>([]);\n const [ganttEvent, setGanttEvent] = useState<GanttEvent>({\n action: \"\",\n });\n const taskHeight = useMemo(\n () => (rowHeight * barFill) / 100,\n [rowHeight, barFill]\n );\n\n const [selectedTask, setSelectedTask] = useState<BarTask>();\n const [failedTask, setFailedTask] = useState<BarTask | null>(null);\n\n const svgWidth =\n columnWidth < 55\n ? (dateSetup.dates.length + 0.5) * columnWidth\n : dateSetup.dates.length * columnWidth;\n const ganttFullHeight = barTasks.length * rowHeight;\n\n const [scrollY, setScrollY] = useState(0);\n const [scrollX, setScrollX] = useState(-1);\n const [ignoreScrollEvent, setIgnoreScrollEvent] = useState(false);\n\n const [hasCircularDeps, setHasCircularDeps] = useState(false);\n\n useEffect(() => {\n if (scheduleType === \"lookAhead\" && startDate && endDate) {\n setDateSetup({\n viewMode,\n dates: seedDates(startDate, endDate, viewMode),\n });\n }\n }, [startDate, endDate]);\n // task change events\n useEffect(() => {\n let filteredTasks: Task[];\n if (onExpanderClick) {\n filteredTasks = removeHiddenTasks(tasks);\n } else {\n filteredTasks = tasks;\n }\n filteredTasks = filteredTasks.sort(sortTasks);\n const [startDateRange, endDateRange] = ganttDateRange(\n filteredTasks,\n viewMode,\n preStepsCount\n );\n let newDates = seedDates(startDateRange, endDateRange, viewMode);\n if (scheduleType === \"lookAhead\") {\n newDates = seedDates(startDate, endDate, viewMode);\n }\n if (rtl) {\n newDates = newDates.reverse();\n if (scrollX === -1) {\n setScrollX(newDates.length * columnWidth);\n }\n }\n if (scheduleType !== \"lookAhead\") {\n setDateSetup({\n dates: seedDates(startDateRange, endDateRange, viewMode),\n viewMode,\n });\n }\n\n let [primaryPath, secondaryPath] = getCriticalPaths(leafTasks);\n if (\n leafTasks.length > 0 &&\n primaryPath.length === 0 &&\n secondaryPath.length === 0\n ) {\n // One or more circular dependencies found\n setHasCircularDeps(true);\n } else {\n if (\n hasCircularDeps &&\n localStorage.getItem(\"hideCircularDepsAlert\") === \"true\"\n ) {\n // We've checked deps before and it did have them, but it doesn't have them now\n // Revert to initial state\n localStorage.removeItem(\"hideCircularDepsAlert\");\n }\n\n setHasCircularDeps(false);\n }\n\n // Color the paths.\n uncolorAll(tasks);\n if (scheduleType !== \"lookAhead\") {\n colorPath(secondaryPath, \"#00ff00\", tasks, \"secondary\");\n colorPath(primaryPath, \"#ff0000\", tasks, \"primary\");\n }\n setBarTasks(\n convertToBarTasks(\n filteredTasks,\n newDates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n )\n );\n }, [\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 const hideAlert = () => {\n const checkbox = document.getElementById(\n \"alert-dismiss\"\n ) as HTMLInputElement;\n const alert = document.getElementById(\"alert-container\") as HTMLElement;\n\n if (checkbox.checked) {\n localStorage.setItem(\"hideCircularDepsAlert\", \"true\");\n alert.style.display = \"None\";\n }\n };\n\n /**\n * Handles arrow keys events and transform it to new scroll\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n event.preventDefault();\n let newScrollY = scrollY;\n let newScrollX = scrollX;\n let isX = true;\n switch (event.key) {\n case \"Down\": // IE/Edge specific value\n case \"ArrowDown\":\n newScrollY += rowHeight;\n isX = false;\n break;\n case \"Up\": // IE/Edge specific value\n case \"ArrowUp\":\n newScrollY -= rowHeight;\n isX = false;\n break;\n case \"Left\":\n case \"ArrowLeft\":\n newScrollX -= columnWidth;\n break;\n case \"Right\": // IE/Edge specific value\n case \"ArrowRight\":\n newScrollX += columnWidth;\n break;\n }\n if (isX) {\n if (newScrollX < 0) {\n newScrollX = 0;\n } else if (newScrollX > svgWidth) {\n newScrollX = svgWidth;\n }\n setScrollX(newScrollX);\n } else {\n if (newScrollY < 0) {\n newScrollY = 0;\n } else if (newScrollY > ganttFullHeight - ganttHeight) {\n newScrollY = ganttFullHeight - ganttHeight;\n }\n setScrollY(newScrollY);\n }\n setIgnoreScrollEvent(true);\n };\n\n /**\n * Task select event\n */\n const handleSelectedTask = (taskId: string) => {\n const newSelectedTask = barTasks.find(t => t.id === taskId);\n const oldSelectedTask = barTasks.find(\n t => !!selectedTask && t.id === selectedTask.id\n );\n if (onSelect) {\n if (oldSelectedTask) {\n onSelect(oldSelectedTask, false);\n }\n if (newSelectedTask) {\n onSelect(newSelectedTask, true);\n }\n }\n setSelectedTask(newSelectedTask);\n };\n const handleExpanderClick = (task: Task) => {\n if (onExpanderClick && task.hideChildren !== undefined) {\n onExpanderClick({ ...task, hideChildren: !task.hideChildren });\n }\n };\n const gridProps: GridProps = {\n columnWidth,\n svgWidth,\n tasks: tasks,\n scheduleType: scheduleType,\n rowHeight,\n dates: dateSetup.dates,\n todayColor,\n weekendColor,\n rtl,\n };\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 scheduleType,\n locale,\n headerHeight,\n scrollY,\n ganttHeight,\n horizontalContainerClass: styles.horizontalContainer,\n selectedTask,\n taskListRef,\n setSelectedTask: handleSelectedTask,\n onExpanderClick: handleExpanderClick,\n onDoubleClick,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n };\n return (\n <div>\n {hasCircularDeps &&\n localStorage.getItem(\"hideCircularDepsAlert\") !== \"true\" && (\n <div\n id=\"alert-container\"\n className={`${styles.alertContainer} ${styles.warning}`}\n >\n <input\n type=\"checkbox\"\n id=\"alert-dismiss\"\n className={styles.alertDismissCheckbox}\n onChange={hideAlert}\n />\n <label htmlFor=\"alert-dismiss\" className={styles.alertCloseButton}>\n &times;\n </label>\n <div className={styles.alertContent}>\n <p>\n Critical path could not be displayed due to circular\n dependencies\n </p>\n </div>\n </div>\n )}\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].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return false; // Error: an error came from deeper recursive call\n }\n\n taskMap[taskID].finished = true;\n\n sortedTaskList.push(taskID);\n return true;\n}\nexport function getCriticalPaths(leafTasks: Task[]) {\n // Map ids to tasks for faster access.\n // O(n) space, O(n) time to add all from list, O(1) time for each access.\n let taskMap = {};\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id] = { task: leafTasks[i] };\n\n // Sort the tasks so each dependent is listed after its dependencies.\n // O(num vertices + num edges)\n let sortedTaskList: string[] = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let successVal = topologicalOrderingHelper(\n leafTasks[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return [[], []]; // Abort: there was a cycle\n }\n\n // Map tasks to their dependents for faster access.\n // Dependencies are already easy enough to access, but not dependents.\n // O(num vertices + num edges)\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id].dependents = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let task = leafTasks[i];\n if (task.dependencies)\n for (let j = 0; j < task.dependencies.length; j++)\n taskMap[task.dependencies[j].id]?.dependents.push(task.id);\n }\n\n // Compute critical paths, in reverse order to handle dependents before dependencies.\n // O(num vertices + num edges)\n for (let i = sortedTaskList.length - 1; i >= 0; i--)\n computeCriticalPath(sortedTaskList[i], taskMap);\n\n // 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 console.debug([primaryPath, secondaryPath]);\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].start = task.start.getTime();\n taskMap[taskID].end = task.end.getTime();\n let start = taskMap[taskID].start;\n\n for (let depID of dependents) {\n let dependentTask = taskMap[depID].task;\n\n // Find dependency type from dependent → current\n let dependency = dependentTask.dependencies?.find(\n (d: DependencyType) => d.id === taskID\n );\n if (!dependency) continue;\n\n switch (dependency.type) {\n case \"FS\":\n // Successor can't start until predecessor finishes\n if (taskMap[depID].end > taskMap[taskID].end) {\n taskMap[taskID].next = depID;\n taskMap[taskID].end = taskMap[depID].end;\n }\n break;\n\n case \"SS\":\n // Successor can't start until predecessor starts\n if (taskMap[depID].start > start) {\n taskMap[taskID].next = depID;\n start = taskMap[depID].start;\n taskMap[taskID].end = taskMap[depID].end;\n }\n break;\n\n case \"FF\":\n // Successor can't finish until predecessor finishes\n if (taskMap[depID].end > taskMap[taskID].end) {\n taskMap[taskID].next = depID;\n taskMap[taskID].end = taskMap[depID].end;\n }\n break;\n\n case \"SF\":\n // Successor can't finish until predecessor starts\n if (taskMap[depID].start > taskMap[taskID].end) {\n taskMap[taskID].next = depID;\n taskMap[taskID].end = taskMap[depID].start;\n }\n break;\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(\n path: Task[],\n color: string,\n tasks: Task[],\n criticalPathType: string\n) {\n // Color boxes\n for (let i = 0; i < path.length; i++) {\n // For this task in the path, find the most immediate ancestor in tasks.\n let longestIDLength = 0;\n let longestTask;\n for (let j = 0; j < tasks.length; j++) {\n if (path[i].id === tasks[j].id) {\n longestTask = tasks[j];\n break;\n }\n if (\n path[i].id.startsWith(tasks[j].id + \".\") &&\n tasks[j].id.length > longestIDLength\n ) {\n longestIDLength = tasks[j].id.length;\n longestTask = tasks[j];\n }\n }\n // If some ancestor is found, color it.\n if (longestTask) {\n let styles = longestTask.styles ?? {};\n styles.criticalPathColor = color;\n longestTask.styles = styles;\n }\n }\n // Color arrows\n for (let i = 0; i + 1 < path.length; i++) {\n // Items in the critical paths came from leafTasks, but we need to change the versions from tasks instead.\n let taskFromTasks;\n for (let j = 0; j < tasks.length; j++)\n if (path[i].id === tasks[j].id) {\n taskFromTasks = tasks[j];\n break;\n }\n if (taskFromTasks) {\n let arrows = taskFromTasks.criticalPathArrows;\n // Create the arrows list if it does not exist.\n if (!arrows) arrows = [];\n // If the arrow is already colored, replace its color in the list.\n let arrow = arrows.find(arrow => arrow.taskId === path[i + 1].id);\n if (arrow) {\n arrow.arrowColor = color;\n arrow.criticalPathType = criticalPathType;\n }\n // Else, add the new colored arrow to the list.\n else\n arrows.push({\n taskId: path[i + 1].id,\n arrowColor: color,\n criticalPathType: criticalPathType,\n });\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","TaskListHeaderDefault","headerHeight","fontFamily","fontSize","rowWidth","scheduleType","allSelected","onSelectAll","React","className","styles","ganttTable","style","ganttTable_Header","height","ganttTable_HeaderItem","minWidth","parseInt","maxWidth","type","checked","onChange","e","target","ganttTable_HeaderSeparator","marginTop","title","localeDateStringCache","toLocaleDateStringFactory","dateTimeOptions","lds","toLocaleDateString","year","TaskListTableDefault","rowHeight","leafTasks","onExpanderClick","selectedTasks","onTaskSelect","taskLabelRenderer","t","name","useMemo","leafTaskIds","Set","map","id","taskListWrapper","expanderSymbol","has","hideChildren","isSelected","includes","taskListMilestoneRow","taskListLookAheadRow","taskListTableRow","taskListCell","taskListText","display","justifyContent","alignItems","paddingLeft","paddingRight","taskListNameWrapper","depth","taskListExpander","onClick","taskListExpanderPlaceholder","now","color","optionalId","Tooltip","rtl","svgContainerHeight","svgContainerWidth","scrollX","scrollY","arrowIndent","taskListWidth","TooltipContent","tooltipRef","useRef","useState","relatedY","setRelatedY","relatedX","setRelatedX","useEffect","current","tooltipHeight","offsetHeight","tooltipWidth","offsetWidth","newRelatedY","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","onMultiSelect","horizontalContainerRef","setSelectedTasks","prevSelectedTasksRef","selectedTaskObjects","filter","handleTaskSelect","taskId","selected","prev","handleSelectAll","headerProps","undefined","selectedTaskId","tableProps","GridBody","svgWidth","columnWidth","todayColor","weekendColor","y","gridRows","rowLines","x","y1","y2","gridRowLine","isDarkerRow","darkerGridRow","gridRowLookAhead","gridRow","tickX","ticks","today","weekend","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","dependencyType","drawPathAndTriangle","path","trianglePoints","strokeWidth","d","stroke","points","indexCompare","taskToEndY","verticalOffset","minX","min","maxX","max","fromPoint","toPoint","arrowPoints","right","convertToBarTasks","barCornerRadius","handleWidth","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","projectProgressColor","projectProgressSelectedColor","projectBackgroundColor","projectBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","barTasks","convertToBarTask","dependencies","j","dependence","findIndex","barchild","barChildren","barTask","convertToMilestone","convertToBar","progressStartWidth","progressEndWidth","taskXCoordinateRTL","taskXCoordinate","abs","typeInternal","progressWithByParams","progressWidth","progressX","taskYCoordinate","backgroundColor","backgroundSelectedColor","progressColor","progressSelectedColor","rotatedHeight","xDate","remainderMillis","percentOfInterval","taskX1","taskX2","getProgressPoint","taskY","point","join","startByX","xStep","steps","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","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","onDoubleClick","Project","barColor","processColor","projectWith","projectLeftTriangle","projectRightTriangle","projectWrapper","projectBackground","projectTop","TaskItem","isDelete","taskItem","setTaskItem","onKeyDown","stopPropagation","onMouseEnter","onMouseLeave","TaskGanttContent","ganttEvent","svg","setGanttEvent","setFailedTask","onDateChange","onProgressChange","onDelete","createSVGPoint","setXStep","setInitEventX1Delta","isMoving","setIsMoving","dateDelta","newXStep","handleMouseMove","preventDefault","clientX","cursor","matrixTransform","getScreenCTM","inverse","handleMouseUp","operationSuccess","originalSelectedTask","newChangedTask","isNotLikeOriginal","removeEventListener","addEventListener","handleBarEventStart","error","getArrows","isCritical","criticalPathType","flatMap","_task","child","criticalTask","criticalPathArrows","find","arrow","Boolean","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","scrollLeft","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","Gantt","listCellWidth","barFill","viewDate","onSelect","wrapperRef","startDateRange","endDateRange","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","failedTask","setScrollY","setScrollX","ignoreScrollEvent","setIgnoreScrollEvent","hasCircularDeps","setHasCircularDeps","filteredTasks","sort","newDates","reverse","getCriticalPaths","primaryPath","secondaryPath","localStorage","getItem","removeItem","uncolorAll","colorPath","prevStateTask","newTaskList","handleWheel","shiftKey","deltaX","scrollMove","deltaY","newScrollX","newScrollY","passive","handleScrollY","currentTarget","handleScrollX","hideAlert","checkbox","document","getElementById","alert","setItem","handleKeyDown","isX","handleSelectedTask","newSelectedTask","oldSelectedTask","handleExpanderClick","alertContainer","warning","alertDismissCheckbox","htmlFor","alertCloseButton","alertContent","wrapper","topologicalOrderingHelper","taskID","taskMap","sortedTaskList","finished","started","successVal","dependents","computeCriticalPath","primaryLeaf","primaryDuration","newDuration","excluded","next","secondaryLeaf","secondaryDuration","debug","depID","dependentTask","dependency","longestIDLength","longestTask","startsWith","taskFromTasks","arrows"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/types/public-types.ts","../src/helpers/date-helper.ts","../src/components/task-list/task-list-header.tsx","../src/components/task-list/task-list-table.tsx","../src/components/other/tooltip.tsx","../src/components/other/vertical-scroll.tsx","../src/components/task-list/task-list.tsx","../src/components/grid/grid-body.tsx","../src/components/grid/grid.tsx","../src/components/calendar/top-part-of-calendar.tsx","../src/components/calendar/calendar.tsx","../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs","../src/components/other/arrow.tsx","../src/helpers/bar-helper.ts","../src/helpers/other-helper.ts","../src/components/task-item/bar/bar-display.tsx","../src/components/task-item/bar/bar-date-handle.tsx","../src/components/task-item/bar/bar-progress-handle.tsx","../src/components/task-item/bar/bar.tsx","../src/components/task-item/bar/bar-small.tsx","../src/components/task-item/milestone/milestone.tsx","../src/components/task-item/project/project.tsx","../src/components/task-item/task-item.tsx","../src/components/gantt/task-gantt-content.tsx","../src/components/gantt/task-gantt.tsx","../src/components/other/horizontal-scroll.tsx","../src/components/gantt/gantt.tsx"],"sourcesContent":["export enum ViewMode {\n Hour = \"Hour\",\n QuarterDay = \"Quarter Day\",\n HalfDay = \"Half Day\",\n Day = \"Day\",\n /** ISO-8601 week */\n Week = \"Week\",\n Month = \"Month\",\n Quarter = \"Quarter\",\n Year = \"Year\",\n}\nexport type TaskType = \"task\" | \"milestone\" | \"project\";\nexport type Dependency = \"SS\" | \"SF\" | \"FS\" | \"FF\";\n\nexport declare type DependencyType = {\n id: string;\n type: Dependency;\n};\nexport interface Task {\n id: string;\n optionalId?: string | null;\n type: TaskType;\n name: string;\n start: Date;\n end: Date;\n /**\n * From 0 to 100\n */\n progress: number;\n actualStart: Date;\n actualEnd: Date;\n criticalPathArrows?: Array<{ taskId: string; arrowColor: string ; criticalPathType: string }>;\n styles?: {\n taskProgressColor?: string;\n backgroundColor?: string;\n backgroundSelectedColor?: string;\n progressColor?: string;\n progressSelectedColor?: string;\n criticalPathColor?: string;\n };\n depth: number;\n isDisabled?: boolean;\n project?: string;\n dependencies?: DependencyType[];\n hideChildren?: boolean;\n displayOrder?: number;\n childrenCount?: number;\n}\n\nexport interface EventOption {\n /**\n * Time step value for date changes.\n */\n timeStep?: number;\n /**\n * Invokes on bar select on unselect.\n */\n onSelect?: (task: Task, isSelected: boolean) => void;\n /**\n * Invokes on bar double click.\n */\n onDoubleClick?: (task: Task) => void;\n /**\n * Invokes on bar click.\n */\n onClick?: (task: Task) => void;\n /**\n * Invokes on end and start time change. Chart undoes operation if method return false or error.\n */\n onDateChange?: (\n task: Task,\n children: Task[]\n ) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on progress change. Chart undoes operation if method return false or error.\n */\n onProgressChange?: (\n task: Task,\n children: Task[]\n ) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on delete selected task. Chart undoes operation if method return false or error.\n */\n onDelete?: (task: Task) => void | boolean | Promise<void> | Promise<boolean>;\n /**\n * Invokes on expander on task list\n */\n onExpanderClick?: (task: Task) => void;\n /**\n * Invokes when tasks are multi-selected via checkboxes\n */\n onMultiSelect?: (tasks: Task[]) => void;\n}\n\nexport interface DisplayOption {\n viewMode?: ViewMode;\n viewDate?: Date;\n preStepsCount?: number;\n /**\n * Specifies the month name language. Able formats: ISO 639-2, Java Locale\n */\n locale?: string;\n rtl?: boolean;\n}\n\nexport interface StylingOption {\n headerHeight?: number;\n columnWidth?: number;\n listCellWidth?: string;\n rowHeight?: number;\n ganttHeight?: number;\n barCornerRadius?: number;\n handleWidth?: number;\n fontFamily?: string;\n fontSize?: string;\n /**\n * How many of row width can be taken by task.\n * From 0 to 100\n */\n barFill?: number;\n barProgressColor?: string;\n barProgressSelectedColor?: string;\n barBackgroundColor?: string;\n barBackgroundSelectedColor?: string;\n projectProgressColor?: string;\n projectProgressSelectedColor?: string;\n projectBackgroundColor?: string;\n projectBackgroundSelectedColor?: string;\n milestoneBackgroundColor?: string;\n milestoneBackgroundSelectedColor?: string;\n arrowColor?: string;\n arrowIndent?: number;\n todayColor?: string;\n weekendColor?: string;\n TooltipContent?: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n }>;\n TaskListHeader?: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n }>;\n TaskListTable?: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n selectedTaskId: string;\n /**\n * Sets selected task by id\n */\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n }>;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n taskProgressColor?: string;\n}\n\nexport interface GanttProps extends EventOption, DisplayOption, StylingOption {\n tasks: Task[];\n leafTasks?: Task[];\n scheduleType: string;\n startDate?: Date;\n endDate?: Date;\n}\n","import { Task, ViewMode } from \"../types/public-types\";\nimport DateTimeFormatOptions = Intl.DateTimeFormatOptions;\nimport DateTimeFormat = Intl.DateTimeFormat;\n\ntype DateHelperScales =\n | \"year\"\n | \"quarter\"\n | \"month\"\n | \"day\"\n | \"hour\"\n | \"minute\"\n | \"second\"\n | \"millisecond\";\n\nconst intlDTCache = {};\nexport const getCachedDateTimeFormat = (\n locString: string | string[],\n opts: DateTimeFormatOptions = {}\n): DateTimeFormat => {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n};\n\nexport const addToDate = (\n date: Date,\n quantity: number,\n scale: DateHelperScales\n) => {\n const newDate = new Date(\n date.getFullYear() + (scale === \"year\" ? quantity : 0),\n date.getMonth() + (scale === \"month\" ? quantity : 0),\n date.getDate() + (scale === \"day\" ? quantity : 0),\n date.getHours() + (scale === \"hour\" ? quantity : 0),\n date.getMinutes() + (scale === \"minute\" ? quantity : 0),\n date.getSeconds() + (scale === \"second\" ? quantity : 0),\n date.getMilliseconds() + (scale === \"millisecond\" ? quantity : 0)\n );\n return newDate;\n};\n\nexport const startOfDate = (date: Date, scale: DateHelperScales) => {\n const scores = [\n \"millisecond\",\n \"second\",\n \"minute\",\n \"hour\",\n \"day\",\n \"month\",\n \"quarter\",\n \"year\",\n ];\n\n const shouldReset = (_scale: DateHelperScales) => {\n const maxScore = scores.indexOf(scale);\n return scores.indexOf(_scale) <= maxScore;\n };\n const newDate = new Date(\n date.getFullYear(),\n shouldReset(\"year\") ? 0 : date.getMonth(),\n shouldReset(\"month\") ? 1 : date.getDate(),\n shouldReset(\"day\") ? 0 : date.getHours(),\n shouldReset(\"hour\") ? 0 : date.getMinutes(),\n shouldReset(\"minute\") ? 0 : date.getSeconds(),\n shouldReset(\"second\") ? 0 : date.getMilliseconds()\n );\n return newDate;\n};\n\nexport const ganttDateRange = (\n tasks: Task[],\n viewMode: ViewMode,\n preStepsCount: number\n) => {\n let newStartDate: Date =\n tasks[0]?.start.getTime() !== 0\n ? tasks[0]?.start || new Date()\n : new Date();\n let newEndDate: Date =\n tasks[0]?.end.getTime() !== 0 ? tasks[0]?.end || new Date() : new Date();\n\n for (const task of tasks) {\n if (task.start && task.start.getTime() !== 0 && task.start < newStartDate) {\n newStartDate = task.start;\n }\n if (task.end && task.end.getTime() !== 0 && task.end > newEndDate) {\n newEndDate = task.end;\n }\n if (\n task.actualStart &&\n task.actualStart.getTime() !== 0 &&\n task.actualStart < newStartDate\n ) {\n newStartDate = task.actualStart;\n }\n if (\n task.actualEnd &&\n task.actualEnd.getTime() !== 0 &&\n task.actualEnd > newEndDate\n ) {\n newEndDate = task.actualEnd;\n }\n }\n\n switch (viewMode) {\n case ViewMode.Year:\n newStartDate = addToDate(newStartDate, -1, \"year\");\n newStartDate = startOfDate(newStartDate, \"year\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Quarter:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"year\");\n newStartDate = startOfDate(newStartDate, \"year\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"quarter\");\n break;\n case ViewMode.Month:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"month\");\n newStartDate = startOfDate(newStartDate, \"month\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Week:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(\n getMonday(newStartDate),\n -7 * preStepsCount,\n \"day\"\n );\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1.5, \"month\");\n break;\n case ViewMode.Day:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 19, \"day\");\n break;\n case ViewMode.QuarterDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 66, \"hour\"); // 24(1 day)*3 - 6\n break;\n case ViewMode.HalfDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 108, \"hour\"); // 24(1 day)*5 - 12\n break;\n case ViewMode.Hour:\n newStartDate = startOfDate(newStartDate, \"hour\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"hour\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1, \"day\");\n break;\n }\n return [newStartDate, newEndDate];\n};\n\nexport const seedDates = (\n startDate: Date,\n endDate: Date,\n viewMode: ViewMode\n) => {\n let currentDate: Date = new Date(startDate);\n const dates: Date[] = [currentDate];\n while (currentDate < endDate) {\n switch (viewMode) {\n case ViewMode.Year:\n currentDate = addToDate(currentDate, 1, \"year\");\n break;\n case ViewMode.Quarter:\n currentDate = addToDate(currentDate, 3, \"month\");\n break;\n case ViewMode.Month:\n currentDate = addToDate(currentDate, 1, \"month\");\n break;\n case ViewMode.Week:\n currentDate = addToDate(currentDate, 7, \"day\");\n break;\n case ViewMode.Day:\n currentDate = addToDate(currentDate, 1, \"day\");\n break;\n case ViewMode.HalfDay:\n currentDate = addToDate(currentDate, 12, \"hour\");\n break;\n case ViewMode.QuarterDay:\n currentDate = addToDate(currentDate, 6, \"hour\");\n break;\n case ViewMode.Hour:\n currentDate = addToDate(currentDate, 1, \"hour\");\n break;\n }\n dates.push(currentDate);\n }\n return dates;\n};\n\nexport const getLocaleMonth = (date: Date, locale: string) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n month: \"long\",\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\nexport const getLocalDayOfWeek = (\n date: Date,\n locale: string,\n format?: \"long\" | \"short\" | \"narrow\" | undefined\n) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n weekday: format,\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\n/**\n * Returns monday of current week\n * @param date date for modify\n */\nconst getMonday = (date: Date) => {\n const day = date.getDay();\n const diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\n\nexport const getWeekNumberISO8601 = (date: Date) => {\n const tmpDate = new Date(date.valueOf());\n const dayNumber = (tmpDate.getDay() + 6) % 7;\n tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);\n const firstThursday = tmpDate.valueOf();\n tmpDate.setMonth(0, 1);\n if (tmpDate.getDay() !== 4) {\n tmpDate.setMonth(0, 1 + ((4 - tmpDate.getDay() + 7) % 7));\n }\n const weekNumber = (\n 1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 604800000)\n ).toString();\n\n if (weekNumber.length === 1) {\n return `0${weekNumber}`;\n } else {\n return weekNumber;\n }\n};\n\nexport const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n};\n","import React from \"react\";\nimport styles from \"./task-list-header.module.css\";\n\nexport const TaskListHeaderDefault: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n}> = ({ headerHeight, fontFamily, fontSize, rowWidth, scheduleType, allSelected, onSelectAll }) => {\n return (\n <div\n className={styles.ganttTable}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n <div\n className={styles.ganttTable_Header}\n style={{\n height: headerHeight - 2,\n }}\n >\n {onSelectAll && (\n <div>\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <input \n type=\"checkbox\" \n checked={allSelected}\n onChange={(e) => onSelectAll(e.target.checked)} \n />\n </div>\n </div>\n )}\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n WBS\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n ID\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n >\n Task\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Planned Start\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Planned End\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Actual Start\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Actual End\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport styles from \"./task-list-table.module.css\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\n\nconst localeDateStringCache = {};\nconst toLocaleDateStringFactory =\n (locale: string) =>\n (date: Date, dateTimeOptions: Intl.DateTimeFormatOptions): string => {\n if (!date || date.getTime() === 0) return \"\"; // Handle invalid dates\n const key = date.toString();\n let lds = localeDateStringCache[key];\n if (!lds) {\n lds = date.toLocaleDateString(locale, dateTimeOptions);\n localeDateStringCache[key] = lds;\n }\n return lds;\n };\nconst dateTimeOptions: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n};\n\nexport const TaskListTableDefault: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n}> = ({\n rowHeight,\n rowWidth,\n tasks,\n scheduleType,\n leafTasks,\n fontFamily,\n fontSize,\n locale,\n onExpanderClick,\n selectedTasks = [],\n onTaskSelect,\n taskLabelRenderer = t => \" \" + t.name,\n}) => {\n const toLocaleDateString = useMemo(\n () => toLocaleDateStringFactory(locale),\n [locale]\n );\n const leafTaskIds = useMemo(\n () => new Set(leafTasks.map(t => t.id)),\n [leafTasks]\n );\n\n // Checks if the task has a selected ancestor by traversing the WBS hierarchy\n const hasSelectedAncestor = (taskId: string, selectedSet: Set<string>, allTasks: Task[]): boolean => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return false;\n const parentWbs = getParentWbs(task.id);\n if (!parentWbs) return false;\n if (selectedSet.has(parentWbs)) return true;\n return hasSelectedAncestor(parentWbs, selectedSet, allTasks);\n };\n\n 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) || t.type=== \"milestone\")) {\n if (t.hideChildren === false) {\n expanderSymbol = \"▼\";\n } else if (t.hideChildren === true) {\n expanderSymbol = \"►\";\n }\n }\n\n const isSelected = selectedTasks.includes(t.id);\n const isAncestorSelected = hasSelectedAncestor(t.id, new Set(selectedTasks), tasks);\n\n return (\n <div\n className={\n t.type === \"milestone\"\n ? styles.taskListMilestoneRow\n : scheduleType === \"lookAhead\"\n ? styles.taskListLookAheadRow\n : styles.taskListTableRow\n }\n style={{ height: rowHeight }}\n key={`${t.id}row`}\n >\n {onTaskSelect && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <div className={styles.taskListText} style={{ \n display: \"flex\", \n justifyContent: \"center\", \n alignItems: \"center\",\n height: \"100%\",\n paddingLeft: \"0\",\n paddingRight: \"0\"\n }}>\n <input \n type=\"checkbox\" \n checked={isSelected}\n disabled={isAncestorSelected}\n onChange={(e) => onTaskSelect(t.id, e.target.checked)}\n />\n </div>\n </div>\n )}\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.id}\n >\n <div\n className={styles.taskListNameWrapper}\n style={{ paddingLeft: `${t.depth * 4}px` }}\n >\n {!(leafTaskIds.has(t.id) || t.type=== \"milestone\") ? (\n <div\n className={styles.taskListExpander}\n onClick={() => onExpanderClick(t)}\n >\n \n {expanderSymbol}\n </div>\n ) : (\n <div className={styles.taskListExpanderPlaceholder}></div>\n )}\n <div className={styles.taskListText}>\n {t.id}{\" \"}\n {t.actualEnd.getTime() > 0 &&\n t.actualEnd.getTime() < Date.now() ? (\n <span\n title=\"Task Complete\"\n style={{ color: \"limegreen\", fontSize: \"16px\" }}\n >\n ✔\n </span>\n ) : (\n \"\"\n )}\n </div>\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.optionalId?t.optionalId:\"\"}\n >\n {t.optionalId}\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n title={t.name}\n >\n <div className={styles.taskListText}>{taskLabelRenderer(t)}</div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{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 &nbsp;{toLocaleDateString(t.end, dateTimeOptions)}\n </div>\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{toLocaleDateString(t.actualStart, dateTimeOptions)}\n </div>\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{toLocaleDateString(t.actualEnd, dateTimeOptions)}\n </div>\n </div>\n )}\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, useState } from \"react\";\nimport { EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\n\nexport type TaskListProps = {\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n rowHeight: number;\n ganttHeight: number;\n scrollY: number;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n taskListRef: React.RefObject<HTMLDivElement>;\n horizontalContainerClass?: string;\n selectedTask: BarTask | undefined;\n setSelectedTask: (task: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n TaskListHeader: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n }>;\n TaskListTable: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n }>;\n} & EventOption;\n\nexport const TaskList: React.FC<TaskListProps> = ({\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n rowHeight,\n scrollY,\n tasks,\n scheduleType,\n leafTasks,\n selectedTask,\n setSelectedTask,\n onExpanderClick,\n locale,\n ganttHeight,\n taskListRef,\n horizontalContainerClass,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n}) => {\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const [selectedTasks, setSelectedTasks] = useState<string[]>([]);\n const prevSelectedTasksRef = useRef<string[]>([]);\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (\n onMultiSelect &&\n JSON.stringify(prevSelectedTasksRef.current) !==\n JSON.stringify(selectedTasks)\n ) {\n const selectedTaskObjects = tasks.filter(task =>\n selectedTasks.includes(task.id)\n );\n prevSelectedTasksRef.current = [...selectedTasks];\n onMultiSelect(selectedTaskObjects);\n }\n }, [selectedTasks, tasks, onMultiSelect]);\n\n // Finds all descendant task IDs recursively using WBS hierarchy\n const getDescendants = (taskId: string, allTasks: Task[]): string[] => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return [];\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n return children.flatMap(child => [child.id, ...getDescendants(child.id, allTasks)]);\n };\n\n // Recursively opens a task and its children if they are collapsed\n const recursiveOpen = (taskId: string, allTasks: Task[]) => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return;\n if (task.hideChildren === true) {\n onExpanderClick(task);\n }\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n children.forEach(c => recursiveOpen(c.id, allTasks));\n };\n\n const handleTaskSelect = (taskId: string, selected: boolean) => {\n const descendants = getDescendants(taskId, tasks);\n if (selected) {\n setSelectedTasks(prev => {\n const newSelected = new Set(prev);\n newSelected.add(taskId);\n descendants.forEach(d => newSelected.add(d));\n return Array.from(newSelected);\n });\n recursiveOpen(taskId, tasks);\n } else {\n setSelectedTasks(prev => prev.filter(id => id !== taskId && !descendants.includes(id)));\n }\n };\n\n const handleSelectAll = (selected: boolean) => {\n if (selected) {\n // Select only top-level tasks and their descendants\n const topLevelTasks = tasks.filter(task => !getParentWbs(task.id));\n const newSelected = new Set<string>();\n topLevelTasks.forEach(task => {\n newSelected.add(task.id);\n const descendants = getDescendants(task.id, tasks);\n descendants.forEach(d => newSelected.add(d));\n recursiveOpen(task.id, tasks); // Expand all children\n });\n setSelectedTasks(Array.from(newSelected));\n } else {\n setSelectedTasks([]);\n }\n };\n\n const headerProps = {\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n scheduleType,\n allSelected: tasks.length > 0 && selectedTasks.length === tasks.length,\n onSelectAll: onMultiSelect ? handleSelectAll : undefined,\n };\n const selectedTaskId = selectedTask ? selectedTask.id : \"\";\n\n const tableProps = {\n rowHeight,\n rowWidth,\n fontFamily,\n fontSize,\n tasks,\n leafTasks,\n scheduleType,\n locale,\n selectedTaskId: selectedTaskId,\n setSelectedTask,\n onExpanderClick,\n selectedTasks: onMultiSelect ? selectedTasks : undefined,\n onTaskSelect: onMultiSelect ? handleTaskSelect : undefined,\n taskLabelRenderer,\n };\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 scheduleType: string;\n dates: Date[];\n svgWidth: number;\n rowHeight: number;\n columnWidth: number;\n todayColor: string;\n weekendColor: string;\n rtl: boolean;\n};\nexport const GridBody: React.FC<GridBodyProps> = ({\n tasks,\n scheduleType,\n dates,\n rowHeight,\n svgWidth,\n columnWidth,\n todayColor,\n weekendColor,\n rtl,\n}) => {\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={\n isDarkerRow\n ? styles.darkerGridRow\n : scheduleType === \"lookAhead\"\n ? styles.gridRowLookAhead\n : styles.gridRow\n }\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 let weekend: ReactChild[] = [];\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 if (date.getDay() === 6 || date.getDay() === 0) {\n weekend.push(\n <rect\n x={tickX}\n y={0}\n width={columnWidth}\n height={y}\n fill={weekendColor}\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 {scheduleType === \"lookAhead\" && <g className=\"weekend\">{weekend}</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 =\n textAnchor === \"start\"\n ? styles.textAnchorStart\n : textAnchor === \"middle\"\n ? styles.textAnchorMiddle\n : styles.textAnchorEnd;\n return (\n <g className=\"calendarTop\">\n <line\n x1={x1Line}\n y1={y1Line}\n x2={x1Line}\n y2={y2Line}\n className={styles.calendarTopTick}\n key={value + \"line\"}\n />\n <text\n key={value + \"text\"}\n y={yText}\n x={xText}\n className={`${styles.calendarTopText} ${textAnchorClass}`}\n >\n {value}\n </text>\n </g>\n );\n};\n","import React, { ReactChild } from \"react\";\nimport { ViewMode } from \"../../types/public-types\";\nimport { TopPartOfCalendar } from \"./top-part-of-calendar\";\nimport {\n getCachedDateTimeFormat,\n getLocalDayOfWeek,\n getLocaleMonth,\n getWeekNumberISO8601,\n} from \"../../helpers/date-helper\";\nimport { DateSetup } from \"../../types/date-setup\";\nimport styles from \"./calendar.module.css\";\n\nexport type CalendarProps = {\n dateSetup: DateSetup;\n locale: string;\n viewMode: ViewMode;\n rtl: boolean;\n headerHeight: number;\n columnWidth: number;\n fontFamily: string;\n fontSize: string;\n};\n\nexport const Calendar: React.FC<CalendarProps> = ({\n dateSetup,\n locale,\n viewMode,\n rtl,\n headerHeight,\n columnWidth,\n fontFamily,\n fontSize,\n}) => {\n const getCalendarValuesForYear = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const bottomValue = date.getFullYear();\n bottomValues.push(\n <text\n key={date.getFullYear()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={styles.calendarBottomText}\n >\n {bottomValue}\n </text>\n );\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (6 + i + date.getFullYear() + 1) * columnWidth;\n } else {\n xText = (6 + i - date.getFullYear()) * columnWidth;\n }\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={headerHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForQuarter = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const quarter = Math.floor(date.getMonth() / 3) + 1;\n const bottomValue = `Q${quarter}`;\n bottomValues.push(\n <text\n key={`${bottomValue}-${date.getFullYear()}`}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={styles.calendarBottomText}\n >\n {bottomValue}\n </text>\n );\n\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (3 + i + quarter) * columnWidth;\n } else {\n xText = (3 + i - quarter) * columnWidth;\n }\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={headerHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n const getCalendarValuesForMonth = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n // const bottomValue = getLocaleMonth(date, locale);\n const bottomValue = date.toLocaleString(locale, { month: \"short\" });\n bottomValues.push(\n <text\n key={bottomValue + date.getFullYear()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorEnd}`}\n >\n {bottomValue}\n </text>\n );\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n let xText: number;\n if (rtl) {\n xText = (6 + i + date.getMonth() + 1) * columnWidth;\n } else {\n xText = (6 + i - date.getMonth()) * columnWidth;\n }\n console.log(xText);\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={xText}\n yText={topDefaultHeight * 0.9}\n textAnchor=\"end\"\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForWeek = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n let weeksCount: number = 1;\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = dates.length - 1; i >= 0; i--) {\n const date = dates[i];\n let topValue = \"\";\n if (i === 0 || date.getMonth() !== dates[i - 1].getMonth()) {\n // top\n topValue = `${getLocaleMonth(date, locale)}, ${date.getFullYear()}`;\n }\n // bottom\n const bottomValue = `W${getWeekNumberISO8601(date)}`;\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={`${styles.calendarTopText} ${styles.textAnchorStart}`}\n >\n {bottomValue}\n </text>\n );\n\n if (topValue) {\n // if last day is new month\n if (i !== dates.length - 1) {\n topValues.push(\n <TopPartOfCalendar\n key={topValue}\n value={topValue}\n x1Line={columnWidth * i + weeksCount * columnWidth}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * i + columnWidth * weeksCount * 0.5}\n yText={topDefaultHeight * 0.9}\n textAnchor=\"start\"\n />\n );\n }\n weeksCount = 0;\n }\n weeksCount++;\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue =\n columnWidth > 55\n ? `${getLocalDayOfWeek(date, locale, \"short\")}, ${date\n .getDate()\n .toString()}`\n : `${getLocalDayOfWeek(date, locale, \"narrow\")},${date\n .getDate()\n .toString()}`;\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n >\n {bottomValue}\n </text>\n );\n if (\n i + 1 !== dates.length &&\n date.getMonth() !== dates[i + 1].getMonth()\n ) {\n const topValue = `${getLocaleMonth(\n date,\n locale\n )} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * (i + 1)}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={\n topValues.length === 0\n ? columnWidth * (i + 1) * 0.5\n : columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5\n }\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n if (i + 1 === dates.length) {\n const topValue = `${getLocaleMonth(\n date,\n locale\n )} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * (i + 1)}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForPartOfDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const ticks = viewMode === ViewMode.HalfDay ? 2 : 4;\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue = getCachedDateTimeFormat(locale, {\n hour: \"numeric\",\n }).format(date);\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n fontFamily={fontFamily}\n >\n {bottomValue}\n </text>\n );\n if (i === 0 || date.getDate() !== dates[i - 1].getDate()) {\n const topValue = `${getLocalDayOfWeek(\n date,\n locale,\n \"short\"\n )}, ${date.getDate()} ${getLocaleMonth(date, locale)}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + date.getFullYear()}\n value={topValue}\n x1Line={columnWidth * i + ticks * columnWidth}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * i + ticks * columnWidth * 0.5}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n\n const getCalendarValuesForHour = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n const bottomValue = getCachedDateTimeFormat(locale, {\n hour: \"numeric\",\n }).format(date);\n\n bottomValues.push(\n <text\n key={date.getTime()}\n y={headerHeight * 0.8}\n x={columnWidth * (i + +rtl)}\n className={styles.calendarBottomText}\n fontFamily={fontFamily}\n >\n {bottomValue}\n </text>\n );\n if (i !== 0 && date.getDate() !== dates[i - 1].getDate()) {\n const displayDate = dates[i - 1];\n const topValue = `${getLocalDayOfWeek(\n displayDate,\n locale,\n \"long\"\n )}, ${displayDate.getDate()} ${getLocaleMonth(displayDate, locale)}`;\n const topPosition = (date.getHours() - 24) / 2;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + displayDate.getFullYear()}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={columnWidth * (i + topPosition)}\n yText={topDefaultHeight * 0.9}\n />\n );\n }\n }\n\n return [topValues, bottomValues];\n };\n\n let topValues: ReactChild[] = [];\n let bottomValues: ReactChild[] = [];\n switch (dateSetup.viewMode) {\n case ViewMode.Year:\n [topValues, bottomValues] = getCalendarValuesForYear();\n break;\n case ViewMode.Quarter:\n [topValues, bottomValues] = getCalendarValuesForQuarter();\n break;\n case ViewMode.Month:\n [topValues, bottomValues] = getCalendarValuesForMonth();\n break;\n case ViewMode.Week:\n [topValues, bottomValues] = getCalendarValuesForWeek();\n break;\n case ViewMode.Day:\n [topValues, bottomValues] = getCalendarValuesForDay();\n break;\n case ViewMode.QuarterDay:\n case ViewMode.HalfDay:\n [topValues, bottomValues] = getCalendarValuesForPartOfDay();\n break;\n case ViewMode.Hour:\n [topValues, bottomValues] = getCalendarValuesForHour();\n }\n return (\n <g\n className=\"calendar\"\n fontSize={fontSize}\n fontFamily={fontFamily}\n width={columnWidth * dateSetup.dates.length}\n >\n <rect\n x={0}\n y={0}\n width={columnWidth * dateSetup.dates.length}\n height={headerHeight}\n className={styles.calendarHeader}\n />\n {bottomValues} {topValues}\n </g>\n );\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import React from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Dependency } from \"../../types/public-types\";\n\ntype ArrowProps = {\n taskFrom: BarTask;\n taskTo: BarTask;\n rowHeight: number;\n taskHeight: number;\n arrowIndent: number;\n arrowColor: string;\n dependencyType: Dependency;\n};\n\nexport const Arrow: React.FC<ArrowProps> = ({\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n arrowColor,\n dependencyType,\n}) => {\n let [path, trianglePoints] = drawPathAndTriangle(\n taskFrom,\n taskTo,\n rowHeight,\n taskHeight,\n arrowIndent,\n dependencyType\n );\n\n return (\n <g className=\"arrow\">\n <path strokeWidth=\"1.5\" d={path} fill=\"none\" stroke={arrowColor} />\n <polygon points={trianglePoints} fill={arrowColor} />\n </g>\n );\n};\n\nconst drawPathAndTriangle = (\n taskFrom: BarTask,\n taskTo: BarTask,\n rowHeight: number,\n taskHeight: number,\n arrowIndent: number,\n dependencyType: Dependency\n) => {\n const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\n const taskToEndY = taskTo.y + taskHeight / 2;\n const verticalOffset = indexCompare * (rowHeight / 2);\n\n // 1️⃣ Pick start/end x-points based on dependency type\n const minX = (t: BarTask) => {\n if (t.x1 && t.actualx1) {\n return Math.min(t.x1, t.actualx1);\n } else if (t.x1) {\n return t.x1;\n } else if (t.actualx1) {\n return t.actualx1;\n } else {\n return 0;\n }\n };\n const maxX = (t: BarTask) => Math.max(t.x2 || 0, t.actualx2 || 0);\n\n let fromPoint: number, toPoint: number;\n switch (dependencyType) {\n case \"SS\":\n fromPoint = minX(taskFrom);\n toPoint = minX(taskTo);\n break;\n case \"SF\":\n fromPoint = minX(taskFrom);\n toPoint = maxX(taskTo);\n break;\n case \"FS\":\n fromPoint = maxX(taskFrom);\n toPoint = minX(taskTo);\n break;\n case \"FF\":\n fromPoint = maxX(taskFrom);\n toPoint = maxX(taskTo);\n break;\n }\n\n // 2️⃣ Helper for arrowhead points\n const arrowPoints = (x: number, y: number, right = true) =>\n right\n ? `${x},${y} ${x - 5},${y - 5} ${x - 5},${y + 5}` // Right\n : `${x},${y} ${x + 5},${y - 5} ${x + 5},${y + 5}`; // Left\n\n let path: string;\n let trianglePoints: string;\n\n // 3️⃣ Routing based on type\n switch (dependencyType) {\n case \"SS\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${\n fromPoint + Math.min(toPoint - fromPoint, 0) - 2 * arrowIndent\n }\n V ${taskToEndY}\n H ${toPoint - 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, true);\n break;\n\n case \"SF\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${fromPoint - 2 * arrowIndent}\n V ${taskFrom.y + taskHeight / 2 + verticalOffset}\n ${\n fromPoint - toPoint > 4 * arrowIndent\n ? \"\"\n : `H ${toPoint + 2 * arrowIndent}`\n }\n V ${taskToEndY}\n H ${toPoint + 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, false);\n break;\n\n case \"FS\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${fromPoint + 2 * arrowIndent}\n V ${taskFrom.y + taskHeight / 2 + verticalOffset}\n ${\n toPoint - fromPoint > 4 * arrowIndent\n ? \"\"\n : `H ${toPoint - 2 * arrowIndent}`\n }\n V ${taskToEndY}\n H ${toPoint - 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, true);\n break;\n\n case \"FF\":\n path = `M ${fromPoint} ${taskFrom.y + taskHeight / 2}\n H ${\n fromPoint + Math.max(toPoint - fromPoint, 0) + 2 * arrowIndent\n }\n V ${taskToEndY}\n H ${toPoint + 5}`;\n trianglePoints = arrowPoints(toPoint, taskToEndY, false);\n break;\n }\n\n return [path, trianglePoints];\n};\n","import { Task } from \"../types/public-types\";\nimport { BarTask, TaskTypeInternal } from \"../types/bar-task\";\nimport { BarMoveAction } from \"../types/gantt-task-actions\";\n\nexport const convertToBarTasks = (\n tasks: Task[],\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string,\n projectProgressColor: string,\n projectProgressSelectedColor: string,\n projectBackgroundColor: string,\n projectBackgroundSelectedColor: string,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n) => {\n let barTasks = tasks.map((t, i) => {\n return convertToBarTask(\n t,\n i,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n );\n });\n\n // set dependencies\n barTasks = barTasks.map(task => {\n const dependencies = task.dependencies || [];\n for (let j = 0; j < dependencies.length; j++) {\n const dependence = barTasks.findIndex(\n value => value.id === dependencies[j].id\n );\n if (\n dependence !== -1 &&\n task.start.getTime() > 0 &&\n task.end.getTime() > 0\n ) {\n const barchild = { ...task, dependencyType: dependencies[j].type };\n barTasks[dependence].barChildren.push(barchild);\n }\n }\n return task;\n });\n\n return barTasks;\n};\n\nconst convertToBarTask = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string,\n projectProgressColor: string,\n projectProgressSelectedColor: string,\n projectBackgroundColor: string,\n projectBackgroundSelectedColor: string,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n): BarTask => {\n let barTask: BarTask;\n switch (task.type) {\n case \"milestone\":\n barTask = convertToMilestone(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n );\n break;\n case \"project\":\n barTask = convertToBar(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor\n );\n break;\n default:\n barTask = convertToBar(\n task,\n index,\n dates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor\n );\n break;\n }\n return barTask;\n};\n\nconst convertToBar = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n rtl: boolean,\n barProgressColor: string,\n barProgressSelectedColor: string,\n barBackgroundColor: string,\n barBackgroundSelectedColor: string\n): BarTask => {\n let x1: number;\n let x2: number;\n let actualx1: number;\n let actualx2: number;\n let progressStartWidth: number;\n let progressEndWidth: number;\n if (rtl) {\n //not used\n x2 = task.start ? taskXCoordinateRTL(task.start, dates, columnWidth) : -1;\n x1 = task.end ? taskXCoordinateRTL(task.end, dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinateRTL(task.actualStart, dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinateRTL(task.actualEnd, dates, columnWidth)\n : -1;\n } else {\n x1 = task.start ? taskXCoordinate(task.start, dates, columnWidth) : -1;\n x2 = task.end ? taskXCoordinate(task.end, dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinate(task.actualStart, dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinate(task.actualEnd, dates, columnWidth)\n : -1;\n }\n\n progressStartWidth = actualx1 && x1 ? Math.abs(actualx1 - x1) : -1;\n progressEndWidth = actualx2 && x2 ? Math.abs(actualx2 - x2) : -1;\n\n let typeInternal: TaskTypeInternal = task.type;\n // if (x1 && x2) {\n // if (typeInternal === \"task\" && x2 - x1 < handleWidth * 2) {\n // typeInternal = \"smalltask\";\n // x2 = x1 + handleWidth * 2;\n // }\n // }\n const [progressWidth, progressX] = progressWithByParams(\n actualx1,\n actualx2,\n task.progress,\n rtl\n );\n\n const y = taskYCoordinate(index, rowHeight, taskHeight);\n //const hideChildren = task.type === \"project\" ? task.hideChildren : undefined;\n const hideChildren = task.hideChildren || false; //allows tasks to have chldren. benjamin\n\n const styles = {\n backgroundColor: barBackgroundColor,\n backgroundSelectedColor: barBackgroundSelectedColor,\n progressColor: barProgressColor,\n progressSelectedColor: barProgressSelectedColor,\n ...task.styles,\n };\n return {\n ...task,\n typeInternal,\n x1,\n x2,\n actualx1,\n actualx2,\n progressStartWidth,\n progressEndWidth,\n y,\n index,\n progressX,\n progressWidth,\n barCornerRadius,\n handleWidth,\n hideChildren,\n height: taskHeight,\n barChildren: [],\n styles,\n };\n};\n\nconst convertToMilestone = (\n task: Task,\n index: number,\n dates: Date[],\n columnWidth: number,\n rowHeight: number,\n taskHeight: number,\n barCornerRadius: number,\n handleWidth: number,\n milestoneBackgroundColor: string,\n milestoneBackgroundSelectedColor: string\n): BarTask => {\n const x =\n task.start && task.end\n ? taskXCoordinate(task.end, dates, columnWidth)\n : 0;\n const y = taskYCoordinate(index, rowHeight, taskHeight);\n\n const x1 = task.start && task.end ? x - taskHeight * 0.5 : 0;\n const x2 = task.start && task.end ? x + taskHeight * 0.5 : 0;\n\n const rotatedHeight = taskHeight / 1.414;\n const styles = {\n backgroundColor: milestoneBackgroundColor,\n backgroundSelectedColor: milestoneBackgroundSelectedColor,\n progressColor: \"\",\n progressSelectedColor: \"\",\n ...task.styles,\n };\n return {\n ...task,\n x1,\n x2,\n actualx1: x1,\n actualx2: x2,\n progressStartWidth: 0,\n progressEndWidth: 0,\n y,\n index,\n progressX: 0,\n progressWidth: 0,\n barCornerRadius,\n handleWidth,\n typeInternal: task.type,\n progress: 0,\n height: rotatedHeight,\n hideChildren: undefined,\n barChildren: [],\n styles,\n };\n};\n\nconst taskXCoordinate = (xDate: Date, dates: Date[], columnWidth: number) => {\n const index = dates.findIndex(d => d.getTime() >= xDate.getTime()) - 1;\n if (index < 0) {\n if (dates[dates.length - 1].getTime() <= xDate.getTime()) {\n return dates.length * columnWidth;\n } else {\n return 0;\n }\n }\n const remainderMillis = xDate.getTime() - dates[index].getTime();\n const percentOfInterval =\n remainderMillis / (dates[index + 1].getTime() - dates[index].getTime());\n const x = index * columnWidth + percentOfInterval * columnWidth;\n return x;\n};\nconst taskXCoordinateRTL = (\n xDate: Date,\n dates: Date[],\n columnWidth: number\n) => {\n let x = taskXCoordinate(xDate, dates, columnWidth);\n x += columnWidth;\n return x;\n};\nconst taskYCoordinate = (\n index: number,\n rowHeight: number,\n taskHeight: number\n) => {\n const y = index * rowHeight + (rowHeight - taskHeight) / 2;\n return y;\n};\n\nexport const progressWithByParams = (\n taskX1: number,\n taskX2: number,\n progress: number,\n rtl: boolean\n) => {\n const progressWidth =\n taskX2 > 0 && taskX1 > 0 ? (taskX2 - taskX1) * progress * 0.01 : 0;\n let progressX: number;\n if (rtl) {\n progressX = taskX2 > 0 ? taskX2 - progressWidth : 0;\n } else {\n progressX = taskX1 > 0 ? taskX1 : 0;\n }\n return [progressWidth, progressX];\n};\n\nexport const progressByProgressWidth = (\n progressWidth: number,\n barTask: BarTask\n) => {\n const barWidth = barTask.x2 - barTask.x1;\n const progressPercent = Math.round((progressWidth * 100) / barWidth);\n if (progressPercent >= 100) return 100;\n else if (progressPercent <= 0) return 0;\n else return progressPercent;\n};\n\n// const progressByX = (x: number, task: BarTask) => {\n// if (x >= task.x2) return 100;\n// else if (x <= task.x1) return 0;\n// else {\n// const barWidth = task.x2 - task.x1;\n// const progressPercent = Math.round(((x - task.x1) * 100) / barWidth);\n// return progressPercent;\n// }\n// };\n// const progressByXRTL = (x: number, task: BarTask) => {\n// if (x >= task.x2) return 0;\n// else if (x <= task.x1) return 100;\n// else {\n// const barWidth = task.x2 - task.x1;\n// const progressPercent = Math.round(((task.x2 - x) * 100) / barWidth);\n// return progressPercent;\n// }\n// };\n\nexport const getProgressPoint = (\n progressX: number,\n taskY: number,\n taskHeight: number\n) => {\n const point = [\n progressX - 5,\n taskY + taskHeight,\n progressX + 5,\n taskY + taskHeight,\n progressX,\n taskY + taskHeight - 8.66,\n ];\n return point.join(\",\");\n};\n\nconst startByX = (x: number, xStep: number, task: BarTask) => {\n if (x >= task.x2 - task.handleWidth * 2) {\n x = task.x2 - task.handleWidth * 2;\n }\n const steps = Math.round((x - task.x1) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.x1 + additionalXValue;\n return newX;\n};\n\nconst startByActualX = (x: number, xStep: number, task: BarTask) => {\n if (x >= task.actualx2 - task.handleWidth * 2) {\n x = task.actualx2 - task.handleWidth * 2;\n }\n const steps = Math.round((x - task.actualx1) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.actualx1 + additionalXValue;\n return newX;\n};\n\nconst endByX = (x: number, xStep: number, task: BarTask) => {\n if (x <= task.x1 + task.handleWidth * 2) {\n x = task.x1 + task.handleWidth * 2;\n }\n const steps = Math.round((x - task.x2) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.x2 + additionalXValue;\n return newX;\n};\n\nconst endByActualX = (x: number, xStep: number, task: BarTask) => {\n if (x <= task.actualx1 + task.handleWidth * 2) {\n x = task.actualx1 + task.handleWidth * 2;\n }\n const steps = Math.round((x - task.actualx2) / xStep);\n const additionalXValue = steps * xStep;\n const newX = task.actualx2 + additionalXValue;\n return newX;\n};\n\nconst moveByX = (x: number, xStep: number, task: BarTask) => {\n const steps = Math.round((x - task.x1) / xStep);\n const additionalXValue = steps * xStep;\n const newX1 = task.x1 + additionalXValue;\n const newX2 = newX1 + task.x2 - task.x1;\n return [newX1, newX2];\n};\n\nconst moveByActualX = (x: number, xStep: number, task: BarTask) => {\n const steps = Math.round((x - task.actualx1) / xStep);\n const additionalXValue = steps * xStep;\n const newX1 = task.actualx1 + additionalXValue;\n const newX2 = newX1 + task.actualx2 - task.actualx1;\n return [newX1, newX2];\n};\n\nconst dateByX = (\n x: number,\n taskX: number,\n taskDate: Date,\n xStep: number,\n timeStep: number\n) => {\n let newDate = new Date(((x - taskX) / xStep) * timeStep + taskDate.getTime());\n newDate = new Date(\n newDate.getTime() +\n (newDate.getTimezoneOffset() - taskDate.getTimezoneOffset()) * 60000\n );\n return newDate;\n};\n\n/**\n * Method handles event in real time(mousemove) and on finish(mouseup)\n */\nexport const handleTaskBySVGMouseEvent = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n type: string,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number,\n rtl: boolean\n): { isChanged: boolean; changedTask: BarTask } => {\n let result: { isChanged: boolean; changedTask: BarTask };\n switch (selectedTask.type) {\n case \"milestone\":\n result = handleTaskBySVGMouseEventForMilestone(\n svgX,\n action,\n selectedTask,\n xStep,\n timeStep,\n initEventX1Delta\n );\n break;\n default:\n result = handleTaskBySVGMouseEventForBar(\n svgX,\n action,\n selectedTask,\n type,\n xStep,\n timeStep,\n initEventX1Delta,\n rtl\n );\n break;\n }\n return result;\n};\n\nconst handleTaskBySVGMouseEventForBar = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n type: string,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number,\n rtl: boolean\n): { isChanged: boolean; changedTask: BarTask } => {\n const changedTask: BarTask = { ...selectedTask };\n let isChanged = false;\n switch (action) {\n // case \"progress\":\n // if (rtl) {\n // changedTask.progress = progressByXRTL(svgX, selectedTask);\n // } else {\n // changedTask.progress = progressByX(svgX, selectedTask);\n // }\n // isChanged = changedTask.progress !== selectedTask.progress;\n // if (isChanged) {\n // const [progressWidth, progressX] = progressWithByParams(\n // changedTask.x1,\n // changedTask.x2,\n // changedTask.progress,\n // rtl\n // );\n // changedTask.progressWidth = progressWidth;\n // changedTask.progressX = progressX;\n // }\n // break;\n case \"start\": {\n const newX1 =\n type == \"planned\"\n ? startByX(svgX, xStep, selectedTask)\n : startByActualX(svgX, xStep, selectedTask);\n if (type == \"planned\") changedTask.x1 = newX1;\n else if (type == \"actual\") changedTask.actualx1 = newX1;\n isChanged =\n changedTask.x1 !== selectedTask.x1 ||\n changedTask.actualx1 !== selectedTask.actualx1;\n if (isChanged) {\n if (rtl) {\n if (type == \"planned\")\n changedTask.end = dateByX(\n newX1,\n selectedTask.x1,\n selectedTask.end,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualEnd = dateByX(\n newX1,\n selectedTask.actualx1,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n } else {\n if (type == \"planned\")\n changedTask.start = dateByX(\n newX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualStart = dateByX(\n newX1,\n selectedTask.actualx1,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n }\n const [progressWidth, progressX] = progressWithByParams(\n changedTask.x1,\n changedTask.x2,\n changedTask.progress,\n rtl\n );\n changedTask.progressWidth = progressWidth;\n changedTask.progressX = progressX;\n }\n break;\n }\n case \"end\": {\n const newX2 =\n type == \"planned\"\n ? endByX(svgX, xStep, selectedTask)\n : endByActualX(svgX, xStep, selectedTask);\n if (type == \"planned\") changedTask.x2 = newX2;\n else if (type == \"actual\") changedTask.actualx2 = newX2;\n isChanged =\n changedTask.x2 !== selectedTask.x2 ||\n changedTask.actualx2 !== selectedTask.actualx2;\n if (isChanged) {\n if (rtl) {\n if (type == \"planned\")\n changedTask.start = dateByX(\n newX2,\n selectedTask.x2,\n selectedTask.start,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualStart = dateByX(\n newX2,\n selectedTask.actualx2,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n } else {\n if (type == \"planned\")\n changedTask.end = dateByX(\n newX2,\n selectedTask.x2,\n selectedTask.end,\n xStep,\n timeStep\n );\n if (type == \"actual\")\n changedTask.actualEnd = dateByX(\n newX2,\n selectedTask.actualx2,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n }\n const [progressWidth, progressX] = progressWithByParams(\n changedTask.x1,\n changedTask.x2,\n changedTask.progress,\n rtl\n );\n changedTask.progressWidth = progressWidth;\n changedTask.progressX = progressX;\n }\n break;\n }\n case \"move\": {\n const [newMoveX1, newMoveX2] =\n type == \"planned\"\n ? moveByX(svgX - initEventX1Delta, xStep, selectedTask)\n : moveByActualX(svgX - initEventX1Delta, xStep, selectedTask);\n if (type == \"planned\") isChanged = newMoveX1 !== selectedTask.x1;\n if (type == \"actual\") isChanged = newMoveX1 !== selectedTask.actualx1;\n if (isChanged) {\n if (type == \"planned\") {\n changedTask.start = dateByX(\n newMoveX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n changedTask.end = dateByX(\n newMoveX2,\n selectedTask.x2,\n selectedTask.end,\n xStep,\n timeStep\n );\n changedTask.x1 = newMoveX1;\n changedTask.x2 = newMoveX2;\n }\n if (type == \"actual\") {\n changedTask.actualStart = dateByX(\n newMoveX1,\n selectedTask.actualx1,\n selectedTask.actualStart,\n xStep,\n timeStep\n );\n changedTask.actualEnd = dateByX(\n newMoveX2,\n selectedTask.actualx2,\n selectedTask.actualEnd,\n xStep,\n timeStep\n );\n changedTask.actualx1 = newMoveX1;\n changedTask.actualx2 = newMoveX2;\n }\n\n // const [progressWidth, progressX] = progressWithByParams(\n // changedTask.x1,\n // changedTask.x2,\n // changedTask.progress,\n // rtl\n // );\n // changedTask.progressWidth = progressWidth;\n // changedTask.progressX = progressX;\n }\n break;\n }\n }\n return { isChanged, changedTask };\n};\n\nconst handleTaskBySVGMouseEventForMilestone = (\n svgX: number,\n action: BarMoveAction,\n selectedTask: BarTask,\n xStep: number,\n timeStep: number,\n initEventX1Delta: number\n): { isChanged: boolean; changedTask: BarTask } => {\n const changedTask: BarTask = { ...selectedTask };\n let isChanged = false;\n switch (action) {\n case \"move\": {\n const [newMoveX1, newMoveX2] = moveByX(\n svgX - initEventX1Delta,\n xStep,\n selectedTask\n );\n isChanged = newMoveX1 !== selectedTask.x1;\n if (isChanged) {\n changedTask.start = dateByX(\n newMoveX1,\n selectedTask.x1,\n selectedTask.start,\n xStep,\n timeStep\n );\n changedTask.end = changedTask.start;\n changedTask.x1 = newMoveX1;\n changedTask.x2 = newMoveX2;\n }\n break;\n }\n }\n return { isChanged, changedTask };\n};\n","import { BarTask } from \"../types/bar-task\";\nimport { Task } from \"../types/public-types\";\n\nexport function isKeyboardEvent(\n event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\n): event is React.KeyboardEvent {\n return (event as React.KeyboardEvent).key !== undefined;\n}\n\nexport function isMouseEvent(\n event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\n): event is React.MouseEvent {\n return (event as React.MouseEvent).clientX !== undefined;\n}\n\nexport function isBarTask(task: Task | BarTask): task is BarTask {\n return (task as BarTask).x1 !== undefined;\n}\n\nexport function removeHiddenTasks(tasks: Task[]) {\n const groupedTasks = tasks.filter(\n t => t.hideChildren && t.type === \"project\"\n );\n if (groupedTasks.length > 0) {\n for (let i = 0; groupedTasks.length > i; i++) {\n const groupedTask = groupedTasks[i];\n const children = getChildren(tasks, groupedTask);\n tasks = tasks.filter(t => children.indexOf(t) === -1);\n }\n }\n return tasks;\n}\n\nfunction getChildren(taskList: Task[], task: Task) {\n let tasks: Task[] = [];\n if (task.type !== \"project\") {\n tasks = taskList.filter(\n t =>\n t.dependencies &&\n t.dependencies.map(({ id }) => id).indexOf(task.id) !== -1\n );\n } else {\n tasks = taskList.filter(t => t.project && t.project === task.id);\n }\n var taskChildren: Task[] = [];\n tasks.forEach(t => {\n taskChildren.push(...getChildren(taskList, t));\n });\n tasks = tasks.concat(tasks, taskChildren);\n return tasks;\n}\n\nexport const sortTasks = (taskA: Task, taskB: Task) => {\n const orderA = taskA.displayOrder || Number.MAX_VALUE;\n const orderB = taskB.displayOrder || Number.MAX_VALUE;\n if (orderA > orderB) {\n return 1;\n } else if (orderA < orderB) {\n return -1;\n } else {\n return 0;\n }\n};\n","import React from \"react\";\n// import style from \"./bar.module.css\";\n\ntype BarDisplayProps = {\n x: number;\n y: number;\n type: string;\n // actualX1: number;\n // actualX2: number;\n startProgressWidth: number;\n endProgressWidth: number;\n width: number;\n height: number;\n isSelected: boolean;\n /* progress start point */\n progressX: number;\n progressWidth: number;\n barCornerRadius: number;\n criticalPathArrows?: Array<{taskId: string, arrowColor: string}>\n styles: {\n taskProgressColor?: string;\n backgroundColor: string;\n backgroundSelectedColor: string;\n progressColor: string;\n progressSelectedColor: string;\n criticalPathColor?: string;\n };\n onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\n};\nexport const BarDisplay: React.FC<BarDisplayProps> = ({\n x,\n y,\n type,\n // actualX1,\n // actualX2,\n // startProgressWidth,\n // endProgressWidth,\n width,\n height,\n isSelected,\n progressX,\n progressWidth,\n barCornerRadius,\n styles,\n onMouseDown,\n}) => {\n const getProcessColor = () => {\n return isSelected ? styles.progressSelectedColor : styles.progressColor;\n };\n\n const getBarColor = () => {\n return isSelected ? styles.backgroundSelectedColor : styles.backgroundColor;\n };\n\n if (type == \"planned\")\n return (\n <g onMouseDown={onMouseDown}>\n <rect\n x={x}\n width={width}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getBarColor()}\n strokeWidth={2}\n stroke={styles.criticalPathColor}\n />\n {/* <rect\n x={actualX1}\n width={actualX2 - actualX1}\n y={y + height / 2}\n height={height / 2}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n /> */}\n <rect\n x={progressX}\n width={progressWidth}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n </g>\n );\n else\n return (\n <g onMouseDown={onMouseDown}>\n <rect\n x={x}\n width={width}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n />\n <rect\n x={progressX}\n width={progressWidth}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport styles from \"./bar.module.css\";\n\ntype BarDateHandleProps = {\n x: number;\n y: number;\n width: number;\n height: number;\n barCornerRadius: number;\n onMouseDown: (event: React.MouseEvent<SVGRectElement, MouseEvent>) => void;\n};\nexport const BarDateHandle: React.FC<BarDateHandleProps> = ({\n x,\n y,\n width,\n height,\n barCornerRadius,\n onMouseDown,\n}) => {\n return (\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n className={styles.barHandle}\n ry={barCornerRadius}\n rx={barCornerRadius}\n onMouseDown={onMouseDown}\n />\n );\n};\n","import React from \"react\";\n// import styles from \"./bar.module.css\";\n\ntype BarProgressHandleProps = {\n progressPoint: string;\n onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\n};\nexport const BarProgressHandle: React.FC<BarProgressHandleProps> = (\n {\n // progressPoint,\n // onMouseDown,\n }\n) => {\n return (\n <div />\n // <polygon\n // className={styles.barHandle}\n // points={progressPoint}\n // onMouseDown={onMouseDown}\n // />\n );\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarDateHandle } from \"./bar-date-handle\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const Bar: React.FC<TaskItemProps> = ({\n task,\n isProgressChangeable,\n isDateChangeable,\n rtl,\n type,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n +!rtl * task.progressWidth + task.progressX,\n task.y,\n task.height\n );\n const handleHeight = task.height / 2 - 1;\n if (type == \"planned\") {\n if (task?.x1 >= 0 && task?.x2 >= 0)\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height / 2}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"planned\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left */}\n <BarDateHandle\n x={task.x1 + 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"start\", task, e, \"planned\");\n }}\n />\n {/* right */}\n <BarDateHandle\n x={task.x2 - task.handleWidth - 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"planned\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"planned\");\n }}\n />\n )}\n </g>\n </g>\n );\n else return <g className={styles.barWrapper} tabIndex={0}></g>;\n } else if (task?.actualx1 >= 0 && task?.actualx2 >= 0) {\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.actualx1}\n y={task.y + task.height / 2}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.actualx2 - task.actualx1}\n height={task.height / 2}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"actual\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left */}\n <BarDateHandle\n x={task.actualx1 + 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"start\", task, e, \"actual\");\n }}\n />\n {/* right */}\n <BarDateHandle\n x={task.actualx2 - task.handleWidth - 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"actual\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"actual\");\n }}\n />\n )}\n </g>\n </g>\n );\n } else {\n return <g className={styles.barWrapper} tabIndex={0}></g>;\n }\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const BarSmall: React.FC<TaskItemProps> = ({\n task,\n type,\n isProgressChangeable,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n task.progressWidth + task.x1,\n task.y,\n task.height\n );\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e);\n }}\n />\n <g className=\"handleGroup\">\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e);\n }}\n />\n )}\n </g>\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./milestone.module.css\";\n\nexport const Milestone: React.FC<TaskItemProps> = ({\n task,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const transform = `rotate(45 ${task.x1 + task.height * 0.356} \n ${task.y + task.height * 0.85})`;\n const getBarColor = () => {\n return isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n };\n\n return (\n <g tabIndex={0} className={styles.milestoneWrapper}>\n <rect\n fill={getBarColor()}\n x={task.x1}\n width={task.height}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n transform={transform}\n className={styles.milestoneBackground}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e,\"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e);\n }}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./project.module.css\";\n\nexport const Project: React.FC<TaskItemProps> = ({ task, isSelected }) => {\n const barColor = isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n const processColor = isSelected\n ? task.styles.progressSelectedColor\n : task.styles.progressColor;\n const projectWith = task.x2 - task.x1;\n\n const projectLeftTriangle = [\n task.x1,\n task.y + task.height / 2 - 1,\n task.x1,\n task.y + task.height,\n task.x1 + 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n const projectRightTriangle = [\n task.x2,\n task.y + task.height / 2 - 1,\n task.x2,\n task.y + task.height,\n task.x2 - 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n\n return (\n <g tabIndex={0} className={styles.projectWrapper}>\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectBackground}\n />\n <rect\n x={task.progressX}\n width={task.progressWidth}\n y={task.y}\n height={task.height}\n ry={task.barCornerRadius}\n rx={task.barCornerRadius}\n fill={processColor}\n />\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height / 2}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectTop}\n />\n <polygon\n className={styles.projectTop}\n points={projectLeftTriangle}\n fill={barColor}\n />\n <polygon\n className={styles.projectTop}\n points={projectRightTriangle}\n fill={barColor}\n />\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { GanttContentMoveAction } from \"../../types/gantt-task-actions\";\nimport { Bar } from \"./bar/bar\";\nimport { BarSmall } from \"./bar/bar-small\";\nimport { Milestone } from \"./milestone/milestone\";\nimport { Project } from \"./project/project\";\n// import style from \"./task-list.module.css\";\n\nexport type TaskItemProps = {\n task: BarTask;\n arrowIndent: number;\n taskHeight: number;\n isProgressChangeable: boolean;\n isDateChangeable: boolean;\n isDelete: boolean;\n isSelected: boolean;\n rtl: boolean;\n type?: string;\n onEventStart: (\n action: GanttContentMoveAction,\n selectedTask: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => any;\n};\n\nexport const TaskItem: React.FC<TaskItemProps> = props => {\n const {\n task,\n // arrowIndent,\n isDelete,\n // taskHeight,\n isSelected,\n // rtl,\n onEventStart,\n } = {\n ...props,\n };\n // const textRef = useRef<SVGTextElement>(null);\n const [taskItem, setTaskItem] = useState<JSX.Element[]>([<div />]);\n // const [isTextInside, setIsTextInside] = useState(true);\n\n useEffect(() => {\n switch (task.typeInternal) {\n case \"milestone\":\n if (task.x1 >= 0 && task.actualx1 >= 0)\n setTaskItem([<Milestone {...props} />]);\n else setTaskItem([]);\n break;\n case \"project\":\n if (\n task?.x1 >= 0 &&\n task?.x2 >= 0 &&\n task.x2 > task.x1 &&\n task?.actualx1 >= 0 &&\n task?.actualx2 >= 0 &&\n task.actualx2 > task.actualx1\n )\n setTaskItem([<Project {...props} />]);\n else setTaskItem([]);\n break;\n case \"smalltask\":\n setTaskItem([<BarSmall {...props} />]);\n break;\n default:\n {\n let taskItem = [];\n if (task?.x1 >= 0 && task?.x2 >= 0) {\n taskItem.push(<Bar {...props} type={\"planned\"} />);\n }\n if (task?.actualx1 >= 0 && task?.actualx2 >= 0) {\n taskItem.push(<Bar {...props} type={\"actual\"} />);\n }\n setTaskItem(taskItem);\n }\n break;\n }\n }, [task, isSelected]);\n\n // useEffect(() => {\n // if (textRef.current) {\n // setIsTextInside(textRef.current.getBBox().width < task.x2 - task.x1);\n // }\n // }, [textRef, task]);\n\n // const getX = () => {\n // const width = task.x2 - task.x1;\n // const hasChild = task.barChildren.length > 0;\n // if (isTextInside) {\n // return task.x1 + width * 0.5;\n // }\n // if (rtl && textRef.current) {\n // return (\n // task.x1 -\n // textRef.current.getBBox().width -\n // arrowIndent * +hasChild -\n // arrowIndent * 0.2\n // );\n // } else {\n // return task.x1 + width + arrowIndent * +hasChild + arrowIndent * 0.2;\n // }\n // };\n\n return (\n <g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"planned\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"planned\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"planned\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"planned\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[0]}\n </g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"actual\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"actual\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"actual\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"actual\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"actual\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[1]}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Dependency, EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Arrow } from \"../other/arrow\";\nimport { handleTaskBySVGMouseEvent } from \"../../helpers/bar-helper\";\nimport { isKeyboardEvent } from \"../../helpers/other-helper\";\nimport { TaskItem } from \"../task-item/task-item\";\nimport {\n BarMoveAction,\n GanttContentMoveAction,\n GanttEvent,\n} from \"../../types/gantt-task-actions\";\nimport { Milestone } from \"../task-item/milestone/milestone\";\n\nexport type TaskGanttContentProps = {\n tasks: BarTask[];\n dates: Date[];\n ganttEvent: GanttEvent;\n selectedTask: BarTask | undefined;\n rowHeight: number;\n columnWidth: number;\n timeStep: number;\n svg?: React.RefObject<SVGSVGElement>;\n svgWidth: number;\n taskHeight: number;\n arrowColor: string;\n arrowIndent: number;\n fontSize: string;\n fontFamily: string;\n rtl: boolean;\n 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 const getArrows = (isCritical: boolean, criticalPathType?: string) =>\n tasks.flatMap(_task => {\n const task =\n _task.start.getTime() > 0 && _task.end.getTime() > 0\n ? _task\n : undefined;\n if (!task) {\n return [\n <g\n key={_task.id + (isCritical ? \"-critical\" : \"-normal\")}\n style={{ height: taskHeight }}\n />,\n ];\n }\n return task.barChildren\n .map(child => {\n if (task.x2 > task.x1 || task.actualx2 > task.actualx1) {\n const criticalTask = task.criticalPathArrows?.find(\n arrow => arrow.taskId === tasks[child.index].id &&\n (!!arrow.criticalPathType\n ? arrow.criticalPathType === criticalPathType\n : !criticalPathType)\n );\n\n // Only render arrows matching the group\n if (!!criticalTask === isCritical) {\n return (\n <Arrow\n key={`Arrow from ${task.id} to ${tasks[child.index].id}${\n isCritical ? \"-critical\" : \"\"\n }`}\n taskFrom={task}\n taskTo={tasks[child.index]}\n rowHeight={rowHeight}\n dependencyType={child.dependencyType as Dependency}\n taskHeight={taskHeight}\n arrowIndent={arrowIndent}\n arrowColor={criticalTask?.arrowColor || \"#808080\"}\n />\n );\n }\n }\n return null;\n })\n .filter(Boolean);\n });\n\n return (\n <g className=\"content\">\n <g className=\"arrows\">\n {/* Render non-critical arrows first */}\n {getArrows(false)}\n {/* Render secondary critical path arrows on top */}\n {getArrows(true, \"secondary\")}\n {/* Render primary critical path arrows on top */}\n {getArrows(true, \"primary\")}\n </g>\n <g className=\"bar\" fontFamily={fontFamily} fontSize={fontSize}>\n {tasks.map(_task => {\n const task =\n (_task.start.getTime() > 0 && _task.end.getTime() > 0) ||\n (_task.actualStart.getTime() > 0 && _task.actualEnd.getTime() > 0)\n ? _task\n : undefined;\n if (!task && _task.typeInternal === \"milestone\") {\n return (\n <Milestone\n task={_task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={false}\n isDateChangeable={false}\n isDelete={!_task.isDisabled}\n onEventStart={handleBarEventStart}\n key={_task.id}\n isSelected={!!selectedTask && _task.id === selectedTask.id}\n rtl={rtl}\n />\n );\n }\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 scheduleType = \"main\",\n startDate = new Date(),\n endDate = new Date(),\n headerHeight = 50,\n columnWidth = 60,\n listCellWidth = \"155px\",\n rowHeight = 50,\n ganttHeight = 0,\n viewMode = ViewMode.Day,\n preStepsCount = 1,\n locale = \"en-US\",\n barFill = 60,\n barCornerRadius = 3,\n barProgressColor = \"#a3a3ff\",\n barProgressSelectedColor = \"#8282f5\",\n barBackgroundColor = \"#b8c2cc\",\n barBackgroundSelectedColor = \"#aeb8c2\",\n projectProgressColor = \"#7db59a\",\n projectProgressSelectedColor = \"#59a985\",\n projectBackgroundColor = \"#fac465\",\n projectBackgroundSelectedColor = \"#f7bb53\",\n milestoneBackgroundColor = \"#f1c453\",\n milestoneBackgroundSelectedColor = \"#f29e4c\",\n rtl = false,\n handleWidth = 8,\n timeStep = 300000,\n arrowColor = \"grey\",\n fontFamily = \"Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue\",\n fontSize = \"14px\",\n arrowIndent = 20,\n todayColor = \"rgba(252, 248, 227, 0.5)\",\n weekendColor = \"#f5f5f5\",\n viewDate,\n TooltipContent = StandardTooltipContent,\n TaskListHeader = TaskListHeaderDefault,\n TaskListTable = TaskListTableDefault,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n onSelect,\n onExpanderClick,\n onMultiSelect,\n taskLabelRenderer,\n}) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const [dateSetup, setDateSetup] = useState<DateSetup>(() => {\n const [startDateRange, endDateRange] = ganttDateRange(\n tasks,\n viewMode,\n preStepsCount\n );\n if (scheduleType === \"lookAhead\") {\n return { viewMode, dates: seedDates(startDate, endDate, viewMode) };\n }\n return {\n viewMode,\n dates: seedDates(startDateRange, endDateRange, viewMode),\n };\n });\n const [currentViewDate, setCurrentViewDate] = useState<Date | undefined>(\n undefined\n );\n\n const [taskListWidth, setTaskListWidth] = useState(0);\n const [svgContainerWidth, setSvgContainerWidth] = useState(0);\n const [svgContainerHeight, setSvgContainerHeight] = useState(ganttHeight);\n const [barTasks, setBarTasks] = useState<BarTask[]>([]);\n const [ganttEvent, setGanttEvent] = useState<GanttEvent>({\n action: \"\",\n });\n const taskHeight = useMemo(\n () => (rowHeight * barFill) / 100,\n [rowHeight, barFill]\n );\n\n const [selectedTask, setSelectedTask] = useState<BarTask>();\n const [failedTask, setFailedTask] = useState<BarTask | null>(null);\n\n const svgWidth =\n columnWidth < 55\n ? (dateSetup.dates.length + 0.5) * columnWidth\n : dateSetup.dates.length * columnWidth;\n const ganttFullHeight = barTasks.length * rowHeight;\n\n const [scrollY, setScrollY] = useState(0);\n const [scrollX, setScrollX] = useState(-1);\n const [ignoreScrollEvent, setIgnoreScrollEvent] = useState(false);\n\n const [hasCircularDeps, setHasCircularDeps] = useState(false);\n\n useEffect(() => {\n if (scheduleType === \"lookAhead\" && startDate && endDate) {\n setDateSetup({\n viewMode,\n dates: seedDates(startDate, endDate, viewMode),\n });\n }\n }, [startDate, endDate]);\n // task change events\n useEffect(() => {\n let filteredTasks: Task[];\n if (onExpanderClick) {\n filteredTasks = removeHiddenTasks(tasks);\n } else {\n filteredTasks = tasks;\n }\n filteredTasks = filteredTasks.sort(sortTasks);\n const [startDateRange, endDateRange] = ganttDateRange(\n filteredTasks,\n viewMode,\n preStepsCount\n );\n let newDates = seedDates(startDateRange, endDateRange, viewMode);\n if (scheduleType === \"lookAhead\") {\n newDates = seedDates(startDate, endDate, viewMode);\n }\n if (rtl) {\n newDates = newDates.reverse();\n if (scrollX === -1) {\n setScrollX(newDates.length * columnWidth);\n }\n }\n if (scheduleType !== \"lookAhead\") {\n setDateSetup({\n dates: seedDates(startDateRange, endDateRange, viewMode),\n viewMode,\n });\n }\n\n let [primaryPath, secondaryPath] = getCriticalPaths(leafTasks);\n if (leafTasks.length > 0 && primaryPath.length === 0 && secondaryPath.length === 0) {\n // One or more circular dependencies found\n setHasCircularDeps(true);\n } else {\n\n if (hasCircularDeps && localStorage.getItem('hideCircularDepsAlert') === 'true' ) {\n // We've checked deps before and it did have them, but it doesn't have them now\n // Revert to initial state\n localStorage.removeItem('hideCircularDepsAlert');\n }\n\n setHasCircularDeps(false);\n }\n\n // Color the paths.\n uncolorAll(tasks);\n if (scheduleType !== \"lookAhead\") {\n colorPath(secondaryPath, \"#00ff00\", tasks,\"secondary\");\n colorPath(primaryPath, \"#ff0000\", tasks,\"primary\");\n }\n setBarTasks(\n convertToBarTasks(\n filteredTasks,\n newDates,\n columnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n )\n );\n }, [\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 const hideAlert = () => {\n const checkbox = document.getElementById(\"alert-dismiss\") as HTMLInputElement;\n const alert = document.getElementById(\"alert-container\") as HTMLElement;\n\n if (checkbox.checked) {\n localStorage.setItem('hideCircularDepsAlert', 'true');\n alert.style.display = \"None\";\n }\n }\n\n /**\n * Handles arrow keys events and transform it to new scroll\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n event.preventDefault();\n let newScrollY = scrollY;\n let newScrollX = scrollX;\n let isX = true;\n switch (event.key) {\n case \"Down\": // IE/Edge specific value\n case \"ArrowDown\":\n newScrollY += rowHeight;\n isX = false;\n break;\n case \"Up\": // IE/Edge specific value\n case \"ArrowUp\":\n newScrollY -= rowHeight;\n isX = false;\n break;\n case \"Left\":\n case \"ArrowLeft\":\n newScrollX -= columnWidth;\n break;\n case \"Right\": // IE/Edge specific value\n case \"ArrowRight\":\n newScrollX += columnWidth;\n break;\n }\n if (isX) {\n if (newScrollX < 0) {\n newScrollX = 0;\n } else if (newScrollX > svgWidth) {\n newScrollX = svgWidth;\n }\n setScrollX(newScrollX);\n } else {\n if (newScrollY < 0) {\n newScrollY = 0;\n } else if (newScrollY > ganttFullHeight - ganttHeight) {\n newScrollY = ganttFullHeight - ganttHeight;\n }\n setScrollY(newScrollY);\n }\n setIgnoreScrollEvent(true);\n };\n\n /**\n * Task select event\n */\n const handleSelectedTask = (taskId: string) => {\n const newSelectedTask = barTasks.find(t => t.id === taskId);\n const oldSelectedTask = barTasks.find(\n t => !!selectedTask && t.id === selectedTask.id\n );\n if (onSelect) {\n if (oldSelectedTask) {\n onSelect(oldSelectedTask, false);\n }\n if (newSelectedTask) {\n onSelect(newSelectedTask, true);\n }\n }\n setSelectedTask(newSelectedTask);\n };\n const handleExpanderClick = (task: Task) => {\n if (onExpanderClick && task.hideChildren !== undefined) {\n onExpanderClick({ ...task, hideChildren: !task.hideChildren });\n }\n };\n const gridProps: GridProps = {\n columnWidth,\n svgWidth,\n tasks: tasks,\n scheduleType: scheduleType,\n rowHeight,\n dates: dateSetup.dates,\n todayColor,\n weekendColor,\n rtl,\n };\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 scheduleType,\n locale,\n headerHeight,\n scrollY,\n ganttHeight,\n horizontalContainerClass: styles.horizontalContainer,\n selectedTask,\n taskListRef,\n setSelectedTask: handleSelectedTask,\n onExpanderClick: handleExpanderClick,\n onDoubleClick,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n };\n return (\n <div>\n {hasCircularDeps && localStorage.getItem('hideCircularDepsAlert') !== 'true' && (\n <div id=\"alert-container\" className={`${styles.alertContainer} ${styles.warning}`}>\n <input type=\"checkbox\" id=\"alert-dismiss\" className={styles.alertDismissCheckbox} onChange={hideAlert} />\n <label htmlFor=\"alert-dismiss\" className={styles.alertCloseButton}>&times;</label>\n <div className={styles.alertContent}>\n <p>Critical path could not be displayed due to circular dependencies</p>\n </div>\n </div>\n )}\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].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return false; // Error: an error came from deeper recursive call\n }\n\n taskMap[taskID].finished = true;\n\n sortedTaskList.push(taskID);\n return true;\n}\nexport function getCriticalPaths(leafTasks: Task[]) {\n // Map ids to tasks for faster access.\n // O(n) space, O(n) time to add all from list, O(1) time for each access.\n let taskMap = {};\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id] = { task: leafTasks[i] };\n\n // Sort the tasks so each dependent is listed after its dependencies.\n // O(num vertices + num edges)\n let sortedTaskList: string[] = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let successVal = topologicalOrderingHelper(\n leafTasks[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return [[], []]; // Abort: there was a cycle\n }\n\n // Map tasks to their dependents for faster access.\n // Dependencies are already easy enough to access, but not dependents.\n // O(num vertices + num edges)\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id].dependents = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let task = leafTasks[i];\n if (task.dependencies)\n for (let j = 0; j < task.dependencies.length; j++)\n taskMap[task.dependencies[j].id]?.dependents.push(task.id);\n }\n\n // Compute critical paths, in reverse order to handle dependents before dependencies.\n // O(num vertices + num edges)\n for (let i = sortedTaskList.length - 1; i >= 0; i--)\n computeCriticalPath(sortedTaskList[i], taskMap);\n\n // 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[],criticalPathType: string) {\n // Color boxes\n for (let i = 0; i < path.length; i++) {\n // For this task in the path, find the most immediate ancestor in tasks.\n let longestIDLength = 0;\n let longestTask;\n for (let j = 0; j < tasks.length; j++) {\n if (path[i].id === tasks[j].id) {\n longestTask = tasks[j];\n break;\n }\n if (\n path[i].id.startsWith(tasks[j].id + \".\") &&\n tasks[j].id.length > longestIDLength\n ) {\n longestIDLength = tasks[j].id.length;\n longestTask = tasks[j];\n }\n }\n // If some ancestor is found, color it.\n if (longestTask) {\n let styles = longestTask.styles ?? {};\n styles.criticalPathColor = color;\n longestTask.styles = styles;\n }\n }\n // Color arrows\n for (let i = 0; i + 1 < path.length; i++) {\n // Items in the critical paths came from leafTasks, but we need to change the versions from tasks instead.\n let taskFromTasks;\n for (let j = 0; j < tasks.length; j++)\n if (path[i].id === tasks[j].id) {\n taskFromTasks = tasks[j];\n break;\n }\n if (taskFromTasks) {\n let arrows = taskFromTasks.criticalPathArrows;\n // Create the arrows list if it does not exist.\n if (!arrows) arrows = [];\n // If the arrow is already colored, replace its color in the list.\n let arrow = arrows.find(arrow => arrow.taskId === path[i + 1].id);\n if (arrow) {\n arrow.arrowColor = color;\n arrow.criticalPathType = criticalPathType;\n }\n // Else, add the new colored arrow to the list.\n else arrows.push({ taskId: path[i + 1].id, arrowColor: color, criticalPathType: criticalPathType });\n taskFromTasks.criticalPathArrows = arrows;\n }\n }\n}\nexport const getParentWbs = (wbs: string): string | undefined => {\n const segments = wbs.split('.');\n if (segments.length <= 1) return undefined; // Top-level task has no parent\n return segments.slice(0, -1).join('.'); // Remove last segment\n};"],"names":["ViewMode","intlDTCache","getCachedDateTimeFormat","locString","opts","key","JSON","stringify","dtf","Intl","DateTimeFormat","addToDate","date","quantity","scale","newDate","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","startOfDate","scores","shouldReset","_scale","maxScore","indexOf","ganttDateRange","tasks","viewMode","preStepsCount","newStartDate","start","getTime","newEndDate","end","task","actualStart","actualEnd","Year","Quarter","Month","Week","getMonday","Day","QuarterDay","HalfDay","Hour","seedDates","startDate","endDate","currentDate","dates","push","getLocaleMonth","locale","bottomValue","month","format","replace","toLocaleUpperCase","getLocalDayOfWeek","weekday","day","getDay","diff","setDate","getWeekNumberISO8601","tmpDate","valueOf","dayNumber","firstThursday","setMonth","weekNumber","Math","ceil","toString","length","TaskListHeaderDefault","headerHeight","fontFamily","fontSize","rowWidth","scheduleType","allSelected","onSelectAll","React","className","styles","ganttTable","style","ganttTable_Header","height","ganttTable_HeaderItem","minWidth","parseInt","maxWidth","type","checked","onChange","e","target","ganttTable_HeaderSeparator","marginTop","title","localeDateStringCache","toLocaleDateStringFactory","dateTimeOptions","lds","toLocaleDateString","year","TaskListTableDefault","rowHeight","leafTasks","onExpanderClick","selectedTasks","onTaskSelect","taskLabelRenderer","t","name","useMemo","leafTaskIds","Set","map","id","hasSelectedAncestor","taskId","selectedSet","allTasks","find","parentWbs","getParentWbs","has","taskListWrapper","expanderSymbol","hideChildren","isSelected","includes","isAncestorSelected","taskListMilestoneRow","taskListLookAheadRow","taskListTableRow","taskListCell","taskListText","display","justifyContent","alignItems","paddingLeft","paddingRight","disabled","taskListNameWrapper","depth","taskListExpander","onClick","taskListExpanderPlaceholder","now","color","optionalId","Tooltip","rtl","svgContainerHeight","svgContainerWidth","scrollX","scrollY","arrowIndent","taskListWidth","TooltipContent","tooltipRef","useRef","useState","relatedY","setRelatedY","relatedX","setRelatedX","useEffect","current","tooltipHeight","offsetHeight","tooltipWidth","offsetWidth","newRelatedY","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","onMultiSelect","horizontalContainerRef","setSelectedTasks","prevSelectedTasksRef","selectedTaskObjects","filter","getDescendants","children","flatMap","child","recursiveOpen","forEach","c","handleTaskSelect","selected","descendants","prev","newSelected","add","d","Array","from","handleSelectAll","topLevelTasks","headerProps","undefined","selectedTaskId","tableProps","GridBody","svgWidth","columnWidth","todayColor","weekendColor","y","gridRows","rowLines","x","y1","y2","gridRowLine","isDarkerRow","darkerGridRow","gridRowLookAhead","gridRow","tickX","ticks","today","weekend","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","dependencyType","drawPathAndTriangle","path","trianglePoints","strokeWidth","stroke","points","indexCompare","taskToEndY","verticalOffset","minX","min","maxX","max","fromPoint","toPoint","arrowPoints","right","convertToBarTasks","barCornerRadius","handleWidth","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","projectProgressColor","projectProgressSelectedColor","projectBackgroundColor","projectBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","barTasks","convertToBarTask","dependencies","j","dependence","findIndex","barchild","barChildren","barTask","convertToMilestone","convertToBar","progressStartWidth","progressEndWidth","taskXCoordinateRTL","taskXCoordinate","abs","typeInternal","progressWithByParams","progressWidth","progressX","taskYCoordinate","backgroundColor","backgroundSelectedColor","progressColor","progressSelectedColor","rotatedHeight","xDate","remainderMillis","percentOfInterval","taskX1","taskX2","getProgressPoint","taskY","point","join","startByX","xStep","steps","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","getChildren","taskList","project","taskChildren","concat","sortTasks","taskA","taskB","orderA","displayOrder","Number","MAX_VALUE","orderB","BarDisplay","onMouseDown","getProcessColor","getBarColor","ry","rx","criticalPathColor","taskProgressColor","BarDateHandle","barHandle","BarProgressHandle","Bar","isProgressChangeable","isDateChangeable","onEventStart","progressPoint","handleHeight","barWrapper","tabIndex","startProgressWidth","endProgressWidth","BarSmall","Milestone","transform","milestoneWrapper","milestoneBackground","onDoubleClick","Project","barColor","processColor","projectWith","projectLeftTriangle","projectRightTriangle","projectWrapper","projectBackground","projectTop","TaskItem","isDelete","taskItem","setTaskItem","onKeyDown","stopPropagation","onMouseEnter","onMouseLeave","TaskGanttContent","ganttEvent","svg","setGanttEvent","setFailedTask","onDateChange","onProgressChange","onDelete","createSVGPoint","setXStep","setInitEventX1Delta","isMoving","setIsMoving","dateDelta","newXStep","handleMouseMove","preventDefault","clientX","cursor","matrixTransform","getScreenCTM","inverse","handleMouseUp","operationSuccess","originalSelectedTask","newChangedTask","isNotLikeOriginal","removeEventListener","addEventListener","handleBarEventStart","error","getArrows","isCritical","criticalPathType","_task","criticalTask","criticalPathArrows","arrow","Boolean","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","scrollLeft","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","Gantt","listCellWidth","barFill","viewDate","onSelect","wrapperRef","startDateRange","endDateRange","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","failedTask","setScrollY","setScrollX","ignoreScrollEvent","setIgnoreScrollEvent","hasCircularDeps","setHasCircularDeps","filteredTasks","sort","newDates","reverse","getCriticalPaths","primaryPath","secondaryPath","localStorage","getItem","removeItem","uncolorAll","colorPath","prevStateTask","newTaskList","handleWheel","shiftKey","deltaX","scrollMove","deltaY","newScrollX","newScrollY","passive","handleScrollY","currentTarget","handleScrollX","hideAlert","checkbox","document","getElementById","alert","setItem","handleKeyDown","isX","handleSelectedTask","newSelectedTask","oldSelectedTask","handleExpanderClick","alertContainer","warning","alertDismissCheckbox","htmlFor","alertCloseButton","alertContent","wrapper","topologicalOrderingHelper","taskID","taskMap","sortedTaskList","finished","started","successVal","dependents","computeCriticalPath","primaryLeaf","primaryDuration","newDuration","excluded","next","secondaryLeaf","secondaryDuration","newDependentEnd","longestIDLength","longestTask","startsWith","taskFromTasks","arrows","wbs","segments","split","slice"],"mappings":"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"}