gantt-task-react-powern 0.6.22 → 0.6.24

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/helpers/calendar-helper.ts","../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 interface CalendarDefinition {\n name: string;\n day_start: string;\n day_end: string;\n week_start: number;\n quarter_start: number;\n shifts: [string, string][];\n off_days: number[];\n holidays: string[];\n}\n\nexport enum ViewMode {\n Hour = \"Hour\",\n QuarterDay = \"Quarter Day\",\n HalfDay = \"Half Day\",\n Day = \"Day\",\n /** ISO-8601 week */\n Week = \"Week\",\n Month = \"Month\",\n Quarter = \"Quarter\",\n Year = \"Year\",\n}\nexport type TaskType = \"task\" | \"milestone\" | \"project\";\nexport type Dependency = \"SS\" | \"SF\" | \"FS\" | \"FF\";\n\nexport declare type DependencyType = {\n id: string;\n type: Dependency;\n};\nexport interface Task {\n id: string;\n optionalId?: string | null;\n type: TaskType;\n name: string;\n start: Date;\n end: Date;\n /**\n * From 0 to 100\n */\n progress: number;\n actualStart: Date;\n actualEnd: Date;\n criticalPathArrows?: Array<{ taskId: string; arrowColor: string ; criticalPathType: string }>;\n styles?: {\n taskProgressColor?: string;\n backgroundColor?: string;\n backgroundSelectedColor?: string;\n progressColor?: string;\n progressSelectedColor?: string;\n criticalPathColor?: string;\n };\n percentComplete?: number | null;\n plannedDuration?: number | null;\n remainingDuration?: number | null;\n actualDuration?: number | null;\n durationType?: string | null;\n depth: number;\n isDisabled?: boolean;\n project?: string;\n dependencies?: DependencyType[];\n hideChildren?: boolean;\n displayOrder?: number;\n childrenCount?: number;\n calender?: CalendarDefinition;\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 onCalendarError?: (task: Task, reason: string) => void;\n}\n\nexport interface DisplayOption {\n viewMode?: ViewMode;\n viewDate?: Date;\n preStepsCount?: number;\n /**\n * Specifies the month name language. Able formats: ISO 639-2, Java Locale\n */\n locale?: string;\n rtl?: boolean;\n}\n\nexport interface StylingOption {\n headerHeight?: number;\n columnWidth?: number;\n listCellWidth?: string;\n rowHeight?: number;\n ganttHeight?: number;\n barCornerRadius?: number;\n handleWidth?: number;\n fontFamily?: string;\n fontSize?: string;\n /**\n * How many of row width can be taken by task.\n * From 0 to 100\n */\n barFill?: number;\n barProgressColor?: string;\n barProgressSelectedColor?: string;\n barBackgroundColor?: string;\n barBackgroundSelectedColor?: string;\n projectProgressColor?: string;\n projectProgressSelectedColor?: string;\n projectBackgroundColor?: string;\n projectBackgroundSelectedColor?: string;\n milestoneBackgroundColor?: string;\n milestoneBackgroundSelectedColor?: string;\n arrowColor?: string;\n arrowIndent?: number;\n todayColor?: string;\n weekendColor?: string;\n TooltipContent?: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n }>;\n TaskListHeader?: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n }>;\n TaskListTable?: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n selectedTaskId: string;\n /**\n * Sets selected task by id\n */\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n }>;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n taskProgressColor?: string;\n delayToRender?: number;\n shouldNotShowLoadingOverlay?: boolean;\n}\n\nexport interface GanttProps extends EventOption, DisplayOption, StylingOption {\n tasks: Task[];\n leafTasks?: Task[];\n scheduleType: string;\n startDate?: Date;\n endDate?: Date;\n projectCalendar?: CalendarDefinition;\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\n/**\n * Returns the start date (midnight) of the fiscal quarter containing `date`.\n * @param quarterStart 0-indexed month that begins Q1 (0=Jan, 4=May, etc.)\n */\nconst getFiscalQuarterStartDate = (date: Date, quarterStart: number): Date => {\n const month = date.getMonth();\n const offset = (month - quarterStart + 12) % 12;\n const qStartMonth = (quarterStart + Math.floor(offset / 3) * 3) % 12;\n let year = date.getFullYear();\n if (qStartMonth > month) year -= 1; // quarter started in the previous calendar year\n return new Date(year, qStartMonth, 1);\n};\n\nexport const ganttDateRange = (\n tasks: Task[],\n viewMode: ViewMode,\n preStepsCount: number,\n quarterStart: number = 0\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 = getFiscalQuarterStartDate(newStartDate, quarterStart);\n newEndDate = addToDate(newEndDate, 1, \"year\");\n const endQStart = getFiscalQuarterStartDate(newEndDate, quarterStart);\n newEndDate =\n endQStart < newEndDate ? addToDate(endQStart, 3, \"month\") : endQStart;\n break;\n }\n case ViewMode.Month:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"month\");\n newStartDate = startOfDate(newStartDate, \"month\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Week:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(\n getMonday(newStartDate),\n -7 * preStepsCount,\n \"day\"\n );\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1.5, \"month\");\n break;\n case ViewMode.Day:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 19, \"day\");\n break;\n case ViewMode.QuarterDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 66, \"hour\"); // 24(1 day)*3 - 6\n break;\n case ViewMode.HalfDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 108, \"hour\"); // 24(1 day)*5 - 12\n break;\n case ViewMode.Hour:\n newStartDate = startOfDate(newStartDate, \"hour\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"hour\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1, \"day\");\n break;\n }\n return [newStartDate, newEndDate];\n};\n\nexport const seedDates = (\n startDate: Date,\n endDate: Date,\n viewMode: ViewMode\n) => {\n let currentDate: Date = new Date(startDate);\n const dates: Date[] = [currentDate];\n while (currentDate < endDate) {\n switch (viewMode) {\n case ViewMode.Year:\n currentDate = addToDate(currentDate, 1, \"year\");\n break;\n case ViewMode.Quarter:\n currentDate = addToDate(currentDate, 3, \"month\");\n break;\n case ViewMode.Month:\n currentDate = addToDate(currentDate, 1, \"month\");\n break;\n case ViewMode.Week:\n currentDate = addToDate(currentDate, 7, \"day\");\n break;\n case ViewMode.Day:\n currentDate = addToDate(currentDate, 1, \"day\");\n break;\n case ViewMode.HalfDay:\n currentDate = addToDate(currentDate, 12, \"hour\");\n break;\n case ViewMode.QuarterDay:\n currentDate = addToDate(currentDate, 6, \"hour\");\n break;\n case ViewMode.Hour:\n currentDate = addToDate(currentDate, 1, \"hour\");\n break;\n }\n dates.push(currentDate);\n }\n return dates;\n};\n\nexport const getLocaleMonth = (date: Date, locale: string) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n month: \"long\",\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\nexport const getLocalDayOfWeek = (\n date: Date,\n locale: string,\n format?: \"long\" | \"short\" | \"narrow\" | undefined\n) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n weekday: format,\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\n/**\n * Returns monday of current week\n * @param date date for modify\n */\nconst getMonday = (date: Date) => {\n const day = date.getDay();\n const diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\n\nexport const getWeekNumberISO8601 = (date: Date) => {\n const tmpDate = new Date(date.valueOf());\n const dayNumber = (tmpDate.getDay() + 6) % 7;\n tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);\n const firstThursday = tmpDate.valueOf();\n tmpDate.setMonth(0, 1);\n if (tmpDate.getDay() !== 4) {\n tmpDate.setMonth(0, 1 + ((4 - tmpDate.getDay() + 7) % 7));\n }\n const weekNumber = (\n 1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 604800000)\n ).toString();\n\n if (weekNumber.length === 1) {\n return `0${weekNumber}`;\n } else {\n return weekNumber;\n }\n};\n\nexport const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n};\n","import React from \"react\";\nimport styles from \"./task-list-header.module.css\";\n\nexport const TaskListHeaderDefault: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n}> = ({ headerHeight, fontFamily, fontSize, rowWidth, scheduleType, allSelected, onSelectAll }) => {\n return (\n <div\n className={styles.ganttTable}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n <div\n className={styles.ganttTable_Header}\n style={{\n height: headerHeight - 2,\n }}\n >\n {onSelectAll && (\n <div>\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <input \n type=\"checkbox\" \n checked={allSelected}\n onChange={(e) => onSelectAll(e.target.checked)} \n />\n </div>\n </div>\n )}\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n ID\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n WBS Code / Activity ID\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n >\n Task\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Planned Start\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Planned End\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Actual Start\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Actual End\n </div>\n )}\n {scheduleType === \"main\" && (\n <React.Fragment>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"% Complete\"\n >\n % Complete\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Duration\"\n >\n Planned Duration\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.7,\n maxWidth: parseInt(rowWidth) * 0.7,\n }}\n title=\"Remaining Duration\"\n >\n Remaining Duration\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Actual Duration\"\n >\n Actual Duration\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title=\"Duration Type\"\n >\n Duration Type\n </div>\n </React.Fragment>\n )}\n </div>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport styles from \"./task-list-table.module.css\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\n\nconst localeDateStringCache = {};\nconst toLocaleDateStringFactory =\n (locale: string) =>\n (date: Date, dateTimeOptions: Intl.DateTimeFormatOptions): string => {\n if (!date || date.getTime() === 0) return \"\"; // Handle invalid dates\n const key = date.toString();\n let lds = localeDateStringCache[key];\n if (!lds) {\n lds = date.toLocaleDateString(locale, dateTimeOptions);\n localeDateStringCache[key] = lds;\n }\n return lds;\n };\nconst dateTimeOptions: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n};\n\nexport const TaskListTableDefault: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n virtualItems?: VirtualItem[];\n}> = ({\n rowHeight,\n rowWidth,\n tasks,\n scheduleType,\n leafTasks,\n fontFamily,\n fontSize,\n locale,\n onExpanderClick,\n selectedTasks = [],\n onTaskSelect,\n taskLabelRenderer = t => \" \" + t.name,\n virtualItems,\n}) => {\n const toLocaleDateString = useMemo(\n () => toLocaleDateStringFactory(locale),\n [locale]\n );\n const leafTaskIds = useMemo(\n () => new Set(leafTasks.map(t => t.id)),\n [leafTasks]\n );\n\n // Checks if the task has a selected ancestor by traversing the WBS hierarchy\n const hasSelectedAncestor = (taskId: string, selectedSet: Set<string>, allTasks: Task[]): boolean => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return false;\n const parentWbs = getParentWbs(task.id);\n if (!parentWbs) return false;\n if (selectedSet.has(parentWbs)) return true;\n return hasSelectedAncestor(parentWbs, selectedSet, allTasks);\n };\n\n const itemsToRender = virtualItems || tasks.map((_, index) => ({ index, start: index * rowHeight, size: rowHeight, key: index, end: (index + 1) * rowHeight, lane: 0, measureElement: () => {} }));\n\n return (\n <div\n className={styles.taskListWrapper}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n {itemsToRender.map(vi => {\n const t = tasks[vi.index];\n let expanderSymbol = \"\";\n if (!(leafTaskIds.has(t.id) || t.type=== \"milestone\")) {\n if (t.hideChildren === false) {\n expanderSymbol = \"▼\";\n } else if (t.hideChildren === true) {\n expanderSymbol = \"►\";\n }\n }\n\n const isSelected = selectedTasks.includes(t.id);\n const isAncestorSelected = hasSelectedAncestor(t.id, new Set(selectedTasks), tasks);\n\n return (\n <div\n key={`${vi.key}`}\n data-index={vi.index}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${vi.size}px`,\n transform: `translateY(${vi.start}px)`,\n }}\n >\n <div\n className={\n t.type === \"milestone\"\n ? styles.taskListMilestoneRow\n : scheduleType === \"lookAhead\"\n ? styles.taskListLookAheadRow\n : styles.taskListTableRow\n }\n style={{ height: rowHeight }}\n key={`${t.id}row`}\n >\n {onTaskSelect && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <div className={styles.taskListText} style={{ \n display: \"flex\", \n justifyContent: \"center\", \n alignItems: \"center\",\n height: \"100%\",\n paddingLeft: \"0\",\n paddingRight: \"0\"\n }}>\n <input \n type=\"checkbox\" \n checked={isSelected}\n disabled={isAncestorSelected}\n onChange={(e) => onTaskSelect(t.id, e.target.checked)}\n />\n </div>\n </div>\n )}\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.id}\n >\n <div\n className={styles.taskListNameWrapper}\n style={{ paddingLeft: `${t.depth * 4}px` }}\n >\n {!(leafTaskIds.has(t.id) || t.type=== \"milestone\") ? (\n <div\n className={styles.taskListExpander}\n onClick={() => onExpanderClick(t)}\n >\n \n {expanderSymbol}\n </div>\n ) : (\n <div className={styles.taskListExpanderPlaceholder}></div>\n )}\n <div className={styles.taskListText}>\n {t.id}{\" \"}\n {t.actualEnd.getTime() > 0 &&\n t.actualEnd.getTime() < Date.now() ? (\n <span\n title=\"Task Complete\"\n style={{ color: \"limegreen\", fontSize: \"16px\" }}\n >\n ✔\n </span>\n ) : (\n \"\"\n )}\n </div>\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.optionalId?t.optionalId:\"\"}\n >\n {t.optionalId}\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n title={t.name}\n >\n <div className={styles.taskListText}>{taskLabelRenderer(t)}</div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &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 {scheduleType === \"main\" && (() => {\n const percentComplete = t.percentComplete != null ? t.percentComplete : (t.progress ?? 0);\n const plannedDuration = t.plannedDuration != null ? t.plannedDuration : null;\n const remainingDuration = plannedDuration != null\n ? Math.round(plannedDuration - (plannedDuration * (percentComplete / 100)))\n : null;\n const actualDuration = (() => {\n if (!t.actualStart || t.actualStart.getTime() === 0) return null;\n const endRef = (t.actualEnd && t.actualEnd.getTime() > 0) ? t.actualEnd : new Date();\n return Math.ceil((endRef.getTime() - t.actualStart.getTime()) / (1000 * 60 * 60 * 24));\n })();\n return (\n <React.Fragment>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{percentComplete != null ? `${percentComplete}%` : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{plannedDuration != null ? plannedDuration : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.7,\n maxWidth: parseInt(rowWidth) * 0.7,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{remainingDuration != null ? remainingDuration : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{actualDuration != null ? actualDuration : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{t.durationType ?? \"Activity Calendar\"}\n </div>\n </div>\n </React.Fragment>\n );\n })()}\n </div>\n </div>\n );\n })}\n </div>\n );\n};","import React, { useRef, useEffect, useState } from \"react\";\nimport { Task } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport styles from \"./tooltip.module.css\";\n\nexport type TooltipProps = {\n task: BarTask;\n type: string;\n arrowIndent: number;\n rtl: boolean;\n svgContainerHeight: number;\n svgContainerWidth: number;\n svgWidth: number;\n headerHeight: number;\n taskListWidth: number;\n scrollX: number;\n scrollY: number;\n rowHeight: number;\n fontSize: string;\n fontFamily: string;\n TooltipContent: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n type: string;\n }>;\n};\nexport const Tooltip: React.FC<TooltipProps> = ({\n task,\n type,\n rowHeight,\n rtl,\n svgContainerHeight,\n svgContainerWidth,\n scrollX,\n scrollY,\n arrowIndent,\n fontSize,\n fontFamily,\n headerHeight,\n taskListWidth,\n TooltipContent,\n}) => {\n const tooltipRef = useRef<HTMLDivElement | null>(null);\n const [relatedY, setRelatedY] = useState(0);\n const [relatedX, setRelatedX] = useState(0);\n useEffect(() => {\n if (tooltipRef.current) {\n const tooltipHeight = tooltipRef.current.offsetHeight * 1.1;\n const tooltipWidth = tooltipRef.current.offsetWidth * 1.1;\n\n let newRelatedY = task.index * rowHeight - scrollY + headerHeight;\n let newRelatedX: number;\n if (rtl) {\n newRelatedX = task.x1 - arrowIndent * 1.5 - tooltipWidth - scrollX;\n if (newRelatedX < 0) {\n newRelatedX = task.x2 + arrowIndent * 1.5 - scrollX;\n }\n const tooltipLeftmostPoint = tooltipWidth + newRelatedX;\n if (tooltipLeftmostPoint > svgContainerWidth) {\n newRelatedX = svgContainerWidth - tooltipWidth;\n newRelatedY += rowHeight;\n }\n } else {\n newRelatedX =\n type == \"planned\"\n ? task.x2 + arrowIndent * 1.5 + taskListWidth - scrollX\n : task.actualx2 + arrowIndent * 1.5 + taskListWidth - scrollX;\n const tooltipLeftmostPoint = tooltipWidth + newRelatedX;\n const fullChartWidth = taskListWidth + svgContainerWidth;\n if (tooltipLeftmostPoint > fullChartWidth) {\n newRelatedX =\n type == \"planned\"\n ? task.x1 +\n taskListWidth -\n arrowIndent * 1.5 -\n scrollX -\n tooltipWidth\n : task.actualx1 +\n taskListWidth -\n arrowIndent * 1.5 -\n scrollX -\n tooltipWidth;\n }\n if (newRelatedX < taskListWidth) {\n newRelatedX = svgContainerWidth + taskListWidth - tooltipWidth;\n newRelatedY += rowHeight;\n }\n }\n\n const tooltipLowerPoint = tooltipHeight + newRelatedY - scrollY;\n if (tooltipLowerPoint > svgContainerHeight - scrollY) {\n newRelatedY = svgContainerHeight - tooltipHeight;\n }\n setRelatedY(newRelatedY);\n setRelatedX(newRelatedX);\n }\n }, [\n tooltipRef,\n task,\n arrowIndent,\n scrollX,\n scrollY,\n headerHeight,\n taskListWidth,\n rowHeight,\n svgContainerHeight,\n svgContainerWidth,\n rtl,\n ]);\n\n return (\n <div\n ref={tooltipRef}\n className={\n relatedX\n ? styles.tooltipDetailsContainer\n : styles.tooltipDetailsContainerHidden\n }\n style={{ left: relatedX, top: relatedY }}\n >\n <TooltipContent\n task={task}\n fontSize={fontSize}\n fontFamily={fontFamily}\n type={type}\n />\n </div>\n );\n};\n\nexport const StandardTooltipContent: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n type: string;\n}> = ({ task, fontSize, fontFamily, type }) => {\n const style = {\n fontSize,\n fontFamily,\n };\n if (type == \"planned\")\n return (\n <div className={styles.tooltipDefaultContainer} style={style}>\n <b\n style={{ fontSize: fontSize + 6 }}\n >{`${task.name}: Planned dates: `}</b>\n <b>{`${\n task.start.getMonth() + 1\n }/${task.start.getDate()}/${task.start.getFullYear()} - ${\n task.end.getMonth() + 1\n }/${task.end.getDate()}/${task.end.getFullYear()}`}</b>\n {task.end.getTime() - task.start.getTime() !== 0 && (\n <p\n className={styles.tooltipDefaultContainerParagraph}\n >{`Duration: ${~~(\n Math.round((task.end.getTime() - task.start.getTime()) /\n (1000 * 60 * 60 * 24))\n )} day(s)`}</p>\n )}\n\n <p className={styles.tooltipDefaultContainerParagraph}>\n {!!task.progress && `Progress: ${task.progress} %`}\n </p>\n </div>\n );\n else\n return (\n <div className={styles.tooltipDefaultContainer} style={style}>\n <b\n style={{ fontSize: fontSize + 6 }}\n >{`${task.name}: Actual dates: `}</b>\n <b>{`${\n task.actualStart.getMonth() + 1\n }/${task.actualStart.getDate()}/${task.actualStart.getFullYear()} - ${\n task.actualEnd.getMonth() + 1\n }/${task.actualEnd.getDate()}/${task.actualEnd.getFullYear()}`}</b>\n {task.actualEnd.getTime() - task.actualStart.getTime() !== 0 && (\n <p\n className={styles.tooltipDefaultContainerParagraph}\n >{`Duration: ${~~(\n Math.round((task.actualEnd.getTime() - task.actualStart.getTime()) /\n (1000 * 60 * 60 * 24))\n )} day(s)`}</p>\n )}\n\n <p className={styles.tooltipDefaultContainerParagraph}>\n {!!task.progress && `Progress: ${task.progress} %`}\n </p>\n </div>\n );\n};\n","import React, { SyntheticEvent, useRef, useEffect } from \"react\";\nimport styles from \"./vertical-scroll.module.css\";\n\nexport const VerticalScroll: React.FC<{\n scroll: number;\n ganttHeight: number;\n ganttFullHeight: number;\n headerHeight: number;\n rtl: boolean;\n onScroll: (event: SyntheticEvent<HTMLDivElement>) => void;\n}> = ({\n scroll,\n ganttHeight,\n ganttFullHeight,\n headerHeight,\n rtl,\n onScroll,\n}) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scroll;\n }\n }, [scroll]);\n\n return (\n <div\n style={{\n height: ganttHeight,\n marginTop: headerHeight,\n marginLeft: rtl ? \"\" : \"-1rem\",\n marginRight: \"1rem\",\n }}\n className={styles.scroll}\n onScroll={onScroll}\n ref={scrollRef}\n >\n <div style={{ height: ganttFullHeight, width: 1 }} />\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useVirtualizer, VirtualItem } from \"@tanstack/react-virtual\";\nimport { EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\nimport styles from \"./task-list.module.css\";\n\nexport type TaskListProps = {\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n rowHeight: number;\n ganttHeight: number;\n scrollY: number;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n taskListRef: React.RefObject<HTMLDivElement>;\n horizontalContainerClass?: string;\n selectedTask: BarTask | undefined;\n setSelectedTask: (task: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n TaskListHeader: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n }>;\n TaskListTable: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n virtualItems?: VirtualItem[];\n }>;\n containerWidth?: number;\n innerScrollRef?: React.RefObject<HTMLDivElement>;\n} & EventOption;\n\nexport const TaskList: React.FC<TaskListProps> = ({\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n rowHeight,\n scrollY,\n tasks,\n scheduleType,\n leafTasks,\n selectedTask,\n setSelectedTask,\n onExpanderClick,\n locale,\n ganttHeight,\n taskListRef,\n horizontalContainerClass,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n containerWidth,\n innerScrollRef,\n}) => {\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const [selectedTasks, setSelectedTasks] = useState<string[]>([]);\n const [pendingTaskSelect, setPendingTaskSelect] = useState<{ taskId: string; selected: boolean }[]>([]);\n const prevSelectedTasksRef = useRef<string[]>([]);\n const expandedTasks = useRef<string[]>([]);\n\n const virtualizer = useVirtualizer({\n count: tasks.length,\n getScrollElement: () => horizontalContainerRef.current,\n estimateSize: () => rowHeight,\n overscan: 10\n });\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (\n onMultiSelect &&\n JSON.stringify(prevSelectedTasksRef.current) !==\n JSON.stringify(selectedTasks)\n ) {\n const selectedTaskObjects = tasks.filter(task =>\n selectedTasks.includes(task.id)\n );\n prevSelectedTasksRef.current = [...selectedTasks];\n onMultiSelect(selectedTaskObjects);\n }\n }, [selectedTasks, tasks, onMultiSelect]);\n\n\n\n // process pending task selections\n useEffect(() => {\n if (pendingTaskSelect.length === 0) return;\n\n const newSelected = new Set(selectedTasks);\n pendingTaskSelect.forEach(({ taskId, selected }) => {\n if (selected) {\n // Expand the task and its children first\n recursiveOpen(taskId, tasks);\n // Collect descendants after expansion\n const descendants = getDescendants(taskId, tasks);\n newSelected.add(taskId);\n descendants.forEach(d => newSelected.add(d));\n } else {\n const descendants = getDescendants(taskId, tasks);\n newSelected.delete(taskId);\n descendants.forEach(d => newSelected.delete(d));\n }\n });\n\n setSelectedTasks(Array.from(newSelected));\n setPendingTaskSelect([]);\n }, [pendingTaskSelect]);\n\n // Handle tasks prop changes to update descendants of selected tasks\n useEffect(() => {\n expandedTasks.current = expandedTasks.current.filter(id => {\n const t = tasks.find(task => task.id === id);\n return t && !t.hideChildren;\n });\n if (selectedTasks.length === 0) return;\n\n const newSelected = new Set<string>();\n selectedTasks.forEach(taskId => {\n // Only include tasks that still exist\n if (tasks.find(t => t.id === taskId)) {\n recursiveOpen(taskId, tasks); // Ensure task is expanded\n newSelected.add(taskId);\n const descendants = getDescendants(taskId, tasks);\n descendants.forEach(d => newSelected.add(d));\n }\n });\n\n const newSelectedArray = Array.from(newSelected);\n if (JSON.stringify(newSelectedArray) !== JSON.stringify(selectedTasks)) {\n setSelectedTasks(newSelectedArray);\n }\n }, [tasks.length]);\n\n // Finds all descendant task IDs recursively using WBS hierarchy\n const getDescendants = (taskId: string, allTasks: Task[]): string[] => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return [];\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n return children.flatMap(child => [child.id, ...getDescendants(child.id, allTasks)]);\n };\n\n const recursiveOpen = (taskId: string, allTasks: Task[]) => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return;\n if (!expandedTasks.current.includes(taskId) && task.hideChildren) {\n onExpanderClick(task);\n expandedTasks.current = [...expandedTasks.current, taskId];\n }\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n children.forEach(c => recursiveOpen(c.id, allTasks));\n };\n\n const handleTaskSelect = (taskId: string, selected: boolean) => {\n setPendingTaskSelect(prev => [...prev, { taskId, selected }]);\n };\n\n const handleSelectAll = (selected: boolean) => {\n if (selected) {\n const topLevelTasks = tasks.filter(task => !getParentWbs(task.id));\n setPendingTaskSelect(topLevelTasks.map(task => ({ taskId: task.id, selected: true })));\n } else {\n setSelectedTasks([]);\n setPendingTaskSelect([]);\n }\n };\n\n const headerProps = {\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n scheduleType,\n allSelected: tasks.length > 0 && selectedTasks.length === tasks.length,\n onSelectAll: onMultiSelect ? handleSelectAll : undefined,\n };\n const selectedTaskId = selectedTask ? selectedTask.id : \"\";\n\n const tableProps = {\n rowHeight,\n rowWidth,\n fontFamily,\n fontSize,\n tasks,\n leafTasks,\n scheduleType,\n locale,\n selectedTaskId: selectedTaskId,\n setSelectedTask,\n onExpanderClick,\n selectedTasks: onMultiSelect ? selectedTasks : undefined,\n onTaskSelect: onMultiSelect ? handleTaskSelect : undefined,\n taskLabelRenderer,\n virtualItems: virtualizer.getVirtualItems(),\n };\n\n return (\n <div\n ref={taskListRef}\n style={containerWidth != null ? { width: containerWidth, overflow: \"hidden\", flexShrink: 0 } : {}}\n >\n <div\n ref={innerScrollRef}\n className={styles.hideScrollbar}\n style={{ overflowX: \"auto\" }}\n >\n <TaskListHeader {...headerProps} />\n <div\n ref={horizontalContainerRef}\n className={horizontalContainerClass}\n style={ganttHeight ? { height: ganttHeight } : {}}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n <TaskListTable {...tableProps} />\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { CalendarDefinition } from \"../types/public-types\";\n\n/** Parse \"HH:MM\" or \"HH:MM:SS\" into minutes since midnight. */\nexport function parseTimeToMinutes(t: string): number {\n const parts = t.split(\":\").map(Number);\n return parts[0] * 60 + parts[1] + (parts[2] ? parts[2] / 60 : 0);\n}\n\n/** Format a \"YYYY-MM-DD\" string from a Date (local). */\nfunction toDateString(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, \"0\");\n const d = String(date.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\n/** True if the date falls on a calendar holiday. */\nexport function isHoliday(date: Date, cal: CalendarDefinition): boolean {\n return cal.holidays.includes(toDateString(date));\n}\n\n/** True if the date's weekday is in off_days or is a holiday. */\nexport function isOffDay(date: Date, cal: CalendarDefinition): boolean {\n return cal.off_days.includes(date.getDay()) || isHoliday(date, cal);\n}\n\n/** True if the date is a regular working day (not off_day, not holiday). */\nexport function isWorkingDay(date: Date, cal: CalendarDefinition): boolean {\n return !isOffDay(date, cal);\n}\n\n/**\n * Returns the shift windows (in minutes since midnight) for a given date.\n * Returns [] for off days / holidays.\n */\nexport function getShiftsForDay(\n date: Date,\n cal: CalendarDefinition\n): Array<{ start: number; end: number }> {\n if (isOffDay(date, cal)) return [];\n return cal.shifts.map(([s, e]) => ({\n start: parseTimeToMinutes(s),\n end: parseTimeToMinutes(e),\n }));\n}\n\n/**\n * Returns all working time intervals between start and end, respecting:\n * - off days and holidays (entire day skipped)\n * - shift windows (multiple shifts per day are supported)\n * - partial first/last days clipped to the actual start/end time\n */\nexport function getWorkingIntervals(\n start: Date,\n end: Date,\n cal: CalendarDefinition\n): Array<{ start: Date; end: Date }> {\n if (start >= end) return [];\n const intervals: Array<{ start: Date; end: Date }> = [];\n\n // Iterate day by day\n const cursor = new Date(start);\n cursor.setHours(0, 0, 0, 0);\n\n while (cursor <= end) {\n const shifts = getShiftsForDay(cursor, cal);\n\n for (const shift of shifts) {\n // Build shift start/end as Date objects for this day\n const shiftStart = new Date(cursor);\n shiftStart.setHours(\n Math.floor(shift.start / 60),\n Math.floor(shift.start % 60),\n Math.round((shift.start % 1) * 60),\n 0\n );\n const shiftEnd = new Date(cursor);\n shiftEnd.setHours(\n Math.floor(shift.end / 60),\n Math.floor(shift.end % 60),\n Math.round((shift.end % 1) * 60),\n 0\n );\n\n // Clip to [start, end]\n const intervalStart = shiftStart < start ? start : shiftStart;\n const intervalEnd = shiftEnd > end ? end : shiftEnd;\n\n if (intervalStart < intervalEnd) {\n intervals.push({ start: intervalStart, end: intervalEnd });\n }\n }\n\n // Advance to the next day\n cursor.setDate(cursor.getDate() + 1);\n }\n\n return intervals;\n}\n\n/**\n * Snaps a date to the nearest valid working moment.\n * direction \"forward\" → move forward until inside a shift\n * direction \"backward\" → move backward until inside a shift\n * Searches up to 60 days to avoid infinite loops.\n */\nexport function snapToWorkingTime(\n date: Date,\n cal: CalendarDefinition,\n direction: \"forward\" | \"backward\"\n): Date {\n const MAX_DAYS = 60;\n const result = new Date(date);\n\n for (let attempt = 0; attempt < MAX_DAYS * 24 * 60; attempt++) {\n const dayStart = new Date(result);\n dayStart.setHours(0, 0, 0, 0);\n const shifts = getShiftsForDay(dayStart, cal);\n\n if (shifts.length > 0) {\n if (direction === \"forward\") {\n // Find first shift window that contains or is after result\n const currentMins =\n result.getHours() * 60 +\n result.getMinutes() +\n result.getSeconds() / 60;\n for (const shift of shifts) {\n if (currentMins <= shift.end) {\n // Snap to start of shift if before it\n if (currentMins < shift.start) {\n result.setHours(\n Math.floor(shift.start / 60),\n Math.round(shift.start % 60),\n 0,\n 0\n );\n }\n return result;\n }\n }\n // All shifts passed — move to next day's first shift\n result.setDate(result.getDate() + 1);\n result.setHours(0, 0, 0, 0);\n } else {\n // direction === \"backward\"\n const currentMins =\n result.getHours() * 60 +\n result.getMinutes() +\n result.getSeconds() / 60;\n // Find last shift window that contains or is before result\n for (let i = shifts.length - 1; i >= 0; i--) {\n if (currentMins >= shifts[i].start) {\n if (currentMins > shifts[i].end) {\n result.setHours(\n Math.floor(shifts[i].end / 60),\n Math.round(shifts[i].end % 60),\n 0,\n 0\n );\n }\n return result;\n }\n }\n // All shifts ahead — move to previous day's last shift\n result.setDate(result.getDate() - 1);\n result.setHours(23, 59, 59, 0);\n }\n } else {\n // Off day — move to boundary\n if (direction === \"forward\") {\n result.setDate(result.getDate() + 1);\n result.setHours(0, 0, 0, 0);\n } else {\n result.setDate(result.getDate() - 1);\n result.setHours(23, 59, 59, 0);\n }\n }\n }\n\n // Fallback: return original if no valid time found\n return date;\n}\n\n/**\n * Returns the most recent week-start date on or before the given date,\n * where weekStartDay is a JS day index (0=Sun, 1=Mon, ..., 6=Sat).\n */\nexport function getWeekStartDate(date: Date, weekStartDay: number): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n const dayOfWeek = d.getDay(); // 0–6\n const diff = (dayOfWeek - weekStartDay + 7) % 7;\n d.setDate(d.getDate() - diff);\n return d;\n}\n\n/**\n * Returns the quarter number (1–4) for a date, given a fiscal quarterStart month (0–11, 0=Jan).\n * e.g. quarterStart=4 means Q1 starts in May.\n */\nexport function getQuarterNumber(\n date: Date,\n quarterStart: number\n): number {\n const month = date.getMonth(); // 0–11\n // Offset month relative to quarter start\n const offset = ((month - quarterStart + 12) % 12);\n return Math.floor(offset / 3) + 1;\n}\n\n/**\n * Returns the quarter start month (0-11) for a given date and fiscal quarterStart (0-indexed).\n * Useful for labeling (e.g. Q1 starting in May → returns 4).\n */\nexport function getQuarterStartMonth(\n date: Date,\n quarterStart: number\n): number {\n const q = getQuarterNumber(date, quarterStart);\n // q=1 → month = quarterStart, q=2 → +3, q=3 → +6, q=4 → +9\n return (quarterStart + (q - 1) * 3) % 12; // 0-indexed\n}\n","import React from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport { CalendarDefinition, Task, ViewMode } from \"../../types/public-types\";\nimport { addToDate } from \"../../helpers/date-helper\";\nimport { isOffDay } from \"../../helpers/calendar-helper\";\nimport styles from \"./grid.module.css\";\n\nexport type GridBodyProps = {\n tasks: Task[];\n scheduleType: string;\n dates: Date[];\n svgWidth: number;\n rowHeight: number;\n columnWidth: number;\n todayColor: string;\n weekendColor: string;\n rtl: boolean;\n virtualItems?: VirtualItem[];\n visibleStartY: number;\n visibleEndY: number;\n projectCalendar?: CalendarDefinition;\n viewMode?: ViewMode;\n};\n\nexport const GridBody: React.FC<GridBodyProps> = ({\n tasks,\n scheduleType,\n dates,\n rowHeight,\n svgWidth,\n columnWidth,\n todayColor,\n weekendColor,\n rtl,\n virtualItems = [],\n visibleStartY,\n visibleEndY,\n projectCalendar,\n viewMode,\n}) => {\n const visibleHeight = visibleEndY - visibleStartY;\n const now = new Date();\n\n // === Virtual row calculation ===\n const items =\n virtualItems.length > 0\n ? virtualItems\n : tasks.map((_, i) => ({\n index: i,\n start: i * rowHeight,\n end: (i + 1) * rowHeight,\n size: rowHeight,\n key: i,\n }));\n\n const isDayOff = (date: Date): boolean => {\n if (projectCalendar) return isOffDay(date, projectCalendar);\n const d = date.getDay();\n return d === 0 || d === 6;\n };\n\n const isTodayColumn = (i: number) => {\n const date = dates[i];\n const next = dates[i + 1];\n if (next && date <= now && next > now) return true;\n if (!next && date <= now) {\n const step = date.getTime() - dates[i - 1].getTime();\n const end = addToDate(date, step, \"millisecond\");\n return end > now;\n }\n return false;\n };\n\n // === Today, Off-Day, and Weekend Rects ===\n const todayRects: React.ReactNode[] = [];\n const offDayRects: React.ReactNode[] = [];\n const weekStartDay = projectCalendar?.week_start ?? 1;\n\n for (let i = 0, x = 0; i < dates.length; i++, x += columnWidth) {\n if (isTodayColumn(i)) {\n todayRects.push(\n <rect\n key={`today-${i}`}\n x={rtl ? x + columnWidth : x}\n y={visibleStartY}\n width={columnWidth}\n height={visibleHeight}\n fill={todayColor}\n />\n );\n }\n // Proportional off-day shading: Day=full column, Week=slivers; Month/Quarter excluded\n if (viewMode !== ViewMode.Month && viewMode !== ViewMode.Quarter) {\n const pEnd = dates[i + 1] ?? addToDate(dates[i], 1, \"day\");\n const periodMs = pEnd.getTime() - dates[i].getTime();\n if (periodMs > 0) {\n const cursor = new Date(dates[i]);\n cursor.setHours(0, 0, 0, 0);\n while (cursor.getTime() < pEnd.getTime()) {\n if (isDayOff(cursor)) {\n const ds = cursor.getTime() - dates[i].getTime();\n const de = ds + 86400000;\n const startFrac = Math.max(0, ds) / periodMs;\n const endFrac = Math.min(periodMs, de) / periodMs;\n const rw = (endFrac - startFrac) * columnWidth;\n if (rw > 0.5) {\n offDayRects.push(\n <rect\n key={`offday-${i}-${cursor.getTime()}`}\n x={x + startFrac * columnWidth}\n y={visibleStartY}\n width={rw}\n height={visibleHeight}\n fill={weekendColor}\n />\n );\n }\n }\n cursor.setDate(cursor.getDate() + 1);\n }\n }\n }\n }\n\n // === Vertical Tick Lines — Day view uses dashed/solid, others use default ===\n const isDayView = viewMode === ViewMode.Day;\n const tickLines = dates.map((date, i) => {\n let tickClass = styles.gridTick;\n if (isDayView) {\n tickClass =\n date.getDay() === weekStartDay\n ? styles.gridTick\n : styles.gridTickDashed;\n }\n return (\n <line\n key={`tick-${i}`}\n x1={i * columnWidth}\n y1={visibleStartY}\n x2={i * columnWidth}\n y2={visibleEndY}\n className={tickClass}\n />\n );\n });\n\n // === Horizontal Rows & Lines ===\n const rowBackgrounds: React.ReactNode[] = [];\n const rowLines: React.ReactNode[] = [];\n\n // Top border\n rowLines.push(\n <line\n key=\"top-line\"\n x1={0}\n y1={visibleStartY}\n x2={svgWidth}\n y2={visibleStartY}\n className={styles.gridRowLine}\n />\n );\n\n for (const vi of items) {\n const task = tasks[vi.index];\n if (!task) break;\n\n const y = vi.start;\n const isMilestone = task.type === \"milestone\";\n\n const rowClass = isMilestone\n ? styles.darkerGridRow\n : scheduleType === \"lookAhead\"\n ? styles.gridRowLookAhead\n : styles.gridRow;\n\n rowBackgrounds.push(\n <rect\n key={`bg-${vi.key}`}\n x={0}\n y={y}\n width={svgWidth}\n height={rowHeight}\n className={rowClass}\n />\n );\n\n rowLines.push(\n <line\n key={`line-${vi.key}`}\n x1={0}\n y1={y + rowHeight}\n x2={svgWidth}\n y2={y + rowHeight}\n className={styles.gridRowLine}\n />\n );\n }\n\n return (\n <g className=\"gridBody\">\n <g className=\"rows\">{rowBackgrounds}</g>\n <g className=\"rowLines\">{rowLines}</g>\n <g className=\"offdays\">{offDayRects}</g>\n <g className=\"ticks\">{tickLines}</g>\n <g className=\"today\">{todayRects}</g>\n </g>\n );\n};\n","import React from \"react\";\nimport { GridBody, GridBodyProps } from \"./grid-body\";\n\nexport type GridProps = GridBodyProps;\nexport const Grid: React.FC<GridProps> = props => {\n return (\n <g className=\"grid\" >\n <GridBody {...props} />\n </g>\n );\n};\n","import React from \"react\";\nimport styles from \"./calendar.module.css\";\n\ntype TopPartOfCalendarProps = {\n value: string;\n x1Line: number;\n y1Line: number;\n y2Line: number;\n xText: number;\n yText: number;\n textAnchor?: \"start\" | \"middle\" | \"end\";\n};\n\nexport const TopPartOfCalendar: React.FC<TopPartOfCalendarProps> = ({\n value,\n x1Line,\n y1Line,\n y2Line,\n xText,\n yText,\n textAnchor = \"middle\",\n}) => {\n const textAnchorClass =\n textAnchor === \"start\"\n ? styles.textAnchorStart\n : textAnchor === \"middle\"\n ? styles.textAnchorMiddle\n : styles.textAnchorEnd;\n return (\n <g className=\"calendarTop\">\n <line\n x1={x1Line}\n y1={y1Line}\n x2={x1Line}\n y2={y2Line}\n className={styles.calendarTopTick}\n key={value + \"line\"}\n />\n <text\n key={value + \"text\"}\n y={yText}\n x={xText}\n className={`${styles.calendarTopText} ${textAnchorClass}`}\n >\n {value}\n </text>\n </g>\n );\n};\n","import React, { ReactChild } from \"react\";\nimport { CalendarDefinition, ViewMode } from \"../../types/public-types\";\nimport { TopPartOfCalendar } from \"./top-part-of-calendar\";\nimport {\n getCachedDateTimeFormat,\n getLocalDayOfWeek,\n addToDate,\n} from \"../../helpers/date-helper\";\nimport {\n getQuarterNumber,\n} from \"../../helpers/calendar-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 projectCalendar?: CalendarDefinition;\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 projectCalendar,\n}) => {\n /** Helper: 3-letter month abbreviation */\n const shortMonth = (date: Date) =>\n date.toLocaleString(locale, { month: \"short\" });\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 /**\n * QUARTER view — 3-row header: Year (top) | Qtr label (middle) | Month abbr (bottom)\n */\n const getCalendarValuesForQuarter = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const offDayRects: ReactChild[] = [];\n const quarterStart = projectCalendar?.quarter_start ?? 0;\n const rowH = headerHeight / 3;\n\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const qNum = getQuarterNumber(date, quarterStart);\n\n // Bottom row: 3 month abbreviations within each quarter column\n for (let m = 0; m < 3; m++) {\n const monthDate = addToDate(date, m, \"month\");\n bottomValues.push(\n <text\n key={`qmonth-${i}-${m}`}\n y={headerHeight * 0.9}\n x={columnWidth * i + columnWidth * (m * 2 + 1) / 6}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n >\n {shortMonth(monthDate)}\n </text>\n );\n }\n\n // Middle row: quarter label centered on column\n bottomValues.push(\n <text\n key={`qlabel-${i}`}\n y={rowH * 1.6}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n >\n {`Qtr ${qNum}`}\n </text>\n );\n\n // Vertical separator at start of each column\n bottomValues.push(\n <line\n key={`qsep-${i}`}\n x1={columnWidth * i}\n y1={rowH}\n x2={columnWidth * i}\n y2={headerHeight}\n className={styles.calendarTopTick}\n />\n );\n\n // Horizontal separator between rows\n if (i === 0) {\n bottomValues.push(\n <line\n key=\"qhsep1\"\n x1={0}\n y1={rowH}\n x2={columnWidth * dateSetup.dates.length}\n y2={rowH}\n className={styles.calendarTopTick}\n />\n );\n bottomValues.push(\n <line\n key=\"qhsep2\"\n x1={0}\n y1={rowH * 2}\n x2={columnWidth * dateSetup.dates.length}\n y2={rowH * 2}\n className={styles.calendarTopTick}\n />\n );\n }\n\n // Top row: year label — new group when year changes\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n // Find span end for xText calculation\n let span = 0;\n for (let j = i; j < dateSetup.dates.length && dateSetup.dates[j].getFullYear() === date.getFullYear(); j++) {\n span++;\n }\n const xText = columnWidth * i + (columnWidth * span) / 2;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + i}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={rowH}\n xText={xText}\n yText={rowH * 0.7}\n textAnchor=\"middle\"\n />\n );\n }\n }\n\n return [topValues, bottomValues, offDayRects];\n };\n\n /**\n * MONTH view — top row shows Quarter labels, bottom row shows 3-letter months.\n */\n const getCalendarValuesForMonth = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const offDayRects: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const quarterStart = projectCalendar?.quarter_start ?? 0;\n\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const bottomValue = shortMonth(date);\n bottomValues.push(\n <text\n key={bottomValue + date.getFullYear() + i}\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\n // Top row: quarter label — new group when quarter or year changes\n const qNum = getQuarterNumber(date, quarterStart);\n const prevDate = i > 0 ? dateSetup.dates[i - 1] : null;\n const prevQNum = prevDate ? getQuarterNumber(prevDate, quarterStart) : -1;\n const isNewQuarter =\n i === 0 ||\n qNum !== prevQNum ||\n date.getFullYear() !== (prevDate ? prevDate.getFullYear() : -1);\n\n if (isNewQuarter) {\n const topValue = `Qtr ${qNum}, ${date.getFullYear()}`;\n // Find how many months in this quarter-year group for xText centering\n let span = 0;\n for (\n let j = i;\n j < dateSetup.dates.length &&\n getQuarterNumber(dateSetup.dates[j], quarterStart) === qNum &&\n dateSetup.dates[j].getFullYear() === date.getFullYear();\n j++\n ) {\n span++;\n }\n const xText = rtl\n ? columnWidth * i + columnWidth * span * 0.5 + columnWidth\n : columnWidth * i + (columnWidth * span) / 2;\n\n topValues.push(\n <TopPartOfCalendar\n key={topValue + i}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={xText}\n yText={topDefaultHeight * 0.7}\n textAnchor=\"middle\"\n />\n );\n // Extend the quarter-boundary tick through the bottom half of the header\n if (i > 0) {\n bottomValues.push(\n <line\n key={`qbound-${i}`}\n x1={columnWidth * i}\n y1={topDefaultHeight}\n x2={columnWidth * i}\n y2={headerHeight}\n className={styles.calendarTopTick}\n />\n );\n }\n }\n }\n return [topValues, bottomValues, offDayRects];\n };\n\n /**\n * WEEK view — top row: \"Mmm YYYY\", bottom row: day-number of week start.\n */\n const getCalendarValuesForWeek = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const offDayRects: 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 // Use 3-letter month abbreviation\n topValue = `${shortMonth(date)} ${date.getFullYear()}`;\n }\n // Bottom: day number of the week-start date\n const bottomValue = date.getDate().toString();\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 (i !== dates.length - 1) {\n topValues.push(\n <TopPartOfCalendar\n key={topValue + i}\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, offDayRects];\n };\n\n /**\n * DAY view — top row: \"Mmm YYYY\" per month, bottom: day labels.\n * Off days shaded gray. Solid tick for week-start day, dashed for others.\n */\n const getCalendarValuesForDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const offDayRects: ReactChild[] = [];\n const tickLines: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n const weekStartDay = projectCalendar?.week_start ?? 1; // default Monday\n\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n\n // Per-day separator tick lines\n const isWeekStart = date.getDay() === weekStartDay;\n tickLines.push(\n <line\n key={`tick-day-${i}`}\n x1={columnWidth * i}\n y1={topDefaultHeight}\n x2={columnWidth * i}\n y2={headerHeight}\n className={isWeekStart ? styles.calendarTickSolid : styles.calendarTickDashed}\n />\n );\n\n // Bottom: day label\n const bottomValue =\n columnWidth > 55\n ? `${getLocalDayOfWeek(date, locale, \"short\")}, ${date.getDate()}`\n : `${getLocalDayOfWeek(date, locale, \"narrow\")},${date.getDate()}`;\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\n // Top: month boundary labels using 3-letter abbreviation\n if (\n i + 1 !== dates.length &&\n date.getMonth() !== dates[i + 1].getMonth()\n ) {\n const topValue = `${shortMonth(date)} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + i}\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 = `${shortMonth(date)} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + \"last\"}\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, offDayRects, tickLines];\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(date, locale, \"short\")}, ${date.getDate()} ${shortMonth(date)}`;\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(displayDate, locale, \"long\")}, ${displayDate.getDate()} ${shortMonth(displayDate)}`;\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 let extraValues: ReactChild[] = [];\n let tickLines: ReactChild[] = [];\n\n switch (dateSetup.viewMode) {\n case ViewMode.Year:\n [topValues, bottomValues] = getCalendarValuesForYear();\n break;\n case ViewMode.Quarter: {\n const r = getCalendarValuesForQuarter();\n topValues = r[0]; bottomValues = r[1]; extraValues = r[2] || [];\n break;\n }\n case ViewMode.Month: {\n const r = getCalendarValuesForMonth();\n topValues = r[0]; bottomValues = r[1]; extraValues = r[2] || [];\n break;\n }\n case ViewMode.Week: {\n const r = getCalendarValuesForWeek();\n topValues = r[0]; bottomValues = r[1]; extraValues = r[2] || [];\n break;\n }\n case ViewMode.Day: {\n const result = getCalendarValuesForDay();\n topValues = result[0];\n bottomValues = result[1];\n extraValues = result[2];\n tickLines = result[3];\n break;\n }\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 {extraValues}\n {tickLines}\n {bottomValues}\n {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 // Use visual segment edge when available (correct for working-time bars in day view)\n if (t.plannedSegments && t.plannedSegments.length > 0) {\n const p = t.plannedSegments[0].x1;\n if (t.actualSegments && t.actualSegments.length > 0) return Math.min(p, t.actualSegments[0].x1);\n return p;\n }\n if (t.actualSegments && t.actualSegments.length > 0) return t.actualSegments[0].x1;\n const candidates: number[] = [];\n if (t.x1 !== undefined && t.x1 >= 0) candidates.push(t.x1);\n if (t.actualx1 !== undefined && t.actualx1 >= 0) candidates.push(t.actualx1);\n return candidates.length > 0 ? Math.min(...candidates) : 0;\n };\n const maxX = (t: BarTask) => {\n if (t.plannedSegments && t.plannedSegments.length > 0) {\n const p = t.plannedSegments[t.plannedSegments.length - 1].x2;\n if (t.actualSegments && t.actualSegments.length > 0) return Math.max(p, t.actualSegments[t.actualSegments.length - 1].x2);\n return p;\n }\n if (t.actualSegments && t.actualSegments.length > 0) return t.actualSegments[t.actualSegments.length - 1].x2;\n const candidates: number[] = [];\n if (t.x2 !== undefined && t.x2 >= 0) candidates.push(t.x2);\n if (t.actualx2 !== undefined && t.actualx2 >= 0) candidates.push(t.actualx2);\n return candidates.length > 0 ? Math.max(...candidates) : 0;\n };\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\";\nimport { getWorkingIntervals } from \"./calendar-helper\";\nimport { startOfDate, addToDate } from \"./date-helper\";\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(startOfDate(task.start, \"day\"), dates, columnWidth) : -1;\n x2 = task.end ? taskXCoordinate(addToDate(startOfDate(task.end, \"day\"), 1, \"day\"), dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinate(startOfDate(task.actualStart, \"day\"), dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinate(addToDate(startOfDate(task.actualEnd, \"day\"), 1, \"day\"), 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 // Compute working-time segments if the task has a calendar\n let plannedSegments: Array<{ x1: number; x2: number }> | undefined;\n let actualSegments: Array<{ x1: number; x2: number }> | undefined;\n\n if (task.calender && task.start && task.end && task.start.getTime() > 0) {\n const planEnd = addToDate(startOfDate(task.end, \"day\"), 1, \"day\");\n const intervals = getWorkingIntervals(task.start, planEnd, task.calender);\n const segs = intervals\n .map(iv => ({\n x1: taskXCoordinate(iv.start, dates, columnWidth),\n x2: taskXCoordinate(iv.end, dates, columnWidth),\n }))\n .filter(s => s.x2 > s.x1);\n if (segs.length > 0) plannedSegments = segs;\n }\n\n if (\n task.calender &&\n task.actualStart &&\n task.actualEnd &&\n task.actualStart.getTime() > 0\n ) {\n const actEnd = addToDate(startOfDate(task.actualEnd, \"day\"), 1, \"day\");\n const intervals = getWorkingIntervals(\n task.actualStart,\n actEnd,\n task.calender\n );\n const segs = intervals\n .map(iv => ({\n x1: taskXCoordinate(iv.start, dates, columnWidth),\n x2: taskXCoordinate(iv.end, dates, columnWidth),\n }))\n .filter(s => s.x2 > s.x1);\n if (segs.length > 0) actualSegments = segs;\n }\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 plannedSegments,\n actualSegments,\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\nexport const 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 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 segments?: Array<{ x1: number; x2: number }>;\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 width,\n height,\n isSelected,\n progressX,\n progressWidth,\n barCornerRadius,\n styles,\n segments,\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 if (segments && segments.length > 0) {\n // Multi-segment rendering: one rect per working interval\n const totalWidth = width;\n return (\n <g onMouseDown={onMouseDown}>\n {segments.map((seg, idx) => (\n <rect\n key={`seg-${idx}`}\n x={seg.x1}\n width={seg.x2 - seg.x1}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getBarColor()}\n strokeWidth={2}\n stroke={styles.criticalPathColor}\n />\n ))}\n {/* Progress overlay: distribute progressWidth proportionally */}\n {progressWidth > 0 && (() => {\n const rects: React.ReactNode[] = [];\n let remaining = progressWidth;\n for (const seg of segments) {\n if (remaining <= 0) break;\n const segW = seg.x2 - seg.x1;\n const ratio = totalWidth > 0 ? segW / totalWidth : 0;\n const pw = Math.min(remaining, progressWidth * ratio);\n if (pw > 0) {\n rects.push(\n <rect\n key={`prog-${seg.x1}`}\n x={seg.x1}\n width={pw}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n );\n remaining -= pw;\n }\n }\n return rects;\n })()}\n </g>\n );\n }\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={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 if (segments && segments.length > 0) {\n return (\n <g onMouseDown={onMouseDown}>\n {segments.map((seg, idx) => (\n <rect\n key={`aseg-${idx}`}\n x={seg.x1}\n width={seg.x2 - seg.x1}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n />\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 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};\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\n // When segments exist (calendar with off-days/holidays), snap handles to the\n // nearest colored-bar boundary so they remain visible and usable even when the\n // task's declared start/end dates fall on off-days.\n const plannedSegs = task.plannedSegments;\n const plannedLeftHandleX = plannedSegs?.length\n ? plannedSegs[0].x1\n : task.x1;\n const plannedRightHandleX = plannedSegs?.length\n ? plannedSegs[plannedSegs.length - 1].x2\n : task.x2;\n\n const actualSegs = task.actualSegments;\n const actualLeftHandleX = actualSegs?.length\n ? actualSegs[0].x1\n : task.actualx1;\n const actualRightHandleX = actualSegs?.length\n ? actualSegs[actualSegs.length - 1].x2\n : task.actualx2;\n\n if (type == \"planned\") {\n if (task?.x1 >= 0 && task?.x2 >= 0 && task.x2 - task.x1 >= 0)\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n {/* Transparent hit area ensures hover stays active across segment gaps */}\n <rect x={task.x1} y={task.y} width={task.x2 - task.x1} height={task.height / 2} fill=\"transparent\" />\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\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 segments={task.plannedSegments}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"planned\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left — anchored to first segment so it stays on the colored bar\n even when the declared start date falls on an off-day/holiday */}\n <BarDateHandle\n x={plannedLeftHandleX + 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 — anchored to last segment */}\n <BarDateHandle\n x={plannedRightHandleX - task.handleWidth - 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"planned\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"planned\");\n }}\n />\n )}\n </g>\n </g>\n );\n else return <g className={styles.barWrapper} tabIndex={0}></g>;\n } else if (task?.actualx1 >= 0 && task?.actualx2 >= 0 && task.actualx2 - task.actualx1 >= 0) {\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n {/* Transparent hit area ensures hover stays active across segment gaps */}\n <rect x={task.actualx1} y={task.y + task.height / 2} width={task.actualx2 - task.actualx1} height={task.height / 2} fill=\"transparent\" />\n <BarDisplay\n x={task.actualx1}\n y={task.y + task.height / 2}\n type={type as string}\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 segments={task.actualSegments}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"actual\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left — anchored to first actual segment */}\n <BarDateHandle\n x={actualLeftHandleX + 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 — anchored to last actual segment */}\n <BarDateHandle\n x={actualRightHandleX - task.handleWidth - 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"actual\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"actual\");\n }}\n />\n )}\n </g>\n </g>\n );\n } else {\n return <g className={styles.barWrapper} tabIndex={0}></g>;\n }\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const BarSmall: React.FC<TaskItemProps> = ({\n task,\n type,\n isProgressChangeable,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n task.progressWidth + task.x1,\n task.y,\n task.height\n );\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e);\n }}\n />\n <g className=\"handleGroup\">\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e);\n }}\n />\n )}\n </g>\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./milestone.module.css\";\n\nexport const Milestone: React.FC<TaskItemProps> = ({\n task,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const transform = `rotate(45 ${task.x1 + task.height * 0.356} \n ${task.y + task.height * 0.85})`;\n const getBarColor = () => {\n return isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n };\n\n return (\n <g tabIndex={0} className={styles.milestoneWrapper}>\n <rect\n fill={getBarColor()}\n x={task.x1}\n width={task.height}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n transform={transform}\n className={styles.milestoneBackground}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e,\"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e);\n }}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./project.module.css\";\n\nexport const Project: React.FC<TaskItemProps> = ({ task, isSelected }) => {\n const barColor = isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n const processColor = isSelected\n ? task.styles.progressSelectedColor\n : task.styles.progressColor;\n const projectWith = task.x2 - task.x1;\n\n const projectLeftTriangle = [\n task.x1,\n task.y + task.height / 2 - 1,\n task.x1,\n task.y + task.height,\n task.x1 + 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n const projectRightTriangle = [\n task.x2,\n task.y + task.height / 2 - 1,\n task.x2,\n task.y + task.height,\n task.x2 - 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n\n return (\n <g tabIndex={0} className={styles.projectWrapper}>\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectBackground}\n />\n <rect\n x={task.progressX}\n width={task.progressWidth}\n y={task.y}\n height={task.height}\n ry={task.barCornerRadius}\n rx={task.barCornerRadius}\n fill={processColor}\n />\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height / 2}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectTop}\n />\n <polygon\n className={styles.projectTop}\n points={projectLeftTriangle}\n fill={barColor}\n />\n <polygon\n className={styles.projectTop}\n points={projectRightTriangle}\n fill={barColor}\n />\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { GanttContentMoveAction } from \"../../types/gantt-task-actions\";\nimport { Bar } from \"./bar/bar\";\nimport { BarSmall } from \"./bar/bar-small\";\nimport { Milestone } from \"./milestone/milestone\";\nimport { Project } from \"./project/project\";\n// import style from \"./task-list.module.css\";\n\nexport type TaskItemProps = {\n task: BarTask;\n arrowIndent: number;\n taskHeight: number;\n isProgressChangeable: boolean;\n isDateChangeable: boolean;\n isDelete: boolean;\n isSelected: boolean;\n rtl: boolean;\n type?: string;\n onEventStart: (\n action: GanttContentMoveAction,\n selectedTask: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => any;\n};\n\nexport const TaskItem: React.FC<TaskItemProps> = props => {\n const {\n task,\n // arrowIndent,\n isDelete,\n // taskHeight,\n isSelected,\n // rtl,\n onEventStart,\n } = {\n ...props,\n };\n // const textRef = useRef<SVGTextElement>(null);\n const [taskItem, setTaskItem] = useState<JSX.Element[]>([<div />]);\n // const [isTextInside, setIsTextInside] = useState(true);\n\n useEffect(() => {\n switch (task.typeInternal) {\n case \"milestone\":\n if (task.x1 >= 0 && task.actualx1 >= 0)\n setTaskItem([<Milestone {...props} />]);\n else setTaskItem([]);\n break;\n case \"project\":\n if (\n task?.x1 >= 0 &&\n task?.x2 >= 0 &&\n task.x2 > task.x1 &&\n task?.actualx1 >= 0 &&\n task?.actualx2 >= 0 &&\n task.actualx2 > task.actualx1\n )\n setTaskItem([<Project {...props} />]);\n else setTaskItem([]);\n break;\n case \"smalltask\":\n setTaskItem([<BarSmall {...props} />]);\n break;\n default:\n {\n let taskItem = [];\n if (task?.x1 >= 0 && task?.x2 >= 0) {\n taskItem.push(<Bar {...props} type={\"planned\"} />);\n }\n if (task?.actualx1 >= 0 && task?.actualx2 >= 0) {\n taskItem.push(<Bar {...props} type={\"actual\"} />);\n }\n setTaskItem(taskItem);\n }\n break;\n }\n }, [task, isSelected]);\n\n // useEffect(() => {\n // if (textRef.current) {\n // setIsTextInside(textRef.current.getBBox().width < task.x2 - task.x1);\n // }\n // }, [textRef, task]);\n\n // const getX = () => {\n // const width = task.x2 - task.x1;\n // const hasChild = task.barChildren.length > 0;\n // if (isTextInside) {\n // return task.x1 + width * 0.5;\n // }\n // if (rtl && textRef.current) {\n // return (\n // task.x1 -\n // textRef.current.getBBox().width -\n // arrowIndent * +hasChild -\n // arrowIndent * 0.2\n // );\n // } else {\n // return task.x1 + width + arrowIndent * +hasChild + arrowIndent * 0.2;\n // }\n // };\n\n return (\n <g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"planned\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"planned\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"planned\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"planned\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[0]}\n </g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"actual\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"actual\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"actual\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"actual\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"actual\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[1]}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport { CalendarDefinition, Dependency, EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Arrow } from \"../other/arrow\";\nimport { handleTaskBySVGMouseEvent, taskXCoordinate } 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\";\nimport { snapToWorkingTime, getWorkingIntervals } from \"../../helpers/calendar-helper\";\nimport { startOfDate, addToDate } from \"../../helpers/date-helper\";\n\nexport type TaskGanttContentProps = {\n tasks: BarTask[];\n dates: Date[];\n ganttEvent: GanttEvent;\n selectedTask: BarTask | undefined;\n rowHeight: number;\n columnWidth: number;\n timeStep: number;\n svg?: React.RefObject<SVGSVGElement>;\n svgWidth: number;\n taskHeight: number;\n arrowColor: string;\n arrowIndent: number;\n fontSize: string;\n fontFamily: string;\n rtl: boolean;\n virtualItems?: VirtualItem[];\n visibleStartY: number;\n visibleEndY: number;\n projectCalendar?: CalendarDefinition;\n setGanttEvent: (value: GanttEvent) => void;\n setFailedTask: (value: BarTask | null) => void;\n setSelectedTask: (taskId: string) => void;\n} & EventOption;\n\nexport const TaskGanttContent: React.FC<TaskGanttContentProps> = ({\n tasks,\n dates,\n ganttEvent,\n selectedTask,\n rowHeight,\n columnWidth,\n timeStep,\n svg,\n taskHeight,\n arrowIndent,\n fontFamily,\n fontSize,\n rtl,\n virtualItems = [],\n setGanttEvent,\n setFailedTask,\n setSelectedTask,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n onCalendarError,\n projectCalendar,\n visibleStartY,\n visibleEndY,\n}) => {\n const point = svg?.current?.createSVGPoint();\n const [xStep, setXStep] = useState(0);\n const [initEventX1Delta, setInitEventX1Delta] = useState(0);\n const [isMoving, setIsMoving] = useState(false);\n\n // create xStep\n useEffect(() => {\n const dateDelta =\n dates[1].getTime() -\n dates[0].getTime() -\n dates[1].getTimezoneOffset() * 60 * 1000 +\n dates[0].getTimezoneOffset() * 60 * 1000;\n const newXStep = (timeStep * columnWidth) / dateDelta;\n setXStep(newXStep);\n }, [columnWidth, dates, timeStep]);\n\n useEffect(() => {\n const handleMouseMove = async (event: MouseEvent) => {\n if (!ganttEvent.changedTask || !point || !svg?.current) return;\n event.preventDefault();\n\n point.x = event.clientX;\n const cursor = point.matrixTransform(\n svg?.current.getScreenCTM()?.inverse()\n );\n const { isChanged, changedTask } = handleTaskBySVGMouseEvent(\n cursor.x,\n ganttEvent.action as BarMoveAction,\n ganttEvent.changedTask,\n ganttEvent.type as string,\n xStep,\n timeStep,\n initEventX1Delta,\n rtl\n );\n if (isChanged) {\n let finalTask = changedTask;\n if (\n changedTask.calender &&\n (ganttEvent.action === \"end\" ||\n ganttEvent.action === \"start\" ||\n ganttEvent.action === \"move\")\n ) {\n finalTask = { ...changedTask };\n const cal = finalTask.calender!;\n if (ganttEvent.action === \"end\") {\n const snapped = snapToWorkingTime(finalTask.end, cal, \"forward\");\n finalTask.end = snapped;\n finalTask.x2 = taskXCoordinate(snapped, dates, columnWidth);\n } else if (ganttEvent.action === \"start\") {\n const snapped = snapToWorkingTime(finalTask.start, cal, \"forward\");\n finalTask.start = snapped;\n finalTask.x1 = taskXCoordinate(snapped, dates, columnWidth);\n } else {\n // move: snap start forward, shift end by same delta to preserve bar width\n const snapped = snapToWorkingTime(finalTask.start, cal, \"forward\");\n const delta = snapped.getTime() - finalTask.start.getTime();\n finalTask.start = snapped;\n finalTask.end = new Date(finalTask.end.getTime() + delta);\n finalTask.x1 = taskXCoordinate(finalTask.start, dates, columnWidth);\n finalTask.x2 = taskXCoordinate(finalTask.end, dates, columnWidth);\n }\n }\n setGanttEvent({ action: ganttEvent.action, changedTask: finalTask });\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 // Calendar snap: snap to nearest working time based on action direction\n if (\n newChangedTask.calender &&\n (action === \"move\" || action === \"end\" || action === \"start\")\n ) {\n const cal = newChangedTask.calender;\n if (action === \"end\") {\n // Extend end to the next working moment (forward)\n const snappedEnd = snapToWorkingTime(newChangedTask.end, cal, \"forward\");\n newChangedTask.end = snappedEnd;\n newChangedTask.x2 = taskXCoordinate(snappedEnd, dates, columnWidth);\n } else if (action === \"start\") {\n const snappedStart = snapToWorkingTime(newChangedTask.start, cal, \"forward\");\n if (snappedStart >= newChangedTask.end) {\n setFailedTask(originalSelectedTask);\n onCalendarError?.(newChangedTask, \"No working time in selected range\");\n setGanttEvent({ action: \"\" });\n setIsMoving(false);\n svg.current.removeEventListener(\"mousemove\", handleMouseMove);\n svg.current.removeEventListener(\"mouseup\", handleMouseUp);\n return;\n }\n newChangedTask.start = snappedStart;\n newChangedTask.x1 = taskXCoordinate(snappedStart, dates, columnWidth);\n } else {\n // move: snap start forward, shift end by same delta to preserve width\n const snappedStart = snapToWorkingTime(newChangedTask.start, cal, \"forward\");\n const delta = snappedStart.getTime() - newChangedTask.start.getTime();\n newChangedTask.start = snappedStart;\n newChangedTask.end = new Date(newChangedTask.end.getTime() + delta);\n newChangedTask.x1 = taskXCoordinate(snappedStart, dates, columnWidth);\n newChangedTask.x2 = taskXCoordinate(newChangedTask.end, dates, columnWidth);\n }\n const snapEnd = addToDate(startOfDate(newChangedTask.end, \"day\"), 1, \"day\");\n const newIntervals = getWorkingIntervals(\n newChangedTask.start,\n snapEnd,\n cal\n );\n const segs = newIntervals\n .map(iv => ({\n x1: taskXCoordinate(iv.start, dates, columnWidth),\n x2: taskXCoordinate(iv.end, dates, columnWidth),\n }))\n .filter(s => s.x2 > s.x1);\n newChangedTask.plannedSegments = segs.length > 0 ? segs : undefined;\n }\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 onCalendarError,\n projectCalendar,\n svg,\n isMoving,\n point,\n rtl,\n setFailedTask,\n setGanttEvent,\n dates,\n columnWidth,\n ]);\n\n /**\n * Method is Start point of task change\n */\n const handleBarEventStart = async (\n action: GanttContentMoveAction,\n task: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => {\n if (!event) {\n if (action === \"select\") {\n setSelectedTask(task.id);\n }\n }\n // Keyboard events\n else if (isKeyboardEvent(event)) {\n if (action === \"delete\") {\n if (onDelete) {\n try {\n const result = await onDelete(task);\n if (result !== undefined && result) {\n setGanttEvent({ action, changedTask: task });\n }\n } catch (error) {\n console.error(\"Error on Delete. \" + error);\n }\n }\n }\n }\n // Mouse Events\n else if (action === \"mouseenter\") {\n if (!ganttEvent.action) {\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n }\n } else if (action === \"mouseleave\") {\n if (ganttEvent.action === \"mouseenter\") {\n setGanttEvent({ action: \"\" });\n }\n } else if (action === \"dblclick\") {\n !!onDoubleClick && onDoubleClick(task);\n } else if (action === \"click\") {\n !!onClick && onClick(task);\n }\n // Change task event start\n else if (action === \"move\") {\n if (!svg?.current || !point) return;\n point.x = event.clientX;\n const cursor = point.matrixTransform(\n svg.current.getScreenCTM()?.inverse()\n );\n if (type == \"planned\") setInitEventX1Delta(cursor.x - task.x1);\n else if (type == \"actual\") setInitEventX1Delta(cursor.x - task.actualx1);\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n } else {\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n }\n };\n\n const getArrows = (isCritical: boolean, criticalPathType?: string) => {\n return tasks.flatMap(_task => {\n const task =\n _task.start.getTime() > 0 && _task.end.getTime() > 0\n ? _task\n : undefined;\n if (!task) {\n return [];\n }\n return task.barChildren\n .map(child => {\n if (task.x2 > task.x1 || task.actualx2 > task.actualx1) {\n const criticalTask = task.criticalPathArrows?.find(\n arrow =>\n arrow.taskId === tasks[child.index].id &&\n (!!arrow.criticalPathType\n ? arrow.criticalPathType === criticalPathType\n : !criticalPathType)\n );\n\n const taskTo = tasks[child.index];\n const yFrom = task.y + taskHeight / 2;\n const yTo = taskTo.y + taskHeight / 2;\n const minY = Math.min(yFrom, yTo);\n const maxY = Math.max(yFrom, yTo);\n\n if (maxY < visibleStartY || minY > visibleEndY) {\n return null;\n }\n\n // Only render arrows matching the group\n if (!!criticalTask === isCritical) {\n return (\n <Arrow\n key={`Arrow from ${task.id} to ${tasks[child.index].id}${\n isCritical ? \"-critical\" : \"\"\n }`}\n taskFrom={task}\n taskTo={tasks[child.index]}\n rowHeight={rowHeight}\n dependencyType={child.dependencyType as Dependency}\n taskHeight={taskHeight}\n arrowIndent={arrowIndent}\n arrowColor={criticalTask?.arrowColor || \"#808080\"}\n />\n );\n }\n }\n return null;\n })\n .filter(Boolean);\n });\n };\n\n return (\n <g className=\"content\">\n <g className=\"arrows\">\n {/* Render non-critical arrows first */}\n {getArrows(false)}\n {/* Render secondary critical path arrows on top */}\n {getArrows(true, \"secondary\")}\n {/* Render primary critical path arrows on top */}\n {getArrows(true, \"primary\")}\n </g>\n <g className=\"bar\" fontFamily={fontFamily} fontSize={fontSize}>\n {virtualItems.map(vi => {\n const _task = tasks[vi.index];\n const task = { ..._task, y: 0 }; // Temporary relative y=0 for virtual render\n if (!task && _task.typeInternal === \"milestone\") {\n return (\n <g key={_task.id} transform={`translate(0, ${vi.start})`}>\n <Milestone\n task={task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={false}\n isDateChangeable={false}\n isDelete={!_task.isDisabled}\n onEventStart={handleBarEventStart}\n isSelected={!!selectedTask && _task.id === selectedTask.id}\n rtl={rtl}\n />\n </g>\n );\n }\n if (!task) {\n return (\n <g\n key={_task.id}\n transform={`translate(0, ${vi.start})`}\n style={{ height: taskHeight }}\n />\n );\n }\n return (\n <g key={task.id} transform={`translate(0, ${vi.start})`}>\n <TaskItem\n task={task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={!!onProgressChange && !task.isDisabled}\n isDateChangeable={!!onDateChange && !task.isDisabled}\n isDelete={!task.isDisabled}\n onEventStart={handleBarEventStart}\n isSelected={!!selectedTask && task.id === selectedTask.id}\n rtl={rtl}\n />\n </g>\n );\n })}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useRef } from \"react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { GridProps, Grid } from \"../grid/grid\";\nimport { CalendarProps, Calendar } from \"../calendar/calendar\";\nimport { TaskGanttContentProps, TaskGanttContent } from \"./task-gantt-content\";\nimport styles from \"./gantt.module.css\";\n\nexport type TaskGanttProps = {\n gridProps: GridProps;\n calendarProps: CalendarProps;\n barProps: TaskGanttContentProps;\n ganttHeight: number;\n scrollY: number;\n scrollX: number;\n};\nexport const TaskGantt: React.FC<TaskGanttProps> = ({\n gridProps,\n calendarProps,\n barProps,\n ganttHeight,\n scrollY,\n scrollX,\n}) => {\n const ganttSVGRef = useRef<SVGSVGElement>(null);\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const verticalGanttContainerRef = useRef<HTMLDivElement>(null);\n const newBarProps = { ...barProps, svg: ganttSVGRef, ganttHeight, scrollY };\n\n const buffer = barProps.rowHeight * 10;\n const visibleStartY = scrollY - buffer;\n const visibleEndY = scrollY + ganttHeight + buffer;\n\n const virtualizer = useVirtualizer({\n count: barProps.tasks.length,\n getScrollElement: () => horizontalContainerRef.current,\n estimateSize: () => barProps.rowHeight,\n overscan: 10\n });\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (verticalGanttContainerRef.current) {\n verticalGanttContainerRef.current.scrollLeft = scrollX;\n }\n }, [scrollX]);\n\n return (\n <div\n className={styles.ganttVerticalContainer}\n ref={verticalGanttContainerRef}\n dir=\"ltr\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={gridProps.svgWidth}\n height={calendarProps.headerHeight}\n fontFamily={barProps.fontFamily}\n >\n <Calendar {...calendarProps} />\n </svg>\n <div\n ref={horizontalContainerRef}\n className={styles.horizontalContainer}\n style={\n ganttHeight\n ? { height: ganttHeight, width: gridProps.svgWidth }\n : { width: gridProps.svgWidth }\n }\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={gridProps.svgWidth}\n height={virtualizer.getTotalSize()}\n fontFamily={barProps.fontFamily}\n ref={ganttSVGRef}\n >\n <Grid\n {...gridProps}\n virtualItems={virtualizer.getVirtualItems()}\n visibleStartY={visibleStartY}\n visibleEndY={visibleEndY}\n />\n <TaskGanttContent\n {...newBarProps}\n visibleStartY={visibleStartY}\n visibleEndY={visibleEndY}\n virtualItems={virtualizer.getVirtualItems()}\n />\n </svg>\n </div>\n </div>\n );\n};\n","import React, { SyntheticEvent, useRef, useEffect } from \"react\";\nimport styles from \"./horizontal-scroll.module.css\";\n\nexport const HorizontalScroll: React.FC<{\n scroll: number;\n svgWidth: number;\n taskListWidth: number;\n rtl: boolean;\n onScroll: (event: SyntheticEvent<HTMLDivElement>) => void;\n}> = ({ scroll, svgWidth, taskListWidth, rtl, onScroll }) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollLeft = scroll;\n }\n }, [scroll]);\n\n return (\n <div\n dir=\"ltr\"\n style={{\n margin: rtl\n ? `0px ${taskListWidth}px 0px 0px`\n : `0px 0px 0px ${taskListWidth}px`,\n }}\n className={styles.scrollWrapper}\n onScroll={onScroll}\n ref={scrollRef}\n >\n <div style={{ width: svgWidth }} className={styles.scroll} />\n </div>\n );\n};\n","import React, {\n useState,\n SyntheticEvent,\n useRef,\n useEffect,\n useMemo,\n} from \"react\";\nimport { ViewMode, GanttProps, Task } from \"../../types/public-types\";\nimport { GridProps } from \"../grid/grid\";\nimport { ganttDateRange, seedDates } from \"../../helpers/date-helper\";\nimport { CalendarProps } from \"../calendar/calendar\";\nimport { TaskGanttContentProps } from \"./task-gantt-content\";\nimport { TaskListHeaderDefault } from \"../task-list/task-list-header\";\nimport { TaskListTableDefault } from \"../task-list/task-list-table\";\nimport { StandardTooltipContent, Tooltip } from \"../other/tooltip\";\nimport { VerticalScroll } from \"../other/vertical-scroll\";\nimport { TaskListProps, TaskList } from \"../task-list/task-list\";\nimport { TaskGantt } from \"./task-gantt\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { convertToBarTasks } from \"../../helpers/bar-helper\";\nimport { GanttEvent } from \"../../types/gantt-task-actions\";\nimport { DateSetup } from \"../../types/date-setup\";\nimport { HorizontalScroll } from \"../other/horizontal-scroll\";\nimport hScrollStyles from \"../other/horizontal-scroll.module.css\";\nimport { removeHiddenTasks, sortTasks } from \"../../helpers/other-helper\";\nimport styles from \"./gantt.module.css\";\n\nexport const Gantt: React.FunctionComponent<GanttProps> = ({\n tasks,\n leafTasks = [],\n scheduleType = \"main\",\n startDate = new Date(),\n endDate = new Date(),\n headerHeight = 50,\n columnWidth = 60,\n listCellWidth = \"155px\",\n rowHeight = 50,\n ganttHeight = 0,\n viewMode = ViewMode.Day,\n preStepsCount = 1,\n locale = \"en-US\",\n barFill = 60,\n barCornerRadius = 3,\n barProgressColor = \"#a3a3ff\",\n barProgressSelectedColor = \"#8282f5\",\n barBackgroundColor = \"#b8c2cc\",\n barBackgroundSelectedColor = \"#aeb8c2\",\n projectProgressColor = \"#7db59a\",\n projectProgressSelectedColor = \"#59a985\",\n projectBackgroundColor = \"#fac465\",\n projectBackgroundSelectedColor = \"#f7bb53\",\n milestoneBackgroundColor = \"#f1c453\",\n milestoneBackgroundSelectedColor = \"#f29e4c\",\n rtl = false,\n handleWidth = 8,\n timeStep = 300000,\n arrowColor = \"grey\",\n fontFamily = \"Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue\",\n fontSize = \"14px\",\n arrowIndent = 20,\n todayColor = \"rgba(252, 248, 227, 0.5)\",\n weekendColor = \"#e6e4e4\",\n viewDate,\n TooltipContent = StandardTooltipContent,\n TaskListHeader = TaskListHeaderDefault,\n TaskListTable = TaskListTableDefault,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n onSelect,\n onExpanderClick,\n onMultiSelect,\n taskLabelRenderer,\n delayToRender = 500,\n shouldNotShowLoadingOverlay=true,\n projectCalendar,\n onCalendarError,\n}) => {\n // Derive calendar from tasks first; fall back to explicit projectCalendar prop\n const effectiveCalendar = tasks.find(t => t.calender)?.calender ?? projectCalendar;\n const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const isDraggingTable = useRef(false);\n const dragStartX = useRef(0);\n const dragStartWidth = useRef(0);\n const dragMaxWidth = useRef<number>(Infinity);\n const [tableContainerWidth, setTableContainerWidth] = useState<number | null>(null);\n const tableInnerScrollRef = useRef<HTMLDivElement>(null);\n const tableHScrollRef = useRef<HTMLDivElement>(null);\n const [tableScrollableWidth, setTableScrollableWidth] = useState(0);\n const [dateSetup, setDateSetup] = useState<DateSetup>(() => {\n const [startDateRange, endDateRange] = ganttDateRange(\n tasks,\n viewMode,\n preStepsCount\n );\n if (scheduleType === \"lookAhead\") {\n return { viewMode, dates: seedDates(startDate, endDate, viewMode) };\n }\n return {\n viewMode,\n dates: seedDates(startDateRange, endDateRange, viewMode),\n };\n });\n const [currentViewDate, setCurrentViewDate] = useState<Date | undefined>(\n undefined\n );\n\n const [taskListWidth, setTaskListWidth] = useState(0);\n\n useEffect(() => {\n if (tableInnerScrollRef.current) {\n setTableScrollableWidth(tableInnerScrollRef.current.scrollWidth);\n }\n }, [taskListWidth, listCellWidth]);\n\n const handleTableResizeMouseDown = (e: React.MouseEvent) => {\n isDraggingTable.current = true;\n dragStartX.current = e.clientX;\n dragStartWidth.current = tableContainerWidth ?? (taskListRef.current?.offsetWidth ?? 0);\n // Cap right-drag at the table's natural content width to prevent white space\n dragMaxWidth.current = tableInnerScrollRef.current?.scrollWidth ?? Math.max(100, (wrapperRef.current?.offsetWidth ?? Infinity) - 200);\n e.preventDefault();\n };\n\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n if (!isDraggingTable.current) return;\n const newWidth = Math.min(dragMaxWidth.current, Math.max(100, dragStartWidth.current + (e.clientX - dragStartX.current)));\n setTableContainerWidth(newWidth);\n setTaskListWidth(newWidth);\n };\n const onMouseUp = () => {\n isDraggingTable.current = false;\n };\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n };\n }, []);\n const [svgContainerWidth, setSvgContainerWidth] = useState(0);\n const [svgContainerHeight, setSvgContainerHeight] = useState(ganttHeight);\n const [barTasks, setBarTasks] = useState<BarTask[]>([]);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n const [ganttEvent, setGanttEvent] = useState<GanttEvent>({\n action: \"\",\n });\n const taskHeight = useMemo(\n () => (rowHeight * barFill) / 100,\n [rowHeight, barFill]\n );\n\n const [selectedTask, setSelectedTask] = useState<BarTask>();\n const [failedTask, setFailedTask] = useState<BarTask | null>(null);\n\n // Expand columns to fill available space; fall back to prop value (min) so scroll kicks in when content is wider\n // Math.ceil ensures svgWidth >= svgContainerWidth so there is no pixel gap on the right edge\n const effectiveColumnWidth = useMemo(() => {\n if (svgContainerWidth <= 0 || dateSetup.dates.length <= 0) return columnWidth;\n return Math.max(columnWidth, Math.ceil(svgContainerWidth / dateSetup.dates.length));\n }, [columnWidth, svgContainerWidth, dateSetup.dates.length]);\n\n const svgWidth =\n effectiveColumnWidth < 55\n ? (dateSetup.dates.length + 0.5) * effectiveColumnWidth\n : dateSetup.dates.length * effectiveColumnWidth;\n const ganttFullHeight = useMemo(() => barTasks.length * rowHeight, [barTasks.length, rowHeight]);\n\n const [scrollY, setScrollY] = useState(0);\n const [scrollX, setScrollX] = useState(-1);\n const [ignoreScrollEvent, setIgnoreScrollEvent] = useState(false);\n const [lastTouchX, setLastTouchX] = useState(0);\n const [lastTouchY, setLastTouchY] = useState(0);\n const [isProcessing, setIsProcessing] = useState(false);\n\n const buffer = rowHeight * 10;\n const visibleStartY = scrollY - buffer;\n const visibleEndY = scrollY + ganttHeight + buffer;\n useEffect(() => {\n if (scheduleType === \"lookAhead\" && startDate && endDate) {\n setDateSetup({\n viewMode,\n dates: seedDates(startDate, endDate, viewMode),\n });\n }\n }, [startDate, endDate]);\n // task change events\n useEffect(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if(!shouldNotShowLoadingOverlay){ \n setIsProcessing(true);\n }\n debounceRef.current = setTimeout(() => {\n let filteredTasks: Task[];\n // if (onExpanderClick) {\n filteredTasks = removeHiddenTasks(tasks);\n // } else {\n // filteredTasks = tasks;\n // }\n filteredTasks = filteredTasks.sort(sortTasks);\n const [startDateRange, endDateRange] = ganttDateRange(\n filteredTasks,\n viewMode,\n preStepsCount,\n effectiveCalendar?.quarter_start ?? 0\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 * effectiveColumnWidth);\n }\n }\n if (scheduleType !== \"lookAhead\") {\n setDateSetup({\n dates: seedDates(startDateRange, endDateRange, viewMode),\n viewMode,\n });\n }\n\n let [primaryPath, secondaryPath] = getCriticalPaths(leafTasks);\n\n // Color the paths.\n uncolorAll(tasks);\n if (scheduleType !== \"lookAhead\") {\n colorPath(secondaryPath, \"#00ff00\", tasks, \"secondary\");\n colorPath(primaryPath, \"#ff0000\", tasks, \"primary\");\n }\n setBarTasks(\n convertToBarTasks(\n filteredTasks,\n newDates,\n effectiveColumnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n )\n );\n setIsProcessing(false);\n }, delayToRender);\n }, [\n tasks,\n viewMode,\n preStepsCount,\n rowHeight,\n barCornerRadius,\n taskHeight,\n handleWidth,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor,\n rtl,\n shouldNotShowLoadingOverlay,\n effectiveColumnWidth,\n effectiveCalendar,\n ]);\n // for debug purpose\n useEffect(() => {\n return () => {\n clearTimeout(debounceRef.current!);\n };\n }, []);\n\n useEffect(() => {\n if (\n viewMode === dateSetup.viewMode &&\n ((viewDate && !currentViewDate) ||\n (viewDate && currentViewDate?.valueOf() !== viewDate.valueOf()))\n ) {\n const dates = dateSetup.dates;\n const index = dates.findIndex(\n (d, i) =>\n viewDate.valueOf() >= d.valueOf() &&\n i + 1 !== dates.length &&\n viewDate.valueOf() < dates[i + 1].valueOf()\n );\n if (index === -1) {\n return;\n }\n setCurrentViewDate(viewDate);\n setScrollX(effectiveColumnWidth * index);\n }\n }, [\n viewDate,\n effectiveColumnWidth,\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 // Subtract the 20px column-resize divider so the gantt SVG fills the remaining space exactly\n setSvgContainerWidth(wrapperRef.current.offsetWidth - taskListWidth - 20);\n }\n }, [wrapperRef, taskListWidth]);\n\n useEffect(() => {\n if (ganttHeight) {\n setSvgContainerHeight(ganttHeight + headerHeight);\n } else {\n setSvgContainerHeight(tasks.length * rowHeight + headerHeight);\n }\n }, [ganttHeight, tasks, headerHeight, rowHeight]);\n\n // scroll events\n useEffect(() => {\n const handleWheel = (event: WheelEvent) => {\n if (event.shiftKey || event.deltaX) {\n const scrollMove = event.deltaX ? event.deltaX : event.deltaY;\n let newScrollX = scrollX + scrollMove;\n if (newScrollX < 0) {\n newScrollX = 0;\n } else if (newScrollX > svgWidth) {\n newScrollX = svgWidth;\n }\n setScrollX(newScrollX);\n event.preventDefault();\n } else if (ganttHeight) {\n let newScrollY = scrollY + event.deltaY;\n if (newScrollY < 0) {\n newScrollY = 0;\n } else if (newScrollY > ganttFullHeight - ganttHeight) {\n newScrollY = ganttFullHeight - ganttHeight;\n }\n if (newScrollY !== scrollY) {\n setScrollY(newScrollY);\n event.preventDefault();\n }\n }\n\n setIgnoreScrollEvent(true);\n };\n\n const handleLogTouch = (event: TouchEvent) => {\n if (event) {\n setLastTouchX(event.changedTouches[0].pageX);\n setLastTouchY(event.changedTouches[0].pageY);\n }\n };\n\n const handleTouch = (event: TouchEvent) => {\n if (event.changedTouches[0].pageX || event.changedTouches[0].pageY) {\n let deltaX = event.changedTouches[0].pageX - lastTouchX;\n let deltaY = event.changedTouches[0].pageY - lastTouchY;\n\n // if (lastTouchX > 0 && lastTouchY > 0) {\n if (Math.abs(deltaX) > Math.abs(deltaY)) {\n let newScrollX = scrollX - deltaX / 3;\n if (newScrollX > 0 && newScrollX < 1600) {\n setScrollX(newScrollX);\n } else if (newScrollX < 0) {\n setScrollX(0);\n } else {\n setScrollX(1600);\n }\n } else {\n let newScrollY = scrollY - deltaY;\n if (newScrollY > 0 && newScrollY < 1600) {\n setScrollY(newScrollY);\n } else if (newScrollY < 0) {\n setScrollY(0);\n } else {\n setScrollY(1600);\n }\n }\n // }\n\n setLastTouchX(event.changedTouches[0].pageX);\n setLastTouchY(event.changedTouches[0].pageY);\n }\n\n // if (event.changedTouches[0].pageX) {\n // const scrollMove = event.changedTouches[0].pageX ? event.changedTouches[0].pageX : event.changedTouches[0].pageY;\n // let newScrollX = scrollX + scrollMove;\n // if (newScrollX < 0) {\n // newScrollX = 0;\n // } else if (newScrollX > svgWidth) {\n // newScrollX = svgWidth;\n // }\n // setScrollX(newScrollX);\n // event.preventDefault();\n // } else if (ganttHeight) {\n // let newScrollY = scrollY + event.changedTouches[0].pageY;\n // if (newScrollY < 0) {\n // newScrollY = 0;\n // } else if (newScrollY > ganttFullHeight - ganttHeight) {\n // newScrollY = ganttFullHeight - ganttHeight;\n // }\n // if (newScrollY !== scrollY) {\n // setScrollY(newScrollY);\n // event.preventDefault();\n // }\n // }\n\n setIgnoreScrollEvent(true);\n };\n\n // subscribe if scroll is necessary\n wrapperRef.current?.addEventListener(\"wheel\", handleWheel, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchmove\", handleTouch, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchstart\", handleLogTouch, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchend\", handleLogTouch, {\n passive: false,\n });\n return () => {\n wrapperRef.current?.removeEventListener(\"wheel\", handleWheel);\n wrapperRef.current?.removeEventListener(\"touchmove\", handleTouch);\n wrapperRef.current?.removeEventListener(\"touchend\", handleLogTouch);\n wrapperRef.current?.removeEventListener(\"touchend\", handleLogTouch);\n };\n }, [\n wrapperRef,\n scrollY,\n scrollX,\n ganttHeight,\n svgWidth,\n rtl,\n ganttFullHeight,\n ]);\n\n const handleScrollY = (event: SyntheticEvent<HTMLDivElement>) => {\n if (scrollY !== event.currentTarget.scrollTop && !ignoreScrollEvent) {\n setScrollY(event.currentTarget.scrollTop);\n setIgnoreScrollEvent(true);\n } else {\n setIgnoreScrollEvent(false);\n }\n };\n\n const handleScrollX = (event: SyntheticEvent<HTMLDivElement>) => {\n if (scrollX !== event.currentTarget.scrollLeft) {\n setScrollX(event.currentTarget.scrollLeft);\n setIgnoreScrollEvent(true);\n } else {\n setIgnoreScrollEvent(false);\n }\n };\n\n\n /**\n * Handles arrow keys events and transform it to new scroll\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n event.preventDefault();\n let newScrollY = scrollY;\n let newScrollX = scrollX;\n let isX = true;\n switch (event.key) {\n case \"Down\": // IE/Edge specific value\n case \"ArrowDown\":\n newScrollY += rowHeight;\n isX = false;\n break;\n case \"Up\": // IE/Edge specific value\n case \"ArrowUp\":\n newScrollY -= rowHeight;\n isX = false;\n break;\n case \"Left\":\n case \"ArrowLeft\":\n newScrollX -= effectiveColumnWidth;\n break;\n case \"Right\": // IE/Edge specific value\n case \"ArrowRight\":\n newScrollX += effectiveColumnWidth;\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: effectiveColumnWidth,\n svgWidth,\n tasks: tasks,\n scheduleType: scheduleType,\n rowHeight,\n dates: dateSetup.dates,\n todayColor,\n weekendColor,\n rtl,\n visibleStartY,\n visibleEndY,\n projectCalendar: effectiveCalendar,\n viewMode,\n };\n const calendarProps: CalendarProps = {\n dateSetup,\n locale,\n viewMode,\n headerHeight,\n columnWidth: effectiveColumnWidth,\n fontFamily,\n fontSize,\n rtl,\n projectCalendar: effectiveCalendar,\n };\n const barProps: TaskGanttContentProps = {\n tasks: barTasks,\n dates: dateSetup.dates,\n ganttEvent,\n selectedTask,\n rowHeight,\n taskHeight,\n columnWidth: effectiveColumnWidth,\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 onCalendarError,\n projectCalendar: effectiveCalendar,\n visibleStartY,\n visibleEndY,\n };\n\n const tableProps: TaskListProps = {\n rowHeight,\n rowWidth: listCellWidth,\n fontFamily,\n fontSize,\n tasks: barTasks,\n leafTasks,\n scheduleType,\n locale,\n headerHeight,\n scrollY,\n ganttHeight,\n horizontalContainerClass: styles.horizontalContainer,\n selectedTask,\n taskListRef,\n setSelectedTask: handleSelectedTask,\n onExpanderClick: handleExpanderClick,\n onDoubleClick,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n containerWidth: tableContainerWidth ?? undefined,\n innerScrollRef: tableInnerScrollRef,\n };\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n className={styles.wrapper}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n ref={wrapperRef}\n >\n {listCellWidth && <TaskList {...tableProps} />}\n {listCellWidth && scheduleType === \"main\" && (\n <div\n style={{\n width: \"20px\",\n cursor: \"col-resize\",\n backgroundColor: \"#e0e0e0\",\n flexShrink: 0,\n zIndex: 1,\n alignSelf: \"stretch\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n userSelect: \"none\",\n fontSize: \"10px\",\n color: \"#666\",\n letterSpacing: \"-1px\",\n }}\n onMouseDown={handleTableResizeMouseDown}\n >\n &#9668;|&#9658;\n </div>\n )}\n <TaskGantt\n gridProps={gridProps}\n calendarProps={calendarProps}\n barProps={barProps}\n ganttHeight={ganttHeight}\n scrollY={scrollY}\n scrollX={scrollX}\n />\n {ganttEvent.changedTask && (\n <Tooltip\n arrowIndent={arrowIndent}\n rowHeight={rowHeight}\n svgContainerHeight={svgContainerHeight}\n svgContainerWidth={svgContainerWidth}\n fontFamily={fontFamily}\n fontSize={fontSize}\n scrollX={scrollX}\n scrollY={scrollY}\n task={ganttEvent.changedTask}\n type={ganttEvent.type as string}\n headerHeight={headerHeight}\n taskListWidth={taskListWidth}\n TooltipContent={TooltipContent}\n rtl={rtl}\n svgWidth={svgWidth}\n />\n )}\n <VerticalScroll\n ganttFullHeight={ganttFullHeight}\n ganttHeight={ganttHeight}\n headerHeight={headerHeight}\n scroll={scrollY}\n onScroll={handleScrollY}\n rtl={rtl}\n />\n </div>\n {isProcessing && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: \"20px\",\n zIndex: 9999,\n pointerEvents: \"none\", // ← allows scrolling & interaction underneath!\n borderRadius: \"8px\",\n }}\n >\n <span\n style={{\n fontSize: \"24px\",\n fontWeight: \"600\",\n color: \"#cc0404\",\n fontFamily: \"Arial, sans-serif\",\n }}\n >\n Loading...\n </span>\n <div className={styles.spinner} />\n </div>\n )}\n <div style={{ display: \"flex\" }}>\n {listCellWidth && (\n <div\n ref={tableHScrollRef}\n className={hScrollStyles.scrollWrapper}\n style={{ width: taskListWidth + 4, flexShrink: 0 }}\n onScroll={(e: SyntheticEvent<HTMLDivElement>) => {\n if (tableInnerScrollRef.current) {\n tableInnerScrollRef.current.scrollLeft = e.currentTarget.scrollLeft;\n }\n }}\n >\n <div style={{ width: tableScrollableWidth }} />\n </div>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <HorizontalScroll\n svgWidth={svgWidth}\n taskListWidth={0}\n scroll={scrollX}\n rtl={rtl}\n onScroll={handleScrollX}\n />\n </div>\n </div>\n </div>\n );\n};\n\n// This is based on the visit function from https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search\nexport function topologicalOrderingHelper(\n taskID: string,\n taskMap: {},\n sortedTaskList: string[]\n) {\n if (!taskMap[taskID]) return true; // dependency pointed to an ID not present in leafTasks. ignore the dependency\n if (taskMap[taskID].finished) return true;\n if (taskMap[taskID].started) {\n console.log(\"Cycle involving \" + taskID);\n return false; // Error: dependencies made a cycle\n }\n\n taskMap[taskID].started = true;\n\n let task: Task = taskMap[taskID].task;\n if (task.dependencies)\n for (let i = 0; i < task.dependencies.length; i++) {\n let successVal = topologicalOrderingHelper(\n task.dependencies[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return false; // Error: an error came from deeper recursive call\n }\n\n taskMap[taskID].finished = true;\n\n sortedTaskList.push(taskID);\n return true;\n}\nexport function getCriticalPaths(leafTasks: Task[]) {\n // Map ids to tasks for faster access.\n // O(n) space, O(n) time to add all from list, O(1) time for each access.\n let taskMap = {};\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id] = { task: leafTasks[i] };\n\n // Sort the tasks so each dependent is listed after its dependencies.\n // O(num vertices + num edges)\n let sortedTaskList: string[] = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let successVal = topologicalOrderingHelper(\n leafTasks[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return [[], []]; // Abort: there was a cycle\n }\n\n // Map tasks to their dependents for faster access.\n // Dependencies are already easy enough to access, but not dependents.\n // O(num vertices + num edges)\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id].dependents = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let task = leafTasks[i];\n if (task.dependencies)\n for (let j = 0; j < task.dependencies.length; j++)\n taskMap[task.dependencies[j].id]?.dependents.push(task.id);\n }\n\n // Compute critical paths, in reverse order to handle dependents before dependencies.\n // O(num vertices + num edges)\n for (let i = sortedTaskList.length - 1; i >= 0; i--)\n computeCriticalPath(sortedTaskList[i], taskMap);\n\n // Now each task has a list of all possible paths and their lengths\n // We want to combine and sort all these entries so we can trace any number\n // of critical paths by following the best available chain\n // O(num tasks)\n let taskChainList = [];\n for (let i = 0; i < sortedTaskList.length; i++) {\n for (let j = 0; j < taskMap[sortedTaskList[i]].paths.length; j++) {\n taskChainList.push(taskMap[sortedTaskList[i]].paths[j]);\n }\n }\n\n // const printedList = taskChainList.map((elem) => {\n // const newElem = { ...elem };\n // newElem.duration = Math.round(elem.duration / 86400000);\n // return newElem;\n // })\n\n // console.debug(printedList);\n\n if (taskChainList.length > 0) {\n\n // Sort by duration (descending)\n // O(n log n)\n taskChainList.sort((a, b) => b.duration - a.duration);\n\n // Select the best next option to build the best path\n let primaryLeaf = taskChainList[0].parent;\n let primaryPath = [];\n\n while (primaryLeaf !== undefined) {\n\n // Add this task to the primary path\n primaryPath.push(taskMap[primaryLeaf].task);\n\n // If this task has no dependents, it is a leaf and the primary path ends here\n if (taskMap[primaryLeaf].paths.length === 0) {\n primaryLeaf = undefined;\n break;\n }\n\n // Check all of this task's paths and select longest duration as next\n let primaryDuration = taskMap[primaryLeaf].paths[0].duration;\n let nextPath = taskMap[primaryLeaf].paths[0];\n for (let i = 1; i < taskMap[primaryLeaf].paths.length; i++) {\n let newDuration = taskMap[primaryLeaf].paths[i].duration;\n if (newDuration > primaryDuration) {\n nextPath = taskMap[primaryLeaf].paths[i]\n primaryDuration = newDuration;\n }\n }\n\n // Disqualify this path from being selected by second best path.\n nextPath.visited = true;\n\n // Follow this path down to the next task\n primaryLeaf = nextPath.task;\n\n }\n\n\n // Select the best next option from the unvisited tasks to build the second best path\n let secondaryLeaf = taskChainList[0].parent;\n\n for (let i = 0; i < taskChainList.length; i++) {\n if (!taskChainList[i].visited) {\n secondaryLeaf = taskChainList[i].parent;\n break;\n }\n }\n\n let secondaryPath = [];\n\n while (secondaryLeaf !== undefined) {\n\n // Add this task to the secondary path\n secondaryPath.push(taskMap[secondaryLeaf].task);\n\n // If this task has no dependents, it is a leaf and the secondary path ends here\n if (taskMap[secondaryLeaf].paths.length === 0) {\n secondaryLeaf = undefined;\n break;\n }\n\n // Check all of this task's paths and select longest duration as next\n let secondaryDuration = taskMap[secondaryLeaf].paths[0].duration;\n let nextPath = taskMap[secondaryLeaf].paths[0];\n\n // If default path has already been visited, discredit it\n if (nextPath.visited) secondaryDuration = 0;\n\n for (let i = 1; i < taskMap[secondaryLeaf].paths.length; i++) {\n let newDuration = taskMap[secondaryLeaf].paths[i].duration;\n // Extra check here to ensure path has not already been used\n if (newDuration > secondaryDuration && !taskMap[secondaryLeaf].paths[i].visited) {\n nextPath = taskMap[secondaryLeaf].paths[i]\n secondaryDuration = newDuration;\n }\n }\n\n // If path we ended up with has already been visited, this task is a leaf node\n if (nextPath.visited) {\n break;\n }\n\n // Disqualify this path from being selected by third best path.\n nextPath.visited = true;\n\n // Follow this path down to the next task\n secondaryLeaf = nextPath.task;\n\n }\n\n return [primaryPath, secondaryPath];\n }\n\n return [[], []];\n}\n\nexport function computeCriticalPath(taskID: string, taskMap: {}) {\n let task: Task = taskMap[taskID].task;\n let dependents = taskMap[taskID].dependents;\n\n taskMap[taskID].start = task.start.getTime();\n taskMap[taskID].end = task.end.getTime();\n taskMap[taskID].paths = []; // Each task will track length of all dep paths\n for (let j = 0; j < dependents.length; j++) {\n\n // Get the duration of the dep task\n let depDuration = taskMap[dependents[j]].task.end.getTime() - taskMap[dependents[j]].task.start.getTime();\n\n // subtracting any overlap in days with its parent\n let overlap = Math.max((taskMap[taskID].end - taskMap[dependents[j]].task.start.getTime()), 0);\n\n // Inherit all paths known by dep task, adding this task's length to the tracked lengths\n let paths = taskMap[dependents[j]].paths;\n for (let k = 0; k < paths.length; k++) {\n\n let totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap + paths[k].duration\n\n if (taskMap[taskID].paths.length < 2) {\n taskMap[taskID].paths.push({\n duration: totalDuration,\n task: dependents[j],\n parent: taskID,\n visited: false\n });\n } else if (totalDuration > taskMap[taskID].paths[0].duration) {\n taskMap[taskID].paths[0].duration = totalDuration;\n taskMap[taskID].paths[0].task = dependents[j];\n taskMap[taskID].paths[0].parent = taskID;\n taskMap[taskID].paths[0].visited = false;\n } else if (totalDuration > taskMap[taskID].paths[1].duration) {\n taskMap[taskID].paths[1].duration = totalDuration;\n taskMap[taskID].paths[1].task = dependents[j];\n taskMap[taskID].paths[1].parent = taskID;\n taskMap[taskID].paths[1].visited = false;\n }\n\n }\n\n // Only add immediate child path if child itself has no children\n if (paths.length === 0) {\n let immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap;\n\n // Create a new path that ends at the immediate dep task\n if (taskMap[taskID].paths.length < 2) {\n taskMap[taskID].paths.push({\n duration: immediateChildDuration,\n task: dependents[j],\n parent: taskID,\n visited: false\n });\n } else if (immediateChildDuration > taskMap[taskID].paths[0].duration) {\n taskMap[taskID].paths[0].duration = immediateChildDuration;\n taskMap[taskID].paths[0].task = dependents[j];\n taskMap[taskID].paths[0].parent = taskID;\n taskMap[taskID].paths[0].visited = false;\n } else if (immediateChildDuration > taskMap[taskID].paths[1].duration) {\n taskMap[taskID].paths[1].duration = immediateChildDuration;\n taskMap[taskID].paths[1].task = dependents[j];\n taskMap[taskID].paths[1].parent = taskID;\n taskMap[taskID].paths[1].visited = false;\n }\n }\n }\n}\n\nexport function uncolorAll(tasks: Task[]) {\n tasks.forEach(task => {\n if (task.styles) delete task.styles.criticalPathColor;\n delete task.criticalPathArrows;\n });\n}\n\nexport function colorPath(path: Task[], color: string, tasks: Task[],criticalPathType: string) {\n // Color boxes\n for (let i = 0; i < path.length; i++) {\n // For this task in the path, find the most immediate ancestor in tasks.\n let longestIDLength = 0;\n let longestTask;\n for (let j = 0; j < tasks.length; j++) {\n if (path[i].id === tasks[j].id) {\n longestTask = tasks[j];\n break;\n }\n if (\n path[i].id.startsWith(tasks[j].id + \".\") &&\n tasks[j].id.length > longestIDLength\n ) {\n longestIDLength = tasks[j].id.length;\n longestTask = tasks[j];\n }\n }\n // If some ancestor is found, color it.\n if (longestTask) {\n let styles = longestTask.styles ?? {};\n styles.criticalPathColor = color;\n longestTask.styles = styles;\n }\n }\n // Color arrows\n for (let i = 0; i + 1 < path.length; i++) {\n // Items in the critical paths came from leafTasks, but we need to change the versions from tasks instead.\n let taskFromTasks;\n for (let j = 0; j < tasks.length; j++)\n if (path[i].id === tasks[j].id) {\n taskFromTasks = tasks[j];\n break;\n }\n if (taskFromTasks) {\n let arrows = taskFromTasks.criticalPathArrows;\n // Create the arrows list if it does not exist.\n if (!arrows) arrows = [];\n // If the arrow is already colored, replace its color in the list.\n let arrow = arrows.find(arrow => arrow.taskId === path[i + 1].id);\n if (arrow) {\n arrow.arrowColor = color;\n arrow.criticalPathType = criticalPathType;\n }\n // Else, add the new colored arrow to the list.\n else arrows.push({ taskId: path[i + 1].id, arrowColor: color, criticalPathType: criticalPathType });\n taskFromTasks.criticalPathArrows = arrows;\n }\n }\n}\nexport const getParentWbs = (wbs: string): string | undefined => {\n const segments = wbs.split('.');\n if (segments.length <= 1) return undefined; // Top-level task has no parent\n return segments.slice(0, -1).join('.'); // Remove last segment\n};\n"],"names":["ViewMode","intlDTCache","getCachedDateTimeFormat","locString","opts","key","JSON","stringify","dtf","Intl","DateTimeFormat","addToDate","date","quantity","scale","newDate","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","startOfDate","scores","shouldReset","_scale","maxScore","indexOf","getFiscalQuarterStartDate","quarterStart","month","offset","qStartMonth","Math","floor","year","ganttDateRange","tasks","viewMode","preStepsCount","newStartDate","start","getTime","newEndDate","end","task","actualStart","actualEnd","Year","Quarter","endQStart","Month","Week","getMonday","Day","QuarterDay","HalfDay","Hour","seedDates","startDate","endDate","currentDate","dates","push","getLocalDayOfWeek","locale","format","bottomValue","weekday","replace","toLocaleUpperCase","day","getDay","diff","setDate","TaskListHeaderDefault","headerHeight","fontFamily","fontSize","rowWidth","scheduleType","allSelected","onSelectAll","React","className","styles","ganttTable","style","ganttTable_Header","height","ganttTable_HeaderItem","minWidth","parseInt","maxWidth","type","checked","onChange","e","target","ganttTable_HeaderSeparator","marginTop","title","Fragment","localeDateStringCache","toLocaleDateStringFactory","dateTimeOptions","toString","lds","toLocaleDateString","TaskListTableDefault","rowHeight","leafTasks","onExpanderClick","selectedTasks","onTaskSelect","taskLabelRenderer","t","name","virtualItems","useMemo","leafTaskIds","Set","map","id","hasSelectedAncestor","taskId","selectedSet","allTasks","find","parentWbs","getParentWbs","has","itemsToRender","_","index","size","lane","measureElement","taskListWrapper","vi","expanderSymbol","hideChildren","isSelected","includes","isAncestorSelected","position","top","left","width","transform","taskListMilestoneRow","taskListLookAheadRow","taskListTableRow","taskListCell","taskListText","display","justifyContent","alignItems","paddingLeft","paddingRight","disabled","taskListNameWrapper","depth","taskListExpander","onClick","taskListExpanderPlaceholder","now","color","optionalId","percentComplete","progress","plannedDuration","remainingDuration","round","actualDuration","endRef","ceil","durationType","Tooltip","rtl","svgContainerHeight","svgContainerWidth","scrollX","scrollY","arrowIndent","taskListWidth","TooltipContent","tooltipRef","useRef","useState","relatedY","setRelatedY","relatedX","setRelatedX","useEffect","current","tooltipHeight","offsetHeight","tooltipWidth","offsetWidth","newRelatedY","newRelatedX","x1","x2","tooltipLeftmostPoint","actualx2","fullChartWidth","actualx1","tooltipLowerPoint","ref","tooltipDetailsContainer","tooltipDetailsContainerHidden","StandardTooltipContent","tooltipDefaultContainer","tooltipDefaultContainerParagraph","VerticalScroll","scroll","ganttHeight","ganttFullHeight","onScroll","scrollRef","scrollTop","marginLeft","marginRight","TaskList","selectedTask","setSelectedTask","taskListRef","horizontalContainerClass","TaskListHeader","TaskListTable","onMultiSelect","containerWidth","innerScrollRef","horizontalContainerRef","setSelectedTasks","pendingTaskSelect","setPendingTaskSelect","prevSelectedTasksRef","expandedTasks","virtualizer","useVirtualizer","count","length","getScrollElement","estimateSize","overscan","selectedTaskObjects","filter","newSelected","forEach","selected","recursiveOpen","descendants","getDescendants","add","d","Array","from","newSelectedArray","children","flatMap","child","c","handleTaskSelect","prev","handleSelectAll","topLevelTasks","headerProps","undefined","selectedTaskId","tableProps","getVirtualItems","overflow","flexShrink","hideScrollbar","overflowX","getTotalSize","parseTimeToMinutes","parts","split","Number","toDateString","y","m","String","padStart","isHoliday","cal","holidays","isOffDay","off_days","getShiftsForDay","shifts","s","getWorkingIntervals","intervals","cursor","setHours","shift","shiftStart","shiftEnd","intervalStart","intervalEnd","snapToWorkingTime","direction","MAX_DAYS","result","attempt","dayStart","currentMins","i","getQuarterNumber","GridBody","svgWidth","columnWidth","todayColor","weekendColor","visibleStartY","visibleEndY","projectCalendar","visibleHeight","items","isDayOff","isTodayColumn","next","step","todayRects","offDayRects","weekStartDay","week_start","x","fill","pEnd","periodMs","ds","de","startFrac","max","endFrac","min","rw","isDayView","tickLines","tickClass","gridTick","gridTickDashed","y1","y2","rowBackgrounds","rowLines","gridRowLine","isMilestone","rowClass","darkerGridRow","gridRowLookAhead","gridRow","Grid","props","TopPartOfCalendar","value","x1Line","y1Line","y2Line","xText","yText","textAnchor","textAnchorClass","textAnchorStart","textAnchorMiddle","textAnchorEnd","calendarTopTick","calendarTopText","Calendar","dateSetup","shortMonth","toLocaleString","getCalendarValuesForYear","topValues","bottomValues","topDefaultHeight","calendarBottomText","topValue","getCalendarValuesForQuarter","quarter_start","rowH","qNum","monthDate","span","j","getCalendarValuesForMonth","prevDate","prevQNum","isNewQuarter","getCalendarValuesForWeek","weeksCount","getCalendarValuesForDay","isWeekStart","calendarTickSolid","calendarTickDashed","getCalendarValuesForPartOfDay","ticks","hour","getCalendarValuesForHour","displayDate","topPosition","extraValues","r","calendarHeader","Arrow","taskFrom","taskTo","taskHeight","arrowColor","dependencyType","drawPathAndTriangle","path","trianglePoints","strokeWidth","stroke","points","indexCompare","taskToEndY","verticalOffset","minX","plannedSegments","p","actualSegments","candidates","maxX","fromPoint","toPoint","arrowPoints","right","convertToBarTasks","barCornerRadius","handleWidth","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","projectProgressColor","projectProgressSelectedColor","projectBackgroundColor","projectBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","barTasks","convertToBarTask","dependencies","dependence","findIndex","barchild","barChildren","barTask","convertToMilestone","convertToBar","progressStartWidth","progressEndWidth","taskXCoordinateRTL","taskXCoordinate","abs","typeInternal","progressWithByParams","progressWidth","progressX","taskYCoordinate","calender","planEnd","segs","iv","actEnd","backgroundColor","backgroundSelectedColor","progressColor","progressSelectedColor","rotatedHeight","xDate","remainderMillis","percentOfInterval","taskX1","taskX2","getProgressPoint","taskY","point","join","startByX","xStep","steps","additionalXValue","newX","startByActualX","endByX","endByActualX","moveByX","newX1","newX2","moveByActualX","dateByX","taskX","taskDate","timeStep","getTimezoneOffset","handleTaskBySVGMouseEvent","svgX","action","initEventX1Delta","handleTaskBySVGMouseEventForMilestone","handleTaskBySVGMouseEventForBar","changedTask","isChanged","newMoveX1","newMoveX2","isKeyboardEvent","event","removeHiddenTasks","groupedTasks","groupedTask","getChildren","taskList","project","taskChildren","concat","sortTasks","taskA","taskB","orderA","displayOrder","MAX_VALUE","orderB","BarDisplay","segments","onMouseDown","getProcessColor","getBarColor","totalWidth","seg","idx","ry","rx","criticalPathColor","rects","remaining","segW","ratio","pw","taskProgressColor","BarDateHandle","barHandle","BarProgressHandle","Bar","isProgressChangeable","isDateChangeable","onEventStart","progressPoint","handleHeight","plannedSegs","plannedLeftHandleX","plannedRightHandleX","actualSegs","actualLeftHandleX","actualRightHandleX","barWrapper","tabIndex","startProgressWidth","endProgressWidth","BarSmall","Milestone","milestoneWrapper","milestoneBackground","onDoubleClick","Project","barColor","processColor","projectWith","projectLeftTriangle","projectRightTriangle","projectWrapper","projectBackground","projectTop","TaskItem","isDelete","taskItem","setTaskItem","onKeyDown","stopPropagation","onMouseEnter","onMouseLeave","TaskGanttContent","ganttEvent","svg","setGanttEvent","setFailedTask","onDateChange","onProgressChange","onDelete","onCalendarError","createSVGPoint","setXStep","setInitEventX1Delta","isMoving","setIsMoving","dateDelta","newXStep","handleMouseMove","preventDefault","clientX","matrixTransform","getScreenCTM","inverse","finalTask","snapped","delta","handleMouseUp","operationSuccess","originalSelectedTask","newChangedTask","isNotLikeOriginal","snappedEnd","snappedStart","removeEventListener","snapEnd","newIntervals","addEventListener","handleBarEventStart","error","console","getArrows","isCritical","criticalPathType","_task","criticalTask","criticalPathArrows","arrow","yFrom","yTo","minY","maxY","Boolean","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","buffer","scrollLeft","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","Gantt","listCellWidth","barFill","viewDate","onSelect","delayToRender","shouldNotShowLoadingOverlay","effectiveCalendar","wrapperRef","isDraggingTable","dragStartX","dragStartWidth","dragMaxWidth","Infinity","tableContainerWidth","setTableContainerWidth","tableInnerScrollRef","tableHScrollRef","tableScrollableWidth","setTableScrollableWidth","startDateRange","endDateRange","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","scrollWidth","handleTableResizeMouseDown","onMouseMove","newWidth","onMouseUp","document","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","debounceRef","failedTask","effectiveColumnWidth","setScrollY","setScrollX","ignoreScrollEvent","setIgnoreScrollEvent","lastTouchX","setLastTouchX","lastTouchY","setLastTouchY","isProcessing","setIsProcessing","clearTimeout","setTimeout","filteredTasks","sort","newDates","reverse","getCriticalPaths","primaryPath","secondaryPath","uncolorAll","colorPath","valueOf","prevStateTask","newTaskList","handleWheel","shiftKey","deltaX","scrollMove","deltaY","newScrollX","newScrollY","handleLogTouch","changedTouches","pageX","pageY","handleTouch","passive","handleScrollY","currentTarget","handleScrollX","handleKeyDown","isX","handleSelectedTask","newSelectedTask","oldSelectedTask","handleExpanderClick","wrapper","zIndex","alignSelf","userSelect","letterSpacing","bottom","gap","pointerEvents","borderRadius","fontWeight","spinner","hScrollStyles","flex","topologicalOrderingHelper","taskID","taskMap","sortedTaskList","finished","started","log","successVal","dependents","computeCriticalPath","taskChainList","paths","a","b","duration","primaryLeaf","parent","primaryDuration","nextPath","newDuration","visited","secondaryLeaf","secondaryDuration","depDuration","overlap","k","totalDuration","immediateChildDuration","longestIDLength","longestTask","startsWith","taskFromTasks","arrows","wbs","slice"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/types/public-types.ts","../src/helpers/date-helper.ts","../src/components/task-list/task-list-header.tsx","../src/components/task-list/task-list-table.tsx","../src/components/other/tooltip.tsx","../src/components/other/vertical-scroll.tsx","../src/components/task-list/task-list.tsx","../src/helpers/calendar-helper.ts","../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 interface CalendarDefinition {\n name: string;\n day_start: string;\n day_end: string;\n week_start: number;\n quarter_start: number;\n shifts: [string, string][];\n off_days: number[];\n holidays: string[];\n}\n\nexport enum ViewMode {\n Hour = \"Hour\",\n QuarterDay = \"Quarter Day\",\n HalfDay = \"Half Day\",\n Day = \"Day\",\n /** ISO-8601 week */\n Week = \"Week\",\n Month = \"Month\",\n Quarter = \"Quarter\",\n Year = \"Year\",\n}\nexport type TaskType = \"task\" | \"milestone\" | \"project\";\nexport type Dependency = \"SS\" | \"SF\" | \"FS\" | \"FF\";\n\nexport declare type DependencyType = {\n id: string;\n type: Dependency;\n};\nexport interface Task {\n id: string;\n optionalId?: string | null;\n type: TaskType;\n name: string;\n start: Date;\n end: Date;\n /**\n * From 0 to 100\n */\n progress: number;\n actualStart: Date;\n actualEnd: Date;\n criticalPathArrows?: Array<{ taskId: string; arrowColor: string ; criticalPathType: string }>;\n styles?: {\n taskProgressColor?: string;\n backgroundColor?: string;\n backgroundSelectedColor?: string;\n progressColor?: string;\n progressSelectedColor?: string;\n criticalPathColor?: string;\n };\n percentComplete?: number | null;\n plannedDuration?: number | null;\n remainingDuration?: number | null;\n actualDuration?: number | null;\n durationType?: string | null;\n depth: number;\n isDisabled?: boolean;\n project?: string;\n dependencies?: DependencyType[];\n hideChildren?: boolean;\n displayOrder?: number;\n childrenCount?: number;\n calender?: CalendarDefinition;\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 onCalendarError?: (task: Task, reason: string) => void;\n}\n\nexport interface DisplayOption {\n viewMode?: ViewMode;\n viewDate?: Date;\n preStepsCount?: number;\n /**\n * Specifies the month name language. Able formats: ISO 639-2, Java Locale\n */\n locale?: string;\n rtl?: boolean;\n}\n\nexport interface StylingOption {\n headerHeight?: number;\n columnWidth?: number;\n listCellWidth?: string;\n rowHeight?: number;\n ganttHeight?: number;\n barCornerRadius?: number;\n handleWidth?: number;\n fontFamily?: string;\n fontSize?: string;\n /**\n * How many of row width can be taken by task.\n * From 0 to 100\n */\n barFill?: number;\n barProgressColor?: string;\n barProgressSelectedColor?: string;\n barBackgroundColor?: string;\n barBackgroundSelectedColor?: string;\n projectProgressColor?: string;\n projectProgressSelectedColor?: string;\n projectBackgroundColor?: string;\n projectBackgroundSelectedColor?: string;\n milestoneBackgroundColor?: string;\n milestoneBackgroundSelectedColor?: string;\n arrowColor?: string;\n arrowIndent?: number;\n todayColor?: string;\n weekendColor?: string;\n TooltipContent?: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n }>;\n TaskListHeader?: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n }>;\n TaskListTable?: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n selectedTaskId: string;\n /**\n * Sets selected task by id\n */\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n }>;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n taskProgressColor?: string;\n delayToRender?: number;\n shouldNotShowLoadingOverlay?: boolean;\n}\n\nexport interface GanttProps extends EventOption, DisplayOption, StylingOption {\n tasks: Task[];\n leafTasks?: Task[];\n scheduleType: string;\n startDate?: Date;\n endDate?: Date;\n projectCalendar?: CalendarDefinition;\n sliderTime?: number;\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\n/**\n * Returns the start date (midnight) of the fiscal quarter containing `date`.\n * @param quarterStart 0-indexed month that begins Q1 (0=Jan, 4=May, etc.)\n */\nconst getFiscalQuarterStartDate = (date: Date, quarterStart: number): Date => {\n const month = date.getMonth();\n const offset = (month - quarterStart + 12) % 12;\n const qStartMonth = (quarterStart + Math.floor(offset / 3) * 3) % 12;\n let year = date.getFullYear();\n if (qStartMonth > month) year -= 1; // quarter started in the previous calendar year\n return new Date(year, qStartMonth, 1);\n};\n\nexport const ganttDateRange = (\n tasks: Task[],\n viewMode: ViewMode,\n preStepsCount: number,\n quarterStart: number = 0\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 = getFiscalQuarterStartDate(newStartDate, quarterStart);\n newEndDate = addToDate(newEndDate, 1, \"year\");\n const endQStart = getFiscalQuarterStartDate(newEndDate, quarterStart);\n newEndDate =\n endQStart < newEndDate ? addToDate(endQStart, 3, \"month\") : endQStart;\n break;\n }\n case ViewMode.Month:\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"month\");\n newStartDate = startOfDate(newStartDate, \"month\");\n newEndDate = addToDate(newEndDate, 1, \"year\");\n newEndDate = startOfDate(newEndDate, \"year\");\n break;\n case ViewMode.Week:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(\n getMonday(newStartDate),\n -7 * preStepsCount,\n \"day\"\n );\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1.5, \"month\");\n break;\n case ViewMode.Day:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 19, \"day\");\n break;\n case ViewMode.QuarterDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 66, \"hour\"); // 24(1 day)*3 - 6\n break;\n case ViewMode.HalfDay:\n newStartDate = startOfDate(newStartDate, \"day\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 108, \"hour\"); // 24(1 day)*5 - 12\n break;\n case ViewMode.Hour:\n newStartDate = startOfDate(newStartDate, \"hour\");\n newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"hour\");\n newEndDate = startOfDate(newEndDate, \"day\");\n newEndDate = addToDate(newEndDate, 1, \"day\");\n break;\n }\n return [newStartDate, newEndDate];\n};\n\nexport const seedDates = (\n startDate: Date,\n endDate: Date,\n viewMode: ViewMode\n) => {\n let currentDate: Date = new Date(startDate);\n const dates: Date[] = [currentDate];\n while (currentDate < endDate) {\n switch (viewMode) {\n case ViewMode.Year:\n currentDate = addToDate(currentDate, 1, \"year\");\n break;\n case ViewMode.Quarter:\n currentDate = addToDate(currentDate, 3, \"month\");\n break;\n case ViewMode.Month:\n currentDate = addToDate(currentDate, 1, \"month\");\n break;\n case ViewMode.Week:\n currentDate = addToDate(currentDate, 7, \"day\");\n break;\n case ViewMode.Day:\n currentDate = addToDate(currentDate, 1, \"day\");\n break;\n case ViewMode.HalfDay:\n currentDate = addToDate(currentDate, 12, \"hour\");\n break;\n case ViewMode.QuarterDay:\n currentDate = addToDate(currentDate, 6, \"hour\");\n break;\n case ViewMode.Hour:\n currentDate = addToDate(currentDate, 1, \"hour\");\n break;\n }\n dates.push(currentDate);\n }\n return dates;\n};\n\nexport const getLocaleMonth = (date: Date, locale: string) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n month: \"long\",\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\nexport const getLocalDayOfWeek = (\n date: Date,\n locale: string,\n format?: \"long\" | \"short\" | \"narrow\" | undefined\n) => {\n let bottomValue = getCachedDateTimeFormat(locale, {\n weekday: format,\n }).format(date);\n bottomValue = bottomValue.replace(\n bottomValue[0],\n bottomValue[0].toLocaleUpperCase()\n );\n return bottomValue;\n};\n\n/**\n * Returns monday of current week\n * @param date date for modify\n */\nconst getMonday = (date: Date) => {\n const day = date.getDay();\n const diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\n\nexport const getWeekNumberISO8601 = (date: Date) => {\n const tmpDate = new Date(date.valueOf());\n const dayNumber = (tmpDate.getDay() + 6) % 7;\n tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);\n const firstThursday = tmpDate.valueOf();\n tmpDate.setMonth(0, 1);\n if (tmpDate.getDay() !== 4) {\n tmpDate.setMonth(0, 1 + ((4 - tmpDate.getDay() + 7) % 7));\n }\n const weekNumber = (\n 1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 604800000)\n ).toString();\n\n if (weekNumber.length === 1) {\n return `0${weekNumber}`;\n } else {\n return weekNumber;\n }\n};\n\nexport const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n};\n","import React from \"react\";\nimport styles from \"./task-list-header.module.css\";\n\nexport const TaskListHeaderDefault: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n}> = ({ headerHeight, fontFamily, fontSize, rowWidth, scheduleType, allSelected, onSelectAll }) => {\n return (\n <div\n className={styles.ganttTable}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n <div\n className={styles.ganttTable_Header}\n style={{\n height: headerHeight - 2,\n }}\n >\n {onSelectAll && (\n <div>\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <input \n type=\"checkbox\" \n checked={allSelected}\n onChange={(e) => onSelectAll(e.target.checked)} \n />\n </div>\n </div>\n )}\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n ID\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n WBS Code / Activity ID\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n >\n Task\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.2,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Planned Start\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Planned End\n </div>\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Start\"\n >\n Actual Start\n </div>\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n )}\n {scheduleType === \"lookAhead\" && (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned End\"\n >\n Actual End\n </div>\n )}\n {scheduleType === \"main\" && (\n <React.Fragment>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"% Complete\"\n >\n % Complete\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Planned Duration\"\n >\n Planned Duration\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.7,\n maxWidth: parseInt(rowWidth) * 0.7,\n }}\n title=\"Remaining Duration\"\n >\n Remaining Duration\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n title=\"Actual Duration\"\n >\n Actual Duration\n </div>\n <div\n className={styles.ganttTable_HeaderSeparator}\n style={{\n height: headerHeight * 0.5,\n marginTop: headerHeight * 0.25,\n }}\n />\n <div\n className={styles.ganttTable_HeaderItem}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title=\"Duration Type\"\n >\n Duration Type\n </div>\n </React.Fragment>\n )}\n </div>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport styles from \"./task-list-table.module.css\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\n\nconst localeDateStringCache = {};\nconst toLocaleDateStringFactory =\n (locale: string) =>\n (date: Date, dateTimeOptions: Intl.DateTimeFormatOptions): string => {\n if (!date || date.getTime() === 0) return \"\"; // Handle invalid dates\n const key = date.toString();\n let lds = localeDateStringCache[key];\n if (!lds) {\n lds = date.toLocaleDateString(locale, dateTimeOptions);\n localeDateStringCache[key] = lds;\n }\n return lds;\n };\nconst dateTimeOptions: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n};\n\nexport const TaskListTableDefault: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n virtualItems?: VirtualItem[];\n}> = ({\n rowHeight,\n rowWidth,\n tasks,\n scheduleType,\n leafTasks,\n fontFamily,\n fontSize,\n locale,\n onExpanderClick,\n selectedTasks = [],\n onTaskSelect,\n taskLabelRenderer = t => \" \" + t.name,\n virtualItems,\n}) => {\n const toLocaleDateString = useMemo(\n () => toLocaleDateStringFactory(locale),\n [locale]\n );\n const leafTaskIds = useMemo(\n () => new Set(leafTasks.map(t => t.id)),\n [leafTasks]\n );\n\n // Checks if the task has a selected ancestor by traversing the WBS hierarchy\n const hasSelectedAncestor = (taskId: string, selectedSet: Set<string>, allTasks: Task[]): boolean => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return false;\n const parentWbs = getParentWbs(task.id);\n if (!parentWbs) return false;\n if (selectedSet.has(parentWbs)) return true;\n return hasSelectedAncestor(parentWbs, selectedSet, allTasks);\n };\n\n const itemsToRender = virtualItems || tasks.map((_, index) => ({ index, start: index * rowHeight, size: rowHeight, key: index, end: (index + 1) * rowHeight, lane: 0, measureElement: () => {} }));\n\n return (\n <div\n className={styles.taskListWrapper}\n style={{\n fontFamily: fontFamily,\n fontSize: fontSize,\n }}\n >\n {itemsToRender.map(vi => {\n const t = tasks[vi.index];\n let expanderSymbol = \"\";\n if (!(leafTaskIds.has(t.id) || t.type=== \"milestone\")) {\n if (t.hideChildren === false) {\n expanderSymbol = \"▼\";\n } else if (t.hideChildren === true) {\n expanderSymbol = \"►\";\n }\n }\n\n const isSelected = selectedTasks.includes(t.id);\n const isAncestorSelected = hasSelectedAncestor(t.id, new Set(selectedTasks), tasks);\n\n return (\n <div\n key={`${vi.key}`}\n data-index={vi.index}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${vi.size}px`,\n transform: `translateY(${vi.start}px)`,\n }}\n >\n <div\n className={\n t.type === \"milestone\"\n ? styles.taskListMilestoneRow\n : scheduleType === \"lookAhead\"\n ? styles.taskListLookAheadRow\n : styles.taskListTableRow\n }\n style={{ height: rowHeight }}\n key={`${t.id}row`}\n >\n {onTaskSelect && (\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.3,\n maxWidth: parseInt(rowWidth) * 0.3,\n }}\n >\n <div className={styles.taskListText} style={{ \n display: \"flex\", \n justifyContent: \"center\", \n alignItems: \"center\",\n height: \"100%\",\n paddingLeft: \"0\",\n paddingRight: \"0\"\n }}>\n <input \n type=\"checkbox\" \n checked={isSelected}\n disabled={isAncestorSelected}\n onChange={(e) => onTaskSelect(t.id, e.target.checked)}\n />\n </div>\n </div>\n )}\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.id}\n >\n <div\n className={styles.taskListNameWrapper}\n style={{ paddingLeft: `${t.depth * 4}px` }}\n >\n {!(leafTaskIds.has(t.id) || t.type=== \"milestone\") ? (\n <div\n className={styles.taskListExpander}\n onClick={() => onExpanderClick(t)}\n >\n \n {expanderSymbol}\n </div>\n ) : (\n <div className={styles.taskListExpanderPlaceholder}></div>\n )}\n <div className={styles.taskListText}>\n {t.id}{\" \"}\n {t.actualEnd.getTime() > 0 &&\n t.actualEnd.getTime() < Date.now() ? (\n <span\n title=\"Task Complete\"\n style={{ color: \"limegreen\", fontSize: \"16px\" }}\n >\n ✔\n </span>\n ) : (\n \"\"\n )}\n </div>\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n title={t.optionalId?t.optionalId:\"\"}\n >\n {t.optionalId}\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 1.8,\n maxWidth: parseInt(rowWidth) * 1.8,\n }}\n title={t.name}\n >\n <div className={styles.taskListText}>{taskLabelRenderer(t)}</div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &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 {scheduleType === \"main\" && (() => {\n const percentComplete = t.percentComplete != null ? t.percentComplete : (t.progress ?? 0);\n const plannedDuration = t.plannedDuration != null ? t.plannedDuration : null;\n const remainingDuration = plannedDuration != null\n ? Math.round(plannedDuration - (plannedDuration * (percentComplete / 100)))\n : null;\n const actualDuration = (() => {\n if (!t.actualStart || t.actualStart.getTime() === 0) return null;\n const endRef = (t.actualEnd && t.actualEnd.getTime() > 0) ? t.actualEnd : new Date();\n return Math.ceil((endRef.getTime() - t.actualStart.getTime()) / (1000 * 60 * 60 * 24));\n })();\n return (\n <React.Fragment>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{percentComplete != null ? `${percentComplete}%` : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{plannedDuration != null ? plannedDuration : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.7,\n maxWidth: parseInt(rowWidth) * 0.7,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{remainingDuration != null ? remainingDuration : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.6,\n maxWidth: parseInt(rowWidth) * 0.6,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{actualDuration != null ? actualDuration : \"\"}\n </div>\n </div>\n <div\n className={styles.taskListCell}\n style={{\n minWidth: parseInt(rowWidth) * 0.8,\n maxWidth: parseInt(rowWidth) * 0.8,\n }}\n >\n <div className={styles.taskListText}>\n &nbsp;{t.durationType ?? \"Activity Calendar\"}\n </div>\n </div>\n </React.Fragment>\n );\n })()}\n </div>\n </div>\n );\n })}\n </div>\n );\n};","import React, { useRef, useEffect, useState } from \"react\";\nimport { Task } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport styles from \"./tooltip.module.css\";\n\nexport type TooltipProps = {\n task: BarTask;\n type: string;\n arrowIndent: number;\n rtl: boolean;\n svgContainerHeight: number;\n svgContainerWidth: number;\n svgWidth: number;\n headerHeight: number;\n taskListWidth: number;\n scrollX: number;\n scrollY: number;\n rowHeight: number;\n fontSize: string;\n fontFamily: string;\n TooltipContent: React.FC<{\n task: Task;\n fontSize: string;\n fontFamily: string;\n type: string;\n }>;\n isDragging?: boolean;\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 isDragging,\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\n // During drag: pin to top-right corner of chart area so it never blocks the bar\n if (isDragging) {\n newRelatedX = taskListWidth + svgContainerWidth - tooltipWidth - 10;\n newRelatedY = headerHeight + 5;\n setRelatedY(newRelatedY);\n setRelatedX(newRelatedX);\n return;\n }\n\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 isDragging,\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\n // Compute duration dynamically from the current dates (updated in real-time during drag)\n const computedPlannedDuration =\n task.start && task.end && task.end.getTime() - task.start.getTime() > 0\n ? Math.max(1, Math.round((task.end.getTime() - task.start.getTime()) / (1000 * 60 * 60 * 24)))\n : task.plannedDuration ?? 0;\n\n const computedActualDuration =\n task.actualStart && task.actualEnd && task.actualEnd.getTime() - task.actualStart.getTime() > 0\n ? Math.max(1, Math.round((task.actualEnd.getTime() - task.actualStart.getTime()) / (1000 * 60 * 60 * 24)))\n : task.actualDuration ?? 0;\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: ${computedPlannedDuration} 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: ${computedActualDuration} day(s)`}</p>\n )}\n\n <p className={styles.tooltipDefaultContainerParagraph}>\n {!!task.progress && `Progress: ${task.progress} %`}\n </p>\n </div>\n );\n};\n","import React, { SyntheticEvent, useRef, useEffect } from \"react\";\nimport styles from \"./vertical-scroll.module.css\";\n\nexport const VerticalScroll: React.FC<{\n scroll: number;\n ganttHeight: number;\n ganttFullHeight: number;\n headerHeight: number;\n rtl: boolean;\n onScroll: (event: SyntheticEvent<HTMLDivElement>) => void;\n}> = ({\n scroll,\n ganttHeight,\n ganttFullHeight,\n headerHeight,\n rtl,\n onScroll,\n}) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scroll;\n }\n }, [scroll]);\n\n return (\n <div\n style={{\n height: ganttHeight,\n marginTop: headerHeight,\n marginLeft: rtl ? \"\" : \"-1rem\",\n marginRight: \"1rem\",\n }}\n className={styles.scroll}\n onScroll={onScroll}\n ref={scrollRef}\n >\n <div style={{ height: ganttFullHeight, width: 1 }} />\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useVirtualizer, VirtualItem } from \"@tanstack/react-virtual\";\nimport { EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Task } from \"../../types/public-types\";\nimport { getParentWbs } from \"../gantt/gantt\";\nimport styles from \"./task-list.module.css\";\n\nexport type TaskListProps = {\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n rowHeight: number;\n ganttHeight: number;\n scrollY: number;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n taskListRef: React.RefObject<HTMLDivElement>;\n horizontalContainerClass?: string;\n selectedTask: BarTask | undefined;\n setSelectedTask: (task: string) => void;\n onExpanderClick: (task: Task) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n TaskListHeader: React.FC<{\n headerHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n scheduleType: string;\n allSelected?: boolean;\n onSelectAll?: (selected: boolean) => void;\n }>;\n TaskListTable: React.FC<{\n rowHeight: number;\n rowWidth: string;\n fontFamily: string;\n fontSize: string;\n locale: string;\n tasks: Task[];\n scheduleType: string;\n leafTasks: Task[];\n selectedTaskId: string;\n setSelectedTask: (taskId: string) => void;\n onExpanderClick: (task: Task) => void;\n selectedTasks?: string[];\n onTaskSelect?: (taskId: string, selected: boolean) => void;\n taskLabelRenderer?: (Task: Task) => React.ReactNode;\n virtualItems?: VirtualItem[];\n }>;\n containerWidth?: number;\n innerScrollRef?: React.RefObject<HTMLDivElement>;\n} & EventOption;\n\nexport const TaskList: React.FC<TaskListProps> = ({\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n rowHeight,\n scrollY,\n tasks,\n scheduleType,\n leafTasks,\n selectedTask,\n setSelectedTask,\n onExpanderClick,\n locale,\n ganttHeight,\n taskListRef,\n horizontalContainerClass,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n containerWidth,\n innerScrollRef,\n}) => {\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const [selectedTasks, setSelectedTasks] = useState<string[]>([]);\n const [pendingTaskSelect, setPendingTaskSelect] = useState<{ taskId: string; selected: boolean }[]>([]);\n const prevSelectedTasksRef = useRef<string[]>([]);\n const expandedTasks = useRef<string[]>([]);\n\n const virtualizer = useVirtualizer({\n count: tasks.length,\n getScrollElement: () => horizontalContainerRef.current,\n estimateSize: () => rowHeight,\n overscan: 10\n });\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (\n onMultiSelect &&\n JSON.stringify(prevSelectedTasksRef.current) !==\n JSON.stringify(selectedTasks)\n ) {\n const selectedTaskObjects = tasks.filter(task =>\n selectedTasks.includes(task.id)\n );\n prevSelectedTasksRef.current = [...selectedTasks];\n onMultiSelect(selectedTaskObjects);\n }\n }, [selectedTasks, tasks, onMultiSelect]);\n\n\n\n // process pending task selections\n useEffect(() => {\n if (pendingTaskSelect.length === 0) return;\n\n const newSelected = new Set(selectedTasks);\n pendingTaskSelect.forEach(({ taskId, selected }) => {\n if (selected) {\n // Expand the task and its children first\n recursiveOpen(taskId, tasks);\n // Collect descendants after expansion\n const descendants = getDescendants(taskId, tasks);\n newSelected.add(taskId);\n descendants.forEach(d => newSelected.add(d));\n } else {\n const descendants = getDescendants(taskId, tasks);\n newSelected.delete(taskId);\n descendants.forEach(d => newSelected.delete(d));\n }\n });\n\n setSelectedTasks(Array.from(newSelected));\n setPendingTaskSelect([]);\n }, [pendingTaskSelect]);\n\n // Handle tasks prop changes to update descendants of selected tasks\n useEffect(() => {\n expandedTasks.current = expandedTasks.current.filter(id => {\n const t = tasks.find(task => task.id === id);\n return t && !t.hideChildren;\n });\n if (selectedTasks.length === 0) return;\n\n const newSelected = new Set<string>();\n selectedTasks.forEach(taskId => {\n // Only include tasks that still exist\n if (tasks.find(t => t.id === taskId)) {\n recursiveOpen(taskId, tasks); // Ensure task is expanded\n newSelected.add(taskId);\n const descendants = getDescendants(taskId, tasks);\n descendants.forEach(d => newSelected.add(d));\n }\n });\n\n const newSelectedArray = Array.from(newSelected);\n if (JSON.stringify(newSelectedArray) !== JSON.stringify(selectedTasks)) {\n setSelectedTasks(newSelectedArray);\n }\n }, [tasks.length]);\n\n // Finds all descendant task IDs recursively using WBS hierarchy\n const getDescendants = (taskId: string, allTasks: Task[]): string[] => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return [];\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n return children.flatMap(child => [child.id, ...getDescendants(child.id, allTasks)]);\n };\n\n const recursiveOpen = (taskId: string, allTasks: Task[]) => {\n const task = allTasks.find(t => t.id === taskId);\n if (!task) return;\n if (!expandedTasks.current.includes(taskId) && task.hideChildren) {\n onExpanderClick(task);\n expandedTasks.current = [...expandedTasks.current, taskId];\n }\n const children = allTasks.filter(t => getParentWbs(t.id) === taskId);\n children.forEach(c => recursiveOpen(c.id, allTasks));\n };\n\n const handleTaskSelect = (taskId: string, selected: boolean) => {\n setPendingTaskSelect(prev => [...prev, { taskId, selected }]);\n };\n\n const handleSelectAll = (selected: boolean) => {\n if (selected) {\n const topLevelTasks = tasks.filter(task => !getParentWbs(task.id));\n setPendingTaskSelect(topLevelTasks.map(task => ({ taskId: task.id, selected: true })));\n } else {\n setSelectedTasks([]);\n setPendingTaskSelect([]);\n }\n };\n\n const headerProps = {\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n scheduleType,\n allSelected: tasks.length > 0 && selectedTasks.length === tasks.length,\n onSelectAll: onMultiSelect ? handleSelectAll : undefined,\n };\n const selectedTaskId = selectedTask ? selectedTask.id : \"\";\n\n const tableProps = {\n rowHeight,\n rowWidth,\n fontFamily,\n fontSize,\n tasks,\n leafTasks,\n scheduleType,\n locale,\n selectedTaskId: selectedTaskId,\n setSelectedTask,\n onExpanderClick,\n selectedTasks: onMultiSelect ? selectedTasks : undefined,\n onTaskSelect: onMultiSelect ? handleTaskSelect : undefined,\n taskLabelRenderer,\n virtualItems: virtualizer.getVirtualItems(),\n };\n\n return (\n <div\n ref={taskListRef}\n style={containerWidth != null ? { width: containerWidth, overflow: \"hidden\", flexShrink: 0 } : {}}\n >\n <div\n ref={innerScrollRef}\n className={styles.hideScrollbar}\n style={{ overflowX: \"auto\" }}\n >\n <TaskListHeader {...headerProps} />\n <div\n ref={horizontalContainerRef}\n className={horizontalContainerClass}\n style={ganttHeight ? { height: ganttHeight } : {}}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n <TaskListTable {...tableProps} />\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { CalendarDefinition } from \"../types/public-types\";\n\n/** Parse \"HH:MM\" or \"HH:MM:SS\" into minutes since midnight. */\nexport function parseTimeToMinutes(t: string): number {\n const parts = t.split(\":\").map(Number);\n return parts[0] * 60 + parts[1] + (parts[2] ? parts[2] / 60 : 0);\n}\n\n/** Format a \"YYYY-MM-DD\" string from a Date (local). */\nfunction toDateString(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, \"0\");\n const d = String(date.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\n/** True if the date falls on a calendar holiday. */\nexport function isHoliday(date: Date, cal: CalendarDefinition): boolean {\n return cal.holidays.includes(toDateString(date));\n}\n\n/** True if the date's weekday is in off_days or is a holiday. */\nexport function isOffDay(date: Date, cal: CalendarDefinition): boolean {\n return cal.off_days.includes(date.getDay()) || isHoliday(date, cal);\n}\n\n/** True if the date is a regular working day (not off_day, not holiday). */\nexport function isWorkingDay(date: Date, cal: CalendarDefinition): boolean {\n return !isOffDay(date, cal);\n}\n\n/**\n * Returns the shift windows (in minutes since midnight) for a given date.\n * Returns [] for off days / holidays.\n */\nexport function getShiftsForDay(\n date: Date,\n cal: CalendarDefinition\n): Array<{ start: number; end: number }> {\n if (isOffDay(date, cal)) return [];\n return cal.shifts.map(([s, e]) => ({\n start: parseTimeToMinutes(s),\n end: parseTimeToMinutes(e),\n }));\n}\n\n/**\n * Returns all working time intervals between start and end, respecting:\n * - off days and holidays (entire day skipped)\n * - shift windows (multiple shifts per day are supported)\n * - partial first/last days clipped to the actual start/end time\n */\nexport function getWorkingIntervals(\n start: Date,\n end: Date,\n cal: CalendarDefinition\n): Array<{ start: Date; end: Date }> {\n if (start >= end) return [];\n const intervals: Array<{ start: Date; end: Date }> = [];\n\n // Iterate day by day\n const cursor = new Date(start);\n cursor.setHours(0, 0, 0, 0);\n\n while (cursor <= end) {\n const shifts = getShiftsForDay(cursor, cal);\n\n for (const shift of shifts) {\n // Build shift start/end as Date objects for this day\n const shiftStart = new Date(cursor);\n shiftStart.setHours(\n Math.floor(shift.start / 60),\n Math.floor(shift.start % 60),\n Math.round((shift.start % 1) * 60),\n 0\n );\n const shiftEnd = new Date(cursor);\n shiftEnd.setHours(\n Math.floor(shift.end / 60),\n Math.floor(shift.end % 60),\n Math.round((shift.end % 1) * 60),\n 0\n );\n\n // Clip to [start, end]\n const intervalStart = shiftStart < start ? start : shiftStart;\n const intervalEnd = shiftEnd > end ? end : shiftEnd;\n\n if (intervalStart < intervalEnd) {\n intervals.push({ start: intervalStart, end: intervalEnd });\n }\n }\n\n // Advance to the next day\n cursor.setDate(cursor.getDate() + 1);\n }\n\n return intervals;\n}\n\n/**\n * Snaps a date to the nearest valid working moment.\n * direction \"forward\" → move forward until inside a shift\n * direction \"backward\" → move backward until inside a shift\n * Searches up to 60 days to avoid infinite loops.\n */\nexport function snapToWorkingTime(\n date: Date,\n cal: CalendarDefinition,\n direction: \"forward\" | \"backward\"\n): Date {\n const MAX_DAYS = 60;\n const result = new Date(date);\n\n for (let attempt = 0; attempt < MAX_DAYS * 24 * 60; attempt++) {\n const dayStart = new Date(result);\n dayStart.setHours(0, 0, 0, 0);\n const shifts = getShiftsForDay(dayStart, cal);\n\n if (shifts.length > 0) {\n if (direction === \"forward\") {\n // Find first shift window that contains or is after result\n const currentMins =\n result.getHours() * 60 +\n result.getMinutes() +\n result.getSeconds() / 60;\n for (const shift of shifts) {\n if (currentMins <= shift.end) {\n // Snap to start of shift if before it\n if (currentMins < shift.start) {\n result.setHours(\n Math.floor(shift.start / 60),\n Math.round(shift.start % 60),\n 0,\n 0\n );\n }\n return result;\n }\n }\n // All shifts passed — move to next day's first shift\n result.setDate(result.getDate() + 1);\n result.setHours(0, 0, 0, 0);\n } else {\n // direction === \"backward\"\n const currentMins =\n result.getHours() * 60 +\n result.getMinutes() +\n result.getSeconds() / 60;\n // Find last shift window that contains or is before result\n for (let i = shifts.length - 1; i >= 0; i--) {\n if (currentMins >= shifts[i].start) {\n if (currentMins > shifts[i].end) {\n result.setHours(\n Math.floor(shifts[i].end / 60),\n Math.round(shifts[i].end % 60),\n 0,\n 0\n );\n }\n return result;\n }\n }\n // All shifts ahead — move to previous day's last shift\n result.setDate(result.getDate() - 1);\n result.setHours(23, 59, 59, 0);\n }\n } else {\n // Off day — move to boundary\n if (direction === \"forward\") {\n result.setDate(result.getDate() + 1);\n result.setHours(0, 0, 0, 0);\n } else {\n result.setDate(result.getDate() - 1);\n result.setHours(23, 59, 59, 0);\n }\n }\n }\n\n // Fallback: return original if no valid time found\n return date;\n}\n\n/**\n * Returns the most recent week-start date on or before the given date,\n * where weekStartDay is a JS day index (0=Sun, 1=Mon, ..., 6=Sat).\n */\nexport function getWeekStartDate(date: Date, weekStartDay: number): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n const dayOfWeek = d.getDay(); // 0–6\n const diff = (dayOfWeek - weekStartDay + 7) % 7;\n d.setDate(d.getDate() - diff);\n return d;\n}\n\n/**\n * Returns the quarter number (1–4) for a date, given a fiscal quarterStart month (0–11, 0=Jan).\n * e.g. quarterStart=4 means Q1 starts in May.\n */\nexport function getQuarterNumber(\n date: Date,\n quarterStart: number\n): number {\n const month = date.getMonth(); // 0–11\n // Offset month relative to quarter start\n const offset = ((month - quarterStart + 12) % 12);\n return Math.floor(offset / 3) + 1;\n}\n\n/**\n * Returns the quarter start month (0-11) for a given date and fiscal quarterStart (0-indexed).\n * Useful for labeling (e.g. Q1 starting in May → returns 4).\n */\nexport function getQuarterStartMonth(\n date: Date,\n quarterStart: number\n): number {\n const q = getQuarterNumber(date, quarterStart);\n // q=1 → month = quarterStart, q=2 → +3, q=3 → +6, q=4 → +9\n return (quarterStart + (q - 1) * 3) % 12; // 0-indexed\n}\n","import React from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport { CalendarDefinition, Task, ViewMode } from \"../../types/public-types\";\nimport { addToDate } from \"../../helpers/date-helper\";\nimport { isOffDay } from \"../../helpers/calendar-helper\";\nimport styles from \"./grid.module.css\";\n\nexport type GridBodyProps = {\n tasks: Task[];\n scheduleType: string;\n dates: Date[];\n svgWidth: number;\n rowHeight: number;\n columnWidth: number;\n todayColor: string;\n weekendColor: string;\n rtl: boolean;\n virtualItems?: VirtualItem[];\n visibleStartY: number;\n visibleEndY: number;\n projectCalendar?: CalendarDefinition;\n viewMode?: ViewMode;\n};\n\nexport const GridBody: React.FC<GridBodyProps> = ({\n tasks,\n scheduleType,\n dates,\n rowHeight,\n svgWidth,\n columnWidth,\n todayColor,\n weekendColor,\n rtl,\n virtualItems = [],\n visibleStartY,\n visibleEndY,\n projectCalendar,\n viewMode,\n}) => {\n const visibleHeight = visibleEndY - visibleStartY;\n const now = new Date();\n\n // === Virtual row calculation ===\n const items =\n virtualItems.length > 0\n ? virtualItems\n : tasks.map((_, i) => ({\n index: i,\n start: i * rowHeight,\n end: (i + 1) * rowHeight,\n size: rowHeight,\n key: i,\n }));\n\n const isDayOff = (date: Date): boolean => {\n if (projectCalendar) return isOffDay(date, projectCalendar);\n const d = date.getDay();\n return d === 0 || d === 6;\n };\n\n const isTodayColumn = (i: number) => {\n const date = dates[i];\n const next = dates[i + 1];\n if (next && date <= now && next > now) return true;\n if (!next && date <= now) {\n const step = date.getTime() - dates[i - 1].getTime();\n const end = addToDate(date, step, \"millisecond\");\n return end > now;\n }\n return false;\n };\n\n // === Today, Off-Day, and Weekend Rects ===\n const todayRects: React.ReactNode[] = [];\n const offDayRects: React.ReactNode[] = [];\n const weekStartDay = projectCalendar?.week_start ?? 1;\n\n for (let i = 0, x = 0; i < dates.length; i++, x += columnWidth) {\n if (isTodayColumn(i)) {\n todayRects.push(\n <rect\n key={`today-${i}`}\n x={rtl ? x + columnWidth : x}\n y={visibleStartY}\n width={columnWidth}\n height={visibleHeight}\n fill={todayColor}\n />\n );\n }\n // Proportional off-day shading: Day=full column, Week=slivers; Month/Quarter excluded\n if (viewMode !== ViewMode.Month && viewMode !== ViewMode.Quarter) {\n const pEnd = dates[i + 1] ?? addToDate(dates[i], 1, \"day\");\n const periodMs = pEnd.getTime() - dates[i].getTime();\n if (periodMs > 0) {\n const cursor = new Date(dates[i]);\n cursor.setHours(0, 0, 0, 0);\n while (cursor.getTime() < pEnd.getTime()) {\n if (isDayOff(cursor)) {\n const ds = cursor.getTime() - dates[i].getTime();\n const de = ds + 86400000;\n const startFrac = Math.max(0, ds) / periodMs;\n const endFrac = Math.min(periodMs, de) / periodMs;\n const rw = (endFrac - startFrac) * columnWidth;\n if (rw > 0.5) {\n offDayRects.push(\n <rect\n key={`offday-${i}-${cursor.getTime()}`}\n x={x + startFrac * columnWidth}\n y={visibleStartY}\n width={rw}\n height={visibleHeight}\n fill={weekendColor}\n />\n );\n }\n }\n cursor.setDate(cursor.getDate() + 1);\n }\n }\n }\n }\n\n // === Vertical Tick Lines — Day view uses dashed/solid, others use default ===\n const isDayView = viewMode === ViewMode.Day;\n const tickLines = dates.map((date, i) => {\n let tickClass = styles.gridTick;\n if (isDayView) {\n tickClass =\n date.getDay() === weekStartDay\n ? styles.gridTick\n : styles.gridTickDashed;\n }\n return (\n <line\n key={`tick-${i}`}\n x1={i * columnWidth}\n y1={visibleStartY}\n x2={i * columnWidth}\n y2={visibleEndY}\n className={tickClass}\n />\n );\n });\n\n // === Horizontal Rows & Lines ===\n const rowBackgrounds: React.ReactNode[] = [];\n const rowLines: React.ReactNode[] = [];\n\n // Top border\n rowLines.push(\n <line\n key=\"top-line\"\n x1={0}\n y1={visibleStartY}\n x2={svgWidth}\n y2={visibleStartY}\n className={styles.gridRowLine}\n />\n );\n\n for (const vi of items) {\n const task = tasks[vi.index];\n if (!task) break;\n\n const y = vi.start;\n const isMilestone = task.type === \"milestone\";\n\n const rowClass = isMilestone\n ? styles.darkerGridRow\n : scheduleType === \"lookAhead\"\n ? styles.gridRowLookAhead\n : styles.gridRow;\n\n rowBackgrounds.push(\n <rect\n key={`bg-${vi.key}`}\n x={0}\n y={y}\n width={svgWidth}\n height={rowHeight}\n className={rowClass}\n />\n );\n\n rowLines.push(\n <line\n key={`line-${vi.key}`}\n x1={0}\n y1={y + rowHeight}\n x2={svgWidth}\n y2={y + rowHeight}\n className={styles.gridRowLine}\n />\n );\n }\n\n return (\n <g className=\"gridBody\">\n <g className=\"rows\">{rowBackgrounds}</g>\n <g className=\"rowLines\">{rowLines}</g>\n <g className=\"offdays\">{offDayRects}</g>\n <g className=\"ticks\">{tickLines}</g>\n <g className=\"today\">{todayRects}</g>\n </g>\n );\n};\n","import React from \"react\";\nimport { GridBody, GridBodyProps } from \"./grid-body\";\n\nexport type GridProps = GridBodyProps;\nexport const Grid: React.FC<GridProps> = props => {\n return (\n <g className=\"grid\" >\n <GridBody {...props} />\n </g>\n );\n};\n","import React from \"react\";\nimport styles from \"./calendar.module.css\";\n\ntype TopPartOfCalendarProps = {\n value: string;\n x1Line: number;\n y1Line: number;\n y2Line: number;\n xText: number;\n yText: number;\n textAnchor?: \"start\" | \"middle\" | \"end\";\n};\n\nexport const TopPartOfCalendar: React.FC<TopPartOfCalendarProps> = ({\n value,\n x1Line,\n y1Line,\n y2Line,\n xText,\n yText,\n textAnchor = \"middle\",\n}) => {\n const textAnchorClass =\n textAnchor === \"start\"\n ? styles.textAnchorStart\n : textAnchor === \"middle\"\n ? styles.textAnchorMiddle\n : styles.textAnchorEnd;\n return (\n <g className=\"calendarTop\">\n <line\n x1={x1Line}\n y1={y1Line}\n x2={x1Line}\n y2={y2Line}\n className={styles.calendarTopTick}\n key={value + \"line\"}\n />\n <text\n key={value + \"text\"}\n y={yText}\n x={xText}\n className={`${styles.calendarTopText} ${textAnchorClass}`}\n >\n {value}\n </text>\n </g>\n );\n};\n","import React, { ReactChild } from \"react\";\nimport { CalendarDefinition, ViewMode } from \"../../types/public-types\";\nimport { TopPartOfCalendar } from \"./top-part-of-calendar\";\nimport {\n getCachedDateTimeFormat,\n getLocalDayOfWeek,\n addToDate,\n} from \"../../helpers/date-helper\";\nimport {\n getQuarterNumber,\n} from \"../../helpers/calendar-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 projectCalendar?: CalendarDefinition;\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 projectCalendar,\n}) => {\n /** Helper: 3-letter month abbreviation */\n const shortMonth = (date: Date) =>\n date.toLocaleString(locale, { month: \"short\" });\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 /**\n * QUARTER view — 3-row header: Year (top) | Qtr label (middle) | Month abbr (bottom)\n */\n const getCalendarValuesForQuarter = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const offDayRects: ReactChild[] = [];\n const quarterStart = projectCalendar?.quarter_start ?? 0;\n const rowH = headerHeight / 3;\n\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const qNum = getQuarterNumber(date, quarterStart);\n\n // Bottom row: 3 month abbreviations within each quarter column\n for (let m = 0; m < 3; m++) {\n const monthDate = addToDate(date, m, \"month\");\n bottomValues.push(\n <text\n key={`qmonth-${i}-${m}`}\n y={headerHeight * 0.9}\n x={columnWidth * i + columnWidth * (m * 2 + 1) / 6}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n >\n {shortMonth(monthDate)}\n </text>\n );\n }\n\n // Middle row: quarter label centered on column\n bottomValues.push(\n <text\n key={`qlabel-${i}`}\n y={rowH * 1.6}\n x={columnWidth * i + columnWidth * 0.5}\n className={`${styles.calendarTopText} ${styles.textAnchorMiddle}`}\n >\n {`Qtr ${qNum}`}\n </text>\n );\n\n // Vertical separator at start of each column\n bottomValues.push(\n <line\n key={`qsep-${i}`}\n x1={columnWidth * i}\n y1={rowH}\n x2={columnWidth * i}\n y2={headerHeight}\n className={styles.calendarTopTick}\n />\n );\n\n // Horizontal separator between rows\n if (i === 0) {\n bottomValues.push(\n <line\n key=\"qhsep1\"\n x1={0}\n y1={rowH}\n x2={columnWidth * dateSetup.dates.length}\n y2={rowH}\n className={styles.calendarTopTick}\n />\n );\n bottomValues.push(\n <line\n key=\"qhsep2\"\n x1={0}\n y1={rowH * 2}\n x2={columnWidth * dateSetup.dates.length}\n y2={rowH * 2}\n className={styles.calendarTopTick}\n />\n );\n }\n\n // Top row: year label — new group when year changes\n if (\n i === 0 ||\n date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\n ) {\n const topValue = date.getFullYear().toString();\n // Find span end for xText calculation\n let span = 0;\n for (let j = i; j < dateSetup.dates.length && dateSetup.dates[j].getFullYear() === date.getFullYear(); j++) {\n span++;\n }\n const xText = columnWidth * i + (columnWidth * span) / 2;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + i}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={rowH}\n xText={xText}\n yText={rowH * 0.7}\n textAnchor=\"middle\"\n />\n );\n }\n }\n\n return [topValues, bottomValues, offDayRects];\n };\n\n /**\n * MONTH view — top row shows Quarter labels, bottom row shows 3-letter months.\n */\n const getCalendarValuesForMonth = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const offDayRects: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const quarterStart = projectCalendar?.quarter_start ?? 0;\n\n for (let i = 0; i < dateSetup.dates.length; i++) {\n const date = dateSetup.dates[i];\n const bottomValue = shortMonth(date);\n bottomValues.push(\n <text\n key={bottomValue + date.getFullYear() + i}\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\n // Top row: quarter label — new group when quarter or year changes\n const qNum = getQuarterNumber(date, quarterStart);\n const prevDate = i > 0 ? dateSetup.dates[i - 1] : null;\n const prevQNum = prevDate ? getQuarterNumber(prevDate, quarterStart) : -1;\n const isNewQuarter =\n i === 0 ||\n qNum !== prevQNum ||\n date.getFullYear() !== (prevDate ? prevDate.getFullYear() : -1);\n\n if (isNewQuarter) {\n const topValue = `Qtr ${qNum}, ${date.getFullYear()}`;\n // Find how many months in this quarter-year group for xText centering\n let span = 0;\n for (\n let j = i;\n j < dateSetup.dates.length &&\n getQuarterNumber(dateSetup.dates[j], quarterStart) === qNum &&\n dateSetup.dates[j].getFullYear() === date.getFullYear();\n j++\n ) {\n span++;\n }\n const xText = rtl\n ? columnWidth * i + columnWidth * span * 0.5 + columnWidth\n : columnWidth * i + (columnWidth * span) / 2;\n\n topValues.push(\n <TopPartOfCalendar\n key={topValue + i}\n value={topValue}\n x1Line={columnWidth * i}\n y1Line={0}\n y2Line={topDefaultHeight}\n xText={xText}\n yText={topDefaultHeight * 0.7}\n textAnchor=\"middle\"\n />\n );\n // Extend the quarter-boundary tick through the bottom half of the header\n if (i > 0) {\n bottomValues.push(\n <line\n key={`qbound-${i}`}\n x1={columnWidth * i}\n y1={topDefaultHeight}\n x2={columnWidth * i}\n y2={headerHeight}\n className={styles.calendarTopTick}\n />\n );\n }\n }\n }\n return [topValues, bottomValues, offDayRects];\n };\n\n /**\n * WEEK view — top row: \"Mmm YYYY\", bottom row: day-number of week start.\n */\n const getCalendarValuesForWeek = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const offDayRects: 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 // Use 3-letter month abbreviation\n topValue = `${shortMonth(date)} ${date.getFullYear()}`;\n }\n // Bottom: day number of the week-start date\n const bottomValue = date.getDate().toString();\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 (i !== dates.length - 1) {\n topValues.push(\n <TopPartOfCalendar\n key={topValue + i}\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, offDayRects];\n };\n\n /**\n * DAY view — top row: \"Mmm YYYY\" per month, bottom: day labels.\n * Off days shaded gray. Solid tick for week-start day, dashed for others.\n */\n const getCalendarValuesForDay = () => {\n const topValues: ReactChild[] = [];\n const bottomValues: ReactChild[] = [];\n const offDayRects: ReactChild[] = [];\n const tickLines: ReactChild[] = [];\n const topDefaultHeight = headerHeight * 0.5;\n const dates = dateSetup.dates;\n const weekStartDay = projectCalendar?.week_start ?? 1; // default Monday\n\n for (let i = 0; i < dates.length; i++) {\n const date = dates[i];\n\n // Per-day separator tick lines\n const isWeekStart = date.getDay() === weekStartDay;\n tickLines.push(\n <line\n key={`tick-day-${i}`}\n x1={columnWidth * i}\n y1={topDefaultHeight}\n x2={columnWidth * i}\n y2={headerHeight}\n className={isWeekStart ? styles.calendarTickSolid : styles.calendarTickDashed}\n />\n );\n\n // Bottom: day label\n const bottomValue =\n columnWidth > 55\n ? `${getLocalDayOfWeek(date, locale, \"short\")}, ${date.getDate()}`\n : `${getLocalDayOfWeek(date, locale, \"narrow\")},${date.getDate()}`;\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\n // Top: month boundary labels using 3-letter abbreviation\n if (\n i + 1 !== dates.length &&\n date.getMonth() !== dates[i + 1].getMonth()\n ) {\n const topValue = `${shortMonth(date)} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + i}\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 = `${shortMonth(date)} ${date.getFullYear()}`;\n topValues.push(\n <TopPartOfCalendar\n key={topValue + \"last\"}\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, offDayRects, tickLines];\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(date, locale, \"short\")}, ${date.getDate()} ${shortMonth(date)}`;\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(displayDate, locale, \"long\")}, ${displayDate.getDate()} ${shortMonth(displayDate)}`;\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 let extraValues: ReactChild[] = [];\n let tickLines: ReactChild[] = [];\n\n switch (dateSetup.viewMode) {\n case ViewMode.Year:\n [topValues, bottomValues] = getCalendarValuesForYear();\n break;\n case ViewMode.Quarter: {\n const r = getCalendarValuesForQuarter();\n topValues = r[0]; bottomValues = r[1]; extraValues = r[2] || [];\n break;\n }\n case ViewMode.Month: {\n const r = getCalendarValuesForMonth();\n topValues = r[0]; bottomValues = r[1]; extraValues = r[2] || [];\n break;\n }\n case ViewMode.Week: {\n const r = getCalendarValuesForWeek();\n topValues = r[0]; bottomValues = r[1]; extraValues = r[2] || [];\n break;\n }\n case ViewMode.Day: {\n const result = getCalendarValuesForDay();\n topValues = result[0];\n bottomValues = result[1];\n extraValues = result[2];\n tickLines = result[3];\n break;\n }\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 {extraValues}\n {tickLines}\n {bottomValues}\n {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 // Use visual segment edge when available (correct for working-time bars in day view)\n if (t.plannedSegments && t.plannedSegments.length > 0) {\n const p = t.plannedSegments[0].x1;\n if (t.actualSegments && t.actualSegments.length > 0) return Math.min(p, t.actualSegments[0].x1);\n return p;\n }\n if (t.actualSegments && t.actualSegments.length > 0) return t.actualSegments[0].x1;\n const candidates: number[] = [];\n if (t.x1 !== undefined && t.x1 >= 0) candidates.push(t.x1);\n if (t.actualx1 !== undefined && t.actualx1 >= 0) candidates.push(t.actualx1);\n return candidates.length > 0 ? Math.min(...candidates) : 0;\n };\n const maxX = (t: BarTask) => {\n if (t.plannedSegments && t.plannedSegments.length > 0) {\n const p = t.plannedSegments[t.plannedSegments.length - 1].x2;\n if (t.actualSegments && t.actualSegments.length > 0) return Math.max(p, t.actualSegments[t.actualSegments.length - 1].x2);\n return p;\n }\n if (t.actualSegments && t.actualSegments.length > 0) return t.actualSegments[t.actualSegments.length - 1].x2;\n const candidates: number[] = [];\n if (t.x2 !== undefined && t.x2 >= 0) candidates.push(t.x2);\n if (t.actualx2 !== undefined && t.actualx2 >= 0) candidates.push(t.actualx2);\n return candidates.length > 0 ? Math.max(...candidates) : 0;\n };\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\";\nimport { getWorkingIntervals } from \"./calendar-helper\";\nimport { startOfDate, addToDate } from \"./date-helper\";\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(startOfDate(task.start, \"day\"), dates, columnWidth) : -1;\n x2 = task.end ? taskXCoordinate(addToDate(startOfDate(task.end, \"day\"), 1, \"day\"), dates, columnWidth) : -1;\n actualx1 = task.actualStart\n ? taskXCoordinate(startOfDate(task.actualStart, \"day\"), dates, columnWidth)\n : -1;\n actualx2 = task.actualEnd\n ? taskXCoordinate(addToDate(startOfDate(task.actualEnd, \"day\"), 1, \"day\"), 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 // Compute working-time segments if the task has a calendar\n let plannedSegments: Array<{ x1: number; x2: number }> | undefined;\n let actualSegments: Array<{ x1: number; x2: number }> | undefined;\n\n if (task.calender && task.start && task.end && task.start.getTime() > 0) {\n const planEnd = addToDate(startOfDate(task.end, \"day\"), 1, \"day\");\n const intervals = getWorkingIntervals(task.start, planEnd, task.calender);\n const segs = intervals\n .map(iv => ({\n x1: taskXCoordinate(iv.start, dates, columnWidth),\n x2: taskXCoordinate(iv.end, dates, columnWidth),\n }))\n .filter(s => s.x2 > s.x1);\n if (segs.length > 0) plannedSegments = segs;\n }\n\n if (\n task.calender &&\n task.actualStart &&\n task.actualEnd &&\n task.actualStart.getTime() > 0\n ) {\n const actEnd = addToDate(startOfDate(task.actualEnd, \"day\"), 1, \"day\");\n const intervals = getWorkingIntervals(\n task.actualStart,\n actEnd,\n task.calender\n );\n const segs = intervals\n .map(iv => ({\n x1: taskXCoordinate(iv.start, dates, columnWidth),\n x2: taskXCoordinate(iv.end, dates, columnWidth),\n }))\n .filter(s => s.x2 > s.x1);\n if (segs.length > 0) actualSegments = segs;\n }\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 plannedSegments,\n actualSegments,\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\nexport const 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 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 segments?: Array<{ x1: number; x2: number }>;\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 width,\n height,\n isSelected,\n progressX,\n progressWidth,\n barCornerRadius,\n styles,\n segments,\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 if (segments && segments.length > 0) {\n // Multi-segment rendering: one rect per working interval\n const totalWidth = width;\n return (\n <g onMouseDown={onMouseDown}>\n {segments.map((seg, idx) => (\n <rect\n key={`seg-${idx}`}\n x={seg.x1}\n width={seg.x2 - seg.x1}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getBarColor()}\n strokeWidth={2}\n stroke={styles.criticalPathColor}\n />\n ))}\n {/* Progress overlay: distribute progressWidth proportionally */}\n {progressWidth > 0 && (() => {\n const rects: React.ReactNode[] = [];\n let remaining = progressWidth;\n for (const seg of segments) {\n if (remaining <= 0) break;\n const segW = seg.x2 - seg.x1;\n const ratio = totalWidth > 0 ? segW / totalWidth : 0;\n const pw = Math.min(remaining, progressWidth * ratio);\n if (pw > 0) {\n rects.push(\n <rect\n key={`prog-${seg.x1}`}\n x={seg.x1}\n width={pw}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={getProcessColor()}\n />\n );\n remaining -= pw;\n }\n }\n return rects;\n })()}\n </g>\n );\n }\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={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 if (segments && segments.length > 0) {\n return (\n <g onMouseDown={onMouseDown}>\n {segments.map((seg, idx) => (\n <rect\n key={`aseg-${idx}`}\n x={seg.x1}\n width={seg.x2 - seg.x1}\n y={y}\n height={height}\n ry={barCornerRadius}\n rx={barCornerRadius}\n fill={styles.taskProgressColor}\n />\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 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};\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\n // When segments exist (calendar with off-days/holidays), snap handles to the\n // nearest colored-bar boundary so they remain visible and usable even when the\n // task's declared start/end dates fall on off-days.\n const plannedSegs = task.plannedSegments;\n const plannedLeftHandleX = plannedSegs?.length\n ? plannedSegs[0].x1\n : task.x1;\n const plannedRightHandleX = plannedSegs?.length\n ? plannedSegs[plannedSegs.length - 1].x2\n : task.x2;\n\n const actualSegs = task.actualSegments;\n const actualLeftHandleX = actualSegs?.length\n ? actualSegs[0].x1\n : task.actualx1;\n const actualRightHandleX = actualSegs?.length\n ? actualSegs[actualSegs.length - 1].x2\n : task.actualx2;\n\n if (type == \"planned\") {\n if (task?.x1 >= 0 && task?.x2 >= 0 && task.x2 - task.x1 >= 0)\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n {/* Transparent hit area ensures hover stays active across segment gaps */}\n <rect x={task.x1} y={task.y} width={task.x2 - task.x1} height={task.height / 2} fill=\"transparent\" />\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\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 segments={task.plannedSegments}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"planned\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left — anchored to first segment so it stays on the colored bar\n even when the declared start date falls on an off-day/holiday */}\n <BarDateHandle\n x={plannedLeftHandleX + 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 — anchored to last segment */}\n <BarDateHandle\n x={plannedRightHandleX - task.handleWidth - 1}\n y={task.y + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"planned\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"planned\");\n }}\n />\n )}\n </g>\n </g>\n );\n else return <g className={styles.barWrapper} tabIndex={0}></g>;\n } else if (task?.actualx1 >= 0 && task?.actualx2 >= 0 && task.actualx2 - task.actualx1 >= 0) {\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n {/* Transparent hit area ensures hover stays active across segment gaps */}\n <rect x={task.actualx1} y={task.y + task.height / 2} width={task.actualx2 - task.actualx1} height={task.height / 2} fill=\"transparent\" />\n <BarDisplay\n x={task.actualx1}\n y={task.y + task.height / 2}\n type={type as string}\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 segments={task.actualSegments}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e, \"actual\");\n }}\n />\n <g className=\"handleGroup\">\n {isDateChangeable && (\n <g>\n {/* left — anchored to first actual segment */}\n <BarDateHandle\n x={actualLeftHandleX + 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 — anchored to last actual segment */}\n <BarDateHandle\n x={actualRightHandleX - task.handleWidth - 1}\n y={task.y + task.height / 2 + 1}\n width={task.handleWidth}\n height={handleHeight}\n barCornerRadius={task.barCornerRadius}\n onMouseDown={e => {\n onEventStart(\"end\", task, e, \"actual\");\n }}\n />\n </g>\n )}\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e, \"actual\");\n }}\n />\n )}\n </g>\n </g>\n );\n } else {\n return <g className={styles.barWrapper} tabIndex={0}></g>;\n }\n};\n","import React from \"react\";\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\nimport { BarDisplay } from \"./bar-display\";\nimport { BarProgressHandle } from \"./bar-progress-handle\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./bar.module.css\";\n\nexport const BarSmall: React.FC<TaskItemProps> = ({\n task,\n type,\n isProgressChangeable,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const progressPoint = getProgressPoint(\n task.progressWidth + task.x1,\n task.y,\n task.height\n );\n return (\n <g className={styles.barWrapper} tabIndex={0}>\n <BarDisplay\n x={task.x1}\n y={task.y}\n type={type as string}\n // actualX1={task.actualx1}\n // actualX2={task.actualx2}\n startProgressWidth={task.progressStartWidth}\n endProgressWidth={task.progressEndWidth}\n width={task.x2 - task.x1}\n height={task.height}\n progressX={task.progressX}\n progressWidth={task.progressWidth}\n barCornerRadius={task.barCornerRadius}\n styles={task.styles}\n isSelected={isSelected}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e);\n }}\n />\n <g className=\"handleGroup\">\n {isProgressChangeable && (\n <BarProgressHandle\n progressPoint={progressPoint}\n onMouseDown={e => {\n onEventStart(\"progress\", task, e);\n }}\n />\n )}\n </g>\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./milestone.module.css\";\n\nexport const Milestone: React.FC<TaskItemProps> = ({\n task,\n isDateChangeable,\n onEventStart,\n isSelected,\n}) => {\n const transform = `rotate(45 ${task.x1 + task.height * 0.356} \n ${task.y + task.height * 0.85})`;\n const getBarColor = () => {\n return isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n };\n\n return (\n <g tabIndex={0} className={styles.milestoneWrapper}>\n <rect\n fill={getBarColor()}\n x={task.x1}\n width={task.height}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n transform={transform}\n className={styles.milestoneBackground}\n onMouseDown={e => {\n isDateChangeable && onEventStart(\"move\", task, e,\"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e);\n }}\n />\n </g>\n );\n};\n","import React from \"react\";\nimport { TaskItemProps } from \"../task-item\";\nimport styles from \"./project.module.css\";\n\nexport const Project: React.FC<TaskItemProps> = ({ task, isSelected }) => {\n const barColor = isSelected\n ? task.styles.backgroundSelectedColor\n : task.styles.backgroundColor;\n const processColor = isSelected\n ? task.styles.progressSelectedColor\n : task.styles.progressColor;\n const projectWith = task.x2 - task.x1;\n\n const projectLeftTriangle = [\n task.x1,\n task.y + task.height / 2 - 1,\n task.x1,\n task.y + task.height,\n task.x1 + 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n const projectRightTriangle = [\n task.x2,\n task.y + task.height / 2 - 1,\n task.x2,\n task.y + task.height,\n task.x2 - 15,\n task.y + task.height / 2 - 1,\n ].join(\",\");\n\n return (\n <g tabIndex={0} className={styles.projectWrapper}>\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectBackground}\n />\n <rect\n x={task.progressX}\n width={task.progressWidth}\n y={task.y}\n height={task.height}\n ry={task.barCornerRadius}\n rx={task.barCornerRadius}\n fill={processColor}\n />\n <rect\n fill={barColor}\n x={task.x1}\n width={projectWith}\n y={task.y}\n height={task.height / 2}\n rx={task.barCornerRadius}\n ry={task.barCornerRadius}\n className={styles.projectTop}\n />\n <polygon\n className={styles.projectTop}\n points={projectLeftTriangle}\n fill={barColor}\n />\n <polygon\n className={styles.projectTop}\n points={projectRightTriangle}\n fill={barColor}\n />\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { GanttContentMoveAction } from \"../../types/gantt-task-actions\";\nimport { Bar } from \"./bar/bar\";\nimport { BarSmall } from \"./bar/bar-small\";\nimport { Milestone } from \"./milestone/milestone\";\nimport { Project } from \"./project/project\";\n// import style from \"./task-list.module.css\";\n\nexport type TaskItemProps = {\n task: BarTask;\n arrowIndent: number;\n taskHeight: number;\n isProgressChangeable: boolean;\n isDateChangeable: boolean;\n isDelete: boolean;\n isSelected: boolean;\n rtl: boolean;\n type?: string;\n onEventStart: (\n action: GanttContentMoveAction,\n selectedTask: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => any;\n};\n\nexport const TaskItem: React.FC<TaskItemProps> = props => {\n const {\n task,\n // arrowIndent,\n isDelete,\n // taskHeight,\n isSelected,\n // rtl,\n onEventStart,\n } = {\n ...props,\n };\n // const textRef = useRef<SVGTextElement>(null);\n const [taskItem, setTaskItem] = useState<JSX.Element[]>([<div />]);\n // const [isTextInside, setIsTextInside] = useState(true);\n\n useEffect(() => {\n switch (task.typeInternal) {\n case \"milestone\":\n if (task.x1 >= 0 && task.actualx1 >= 0)\n setTaskItem([<Milestone {...props} />]);\n else setTaskItem([]);\n break;\n case \"project\":\n if (\n task?.x1 >= 0 &&\n task?.x2 >= 0 &&\n task.x2 > task.x1 &&\n task?.actualx1 >= 0 &&\n task?.actualx2 >= 0 &&\n task.actualx2 > task.actualx1\n )\n setTaskItem([<Project {...props} />]);\n else setTaskItem([]);\n break;\n case \"smalltask\":\n setTaskItem([<BarSmall {...props} />]);\n break;\n default:\n {\n let taskItem = [];\n if (task?.x1 >= 0 && task?.x2 >= 0) {\n taskItem.push(<Bar {...props} type={\"planned\"} />);\n }\n if (task?.actualx1 >= 0 && task?.actualx2 >= 0) {\n taskItem.push(<Bar {...props} type={\"actual\"} />);\n }\n setTaskItem(taskItem);\n }\n break;\n }\n }, [task, isSelected]);\n\n // useEffect(() => {\n // if (textRef.current) {\n // setIsTextInside(textRef.current.getBBox().width < task.x2 - task.x1);\n // }\n // }, [textRef, task]);\n\n // const getX = () => {\n // const width = task.x2 - task.x1;\n // const hasChild = task.barChildren.length > 0;\n // if (isTextInside) {\n // return task.x1 + width * 0.5;\n // }\n // if (rtl && textRef.current) {\n // return (\n // task.x1 -\n // textRef.current.getBBox().width -\n // arrowIndent * +hasChild -\n // arrowIndent * 0.2\n // );\n // } else {\n // return task.x1 + width + arrowIndent * +hasChild + arrowIndent * 0.2;\n // }\n // };\n\n return (\n <g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"planned\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"planned\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"planned\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"planned\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"planned\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[0]}\n </g>\n <g\n onKeyDown={e => {\n switch (e.key) {\n case \"Delete\": {\n if (isDelete) onEventStart(\"delete\", task, e, \"actual\");\n break;\n }\n }\n e.stopPropagation();\n }}\n onMouseEnter={e => {\n onEventStart(\"mouseenter\", task, e, \"actual\");\n }}\n onMouseLeave={e => {\n onEventStart(\"mouseleave\", task, e, \"actual\");\n }}\n onDoubleClick={e => {\n onEventStart(\"dblclick\", task, e, \"actual\");\n }}\n onClick={e => {\n onEventStart(\"click\", task, e, \"actual\");\n }}\n // onFocus={() => {\n // onEventStart(\"select\", task);\n // }}\n >\n {taskItem[1]}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { VirtualItem } from \"@tanstack/react-virtual\";\nimport { CalendarDefinition, Dependency, EventOption } from \"../../types/public-types\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { Arrow } from \"../other/arrow\";\nimport { handleTaskBySVGMouseEvent, taskXCoordinate } 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\";\nimport { snapToWorkingTime, getWorkingIntervals } from \"../../helpers/calendar-helper\";\nimport { startOfDate, addToDate } from \"../../helpers/date-helper\";\n\nexport type TaskGanttContentProps = {\n tasks: BarTask[];\n dates: Date[];\n ganttEvent: GanttEvent;\n selectedTask: BarTask | undefined;\n rowHeight: number;\n columnWidth: number;\n timeStep: number;\n svg?: React.RefObject<SVGSVGElement>;\n svgWidth: number;\n taskHeight: number;\n arrowColor: string;\n arrowIndent: number;\n fontSize: string;\n fontFamily: string;\n rtl: boolean;\n virtualItems?: VirtualItem[];\n visibleStartY: number;\n visibleEndY: number;\n projectCalendar?: CalendarDefinition;\n setGanttEvent: (value: GanttEvent) => void;\n setFailedTask: (value: BarTask | null) => void;\n setSelectedTask: (taskId: string) => void;\n onBarTasksUpdate?: (task: BarTask) => void;\n sliderTime?: number;\n} & EventOption;\n\nexport const TaskGanttContent: React.FC<TaskGanttContentProps> = ({\n tasks,\n dates,\n ganttEvent,\n selectedTask,\n rowHeight,\n columnWidth,\n timeStep,\n svg,\n taskHeight,\n arrowIndent,\n fontFamily,\n fontSize,\n rtl,\n virtualItems = [],\n setGanttEvent,\n setFailedTask,\n setSelectedTask,\n onBarTasksUpdate,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n onCalendarError,\n projectCalendar,\n visibleStartY,\n visibleEndY,\n sliderTime,\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 let finalTask = { ...changedTask };\n const dragType = ganttEvent.type as string;\n if (\n changedTask.calender &&\n (ganttEvent.action === \"end\" ||\n ganttEvent.action === \"start\" ||\n ganttEvent.action === \"move\")\n ) {\n const cal = finalTask.calender!;\n if (dragType === \"actual\") {\n // --- Actual bar snapping ---\n if (ganttEvent.action === \"end\") {\n const snapped = snapToWorkingTime(finalTask.actualEnd, cal, \"forward\");\n finalTask.actualEnd = snapped;\n finalTask.actualx2 = taskXCoordinate(snapped, dates, columnWidth);\n } else if (ganttEvent.action === \"start\") {\n const snapped = snapToWorkingTime(finalTask.actualStart, cal, \"forward\");\n finalTask.actualStart = snapped;\n finalTask.actualx1 = taskXCoordinate(snapped, dates, columnWidth);\n } else {\n const snapped = snapToWorkingTime(finalTask.actualStart, cal, \"forward\");\n const delta = snapped.getTime() - finalTask.actualStart.getTime();\n finalTask.actualStart = snapped;\n finalTask.actualEnd = new Date(finalTask.actualEnd.getTime() + delta);\n finalTask.actualx1 = taskXCoordinate(finalTask.actualStart, dates, columnWidth);\n finalTask.actualx2 = taskXCoordinate(finalTask.actualEnd, dates, columnWidth);\n }\n // Recompute actual segments\n const actEnd = addToDate(startOfDate(finalTask.actualEnd, \"day\"), 1, \"day\");\n const actIntervals = getWorkingIntervals(finalTask.actualStart, actEnd, cal);\n const actSegs = actIntervals\n .map(iv => ({ x1: taskXCoordinate(iv.start, dates, columnWidth), x2: taskXCoordinate(iv.end, dates, columnWidth) }))\n .filter(s => s.x2 > s.x1);\n finalTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;\n // Compute actual duration in real time\n const actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));\n finalTask.actualDuration = actDays;\n } else {\n // --- Planned bar snapping ---\n if (ganttEvent.action === \"end\") {\n const snapped = snapToWorkingTime(finalTask.end, cal, \"forward\");\n finalTask.end = snapped;\n finalTask.x2 = taskXCoordinate(snapped, dates, columnWidth);\n } else if (ganttEvent.action === \"start\") {\n const snapped = snapToWorkingTime(finalTask.start, cal, \"forward\");\n finalTask.start = snapped;\n finalTask.x1 = taskXCoordinate(snapped, dates, columnWidth);\n } else {\n const snapped = snapToWorkingTime(finalTask.start, cal, \"forward\");\n const delta = snapped.getTime() - finalTask.start.getTime();\n finalTask.start = snapped;\n finalTask.end = new Date(finalTask.end.getTime() + delta);\n finalTask.x1 = taskXCoordinate(finalTask.start, dates, columnWidth);\n finalTask.x2 = taskXCoordinate(finalTask.end, dates, columnWidth);\n }\n // Recompute planned segments\n const planEnd = addToDate(startOfDate(finalTask.end, \"day\"), 1, \"day\");\n const planIntervals = getWorkingIntervals(finalTask.start, planEnd, cal);\n const planSegs = planIntervals\n .map(iv => ({ x1: taskXCoordinate(iv.start, dates, columnWidth), x2: taskXCoordinate(iv.end, dates, columnWidth) }))\n .filter(s => s.x2 > s.x1);\n finalTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;\n // Compute planned duration in real time\n const planDays = Math.max(1, Math.round((finalTask.end.getTime() - finalTask.start.getTime()) / (1000 * 60 * 60 * 24)));\n finalTask.plannedDuration = planDays;\n }\n } else {\n // No calendar — still compute duration dynamically\n if (dragType === \"actual\") {\n const actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));\n finalTask.actualDuration = actDays;\n } else {\n const planDays = Math.max(1, Math.round((finalTask.end.getTime() - finalTask.start.getTime()) / (1000 * 60 * 60 * 24)));\n finalTask.plannedDuration = planDays;\n }\n }\n setGanttEvent({ action: ganttEvent.action, changedTask: finalTask, type: dragType });\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 // Calendar snap: snap to nearest working time based on action direction\n const dropType = type as string;\n if (\n newChangedTask.calender &&\n (action === \"move\" || action === \"end\" || action === \"start\")\n ) {\n const cal = newChangedTask.calender;\n if (dropType === \"actual\") {\n // --- Actual bar snapping on drop ---\n if (action === \"end\") {\n const snappedEnd = snapToWorkingTime(newChangedTask.actualEnd, cal, \"forward\");\n newChangedTask.actualEnd = snappedEnd;\n newChangedTask.actualx2 = taskXCoordinate(snappedEnd, dates, columnWidth);\n } else if (action === \"start\") {\n const snappedStart = snapToWorkingTime(newChangedTask.actualStart, cal, \"forward\");\n if (snappedStart >= newChangedTask.actualEnd) {\n setFailedTask(originalSelectedTask);\n onCalendarError?.(newChangedTask, \"No working time in selected range\");\n setGanttEvent({ action: \"\" });\n setIsMoving(false);\n svg.current.removeEventListener(\"mousemove\", handleMouseMove);\n svg.current.removeEventListener(\"mouseup\", handleMouseUp);\n return;\n }\n newChangedTask.actualStart = snappedStart;\n newChangedTask.actualx1 = taskXCoordinate(snappedStart, dates, columnWidth);\n } else {\n const snappedStart = snapToWorkingTime(newChangedTask.actualStart, cal, \"forward\");\n const delta = snappedStart.getTime() - newChangedTask.actualStart.getTime();\n newChangedTask.actualStart = snappedStart;\n newChangedTask.actualEnd = new Date(newChangedTask.actualEnd.getTime() + delta);\n newChangedTask.actualx1 = taskXCoordinate(snappedStart, dates, columnWidth);\n newChangedTask.actualx2 = taskXCoordinate(newChangedTask.actualEnd, dates, columnWidth);\n }\n const actEnd = addToDate(startOfDate(newChangedTask.actualEnd, \"day\"), 1, \"day\");\n const actIntervals = getWorkingIntervals(newChangedTask.actualStart, actEnd, cal);\n const actSegs = actIntervals\n .map(iv => ({ x1: taskXCoordinate(iv.start, dates, columnWidth), x2: taskXCoordinate(iv.end, dates, columnWidth) }))\n .filter(s => s.x2 > s.x1);\n newChangedTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;\n // Compute actual duration\n const actDays = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));\n newChangedTask.actualDuration = actDays;\n } else {\n // --- Planned bar snapping on drop ---\n if (action === \"end\") {\n const snappedEnd = snapToWorkingTime(newChangedTask.end, cal, \"forward\");\n newChangedTask.end = snappedEnd;\n newChangedTask.x2 = taskXCoordinate(snappedEnd, dates, columnWidth);\n } else if (action === \"start\") {\n const snappedStart = snapToWorkingTime(newChangedTask.start, cal, \"forward\");\n if (snappedStart >= newChangedTask.end) {\n setFailedTask(originalSelectedTask);\n onCalendarError?.(newChangedTask, \"No working time in selected range\");\n setGanttEvent({ action: \"\" });\n setIsMoving(false);\n svg.current.removeEventListener(\"mousemove\", handleMouseMove);\n svg.current.removeEventListener(\"mouseup\", handleMouseUp);\n return;\n }\n newChangedTask.start = snappedStart;\n newChangedTask.x1 = taskXCoordinate(snappedStart, dates, columnWidth);\n } else {\n const snappedStart = snapToWorkingTime(newChangedTask.start, cal, \"forward\");\n const delta = snappedStart.getTime() - newChangedTask.start.getTime();\n newChangedTask.start = snappedStart;\n newChangedTask.end = new Date(newChangedTask.end.getTime() + delta);\n newChangedTask.x1 = taskXCoordinate(snappedStart, dates, columnWidth);\n newChangedTask.x2 = taskXCoordinate(newChangedTask.end, dates, columnWidth);\n }\n const planEnd = addToDate(startOfDate(newChangedTask.end, \"day\"), 1, \"day\");\n const planIntervals = getWorkingIntervals(newChangedTask.start, planEnd, cal);\n const planSegs = planIntervals\n .map(iv => ({ x1: taskXCoordinate(iv.start, dates, columnWidth), x2: taskXCoordinate(iv.end, dates, columnWidth) }))\n .filter(s => s.x2 > s.x1);\n newChangedTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;\n // Compute planned duration\n const planDays = Math.max(1, Math.round((newChangedTask.end.getTime() - newChangedTask.start.getTime()) / (1000 * 60 * 60 * 24)));\n newChangedTask.plannedDuration = planDays;\n }\n } else if (action === \"move\" || action === \"end\" || action === \"start\") {\n // No calendar — still compute duration on drop\n if (dropType === \"actual\") {\n const actDays = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));\n newChangedTask.actualDuration = actDays;\n } else {\n const planDays = Math.max(1, Math.round((newChangedTask.end.getTime() - newChangedTask.start.getTime()) / (1000 * 60 * 60 * 24)));\n newChangedTask.plannedDuration = planDays;\n }\n }\n\n // remove listeners\n svg.current.removeEventListener(\"mousemove\", handleMouseMove);\n svg.current.removeEventListener(\"mouseup\", handleMouseUp);\n\n // Sync barTasks to final drag position BEFORE clearing ganttEvent (prevents reset flash)\n if (onBarTasksUpdate && isNotLikeOriginal) {\n onBarTasksUpdate(newChangedTask);\n }\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 onCalendarError,\n projectCalendar,\n svg,\n isMoving,\n point,\n rtl,\n setFailedTask,\n setGanttEvent,\n onBarTasksUpdate,\n dates,\n columnWidth,\n ]);\n\n /**\n * Method is Start point of task change\n */\n const handleBarEventStart = async (\n action: GanttContentMoveAction,\n task: BarTask,\n event?: React.MouseEvent | React.KeyboardEvent,\n type?: string\n ) => {\n if (!event) {\n if (action === \"select\") {\n setSelectedTask(task.id);\n }\n }\n // Keyboard events\n else if (isKeyboardEvent(event)) {\n if (action === \"delete\") {\n if (onDelete) {\n try {\n const result = await onDelete(task);\n if (result !== undefined && result) {\n setGanttEvent({ action, changedTask: task });\n }\n } catch (error) {\n console.error(\"Error on Delete. \" + error);\n }\n }\n }\n }\n // Mouse Events\n else if (action === \"mouseenter\") {\n if (!ganttEvent.action) {\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n }\n } else if (action === \"mouseleave\") {\n if (ganttEvent.action === \"mouseenter\") {\n setGanttEvent({ action: \"\" });\n }\n } else if (action === \"dblclick\") {\n !!onDoubleClick && onDoubleClick(task);\n } else if (action === \"click\") {\n !!onClick && onClick(task);\n }\n // Change task event start\n else if (action === \"move\") {\n if (!svg?.current || !point) return;\n point.x = event.clientX;\n const cursor = point.matrixTransform(\n svg.current.getScreenCTM()?.inverse()\n );\n if (type == \"planned\") setInitEventX1Delta(cursor.x - task.x1);\n else if (type == \"actual\") setInitEventX1Delta(cursor.x - task.actualx1);\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n } else {\n setGanttEvent({\n action,\n changedTask: task,\n originalSelectedTask: task,\n type: type,\n });\n }\n };\n\n const getArrows = (isCritical: boolean, criticalPathType?: string) => {\n return tasks.flatMap(_task => {\n // Use live drag preview position for arrow endpoints\n const _live =\n ganttEvent.changedTask && ganttEvent.changedTask.id === _task.id\n ? ganttEvent.changedTask\n : _task;\n const task =\n _live.start.getTime() > 0 && _live.end.getTime() > 0\n ? _live\n : undefined;\n if (!task) {\n return [];\n }\n return task.barChildren\n .map(child => {\n if (task.x2 > task.x1 || task.actualx2 > task.actualx1) {\n const criticalTask = task.criticalPathArrows?.find(\n arrow =>\n arrow.taskId === tasks[child.index].id &&\n (!!arrow.criticalPathType\n ? arrow.criticalPathType === criticalPathType\n : !criticalPathType)\n );\n\n const taskTo = tasks[child.index];\n const yFrom = task.y + taskHeight / 2;\n const yTo = taskTo.y + taskHeight / 2;\n const minY = Math.min(yFrom, yTo);\n const maxY = Math.max(yFrom, yTo);\n\n if (maxY < visibleStartY || minY > visibleEndY) {\n return null;\n }\n\n // Only render arrows matching the group\n if (!!criticalTask === isCritical) {\n return (\n <Arrow\n key={`Arrow from ${task.id} to ${tasks[child.index].id}${\n isCritical ? \"-critical\" : \"\"\n }`}\n taskFrom={task}\n taskTo={tasks[child.index]}\n rowHeight={rowHeight}\n dependencyType={child.dependencyType as Dependency}\n taskHeight={taskHeight}\n arrowIndent={arrowIndent}\n arrowColor={criticalTask?.arrowColor || \"#808080\"}\n />\n );\n }\n }\n return null;\n })\n .filter(Boolean);\n });\n };\n\n // Calculate x position for the vertical line from sliderTime\n const lineX = sliderTime !== undefined ? taskXCoordinate(new Date(sliderTime), dates, columnWidth) : null;\n const totalHeight = tasks.length * rowHeight;\n\n // Debug logging for vertical line\n useEffect(() => {\n if (sliderTime !== undefined) {\n console.log('Vertical line debug:', {\n sliderTime: new Date(sliderTime).toLocaleString(),\n lineX,\n totalHeight,\n tasksCount: tasks.length,\n columnWidth,\n datesRange: dates.length > 0 ? `${dates[0].toLocaleString()} - ${dates[dates.length-1].toLocaleString()}` : 'empty'\n });\n }\n }, [sliderTime, lineX, totalHeight, tasks.length, dates, columnWidth]);\n\n return (\n <g className=\"content\">\n {/* Vertical red line for slider time */}\n {lineX !== null && lineX > 0 && (\n <line\n x1={lineX}\n y1={0}\n x2={lineX}\n y2={totalHeight}\n stroke=\"red\"\n strokeWidth={2}\n pointerEvents=\"none\"\n opacity={0.8}\n />\n )}\n <g className=\"arrows\">\n {/* Render non-critical arrows first */}\n {getArrows(false)}\n {/* Render secondary critical path arrows on top */}\n {getArrows(true, \"secondary\")}\n {/* Render primary critical path arrows on top */}\n {getArrows(true, \"primary\")}\n </g>\n <g className=\"bar\" fontFamily={fontFamily} fontSize={fontSize}>\n {virtualItems.map(vi => {\n const _task = tasks[vi.index];\n // Use live drag preview for instant smooth updates (1 render/mousemove instead of 2)\n const task =\n ganttEvent.changedTask && ganttEvent.changedTask.id === _task.id\n ? { ...ganttEvent.changedTask, y: 0 }\n : { ..._task, y: 0 };\n if (!task && _task.typeInternal === \"milestone\") {\n return (\n <g key={_task.id} transform={`translate(0, ${vi.start})`}>\n <Milestone\n task={task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={false}\n isDateChangeable={false}\n isDelete={!_task.isDisabled}\n onEventStart={handleBarEventStart}\n isSelected={!!selectedTask && _task.id === selectedTask.id}\n rtl={rtl}\n />\n </g>\n );\n }\n if (!task) {\n return (\n <g\n key={_task.id}\n transform={`translate(0, ${vi.start})`}\n style={{ height: taskHeight }}\n />\n );\n }\n return (\n <g key={task.id} transform={`translate(0, ${vi.start})`}>\n <TaskItem\n task={task}\n arrowIndent={arrowIndent}\n taskHeight={taskHeight}\n isProgressChangeable={!!onProgressChange && !task.isDisabled}\n isDateChangeable={!!onDateChange && !task.isDisabled}\n isDelete={!task.isDisabled}\n onEventStart={handleBarEventStart}\n isSelected={!!selectedTask && task.id === selectedTask.id}\n rtl={rtl}\n />\n </g>\n );\n })}\n </g>\n </g>\n );\n};\n","import React, { useEffect, useRef } from \"react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { GridProps, Grid } from \"../grid/grid\";\nimport { CalendarProps, Calendar } from \"../calendar/calendar\";\nimport { TaskGanttContentProps, TaskGanttContent } from \"./task-gantt-content\";\nimport styles from \"./gantt.module.css\";\n\nexport type TaskGanttProps = {\n gridProps: GridProps;\n calendarProps: CalendarProps;\n barProps: TaskGanttContentProps;\n ganttHeight: number;\n scrollY: number;\n scrollX: number;\n};\nexport const TaskGantt: React.FC<TaskGanttProps> = ({\n gridProps,\n calendarProps,\n barProps,\n ganttHeight,\n scrollY,\n scrollX,\n}) => {\n const ganttSVGRef = useRef<SVGSVGElement>(null);\n const horizontalContainerRef = useRef<HTMLDivElement>(null);\n const verticalGanttContainerRef = useRef<HTMLDivElement>(null);\n const newBarProps = { ...barProps, svg: ganttSVGRef, ganttHeight, scrollY };\n\n const buffer = barProps.rowHeight * 10;\n const visibleStartY = scrollY - buffer;\n const visibleEndY = scrollY + ganttHeight + buffer;\n\n const virtualizer = useVirtualizer({\n count: barProps.tasks.length,\n getScrollElement: () => horizontalContainerRef.current,\n estimateSize: () => barProps.rowHeight,\n overscan: 10\n });\n\n useEffect(() => {\n if (horizontalContainerRef.current) {\n horizontalContainerRef.current.scrollTop = scrollY;\n }\n }, [scrollY]);\n\n useEffect(() => {\n if (verticalGanttContainerRef.current) {\n verticalGanttContainerRef.current.scrollLeft = scrollX;\n }\n }, [scrollX]);\n\n return (\n <div\n className={styles.ganttVerticalContainer}\n ref={verticalGanttContainerRef}\n dir=\"ltr\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={gridProps.svgWidth}\n height={calendarProps.headerHeight}\n fontFamily={barProps.fontFamily}\n >\n <Calendar {...calendarProps} />\n </svg>\n <div\n ref={horizontalContainerRef}\n className={styles.horizontalContainer}\n style={\n ganttHeight\n ? { height: ganttHeight, width: gridProps.svgWidth }\n : { width: gridProps.svgWidth }\n }\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={gridProps.svgWidth}\n height={virtualizer.getTotalSize()}\n fontFamily={barProps.fontFamily}\n ref={ganttSVGRef}\n >\n <Grid\n {...gridProps}\n virtualItems={virtualizer.getVirtualItems()}\n visibleStartY={visibleStartY}\n visibleEndY={visibleEndY}\n />\n <TaskGanttContent\n {...newBarProps}\n visibleStartY={visibleStartY}\n visibleEndY={visibleEndY}\n virtualItems={virtualizer.getVirtualItems()}\n />\n </svg>\n </div>\n </div>\n );\n};\n","import React, { SyntheticEvent, useRef, useEffect } from \"react\";\nimport styles from \"./horizontal-scroll.module.css\";\n\nexport const HorizontalScroll: React.FC<{\n scroll: number;\n svgWidth: number;\n taskListWidth: number;\n rtl: boolean;\n onScroll: (event: SyntheticEvent<HTMLDivElement>) => void;\n}> = ({ scroll, svgWidth, taskListWidth, rtl, onScroll }) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollLeft = scroll;\n }\n }, [scroll]);\n\n return (\n <div\n dir=\"ltr\"\n style={{\n margin: rtl\n ? `0px ${taskListWidth}px 0px 0px`\n : `0px 0px 0px ${taskListWidth}px`,\n }}\n className={styles.scrollWrapper}\n onScroll={onScroll}\n ref={scrollRef}\n >\n <div style={{ width: svgWidth }} className={styles.scroll} />\n </div>\n );\n};\n","import React, {\n useState,\n SyntheticEvent,\n useRef,\n useEffect,\n useMemo,\n} from \"react\";\nimport { ViewMode, GanttProps, Task } from \"../../types/public-types\";\nimport { GridProps } from \"../grid/grid\";\nimport { ganttDateRange, seedDates } from \"../../helpers/date-helper\";\nimport { CalendarProps } from \"../calendar/calendar\";\nimport { TaskGanttContentProps } from \"./task-gantt-content\";\nimport { TaskListHeaderDefault } from \"../task-list/task-list-header\";\nimport { TaskListTableDefault } from \"../task-list/task-list-table\";\nimport { StandardTooltipContent, Tooltip } from \"../other/tooltip\";\nimport { VerticalScroll } from \"../other/vertical-scroll\";\nimport { TaskListProps, TaskList } from \"../task-list/task-list\";\nimport { TaskGantt } from \"./task-gantt\";\nimport { BarTask } from \"../../types/bar-task\";\nimport { convertToBarTasks } from \"../../helpers/bar-helper\";\nimport { GanttEvent } from \"../../types/gantt-task-actions\";\nimport { DateSetup } from \"../../types/date-setup\";\nimport { HorizontalScroll } from \"../other/horizontal-scroll\";\nimport hScrollStyles from \"../other/horizontal-scroll.module.css\";\nimport { removeHiddenTasks, sortTasks } from \"../../helpers/other-helper\";\nimport styles from \"./gantt.module.css\";\n\nexport const Gantt: React.FunctionComponent<GanttProps> = ({\n tasks,\n leafTasks = [],\n scheduleType = \"main\",\n startDate = new Date(),\n endDate = new Date(),\n headerHeight = 50,\n columnWidth = 60,\n listCellWidth = \"155px\",\n rowHeight = 50,\n ganttHeight = 0,\n viewMode = ViewMode.Day,\n preStepsCount = 1,\n locale = \"en-US\",\n barFill = 60,\n barCornerRadius = 3,\n barProgressColor = \"#a3a3ff\",\n barProgressSelectedColor = \"#8282f5\",\n barBackgroundColor = \"#b8c2cc\",\n barBackgroundSelectedColor = \"#aeb8c2\",\n projectProgressColor = \"#7db59a\",\n projectProgressSelectedColor = \"#59a985\",\n projectBackgroundColor = \"#fac465\",\n projectBackgroundSelectedColor = \"#f7bb53\",\n milestoneBackgroundColor = \"#f1c453\",\n milestoneBackgroundSelectedColor = \"#f29e4c\",\n rtl = false,\n handleWidth = 8,\n timeStep = 300000,\n arrowColor = \"grey\",\n fontFamily = \"Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue\",\n fontSize = \"14px\",\n arrowIndent = 20,\n todayColor = \"rgba(252, 248, 227, 0.5)\",\n weekendColor = \"#e6e4e4\",\n viewDate,\n TooltipContent = StandardTooltipContent,\n TaskListHeader = TaskListHeaderDefault,\n TaskListTable = TaskListTableDefault,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n onSelect,\n onExpanderClick,\n onMultiSelect,\n taskLabelRenderer,\n delayToRender = 500,\n shouldNotShowLoadingOverlay=true,\n projectCalendar,\n onCalendarError,\n sliderTime,\n}) => {\n // Derive calendar from tasks first; fall back to explicit projectCalendar prop\n const effectiveCalendar = tasks.find(t => t.calender)?.calender ?? projectCalendar;\n const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const isDraggingTable = useRef(false);\n const dragStartX = useRef(0);\n const dragStartWidth = useRef(0);\n const dragMaxWidth = useRef<number>(Infinity);\n const [tableContainerWidth, setTableContainerWidth] = useState<number | null>(null);\n const tableInnerScrollRef = useRef<HTMLDivElement>(null);\n const tableHScrollRef = useRef<HTMLDivElement>(null);\n const [tableScrollableWidth, setTableScrollableWidth] = useState(0);\n const [dateSetup, setDateSetup] = useState<DateSetup>(() => {\n const [startDateRange, endDateRange] = ganttDateRange(\n tasks,\n viewMode,\n preStepsCount\n );\n if (scheduleType === \"lookAhead\") {\n return { viewMode, dates: seedDates(startDate, endDate, viewMode) };\n }\n return {\n viewMode,\n dates: seedDates(startDateRange, endDateRange, viewMode),\n };\n });\n const [currentViewDate, setCurrentViewDate] = useState<Date | undefined>(\n undefined\n );\n\n const [taskListWidth, setTaskListWidth] = useState(0);\n\n useEffect(() => {\n if (tableInnerScrollRef.current) {\n setTableScrollableWidth(tableInnerScrollRef.current.scrollWidth);\n }\n }, [taskListWidth, listCellWidth]);\n\n const handleTableResizeMouseDown = (e: React.MouseEvent) => {\n isDraggingTable.current = true;\n dragStartX.current = e.clientX;\n dragStartWidth.current = tableContainerWidth ?? (taskListRef.current?.offsetWidth ?? 0);\n // Cap right-drag at the table's natural content width to prevent white space\n dragMaxWidth.current = tableInnerScrollRef.current?.scrollWidth ?? Math.max(100, (wrapperRef.current?.offsetWidth ?? Infinity) - 200);\n e.preventDefault();\n };\n\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n if (!isDraggingTable.current) return;\n const newWidth = Math.min(dragMaxWidth.current, Math.max(100, dragStartWidth.current + (e.clientX - dragStartX.current)));\n setTableContainerWidth(newWidth);\n setTaskListWidth(newWidth);\n };\n const onMouseUp = () => {\n isDraggingTable.current = false;\n };\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n };\n }, []);\n const [svgContainerWidth, setSvgContainerWidth] = useState(0);\n const [svgContainerHeight, setSvgContainerHeight] = useState(ganttHeight);\n const [barTasks, setBarTasks] = useState<BarTask[]>([]);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n const [ganttEvent, setGanttEvent] = useState<GanttEvent>({\n action: \"\",\n });\n\n // Directly update a single bar task — called from TaskGanttContent on drag end\n // to sync barTasks to the final drag position before ganttEvent is cleared\n const handleBarTasksUpdate = (task: BarTask) => {\n setBarTasks(prev => prev.map(t => (t.id === task.id ? task : t)));\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 // Expand columns to fill available space; fall back to prop value (min) so scroll kicks in when content is wider\n // Math.ceil ensures svgWidth >= svgContainerWidth so there is no pixel gap on the right edge\n const effectiveColumnWidth = useMemo(() => {\n if (svgContainerWidth <= 0 || dateSetup.dates.length <= 0) return columnWidth;\n return Math.max(columnWidth, Math.ceil(svgContainerWidth / dateSetup.dates.length));\n }, [columnWidth, svgContainerWidth, dateSetup.dates.length]);\n\n const svgWidth =\n effectiveColumnWidth < 55\n ? (dateSetup.dates.length + 0.5) * effectiveColumnWidth\n : dateSetup.dates.length * effectiveColumnWidth;\n const ganttFullHeight = useMemo(() => barTasks.length * rowHeight, [barTasks.length, rowHeight]);\n\n const [scrollY, setScrollY] = useState(0);\n const [scrollX, setScrollX] = useState(-1);\n const [ignoreScrollEvent, setIgnoreScrollEvent] = useState(false);\n const [lastTouchX, setLastTouchX] = useState(0);\n const [lastTouchY, setLastTouchY] = useState(0);\n const [isProcessing, setIsProcessing] = useState(false);\n\n const buffer = rowHeight * 10;\n const visibleStartY = scrollY - buffer;\n const visibleEndY = scrollY + ganttHeight + buffer;\n useEffect(() => {\n if (scheduleType === \"lookAhead\" && startDate && endDate) {\n setDateSetup({\n viewMode,\n dates: seedDates(startDate, endDate, viewMode),\n });\n }\n }, [startDate, endDate]);\n // task change events\n useEffect(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if(!shouldNotShowLoadingOverlay){ \n setIsProcessing(true);\n }\n debounceRef.current = setTimeout(() => {\n let filteredTasks: Task[];\n // if (onExpanderClick) {\n filteredTasks = removeHiddenTasks(tasks);\n // } else {\n // filteredTasks = tasks;\n // }\n filteredTasks = filteredTasks.sort(sortTasks);\n const [startDateRange, endDateRange] = ganttDateRange(\n filteredTasks,\n viewMode,\n preStepsCount,\n effectiveCalendar?.quarter_start ?? 0\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 * effectiveColumnWidth);\n }\n }\n if (scheduleType !== \"lookAhead\") {\n setDateSetup({\n dates: seedDates(startDateRange, endDateRange, viewMode),\n viewMode,\n });\n }\n\n let [primaryPath, secondaryPath] = getCriticalPaths(leafTasks);\n\n // Color the paths.\n uncolorAll(tasks);\n if (scheduleType !== \"lookAhead\") {\n colorPath(secondaryPath, \"#00ff00\", tasks, \"secondary\");\n colorPath(primaryPath, \"#ff0000\", tasks, \"primary\");\n }\n setBarTasks(\n convertToBarTasks(\n filteredTasks,\n newDates,\n effectiveColumnWidth,\n rowHeight,\n taskHeight,\n barCornerRadius,\n handleWidth,\n rtl,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor\n )\n );\n setIsProcessing(false);\n }, delayToRender);\n }, [\n tasks,\n viewMode,\n preStepsCount,\n rowHeight,\n barCornerRadius,\n taskHeight,\n handleWidth,\n barProgressColor,\n barProgressSelectedColor,\n barBackgroundColor,\n barBackgroundSelectedColor,\n projectProgressColor,\n projectProgressSelectedColor,\n projectBackgroundColor,\n projectBackgroundSelectedColor,\n milestoneBackgroundColor,\n milestoneBackgroundSelectedColor,\n rtl,\n shouldNotShowLoadingOverlay,\n effectiveColumnWidth,\n effectiveCalendar,\n ]);\n // for debug purpose\n useEffect(() => {\n return () => {\n clearTimeout(debounceRef.current!);\n };\n }, []);\n\n useEffect(() => {\n if (\n viewMode === dateSetup.viewMode &&\n ((viewDate && !currentViewDate) ||\n (viewDate && currentViewDate?.valueOf() !== viewDate.valueOf()))\n ) {\n const dates = dateSetup.dates;\n const index = dates.findIndex(\n (d, i) =>\n viewDate.valueOf() >= d.valueOf() &&\n i + 1 !== dates.length &&\n viewDate.valueOf() < dates[i + 1].valueOf()\n );\n if (index === -1) {\n return;\n }\n setCurrentViewDate(viewDate);\n setScrollX(effectiveColumnWidth * index);\n }\n }, [\n viewDate,\n effectiveColumnWidth,\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 }\n // \"move\" / \"start\" / \"end\" / \"progress\": barTasks is updated on drag end\n // via onBarTasksUpdate callback (called from TaskGanttContent handleMouseUp).\n // During drag, task-gantt-content renders directly from ganttEvent.changedTask\n // for instant real-time updates without the extra render cycle.\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 // Subtract the 20px column-resize divider so the gantt SVG fills the remaining space exactly\n setSvgContainerWidth(wrapperRef.current.offsetWidth - taskListWidth - 20);\n }\n }, [wrapperRef, taskListWidth]);\n\n useEffect(() => {\n if (ganttHeight) {\n setSvgContainerHeight(ganttHeight + headerHeight);\n } else {\n setSvgContainerHeight(tasks.length * rowHeight + headerHeight);\n }\n }, [ganttHeight, tasks, headerHeight, rowHeight]);\n\n // scroll events\n useEffect(() => {\n const handleWheel = (event: WheelEvent) => {\n if (event.shiftKey || event.deltaX) {\n const scrollMove = event.deltaX ? event.deltaX : event.deltaY;\n let newScrollX = scrollX + scrollMove;\n if (newScrollX < 0) {\n newScrollX = 0;\n } else if (newScrollX > svgWidth) {\n newScrollX = svgWidth;\n }\n setScrollX(newScrollX);\n event.preventDefault();\n } else if (ganttHeight) {\n let newScrollY = scrollY + event.deltaY;\n if (newScrollY < 0) {\n newScrollY = 0;\n } else if (newScrollY > ganttFullHeight - ganttHeight) {\n newScrollY = ganttFullHeight - ganttHeight;\n }\n if (newScrollY !== scrollY) {\n setScrollY(newScrollY);\n event.preventDefault();\n }\n }\n\n setIgnoreScrollEvent(true);\n };\n\n const handleLogTouch = (event: TouchEvent) => {\n if (event) {\n setLastTouchX(event.changedTouches[0].pageX);\n setLastTouchY(event.changedTouches[0].pageY);\n }\n };\n\n const handleTouch = (event: TouchEvent) => {\n if (event.changedTouches[0].pageX || event.changedTouches[0].pageY) {\n let deltaX = event.changedTouches[0].pageX - lastTouchX;\n let deltaY = event.changedTouches[0].pageY - lastTouchY;\n\n // if (lastTouchX > 0 && lastTouchY > 0) {\n if (Math.abs(deltaX) > Math.abs(deltaY)) {\n let newScrollX = scrollX - deltaX / 3;\n if (newScrollX > 0 && newScrollX < 1600) {\n setScrollX(newScrollX);\n } else if (newScrollX < 0) {\n setScrollX(0);\n } else {\n setScrollX(1600);\n }\n } else {\n let newScrollY = scrollY - deltaY;\n if (newScrollY > 0 && newScrollY < 1600) {\n setScrollY(newScrollY);\n } else if (newScrollY < 0) {\n setScrollY(0);\n } else {\n setScrollY(1600);\n }\n }\n // }\n\n setLastTouchX(event.changedTouches[0].pageX);\n setLastTouchY(event.changedTouches[0].pageY);\n }\n\n // if (event.changedTouches[0].pageX) {\n // const scrollMove = event.changedTouches[0].pageX ? event.changedTouches[0].pageX : event.changedTouches[0].pageY;\n // let newScrollX = scrollX + scrollMove;\n // if (newScrollX < 0) {\n // newScrollX = 0;\n // } else if (newScrollX > svgWidth) {\n // newScrollX = svgWidth;\n // }\n // setScrollX(newScrollX);\n // event.preventDefault();\n // } else if (ganttHeight) {\n // let newScrollY = scrollY + event.changedTouches[0].pageY;\n // if (newScrollY < 0) {\n // newScrollY = 0;\n // } else if (newScrollY > ganttFullHeight - ganttHeight) {\n // newScrollY = ganttFullHeight - ganttHeight;\n // }\n // if (newScrollY !== scrollY) {\n // setScrollY(newScrollY);\n // event.preventDefault();\n // }\n // }\n\n setIgnoreScrollEvent(true);\n };\n\n // subscribe if scroll is necessary\n wrapperRef.current?.addEventListener(\"wheel\", handleWheel, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchmove\", handleTouch, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchstart\", handleLogTouch, {\n passive: false,\n });\n wrapperRef.current?.addEventListener(\"touchend\", handleLogTouch, {\n passive: false,\n });\n return () => {\n wrapperRef.current?.removeEventListener(\"wheel\", handleWheel);\n wrapperRef.current?.removeEventListener(\"touchmove\", handleTouch);\n wrapperRef.current?.removeEventListener(\"touchend\", handleLogTouch);\n wrapperRef.current?.removeEventListener(\"touchend\", handleLogTouch);\n };\n }, [\n wrapperRef,\n scrollY,\n scrollX,\n ganttHeight,\n svgWidth,\n rtl,\n ganttFullHeight,\n ]);\n\n const handleScrollY = (event: SyntheticEvent<HTMLDivElement>) => {\n if (scrollY !== event.currentTarget.scrollTop && !ignoreScrollEvent) {\n setScrollY(event.currentTarget.scrollTop);\n setIgnoreScrollEvent(true);\n } else {\n setIgnoreScrollEvent(false);\n }\n };\n\n const handleScrollX = (event: SyntheticEvent<HTMLDivElement>) => {\n if (scrollX !== event.currentTarget.scrollLeft) {\n setScrollX(event.currentTarget.scrollLeft);\n setIgnoreScrollEvent(true);\n } else {\n setIgnoreScrollEvent(false);\n }\n };\n\n\n /**\n * Handles arrow keys events and transform it to new scroll\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n event.preventDefault();\n let newScrollY = scrollY;\n let newScrollX = scrollX;\n let isX = true;\n switch (event.key) {\n case \"Down\": // IE/Edge specific value\n case \"ArrowDown\":\n newScrollY += rowHeight;\n isX = false;\n break;\n case \"Up\": // IE/Edge specific value\n case \"ArrowUp\":\n newScrollY -= rowHeight;\n isX = false;\n break;\n case \"Left\":\n case \"ArrowLeft\":\n newScrollX -= effectiveColumnWidth;\n break;\n case \"Right\": // IE/Edge specific value\n case \"ArrowRight\":\n newScrollX += effectiveColumnWidth;\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: effectiveColumnWidth,\n svgWidth,\n tasks: tasks,\n scheduleType: scheduleType,\n rowHeight,\n dates: dateSetup.dates,\n todayColor,\n weekendColor,\n rtl,\n visibleStartY,\n visibleEndY,\n projectCalendar: effectiveCalendar,\n viewMode,\n };\n const calendarProps: CalendarProps = {\n dateSetup,\n locale,\n viewMode,\n headerHeight,\n columnWidth: effectiveColumnWidth,\n fontFamily,\n fontSize,\n rtl,\n projectCalendar: effectiveCalendar,\n };\n const barProps: TaskGanttContentProps = {\n tasks: barTasks,\n dates: dateSetup.dates,\n ganttEvent,\n selectedTask,\n rowHeight,\n taskHeight,\n columnWidth: effectiveColumnWidth,\n arrowColor,\n timeStep,\n fontFamily,\n fontSize,\n arrowIndent,\n svgWidth,\n rtl,\n setGanttEvent,\n setFailedTask,\n setSelectedTask: handleSelectedTask,\n onBarTasksUpdate: handleBarTasksUpdate,\n onDateChange,\n onProgressChange,\n onDoubleClick,\n onClick,\n onDelete,\n onCalendarError,\n projectCalendar: effectiveCalendar,\n visibleStartY,\n visibleEndY,\n sliderTime,\n };\n\n const tableTasks = useMemo(() => {\n return ganttEvent.changedTask\n ? barTasks.map(t => (t.id === ganttEvent.changedTask!.id ? ganttEvent.changedTask! : t))\n : barTasks;\n }, [barTasks, ganttEvent.changedTask]);\n\n const tableProps: TaskListProps = {\n rowHeight,\n rowWidth: listCellWidth,\n fontFamily,\n fontSize,\n tasks: tableTasks,\n leafTasks,\n scheduleType,\n locale,\n headerHeight,\n scrollY,\n ganttHeight,\n horizontalContainerClass: styles.horizontalContainer,\n selectedTask,\n taskListRef,\n setSelectedTask: handleSelectedTask,\n onExpanderClick: handleExpanderClick,\n onDoubleClick,\n TaskListHeader,\n TaskListTable,\n taskLabelRenderer,\n onMultiSelect,\n containerWidth: tableContainerWidth ?? undefined,\n innerScrollRef: tableInnerScrollRef,\n };\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n className={styles.wrapper}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n ref={wrapperRef}\n >\n {listCellWidth && <TaskList {...tableProps} />}\n {listCellWidth && scheduleType === \"main\" && (\n <div\n style={{\n width: \"20px\",\n cursor: \"col-resize\",\n backgroundColor: \"#e0e0e0\",\n flexShrink: 0,\n zIndex: 1,\n alignSelf: \"stretch\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n userSelect: \"none\",\n fontSize: \"10px\",\n color: \"#666\",\n letterSpacing: \"-1px\",\n }}\n onMouseDown={handleTableResizeMouseDown}\n >\n &#9668;|&#9658;\n </div>\n )}\n <TaskGantt\n gridProps={gridProps}\n calendarProps={calendarProps}\n barProps={barProps}\n ganttHeight={ganttHeight}\n scrollY={scrollY}\n scrollX={scrollX}\n />\n {ganttEvent.changedTask && (\n <Tooltip\n arrowIndent={arrowIndent}\n rowHeight={rowHeight}\n svgContainerHeight={svgContainerHeight}\n svgContainerWidth={svgContainerWidth}\n fontFamily={fontFamily}\n fontSize={fontSize}\n scrollX={scrollX}\n scrollY={scrollY}\n task={ganttEvent.changedTask}\n type={ganttEvent.type as string}\n headerHeight={headerHeight}\n taskListWidth={taskListWidth}\n TooltipContent={TooltipContent}\n rtl={rtl}\n svgWidth={svgWidth}\n isDragging={\n ganttEvent.action === \"move\" ||\n ganttEvent.action === \"start\" ||\n ganttEvent.action === \"end\" ||\n ganttEvent.action === \"progress\"\n }\n />\n )}\n <VerticalScroll\n ganttFullHeight={ganttFullHeight}\n ganttHeight={ganttHeight}\n headerHeight={headerHeight}\n scroll={scrollY}\n onScroll={handleScrollY}\n rtl={rtl}\n />\n </div>\n {isProcessing && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: \"20px\",\n zIndex: 9999,\n pointerEvents: \"none\", // ← allows scrolling & interaction underneath!\n borderRadius: \"8px\",\n }}\n >\n <span\n style={{\n fontSize: \"24px\",\n fontWeight: \"600\",\n color: \"#cc0404\",\n fontFamily: \"Arial, sans-serif\",\n }}\n >\n Loading...\n </span>\n <div className={styles.spinner} />\n </div>\n )}\n <div style={{ display: \"flex\" }}>\n {listCellWidth && (\n <div\n ref={tableHScrollRef}\n className={hScrollStyles.scrollWrapper}\n style={{ width: taskListWidth + 4, flexShrink: 0 }}\n onScroll={(e: SyntheticEvent<HTMLDivElement>) => {\n if (tableInnerScrollRef.current) {\n tableInnerScrollRef.current.scrollLeft = e.currentTarget.scrollLeft;\n }\n }}\n >\n <div style={{ width: tableScrollableWidth }} />\n </div>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <HorizontalScroll\n svgWidth={svgWidth}\n taskListWidth={0}\n scroll={scrollX}\n rtl={rtl}\n onScroll={handleScrollX}\n />\n </div>\n </div>\n </div>\n );\n};\n\n// This is based on the visit function from https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search\nexport function topologicalOrderingHelper(\n taskID: string,\n taskMap: {},\n sortedTaskList: string[]\n) {\n if (!taskMap[taskID]) return true; // dependency pointed to an ID not present in leafTasks. ignore the dependency\n if (taskMap[taskID].finished) return true;\n if (taskMap[taskID].started) {\n console.log(\"Cycle involving \" + taskID);\n return false; // Error: dependencies made a cycle\n }\n\n taskMap[taskID].started = true;\n\n let task: Task = taskMap[taskID].task;\n if (task.dependencies)\n for (let i = 0; i < task.dependencies.length; i++) {\n let successVal = topologicalOrderingHelper(\n task.dependencies[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return false; // Error: an error came from deeper recursive call\n }\n\n taskMap[taskID].finished = true;\n\n sortedTaskList.push(taskID);\n return true;\n}\nexport function getCriticalPaths(leafTasks: Task[]) {\n // Map ids to tasks for faster access.\n // O(n) space, O(n) time to add all from list, O(1) time for each access.\n let taskMap = {};\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id] = { task: leafTasks[i] };\n\n // Sort the tasks so each dependent is listed after its dependencies.\n // O(num vertices + num edges)\n let sortedTaskList: string[] = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let successVal = topologicalOrderingHelper(\n leafTasks[i].id,\n taskMap,\n sortedTaskList\n );\n if (!successVal) return [[], []]; // Abort: there was a cycle\n }\n\n // Map tasks to their dependents for faster access.\n // Dependencies are already easy enough to access, but not dependents.\n // O(num vertices + num edges)\n for (let i = 0; i < leafTasks.length; i++)\n taskMap[leafTasks[i].id].dependents = [];\n for (let i = 0; i < leafTasks.length; i++) {\n let task = leafTasks[i];\n if (task.dependencies)\n for (let j = 0; j < task.dependencies.length; j++)\n taskMap[task.dependencies[j].id]?.dependents.push(task.id);\n }\n\n // Compute critical paths, in reverse order to handle dependents before dependencies.\n // O(num vertices + num edges)\n for (let i = sortedTaskList.length - 1; i >= 0; i--)\n computeCriticalPath(sortedTaskList[i], taskMap);\n\n // Now each task has a list of all possible paths and their lengths\n // We want to combine and sort all these entries so we can trace any number\n // of critical paths by following the best available chain\n // O(num tasks)\n let taskChainList = [];\n for (let i = 0; i < sortedTaskList.length; i++) {\n for (let j = 0; j < taskMap[sortedTaskList[i]].paths.length; j++) {\n taskChainList.push(taskMap[sortedTaskList[i]].paths[j]);\n }\n }\n\n // const printedList = taskChainList.map((elem) => {\n // const newElem = { ...elem };\n // newElem.duration = Math.round(elem.duration / 86400000);\n // return newElem;\n // })\n\n // console.debug(printedList);\n\n if (taskChainList.length > 0) {\n\n // Sort by duration (descending)\n // O(n log n)\n taskChainList.sort((a, b) => b.duration - a.duration);\n\n // Select the best next option to build the best path\n let primaryLeaf = taskChainList[0].parent;\n let primaryPath = [];\n\n while (primaryLeaf !== undefined) {\n\n // Add this task to the primary path\n primaryPath.push(taskMap[primaryLeaf].task);\n\n // If this task has no dependents, it is a leaf and the primary path ends here\n if (taskMap[primaryLeaf].paths.length === 0) {\n primaryLeaf = undefined;\n break;\n }\n\n // Check all of this task's paths and select longest duration as next\n let primaryDuration = taskMap[primaryLeaf].paths[0].duration;\n let nextPath = taskMap[primaryLeaf].paths[0];\n for (let i = 1; i < taskMap[primaryLeaf].paths.length; i++) {\n let newDuration = taskMap[primaryLeaf].paths[i].duration;\n if (newDuration > primaryDuration) {\n nextPath = taskMap[primaryLeaf].paths[i]\n primaryDuration = newDuration;\n }\n }\n\n // Disqualify this path from being selected by second best path.\n nextPath.visited = true;\n\n // Follow this path down to the next task\n primaryLeaf = nextPath.task;\n\n }\n\n\n // Select the best next option from the unvisited tasks to build the second best path\n let secondaryLeaf = taskChainList[0].parent;\n\n for (let i = 0; i < taskChainList.length; i++) {\n if (!taskChainList[i].visited) {\n secondaryLeaf = taskChainList[i].parent;\n break;\n }\n }\n\n let secondaryPath = [];\n\n while (secondaryLeaf !== undefined) {\n\n // Add this task to the secondary path\n secondaryPath.push(taskMap[secondaryLeaf].task);\n\n // If this task has no dependents, it is a leaf and the secondary path ends here\n if (taskMap[secondaryLeaf].paths.length === 0) {\n secondaryLeaf = undefined;\n break;\n }\n\n // Check all of this task's paths and select longest duration as next\n let secondaryDuration = taskMap[secondaryLeaf].paths[0].duration;\n let nextPath = taskMap[secondaryLeaf].paths[0];\n\n // If default path has already been visited, discredit it\n if (nextPath.visited) secondaryDuration = 0;\n\n for (let i = 1; i < taskMap[secondaryLeaf].paths.length; i++) {\n let newDuration = taskMap[secondaryLeaf].paths[i].duration;\n // Extra check here to ensure path has not already been used\n if (newDuration > secondaryDuration && !taskMap[secondaryLeaf].paths[i].visited) {\n nextPath = taskMap[secondaryLeaf].paths[i]\n secondaryDuration = newDuration;\n }\n }\n\n // If path we ended up with has already been visited, this task is a leaf node\n if (nextPath.visited) {\n break;\n }\n\n // Disqualify this path from being selected by third best path.\n nextPath.visited = true;\n\n // Follow this path down to the next task\n secondaryLeaf = nextPath.task;\n\n }\n\n return [primaryPath, secondaryPath];\n }\n\n return [[], []];\n}\n\nexport function computeCriticalPath(taskID: string, taskMap: {}) {\n let task: Task = taskMap[taskID].task;\n let dependents = taskMap[taskID].dependents;\n\n taskMap[taskID].start = task.start.getTime();\n taskMap[taskID].end = task.end.getTime();\n taskMap[taskID].paths = []; // Each task will track length of all dep paths\n for (let j = 0; j < dependents.length; j++) {\n\n let depStart = taskMap[dependents[j]].task.start.getTime();\n let depEnd = taskMap[dependents[j]].task.end.getTime();\n\n // Get the duration of the dep task\n let depDuration = depEnd - depStart;\n\n // Subtract off days and holidays from duration\n let startWeek = Math.floor(((depStart / 86400000) + 4) / 7);\n let endWeek = Math.floor(((depEnd / 86400000) + 4) / 7);\n let offTime = 0;\n\n // Off Day Calculation\n for (let d = 0; d < taskMap[dependents[j]].task.calendar?.off_days?.length || 0; d++) {\n for (let w = startWeek; w <= endWeek; w++) {\n let dayOfTheWeek = taskMap[dependents[j]].task.calendar.off_days[d];\n // Check each week to see if day is within duration\n let offDay = 86400000 * ((7 * w - 4) + dayOfTheWeek);\n // If so (and time isn't part of overlap with parent, which will be accounted for later), ...\n if (offDay >= depStart && offDay <= depEnd && (offDay > taskMap[taskID].end || taskMap[taskID].task.calendar.off_days.includes(dayOfTheWeek))) {\n // ...mark a day's worth of time to be subtracted from total duration\n offTime += 86400000;\n }\n }\n }\n\n // Holiday Calculation\n for (let h = 0; h < taskMap[dependents[j]].task.calendar?.holidays?.length || 0; h++) {\n // Check to see if holiday is within duration\n let holiday = taskMap[dependents[j]].task.calendar.holidays[h];\n // If so (and time isn't part of overlap with parent, which will be accounted for later), ...\n if (holiday >= depStart && holiday <= depEnd) {\n // ...mark a day's worth of time to be subtracted from total duration\n offTime += 86400000;\n }\n }\n\n // subtracting any overlap in days with its parent\n let overlap = Math.max((taskMap[taskID].end - depStart), 0);\n\n // Inherit all paths known by dep task, adding this task's length to the tracked lengths\n let paths = taskMap[dependents[j]].paths;\n for (let k = 0; k < paths.length; k++) {\n\n let totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap - offTime + paths[k].duration\n\n if (taskMap[taskID].paths.length < 2) {\n taskMap[taskID].paths.push({\n duration: totalDuration,\n task: dependents[j],\n parent: taskID,\n visited: false\n });\n } else if (totalDuration > taskMap[taskID].paths[0].duration) {\n taskMap[taskID].paths[0].duration = totalDuration;\n taskMap[taskID].paths[0].task = dependents[j];\n taskMap[taskID].paths[0].parent = taskID;\n taskMap[taskID].paths[0].visited = false;\n } else if (totalDuration > taskMap[taskID].paths[1].duration) {\n taskMap[taskID].paths[1].duration = totalDuration;\n taskMap[taskID].paths[1].task = dependents[j];\n taskMap[taskID].paths[1].parent = taskID;\n taskMap[taskID].paths[1].visited = false;\n }\n\n }\n\n // Only add immediate child path if child itself has no children\n if (paths.length === 0) {\n let immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap - offTime;\n\n // Create a new path that ends at the immediate dep task\n if (taskMap[taskID].paths.length < 2) {\n taskMap[taskID].paths.push({\n duration: immediateChildDuration,\n task: dependents[j],\n parent: taskID,\n visited: false\n });\n } else if (immediateChildDuration > taskMap[taskID].paths[0].duration) {\n taskMap[taskID].paths[0].duration = immediateChildDuration;\n taskMap[taskID].paths[0].task = dependents[j];\n taskMap[taskID].paths[0].parent = taskID;\n taskMap[taskID].paths[0].visited = false;\n } else if (immediateChildDuration > taskMap[taskID].paths[1].duration) {\n taskMap[taskID].paths[1].duration = immediateChildDuration;\n taskMap[taskID].paths[1].task = dependents[j];\n taskMap[taskID].paths[1].parent = taskID;\n taskMap[taskID].paths[1].visited = false;\n }\n }\n }\n}\n\nexport function uncolorAll(tasks: Task[]) {\n tasks.forEach(task => {\n if (task.styles) delete task.styles.criticalPathColor;\n delete task.criticalPathArrows;\n });\n}\n\nexport function colorPath(path: Task[], color: string, tasks: Task[],criticalPathType: string) {\n // Color boxes\n for (let i = 0; i < path.length; i++) {\n // For this task in the path, find the most immediate ancestor in tasks.\n let longestIDLength = 0;\n let longestTask;\n for (let j = 0; j < tasks.length; j++) {\n if (path[i].id === tasks[j].id) {\n longestTask = tasks[j];\n break;\n }\n if (\n path[i].id.startsWith(tasks[j].id + \".\") &&\n tasks[j].id.length > longestIDLength\n ) {\n longestIDLength = tasks[j].id.length;\n longestTask = tasks[j];\n }\n }\n // If some ancestor is found, color it.\n if (longestTask) {\n let styles = longestTask.styles ?? {};\n styles.criticalPathColor = color;\n longestTask.styles = styles;\n }\n }\n // Color arrows\n for (let i = 0; i + 1 < path.length; i++) {\n // Items in the critical paths came from leafTasks, but we need to change the versions from tasks instead.\n let taskFromTasks;\n for (let j = 0; j < tasks.length; j++)\n if (path[i].id === tasks[j].id) {\n taskFromTasks = tasks[j];\n break;\n }\n if (taskFromTasks) {\n let arrows = taskFromTasks.criticalPathArrows;\n // Create the arrows list if it does not exist.\n if (!arrows) arrows = [];\n // If the arrow is already colored, replace its color in the list.\n let arrow = arrows.find(arrow => arrow.taskId === path[i + 1].id);\n if (arrow) {\n arrow.arrowColor = color;\n arrow.criticalPathType = criticalPathType;\n }\n // Else, add the new colored arrow to the list.\n else arrows.push({ taskId: path[i + 1].id, arrowColor: color, criticalPathType: criticalPathType });\n taskFromTasks.criticalPathArrows = arrows;\n }\n }\n}\nexport const getParentWbs = (wbs: string): string | undefined => {\n const segments = wbs.split('.');\n if (segments.length <= 1) return undefined; // Top-level task has no parent\n return segments.slice(0, -1).join('.'); // Remove last segment\n};\n"],"names":["ViewMode","intlDTCache","getCachedDateTimeFormat","locString","opts","key","JSON","stringify","dtf","Intl","DateTimeFormat","addToDate","date","quantity","scale","newDate","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","startOfDate","scores","shouldReset","_scale","maxScore","indexOf","getFiscalQuarterStartDate","quarterStart","month","offset","qStartMonth","Math","floor","year","ganttDateRange","tasks","viewMode","preStepsCount","newStartDate","start","getTime","newEndDate","end","task","actualStart","actualEnd","Year","Quarter","endQStart","Month","Week","getMonday","Day","QuarterDay","HalfDay","Hour","seedDates","startDate","endDate","currentDate","dates","push","getLocalDayOfWeek","locale","format","bottomValue","weekday","replace","toLocaleUpperCase","day","getDay","diff","setDate","TaskListHeaderDefault","headerHeight","fontFamily","fontSize","rowWidth","scheduleType","allSelected","onSelectAll","React","className","styles","ganttTable","style","ganttTable_Header","height","ganttTable_HeaderItem","minWidth","parseInt","maxWidth","type","checked","onChange","e","target","ganttTable_HeaderSeparator","marginTop","title","Fragment","localeDateStringCache","toLocaleDateStringFactory","dateTimeOptions","toString","lds","toLocaleDateString","TaskListTableDefault","rowHeight","leafTasks","onExpanderClick","selectedTasks","onTaskSelect","taskLabelRenderer","t","name","virtualItems","useMemo","leafTaskIds","Set","map","id","hasSelectedAncestor","taskId","selectedSet","allTasks","find","parentWbs","getParentWbs","has","itemsToRender","_","index","size","lane","measureElement","taskListWrapper","vi","expanderSymbol","hideChildren","isSelected","includes","isAncestorSelected","position","top","left","width","transform","taskListMilestoneRow","taskListLookAheadRow","taskListTableRow","taskListCell","taskListText","display","justifyContent","alignItems","paddingLeft","paddingRight","disabled","taskListNameWrapper","depth","taskListExpander","onClick","taskListExpanderPlaceholder","now","color","optionalId","percentComplete","progress","plannedDuration","remainingDuration","round","actualDuration","endRef","ceil","durationType","Tooltip","rtl","svgContainerHeight","svgContainerWidth","scrollX","scrollY","arrowIndent","taskListWidth","TooltipContent","isDragging","tooltipRef","useRef","useState","relatedY","setRelatedY","relatedX","setRelatedX","useEffect","current","tooltipHeight","offsetHeight","tooltipWidth","offsetWidth","newRelatedY","newRelatedX","x1","x2","tooltipLeftmostPoint","actualx2","fullChartWidth","actualx1","tooltipLowerPoint","ref","tooltipDetailsContainer","tooltipDetailsContainerHidden","StandardTooltipContent","computedPlannedDuration","max","computedActualDuration","tooltipDefaultContainer","tooltipDefaultContainerParagraph","VerticalScroll","scroll","ganttHeight","ganttFullHeight","onScroll","scrollRef","scrollTop","marginLeft","marginRight","TaskList","selectedTask","setSelectedTask","taskListRef","horizontalContainerClass","TaskListHeader","TaskListTable","onMultiSelect","containerWidth","innerScrollRef","horizontalContainerRef","setSelectedTasks","pendingTaskSelect","setPendingTaskSelect","prevSelectedTasksRef","expandedTasks","virtualizer","useVirtualizer","count","length","getScrollElement","estimateSize","overscan","selectedTaskObjects","filter","newSelected","forEach","selected","recursiveOpen","descendants","getDescendants","add","d","Array","from","newSelectedArray","children","flatMap","child","c","handleTaskSelect","prev","handleSelectAll","topLevelTasks","headerProps","undefined","selectedTaskId","tableProps","getVirtualItems","overflow","flexShrink","hideScrollbar","overflowX","getTotalSize","parseTimeToMinutes","parts","split","Number","toDateString","y","m","String","padStart","isHoliday","cal","holidays","isOffDay","off_days","getShiftsForDay","shifts","s","getWorkingIntervals","intervals","cursor","setHours","shift","shiftStart","shiftEnd","intervalStart","intervalEnd","snapToWorkingTime","direction","MAX_DAYS","result","attempt","dayStart","currentMins","i","getQuarterNumber","GridBody","svgWidth","columnWidth","todayColor","weekendColor","visibleStartY","visibleEndY","projectCalendar","visibleHeight","items","isDayOff","isTodayColumn","next","step","todayRects","offDayRects","weekStartDay","week_start","x","fill","pEnd","periodMs","ds","de","startFrac","endFrac","min","rw","isDayView","tickLines","tickClass","gridTick","gridTickDashed","y1","y2","rowBackgrounds","rowLines","gridRowLine","isMilestone","rowClass","darkerGridRow","gridRowLookAhead","gridRow","Grid","props","TopPartOfCalendar","value","x1Line","y1Line","y2Line","xText","yText","textAnchor","textAnchorClass","textAnchorStart","textAnchorMiddle","textAnchorEnd","calendarTopTick","calendarTopText","Calendar","dateSetup","shortMonth","toLocaleString","getCalendarValuesForYear","topValues","bottomValues","topDefaultHeight","calendarBottomText","topValue","getCalendarValuesForQuarter","quarter_start","rowH","qNum","monthDate","span","j","getCalendarValuesForMonth","prevDate","prevQNum","isNewQuarter","getCalendarValuesForWeek","weeksCount","getCalendarValuesForDay","isWeekStart","calendarTickSolid","calendarTickDashed","getCalendarValuesForPartOfDay","ticks","hour","getCalendarValuesForHour","displayDate","topPosition","extraValues","r","calendarHeader","Arrow","taskFrom","taskTo","taskHeight","arrowColor","dependencyType","drawPathAndTriangle","path","trianglePoints","strokeWidth","stroke","points","indexCompare","taskToEndY","verticalOffset","minX","plannedSegments","p","actualSegments","candidates","maxX","fromPoint","toPoint","arrowPoints","right","convertToBarTasks","barCornerRadius","handleWidth","barProgressColor","barProgressSelectedColor","barBackgroundColor","barBackgroundSelectedColor","projectProgressColor","projectProgressSelectedColor","projectBackgroundColor","projectBackgroundSelectedColor","milestoneBackgroundColor","milestoneBackgroundSelectedColor","barTasks","convertToBarTask","dependencies","dependence","findIndex","barchild","barChildren","barTask","convertToMilestone","convertToBar","progressStartWidth","progressEndWidth","taskXCoordinateRTL","taskXCoordinate","abs","typeInternal","progressWithByParams","progressWidth","progressX","taskYCoordinate","calender","planEnd","segs","iv","actEnd","backgroundColor","backgroundSelectedColor","progressColor","progressSelectedColor","rotatedHeight","xDate","remainderMillis","percentOfInterval","taskX1","taskX2","getProgressPoint","taskY","point","join","startByX","xStep","steps","additionalXValue","newX","startByActualX","endByX","endByActualX","moveByX","newX1","newX2","moveByActualX","dateByX","taskX","taskDate","timeStep","getTimezoneOffset","handleTaskBySVGMouseEvent","svgX","action","initEventX1Delta","handleTaskBySVGMouseEventForMilestone","handleTaskBySVGMouseEventForBar","changedTask","isChanged","newMoveX1","newMoveX2","isKeyboardEvent","event","removeHiddenTasks","groupedTasks","groupedTask","getChildren","taskList","project","taskChildren","concat","sortTasks","taskA","taskB","orderA","displayOrder","MAX_VALUE","orderB","BarDisplay","segments","onMouseDown","getProcessColor","getBarColor","totalWidth","seg","idx","ry","rx","criticalPathColor","rects","remaining","segW","ratio","pw","taskProgressColor","BarDateHandle","barHandle","BarProgressHandle","Bar","isProgressChangeable","isDateChangeable","onEventStart","progressPoint","handleHeight","plannedSegs","plannedLeftHandleX","plannedRightHandleX","actualSegs","actualLeftHandleX","actualRightHandleX","barWrapper","tabIndex","startProgressWidth","endProgressWidth","BarSmall","Milestone","milestoneWrapper","milestoneBackground","onDoubleClick","Project","barColor","processColor","projectWith","projectLeftTriangle","projectRightTriangle","projectWrapper","projectBackground","projectTop","TaskItem","isDelete","taskItem","setTaskItem","onKeyDown","stopPropagation","onMouseEnter","onMouseLeave","TaskGanttContent","ganttEvent","svg","setGanttEvent","setFailedTask","onBarTasksUpdate","onDateChange","onProgressChange","onDelete","onCalendarError","sliderTime","createSVGPoint","setXStep","setInitEventX1Delta","isMoving","setIsMoving","dateDelta","newXStep","handleMouseMove","preventDefault","clientX","matrixTransform","getScreenCTM","inverse","finalTask","dragType","snapped","delta","actIntervals","actSegs","actDays","planIntervals","planSegs","planDays","handleMouseUp","operationSuccess","originalSelectedTask","newChangedTask","isNotLikeOriginal","dropType","snappedEnd","snappedStart","removeEventListener","addEventListener","handleBarEventStart","error","console","getArrows","isCritical","criticalPathType","_task","_live","criticalTask","criticalPathArrows","arrow","yFrom","yTo","minY","maxY","Boolean","lineX","totalHeight","log","tasksCount","datesRange","pointerEvents","opacity","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","buffer","scrollLeft","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","Gantt","listCellWidth","barFill","viewDate","onSelect","delayToRender","shouldNotShowLoadingOverlay","effectiveCalendar","wrapperRef","isDraggingTable","dragStartX","dragStartWidth","dragMaxWidth","Infinity","tableContainerWidth","setTableContainerWidth","tableInnerScrollRef","tableHScrollRef","tableScrollableWidth","setTableScrollableWidth","startDateRange","endDateRange","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","scrollWidth","handleTableResizeMouseDown","onMouseMove","newWidth","onMouseUp","document","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","debounceRef","handleBarTasksUpdate","failedTask","effectiveColumnWidth","setScrollY","setScrollX","ignoreScrollEvent","setIgnoreScrollEvent","lastTouchX","setLastTouchX","lastTouchY","setLastTouchY","isProcessing","setIsProcessing","clearTimeout","setTimeout","filteredTasks","sort","newDates","reverse","getCriticalPaths","primaryPath","secondaryPath","uncolorAll","colorPath","valueOf","handleWheel","shiftKey","deltaX","scrollMove","deltaY","newScrollX","newScrollY","handleLogTouch","changedTouches","pageX","pageY","handleTouch","passive","handleScrollY","currentTarget","handleScrollX","handleKeyDown","isX","handleSelectedTask","newSelectedTask","oldSelectedTask","handleExpanderClick","tableTasks","wrapper","zIndex","alignSelf","userSelect","letterSpacing","bottom","gap","borderRadius","fontWeight","spinner","hScrollStyles","flex","topologicalOrderingHelper","taskID","taskMap","sortedTaskList","finished","started","successVal","dependents","computeCriticalPath","taskChainList","paths","a","b","duration","primaryLeaf","parent","primaryDuration","nextPath","newDuration","visited","secondaryLeaf","secondaryDuration","depStart","depEnd","depDuration","startWeek","endWeek","offTime","calendar","w","dayOfTheWeek","offDay","h","holiday","overlap","k","totalDuration","immediateChildDuration","longestIDLength","longestTask","startsWith","taskFromTasks","arrows","wbs","slice"],"mappings":"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"}